b5571b3324
Only affects factories, static functions that will use the factories, and subset decoding, which all require rewinding. The decoders themselves continue to take an SkStream. This is merely documentation stating which functions will possibly rewind the passed in SkStream. This is part of the general change to coordinate SkStreams with Android's streams, which don't necessarily support rewinding in all cases. Update callers to use SkStreamRewindable. BUG=skia:1572 R=bungeman@google.com, reed@google.com Review URL: https://codereview.chromium.org/23477009 git-svn-id: http://skia.googlecode.com/svn/trunk@11460 2bbb7eff-a529-9590-31e7-b0007b416f81
37 lines
1023 B
C++
37 lines
1023 B
C++
|
|
/*
|
|
* 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* image_decoder_from_stream(SkStreamRewindable*);
|
|
|
|
SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) {
|
|
return image_decoder_from_stream(stream);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef SkTRegistry<SkMovie*(*)(SkStreamRewindable*)> MovieReg;
|
|
|
|
SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) {
|
|
const MovieReg* curr = MovieReg::Head();
|
|
while (curr) {
|
|
SkMovie* movie = curr->factory()(stream);
|
|
if (movie) {
|
|
return movie;
|
|
}
|
|
// we must rewind only if we got NULL, since we gave the stream to the
|
|
// movie, who may have already started reading from it
|
|
stream->rewind();
|
|
curr = curr->next();
|
|
}
|
|
return NULL;
|
|
}
|