ECode Movie::NativeDecodeStream( /* [in] */ IInputStream* istream, /* [out] */IMovie** movie) { VALIDATE_NOT_NULL(movie); // NPE_CHECK_RETURN_ZERO(env, istream); if (istream == NULL) { *movie = NULL; return NOERROR; } AutoPtr<ArrayOf<Byte> > byteArray = ArrayOf<Byte>::Alloc(16*1024); // ScopedLocalRef<jbyteArray> scoper(env, byteArray); SkStream* strm = CreateInputStreamAdaptor(istream, byteArray); if (NULL == strm) { *movie = NULL; return NOERROR; } // Need to buffer enough input to be able to rewind as much as might be read by a decoder // trying to determine the stream's format. The only decoder for movies is GIF, which // will only read 6. // FIXME: Get this number from SkImageDecoder SkAutoTUnref<SkStreamRewindable> bufferedStream(SkFrontBufferedStream::Create(strm, 6)); SkASSERT(bufferedStream.get() != NULL); SkMovie* moov = SkMovie::DecodeStream(bufferedStream); strm->unref(); return CreateMovie(moov, movie); }
SkStreamRewindable* CopyJavaInputStream( /* [in] */ IInputStream* stream, /* [in] */ ArrayOf<Byte>* storage) { SkAutoTUnref<SkStream> adaptor(CreateInputStreamAdaptor(stream, storage)); if (NULL == adaptor.get()) { return NULL; } return adaptor_to_mem_stream(adaptor.get()); }
Int64 CPicture::NativeCreateFromStream( /* [in] */ IInputStream* stream, /* [in] */ ArrayOf<Byte>* storage) { NativePicture* picture = NULL; SkStream* strm = CreateInputStreamAdaptor(stream, storage); if (strm) { picture = NativePicture::CreateFromStream(strm); delete strm; } return reinterpret_cast<Int64>(picture); }