summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2012-05-25 14:19:01 -0500
committerDaniel Levin <dendy@ti.com>2012-07-25 08:56:42 -0500
commit8a90521bbac21c9debdfb5ad3db0bf911ed9e462 (patch)
treea07731fc783849e94303e13261cbd88f6314bd50 /camera
parent92efc66c83bf5aeec1cc42ad687d3e883b5a4c92 (diff)
downloadhardware_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.cpp9
-rw-r--r--camera/BufferSourceAdapter.cpp15
-rw-r--r--camera/CameraHal.cpp5
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp6
-rw-r--r--camera/OMXCameraAdapter/OMXReprocess.cpp11
-rw-r--r--camera/inc/CameraHal.h2
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 &params
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 &params
(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