Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56fa2d8e authored by Diogo Ferreira's avatar Diogo Ferreira
Browse files

CameraService: Add support for YCrCb_420_SP overlay format

This patch adds support for YCrCb_420_SP as the preview format,
it works exactly the same as the YCbCr_420_SP toggle and does
not change the behaviour unless toggled by the following board
config:

BOARD_OVERLAY_FORMAT_YCrCb_420_SP := true
- Uses YCrCb_420_SP as the overlay format for the preview display.

Change-Id: I3a98ff28fc79696a52b98ec6dc452950e3f0c7bf
parent aad7cd44
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -88,6 +88,11 @@ LOCAL_CFLAGS += -DUSE_OVERLAY_FORMAT_YCbCr_420_SP
LOCAL_C_INCLUDES += hardware/msm7k/libgralloc-qsd8k
endif

ifeq ($(BOARD_OVERLAY_FORMAT_YCrCb_420_SP),true)
LOCAL_CFLAGS += -DUSE_OVERLAY_FORMAT_YCrCb_420_SP
LOCAL_C_INCLUDES += hardware/msm7k/libgralloc-qsd8k
endif

ifeq ($(BOARD_USE_CAF_LIBCAMERA), true)
    LOCAL_CFLAGS += -DBOARD_USE_CAF_LIBCAMERA
endif
+16 −14
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@

#include "CameraService.h"

#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
#include "gralloc_priv.h"
#endif

@@ -240,7 +240,7 @@ sp<ICamera> CameraService::connect(
    client = new Client(this, cameraClient, hardware, cameraId, info.facing,
                        callingPid);
    mClient[cameraId] = client;
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
    if (client->mHardware == NULL) {
        client = NULL;
        mClient[cameraId] = NULL;
@@ -410,7 +410,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
    mCameraFacing = cameraFacing;
    mClientPid = clientPid;
    mMsgEnabled = 0;
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
    if (mHardware != NULL) {
#endif
        mUseOverlay = mHardware->useOverlay();
@@ -433,7 +433,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
        mOrientationChanged = false;
        cameraService->setCameraBusy(cameraId);
        cameraService->loadSound();
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
    }
#endif
    LOG1("Client::Client X (pid %d)", callingPid);
@@ -578,7 +578,7 @@ void CameraService::Client::disconnect() {
    mHardware->release();
    // Release the held overlay resources.
    if (mUseOverlay) {
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
        /* Release previous overlay handle */
        if (mOverlay != NULL) {
            mOverlay->destroy();
@@ -626,17 +626,17 @@ status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface) {
    mOverlayRef = 0;
    // If preview has been already started, set overlay or register preview
    // buffers now.
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
    if (mHardware->previewEnabled() || mUseOverlay) {
#else
    if (mHardware->previewEnabled()) {
#endif
        if (mUseOverlay) {
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
            if (mSurface != NULL) {
#endif
                result = setOverlay();
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
            }
#endif
        } else if (mSurface != 0) {
@@ -694,7 +694,7 @@ status_t CameraService::Client::setOverlay() {
        sp<Overlay> dummy;
        mHardware->setOverlay(dummy);
        mOverlayRef = 0;
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
        if (mOverlay != NULL) {
            mOverlay->destroy();
        }
@@ -715,8 +715,10 @@ status_t CameraService::Client::setOverlay() {
            // process of being destroyed.
            for (int retry = 0; retry < 50; ++retry) {
                mOverlayRef = mSurface->createOverlay(w, h,
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP)
                                                      HAL_PIXEL_FORMAT_YCbCr_420_SP,
#elif defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
                                                      HAL_PIXEL_FORMAT_YCrCb_420_SP,
#else
                                                      OVERLAY_FORMAT_DEFAULT,
#endif
@@ -729,7 +731,7 @@ status_t CameraService::Client::setOverlay() {
                LOGE("Overlay Creation Failed!");
                return -EINVAL;
            }
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
            mOverlay = new Overlay(mOverlayRef);
            result = mHardware->setOverlay(mOverlay);
#else
@@ -820,11 +822,11 @@ status_t CameraService::Client::startPreviewMode() {
        if (mSurface != 0) {
            result = setOverlay();
        }
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
        result = mHardware->startPreview();
#endif
        if (result != NO_ERROR) return result;
#ifndef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
        result = mHardware->startPreview();
#endif
    } else {
@@ -893,7 +895,7 @@ void CameraService::Client::stopPreview() {

    if (mSurface != 0 && !mUseOverlay) {
        mSurface->unregisterBuffers();
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
    } else {
        mOverlayW = 0;
        mOverlayH = 0;
+1 −1
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ private:
        sp<CameraHardwareInterface>     mHardware;       // cleared after disconnect()
        bool                            mUseOverlay;     // immutable after constructor
        sp<OverlayRef>                  mOverlayRef;
#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP
#if defined(USE_OVERLAY_FORMAT_YCbCr_420_SP) || defined(USE_OVERLAY_FORMAT_YCrCb_420_SP)
        sp<Overlay>                     mOverlay;
#endif
        int                             mOverlayW;