Fixes for JPEG subset decoding.

Ensure that the stream passed to JPEG for subset decoding is
neither deleted before it is no longer needed nor deleted an
extra time.

src/images/SkJpegUtility.h:
src/images/SkJpegUtility.cpp:
Always ref and unref the stream provided to skjpeg_source_mgr.
Add some comments explaining how skjpeg_source_mgr's members
handle ownership.
Fix a warning comparing signed and unsigned numbers, converting
to size_t which is more appropriate for measuring bytes.
Remove dead code referring to fMemoryBase and fMemoryBaseSize,
which are never used.

src/images/SkImageDecoder_libjpeg.cpp:
Call the new constructor for skjpeg_source_mgr, which no longer
takes a boolean to determine ownership.

include/images/SkBitmapRegionDecoder.h
src/images/SkBitmapRegionDecoder.cpp:
This small shim has been removed, since it is not needed to use
Skia's image decoders. Its functionality will be folded into
Android.

Required for the merge to Android.

R=djsollen@google.com

Review URL: https://codereview.chromium.org/21561002

git-svn-id: http://skia.googlecode.com/svn/trunk@10483 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/images/SkJpegUtility.cpp b/src/images/SkJpegUtility.cpp
index 89a0472..1f426f2 100644
--- a/src/images/SkJpegUtility.cpp
+++ b/src/images/SkJpegUtility.cpp
@@ -29,15 +29,16 @@
 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
 static boolean sk_seek_input_data(j_decompress_ptr cinfo, long byte_offset) {
     skjpeg_source_mgr* src = (skjpeg_source_mgr*)cinfo->src;
+    size_t bo = (size_t) byte_offset;
 
-    if (byte_offset > src->current_offset) {
-        (void)src->fStream->skip(byte_offset - src->current_offset);
+    if (bo > src->current_offset) {
+        (void)src->fStream->skip(bo - src->current_offset);
     } else {
         src->fStream->rewind();
-        (void)src->fStream->skip(byte_offset);
+        (void)src->fStream->skip(bo);
     }
 
-    src->current_offset = byte_offset;
+    src->current_offset = bo;
     src->next_input_byte = (const JOCTET*)src->fBuffer;
     src->bytes_in_buffer = 0;
     return true;
@@ -109,12 +110,9 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder,
-                                     bool ownStream) : fStream(stream) {
-    fDecoder = decoder;
-    fMemoryBase = NULL;
-    fUnrefStream = ownStream;
-    fMemoryBaseSize = 0;
+skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder)
+    : fStream(SkRef(stream))
+    , fDecoder(decoder) {
 
     init_source = sk_init_source;
     fill_input_buffer = sk_fill_input_buffer;
@@ -128,12 +126,7 @@
 }
 
 skjpeg_source_mgr::~skjpeg_source_mgr() {
-    if (fMemoryBase) {
-        sk_free(fMemoryBase);
-    }
-    if (fUnrefStream) {
-        fStream->unref();
-    }
+    SkSafeUnref(fStream);
 }
 
 ///////////////////////////////////////////////////////////////////////////////