diff options
-rw-r--r-- | libhwc2.1/libdevice/ExynosDisplay.cpp | 8 | ||||
-rw-r--r-- | libhwc2.1/libdevice/ExynosLayer.cpp | 18 | ||||
-rw-r--r-- | libhwc2.1/libhwchelper/ExynosHWCHelper.h | 4 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosMPP.cpp | 9 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.cpp | 2 |
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; |