diff options
author | Deepak Verma <dverma@codeaurora.org> | 2013-07-08 17:06:56 +0530 |
---|---|---|
committer | Deepak Verma <dverma@codeaurora.org> | 2013-07-08 17:08:18 +0530 |
commit | 9563da2afd596b84c6c9b8118be343d93445ee54 (patch) | |
tree | 6f5716267960cf87e799de646187fe13eda182ed /mm-video | |
parent | d4f83efc62a7f2b3aba5f5464b49e8b00d6c6630 (diff) | |
download | android_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.h | 2 | ||||
-rw-r--r-- | mm-video/vidc/vdec/src/omx_vdec.cpp | 78 | ||||
-rw-r--r-- | mm-video/vidc/vdec/test/omx_vdec_test.cpp | 7 |
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); |