1 /* libs/graphics/ports/SkImageDecoder_Factory.cpp 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (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 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #include "SkImageDecoder.h" 19 #include "SkMovie.h" 20 #include "SkStream.h" 21 22 extern SkImageDecoder* SkImageDecoder_GIF_Factory(SkStream*); 23 extern SkImageDecoder* SkImageDecoder_BMP_Factory(SkStream*); 24 extern SkImageDecoder* SkImageDecoder_ICO_Factory(SkStream*); 25 extern SkImageDecoder* SkImageDecoder_PNG_Factory(SkStream*); 26 extern SkImageDecoder* SkImageDecoder_WBMP_Factory(SkStream*); 27 extern SkImageDecoder* SkImageDecoder_JPEG_Factory(SkStream*); 28 29 typedef SkImageDecoder* (*SkImageDecoderFactoryProc)(SkStream*); 30 31 struct CodecFormat { 32 SkImageDecoderFactoryProc fProc; 33 SkImageDecoder::Format fFormat; 34 }; 35 36 static const CodecFormat gPairs[] = { 37 #if 0 38 { SkImageDecoder_GIF_Factory, SkImageDecoder::kGIF_Format }, 39 { SkImageDecoder_PNG_Factory, SkImageDecoder::kPNG_Format }, 40 { SkImageDecoder_ICO_Factory, SkImageDecoder::kICO_Format }, 41 { SkImageDecoder_WBMP_Factory, SkImageDecoder::kWBMP_Format }, 42 { SkImageDecoder_BMP_Factory, SkImageDecoder::kBMP_Format }, 43 { SkImageDecoder_JPEG_Factory, SkImageDecoder::kJPEG_Format } 44 #endif 45 }; 46 47 SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) { 48 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { 49 SkImageDecoder* codec = gPairs[i].fProc(stream); 50 stream->rewind(); 51 if (NULL != codec) { 52 return codec; 53 } 54 } 55 return NULL; 56 } 57 58 bool SkImageDecoder::SupportsFormat(Format format) { 59 for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { 60 if (gPairs[i].fFormat == format) { 61 return true; 62 } 63 } 64 return false; 65 } 66 67 ///////////////////////////////////////////////////////////////////////// 68 69 typedef SkMovie* (*SkMovieFactoryProc)(SkStream*); 70 71 extern SkMovie* SkMovie_GIF_Factory(SkStream*); 72 73 static const SkMovieFactoryProc gMovieProcs[] = { 74 #if 0 75 SkMovie_GIF_Factory 76 #endif 77 }; 78 79 SkMovie* SkMovie::DecodeStream(SkStream* stream) { 80 for (unsigned i = 0; i < SK_ARRAY_COUNT(gMovieProcs); i++) { 81 SkMovie* movie = gMovieProcs[i](stream); 82 if (NULL != movie) { 83 return movie; 84 } 85 stream->rewind(); 86 } 87 return NULL; 88 } 89 90 ///////////////////////////////////////////////////////////////////////// 91 92 extern SkImageEncoder* SkImageEncoder_JPEG_Factory(); 93 extern SkImageEncoder* SkImageEncoder_PNG_Factory(); 94 95 SkImageEncoder* SkImageEncoder::Create(Type t) { 96 switch (t) { 97 #if 0 98 case kJPEG_Type: 99 return SkImageEncoder_JPEG_Factory(); 100 case kPNG_Type: 101 return SkImageEncoder_PNG_Factory(); 102 #endif 103 default: 104 return NULL; 105 } 106 } 107 108