mm-video-v4l2: venc: Fix HDR10+ recording
Added main10 profile,so that consumer usage
is set to 10 bit.
Change-Id: I5823740f916ff28ccefc4c6bca441675519ee6be
diff --git a/mm-video-v4l2/vidc/common/src/vidc_common.cpp b/mm-video-v4l2/vidc/common/src/vidc_common.cpp
index bdeab56..a3c9669 100644
--- a/mm-video-v4l2/vidc/common/src/vidc_common.cpp
+++ b/mm-video-v4l2/vidc/common/src/vidc_common.cpp
@@ -58,12 +58,12 @@
pl_map profile_level_converter::profile_hevc_omx_to_v4l2 ({
{OMX_VIDEO_HEVCProfileMain,
V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN},
- {OMX_VIDEO_HEVCProfileMain10,
- V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN10},
{OMX_VIDEO_HEVCProfileMain10HDR10,
V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN10},
{OMX_VIDEO_HEVCProfileMainStill,
V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN_STILL_PIC},
+ {OMX_VIDEO_HEVCProfileMain10,
+ V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN10},
});
pl_map profile_level_converter::profile_hevc_v4l2_to_omx ({});
diff --git a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
index e230d63..907ed7e 100644
--- a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
+++ b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
@@ -608,6 +608,7 @@
OMX_TICKS timestamp, OMX_U32 freeSize);
bool mBitrateSavingsEnable;
bool hdr10metadata_supported;
+ bool is_hevcprofile_explicitly_set;
};
enum instance_state {
diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
index bc554eb..4219e63 100644
--- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
+++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
@@ -193,6 +193,7 @@
mIsNativeRecorder = false;
m_hdr10meta_enabled = false;
hdr10metadata_supported = false;
+ is_hevcprofile_explicitly_set = false;
Platform::Config::getInt32(Platform::vidc_enc_log_in,
(int32_t *)&m_debug.in_buffer_log, 0);
@@ -1170,9 +1171,9 @@
QOMX_VIDEO_AVCProfileConstrainedHigh,
QOMX_VIDEO_AVCProfileHigh };
int hevc_profiles[4] = { OMX_VIDEO_HEVCProfileMain,
- OMX_VIDEO_HEVCProfileMain10,
OMX_VIDEO_HEVCProfileMain10HDR10,
- OMX_VIDEO_HEVCProfileMainStill };
+ OMX_VIDEO_HEVCProfileMainStill,
+ OMX_VIDEO_HEVCProfileMain10 };
if (!profileLevelType)
return OMX_ErrorBadParameter;
@@ -1659,7 +1660,7 @@
supported_rc_modes = (RC_ALL & ~RC_CBR_CFR);
}
- if (!strcmp(m_platform_name, "sm6150") || !strcmp(m_platform_name, "atoll") || !strcmp(m_platform_name, "trinket") || !strcmp(m_platform_name, "msmnile"))
+ if (!strcmp(m_platform_name, "sm6150") || !strcmp(m_platform_name, "atoll") || !strcmp(m_platform_name, "trinket"))
{
hdr10metadata_supported = false;
}
@@ -4362,6 +4363,7 @@
handle->format == HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS) &&
codec_profile.profile != V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN10)
{
+ is_hevcprofile_explicitly_set = true;
if (!venc_set_profile (OMX_VIDEO_HEVCProfileMain10)) {
DEBUG_PRINT_ERROR("ERROR: Unsuccessful in updating Profile OMX_VIDEO_HEVCProfileMain10");
return false;
@@ -5308,7 +5310,7 @@
codec_profile.profile = control.value;
- if (hdr10metadata_supported == true) {
+ if (hdr10metadata_supported == true && (!is_hevcprofile_explicitly_set)) {
if (venc_set_extradata_hdr10metadata() == false)
{
DEBUG_PRINT_ERROR("Failed to set extradata HDR10PLUS_METADATA");
@@ -7284,7 +7286,9 @@
/* Configure UBWC as default */
*usage |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
- if (hevc && eProfile == (OMX_U32)OMX_VIDEO_HEVCProfileMain10HDR10) {
+ if (hevc &&
+ (eProfile == (OMX_U32)OMX_VIDEO_HEVCProfileMain10HDR10 ||
+ eProfile == (OMX_U32)OMX_VIDEO_HEVCProfileMain10)) {
DEBUG_PRINT_INFO("Setting 10-bit consumer usage bits");
*usage |= GRALLOC_USAGE_PRIVATE_10BIT_VIDEO;
if (mUseLinearColorFormat & REQUEST_LINEAR_COLOR_10_BIT) {