From a4bf3fec6f15cd01092a8eee9ff6e9602f333c45 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 6400af065245..3f114b772870 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; @@ -6339,10 +6340,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; @@ -8249,6 +8250,7 @@ static void video_vf_unreg_provider(void) show_first_frame_nosync = false; time_setomxpts = 0; + time_setomxpts_last = 0; #ifdef PTS_LOGGING { @@ -8821,6 +8823,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);