| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2008 The Android Open Source Project | 2  * Copyright 2008 The Android Open Source Project | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkCGUtils.h" | 8 #include "SkCGUtils.h" | 
| 9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" | 
| 10 #include "SkImageDecoder.h" | 10 #include "SkImageDecoder.h" | 
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 160                 *addr = SkUnPreMultiply::UnPreMultiplyPreservingByteOrder(*addr)
     ; | 160                 *addr = SkUnPreMultiply::UnPreMultiplyPreservingByteOrder(*addr)
     ; | 
| 161             } | 161             } | 
| 162         } | 162         } | 
| 163         bm->setAlphaType(kUnpremul_SkAlphaType); | 163         bm->setAlphaType(kUnpremul_SkAlphaType); | 
| 164     } | 164     } | 
| 165     return true; | 165     return true; | 
| 166 } | 166 } | 
| 167 | 167 | 
| 168 /////////////////////////////////////////////////////////////////////////////// | 168 /////////////////////////////////////////////////////////////////////////////// | 
| 169 | 169 | 
| 170 extern SkImageDecoder* image_decoder_from_stream(SkStreamRewindable*); |  | 
| 171 |  | 
| 172 SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) { |  | 
| 173     SkImageDecoder* decoder = image_decoder_from_stream(stream); |  | 
| 174     if (NULL == decoder) { |  | 
| 175         // If no image decoder specific to the stream exists, use SkImageDecoder
     _CG. |  | 
| 176         return SkNEW(SkImageDecoder_CG); |  | 
| 177     } else { |  | 
| 178         return decoder; |  | 
| 179     } |  | 
| 180 } |  | 
| 181 |  | 
| 182 ///////////////////////////////////////////////////////////////////////// |  | 
| 183 |  | 
| 184 SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) { |  | 
| 185     return NULL; |  | 
| 186 } |  | 
| 187 |  | 
| 188 ///////////////////////////////////////////////////////////////////////// |  | 
| 189 | 170 | 
| 190 static size_t consumer_put(void* info, const void* buffer, size_t count) { | 171 static size_t consumer_put(void* info, const void* buffer, size_t count) { | 
| 191     SkWStream* stream = reinterpret_cast<SkWStream*>(info); | 172     SkWStream* stream = reinterpret_cast<SkWStream*>(info); | 
| 192     return stream->write(buffer, count) ? count : 0; | 173     return stream->write(buffer, count) ? count : 0; | 
| 193 } | 174 } | 
| 194 | 175 | 
| 195 static void consumer_release(void* info) { | 176 static void consumer_release(void* info) { | 
| 196     // we do nothing, since by design we don't "own" the stream (i.e. info) | 177     // we do nothing, since by design we don't "own" the stream (i.e. info) | 
| 197 } | 178 } | 
| 198 | 179 | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 276     CGImageRef image = SkCreateCGImageRef(*bmPtr); | 257     CGImageRef image = SkCreateCGImageRef(*bmPtr); | 
| 277     if (NULL == image) { | 258     if (NULL == image) { | 
| 278         return false; | 259         return false; | 
| 279     } | 260     } | 
| 280     SkAutoTCallVProc<CGImage, CGImageRelease> agimage(image); | 261     SkAutoTCallVProc<CGImage, CGImageRelease> agimage(image); | 
| 281 | 262 | 
| 282     CGImageDestinationAddImage(dst, image, NULL); | 263     CGImageDestinationAddImage(dst, image, NULL); | 
| 283     return CGImageDestinationFinalize(dst); | 264     return CGImageDestinationFinalize(dst); | 
| 284 } | 265 } | 
| 285 | 266 | 
| 286 /////////////////////////////////////////////////////////////////////////////// | 267 SkImageEncoder* SkCreateImageEncoder_CG(Type t) { | 
| 287 | 268     SkImageEncoder* codec = NULL; | 
| 288 static SkImageEncoder* sk_imageencoder_cg_factory(SkImageEncoder::Type t) { | 269     if ((codec = CreateUserEncoder(t))) { | 
|  | 270         return codec; | 
|  | 271     } | 
| 289     switch (t) { | 272     switch (t) { | 
|  | 273 #ifndef SK_BUILD_FOR_IOS | 
| 290         case SkImageEncoder::kICO_Type: | 274         case SkImageEncoder::kICO_Type: | 
| 291         case SkImageEncoder::kBMP_Type: | 275         case SkImageEncoder::kBMP_Type: | 
| 292         case SkImageEncoder::kGIF_Type: | 276         case SkImageEncoder::kGIF_Type: | 
| 293         case SkImageEncoder::kJPEG_Type: | 277         case SkImageEncoder::kJPEG_Type: | 
|  | 278 #endif | 
| 294         case SkImageEncoder::kPNG_Type: | 279         case SkImageEncoder::kPNG_Type: | 
| 295             break; | 280             break; | 
| 296         default: | 281         default: | 
| 297             return NULL; | 282             return NULL; | 
| 298     } | 283     } | 
| 299     return SkNEW_ARGS(SkImageEncoder_CG, (t)); | 284     return SkNEW_ARGS(SkImageEncoder_CG, (t)); | 
| 300 } | 285 } | 
| 301 | 286 | 
| 302 static SkImageEncoder_EncodeReg gEReg(sk_imageencoder_cg_factory); |  | 
| 303 |  | 
| 304 #ifdef SK_BUILD_FOR_IOS |  | 
| 305 class SkPNGImageEncoder_IOS : public SkImageEncoder_CG { |  | 
| 306 public: |  | 
| 307     SkPNGImageEncoder_IOS() |  | 
| 308         : SkImageEncoder_CG(kPNG_Type) { |  | 
| 309     } |  | 
| 310 }; |  | 
| 311 |  | 
| 312 DEFINE_ENCODER_CREATOR(PNGImageEncoder_IOS); |  | 
| 313 #endif |  | 
| 314 |  | 
| 315 struct FormatConversion { | 287 struct FormatConversion { | 
| 316     CFStringRef             fUTType; | 288     CFStringRef             fUTType; | 
| 317     SkImageDecoder::Format  fFormat; | 289     SkImageDecoder::Format  fFormat; | 
| 318 }; | 290 }; | 
| 319 | 291 | 
| 320 // Array of the types supported by the decoder. | 292 // Array of the types supported by the decoder. | 
| 321 static const FormatConversion gFormatConversions[] = { | 293 static const FormatConversion gFormatConversions[] = { | 
| 322     { kUTTypeBMP, SkImageDecoder::kBMP_Format }, | 294     { kUTTypeBMP, SkImageDecoder::kBMP_Format }, | 
| 323     { kUTTypeGIF, SkImageDecoder::kGIF_Format }, | 295     { kUTTypeGIF, SkImageDecoder::kGIF_Format }, | 
| 324     { kUTTypeICO, SkImageDecoder::kICO_Format }, | 296     { kUTTypeICO, SkImageDecoder::kICO_Format }, | 
| 325     { kUTTypeJPEG, SkImageDecoder::kJPEG_Format }, | 297     { kUTTypeJPEG, SkImageDecoder::kJPEG_Format }, | 
| 326     // Also include JPEG2000 | 298     // Also include JPEG2000 | 
| 327     { kUTTypeJPEG2000, SkImageDecoder::kJPEG_Format }, | 299     { kUTTypeJPEG2000, SkImageDecoder::kJPEG_Format }, | 
| 328     { kUTTypePNG, SkImageDecoder::kPNG_Format }, | 300     { kUTTypePNG, SkImageDecoder::kPNG_Format }, | 
| 329 }; | 301 }; | 
| 330 | 302 | 
| 331 static SkImageDecoder::Format UTType_to_Format(const CFStringRef uttype) { | 303 static SkImageDecoder::Format UTType_to_Format(const CFStringRef uttype) { | 
| 332     for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) { | 304     for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) { | 
| 333         if (CFStringCompare(uttype, gFormatConversions[i].fUTType, 0) == kCFComp
     areEqualTo) { | 305         if (CFStringCompare(uttype, gFormatConversions[i].fUTType, 0) == kCFComp
     areEqualTo) { | 
| 334             return gFormatConversions[i].fFormat; | 306             return gFormatConversions[i].fFormat; | 
| 335         } | 307         } | 
| 336     } | 308     } | 
| 337     return SkImageDecoder::kUnknown_Format; | 309     return SkImageDecoder::kUnknown_Format; | 
| 338 } | 310 } | 
| 339 | 311 | 
| 340 static SkImageDecoder::Format get_format_cg(SkStreamRewindable* stream) { | 312 SkImageDecoder::Format SkDetectFormatImageDecoder_CG(SkStreamRewindable* stream)
      { | 
| 341     CGImageSourceRef imageSrc = SkStreamToCGImageSource(stream); | 313     CGImageSourceRef imageSrc = SkStreamToCGImageSource(stream); | 
| 342 | 314 | 
| 343     if (NULL == imageSrc) { | 315     if (NULL == imageSrc) { | 
| 344         return SkImageDecoder::kUnknown_Format; | 316         return SkImageDecoder::kUnknown_Format; | 
| 345     } | 317     } | 
| 346 | 318 | 
| 347     SkAutoTCallVProc<const void, CFRelease> arsrc(imageSrc); | 319     SkAutoTCallVProc<const void, CFRelease> arsrc(imageSrc); | 
| 348     const CFStringRef name = CGImageSourceGetType(imageSrc); | 320     const CFStringRef name = CGImageSourceGetType(imageSrc); | 
| 349     if (NULL == name) { | 321     if (NULL == name) { | 
| 350         return SkImageDecoder::kUnknown_Format; | 322         return SkImageDecoder::kUnknown_Format; | 
| 351     } | 323     } | 
| 352     return UTType_to_Format(name); | 324     return UTType_to_Format(name); | 
| 353 } | 325 } | 
| 354 | 326 | 
| 355 static SkImageDecoder_FormatReg gFormatReg(get_format_cg); | 327 SkImageDecoder* SkCreateImageDecoder_CG(SkStreamRewindable* stream) { | 
|  | 328     if (SkDetectFormatImageDecoder_CG(stream) != SkImageDecoder::kUnknown_Format
     ) { | 
|  | 329         return SkNEW(SkImageDecoder_CG); | 
|  | 330     } | 
|  | 331     return NULL; | 
|  | 332 } | 
| OLD | NEW | 
|---|