You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.6 KiB
38 lines
1.6 KiB
From d93df875705016c8b767b679ad6d16bf26b2d132 Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|
Date: Tue, 24 Jul 2018 12:08:29 +0100
|
|
Subject: [PATCH 408/454] staging: bcm2835-camera: Ensure timestamps never go
|
|
backwards.
|
|
|
|
There is an awkward situation with H264 header bytes. Currently
|
|
they are returned with a PTS of 0 because they aren't associated
|
|
with a timestamped frame to encode. These are handled by either
|
|
returning the timestamp of the last buffer to have been received,
|
|
or in the case of the first buffer the timestamp taken at
|
|
start_streaming.
|
|
This results in a race where the current frame may have started
|
|
before we take the start time, which results in the first encoded
|
|
frame having an earlier timestamp than the header bytes.
|
|
|
|
Ensure that we never return a negative delta to the user by checking
|
|
against the previous timestamp.
|
|
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|
---
|
|
.../staging/vc04_services/bcm2835-camera/bcm2835-camera.c | 5 +++++
|
|
1 file changed, 5 insertions(+)
|
|
|
|
--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
|
|
+++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
|
|
@@ -400,6 +400,11 @@ static void buffer_cb(struct vchiq_mmal_
|
|
ktime_to_ns(dev->capture.kernel_start_ts),
|
|
dev->capture.vc_start_timestamp, pts,
|
|
ktime_to_ns(timestamp));
|
|
+ if (timestamp < dev->capture.last_timestamp) {
|
|
+ v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
|
|
+ "Negative delta - using last time\n");
|
|
+ timestamp = dev->capture.last_timestamp;
|
|
+ }
|
|
buf->vb.vb2_buf.timestamp = ktime_to_ns(timestamp);
|
|
} else {
|
|
if (dev->capture.last_timestamp) {
|
|
|