summaryrefslogtreecommitdiffstats
path: root/core/jni/android_view_Surface.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2013-02-14 17:11:20 -0800
committerMathias Agopian <mathias@google.com>2013-02-15 12:47:40 -0800
commit52800617946c456e78ed010c82d0ec4358368164 (patch)
treebad73c6c8deec082b972569b6f2e57a43e8d2d41 /core/jni/android_view_Surface.cpp
parent29479ebe1007361222bf6ab4d5e2a27927d4b8e8 (diff)
downloadframeworks_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.cpp37
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;
}