diff options
author | Shivendra Kakrania <shiven@codeaurora.org> | 2017-06-23 11:18:59 -0700 |
---|---|---|
committer | Shivendra Kakrania <shiven@codeaurora.org> | 2017-06-26 14:48:36 -0700 |
commit | c8a0efdc3aa630310b09bae2ab4f52a4e303cee5 (patch) | |
tree | e2e68c687071869c1b31cef603de498c25eadde9 /mm-video-v4l2 | |
parent | 06cc2f67f27b60f4a006b50a7b8525b831d173df (diff) | |
download | media-c8a0efdc3aa630310b09bae2ab4f52a4e303cee5.tar.gz |
mm-video-v4l2: venc: Support for QP vendor extension
Added support for vendor extension to configure QP dynamically.
This vendor extension support is in additon to earlier
default omx support of get extension index.
Change-Id: I4136050cc7ac478768071332562e1ae3ce3094a9
CRs-Fixed: 2066228
Diffstat (limited to 'mm-video-v4l2')
4 files changed, 33 insertions, 1 deletions
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp index 0717b27e..670d4b9e 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -2107,7 +2107,7 @@ OMX_ERRORTYPE omx_video::get_config(OMX_IN OMX_HANDLETYPE hComp, } case OMX_QcomIndexConfigQp: { - VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP); + VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP); OMX_SKYPE_VIDEO_CONFIG_QP* pParam = reinterpret_cast<OMX_SKYPE_VIDEO_CONFIG_QP*>(configData); DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigQp"); 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 964be762..126392f2 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -415,6 +415,10 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) OMX_INIT_STRUCT(&m_sParamAVTimerTimestampMode, QOMX_ENABLETYPE); m_sParamAVTimerTimestampMode.bEnable = OMX_FALSE; + OMX_INIT_STRUCT(&m_sConfigQP, OMX_QCOM_VIDEO_CONFIG_QP); + m_sConfigQP.nPortIndex = (OMX_U32) PORT_INDEX_OUT; + m_sConfigQP.nQP = 30; + m_state = OMX_StateLoaded; m_sExtraData = 0; diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_extensions.hpp b/mm-video-v4l2/vidc/venc/src/omx_video_extensions.hpp index 5be091ee..17e42ff0 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_extensions.hpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_extensions.hpp @@ -47,6 +47,9 @@ void omx_video::init_vendor_extensions(VendorExtensionStore &store) { ADD_EXTENSION("qti-ext-enc-timestamp-source-avtimer", OMX_QTIIndexParamEnableAVTimerTimestamps, OMX_DirInput) ADD_PARAM_END("enable", OMX_AndroidVendorValueInt32) + + ADD_EXTENSION("qti-ext-enc-frame-qp", OMX_QcomIndexConfigQp, OMX_DirOutput) + ADD_PARAM_END("value", OMX_AndroidVendorValueInt32) } OMX_ERRORTYPE omx_video::get_vendor_extension_config( @@ -100,6 +103,11 @@ OMX_ERRORTYPE omx_video::get_vendor_extension_config( setStatus &= vExt.setParamInt32(ext, "enable", m_sParamAVTimerTimestampMode.bEnable); break; } + case OMX_QcomIndexConfigQp: + { + setStatus &= vExt.setParamInt32(ext, "value", m_sConfigQP.nQP); + break; + } default: { return OMX_ErrorNotImplemented; @@ -232,6 +240,25 @@ OMX_ERRORTYPE omx_video::set_vendor_extension_config( break; } + case OMX_QcomIndexConfigQp: + { + OMX_QCOM_VIDEO_CONFIG_QP qpConfig; + memcpy(&qpConfig, &m_sConfigQP, sizeof(OMX_QCOM_VIDEO_CONFIG_QP)); + valueSet |= vExt.readParamInt32(ext, "value", (OMX_S32 *)&(qpConfig.nQP)); + if (!valueSet) { + break; + } + + DEBUG_PRINT_HIGH("VENDOR-EXT: set_config: nQP =%u", qpConfig.nQP); + + err = set_config( + NULL, (OMX_INDEXTYPE)OMX_QcomIndexConfigQp, &qpConfig); + if (err != OMX_ErrorNone) { + DEBUG_PRINT_ERROR("set_config: OMX_QcomIndexConfigQp failed !"); + } + + break; + } default: { return OMX_ErrorNotImplemented; 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 5bf3fba8..7a3465ba 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 @@ -2711,6 +2711,7 @@ bool venc_dev::venc_set_config(void *configData, OMX_INDEXTYPE index) { OMX_QCOM_VIDEO_CONFIG_QP* pParam = (OMX_QCOM_VIDEO_CONFIG_QP*) configData; + DEBUG_PRINT_LOW("Set_config: nQP %d", pParam->nQP); if (venc_set_qp(pParam->nQP, pParam->nQP, pParam->nQP, |