summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilian Peev <epeev@mm-sol.com>2012-10-30 14:17:23 +0200
committerDaniel Levin <dendy@ti.com>2012-11-26 20:18:39 +0200
commit9010f9444a792b248e6082007061b0c930248cea (patch)
tree765680002f9da36029a00b7a5a412bb60935a730
parent6b2c36552251da51b7899b56d030015474580e4b (diff)
downloadhardware_ti_omap4-9010f9444a792b248e6082007061b0c930248cea.tar.gz
hardware_ti_omap4-9010f9444a792b248e6082007061b0c930248cea.tar.bz2
hardware_ti_omap4-9010f9444a792b248e6082007061b0c930248cea.zip
CameraHal: Release reprocess input buffers
- Currently reprocess buffers are getting acquired from a 'BufferQueue' via calls to 'update_and_get_current()'. Those buffers are not getting properly released though. Depends on frameworks/av I050800fa: http://review.omapzoom.org/#/c/30198/ Change-Id: I841a78063bcf18f7ecf3882311ecc9dee3be6745 Signed-off-by: Emilian Peev <epeev@mm-sol.com>
-rw-r--r--camera/BufferSourceAdapter.cpp7
-rw-r--r--camera/CameraHal.cpp7
-rw-r--r--camera/inc/CameraHal.h1
3 files changed, 13 insertions, 2 deletions
diff --git a/camera/BufferSourceAdapter.cpp b/camera/BufferSourceAdapter.cpp
index 01aa284..3c4e698 100644
--- a/camera/BufferSourceAdapter.cpp
+++ b/camera/BufferSourceAdapter.cpp
@@ -632,6 +632,7 @@ CameraBuffer* BufferSourceAdapter::getBufferList(int *num) {
// TODO(XXX): Only supporting one input buffer at a time right now
*num = 1;
+ mBufferCount = *num;
mBuffers = new CameraBuffer [lnumBufs];
memset (mBuffers, 0, sizeof(CameraBuffer) * lnumBufs);
@@ -639,7 +640,10 @@ CameraBuffer* BufferSourceAdapter::getBufferList(int *num) {
return NULL;
}
- err = extendedOps()->update_and_get_buffer(mBufferSource, &handle, &mBuffers[0].stride);
+ err = extendedOps()->update_and_get_buffer(mBufferSource,
+ &handle,
+ &mBuffers[0].stride,
+ &mBuffers[0].privateData);
if (err != 0) {
CAMHAL_LOGEB("update and get buffer failed: %s (%d)", strerror(-err), -err);
if ( ENODEV == err ) {
@@ -877,6 +881,7 @@ void BufferSourceAdapter::handleFrameCallback(CameraFrame* frame)
if (frame->mFrameType == CameraFrame::REPROCESS_INPUT_FRAME) {
CAMHAL_LOGD("Unlock %p (buffer #%d)", handle, i);
mapper.unlock(*handle);
+ extendedOps()->release_buffer(mBufferSource, mBuffers[i].privateData);
return;
}
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index e3bee43..37baec8 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -68,7 +68,11 @@ extern const char * const kYuvImagesOutputDirPath = "/data/misc/camera/YuV_PiCtU
#ifdef OMAP_ENHANCEMENT_CPCAM
-static int dummy_update_and_get_buffer(preview_stream_ops_t*, buffer_handle_t**, int*) {
+static int dummy_update_and_get_buffer(preview_stream_ops_t*, buffer_handle_t**, int*,int*) {
+ return INVALID_OPERATION;
+}
+
+static int dummy_release_buffer(preview_stream_ops_t*, int slot) {
return INVALID_OPERATION;
}
@@ -107,6 +111,7 @@ static int dummy_get_current_size(preview_stream_ops_t*,
static preview_stream_extended_ops_t dummyPreviewStreamExtendedOps = {
#ifdef OMAP_ENHANCEMENT_CPCAM
dummy_update_and_get_buffer,
+ dummy_release_buffer,
dummy_get_buffer_dimension,
dummy_get_buffer_format,
dummy_set_metadata,
diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h
index e5e6fdf..c4140e8 100644
--- a/camera/inc/CameraHal.h
+++ b/camera/inc/CameraHal.h
@@ -359,6 +359,7 @@ typedef struct _CameraBuffer {
/* These are for buffers which include borders */
int offset; // where valid data starts
int actual_size; // size of the entire buffer with borders
+ int privateData;
} CameraBuffer;
void * camera_buffer_get_omx_ptr (CameraBuffer *buffer);