static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jlong native_asset) { android::Asset* asset = reinterpret_cast<android::Asset*>(native_asset); if (asset == NULL) return NULL; SkAutoTUnref<SkStreamRewindable> stream (new android::AssetStreamAdaptor(asset)); SkMovie* moov = SkMovie::DecodeStream(stream.get()); return create_jmovie(env, moov); }
static jobject movie_decodeStream(JNIEnv* env, jobject clazz, jobject istream) { NPE_CHECK_RETURN_ZERO(env, istream); // what is the lifetime of the array? Can the skstream hold onto it? jbyteArray byteArray = env->NewByteArray(16*1024); SkStream* strm = CreateJavaInputStreamAdaptor(env, istream, byteArray); if (NULL == strm) { return 0; } SkMovie* moov = SkMovie::DecodeStream(strm); strm->unref(); return create_jmovie(env, moov); }
static jobject movie_decodeByteArray(JNIEnv* env, jobject clazz, jbyteArray byteArray, jint offset, jint length) { NPE_CHECK_RETURN_ZERO(env, byteArray); int totalLength = env->GetArrayLength(byteArray); if ((offset | length) < 0 || offset + length > totalLength) { doThrowAIOOBE(env); return 0; } AutoJavaByteArray ar(env, byteArray); SkMovie* moov = SkMovie::DecodeMemory(ar.ptr() + offset, length); return create_jmovie(env, moov); }
static jobject movie_decodeStream(JNIEnv* env,jobject movie,jobject jstream){ // LOGI("movie_decodeStream"); // GifFileType* gifFileType = NULL; // openStream(gifType,env,jstream); // GifMovie* moov = new GifMovie(gifType); // if(gifType==NULL){ // LOGI("moov is null"); // }else{ // LOGI("moov is not null"); // } jbyteArray byteArray = env->NewByteArray(16*1024); GifJavaInputStreamAdaptor* strm = GifJavaInputStreamAdaptor::CreateGifJavaInputStreamAdaptor(env, jstream, byteArray); if (NULL == strm) { return 0; } GifMovie* moov = new GifMovie(strm); delete strm; return create_jmovie(env, moov); }
static jobject movie_decodeStream(JNIEnv* env, jobject clazz, jobject istream) { NPE_CHECK_RETURN_ZERO(env, istream); jbyteArray byteArray = env->NewByteArray(16*1024); ScopedLocalRef<jbyteArray> scoper(env, byteArray); SkStream* strm = CreateJavaInputStreamAdaptor(env, istream, byteArray); if (NULL == strm) { return 0; } // 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 create_jmovie(env, moov); }
static jobject movie_decodeFile(JNIEnv* env,jobject movie,jstring jpath){ char* path = jstringtochar(env,jpath); GifMovie* moov = new GifMovie(path); return create_jmovie(env, moov); }