summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.cpp8
-rw-r--r--libhwc2.1/libdevice/ExynosLayer.cpp18
-rw-r--r--libhwc2.1/libhwchelper/ExynosHWCHelper.h4
-rw-r--r--libhwc2.1/libresource/ExynosMPP.cpp9
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.cpp2
5 files changed, 24 insertions, 17 deletions
diff --git a/libhwc2.1/libdevice/ExynosDisplay.cpp b/libhwc2.1/libdevice/ExynosDisplay.cpp
index 07e60a4..e880ccd 100644
--- a/libhwc2.1/libdevice/ExynosDisplay.cpp
+++ b/libhwc2.1/libdevice/ExynosDisplay.cpp
@@ -1263,8 +1263,8 @@ int32_t ExynosDisplay::configureHandle(ExynosLayer &layer, int fence_fd, exynos_
* and uses 0.0001nit unit for min luminance
* Conversion is required
*/
- luminanceMin = src_img.hdrStaticInfo.sType1.mMinDisplayLuminance;
- luminanceMax = src_img.hdrStaticInfo.sType1.mMaxDisplayLuminance/10000;
+ luminanceMin = src_img.metaParcel.sHdrStaticInfo.sType1.mMinDisplayLuminance;
+ luminanceMax = src_img.metaParcel.sHdrStaticInfo.sType1.mMaxDisplayLuminance/10000;
DISPLAY_LOGD(eDebugMPP, "HWC2: DPP luminance min %d, max %d", luminanceMin, luminanceMax);
} else {
cfg.hdr_enable = true;
@@ -1296,8 +1296,8 @@ int32_t ExynosDisplay::configureHandle(ExynosLayer &layer, int fence_fd, exynos_
if (parcelFdIndex > 0)
cfg.fd_idma[parcelFdIndex] = layer.mMetaParcelFd;
}
- luminanceMin = src_img.hdrStaticInfo.sType1.mMinDisplayLuminance;
- luminanceMax = src_img.hdrStaticInfo.sType1.mMaxDisplayLuminance/10000;
+ luminanceMin = src_img.metaParcel.sHdrStaticInfo.sType1.mMinDisplayLuminance;
+ luminanceMax = src_img.metaParcel.sHdrStaticInfo.sType1.mMaxDisplayLuminance/10000;
DISPLAY_LOGD(eDebugMPP, "HWC2: DPP luminance min %d, max %d", luminanceMin, luminanceMax);
} else {
cfg.hdr_enable = true;
diff --git a/libhwc2.1/libdevice/ExynosLayer.cpp b/libhwc2.1/libdevice/ExynosLayer.cpp
index 80e5ec2..9ec9fca 100644
--- a/libhwc2.1/libdevice/ExynosLayer.cpp
+++ b/libhwc2.1/libdevice/ExynosLayer.cpp
@@ -724,13 +724,14 @@ int32_t ExynosLayer::setSrcExynosImage(exynos_image *src_img)
src_img->planeAlpha = mPlaneAlpha;
src_img->zOrder = mZOrder;
/* Copy HDR metadata */
- memset(&(src_img->hdrStaticInfo), 0, sizeof(src_img->hdrStaticInfo));
- memset(&(src_img->hdrDynamicInfo), 0, sizeof(src_img->hdrDynamicInfo));
+ memset(&(src_img->metaParcel), 0, sizeof(ExynosVideoMeta));
src_img->metaType = VIDEO_INFO_TYPE_INVALID;
if (mMetaParcel != NULL) {
- src_img->hdrStaticInfo = mMetaParcel->sHdrStaticInfo;
- src_img->hdrDynamicInfo = mMetaParcel->sHdrDynamicInfo;
+ memcpy(&(src_img->metaParcel), mMetaParcel, sizeof(ExynosVideoMeta));
src_img->metaType = mMetaParcel->eType;
+ src_img->hasMetaParcel = true;
+ } else {
+ src_img->hasMetaParcel = false;
}
src_img->needDegamma = mNeedDegamma;
@@ -795,13 +796,14 @@ int32_t ExynosLayer::setDstExynosImage(exynos_image *dst_img)
dst_img->zOrder = mZOrder;
/* Copy HDR metadata */
- memset(&(dst_img->hdrStaticInfo), 0, sizeof(dst_img->hdrStaticInfo));
- memset(&(dst_img->hdrDynamicInfo), 0, sizeof(dst_img->hdrDynamicInfo));
+ memset(&(dst_img->metaParcel), 0, sizeof(ExynosVideoMeta));
dst_img->metaType = VIDEO_INFO_TYPE_INVALID;
if (mMetaParcel != NULL) {
- dst_img->hdrStaticInfo = mMetaParcel->sHdrStaticInfo;
- dst_img->hdrDynamicInfo = mMetaParcel->sHdrDynamicInfo;
+ memcpy(&(dst_img->metaParcel), mMetaParcel, sizeof(ExynosVideoMeta));
dst_img->metaType = mMetaParcel->eType;
+ dst_img->hasMetaParcel = true;
+ } else {
+ dst_img->hasMetaParcel = false;
}
dst_img->needDegamma = false;
diff --git a/libhwc2.1/libhwchelper/ExynosHWCHelper.h b/libhwc2.1/libhwchelper/ExynosHWCHelper.h
index 2fe0b95..6e19ac5 100644
--- a/libhwc2.1/libhwchelper/ExynosHWCHelper.h
+++ b/libhwc2.1/libhwchelper/ExynosHWCHelper.h
@@ -292,8 +292,8 @@ typedef struct exynos_image {
/* refer
* frameworks/native/include/media/hardware/VideoAPI.h
* frameworks/native/include/media/hardware/HardwareAPI.h */
- ExynosHdrStaticInfo hdrStaticInfo;
- ExynosHdrDynamicInfo hdrDynamicInfo;
+ bool hasMetaParcel = false;
+ ExynosVideoMeta metaParcel;
ExynosVideoInfoType metaType = VIDEO_INFO_TYPE_INVALID;
bool needDegamma = false;
bool isDimLayer()
diff --git a/libhwc2.1/libresource/ExynosMPP.cpp b/libhwc2.1/libresource/ExynosMPP.cpp
index 7d53df7..8797dc5 100644
--- a/libhwc2.1/libresource/ExynosMPP.cpp
+++ b/libhwc2.1/libresource/ExynosMPP.cpp
@@ -1162,14 +1162,19 @@ int32_t ExynosMPP::setupLayer(exynos_mpp_img_info *srcImgInfo, struct exynos_ima
/* HDR process */
if (hasHdrInfo(src)) {
- unsigned int max = (src.hdrStaticInfo.sType1.mMaxDisplayLuminance/10000);
- unsigned int min = src.hdrStaticInfo.sType1.mMinDisplayLuminance;
+ unsigned int max = (src.metaParcel.sHdrStaticInfo.sType1.mMaxDisplayLuminance/10000);
+ unsigned int min = src.metaParcel.sHdrStaticInfo.sType1.mMinDisplayLuminance;
srcImgInfo->mppLayer->setMasterDisplayLuminance(min,max);
MPP_LOGD(eDebugMPP, "HWC2: G2D luminance min %d, max %d", min, max);
MPP_LOGD(eDebugMPP|eDebugFence, "G2D getting HDR source!");
}
+ /* Transfer MetaData */
+ if (src.hasMetaParcel) {
+ srcImgInfo->mppLayer->setLayerData(&src.metaParcel, sizeof(ExynosVideoMeta));
+ }
+
srcImgInfo->bufferType = getBufferType(srcHandle);
if (srcImgInfo->bufferType == MPP_BUFFER_SECURE_DRM)
attribute |= AcrylicCanvas::ATTR_PROTECTED;
diff --git a/libhwc2.1/libresource/ExynosResourceManager.cpp b/libhwc2.1/libresource/ExynosResourceManager.cpp
index 103d763..98afee8 100644
--- a/libhwc2.1/libresource/ExynosResourceManager.cpp
+++ b/libhwc2.1/libresource/ExynosResourceManager.cpp
@@ -1154,7 +1154,7 @@ int32_t ExynosResourceManager::getCandidateM2mMPPOutImages(ExynosDisplay *displa
dst_img.dataSpace = src_img.dataSpace;
/* Copy origin source HDR metadata */
- dst_img.hdrStaticInfo = src_img.hdrStaticInfo;
+ dst_img.metaParcel = src_img.metaParcel;
dst_img.needDegamma = false; //Dst side need not degamma
uint32_t dstW = dst_img.w;