diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0388-Revert-bcm2835-camera-Fix-timestamp-calculation-prob.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.14/950-0388-Revert-bcm2835-camera-Fix-timestamp-calculation-prob.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0388-Revert-bcm2835-camera-Fix-timestamp-calculation-prob.patch b/target/linux/brcm2708/patches-4.14/950-0388-Revert-bcm2835-camera-Fix-timestamp-calculation-prob.patch new file mode 100644 index 0000000000..2bb3a47145 --- /dev/null +++ b/target/linux/brcm2708/patches-4.14/950-0388-Revert-bcm2835-camera-Fix-timestamp-calculation-prob.patch @@ -0,0 +1,93 @@ +From a740e59bf8099d1f5b5b29be3e9993fbd51e729a Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Fri, 6 Jul 2018 17:43:03 +0100 +Subject: [PATCH 388/454] Revert "bcm2835-camera: Fix timestamp calculation + problem (#2214)" + +This reverts commit 90ac037dbeecbb514b677e43b53bc5b1a452ea22. +This has been fixed in an alternate format upstream, so adopt that. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + .../bcm2835-camera/bcm2835-camera.c | 41 ++++++++++++++----- + .../bcm2835-camera/bcm2835-camera.h | 2 +- + 2 files changed, 32 insertions(+), 11 deletions(-) + +--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c ++++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c +@@ -374,17 +374,37 @@ static void buffer_cb(struct vchiq_mmal_ + buf->vb.vb2_buf.timestamp); + + } else if(pts != 0) { ++ struct timeval timestamp; + s64 runtime_us = pts - + dev->capture.vc_start_timestamp; +- buf->vb.vb2_buf.timestamp = (runtime_us * NSEC_PER_USEC) + +- dev->capture.kernel_start_timestamp; ++ u32 div = 0; ++ u32 rem = 0; ++ ++ div = ++ div_u64_rem(runtime_us, USEC_PER_SEC, &rem); ++ timestamp.tv_sec = ++ dev->capture.kernel_start_ts.tv_sec + div; ++ timestamp.tv_usec = ++ dev->capture.kernel_start_ts.tv_usec + rem; ++ ++ if (timestamp.tv_usec >= ++ USEC_PER_SEC) { ++ timestamp.tv_sec++; ++ timestamp.tv_usec -= ++ USEC_PER_SEC; ++ } + v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, +- "Buffer time set as converted timestamp - %llu " +- "= (pts [%lld usec] - vc start time [%llu usec]) " +- "+ kernel start time [%llu nsec]\n", +- buf->vb.vb2_buf.timestamp, +- pts, dev->capture.vc_start_timestamp, +- dev->capture.kernel_start_timestamp); ++ "Convert start time %d.%06d and %llu " ++ "with offset %llu to %d.%06d\n", ++ (int)dev->capture.kernel_start_ts. ++ tv_sec, ++ (int)dev->capture.kernel_start_ts. ++ tv_usec, ++ dev->capture.vc_start_timestamp, pts, ++ (int)timestamp.tv_sec, ++ (int)timestamp.tv_usec); ++ buf->vb.vb2_buf.timestamp = timestamp.tv_sec * 1000000000ULL + ++ timestamp.tv_usec * 1000ULL; + } else { + if (dev->capture.last_timestamp) { + buf->vb.vb2_buf.timestamp = dev->capture.last_timestamp; +@@ -394,7 +414,8 @@ static void buffer_cb(struct vchiq_mmal_ + } + else { + buf->vb.vb2_buf.timestamp = +- dev->capture.kernel_start_timestamp; ++ dev->capture.kernel_start_ts.tv_sec * 1000000000ULL + ++ dev->capture.kernel_start_ts.tv_usec * 1000ULL; + v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, + "Buffer time set as start timestamp - %lld", + buf->vb.vb2_buf.timestamp); +@@ -575,7 +596,7 @@ static int start_streaming(struct vb2_qu + + dev->capture.last_timestamp = 0; + +- dev->capture.kernel_start_timestamp = ktime_get_ns(); ++ v4l2_get_timestamp(&dev->capture.kernel_start_ts); + + /* enable the camera port */ + dev->capture.port->cb_ctx = dev; +--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.h ++++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.h +@@ -92,7 +92,7 @@ struct bm2835_mmal_dev { + /* VC start timestamp for streaming */ + s64 vc_start_timestamp; + /* Kernel start timestamp for streaming */ +- u64 kernel_start_timestamp; ++ struct timeval kernel_start_ts; + /* Timestamp of last frame */ + u64 last_timestamp; + |