diff options
-rw-r--r--[-rwxr-xr-x] | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 3d637ad7..3c84551c 100755..100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -723,7 +723,7 @@ omx_vdec::omx_vdec(): m_error_propogated(false), m_profile(0), client_set_fps(false), stereo_output_mode(HAL_NO_3D), - m_last_rendered_TS(0), + m_last_rendered_TS(-1), m_dec_hfr_fps(0), m_queued_codec_config_count(0), secure_scaling_to_non_secure_opb(false), @@ -765,6 +765,10 @@ omx_vdec::omx_vdec(): m_error_propogated(false), DEBUG_PRINT_HIGH("HFR fps value = %d", m_dec_hfr_fps); + if (m_dec_hfr_fps) { + m_last_rendered_TS = 0; + } + property_value[0] = '\0'; property_get("vendor.vidc.dec.log.in", property_value, "0"); m_debug.in_buffer_log |= atoi(property_value); @@ -8065,7 +8069,7 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, il_buffer = client_buffers.get_il_buf_hdr(buffer); OMX_U32 current_framerate = (int)(drv_ctx.frame_rate.fps_numerator / drv_ctx.frame_rate.fps_denominator); - if (il_buffer && m_dec_hfr_fps > 0) { + if (il_buffer && m_last_rendered_TS >= 0) { OMX_TICKS ts_delta = (OMX_TICKS)llabs(il_buffer->nTimeStamp - m_last_rendered_TS); // Convert fps into ms value. 1 sec = 1000000 ms. OMX_U64 target_ts_delta = m_dec_hfr_fps ? 1000000 / m_dec_hfr_fps : ts_delta; @@ -8117,8 +8121,9 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, } } } - if (refresh_rate > m_dec_hfr_fps) { - refresh_rate = m_dec_hfr_fps; + OMX_U32 fps_limit = m_dec_hfr_fps ? (OMX_U32)m_dec_hfr_fps : 60; + if (refresh_rate > fps_limit) { + refresh_rate = fps_limit; } DEBUG_PRINT_LOW("frc set refresh_rate %f, frame %d", refresh_rate, proc_frms); OMX_U32 buf_index = buffer - m_out_mem_ptr; |