IntelRealSense / realsense_mipi_platform_driver

Intel® RealSense™ camera driver for GMSL* interface
GNU General Public License v2.0
15 stars 14 forks source link

Aligned preferred stride on 64-byte boundary in vi driver #101

Closed shikundi closed 2 years ago

shikundi commented 2 years ago

This patch is to align the chan->preferred_stride on 64-byte boundary in vi driver. Then v4l2-ctl or other application on user space won't need to do 64 bytes alignment in manual anymore.

Before:

# enable dump debug log of file channel.c
$ echo -n 'file channel.c +p' | sudo tee /sys/kernel/debug/dynamic_debug/control

$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=848,height=480,pixelformat="Z16 "
$ dmesg | tail -n 1
[ 1506.149215] video4linux video0: tegra_channel_update_format: Resolution= 848x480 bytesperline=1696

Userspace:
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=848,height=480 --stream-mmap --stream-count=10 --verbose
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
        Width/Height      : 848/480
        Pixel Format      : 'Z16 '
        Field             : None
        Bytes per Line    : 1696
        Size Image        : 814080
        Colorspace        : sRGB
        Transfer Function : Default (maps to sRGB)
        YCbCr/HSV Encoding: Default (maps to ITU-R 601)
        Quantization      : Default (maps to Full Range)
        Flags             :
VIDIOC_REQBUFS: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_STREAMON: ok
        Index    : 1
        Type     : Video Capture
        Flags    : mapped
        Field    : None
        Sequence : 1
        Length   : 814080
        Bytesused: 814080
        Timestamp: 5251.822975s (Monotonic, End-of-Frame)

After:

$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=848,height=480,pixelformat="Z16 "
$ dmesg | tail -n 1
[  139.456458] video4linux video0: tegra_channel_update_format: Resolution= 848x480 aligned bytesperline=1728

$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=424,height=240,pixelformat="Z16 "
$ dmesg | tail -n 1
[  217.157838] video4linux video0: tegra_channel_update_format: Resolution= 424x240 aligned bytesperline=896

Userspace:
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=848,height=480 --stream-mmap --stream-count=10 --verbose
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
        Width/Height : 848/480
        Pixel Format : 'Z16 '
        Field : None
        Bytes per Line : 1728
        Size Image : 829440
        Colorspace : sRGB
        Transfer Function : Default (maps to sRGB)
        YCbCr/HSV Encoding: Default (maps to ITU-R 601)
        Quantization : Default (maps to Full Range)
        Flags             :
VIDIOC_REQBUFS: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_STREAMON: ok
        Index    : 1
        Type     : Video Capture
        Flags    : mapped
        Field    : None
        Sequence : 1
        Length   : 829440
        Bytesused: 829440
        Timestamp: 5252.022800s (Monotonic, End-of-Frame)
xzhangxa commented 2 years ago

The goal is not only to reset it in case user forgets, but to let the user not need to set preferred_stride at all.

ev-mp commented 2 years ago

@d1ntel , FYI

xzhangxa commented 2 years ago

So this is not needed anymore?