blob: 45eb346115d68e9929905cb1b971eefd7f5c11c4 [file] [log] [blame]
reed@android.com6efdc472008-12-19 18:24:35 +00001/* 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
22extern SkImageDecoder* SkImageDecoder_GIF_Factory(SkStream*);
23extern SkImageDecoder* SkImageDecoder_BMP_Factory(SkStream*);
24extern SkImageDecoder* SkImageDecoder_ICO_Factory(SkStream*);
25extern SkImageDecoder* SkImageDecoder_PNG_Factory(SkStream*);
26extern SkImageDecoder* SkImageDecoder_WBMP_Factory(SkStream*);
27extern SkImageDecoder* SkImageDecoder_JPEG_Factory(SkStream*);
28
29typedef SkImageDecoder* (*SkImageDecoderFactoryProc)(SkStream*);
30
31struct CodecFormat {
32 SkImageDecoderFactoryProc fProc;
33 SkImageDecoder::Format fFormat;
34};
35
36static 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
47SkImageDecoder* 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
58bool 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
69typedef SkMovie* (*SkMovieFactoryProc)(SkStream*);
70
71extern SkMovie* SkMovie_GIF_Factory(SkStream*);
72
73static const SkMovieFactoryProc gMovieProcs[] = {
74#if 0
75 SkMovie_GIF_Factory
76#endif
77};
78
79SkMovie* 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#ifdef SK_SUPPORT_IMAGE_ENCODE
93
94extern SkImageEncoder* SkImageEncoder_JPEG_Factory();
95extern SkImageEncoder* SkImageEncoder_PNG_Factory();
96
97SkImageEncoder* SkImageEncoder::Create(Type t) {
98 switch (t) {
99#if 0
100 case kJPEG_Type:
101 return SkImageEncoder_JPEG_Factory();
102 case kPNG_Type:
103 return SkImageEncoder_PNG_Factory();
104#endif
105 default:
106 return NULL;
107 }
108}
109
110#endif