From 79b52d72626983cae86af21f09d84a5f3624da57 Mon Sep 17 00:00:00 2001 From: "shuanglong.wang" Date: Mon, 24 Jun 2019 17:31:43 +0800 Subject: [PATCH] video: modify omxpts compenstate condition [1/1] PD#SWPL-9676 Problem: h264 non-tunnel mode video, video resume play will frezee one frame after pause Solution: modify omxpts compenstate condition to let pcr stop in time Verify: verify by nts Change-Id: I719150064b0abe4fdfd230a2429cfdfc000ea786 Signed-off-by: shuanglong.wang --- drivers/amlogic/media/video_sink/video.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/amlogic/media/video_sink/video.c b/drivers/amlogic/media/video_sink/video.c index bcd0226..42e72ce 100644 --- a/drivers/amlogic/media/video_sink/video.c +++ b/drivers/amlogic/media/video_sink/video.c @@ -160,6 +160,7 @@ static bool videopeek; static bool nopostvideostart; static struct video_frame_detect_s video_frame_detect; static long long time_setomxpts; +static long long time_setomxpts_last; /*----omx_info bit0: keep_last_frame, bit1~31: unused----*/ static u32 omx_info = 0x1; @@ -6372,10 +6373,10 @@ static irqreturn_t vsync_isr_in(int irq, void *dev_id) /* is not update for a while, in case when */ /* paused, pcr is not paused */ delta1 = func_div(sched_clock() - time_setomxpts, 1000); - if (((diff - omx_pts_interval_upper * 3 / 2) > 0) - || ((diff - omx_pts_interval_lower * 3 / 2) - < 0)) { + if ((time_setomxpts - time_setomxpts_last) > + (4 * vsync_pts_inc * 1000 / 90)) { time_setomxpts = 0; + time_setomxpts_last = 0; pr_info("omxpts is not update for a while,do not need compenstate\n"); } else { diff -= delta1 * 90 / 1000; @@ -8282,6 +8283,7 @@ static void video_vf_unreg_provider(void) show_first_frame_nosync = false; time_setomxpts = 0; + time_setomxpts_last = 0; #ifdef PTS_LOGGING { @@ -8854,6 +8856,7 @@ static void set_omx_pts(u32 *p) } } if (not_reset == 0) { + time_setomxpts_last = time_setomxpts; time_setomxpts = sched_clock(); omx_pts = tmp_pts; ATRACE_COUNTER("omxpts", omx_pts); -- 2.7.4