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

Side by Side Diff: skia/ports/SkImageDecoder_Factory.cpp

Issue 16267: Windows doesn't like zero-length arrays. (Closed)
Patch Set: Created 11 years, 12 months 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* libs/graphics/ports/SkImageDecoder_Factory.cpp 1 /* libs/graphics/ports/SkImageDecoder_Factory.cpp
2 ** 2 **
3 ** Copyright 2006, The Android Open Source Project 3 ** Copyright 2006, The Android Open Source Project
4 ** 4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License"); 5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License. 6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at 7 ** You may obtain a copy of the License at
8 ** 8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0 9 ** http://www.apache.org/licenses/LICENSE-2.0
10 ** 10 **
(...skipping 15 matching lines...) Expand all
26 extern SkImageDecoder* SkImageDecoder_WBMP_Factory(SkStream*); 26 extern SkImageDecoder* SkImageDecoder_WBMP_Factory(SkStream*);
27 extern SkImageDecoder* SkImageDecoder_JPEG_Factory(SkStream*); 27 extern SkImageDecoder* SkImageDecoder_JPEG_Factory(SkStream*);
28 28
29 typedef SkImageDecoder* (*SkImageDecoderFactoryProc)(SkStream*); 29 typedef SkImageDecoder* (*SkImageDecoderFactoryProc)(SkStream*);
30 30
31 struct CodecFormat { 31 struct CodecFormat {
32 SkImageDecoderFactoryProc fProc; 32 SkImageDecoderFactoryProc fProc;
33 SkImageDecoder::Format fFormat; 33 SkImageDecoder::Format fFormat;
34 }; 34 };
35 35
36 #ifdef SK_SUPPORT_IMAGE_DECODE
36 static const CodecFormat gPairs[] = { 37 static const CodecFormat gPairs[] = {
37 #ifdef SK_SUPPORT_IMAGE_DECODE
38 { SkImageDecoder_GIF_Factory, SkImageDecoder::kGIF_Format }, 38 { SkImageDecoder_GIF_Factory, SkImageDecoder::kGIF_Format },
39 { SkImageDecoder_PNG_Factory, SkImageDecoder::kPNG_Format }, 39 { SkImageDecoder_PNG_Factory, SkImageDecoder::kPNG_Format },
40 { SkImageDecoder_ICO_Factory, SkImageDecoder::kICO_Format }, 40 { SkImageDecoder_ICO_Factory, SkImageDecoder::kICO_Format },
41 { SkImageDecoder_WBMP_Factory, SkImageDecoder::kWBMP_Format }, 41 { SkImageDecoder_WBMP_Factory, SkImageDecoder::kWBMP_Format },
42 { SkImageDecoder_BMP_Factory, SkImageDecoder::kBMP_Format }, 42 { SkImageDecoder_BMP_Factory, SkImageDecoder::kBMP_Format },
43 { SkImageDecoder_JPEG_Factory, SkImageDecoder::kJPEG_Format } 43 { SkImageDecoder_JPEG_Factory, SkImageDecoder::kJPEG_Format }
44 };
44 #endif 45 #endif
45 };
46 46
47 SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) { 47 SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) {
48 #ifdef SK_SUPPORT_IMAGE_DECODE
48 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { 49 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
49 SkImageDecoder* codec = gPairs[i].fProc(stream); 50 SkImageDecoder* codec = gPairs[i].fProc(stream);
50 stream->rewind(); 51 stream->rewind();
51 if (NULL != codec) { 52 if (NULL != codec) {
52 return codec; 53 return codec;
53 } 54 }
54 } 55 }
56 #endif
55 return NULL; 57 return NULL;
56 } 58 }
57 59
58 bool SkImageDecoder::SupportsFormat(Format format) { 60 bool SkImageDecoder::SupportsFormat(Format format) {
61 #ifdef SK_SUPPORT_IMAGE_DECODE
59 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { 62 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
60 if (gPairs[i].fFormat == format) { 63 if (gPairs[i].fFormat == format) {
61 return true; 64 return true;
62 } 65 }
63 } 66 }
67 #endif
64 return false; 68 return false;
65 } 69 }
66 70
67 ///////////////////////////////////////////////////////////////////////// 71 /////////////////////////////////////////////////////////////////////////
68 72
69 // the movie may hold onto the stream (by calling ref()) 73 // the movie may hold onto the stream (by calling ref())
70 typedef SkMovie* (*SkMovieStreamProc)(SkStream*); 74 typedef SkMovie* (*SkMovieStreamProc)(SkStream*);
71 // the movie may NOT hold onto the pointer 75 // the movie may NOT hold onto the pointer
72 typedef SkMovie* (*SkMovieMemoryProc)(const void*, size_t); 76 typedef SkMovie* (*SkMovieMemoryProc)(const void*, size_t);
73 77
74 extern SkMovie* SkMovie_GIF_StreamFactory(SkStream*); 78 extern SkMovie* SkMovie_GIF_StreamFactory(SkStream*);
75 extern SkMovie* SkMovie_GIF_MemoryFactory(const void*, size_t); 79 extern SkMovie* SkMovie_GIF_MemoryFactory(const void*, size_t);
76 80
81 #ifdef SK_SUPPORT_IMAGE_DECODE
77 static const SkMovieStreamProc gStreamProc[] = { 82 static const SkMovieStreamProc gStreamProc[] = {
78 #ifdef SK_SUPPORT_IMAGE_DECODE
79 SkMovie_GIF_StreamFactory 83 SkMovie_GIF_StreamFactory
80 #endif
81 }; 84 };
82 85
83 static const SkMovieMemoryProc gMemoryProc[] = { 86 static const SkMovieMemoryProc gMemoryProc[] = {
84 #ifdef SK_SUPPORT_IMAGE_DECODE
85 SkMovie_GIF_MemoryFactory 87 SkMovie_GIF_MemoryFactory
88 };
86 #endif 89 #endif
87 };
88 90
89 SkMovie* SkMovie::DecodeStream(SkStream* stream) { 91 SkMovie* SkMovie::DecodeStream(SkStream* stream) {
92 #ifdef SK_SUPPORT_IMAGE_DECODE
90 for (unsigned i = 0; i < SK_ARRAY_COUNT(gStreamProc); i++) { 93 for (unsigned i = 0; i < SK_ARRAY_COUNT(gStreamProc); i++) {
91 SkMovie* movie = gStreamProc[i](stream); 94 SkMovie* movie = gStreamProc[i](stream);
92 if (NULL != movie) { 95 if (NULL != movie) {
93 return movie; 96 return movie;
94 } 97 }
95 stream->rewind(); 98 stream->rewind();
96 } 99 }
100 #endif
97 return NULL; 101 return NULL;
98 } 102 }
99 103
100 SkMovie* SkMovie::DecodeMemory(const void* data, size_t length) 104 SkMovie* SkMovie::DecodeMemory(const void* data, size_t length)
101 { 105 {
106 #ifdef SK_SUPPORT_IMAGE_DECODE
102 for (unsigned i = 0; i < SK_ARRAY_COUNT(gMemoryProc); i++) { 107 for (unsigned i = 0; i < SK_ARRAY_COUNT(gMemoryProc); i++) {
103 SkMovie* movie = gMemoryProc[i](data, length); 108 SkMovie* movie = gMemoryProc[i](data, length);
104 if (NULL != movie) { 109 if (NULL != movie) {
105 return movie; 110 return movie;
106 } 111 }
107 } 112 }
113 #endif
108 return NULL; 114 return NULL;
109 } 115 }
110 116
111 ///////////////////////////////////////////////////////////////////////// 117 /////////////////////////////////////////////////////////////////////////
112 118
113 #ifdef SK_SUPPORT_IMAGE_ENCODE 119 #ifdef SK_SUPPORT_IMAGE_ENCODE
114 120
115 extern SkImageEncoder* SkImageEncoder_JPEG_Factory(); 121 extern SkImageEncoder* SkImageEncoder_JPEG_Factory();
116 extern SkImageEncoder* SkImageEncoder_PNG_Factory(); 122 extern SkImageEncoder* SkImageEncoder_PNG_Factory();
117 123
118 SkImageEncoder* SkImageEncoder::Create(Type t) { 124 SkImageEncoder* SkImageEncoder::Create(Type t) {
119 switch (t) { 125 switch (t) {
120 case kJPEG_Type: 126 case kJPEG_Type:
121 return SkImageEncoder_JPEG_Factory(); 127 return SkImageEncoder_JPEG_Factory();
122 case kPNG_Type: 128 case kPNG_Type:
123 return SkImageEncoder_PNG_Factory(); 129 return SkImageEncoder_PNG_Factory();
124 default: 130 default:
125 return NULL; 131 return NULL;
126 } 132 }
127 } 133 }
128 134
129 #endif 135 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698