Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: src/ports/SkImageDecoder_CG.cpp

Issue 670453002: Remove image decoder and encoder autoregistration (Closed) Base URL: https://skia.googlesource.com/skia.git@separate-image-decoder-01-skpicture
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ports/SkImageDecoder_CG.h ('k') | src/ports/SkImageDecoder_WIC.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "SkImageDecoder_CG.h"
8 #include "SkCGUtils.h" 8 #include "SkCGUtils.h"
9 #include "SkColorPriv.h" 9 #include "SkColorPriv.h"
10 #include "SkImageDecoder.h"
11 #include "SkImageEncoder.h"
12 #include "SkMovie.h"
13 #include "SkStream.h" 10 #include "SkStream.h"
14 #include "SkStreamPriv.h" 11 #include "SkStreamPriv.h"
15 #include "SkTemplates.h" 12 #include "SkTemplates.h"
16 #include "SkUnPreMultiply.h" 13 #include "SkUnPreMultiply.h"
17 14
18 #ifdef SK_BUILD_FOR_MAC 15 #ifdef SK_BUILD_FOR_MAC
19 #include <ApplicationServices/ApplicationServices.h> 16 #include <ApplicationServices/ApplicationServices.h>
20 #endif 17 #endif
21 18
22 #ifdef SK_BUILD_FOR_IOS 19 #ifdef SK_BUILD_FOR_IOS
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 *addr = SkUnPreMultiply::UnPreMultiplyPreservingByteOrder(*addr) ; 194 *addr = SkUnPreMultiply::UnPreMultiplyPreservingByteOrder(*addr) ;
198 } 195 }
199 } 196 }
200 bm->setAlphaType(kUnpremul_SkAlphaType); 197 bm->setAlphaType(kUnpremul_SkAlphaType);
201 } 198 }
202 return kSuccess; 199 return kSuccess;
203 } 200 }
204 201
205 /////////////////////////////////////////////////////////////////////////////// 202 ///////////////////////////////////////////////////////////////////////////////
206 203
207 extern SkImageDecoder* image_decoder_from_stream(SkStreamRewindable*);
208
209 SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) {
210 SkImageDecoder* decoder = image_decoder_from_stream(stream);
211 if (NULL == decoder) {
212 // If no image decoder specific to the stream exists, use SkImageDecoder _CG.
213 return SkNEW(SkImageDecoder_CG);
214 } else {
215 return decoder;
216 }
217 }
218
219 /////////////////////////////////////////////////////////////////////////
220
221 SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) {
222 return NULL;
223 }
224
225 /////////////////////////////////////////////////////////////////////////
226 204
227 static size_t consumer_put(void* info, const void* buffer, size_t count) { 205 static size_t consumer_put(void* info, const void* buffer, size_t count) {
228 SkWStream* stream = reinterpret_cast<SkWStream*>(info); 206 SkWStream* stream = reinterpret_cast<SkWStream*>(info);
229 return stream->write(buffer, count) ? count : 0; 207 return stream->write(buffer, count) ? count : 0;
230 } 208 }
231 209
232 static void consumer_release(void* info) { 210 static void consumer_release(void* info) {
233 // we do nothing, since by design we don't "own" the stream (i.e. info) 211 // we do nothing, since by design we don't "own" the stream (i.e. info)
234 } 212 }
235 213
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 CGImageRef image = SkCreateCGImageRef(*bmPtr); 291 CGImageRef image = SkCreateCGImageRef(*bmPtr);
314 if (NULL == image) { 292 if (NULL == image) {
315 return false; 293 return false;
316 } 294 }
317 SkAutoTCallVProc<CGImage, CGImageRelease> agimage(image); 295 SkAutoTCallVProc<CGImage, CGImageRelease> agimage(image);
318 296
319 CGImageDestinationAddImage(dst, image, NULL); 297 CGImageDestinationAddImage(dst, image, NULL);
320 return CGImageDestinationFinalize(dst); 298 return CGImageDestinationFinalize(dst);
321 } 299 }
322 300
323 /////////////////////////////////////////////////////////////////////////////// 301 SkImageEncoder* SkCreateImageEncoder_CG(SkImageEncoder::Type t) {
324
325 static SkImageEncoder* sk_imageencoder_cg_factory(SkImageEncoder::Type t) {
326 switch (t) { 302 switch (t) {
303 #ifndef SK_BUILD_FOR_IOS
327 case SkImageEncoder::kICO_Type: 304 case SkImageEncoder::kICO_Type:
328 case SkImageEncoder::kBMP_Type: 305 case SkImageEncoder::kBMP_Type:
329 case SkImageEncoder::kGIF_Type: 306 case SkImageEncoder::kGIF_Type:
330 case SkImageEncoder::kJPEG_Type: 307 case SkImageEncoder::kJPEG_Type:
308 #endif
331 case SkImageEncoder::kPNG_Type: 309 case SkImageEncoder::kPNG_Type:
332 break; 310 break;
333 default: 311 default:
334 return NULL; 312 return NULL;
335 } 313 }
336 return SkNEW_ARGS(SkImageEncoder_CG, (t)); 314 return SkNEW_ARGS(SkImageEncoder_CG, (t));
337 } 315 }
338 316
339 static SkImageEncoder_EncodeReg gEReg(sk_imageencoder_cg_factory);
340
341 #ifdef SK_BUILD_FOR_IOS
342 class SkPNGImageEncoder_IOS : public SkImageEncoder_CG {
343 public:
344 SkPNGImageEncoder_IOS()
345 : SkImageEncoder_CG(kPNG_Type) {
346 }
347 };
348
349 DEFINE_ENCODER_CREATOR(PNGImageEncoder_IOS);
350 #endif
351
352 struct FormatConversion { 317 struct FormatConversion {
353 CFStringRef fUTType; 318 CFStringRef fUTType;
354 SkImageDecoder::Format fFormat; 319 SkImageDecoder::Format fFormat;
355 }; 320 };
356 321
357 // Array of the types supported by the decoder. 322 // Array of the types supported by the decoder.
358 static const FormatConversion gFormatConversions[] = { 323 static const FormatConversion gFormatConversions[] = {
359 { kUTTypeBMP, SkImageDecoder::kBMP_Format }, 324 { kUTTypeBMP, SkImageDecoder::kBMP_Format },
360 { kUTTypeGIF, SkImageDecoder::kGIF_Format }, 325 { kUTTypeGIF, SkImageDecoder::kGIF_Format },
361 { kUTTypeICO, SkImageDecoder::kICO_Format }, 326 { kUTTypeICO, SkImageDecoder::kICO_Format },
362 { kUTTypeJPEG, SkImageDecoder::kJPEG_Format }, 327 { kUTTypeJPEG, SkImageDecoder::kJPEG_Format },
363 // Also include JPEG2000 328 // Also include JPEG2000
364 { kUTTypeJPEG2000, SkImageDecoder::kJPEG_Format }, 329 { kUTTypeJPEG2000, SkImageDecoder::kJPEG_Format },
365 { kUTTypePNG, SkImageDecoder::kPNG_Format }, 330 { kUTTypePNG, SkImageDecoder::kPNG_Format },
366 }; 331 };
367 332
368 static SkImageDecoder::Format UTType_to_Format(const CFStringRef uttype) { 333 static SkImageDecoder::Format UTType_to_Format(const CFStringRef uttype) {
369 for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) { 334 for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) {
370 if (CFStringCompare(uttype, gFormatConversions[i].fUTType, 0) == kCFComp areEqualTo) { 335 if (CFStringCompare(uttype, gFormatConversions[i].fUTType, 0) == kCFComp areEqualTo) {
371 return gFormatConversions[i].fFormat; 336 return gFormatConversions[i].fFormat;
372 } 337 }
373 } 338 }
374 return SkImageDecoder::kUnknown_Format; 339 return SkImageDecoder::kUnknown_Format;
375 } 340 }
376 341
377 static SkImageDecoder::Format get_format_cg(SkStreamRewindable* stream) { 342 SkImageDecoder::Format SkDetectFormatImageDecoder_CG(SkStreamRewindable* stream) {
378 CGImageSourceRef imageSrc = SkStreamToCGImageSource(stream); 343 CGImageSourceRef imageSrc = SkStreamToCGImageSource(stream);
379 344
380 if (NULL == imageSrc) { 345 if (NULL == imageSrc) {
381 return SkImageDecoder::kUnknown_Format; 346 return SkImageDecoder::kUnknown_Format;
382 } 347 }
383 348
384 SkAutoTCallVProc<const void, CFRelease> arsrc(imageSrc); 349 SkAutoTCallVProc<const void, CFRelease> arsrc(imageSrc);
385 const CFStringRef name = CGImageSourceGetType(imageSrc); 350 const CFStringRef name = CGImageSourceGetType(imageSrc);
386 if (NULL == name) { 351 if (NULL == name) {
387 return SkImageDecoder::kUnknown_Format; 352 return SkImageDecoder::kUnknown_Format;
388 } 353 }
389 return UTType_to_Format(name); 354 return UTType_to_Format(name);
390 } 355 }
391 356
392 static SkImageDecoder_FormatReg gFormatReg(get_format_cg); 357 SkImageDecoder* SkCreateImageDecoder_CG(SkImageDecoder::Format format) {
358 SkASSERT(SkImageDecoder::kUnknown_Format != format);
359 return SkNEW(SkImageDecoder_CG);
360 }
OLDNEW
« no previous file with comments | « src/ports/SkImageDecoder_CG.h ('k') | src/ports/SkImageDecoder_WIC.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698