diff options
author | Mathias Agopian <mathias@google.com> | 2013-02-14 17:11:20 -0800 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2013-02-15 12:47:40 -0800 |
commit | 52800617946c456e78ed010c82d0ec4358368164 (patch) | |
tree | bad73c6c8deec082b972569b6f2e57a43e8d2d41 /core/jni/android_view_Surface.cpp | |
parent | 29479ebe1007361222bf6ab4d5e2a27927d4b8e8 (diff) | |
download | frameworks_base-52800617946c456e78ed010c82d0ec4358368164.zip frameworks_base-52800617946c456e78ed010c82d0ec4358368164.tar.gz frameworks_base-52800617946c456e78ed010c82d0ec4358368164.tar.bz2 |
Refactoring: Rename SurfaceTextureClient to Surface
Change-Id: I5a218ca11abeeec05e3a4c3cfc581bcc788814ea
Diffstat (limited to 'core/jni/android_view_Surface.cpp')
-rw-r--r-- | core/jni/android_view_Surface.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 566a983..e5a31e5 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -28,6 +28,7 @@ #include <android_runtime/android_graphics_SurfaceTexture.h> #include <gui/Surface.h> +#include <gui/SurfaceControl.h> #include <gui/GLConsumer.h> #include <ui/Rect.h> @@ -111,7 +112,13 @@ jobject android_view_Surface_createFromIGraphicBufferProducer(JNIEnv* env, // ---------------------------------------------------------------------------- -static jint nativeCreateFromSurfaceTexture(JNIEnv* env, jobject surfaceObj, +static bool isSurfaceValid(const sp<Surface>& sur) { + return sur != 0 && sur->getISurfaceTexture() != 0; +} + +// ---------------------------------------------------------------------------- + +static jint nativeCreateFromSurfaceTexture(JNIEnv* env, jclass clazz, jobject surfaceTextureObj) { sp<GLConsumer> st(SurfaceTexture_getSurfaceTexture(env, surfaceTextureObj)); if (st == NULL) { @@ -127,7 +134,7 @@ static jint nativeCreateFromSurfaceTexture(JNIEnv* env, jobject surfaceObj, return 0; } - surface->incStrong(surfaceObj); + surface->incStrong(clazz); return int(surface.get()); } @@ -143,12 +150,12 @@ static void nativeDestroy(JNIEnv* env, jclass clazz, jint nativeObject) { static jboolean nativeIsValid(JNIEnv* env, jclass clazz, jint nativeObject) { sp<Surface> sur(reinterpret_cast<Surface *>(nativeObject)); - return Surface::isValid(sur) ? JNI_TRUE : JNI_FALSE; + return isSurfaceValid(sur) ? JNI_TRUE : JNI_FALSE; } static jboolean nativeIsConsumerRunningBehind(JNIEnv* env, jclass clazz, jint nativeObject) { sp<Surface> sur(reinterpret_cast<Surface *>(nativeObject)); - if (!Surface::isValid(sur)) { + if (!isSurfaceValid(sur)) { doThrowIAE(env); return JNI_FALSE; } @@ -176,7 +183,7 @@ static inline SkBitmap::Config convertPixelFormat(PixelFormat format) { static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jint nativeObject, jobject dirtyRectObj) { sp<Surface> surface(reinterpret_cast<Surface *>(nativeObject)); - if (!Surface::isValid(surface)) { + if (!isSurfaceValid(surface)) { doThrowIAE(env); return NULL; } @@ -196,9 +203,11 @@ static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jint nativeObje dirtyRegion.set(Rect(0x3FFF, 0x3FFF)); } - Surface::SurfaceInfo info; - status_t err = surface->lock(&info, &dirtyRegion); + ANativeWindow_Buffer outBuffer; + Rect dirtyBounds(dirtyRegion.getBounds()); + status_t err = surface->lock(&outBuffer, &dirtyBounds); if (err < 0) { + dirtyRegion.set(dirtyBounds); const char* const exception = (err == NO_MEMORY) ? OutOfResourcesException : "java/lang/IllegalArgumentException"; @@ -208,18 +217,18 @@ static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jint nativeObje // Associate a SkCanvas object to this surface jobject canvasObj = env->GetObjectField(surfaceObj, gSurfaceClassInfo.mCanvas); - env->SetIntField(canvasObj, gCanvasClassInfo.mSurfaceFormat, info.format); + env->SetIntField(canvasObj, gCanvasClassInfo.mSurfaceFormat, outBuffer.format); SkCanvas* nativeCanvas = reinterpret_cast<SkCanvas*>( env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas)); SkBitmap bitmap; - ssize_t bpr = info.s * bytesPerPixel(info.format); - bitmap.setConfig(convertPixelFormat(info.format), info.w, info.h, bpr); - if (info.format == PIXEL_FORMAT_RGBX_8888) { + ssize_t bpr = outBuffer.stride * bytesPerPixel(outBuffer.format); + bitmap.setConfig(convertPixelFormat(outBuffer.format), outBuffer.width, outBuffer.height, bpr); + if (outBuffer.format == PIXEL_FORMAT_RGBX_8888) { bitmap.setIsOpaque(true); } - if (info.w > 0 && info.h > 0) { - bitmap.setPixels(info.bits); + if (outBuffer.width > 0 && outBuffer.height > 0) { + bitmap.setPixels(outBuffer.bits); } else { // be safe with an empty bitmap. bitmap.setPixels(NULL); @@ -263,7 +272,7 @@ static void nativeUnlockCanvasAndPost(JNIEnv* env, jobject surfaceObj, jint nati } sp<Surface> surface(reinterpret_cast<Surface *>(nativeObject)); - if (!Surface::isValid(surface)) { + if (!isSurfaceValid(surface)) { return; } |