From 7f99635af4d8ef899302e0746bede3162708652a Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Sat, 6 Oct 2012 16:38:51 +0200 Subject: libcamera: Use RGB565 preview format Change-Id: Ieafe36965c12e4407752270114662c75f8a81cca Signed-off-by: Paul Kocialkowski --- libcamera/SecCameraHWInterface.cpp | 47 ++++++++------------------------------ 1 file changed, 9 insertions(+), 38 deletions(-) diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index bbc5b64..e1e9524 100755 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -183,10 +183,10 @@ void CameraHardwareSec::initDefaultParameters(int cameraId) LOGE("getSnapshotMaxSize fail (%d / %d) \n", snapshot_max_width, snapshot_max_height); String8 previewColorString; - previewColorString = CameraParameters::PIXEL_FORMAT_YUV420SP; + previewColorString = CameraParameters::PIXEL_FORMAT_RGB565; previewColorString.append(","); - previewColorString.append(CameraParameters::PIXEL_FORMAT_YUV420P); - p.setPreviewFormat(CameraParameters::PIXEL_FORMAT_YUV420SP); + previewColorString.append(CameraParameters::PIXEL_FORMAT_RGB565); + p.setPreviewFormat(CameraParameters::PIXEL_FORMAT_RGB565); p.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, previewColorString.string()); p.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, CameraParameters::PIXEL_FORMAT_YUV420P); p.setPreviewSize(preview_max_width, preview_max_height); @@ -420,7 +420,7 @@ status_t CameraHardwareSec::setPreviewWindow(preview_stream_ops *w) int preview_width; int preview_height; mParameters.getPreviewSize(&preview_width, &preview_height); - int hal_pixel_format = HAL_PIXEL_FORMAT_YV12; + int hal_pixel_format = HAL_PIXEL_FORMAT_RGB_565; const char *str_preview_format = mParameters.getPreviewFormat(); LOGV("%s: preview format %s", __func__, str_preview_format); @@ -577,37 +577,8 @@ int CameraHardwareSec::previewThread() 0, 0, width, height, &vaddr)) { char *frame = ((char *)mPreviewHeap->data) + offset; - // the code below assumes YUV, not RGB - { - int h; - char *src = frame; - char *ptr = (char *)vaddr; - - // Copy the Y plane, while observing the stride - for (h = 0; h < height; h++) { - memcpy(ptr, src, width); - ptr += stride; - src += width; - } - - { - // U - char *v = ptr; - ptr += stride * height / 4; - for (h = 0; h < height / 2; h++) { - memcpy(ptr, src, width / 2); - ptr += stride / 2; - src += width / 2; - } - // V - ptr = v; - for (h = 0; h < height / 2; h++) { - memcpy(ptr, src, width / 2); - ptr += stride / 2; - src += width / 2; - } - } - } + // Copy RGB565 frame + memcpy(vaddr, frame, width * height * 2); mGrallocHal->unlock(mGrallocHal, *buf_handle); } @@ -1390,17 +1361,17 @@ status_t CameraHardwareSec::setParameters(const CameraParameters& params) const char *new_str_preview_format = params.getPreviewFormat(); LOGV("%s : new_preview_width x new_preview_height = %dx%d, format = %s", __func__, new_preview_width, new_preview_height, new_str_preview_format); - +/* if (strcmp(new_str_preview_format, CameraParameters::PIXEL_FORMAT_YUV420SP) && strcmp(new_str_preview_format, CameraParameters::PIXEL_FORMAT_YUV420P)) { LOGE("Unsupported preview color format: %s", new_str_preview_format); return BAD_VALUE; } - +*/ if (0 < new_preview_width && 0 < new_preview_height && new_str_preview_format != NULL && isSupportedPreviewSize(new_preview_width, new_preview_height)) { - int new_preview_format = V4L2_PIX_FMT_YUV420; + int new_preview_format = V4L2_PIX_FMT_RGB565; int current_preview_width, current_preview_height, current_frame_size; mSecCamera->getPreviewSize(¤t_preview_width, -- cgit v1.1