summaryrefslogtreecommitdiff
path: root/mm-video-v4l2
diff options
context:
space:
mode:
authorShivendra Kakrania <shiven@codeaurora.org>2017-06-23 11:18:59 -0700
committerShivendra Kakrania <shiven@codeaurora.org>2017-06-26 14:48:36 -0700
commitc8a0efdc3aa630310b09bae2ab4f52a4e303cee5 (patch)
treee2e68c687071869c1b31cef603de498c25eadde9 /mm-video-v4l2
parent06cc2f67f27b60f4a006b50a7b8525b831d173df (diff)
downloadmedia-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')
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_base.cpp2
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp4
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_extensions.hpp27
-rw-r--r--mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp1
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,