diff options
author | Tyler Luu <tluu@ti.com> | 2012-05-25 14:19:01 -0500 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:56:42 -0500 |
commit | 8a90521bbac21c9debdfb5ad3db0bf911ed9e462 (patch) | |
tree | a07731fc783849e94303e13261cbd88f6314bd50 /camera | |
parent | 92efc66c83bf5aeec1cc42ad687d3e883b5a4c92 (diff) | |
download | hardware_ti_omap4-8a90521bbac21c9debdfb5ad3db0bf911ed9e462.tar.gz hardware_ti_omap4-8a90521bbac21c9debdfb5ad3db0bf911ed9e462.tar.bz2 hardware_ti_omap4-8a90521bbac21c9debdfb5ad3db0bf911ed9e462.zip |
CameraHal: Add support for BAYER reprocessing
1. Add support for allocating bitstream buffers for bayer
format through buffersourceadapter
2. Add support for setting up reprocessing port (video-in)
in OMXCameraAdapter for bayer format
Change-Id: I0d9c1d6ec4ca09b4f9d19b36321abef0495d7405
Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Diffstat (limited to 'camera')
-rw-r--r-- | camera/ANativeWindowDisplayAdapter.cpp | 9 | ||||
-rw-r--r-- | camera/BufferSourceAdapter.cpp | 15 | ||||
-rw-r--r-- | camera/CameraHal.cpp | 5 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCapture.cpp | 6 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXReprocess.cpp | 11 | ||||
-rw-r--r-- | camera/inc/CameraHal.h | 2 |
6 files changed, 39 insertions, 9 deletions
diff --git a/camera/ANativeWindowDisplayAdapter.cpp b/camera/ANativeWindowDisplayAdapter.cpp index 9dc9912..835453c 100644 --- a/camera/ANativeWindowDisplayAdapter.cpp +++ b/camera/ANativeWindowDisplayAdapter.cpp @@ -88,6 +88,11 @@ const char* DisplayAdapter::getPixFormatConstant(const char* parameters_format) CAMHAL_LOGVA("RGB565 format selected"); pixFormat = (const char *) CameraParameters::PIXEL_FORMAT_RGB565; } + else if(strcmp(parameters_format, (const char *) CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) + { + CAMHAL_LOGVA("BAYER format selected"); + pixFormat = (const char *) CameraParameters::PIXEL_FORMAT_BAYER_RGGB; + } else { CAMHAL_LOGEA("Invalid format, NV12 format selected as default"); @@ -119,6 +124,10 @@ size_t DisplayAdapter::getBufSize(const char* parameters_format, int width, int else if(strcmp(parameters_format, (const char *) CameraParameters::PIXEL_FORMAT_RGB565) == 0) { buf_size = width * height * 2; + } + else if (strcmp(parameters_format, + (const char *) CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) { + buf_size = width * height * 2; } else { CAMHAL_LOGEA("Invalid format"); buf_size = 0; diff --git a/camera/BufferSourceAdapter.cpp b/camera/BufferSourceAdapter.cpp index 384307a..9d51e0f 100644 --- a/camera/BufferSourceAdapter.cpp +++ b/camera/BufferSourceAdapter.cpp @@ -37,6 +37,8 @@ static int getANWFormat(const char* parameters_format) CAMHAL_LOGDA("RGB565 format selected"); // TODO(XXX): not defined yet format = -1; + } else if (strcmp(parameters_format, CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) { + format = HAL_PIXEL_FORMAT_TI_Y16; } else { CAMHAL_LOGDA("Invalid format, NV12 format selected as default"); format = HAL_PIXEL_FORMAT_TI_NV12; @@ -57,6 +59,7 @@ static int getUsageFromANW(int format) // buffers to come from system heap usage |= GRALLOC_USAGE_PRIVATE_0; break; + case HAL_PIXEL_FORMAT_TI_Y16: default: // No special flags needed break; @@ -70,6 +73,8 @@ static const char* getFormatFromANW(int format) case HAL_PIXEL_FORMAT_TI_NV12: // Assuming NV12 1D is RAW or Image frame return CameraParameters::PIXEL_FORMAT_YUV420SP; + case HAL_PIXEL_FORMAT_TI_Y16: + return CameraParameters::PIXEL_FORMAT_BAYER_RGGB; default: break; } @@ -79,6 +84,7 @@ static const char* getFormatFromANW(int format) static CameraFrame::FrameType formatToOutputFrameType(const char* format) { switch (getANWFormat(format)) { case HAL_PIXEL_FORMAT_TI_NV12: + case HAL_PIXEL_FORMAT_TI_Y16: // Assuming NV12 1D is RAW or Image frame return CameraFrame::RAW_FRAME; default: @@ -336,7 +342,7 @@ CameraBuffer* BufferSourceAdapter::allocateBufferList(int width, int height, con // Set window geometry err = mBufferSource->set_buffers_geometry(mBufferSource, width, height, - getANWFormat(format)); + pixFormat); if (err != 0) { CAMHAL_LOGE("native_window_set_buffers_geometry failed: %s (%d)", strerror(-err), -err); @@ -447,7 +453,7 @@ CameraBuffer* BufferSourceAdapter::getBufferList(int *num) { LOG_FUNCTION_NAME; status_t err; const int lnumBufs = 1; - int format; + int formatSource; GraphicBufferMapper &mapper = GraphicBufferMapper::get(); buffer_handle_t *handle; @@ -476,7 +482,7 @@ CameraBuffer* BufferSourceAdapter::getBufferList(int *num) { mFramesWithCameraAdapterMap.add(handle, 0); err = mBufferSource->get_buffer_dimension(mBufferSource, &mBuffers[0].width, &mBuffers[0].height); - err = mBufferSource->get_buffer_format(mBufferSource, &format); + err = mBufferSource->get_buffer_format(mBufferSource, &formatSource); // lock buffer { @@ -488,7 +494,8 @@ CameraBuffer* BufferSourceAdapter::getBufferList(int *num) { mFrameWidth = mBuffers[0].width; mFrameHeight = mBuffers[0].height; - mPixelFormat = getFormatFromANW(format); + mPixelFormat = getFormatFromANW(formatSource); + mBuffers[0].format = mPixelFormat; mBufferSourceDirection = BUFFER_SOURCE_TAP_IN; diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp index 4a6803e..a134a82 100644 --- a/camera/CameraHal.cpp +++ b/camera/CameraHal.cpp @@ -3178,7 +3178,10 @@ status_t CameraHal::reprocess(const char *params) LOG_FUNCTION_NAME; // 1. Get buffers - if (mBufferSourceAdapter_In.get()) reprocBuffers = mBufferSourceAdapter_In->getBufferList(&bufferCount); + if (mBufferSourceAdapter_In.get()) { + reprocBuffers = mBufferSourceAdapter_In->getBufferList(&bufferCount); + } + if (!reprocBuffers) { CAMHAL_LOGE("Error: couldn't get input buffers for reprocess()"); goto exit; diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp index a05a981..8d37d24 100644 --- a/camera/OMXCameraAdapter/OMXCapture.cpp +++ b/camera/OMXCameraAdapter/OMXCapture.cpp @@ -1558,10 +1558,10 @@ status_t OMXCameraAdapter::initInternalBuffers(OMX_U32 portIndex) index++; - /* 10 is an arbitrary limit */ - } while (index < 10); + /* 1 is an arbitrary limit */ + } while (index < 1); - CAMHAL_LOGEA("Ducati requested too many (>10) internal buffers"); + CAMHAL_LOGV("Ducati requested too many (>1) internal buffers"); return -EINVAL; } diff --git a/camera/OMXCameraAdapter/OMXReprocess.cpp b/camera/OMXCameraAdapter/OMXReprocess.cpp index 798e3af..b80fba1 100644 --- a/camera/OMXCameraAdapter/OMXReprocess.cpp +++ b/camera/OMXCameraAdapter/OMXReprocess.cpp @@ -56,6 +56,9 @@ status_t OMXCameraAdapter::setParametersReprocess(const CameraParameters ¶ms if(strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_YUV420SP) == 0) { CAMHAL_LOGDA("YUV420SP format selected"); pixFormat = OMX_COLOR_FormatYUV420SemiPlanar; + } else if (strcmp(valstr, (const char *) CameraParameters::PIXEL_FORMAT_BAYER_RGGB) == 0) { + CAMHAL_LOGDA("RAW Picture format selected"); + pixFormat = OMX_COLOR_FormatRawBayer10bit; } else { CAMHAL_LOGDA("Format not supported, selecting YUV420SP by default"); pixFormat = OMX_COLOR_FormatYUV420SemiPlanar; @@ -69,7 +72,13 @@ status_t OMXCameraAdapter::setParametersReprocess(const CameraParameters ¶ms (s != (int) portData->mStride) || (pixFormat != portData->mColorFormat)) { portData->mWidth = w; portData->mHeight = h; - portData->mStride = s; + + if ( OMX_COLOR_FormatRawBayer10bit == pixFormat ) { + portData->mStride = w * 2; + } else { + portData->mStride = s; + } + portData->mColorFormat = pixFormat; ret = setFormat(OMX_CAMERA_PORT_VIDEO_IN_VIDEO, *portData); diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h index 9ee4690..2d3f39b 100644 --- a/camera/inc/CameraHal.h +++ b/camera/inc/CameraHal.h @@ -59,6 +59,8 @@ extern "C" { //temporarily define format here #define HAL_PIXEL_FORMAT_TI_NV12 0x100 +#define HAL_PIXEL_FORMAT_TI_Y8 0x103 +#define HAL_PIXEL_FORMAT_TI_Y16 0x104 #define MIN_WIDTH 640 #define MIN_HEIGHT 480 |