/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkImageDecoder.h" #include "SkMovie.h" #include "SkStream.h" extern SkImageDecoder* SkImageDecoder_GIF_Factory(SkStream*); extern SkImageDecoder* SkImageDecoder_BMP_Factory(SkStream*); extern SkImageDecoder* SkImageDecoder_ICO_Factory(SkStream*); extern SkImageDecoder* SkImageDecoder_PNG_Factory(SkStream*); extern SkImageDecoder* SkImageDecoder_WBMP_Factory(SkStream*); extern SkImageDecoder* SkImageDecoder_JPEG_Factory(SkStream*); typedef SkImageDecoder* (*SkImageDecoderFactoryProc)(SkStream*); struct CodecFormat { SkImageDecoderFactoryProc fProc; SkImageDecoder::Format fFormat; }; static const CodecFormat gPairs[] = { #if 0 { SkImageDecoder_GIF_Factory, SkImageDecoder::kGIF_Format }, { SkImageDecoder_PNG_Factory, SkImageDecoder::kPNG_Format }, { SkImageDecoder_ICO_Factory, SkImageDecoder::kICO_Format }, { SkImageDecoder_WBMP_Factory, SkImageDecoder::kWBMP_Format }, { SkImageDecoder_BMP_Factory, SkImageDecoder::kBMP_Format }, { SkImageDecoder_JPEG_Factory, SkImageDecoder::kJPEG_Format } #endif }; SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) { for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { SkImageDecoder* codec = gPairs[i].fProc(stream); stream->rewind(); if (NULL != codec) { return codec; } } return NULL; } bool SkImageDecoder::SupportsFormat(Format format) { for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { if (gPairs[i].fFormat == format) { return true; } } return false; } ///////////////////////////////////////////////////////////////////////// typedef SkMovie* (*SkMovieFactoryProc)(SkStream*); extern SkMovie* SkMovie_GIF_Factory(SkStream*); static const SkMovieFactoryProc gMovieProcs[] = { #if 0 SkMovie_GIF_Factory #endif }; SkMovie* SkMovie::DecodeStream(SkStream* stream) { for (unsigned i = 0; i < SK_ARRAY_COUNT(gMovieProcs); i++) { SkMovie* movie = gMovieProcs[i](stream); if (NULL != movie) { return movie; } stream->rewind(); } return NULL; } ///////////////////////////////////////////////////////////////////////// extern SkImageEncoder* SkImageEncoder_JPEG_Factory(); extern SkImageEncoder* SkImageEncoder_PNG_Factory(); SkImageEncoder* SkImageEncoder::Create(Type t) { switch (t) { #if 0 case kJPEG_Type: return SkImageEncoder_JPEG_Factory(); case kPNG_Type: return SkImageEncoder_PNG_Factory(); #endif default: return NULL; } }