diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2014-08-04 08:30:41 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-08-04 08:30:41 -0700 |
commit | 32590c334b7682448e180857d5d6b260502e7737 (patch) | |
tree | f36eace852e7472c4b961870bb9b821aa40027a1 | |
parent | 4f9ab24520fe115351929ecca6e40016ccc568db (diff) | |
parent | 60b4f4d4531e02c83efa97c3b9185461408481ac (diff) | |
download | media-32590c334b7682448e180857d5d6b260502e7737.tar.gz |
Merge "mm_video: vidc: Add support to set custom input buffer size"
-rw-r--r-- | mm-core/inc/OMX_QCOMExtns.h | 9 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/inc/omx_vdec.h | 3 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp | 35 |
3 files changed, 47 insertions, 0 deletions
diff --git a/mm-core/inc/OMX_QCOMExtns.h b/mm-core/inc/OMX_QCOMExtns.h index bc902cee..75447455 100644 --- a/mm-core/inc/OMX_QCOMExtns.h +++ b/mm-core/inc/OMX_QCOMExtns.h @@ -473,6 +473,9 @@ enum OMX_QCOM_EXTN_INDEXTYPE /*"OMX.QCOM.index.config.video.LTRMark"*/ OMX_QcomIndexConfigVideoLTRMark = QOMX_IndexConfigVideoLTRMark, + + /*"OMX.QCOM.index.param.video.CustomBufferSize"*/ + OMX_QcomIndexParamVideoCustomBufferSize = 0x7F00003E, }; /** @@ -1325,6 +1328,12 @@ typedef struct QOMX_INDEXDOWNSCALAR { OMX_BOOL bEnable; } QOMX_INDEXDOWNSCALAR; +typedef struct QOMX_VIDEO_CUSTOM_BUFFERSIZE { + OMX_U32 nSize; + OMX_VERSIONTYPE nVersion; + OMX_U32 nPortIndex; + OMX_U32 nBufferSize; +} QOMX_VIDEO_CUSTOM_BUFFERSIZE; #define OMX_QCOM_INDEX_PARAM_VIDEO_SYNCFRAMEDECODINGMODE "OMX.QCOM.index.param.video.SyncFrameDecodingMode" #define OMX_QCOM_INDEX_PARAM_INDEXEXTRADATA "OMX.QCOM.index.param.IndexExtraData" diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 40f8f80c..ac0b6f76 100644 --- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -942,6 +942,9 @@ class omx_vdec: public qc_omx_component OMX_U32 prev_n_filled_len; bool is_down_scalar_enabled; #endif + struct custom_buffersize { + OMX_U32 input_buffersize; + } m_custom_buffersize; bool m_power_hinted; bool is_q6_platform; OMX_ERRORTYPE power_module_register(); diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp index c5a7e0c9..092ccc53 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp @@ -662,6 +662,7 @@ omx_vdec::omx_vdec(): m_error_propogated(false), memset (&h264_scratch,0,sizeof (OMX_BUFFERHEADERTYPE)); memset (m_hwdevice_name,0,sizeof(m_hwdevice_name)); memset(m_demux_offsets, 0, ( sizeof(OMX_U32) * 8192) ); + memset(&m_custom_buffersize, 0, sizeof(m_custom_buffersize)); m_demux_entries = 0; msg_thread_id = 0; async_thread_id = 0; @@ -3379,6 +3380,13 @@ OMX_ERRORTYPE omx_vdec::set_parameter(OMX_IN OMX_HANDLETYPE hComp, } } } + if (m_custom_buffersize.input_buffersize + && (portDefn->nBufferSize > m_custom_buffersize.input_buffersize)) { + DEBUG_PRINT_ERROR("ERROR: Custom buffer size set by client: %d, trying to set: %d", + m_custom_buffersize.input_buffersize, portDefn->nBufferSize); + eRet = OMX_ErrorBadParameter; + break; + } if (portDefn->nBufferCountActual >= drv_ctx.ip_buf.mincount || portDefn->nBufferSize != drv_ctx.ip_buf.buffer_size) { port_format_changed = true; @@ -3913,6 +3921,33 @@ OMX_ERRORTYPE omx_vdec::set_parameter(OMX_IN OMX_HANDLETYPE hComp, } #endif + case OMX_QcomIndexParamVideoCustomBufferSize: + { + DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamVideoCustomBufferSize"); + QOMX_VIDEO_CUSTOM_BUFFERSIZE* pParam = (QOMX_VIDEO_CUSTOM_BUFFERSIZE*)paramData; + if (pParam->nPortIndex == OMX_CORE_INPUT_PORT_INDEX) { + struct v4l2_control control; + control.id = V4L2_CID_MPEG_VIDC_VIDEO_BUFFER_SIZE_LIMIT; + control.value = pParam->nBufferSize; + if (ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) { + DEBUG_PRINT_ERROR("Failed to set input buffer size"); + eRet = OMX_ErrorUnsupportedSetting; + } else { + eRet = get_buffer_req(&drv_ctx.ip_buf); + if (eRet == OMX_ErrorNone) { + m_custom_buffersize.input_buffersize = drv_ctx.ip_buf.buffer_size; + DEBUG_PRINT_HIGH("Successfully set custom input buffer size = %d", + m_custom_buffersize.input_buffersize); + } else { + DEBUG_PRINT_ERROR("Failed to get buffer requirement"); + } + } + } else { + DEBUG_PRINT_ERROR("ERROR: Custom buffer size in not supported on output port"); + eRet = OMX_ErrorBadParameter; + } + break; + } default: { DEBUG_PRINT_ERROR("Setparameter: unknown param %d", paramIndex); eRet = OMX_ErrorUnsupportedIndex; |