hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/isp/capture_v21.c
....@@ -1150,7 +1150,8 @@
11501150 if (!ret) {
11511151 denominator = sensor->fi.interval.denominator;
11521152 numerator = sensor->fi.interval.numerator;
1153
- time = numerator * 1000 / denominator * 1000 * 1000;
1153
+ if (denominator)
1154
+ time = numerator * 1000 / denominator * 1000 * 1000;
11541155 if (numerator)
11551156 fps = denominator / numerator;
11561157 }
....@@ -1225,6 +1226,15 @@
12251226 struct vb2_buffer *vb2_buf = &stream->curr_buf->vb.vb2_buf;
12261227 u64 ns = 0;
12271228
1229
+ if (stream->skip_frame) {
1230
+ spin_lock_irqsave(&stream->vbq_lock, lock_flags);
1231
+ list_add_tail(&stream->curr_buf->queue, &stream->buf_queue);
1232
+ spin_unlock_irqrestore(&stream->vbq_lock, lock_flags);
1233
+ if (stream->skip_frame)
1234
+ stream->skip_frame--;
1235
+ goto end;
1236
+ }
1237
+
12281238 /* Dequeue a filled buffer */
12291239 for (i = 0; i < isp_fmt->mplanes; i++) {
12301240 u32 payload_size =
....@@ -1241,10 +1251,10 @@
12411251 atomic_read(&stream->sequence) - 1;
12421252 }
12431253 if (!ns)
1244
- ns = ktime_get_ns();
1254
+ ns = rkisp_time_get_ns(dev);
12451255 vb2_buf->timestamp = ns;
12461256
1247
- ns = ktime_get_ns();
1257
+ ns = rkisp_time_get_ns(dev);
12481258 stream->dbg.interval = ns - stream->dbg.timestamp;
12491259 stream->dbg.timestamp = ns;
12501260 stream->dbg.id = stream->curr_buf->vb.sequence;
....@@ -1287,6 +1297,7 @@
12871297 stream->curr_buf = NULL;
12881298 }
12891299
1300
+end:
12901301 if (!interlaced ||
12911302 (stream->curr_buf == stream->next_buf &&
12921303 stream->u.sp.field == RKISP_FIELD_ODD)) {
....@@ -1505,7 +1516,7 @@
15051516 if (stream->id == RKISP_STREAM_MP || stream->id == RKISP_STREAM_SP)
15061517 hdr_config_dmatx(dev);
15071518 stream->streaming = true;
1508
-
1519
+ stream->skip_frame = 0;
15091520 return 0;
15101521 }
15111522