Camera: Support BufferQueue between Camera and StageFright
Use a BufferQueue between Camera and StageFright to pass video
buffers for Camera HALv3 devices.
CameraSource in StageFright will try to use "buffer queue" mode
if it is supported by the camera device. In "buffer queue" mode,
CameraSource creates a buffer queue and a listener thread to recieve
video buffers from camera device. CameraSource then wraps the
ANWBuffer in MediaBuffer. If the camera device doesn't support
"buffer queue" mode, it falls back to "metadata in video buffer"
mode or "real YUV data" mode.
"Metadata in video buffer" mode is removed from Camera2Client and
only "buffer queue" mode is supported.
Bug: 24511454
Change-Id: Ice833b57bcd8d91852d6415402013f56f3e3970a
diff --git a/camera/Camera.cpp b/camera/Camera.cpp
index 9bf3134..cd3b84c 100644
--- a/camera/Camera.cpp
+++ b/camera/Camera.cpp
@@ -136,6 +136,15 @@
return c->setPreviewTarget(bufferProducer);
}
+status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer)
+{
+ ALOGV("setVideoTarget(%p)", bufferProducer.get());
+ sp <ICamera> c = mCamera;
+ if (c == 0) return NO_INIT;
+ ALOGD_IF(bufferProducer == 0, "app passed NULL video surface");
+ return c->setVideoTarget(bufferProducer);
+}
+
// start preview mode
status_t Camera::startPreview()
{
@@ -145,13 +154,12 @@
return c->startPreview();
}
-status_t Camera::storeMetaDataInBuffers(bool enabled)
+status_t Camera::setVideoBufferMode(int32_t videoBufferMode)
{
- ALOGV("storeMetaDataInBuffers: %s",
- enabled? "true": "false");
+ ALOGV("setVideoBufferMode: %d", videoBufferMode);
sp <ICamera> c = mCamera;
if (c == 0) return NO_INIT;
- return c->storeMetaDataInBuffers(enabled);
+ return c->setVideoBufferMode(videoBufferMode);
}
// start recording mode, must call setPreviewTarget first