static BaseLayerAndroid* nativeDeserializeViewState(JNIEnv* env, jobject, jint version, jobject jstream, jbyteArray jstorage) { SkStream* stream = CreateJavaInputStreamAdaptor(env, jstream, jstorage); if (!stream) return 0; Color color = stream->readU32(); SkPicture* picture = new SkPicture(stream); PictureLayerContent* content = new PictureLayerContent(picture); BaseLayerAndroid* layer = new BaseLayerAndroid(content); layer->setBackgroundColor(color); SkRegion dirtyRegion; dirtyRegion.setRect(0, 0, content->width(), content->height()); layer->markAsDirty(dirtyRegion); SkSafeUnref(content); SkSafeUnref(picture); int childCount = stream->readS32(); for (int i = 0; i < childCount; i++) { LayerAndroid* childLayer = deserializeLayer(version, stream); if (childLayer) layer->addChild(childLayer); } delete stream; return layer; }
static BaseLayerAndroid* nativeDeserializeViewState(JNIEnv* env, jobject, jobject jstream, jbyteArray jstorage) { SkStream* stream = CreateJavaInputStreamAdaptor(env, jstream, jstorage); if (!stream) return 0; BaseLayerAndroid* layer = new BaseLayerAndroid(); // SAMSUNG CHANGE >> White flickering issue. // WAS:Color color = stream->readU32(); SkColor color = stream->readU32(); // SAMSUNG CHANGE << #if USE(ACCELERATED_COMPOSITING) layer->setBackgroundColor(color); #endif SkPicture* picture = new SkPicture(stream); layer->setContent(picture); SkSafeUnref(picture); int childCount = stream->readS32(); for (int i = 0; i < childCount; i++) { LayerAndroid* childLayer = deserializeLayer(stream); if (childLayer) layer->addChild(childLayer); } delete stream; return layer; }
SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, jbyteArray storage) { SkAutoTUnref<SkStream> adaptor(CreateJavaInputStreamAdaptor(env, stream, storage)); if (NULL == adaptor.get()) { return NULL; } return adaptor_to_mem_stream(adaptor.get()); }
static jlong deserialize(JNIEnv* env, jobject, jobject jstream, jbyteArray jstorage) { SkPicture* picture = NULL; SkStream* strm = CreateJavaInputStreamAdaptor(env, jstream, jstorage); if (strm) { picture = SkPicture::CreateFromStream(strm); delete strm; } return reinterpret_cast<jlong>(picture); }
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_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); }