From d7e1493f44491676d2c8caabe065fbe90a5cca38 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Sat, 6 May 2023 18:09:50 +0800 Subject: [PATCH] media: rockchip: isp: fix isp rockit frame rate err Change-Id: I1a730c26168f15be6c7a145bf7fe830316640447 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/capture.h | 1 + drivers/media/platform/rockchip/isp/capture_v32.c | 5 ++++- drivers/media/platform/rockchip/isp/isp_rockit.c | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture.h b/drivers/media/platform/rockchip/isp/capture.h index b76c075d90fc..bbdcf1e6df6e 100644 --- a/drivers/media/platform/rockchip/isp/capture.h +++ b/drivers/media/platform/rockchip/isp/capture.h @@ -287,6 +287,7 @@ struct rkisp_stream { struct frame_debug_info dbg; int conn_id; u32 memory; + u32 skip_frame; union { struct rkisp_stream_sp sp; struct rkisp_stream_mp mp; diff --git a/drivers/media/platform/rockchip/isp/capture_v32.c b/drivers/media/platform/rockchip/isp/capture_v32.c index a87ef1a878c5..05b5356841d2 100644 --- a/drivers/media/platform/rockchip/isp/capture_v32.c +++ b/drivers/media/platform/rockchip/isp/capture_v32.c @@ -1399,10 +1399,12 @@ static int mi_frame_end(struct rkisp_stream *stream, u32 state) struct rkisp_stream *vir = &dev->cap_dev.stream[RKISP_STREAM_VIR]; u64 ns = 0; - if (dev->skip_frame) { + if (dev->skip_frame || stream->skip_frame) { spin_lock_irqsave(&stream->vbq_lock, lock_flags); list_add_tail(&buf->queue, &stream->buf_queue); spin_unlock_irqrestore(&stream->vbq_lock, lock_flags); + if (stream->skip_frame) + stream->skip_frame--; goto end; } @@ -1540,6 +1542,7 @@ static int rkisp_start(struct rkisp_stream *stream) stream->ops->enable_mi(stream); stream->streaming = true; + stream->skip_frame = 0; return 0; } diff --git a/drivers/media/platform/rockchip/isp/isp_rockit.c b/drivers/media/platform/rockchip/isp/isp_rockit.c index b969592a5a2e..0ba72aad0c73 100644 --- a/drivers/media/platform/rockchip/isp/isp_rockit.c +++ b/drivers/media/platform/rockchip/isp/isp_rockit.c @@ -591,9 +591,11 @@ bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream) *fps_cnt = fps_in - dst_fps; *fps_cnt += dst_fps; - if (*fps_cnt < fps_in) + if (*fps_cnt < fps_in) { *is_discard = true; - else { + if (stream->next_buf || !list_empty(&stream->buf_queue)) + stream->skip_frame = 1; + } else { *fps_cnt -= fps_in; *is_discard = false; ++cur_fps[stream->id];