From 5c73ed080d048d338c66d1e640917a2f5852b9db Mon Sep 17 00:00:00 2001 From: Priyanka Gujjula Date: Tue, 22 Oct 2019 14:55:26 +0530 Subject: vdec: Set correct output buffer size: dynamic meta mode When frameworks queries for output buffer size on decoder via OMX_IndexParamPortDefinition, expectation is to return metadata buffer size instead of YUV buffer size in dynamic metadata mode. Test: CtsMediaTestCases & CtsVideoTestCases pass Bug: 147104052 Change-Id: Ica54841cbc81b29c4b3bfa0b58f94a0f82de300b (cherry picked from commit 7ba307cd342854a9fec23aa818049b6ad310c38f) --- msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index a24c4c7e..7079f812 100644 --- a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -12868,8 +12868,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 receives 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 { if (!c2d.get_buffer_size(C2D_OUTPUT,buffer_size)) { DEBUG_PRINT_ERROR("Get buffer size failed"); @@ -12883,9 +12888,10 @@ fail_get_buffer_size: } 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 = is_color_conversion_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); -- cgit v1.2.3