summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2015-10-15 05:25:17 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-10-15 05:25:17 -0700
commitdb20beda66095a025c0ae32b983bafae48d1b2a2 (patch)
treed7551063e6d9cd3cc84388644940118ba927ffee
parent826ba8c29f658c18a6b7da84a8eb02631be34245 (diff)
parenta54c5d4c058afb318071667feb4ed48387e3d2e7 (diff)
downloadandroid_hardware_qcom_media-db20beda66095a025c0ae32b983bafae48d1b2a2.tar.gz
android_hardware_qcom_media-db20beda66095a025c0ae32b983bafae48d1b2a2.tar.bz2
android_hardware_qcom_media-db20beda66095a025c0ae32b983bafae48d1b2a2.zip
Merge "mm-video-v4l2: vdec: fix fps issues in arbitrary mode"
-rw-r--r--mm-video-v4l2/vidc/vdec/inc/omx_vdec.h2
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp11
2 files changed, 8 insertions, 5 deletions
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index 399d867f..722b7ba5 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -913,8 +913,8 @@ class omx_vdec: public qc_omx_component
OMX_U32 m_demux_entries;
OMX_U32 m_disp_hor_size;
OMX_U32 m_disp_vert_size;
-
OMX_S64 prev_ts;
+ OMX_S64 prev_ts_actual;
bool rst_prev_ts;
OMX_U32 frm_int;
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
index 23715d5d..75e47ae6 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -577,6 +577,7 @@ omx_vdec::omx_vdec(): m_error_propogated(false),
m_disp_hor_size(0),
m_disp_vert_size(0),
prev_ts(LLONG_MAX),
+ prev_ts_actual(LLONG_MAX),
rst_prev_ts(true),
frm_int(0),
in_reconfig(false),
@@ -9270,8 +9271,8 @@ void omx_vdec::set_frame_rate(OMX_S64 act_timestamp)
OMX_U32 new_frame_interval = 0;
if (VALID_TS(act_timestamp) && VALID_TS(prev_ts) && act_timestamp != prev_ts
&& llabs(act_timestamp - prev_ts) > 2000) {
- new_frame_interval = client_set_fps ? frm_int :
- llabs(act_timestamp - prev_ts);
+ new_frame_interval = client_set_fps ? frm_int : (act_timestamp - prev_ts) > 0 ?
+ llabs(act_timestamp - prev_ts) : llabs(act_timestamp - prev_ts_actual);
if (new_frame_interval != frm_int || frm_int == 0) {
frm_int = new_frame_interval;
if (frm_int) {
@@ -9307,11 +9308,13 @@ void omx_vdec::adjust_timestamp(OMX_S64 &act_timestamp)
{
if (rst_prev_ts && VALID_TS(act_timestamp)) {
prev_ts = act_timestamp;
+ prev_ts_actual = act_timestamp;
rst_prev_ts = false;
} else if (VALID_TS(prev_ts)) {
bool codec_cond = (drv_ctx.timestamp_adjust)?
- (!VALID_TS(act_timestamp) || act_timestamp < prev_ts || llabs(act_timestamp - prev_ts) <= 2000) :
- (!VALID_TS(act_timestamp) || act_timestamp <= prev_ts);
+ (!VALID_TS(act_timestamp) || act_timestamp < prev_ts_actual || llabs(act_timestamp - prev_ts_actual) <= 2000) :
+ (!VALID_TS(act_timestamp) || act_timestamp <= prev_ts_actual);
+ prev_ts_actual = act_timestamp; //unadjusted previous timestamp
if (frm_int > 0 && codec_cond) {
DEBUG_PRINT_LOW("adjust_timestamp: original ts[%lld]", act_timestamp);
act_timestamp = prev_ts + frm_int;