diff options
4 files changed, 36 insertions, 7 deletions
diff --git a/conf_files/sm6150/media_codecs_vendor_sdmmagpie_v0.xml b/conf_files/sm6150/media_codecs_vendor_sdmmagpie_v0.xml index 1901a2e9..1f8b65e6 100644 --- a/conf_files/sm6150/media_codecs_vendor_sdmmagpie_v0.xml +++ b/conf_files/sm6150/media_codecs_vendor_sdmmagpie_v0.xml @@ -203,7 +203,7 @@ Only the three quirks included above are recognized at this point: <Quirk name="requires-allocate-on-input-ports" /> <Quirk name="requires-allocate-on-output-ports" /> <Quirk name="requires-loaded-to-idle-after-allocation" /> - <Limit name="size" min="512x512" max="4096x2160" /> + <Limit name="size" min="512x512" max="8192x8192" /> <Limit name="frame-rate" range="1-20" /> <Limit name="concurrent-instances" max="6" /> <Limit name="quality" range="0-100" default="80" /> diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 5db344ad..b28d44ff 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -12733,8 +12733,13 @@ OMX_BUFFERHEADERTYPE* omx_vdec::allocate_color_convert_buf::get_il_buf_hdr { bool status = true; pthread_mutex_lock(&omx->c_lock); + /* Whenever port mode is set to kPortModeDynamicANWBuffer, Video Frameworks + always uses VideoNativeMetadata and OMX recives buffer type as + grallocsource via storeMetaDataInBuffers_l API. The buffer_size + will be communicated to frameworks via IndexParamPortdefinition. */ if (!enabled) - buffer_size = omx->drv_ctx.op_buf.buffer_size; + buffer_size = omx->dynamic_buf_mode ? sizeof(struct VideoNativeMetadata) : + omx->drv_ctx.op_buf.buffer_size; else { buffer_size = c2dcc.getBuffSize(C2D_OUTPUT); } @@ -12743,9 +12748,10 @@ OMX_BUFFERHEADERTYPE* omx_vdec::allocate_color_convert_buf::get_il_buf_hdr } OMX_ERRORTYPE omx_vdec::allocate_color_convert_buf::set_buffer_req( - OMX_U32 buffer_size, OMX_U32 actual_count) { - OMX_U32 expectedSize = enabled ? buffer_size_req : omx->drv_ctx.op_buf.buffer_size; - + OMX_U32 buffer_size, OMX_U32 actual_count) +{ + OMX_U32 expectedSize = enabled ? buffer_size_req : omx->dynamic_buf_mode ? + sizeof(struct VideoDecoderOutputMetaData) : omx->drv_ctx.op_buf.buffer_size; if (buffer_size < expectedSize) { DEBUG_PRINT_ERROR("OP Requirements: Client size(%u) insufficient v/s requested(%u)", buffer_size, expectedSize); diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp index 8f0868b7..346f017f 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -248,8 +248,25 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) codec_type = OMX_VIDEO_CodingHEVC; } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.heic", \ OMX_MAX_STRINGNAME_SIZE)) { - strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); - codec_type = OMX_VIDEO_CodingImageHEIC; + char platform_name[PROP_VALUE_MAX] = {0}; + char version[PROP_VALUE_MAX] = {0}; + property_get("ro.board.platform", platform_name, "0"); //HW ID + if (!strcmp(platform_name, "sm6150")) + { + if (property_get("vendor.media.target.version", version, "0") && + (atoi(version) == 0)) + { + //Sku version, HEIC is disabled on this target + DEBUG_PRINT_ERROR("heic encoder not supported on this target"); + eRet = OMX_ErrorInvalidComponentName; + } else { + strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); + codec_type = OMX_VIDEO_CodingImageHEIC; + } + } else { + strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); + codec_type = OMX_VIDEO_CodingImageHEIC; + } } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc.secure", \ OMX_MAX_STRINGNAME_SIZE)) { strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); 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 3db5fc48..5ae8aa78 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 @@ -2120,6 +2120,12 @@ bool venc_dev::venc_get_buf_req(OMX_U32 *min_buff_count, DEBUG_PRINT_LOW("Set buffer count = %d as metadata mode and batchmode enabled", minCount); } + // reset min count to 4 for HEIC cases + if (mIsGridset) { + minCount = 4; + DEBUG_PRINT_LOW("Set buffer count = %d for HEIC", minCount); + } + minCount = MAX((unsigned int)control.value, minCount); m_sInput_buff_property.mincount = minCount; |