Camera: Add hidden camera preview to renderscript allocation API
- Camera.createPreviewAllocation() creates YUV allocations for use as
a preview buffer destination.
- Camera.setPreviewCallbackAllocation() sets such an allocation as the
target for preview data from camera.
Bug: 8563840
Change-Id: Ie42033976fed825d396550bbc033d434c8206b6b
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 686e4e3..dec4cd4 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -586,6 +586,30 @@
}
}
+static void android_hardware_Camera_setPreviewCallbackSurface(JNIEnv *env,
+ jobject thiz, jobject jSurface)
+{
+ ALOGV("setPreviewCallbackSurface");
+ JNICameraContext* context;
+ sp<Camera> camera = get_native_camera(env, thiz, &context);
+ if (camera == 0) return;
+
+ sp<IGraphicBufferProducer> gbp;
+ sp<Surface> surface;
+ if (jSurface) {
+ surface = android_view_Surface_getSurface(env, jSurface);
+ if (surface != NULL) {
+ gbp = surface->getIGraphicBufferProducer();
+ }
+ }
+ // Clear out normal preview callbacks
+ context->setCallbackMode(env, false, false);
+ // Then set up callback surface
+ if (camera->setPreviewCallbackTarget(gbp) != NO_ERROR) {
+ jniThrowException(env, "java/io/IOException", "setPreviewCallbackTarget failed");
+ }
+}
+
static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz)
{
ALOGV("startPreview");
@@ -881,6 +905,9 @@
{ "setPreviewTexture",
"(Landroid/graphics/SurfaceTexture;)V",
(void *)android_hardware_Camera_setPreviewTexture },
+ { "setPreviewCallbackSurface",
+ "(Landroid/view/Surface;)V",
+ (void *)android_hardware_Camera_setPreviewCallbackSurface },
{ "startPreview",
"()V",
(void *)android_hardware_Camera_startPreview },