diff options
-rw-r--r-- | core/jni/android/graphics/BitmapFactory.cpp | 2 | ||||
-rw-r--r-- | core/jni/android/graphics/BitmapRegionDecoder.cpp | 2 | ||||
-rw-r--r-- | core/jni/android/graphics/Graphics.cpp | 17 | ||||
-rw-r--r-- | core/jni/android/graphics/GraphicsJNI.h | 4 | ||||
-rw-r--r-- | core/jni/android/graphics/pdf/PdfRenderer.cpp | 19 | ||||
-rw-r--r-- | core/jni/android/opengl/util.cpp | 18 | ||||
-rw-r--r-- | core/jni/android_view_PointerIcon.cpp | 5 | ||||
-rw-r--r-- | core/jni/com_google_android_gles_jni_EGLImpl.cpp | 13 | ||||
-rw-r--r-- | graphics/java/android/graphics/pdf/PdfRenderer.java | 4 | ||||
-rw-r--r-- | media/jni/android_media_MediaMetadataRetriever.cpp | 9 | ||||
-rw-r--r-- | native/graphics/jni/bitmap.cpp | 35 | ||||
-rw-r--r-- | rs/jni/android_renderscript_RenderScript.cpp | 25 |
12 files changed, 69 insertions, 84 deletions
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index d4069a1..4c4a39d 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -261,7 +261,7 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding SkBitmap* outputBitmap = NULL; unsigned int existingBufferSize = 0; if (javaBitmap != NULL) { - outputBitmap = GraphicsJNI::getSkBitmapDeprecated(env, javaBitmap); + outputBitmap = GraphicsJNI::getSkBitmap(env, javaBitmap); if (outputBitmap->isImmutable()) { ALOGW("Unable to reuse an immutable bitmap as an image decoder target."); javaBitmap = NULL; diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp index aeea808..3525d07 100644 --- a/core/jni/android/graphics/BitmapRegionDecoder.cpp +++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp @@ -217,7 +217,7 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, if (tileBitmap != NULL) { // Re-use bitmap. - bitmap = GraphicsJNI::getSkBitmapDeprecated(env, tileBitmap); + bitmap = GraphicsJNI::getSkBitmap(env, tileBitmap); } if (bitmap == NULL) { bitmap = new SkBitmap; diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp index f0bd5dd..0747969 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::getSkBitmapDeprecated(JNIEnv* env, jobject bitmap) { +SkBitmap* GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap) { SkASSERT(env); SkASSERT(bitmap); SkASSERT(env->IsInstanceOf(bitmap, gBitmap_class)); @@ -348,21 +348,6 @@ SkBitmap* GraphicsJNI::getSkBitmapDeprecated(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) { diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h index 49def13..422d3f1 100644 --- a/core/jni/android/graphics/GraphicsJNI.h +++ b/core/jni/android/graphics/GraphicsJNI.h @@ -48,9 +48,7 @@ public: static void point_to_jpointf(const SkPoint& point, JNIEnv*, jobject jpointf); static SkCanvas* getNativeCanvas(JNIEnv*, jobject canvas); - static SkBitmap* getSkBitmapDeprecated(JNIEnv*, jobject bitmap); - static void getSkBitmap(JNIEnv*, jobject bitmap, SkBitmap* outBitmap); - static SkPixelRef* getSkPixelRef(JNIEnv*, jobject bitmap); + static SkBitmap* getSkBitmap(JNIEnv*, jobject bitmap); static SkRegion* getNativeRegion(JNIEnv*, jobject region); // Given the 'native' long held by the Rasterizer.java object, return a diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/core/jni/android/graphics/pdf/PdfRenderer.cpp index 876bea4..fc98cf9 100644 --- a/core/jni/android/graphics/pdf/PdfRenderer.cpp +++ b/core/jni/android/graphics/pdf/PdfRenderer.cpp @@ -243,21 +243,19 @@ static void renderPageBitmap(FPDF_BITMAP bitmap, FPDF_PAGE page, int destLeft, i } static void nativeRenderPage(JNIEnv* env, jclass thiz, jlong documentPtr, jlong pagePtr, - jobject jbitmap, jint destLeft, jint destTop, jint destRight, jint destBottom, + jlong bitmapPtr, jint destLeft, jint destTop, jint destRight, jint destBottom, jlong matrixPtr, jint renderMode) { FPDF_PAGE page = reinterpret_cast<FPDF_PAGE>(pagePtr); + SkBitmap* skBitmap = reinterpret_cast<SkBitmap*>(bitmapPtr); SkMatrix* skMatrix = reinterpret_cast<SkMatrix*>(matrixPtr); - SkBitmap skBitmap; - GraphicsJNI::getSkBitmap(env, jbitmap, &skBitmap); + skBitmap->lockPixels(); - SkAutoLockPixels alp(skBitmap); + const int stride = skBitmap->width() * 4; - const int stride = skBitmap.width() * 4; - - FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(skBitmap.width(), skBitmap.height(), - FPDFBitmap_BGRA, skBitmap.getPixels(), stride); + FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(skBitmap->width(), skBitmap->height(), + FPDFBitmap_BGRA, skBitmap->getPixels(), stride); if (!bitmap) { ALOGE("Erorr creating bitmap"); @@ -280,7 +278,8 @@ static void nativeRenderPage(JNIEnv* env, jclass thiz, jlong documentPtr, jlong renderPageBitmap(bitmap, page, destLeft, destTop, destRight, destBottom, skMatrix, renderFlags); - skBitmap.notifyPixelsChanged(); + skBitmap->notifyPixelsChanged(); + skBitmap->unlockPixels(); } static JNINativeMethod gPdfRenderer_Methods[] = { @@ -288,7 +287,7 @@ static JNINativeMethod gPdfRenderer_Methods[] = { {"nativeClose", "(J)V", (void*) nativeClose}, {"nativeGetPageCount", "(J)I", (void*) nativeGetPageCount}, {"nativeScaleForPrinting", "(J)Z", (void*) nativeScaleForPrinting}, - {"nativeRenderPage", "(JJLandroid/graphics/Bitmap;IIIIJI)V", (void*) nativeRenderPage}, + {"nativeRenderPage", "(JJJIIIIJI)V", (void*) nativeRenderPage}, {"nativeOpenPageAndGetSize", "(JILandroid/graphics/Point;)J", (void*) nativeOpenPageAndGetSize}, {"nativeClosePage", "(J)V", (void*) nativeClosePage} }; diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp index bce2b33..5c2d0d0 100644 --- a/core/jni/android/opengl/util.cpp +++ b/core/jni/android/opengl/util.cpp @@ -618,25 +618,23 @@ static int getType(SkColorType colorType) static jint util_getInternalFormat(JNIEnv *env, jclass clazz, jobject jbitmap) { - SkBitmap nativeBitmap; - GraphicsJNI::getSkBitmap(env, jbitmap, &nativeBitmap); - return getInternalFormat(nativeBitmap.colorType()); + SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap); + return getInternalFormat(nativeBitmap->colorType()); } static jint util_getType(JNIEnv *env, jclass clazz, jobject jbitmap) { - SkBitmap nativeBitmap; - GraphicsJNI::getSkBitmap(env, jbitmap, &nativeBitmap); - return getType(nativeBitmap.colorType()); + SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap); + return getType(nativeBitmap->colorType()); } static jint util_texImage2D(JNIEnv *env, jclass clazz, jint target, jint level, jint internalformat, jobject jbitmap, jint type, jint border) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); SkColorType colorType = bitmap.colorType(); if (internalformat < 0) { internalformat = getInternalFormat(colorType); @@ -682,8 +680,8 @@ static jint util_texSubImage2D(JNIEnv *env, jclass clazz, jint target, jint level, jint xoffset, jint yoffset, jobject jbitmap, jint format, jint type) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); SkColorType colorType = bitmap.colorType(); if (format < 0) { format = getInternalFormat(colorType); diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp index d04adbf..f6d9a1a 100644 --- a/core/jni/android_view_PointerIcon.cpp +++ b/core/jni/android_view_PointerIcon.cpp @@ -80,7 +80,10 @@ status_t android_view_PointerIcon_load(JNIEnv* env, jobject pointerIconObj, jobj jobject bitmapObj = env->GetObjectField(loadedPointerIconObj, gPointerIconClassInfo.mBitmap); if (bitmapObj) { - GraphicsJNI::getSkBitmap(env, bitmapObj, &(outPointerIcon->bitmap)); + SkBitmap* bitmap = GraphicsJNI::getSkBitmap(env, bitmapObj); + if (bitmap) { + outPointerIcon->bitmap = *bitmap; // use a shared pixel ref + } env->DeleteLocalRef(bitmapObj); } diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp index baeb7dd..7080e2a 100644 --- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp @@ -277,9 +277,8 @@ static void jni_eglCreatePixmapSurface(JNIEnv *_env, jobject _this, jobject out_ EGLConfig cnf = getConfig(_env, config); jint* base = 0; - SkBitmap nativeBitmap; - GraphicsJNI::getSkBitmap(_env, native_pixmap, &nativeBitmap); - SkPixelRef* ref = nativeBitmap.pixelRef(); + SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(_env, native_pixmap); + SkPixelRef* ref = nativeBitmap ? nativeBitmap->pixelRef() : 0; if (ref == NULL) { jniThrowException(_env, "java/lang/IllegalArgumentException", "Bitmap has no PixelRef"); return; @@ -290,10 +289,10 @@ static void jni_eglCreatePixmapSurface(JNIEnv *_env, jobject _this, jobject out_ egl_native_pixmap_t pixmap; pixmap.version = sizeof(pixmap); - pixmap.width = nativeBitmap.width(); - pixmap.height = nativeBitmap.height(); - pixmap.stride = nativeBitmap.rowBytes() / nativeBitmap.bytesPerPixel(); - pixmap.format = convertPixelFormat(nativeBitmap.colorType()); + pixmap.width = nativeBitmap->width(); + pixmap.height = nativeBitmap->height(); + pixmap.stride = nativeBitmap->rowBytes() / nativeBitmap->bytesPerPixel(); + pixmap.format = convertPixelFormat(nativeBitmap->colorType()); pixmap.data = (uint8_t*)ref->pixels(); base = beginNativeAttribList(_env, attrib_list); diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java index feb8052..b32dcc6 100644 --- a/graphics/java/android/graphics/pdf/PdfRenderer.java +++ b/graphics/java/android/graphics/pdf/PdfRenderer.java @@ -380,7 +380,7 @@ public final class PdfRenderer implements AutoCloseable { final long transformPtr = (transform != null) ? transform.native_instance : 0; - nativeRenderPage(mNativeDocument, mNativePage, destination, contentLeft, + nativeRenderPage(mNativeDocument, mNativePage, destination.getSkBitmap(), contentLeft, contentTop, contentRight, contentBottom, transformPtr, renderMode); } @@ -425,7 +425,7 @@ public final class PdfRenderer implements AutoCloseable { private static native void nativeClose(long documentPtr); private static native int nativeGetPageCount(long documentPtr); private static native boolean nativeScaleForPrinting(long documentPtr); - private static native void nativeRenderPage(long documentPtr, long pagePtr, Bitmap dest, + private static native void nativeRenderPage(long documentPtr, long pagePtr, long destPtr, int destLeft, int destTop, int destRight, int destBottom, long matrixPtr, int renderMode); private static native long nativeOpenPageAndGetSize(long documentPtr, int pageIndex, Point outSize); diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp index c6fa379..2f6bbf4 100644 --- a/media/jni/android_media_MediaMetadataRetriever.cpp +++ b/media/jni/android_media_MediaMetadataRetriever.cpp @@ -281,16 +281,15 @@ static jobject android_media_MediaMetadataRetriever_getFrameAtTime(JNIEnv *env, return NULL; } - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(env, jBitmap, &bitmap); + SkBitmap *bitmap = GraphicsJNI::getSkBitmap(env, jBitmap); - bitmap.lockPixels(); - rotate((uint16_t*)bitmap.getPixels(), + bitmap->lockPixels(); + rotate((uint16_t*)bitmap->getPixels(), (uint16_t*)((char*)videoFrame + sizeof(VideoFrame)), videoFrame->mWidth, videoFrame->mHeight, videoFrame->mRotationAngle); - bitmap.unlockPixels(); + bitmap->unlockPixels(); if (videoFrame->mDisplayWidth != videoFrame->mWidth || videoFrame->mDisplayHeight != videoFrame->mHeight) { diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index 0521833..ddb01a0 100644 --- a/native/graphics/jni/bitmap.cpp +++ b/native/graphics/jni/bitmap.cpp @@ -27,16 +27,18 @@ int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, return ANDROID_BITMAP_RESULT_BAD_PARAMETER; } - SkBitmap bm; - GraphicsJNI::getSkBitmap(env, jbitmap, &bm); + SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap); + if (NULL == bm) { + return ANDROID_BITMAP_RESULT_JNI_EXCEPTION; + } if (info) { - info->width = bm.width(); - info->height = bm.height(); - info->stride = bm.rowBytes(); + info->width = bm->width(); + info->height = bm->height(); + info->stride = bm->rowBytes(); info->flags = 0; - switch (bm.colorType()) { + switch (bm->colorType()) { case kN32_SkColorType: info->format = ANDROID_BITMAP_FORMAT_RGBA_8888; break; @@ -62,18 +64,17 @@ int AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr) { return ANDROID_BITMAP_RESULT_BAD_PARAMETER; } - SkPixelRef* pixelRef = GraphicsJNI::getSkPixelRef(env, jbitmap); - if (!pixelRef) { + SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap); + if (NULL == bm) { return ANDROID_BITMAP_RESULT_JNI_EXCEPTION; } - pixelRef->lockPixels(); - void* addr = pixelRef->pixels(); + bm->lockPixels(); + void* addr = bm->getPixels(); if (NULL == addr) { - pixelRef->unlockPixels(); + bm->unlockPixels(); return ANDROID_BITMAP_RESULT_ALLOCATION_FAILED; } - pixelRef->ref(); if (addrPtr) { *addrPtr = addr; @@ -86,8 +87,8 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap) { return ANDROID_BITMAP_RESULT_BAD_PARAMETER; } - SkPixelRef* pixelRef = GraphicsJNI::getSkPixelRef(env, jbitmap); - if (!pixelRef) { + SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap); + if (NULL == bm) { return ANDROID_BITMAP_RESULT_JNI_EXCEPTION; } @@ -95,11 +96,9 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap) { // bitmaps. Note that this will slow down read-only accesses to the // bitmaps, but the NDK methods are primarily intended to be used for // writes. - pixelRef->notifyPixelsChanged(); - - pixelRef->unlockPixels(); - pixelRef->unref(); + bm->notifyPixelsChanged(); + bm->unlockPixels(); return ANDROID_BITMAP_RESULT_SUCCESS; } diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp index 841e684..40fad38 100644 --- a/rs/jni/android_renderscript_RenderScript.cpp +++ b/rs/jni/android_renderscript_RenderScript.cpp @@ -1063,8 +1063,9 @@ static jlong nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = + GraphicsJNI::getSkBitmap(_env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); bitmap.lockPixels(); const void* ptr = bitmap.getPixels(); @@ -1079,8 +1080,9 @@ static jlong nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = + GraphicsJNI::getSkBitmap(_env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); bitmap.lockPixels(); const void* ptr = bitmap.getPixels(); @@ -1095,8 +1097,9 @@ static jlong nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = + GraphicsJNI::getSkBitmap(_env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); bitmap.lockPixels(); const void* ptr = bitmap.getPixels(); @@ -1110,8 +1113,9 @@ nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong ty static void nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = + GraphicsJNI::getSkBitmap(_env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); int w = bitmap.width(); int h = bitmap.height(); @@ -1126,8 +1130,9 @@ nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, j static void nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap) { - SkBitmap bitmap; - GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap); + SkBitmap const * nativeBitmap = + GraphicsJNI::getSkBitmap(_env, jbitmap); + const SkBitmap& bitmap(*nativeBitmap); bitmap.lockPixels(); void* ptr = bitmap.getPixels(); |