summaryrefslogtreecommitdiffstats
path: root/mm-video
diff options
context:
space:
mode:
authorDeepak Verma <dverma@codeaurora.org>2013-07-08 17:06:56 +0530
committerDeepak Verma <dverma@codeaurora.org>2013-07-08 17:08:18 +0530
commit9563da2afd596b84c6c9b8118be343d93445ee54 (patch)
tree6f5716267960cf87e799de646187fe13eda182ed /mm-video
parentd4f83efc62a7f2b3aba5f5464b49e8b00d6c6630 (diff)
downloadandroid_hardware_qcom_media-9563da2afd596b84c6c9b8118be343d93445ee54.tar.gz
android_hardware_qcom_media-9563da2afd596b84c6c9b8118be343d93445ee54.tar.bz2
android_hardware_qcom_media-9563da2afd596b84c6c9b8118be343d93445ee54.zip
mm-video: vdec: Allow client to set TURBO mode
- Allow client to set TURBO mode to video decoder. - TURBO mode sets the maximum supported perfomance level to video driver. - Based on frame drops due to delayed video frames client can set TURBO mode to video decoder when required. Change-Id: I4508d8df2af8a64057ea47fcf18820b2524c7aa3
Diffstat (limited to 'mm-video')
-rw-r--r--mm-video/vidc/vdec/inc/omx_vdec.h2
-rw-r--r--mm-video/vidc/vdec/src/omx_vdec.cpp78
-rw-r--r--mm-video/vidc/vdec/test/omx_vdec_test.cpp7
3 files changed, 74 insertions, 13 deletions
diff --git a/mm-video/vidc/vdec/inc/omx_vdec.h b/mm-video/vidc/vdec/inc/omx_vdec.h
index 1fc76194..13471e63 100644
--- a/mm-video/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video/vidc/vdec/inc/omx_vdec.h
@@ -897,8 +897,10 @@ private:
static bool m_secure_display; //For qservice
int secureDisplay(int mode);
int unsecureDisplay(int mode);
+ int set_turbo_mode(bool mode);
bool msg_thread_created;
bool async_thread_created;
+ bool m_turbo_mode;
};
#ifdef _COPPER_
diff --git a/mm-video/vidc/vdec/src/omx_vdec.cpp b/mm-video/vidc/vdec/src/omx_vdec.cpp
index 8d672242..3dd02287 100644
--- a/mm-video/vidc/vdec/src/omx_vdec.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec.cpp
@@ -1703,7 +1703,7 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role)
}
}
}
-
+ m_turbo_mode = false;
if (eRet != OMX_ErrorNone)
{
DEBUG_PRINT_ERROR("\n Component Init Failed");
@@ -3782,6 +3782,22 @@ OMX_ERRORTYPE omx_vdec::set_parameter(OMX_IN OMX_HANDLETYPE hComp,
}
}
break;
+ case OMX_QcomIndexConfigTurboMode:
+ {
+ QOMX_ENABLETYPE *turbo = (QOMX_ENABLETYPE *)paramData;
+ if (turbo->bEnable == OMX_TRUE) {
+ DEBUG_PRINT_HIGH("TURBO mode enabled");
+ m_turbo_mode = true;
+ if (set_turbo_mode(m_turbo_mode)) {
+ DEBUG_PRINT_ERROR("set_turbo_mode failed");
+ m_turbo_mode = false;
+ }
+ } else {
+ DEBUG_PRINT_HIGH("TURBO mode disabled");
+ m_turbo_mode = false;
+ }
+ }
+ break;
default:
{
DEBUG_PRINT_ERROR("Setparameter: unknown param %d\n", paramIndex);
@@ -3942,14 +3958,10 @@ OMX_ERRORTYPE omx_vdec::set_config(OMX_IN OMX_HANDLETYPE hComp,
DEBUG_PRINT_LOW("Set Config Called");
- if (m_state == OMX_StateExecuting)
- {
- DEBUG_PRINT_ERROR("set_config:Ignore in Exe state\n");
- return ret;
- }
-
- if (configIndex == OMX_IndexVendorVideoExtraData)
+ switch(configIndex)
{
+ case OMX_IndexVendorVideoExtraData:
+ {
OMX_VENDOR_EXTRADATATYPE *config = (OMX_VENDOR_EXTRADATATYPE *) configData;
DEBUG_PRINT_LOW("Index OMX_IndexVendorVideoExtraData called");
if (!strcmp(drv_ctx.kind, "OMX.qcom.video.decoder.avc"))
@@ -4066,19 +4078,41 @@ OMX_ERRORTYPE omx_vdec::set_config(OMX_IN OMX_HANDLETYPE hComp,
DEBUG_PRINT_LOW("set_config - Error: Unknown VC1 profile\n");
}
}
- return ret;
}
- else if (configIndex == OMX_IndexConfigVideoNalSize)
+ break;
+ case OMX_IndexConfigVideoNalSize:
{
pNal = reinterpret_cast < OMX_VIDEO_CONFIG_NALSIZE * >(configData);
nal_length = pNal->nNaluBytes;
m_frame_parser.init_nal_length(nal_length);
DEBUG_PRINT_LOW("OMX_IndexConfigVideoNalSize called with Size %d",nal_length);
- return ret;
+ }
+ break;
+ case OMX_QcomIndexConfigTurboMode:
+ {
+ QOMX_ENABLETYPE *turbo = (QOMX_ENABLETYPE *)configData;
+ if (turbo->bEnable == OMX_TRUE) {
+ DEBUG_PRINT_HIGH("TURBO mode enabled");
+ m_turbo_mode = true;
+ if (set_turbo_mode(m_turbo_mode)) {
+ DEBUG_PRINT_ERROR("set_turbo_mode failed!!");
+ m_turbo_mode = false;
+ }
+ } else {
+ DEBUG_PRINT_HIGH("TURBO mode disabled");
+ m_turbo_mode = false;
+ }
+ }
+ break;
+ default:
+ {
+ DEBUG_PRINT_ERROR("SetConfig: unknown index %d\n", configIndex);
+ ret = OMX_ErrorUnsupportedIndex;
+ }
}
- return OMX_ErrorNotImplemented;
+ return ret;
}
/* ======================================================================
@@ -6239,6 +6273,7 @@ OMX_ERRORTYPE omx_vdec::component_deinit(OMX_IN OMX_HANDLETYPE hComp)
m_ftb_q.m_read = m_ftb_q.m_write =0;
m_cmd_q.m_read = m_cmd_q.m_write =0;
m_etb_q.m_read = m_etb_q.m_write =0;
+ m_turbo_mode = false;
#ifdef _ANDROID_
if (m_debug_timestamp)
{
@@ -8412,7 +8447,7 @@ void omx_vdec::set_frame_rate(OMX_S64 act_timestamp)
{
drv_ctx.frame_rate.fps_numerator = 1e6;
drv_ctx.frame_rate.fps_denominator = frm_int;
- DEBUG_PRINT_LOW("set_frame_rate: frm_int(%u) fps(%f)",
+ DEBUG_PRINT_HIGH("set_frame_rate: frm_int(%u) fps(%f)",
frm_int, drv_ctx.frame_rate.fps_numerator /
(float)drv_ctx.frame_rate.fps_denominator);
ioctl_msg.in = &drv_ctx.frame_rate;
@@ -10138,3 +10173,20 @@ int omx_vdec::unsecureDisplay(int mode) {
DEBUG_PRINT_ERROR("unsecureDisplay(%d) display.qservice unavailable", mode);
return 0;
}
+
+int omx_vdec::set_turbo_mode(bool mode)
+{
+ if (mode == (int)true) {
+ struct vdec_ioctl_msg ioctl_msg;
+ DEBUG_PRINT_HIGH("Enable Turbo mode");
+ if (ioctl(drv_ctx.video_driver_fd,VDEC_IOCTL_SET_PERF_CLK,
+ &ioctl_msg) < 0) {
+ DEBUG_PRINT_ERROR("ioctl VDEC_IOCTL_SET_PERF_CLK failed");
+ return 1;
+ }
+ } else {
+ DEBUG_PRINT_HIGH("Disable Turbo mode not suported");
+ return 1;
+ }
+ return 0;
+}
diff --git a/mm-video/vidc/vdec/test/omx_vdec_test.cpp b/mm-video/vidc/vdec/test/omx_vdec_test.cpp
index b1e37d3f..cb8a7eb8 100644
--- a/mm-video/vidc/vdec/test/omx_vdec_test.cpp
+++ b/mm-video/vidc/vdec/test/omx_vdec_test.cpp
@@ -1906,6 +1906,13 @@ int Play_Decoder()
OMX_SetParameter(dec_handle,(OMX_INDEXTYPE)OMX_QcomIndexEnableExtnUserData,
(OMX_PTR)&extra_data);
#endif
+#if 0
+ QOMX_ENABLETYPE enable;
+ enable.bEnable = OMX_TRUE;
+ OMX_SetConfig(dec_handle,(OMX_INDEXTYPE)OMX_QcomIndexConfigTurboMode,
+ (OMX_PTR)&enable);
+#endif
+
/* Query the decoder outport's min buf requirements */
CONFIG_VERSION_SIZE(portFmt);