mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
media: rockchip: isp: drop first output for fast case
Change-Id: I7e303b6307032187a70b5558f2a78ccd6b8f3ca5 Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -1253,6 +1253,7 @@ static int mi_frame_start(struct rkisp_stream *stream, u32 mis)
|
||||
*/
|
||||
static int mi_frame_end(struct rkisp_stream *stream)
|
||||
{
|
||||
struct rkisp_device *dev = stream->ispdev;
|
||||
struct capture_fmt *isp_fmt = &stream->out_isp_fmt;
|
||||
unsigned long lock_flags = 0;
|
||||
u32 i;
|
||||
@@ -1262,6 +1263,13 @@ static int mi_frame_end(struct rkisp_stream *stream)
|
||||
if (stream->curr_buf) {
|
||||
struct vb2_buffer *vb2_buf = &stream->curr_buf->vb.vb2_buf;
|
||||
|
||||
if (dev->skip_frame) {
|
||||
spin_lock_irqsave(&stream->vbq_lock, lock_flags);
|
||||
list_add_tail(&stream->curr_buf->queue, &stream->buf_queue);
|
||||
spin_unlock_irqrestore(&stream->vbq_lock, lock_flags);
|
||||
goto next;
|
||||
}
|
||||
|
||||
for (i = 0; i < isp_fmt->mplanes; i++) {
|
||||
u32 payload_size = stream->out_fmt.plane_fmt[i].sizeimage;
|
||||
|
||||
@@ -1273,7 +1281,7 @@ static int mi_frame_end(struct rkisp_stream *stream)
|
||||
else
|
||||
rkisp_rockit_buf_done(stream, ROCKIT_DVBM_END);
|
||||
}
|
||||
|
||||
next:
|
||||
spin_lock_irqsave(&stream->vbq_lock, lock_flags);
|
||||
stream->curr_buf = stream->next_buf;
|
||||
stream->next_buf = NULL;
|
||||
|
||||
@@ -789,8 +789,10 @@ static void rkisp_rdbk_trigger_handle(struct rkisp_device *dev, u32 cmd)
|
||||
isp->sw_rd_cnt = 1;
|
||||
times = 0;
|
||||
}
|
||||
if (dev->is_pre_on && t.frame_id == 0)
|
||||
if (dev->is_pre_on && t.frame_id == 0) {
|
||||
dev->is_first_double = true;
|
||||
dev->skip_frame = 1;
|
||||
}
|
||||
}
|
||||
end:
|
||||
spin_unlock_irqrestore(&hw->rdbk_lock, lock_flags);
|
||||
@@ -847,8 +849,6 @@ void rkisp_check_idle(struct rkisp_device *dev, u32 irq)
|
||||
{
|
||||
u32 val = 0;
|
||||
|
||||
if (dev->is_first_double)
|
||||
return;
|
||||
if (dev->hw_dev->is_multi_overflow &&
|
||||
dev->sw_rd_cnt &&
|
||||
irq & ISP_FRAME_END)
|
||||
@@ -867,6 +867,12 @@ void rkisp_check_idle(struct rkisp_device *dev, u32 irq)
|
||||
if (dev->irq_ends != dev->irq_ends_mask || !IS_HDR_RDBK(dev->rd_mode))
|
||||
return;
|
||||
|
||||
if (dev->is_first_double) {
|
||||
dev->skip_frame = 0;
|
||||
dev->irq_ends = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* check output stream is off */
|
||||
val = ISP_FRAME_MP | ISP_FRAME_SP | ISP_FRAME_MPFBC | ISP_FRAME_BP;
|
||||
if (!(dev->irq_ends_mask & val)) {
|
||||
|
||||
Reference in New Issue
Block a user