1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #include "SkImageDecoder.h" 10 #include "SkMovie.h" 11 #include "SkStream.h" 12 13 extern SkImageDecoder* image_decoder_from_stream(SkStreamRewindable*); 14 15 SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) { 16 return image_decoder_from_stream(stream); 17 } 18 19 ///////////////////////////////////////////////////////////////////////// 20 21 typedef SkTRegistry<SkMovie*(*)(SkStreamRewindable*)> MovieReg; 22 23 SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) { 24 const MovieReg* curr = MovieReg::Head(); 25 while (curr) { 26 SkMovie* movie = curr->factory()(stream); 27 if (movie) { 28 return movie; 29 } 30 // we must rewind only if we got nullptr, since we gave the stream to the 31 // movie, who may have already started reading from it 32 stream->rewind(); 33 curr = curr->next(); 34 } 35 return nullptr; 36 } 37