Fix bug in SkJPEGImageDecoder.

The calculation of actualSampleSize should be rounding up not down.

Change-Id: I2964e92265d9e3b1e8e6843c3d1fc0a1528afd4a
diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp
index 2318a37..29c4b46 100644
--- a/src/images/SkImageDecoder_libjpeg.cpp
+++ b/src/images/SkImageDecoder_libjpeg.cpp
@@ -175,12 +175,10 @@
 
 static bool skip_src_rows_tile(jpeg_decompress_struct* cinfo,
                           huffman_index *index, void* buffer,
-                          int startX, int startY, int width, int height,
                           int count) {
     for (int i = 0; i < count; i++) {
         JSAMPLE* rowptr = (JSAMPLE*)buffer;
-        int row_count = jpeg_read_tile_scanline(cinfo, index, &rowptr,
-                                              startX, startY, width, height);
+        int row_count = jpeg_read_tile_scanline(cinfo, index, &rowptr);
         if (row_count != 1) {
             return false;
         }
@@ -597,11 +595,11 @@
     jpeg_init_read_tile_scanline(cinfo, index->index,
                                  &startX, &startY, &width, &height);
     int skiaSampleSize = recompute_sampleSize(requestedSampleSize, *cinfo);
+    int actualSampleSize = skiaSampleSize * (DCTSIZE / cinfo->min_DCT_scaled_size);
+
     SkBitmap *bitmap = new SkBitmap;
     SkAutoTDelete<SkBitmap> adb(bitmap);
 
-    int actualSampleSize = skiaSampleSize * cinfo->image_width / cinfo->output_width;
-
 #ifdef ANDROID_RGB
     /* short-circuit the SkScaledBitmapSampler when possible, as this gives
        a significant performance boost.
@@ -624,7 +622,7 @@
 
         while (row_total_count < height) {
             int row_count = jpeg_read_tile_scanline(cinfo,
-                    index->index, &rowptr, startX, startY, width, height);
+                    index->index, &rowptr);
             // if row_count == 0, then we didn't get a scanline, so abort.
             // if we supported partial images, we might return true in this case
             if (0 == row_count) {
@@ -673,16 +671,14 @@
     uint8_t* srcRow = (uint8_t*)srcStorage.alloc(width * 4);
 
     //  Possibly skip initial rows [sampler.srcY0]
-    if (!skip_src_rows_tile(cinfo, index->index, srcRow,
-                            startX, startY, width, height, sampler.srcY0())) {
+    if (!skip_src_rows_tile(cinfo, index->index, srcRow, sampler.srcY0())) {
         return return_false(*cinfo, *bitmap, "skip rows");
     }
 
     // now loop through scanlines until y == bitmap->height() - 1
     for (int y = 0;; y++) {
         JSAMPLE* rowptr = (JSAMPLE*)srcRow;
-        int row_count = jpeg_read_tile_scanline(cinfo, index->index, &rowptr,
-                                                startX, startY, width, height);
+        int row_count = jpeg_read_tile_scanline(cinfo, index->index, &rowptr);
         if (0 == row_count) {
             return return_false(*cinfo, *bitmap, "read_scanlines");
         }
@@ -697,7 +693,6 @@
         }
 
         if (!skip_src_rows_tile(cinfo, index->index, srcRow,
-                                startX, startY, width, height,
                                 sampler.srcDY() - 1)) {
             return return_false(*cinfo, *bitmap, "skip rows");
         }