diff --git a/drivers/amlogic/media/frame_sync/tsync.c b/drivers/amlogic/media/frame_sync/tsync.c index 9d0311e55b84..7e2f69108dd0 100644 --- a/drivers/amlogic/media/frame_sync/tsync.c +++ b/drivers/amlogic/media/frame_sync/tsync.c @@ -803,6 +803,7 @@ void tsync_avevent_locked(enum avevent_e event, u32 param) case VIDEO_STOP: tsync_stat = TSYNC_STAT_PCRSCR_SETUP_NONE; timestamp_vpts_set(0); + timestamp_pcrscr_set(0); timestamp_pcrscr_enable(0); timestamp_firstvpts_set(0); tsync_video_started = 0; diff --git a/drivers/amlogic/media/video_sink/video.c b/drivers/amlogic/media/video_sink/video.c index 900fccf117d7..c79b062c3dfe 100644 --- a/drivers/amlogic/media/video_sink/video.c +++ b/drivers/amlogic/media/video_sink/video.c @@ -6700,10 +6700,11 @@ static irqreturn_t vsync_isr_in(int irq, void *dev_id) } } - if ((diff - omx_pts_interval_upper) > 0 + if (((diff - omx_pts_interval_upper) > 0 || (diff - omx_pts_interval_lower) < 0 || (omx_pts_set_from_hwc_count < - OMX_MAX_COUNT_RESET_SYSTEMTIME)) { + OMX_MAX_COUNT_RESET_SYSTEMTIME)) + && video_start_post) { timestamp_pcrscr_enable(1); if (debug_flag & DEBUG_FLAG_PTS_TRACE) pr_info("system_time=%d, omx_pts=%d, diff=%d\n", @@ -6715,7 +6716,8 @@ static irqreturn_t vsync_isr_in(int irq, void *dev_id) } else if (((diff - omx_pts_interval_upper / 2) > 0 || (diff - omx_pts_interval_lower / 2) < 0) && (omx_pts_set_from_hwc_count_begin < - OMX_MAX_COUNT_RESET_SYSTEMTIME_BEGIN)) { + OMX_MAX_COUNT_RESET_SYSTEMTIME_BEGIN) + && video_start_post) { timestamp_pcrscr_enable(1); if (debug_flag & DEBUG_FLAG_PTS_TRACE) pr_info("begin-system_time=%d, omx_pts=%d, diff=%d\n", @@ -6723,7 +6725,8 @@ static irqreturn_t vsync_isr_in(int irq, void *dev_id) timestamp_pcrscr_set(omx_pts + DURATION_GCD); } else if (is_dolby_vision_enable() && ((diff - omx_pts_dv_upper) > 0 - || (diff - omx_pts_dv_lower) < 0)) { + || (diff - omx_pts_dv_lower) < 0) + && video_start_post) { timestamp_pcrscr_set(omx_pts + DURATION_GCD); } } else