17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/* 37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2006 The Android Open Source Project 47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * 57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file. 77839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */ 87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkImageDecoder.h" 107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkMovie.h" 117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkStream.h" 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 130a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergerextern SkImageDecoder* image_decoder_from_stream(SkStreamRewindable*); 147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 150a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerSkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) { 167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return image_decoder_from_stream(stream); 177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger///////////////////////////////////////////////////////////////////////// 207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 210a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenbergertypedef SkTRegistry<SkMovie*(*)(SkStreamRewindable*)> MovieReg; 227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 230a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerSkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) { 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const MovieReg* curr = MovieReg::Head(); 257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger while (curr) { 267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkMovie* movie = curr->factory()(stream); 277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (movie) { 287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return movie; 297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // we must rewind only if we got NULL, since we gave the stream to the 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // movie, who may have already started reading from it 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger stream->rewind(); 337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger curr = curr->next(); 347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return NULL; 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 37