diff options
author | Nana Guo <nana.n.guo@intel.com> | 2015-05-19 15:13:07 -0400 |
---|---|---|
committer | Patrick Tjin <pattjin@google.com> | 2015-06-09 07:56:21 -0700 |
commit | 965bfbcf0f02fe47296ef9b2e6681d1289c73d57 (patch) | |
tree | 5faa0405e9a9d799961737aacd9f5abbd1832c7e | |
parent | fa7f14775d01e854f4261e32fb2efdfb8b84e9c4 (diff) | |
download | android_hardware_intel_img_hwcomposer-965bfbcf0f02fe47296ef9b2e6681d1289c73d57.tar.gz android_hardware_intel_img_hwcomposer-965bfbcf0f02fe47296ef9b2e6681d1289c73d57.tar.bz2 android_hardware_intel_img_hwcomposer-965bfbcf0f02fe47296ef9b2e6681d1289c73d57.zip |
hwc: set csc mode in hwc
BZ: IMINAN-37403
Change-Id: I07686698296f6712dc3e8dfc086499767460ab03
Signed-off-by: Nana Guo <nana.n.guo@intel.com>
-rwxr-xr-x | moorefield_hdmi/ips/common/OverlayPlaneBase.cpp | 56 | ||||
-rw-r--r-- | moorefield_hdmi/ips/common/OverlayPlaneBase.h | 1 | ||||
-rw-r--r-- | moorefield_hdmi/ips/common/VideoPayloadBuffer.h | 2 |
3 files changed, 59 insertions, 0 deletions
diff --git a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp index 8d6ee39..173f194 100755 --- a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp +++ b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp @@ -1112,6 +1112,56 @@ bool OverlayPlaneBase::scalingSetup(BufferMapper& mapper) return true; } +bool OverlayPlaneBase::colorSetup(BufferMapper& mapper) +{ + CTRACE(); + + OverlayBackBufferBlk *backBuffer = mBackBuffer[mCurrent]->buf; + if (!backBuffer) { + ELOGTRACE("invalid back buffer"); + return false; + } + + uint32_t format = mapper.getFormat(); + if (format != OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar && + format != OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled) { + + VLOGTRACE("Not video layer, use default color setting"); + backBuffer->OCLRC0 = (OVERLAY_INIT_CONTRAST << 18) | + (OVERLAY_INIT_BRIGHTNESS & 0xff); + backBuffer->OCLRC1 = OVERLAY_INIT_SATURATION; + backBuffer->OCONFIG &= ~(1 << 5); + + return true; + } + + struct VideoPayloadBuffer *payload; + payload = (struct VideoPayloadBuffer *)mapper.getCpuAddress(SUB_BUFFER1); + // check payload + if (!payload) { + ELOGTRACE("no payload found"); + return false; + } + + // BT.601 or BT.709 + backBuffer->OCONFIG &= ~(1 << 5); + backBuffer->OCONFIG |= (payload->csc_mode << 5); + + // no level expansion for video on HDMI + if (payload->video_range || mPipeConfig == (0x2 << 6)) { + // full range, no need to do level expansion + backBuffer->OCLRC0 = 0x1000000; + backBuffer->OCLRC1 = 0x80; + } else { + // level expansion for limited range + backBuffer->OCLRC0 = (OVERLAY_INIT_CONTRAST << 18) | + (OVERLAY_INIT_BRIGHTNESS & 0xff); + backBuffer->OCLRC1 = OVERLAY_INIT_SATURATION; + } + + return true; +} + bool OverlayPlaneBase::setDataBuffer(BufferMapper& grallocMapper) { BufferMapper *mapper; @@ -1187,6 +1237,12 @@ bool OverlayPlaneBase::setDataBuffer(BufferMapper& grallocMapper) backBuffer->OCMD &= ~(BUFFER_SELECT); } + ret = colorSetup(*mapper); + if (ret == false) { + ELOGTRACE("failed to set up color parameters"); + return false; + } + // add to active ttm buffers if it's a rotated buffer if (rotatedMapper) { updateActiveTTMBuffers(mapper); diff --git a/moorefield_hdmi/ips/common/OverlayPlaneBase.h b/moorefield_hdmi/ips/common/OverlayPlaneBase.h index 8f2572c..7229151 100644 --- a/moorefield_hdmi/ips/common/OverlayPlaneBase.h +++ b/moorefield_hdmi/ips/common/OverlayPlaneBase.h @@ -67,6 +67,7 @@ protected: bool isHoriz, bool isY, coeffPtr pCoeff); virtual bool scalingSetup(BufferMapper& mapper); + virtual bool colorSetup(BufferMapper& mapper); virtual void checkPosition(int& x, int& y, int& w, int& h); virtual void checkCrop(int& x, int& y, int& w, int& h, int coded_width, int coded_height); diff --git a/moorefield_hdmi/ips/common/VideoPayloadBuffer.h b/moorefield_hdmi/ips/common/VideoPayloadBuffer.h index 48dc273..e6b1879 100644 --- a/moorefield_hdmi/ips/common/VideoPayloadBuffer.h +++ b/moorefield_hdmi/ips/common/VideoPayloadBuffer.h @@ -63,6 +63,8 @@ struct VideoPayloadBuffer { uint32_t coded_width; uint32_t coded_height; + uint32_t csc_mode; + uint32_t video_range; }; |