Message ID | 20220214123951.3919523-1-kieran.bingham@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Kieran, On Mon, Feb 14, 2022 at 12:39:51PM +0000, Kieran Bingham wrote: > The V4L2 Compatibility layer is returning timestamps for buffers which > are incorrectly calculated from the frame metadata. > > The sec component of the timestamp is correct, but the nsec component is > out, leaving frame captures reporting non-monotonically increasing > timestamps, and incorrect frame rate calculations. Oops :S > > Fix the usecs calculation reported by the V4L2 adaptation layer. > > Bug: https://bugs.libcamera.org/show_bug.cgi?id=118 > Fixes: 0ce8f2390b52 ("v4l2: v4l2_compat: Add V4L2 compatibility layer") > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > --- > src/v4l2/v4l2_camera_proxy.cpp | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp > index 45822feff317..67b2c50c0f7e 100644 > --- a/src/v4l2/v4l2_camera_proxy.cpp > +++ b/src/v4l2/v4l2_camera_proxy.cpp > @@ -234,7 +234,7 @@ void V4L2CameraProxy::updateBuffers() > }); > buf.field = V4L2_FIELD_NONE; > buf.timestamp.tv_sec = fmd.timestamp / 1000000000; > - buf.timestamp.tv_usec = fmd.timestamp % 1000000; > + buf.timestamp.tv_usec = fmd.timestamp / 1000 % 1000000; > buf.sequence = fmd.sequence; > > buf.flags |= V4L2_BUF_FLAG_DONE; > -- > 2.32.0 >
Hi Kieran, Thank you for the patch. On Mon, Feb 14, 2022 at 12:39:51PM +0000, Kieran Bingham wrote: > The V4L2 Compatibility layer is returning timestamps for buffers which > are incorrectly calculated from the frame metadata. > > The sec component of the timestamp is correct, but the nsec component is Did you mean usec ? > out, leaving frame captures reporting non-monotonically increasing > timestamps, and incorrect frame rate calculations. > > Fix the usecs calculation reported by the V4L2 adaptation layer. > > Bug: https://bugs.libcamera.org/show_bug.cgi?id=118 > Fixes: 0ce8f2390b52 ("v4l2: v4l2_compat: Add V4L2 compatibility layer") > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > --- > src/v4l2/v4l2_camera_proxy.cpp | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp > index 45822feff317..67b2c50c0f7e 100644 > --- a/src/v4l2/v4l2_camera_proxy.cpp > +++ b/src/v4l2/v4l2_camera_proxy.cpp > @@ -234,7 +234,7 @@ void V4L2CameraProxy::updateBuffers() > }); > buf.field = V4L2_FIELD_NONE; > buf.timestamp.tv_sec = fmd.timestamp / 1000000000; > - buf.timestamp.tv_usec = fmd.timestamp % 1000000; > + buf.timestamp.tv_usec = fmd.timestamp / 1000 % 1000000; I'd have written buf.timestamp.tv_usec = (fmd.timestamp / 1000) % 1000000; Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> either way. > buf.sequence = fmd.sequence; > > buf.flags |= V4L2_BUF_FLAG_DONE;
Quoting Laurent Pinchart (2022-02-15 06:42:13) > Hi Kieran, > > Thank you for the patch. > > On Mon, Feb 14, 2022 at 12:39:51PM +0000, Kieran Bingham wrote: > > The V4L2 Compatibility layer is returning timestamps for buffers which > > are incorrectly calculated from the frame metadata. > > > > The sec component of the timestamp is correct, but the nsec component is > > Did you mean usec ? Yes, it seems my commit message is out by the same order of magnitude as the bug ... Fixed, > > out, leaving frame captures reporting non-monotonically increasing > > timestamps, and incorrect frame rate calculations. > > > > Fix the usecs calculation reported by the V4L2 adaptation layer. > > > > Bug: https://bugs.libcamera.org/show_bug.cgi?id=118 > > Fixes: 0ce8f2390b52 ("v4l2: v4l2_compat: Add V4L2 compatibility layer") > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > > --- > > src/v4l2/v4l2_camera_proxy.cpp | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp > > index 45822feff317..67b2c50c0f7e 100644 > > --- a/src/v4l2/v4l2_camera_proxy.cpp > > +++ b/src/v4l2/v4l2_camera_proxy.cpp > > @@ -234,7 +234,7 @@ void V4L2CameraProxy::updateBuffers() > > }); > > buf.field = V4L2_FIELD_NONE; > > buf.timestamp.tv_sec = fmd.timestamp / 1000000000; > > - buf.timestamp.tv_usec = fmd.timestamp % 1000000; > > + buf.timestamp.tv_usec = fmd.timestamp / 1000 % 1000000; > > I'd have written > > buf.timestamp.tv_usec = (fmd.timestamp / 1000) % 1000000; aha, normally I expect you to suggest removing brackets ;-) But I can add these. > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > either way. > Thanks, will collect tags, fix the minors and push. > > buf.sequence = fmd.sequence; > > > > buf.flags |= V4L2_BUF_FLAG_DONE; > > -- > Regards, > > Laurent Pinchart
diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp index 45822feff317..67b2c50c0f7e 100644 --- a/src/v4l2/v4l2_camera_proxy.cpp +++ b/src/v4l2/v4l2_camera_proxy.cpp @@ -234,7 +234,7 @@ void V4L2CameraProxy::updateBuffers() }); buf.field = V4L2_FIELD_NONE; buf.timestamp.tv_sec = fmd.timestamp / 1000000000; - buf.timestamp.tv_usec = fmd.timestamp % 1000000; + buf.timestamp.tv_usec = fmd.timestamp / 1000 % 1000000; buf.sequence = fmd.sequence; buf.flags |= V4L2_BUF_FLAG_DONE;
The V4L2 Compatibility layer is returning timestamps for buffers which are incorrectly calculated from the frame metadata. The sec component of the timestamp is correct, but the nsec component is out, leaving frame captures reporting non-monotonically increasing timestamps, and incorrect frame rate calculations. Fix the usecs calculation reported by the V4L2 adaptation layer. Bug: https://bugs.libcamera.org/show_bug.cgi?id=118 Fixes: 0ce8f2390b52 ("v4l2: v4l2_compat: Add V4L2 compatibility layer") Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> --- src/v4l2/v4l2_camera_proxy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)