mirror of
https://github.com/followmsi/android_hardware_qcom_media.git
synced 2024-10-31 22:47:35 +00:00
mm-video-v4l2: vdec: Dont reset clocks if clocks requested turbo
If client explicitly requested high perflevel, don't reset it to nominal until client itself brings back to nominal. Change-Id: I643d3e30c33cb0f617640af51640187a58ad8775
This commit is contained in:
parent
5deb3a89f9
commit
fbf2c734ca
2 changed files with 16 additions and 6 deletions
|
@ -243,6 +243,14 @@ enum vidc_perf_level {
|
|||
VIDC_NOMINAL = 1,
|
||||
VIDC_TURBO = 2
|
||||
};
|
||||
|
||||
enum turbo_mode {
|
||||
TURBO_MODE_NONE = 0x0,
|
||||
TURBO_MODE_CLIENT_REQUESTED = 0x1,
|
||||
TURBO_MODE_HIGH_FPS = 0x2,
|
||||
TURBO_MODE_MAX = 0xFF
|
||||
};
|
||||
|
||||
#ifdef USE_ION
|
||||
struct vdec_ion {
|
||||
int ion_device_fd;
|
||||
|
@ -1036,7 +1044,7 @@ class omx_vdec: public qc_omx_component
|
|||
pthread_mutex_t m_hdr_info_client_lock;
|
||||
|
||||
OMX_U32 operating_frame_rate;
|
||||
bool high_fps;
|
||||
uint8_t m_need_turbo;
|
||||
|
||||
OMX_U32 m_smoothstreaming_width;
|
||||
OMX_U32 m_smoothstreaming_height;
|
||||
|
|
|
@ -661,6 +661,7 @@ omx_vdec::omx_vdec(): m_error_propogated(false),
|
|||
allocate_native_handle(false),
|
||||
m_other_extradata(NULL),
|
||||
m_profile(0),
|
||||
m_need_turbo(0),
|
||||
client_set_fps(false),
|
||||
stereo_output_mode(HAL_NO_3D),
|
||||
m_last_rendered_TS(-1),
|
||||
|
@ -1709,6 +1710,7 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id)
|
|||
if (p2 == OMX_IndexParamPortDefinition) {
|
||||
DEBUG_PRINT_HIGH("Rxd PORT_RECONFIG: OMX_IndexParamPortDefinition");
|
||||
pThis->in_reconfig = true;
|
||||
pThis->m_need_turbo &= ~TURBO_MODE_HIGH_FPS;
|
||||
} else if (p2 == OMX_IndexConfigCommonOutputCrop) {
|
||||
DEBUG_PRINT_HIGH("Rxd PORT_RECONFIG: OMX_IndexConfigCommonOutputCrop");
|
||||
|
||||
|
@ -2261,7 +2263,6 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role)
|
|||
drv_ctx.frame_rate.fps_numerator = DEFAULT_FPS;
|
||||
drv_ctx.frame_rate.fps_denominator = 1;
|
||||
operating_frame_rate = DEFAULT_FPS;
|
||||
high_fps = false;
|
||||
m_poll_efd = eventfd(0, 0);
|
||||
if (m_poll_efd < 0) {
|
||||
DEBUG_PRINT_ERROR("Failed to create event fd(%s)", strerror(errno));
|
||||
|
@ -5479,15 +5480,16 @@ OMX_ERRORTYPE omx_vdec::set_config(OMX_IN OMX_HANDLETYPE hComp,
|
|||
struct v4l2_control control;
|
||||
|
||||
DEBUG_PRINT_LOW("Set perf level: %d", perf->ePerfLevel);
|
||||
|
||||
control.id = V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL;
|
||||
|
||||
switch (perf->ePerfLevel) {
|
||||
case OMX_QCOM_PerfLevelNominal:
|
||||
control.value = V4L2_CID_MPEG_VIDC_PERF_LEVEL_NOMINAL;
|
||||
m_need_turbo &= ~TURBO_MODE_CLIENT_REQUESTED;
|
||||
break;
|
||||
case OMX_QCOM_PerfLevelTurbo:
|
||||
control.value = V4L2_CID_MPEG_VIDC_PERF_LEVEL_TURBO;
|
||||
m_need_turbo |= TURBO_MODE_CLIENT_REQUESTED;
|
||||
break;
|
||||
default:
|
||||
ret = OMX_ErrorUnsupportedSetting;
|
||||
|
@ -9032,7 +9034,7 @@ int omx_vdec::async_message_process (void *context, void* message)
|
|||
if (omxhdr->nFilledLen)
|
||||
omx->prev_n_filled_len = omxhdr->nFilledLen;
|
||||
|
||||
if (omxhdr && omxhdr->nFilledLen && !omx->high_fps) {
|
||||
if (omxhdr && omxhdr->nFilledLen && !omx->m_need_turbo) {
|
||||
omx->request_perf_level(VIDC_NOMINAL);
|
||||
}
|
||||
if (omx->output_use_buffer && omxhdr->pBuffer &&
|
||||
|
@ -9065,7 +9067,7 @@ int omx_vdec::async_message_process (void *context, void* message)
|
|||
omx->m_reconfig_height = vdec_msg->msgdata.output_frame.picsize.frame_height;
|
||||
omx->post_event (OMX_CORE_OUTPUT_PORT_INDEX, OMX_IndexParamPortDefinition,
|
||||
OMX_COMPONENT_GENERATE_PORT_RECONFIG);
|
||||
if (!omx->high_fps) {
|
||||
if (!omx->m_need_turbo) {
|
||||
omx->request_perf_level(VIDC_NOMINAL);
|
||||
}
|
||||
break;
|
||||
|
@ -10020,7 +10022,7 @@ OMX_ERRORTYPE omx_vdec::get_buffer_req(vdec_allocatorproperty *buffer_prop)
|
|||
if (increase_output && fps_above_180 &&
|
||||
output_capability == V4L2_PIX_FMT_H264 &&
|
||||
is_res_1080p_or_below) {
|
||||
high_fps = true;
|
||||
m_need_turbo |= TURBO_MODE_HIGH_FPS;
|
||||
DEBUG_PRINT_LOW("High fps - fps = %d operating_rate = %d", fps, operating_frame_rate);
|
||||
DEBUG_PRINT_LOW("getbufreq[output]: Increase buffer count (%d) to (%d) to support high fps",
|
||||
bufreq.count, bufreq.count + 10);
|
||||
|
|
Loading…
Reference in a new issue