diff options
author | John Reck <jreck@google.com> | 2015-04-10 13:52:57 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2015-04-13 09:50:42 -0700 |
commit | a771b9861d11671c780092d35c0062eeefcf37c0 (patch) | |
tree | a575dc870712330cb8ddc70b5dccd0df26806a6a /core/jni/android/graphics/Graphics.cpp | |
parent | 4147877b388eb4a6f4e1ee116edfa58a018891ca (diff) | |
download | frameworks_base-a771b9861d11671c780092d35c0062eeefcf37c0.zip frameworks_base-a771b9861d11671c780092d35c0062eeefcf37c0.tar.gz frameworks_base-a771b9861d11671c780092d35c0062eeefcf37c0.tar.bz2 |
Change how Java Bitmaps are accessed in a few places
Stop assuming that a Java Bitmap has a SkBitmap* that
has some externally managed lifecycle, and instead switch
a bunch of users to accessing the bitmap by providing
their own SkBitmap* on which to set the (ref counted!)
SkPixelRef* instead
Change-Id: I0fd9e193968b41e5597784140d56b4885906864a
Diffstat (limited to 'core/jni/android/graphics/Graphics.cpp')
-rw-r--r-- | core/jni/android/graphics/Graphics.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp index 0747969..f0bd5dd 100644 --- a/core/jni/android/graphics/Graphics.cpp +++ b/core/jni/android/graphics/Graphics.cpp @@ -338,7 +338,7 @@ SkColorType GraphicsJNI::legacyBitmapConfigToColorType(jint legacyConfig) { return static_cast<SkColorType>(gConfig2ColorType[legacyConfig]); } -SkBitmap* GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap) { +SkBitmap* GraphicsJNI::getSkBitmapDeprecated(JNIEnv* env, jobject bitmap) { SkASSERT(env); SkASSERT(bitmap); SkASSERT(env->IsInstanceOf(bitmap, gBitmap_class)); @@ -348,6 +348,21 @@ SkBitmap* GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap) { return b; } +void GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap, SkBitmap* outBitmap) { + SkPixelRef* pixelRef = getSkPixelRef(env, bitmap); + // TODO: pixelRef->rowBytes() is only valid if the pixels are locked + // (which is currently always true on android), switch this to querying + // from the wrapper once that exists instead + outBitmap->setInfo(pixelRef->info(), pixelRef->rowBytes()); + outBitmap->setPixelRef(pixelRef); +} + +SkPixelRef* GraphicsJNI::getSkPixelRef(JNIEnv* env, jobject bitmap) { + jlong bitmapHandle = env->GetLongField(bitmap, gBitmap_skBitmapPtr); + SkBitmap* b = reinterpret_cast<SkBitmap*>(bitmapHandle); + return b->pixelRef(); +} + SkColorType GraphicsJNI::getNativeBitmapColorType(JNIEnv* env, jobject jconfig) { SkASSERT(env); if (NULL == jconfig) { |