add optional Format* parameter to decoder helper functions.
authorreed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 15 Jun 2009 13:04:45 +0000 (13:04 +0000)
committerreed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 15 Jun 2009 13:04:45 +0000 (13:04 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@215 2bbb7eff-a529-9590-31e7-b0007b416f81

include/images/SkImageDecoder.h
samplecode/SampleFilter2.cpp
samplecode/SampleImage.cpp
src/images/SkImageDecoder.cpp

index d2b23a1..d293cec 100644 (file)
@@ -160,12 +160,16 @@ public:
         there is a conflict (e.g. the image has per-pixel alpha and the bitmap's
         config does not support that), in which case the decoder will choose a
         closest match configuration.
+     
+        @param format On success, if format is non-null, it is set to the format
+                      of the decoded file. On failure it is ignored.
     */
     static bool DecodeFile(const char file[], SkBitmap* bitmap,
-                             SkBitmap::Config prefConfig, Mode);
-    static bool DecodeFile(const char file[], SkBitmap* bitmap)
-    {
-        return DecodeFile(file, bitmap, SkBitmap::kNo_Config, kDecodePixels_Mode);
+                           SkBitmap::Config prefConfig, Mode,
+                           Format* format);
+    static bool DecodeFile(const char file[], SkBitmap* bitmap) {
+        return DecodeFile(file, bitmap, SkBitmap::kNo_Config,
+                          kDecodePixels_Mode, NULL);
     }
     /** Decode the image stored in the specified memory buffer, and store the
         result in bitmap. Return true for success or false on failure.
@@ -176,13 +180,16 @@ public:
         there is a conflict (e.g. the image has per-pixel alpha and the bitmap's
         config does not support that), in which case the decoder will choose a
         closest match configuration.
-    */
+     
+         @param format On success, if format is non-null, it is set to the format
+                       of the decoded buffer. On failure it is ignored.
+     */
     static bool DecodeMemory(const void* buffer, size_t size, SkBitmap* bitmap,
-                             SkBitmap::Config prefConfig, Mode);
-    static bool DecodeMemory(const void* buffer, size_t size, SkBitmap* bitmap)
-    {
+                             SkBitmap::Config prefConfig, Mode,
+                             Format* format);
+    static bool DecodeMemory(const void* buffer, size_t size, SkBitmap* bitmap){
         return DecodeMemory(buffer, size, bitmap, SkBitmap::kNo_Config,
-                            kDecodePixels_Mode);
+                            kDecodePixels_Mode, NULL);
     }
     /** Decode the image stored in the specified SkStream, and store the result
         in bitmap. Return true for success or false on failure.
@@ -193,13 +200,16 @@ public:
         format, unless there is a conflict (e.g. the image has per-pixel alpha
         and the bitmap's config does not support that), in which case the
         decoder will choose a closest match configuration.
-    */
+     
+        @param format On success, if format is non-null, it is set to the format
+                      of the decoded stream. On failure it is ignored.
+     */
     static bool DecodeStream(SkStream* stream, SkBitmap* bitmap,
-                             SkBitmap::Config prefConfig, Mode);
-    static bool DecodeStream(SkStream* stream, SkBitmap* bitmap)
-    {
+                             SkBitmap::Config prefConfig, Mode,
+                             Format* format);
+    static bool DecodeStream(SkStream* stream, SkBitmap* bitmap) {
         return DecodeStream(stream, bitmap, SkBitmap::kNo_Config,
-                            kDecodePixels_Mode);
+                            kDecodePixels_Mode, NULL);
     }
 
     /** Return the default config for the running device.
index 1800eb9..e181870 100644 (file)
@@ -31,12 +31,12 @@ public:
         for (int i = 0; i < fBitmapCount/2; i++) {
             SkImageDecoder::DecodeFile(gNames[i], &fBitmaps[i],
                                        SkBitmap::kARGB_8888_Config,
-                                       SkImageDecoder::kDecodePixels_Mode);
+                                   SkImageDecoder::kDecodePixels_Mode, NULL);
         }
         for (int i = fBitmapCount/2; i < fBitmapCount; i++) {
             SkImageDecoder::DecodeFile(gNames[i-fBitmapCount/2], &fBitmaps[i],
                                        SkBitmap::kRGB_565_Config,
-                                       SkImageDecoder::kDecodePixels_Mode);
+                                   SkImageDecoder::kDecodePixels_Mode, NULL);
         }
         fCurrIndex = 0;
     }
index 7683e63..69cbd79 100644 (file)
@@ -27,7 +27,7 @@ static bool SetImageRef(SkBitmap* bitmap, SkStream* stream,
                         SkBitmap::Config pref, const char name[] = NULL)
 {
     if (SkImageDecoder::DecodeStream(stream, bitmap, pref,
-                                     SkImageDecoder::kDecodeBounds_Mode)) {
+                                 SkImageDecoder::kDecodeBounds_Mode, NULL)) {
         SkASSERT(bitmap->config() != SkBitmap::kNo_Config);
     
         SkImageRef* ref = new SkImageRef_GlobalPool(stream, bitmap->config());
index b910df6..4f9fa9b 100644 (file)
@@ -120,13 +120,13 @@ bool SkImageDecoder::decode(SkStream* stream, SkBitmap* bm,
 ///////////////////////////////////////////////////////////////////////////////
 
 bool SkImageDecoder::DecodeFile(const char file[], SkBitmap* bm,
-                                SkBitmap::Config pref,  Mode mode) {
+                            SkBitmap::Config pref,  Mode mode, Format* format) {
     SkASSERT(file);
     SkASSERT(bm);
 
     SkFILEStream    stream(file);
     if (stream.isValid()) {
-        if (SkImageDecoder::DecodeStream(&stream, bm, pref, mode)) {
+        if (SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format)) {
             bm->pixelRef()->setURI(file);
         }
         return true;
@@ -135,18 +135,18 @@ bool SkImageDecoder::DecodeFile(const char file[], SkBitmap* bm,
 }
 
 bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm,
-                                  SkBitmap::Config pref, Mode mode) {
+                          SkBitmap::Config pref, Mode mode, Format* format) {
     if (0 == size) {
         return false;
     }
     SkASSERT(buffer);
 
     SkMemoryStream  stream(buffer, size);
-    return SkImageDecoder::DecodeStream(&stream, bm, pref, mode);
+    return SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format);
 }
 
 bool SkImageDecoder::DecodeStream(SkStream* stream, SkBitmap* bm,
-                                  SkBitmap::Config pref, Mode mode) {
+                          SkBitmap::Config pref, Mode mode, Format* format) {
     SkASSERT(stream);
     SkASSERT(bm);
 
@@ -155,6 +155,9 @@ bool SkImageDecoder::DecodeStream(SkStream* stream, SkBitmap* bm,
 
     if (NULL != codec) {
         success = codec->decode(stream, bm, pref, mode);
+        if (success && format) {
+            *format = codec->getFormat();
+        }
         delete codec;
     }
     return success;