summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNana Guo <nana.n.guo@intel.com>2015-05-19 15:13:07 -0400
committerPatrick Tjin <pattjin@google.com>2015-06-09 07:56:21 -0700
commit965bfbcf0f02fe47296ef9b2e6681d1289c73d57 (patch)
tree5faa0405e9a9d799961737aacd9f5abbd1832c7e
parentfa7f14775d01e854f4261e32fb2efdfb8b84e9c4 (diff)
downloadandroid_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-xmoorefield_hdmi/ips/common/OverlayPlaneBase.cpp56
-rw-r--r--moorefield_hdmi/ips/common/OverlayPlaneBase.h1
-rw-r--r--moorefield_hdmi/ips/common/VideoPayloadBuffer.h2
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;
};