ACK: [PATCH 0/1][SRU][B][F][G][H][I](upstream) media: uvcvideo: Fix pixel format change for Elgato Cam Link 4K
Tim Gardner
tim.gardner at canonical.com
Thu Jun 24 11:27:15 UTC 2021
Acked-by: Tim Gardner <tim.gardner at canonical.com>
Isolated to this one device.
On 6/23/21 4:16 PM, Benjamin Drung wrote:
> BugLink: https://bugs.launchpad.net/bugs/1932367
>
> [Impact]
>
> The Elgato Cam Link 4K HDMI video capture card reports to support three
> different pixel formats, where the first format depends on the connected
> HDMI device.
>
> ```
> $ v4l2-ctl -d /dev/video0 --list-formats-ext
> ioctl: VIDIOC_ENUM_FMT
> Type: Video Capture
>
> [0]: 'NV12' (Y/CbCr 4:2:0)
> Size: Discrete 3840x2160
> Interval: Discrete 0.033s (29.970 fps)
> [1]: 'NV12' (Y/CbCr 4:2:0)
> Size: Discrete 3840x2160
> Interval: Discrete 0.033s (29.970 fps)
> [2]: 'YU12' (Planar YUV 4:2:0)
> Size: Discrete 3840x2160
> Interval: Discrete 0.033s (29.970 fps)
> ```
>
> Changing the pixel format to anything besides the first pixel format
> does not work:
>
> ```
> $ v4l2-ctl -d /dev/video0 --try-fmt-video pixelformat=YU12
> Format Video Capture:
> Width/Height : 3840/2160
> Pixel Format : 'NV12' (Y/CbCr 4:2:0)
> Field : None
> Bytes per Line : 3840
> Size Image : 12441600
> Colorspace : sRGB
> Transfer Function : Rec. 709
> YCbCr/HSV Encoding: Rec. 709
> Quantization : Default (maps to Limited Range)
> Flags :
> ```
>
> User space applications like VLC might show an error message on the
> terminal in that case:
>
> ```
> libv4l2: error set_fmt gave us a different result than try_fmt!
> ```
>
> Depending on the error handling of the user space applications, they
> might display a distorted video, because they use the wrong pixel format
> for decoding the stream.
>
> [Fix]
>
> The Elgato Cam Link 4K responds to the USB video probe
> VS_PROBE_CONTROL/VS_COMMIT_CONTROL with a malformed data structure: The
> second byte contains bFormatIndex (instead of being the second byte of
> bmHint). The first byte is always zero. The third byte is always 1.
>
> The firmware bug was reported to Elgato on 2020-12-01 and it was
> forwarded by the support team to the developers as feature request.
> There is no firmware update available since then. The latest firmware
> for Elgato Cam Link 4K as of 2021-03-23 has MCU 20.02.19 and FPGA 67.
>
> Therefore correct the malformed data structure for this device. The
> change was successfully tested with VLC, OBS, and Chromium using
> different pixel formats (YUYV, NV12, YU12), resolutions (3840x2160,
> 1920x1080), and frame rates (29.970 and 59.940 fps).
>
> [Test Case]
>
> Connect an input device to the Cam Link 4K and try all three pixel
> formats with VLC:
>
> vlc v4l2:///dev/video0 --v4l2-chroma=NV12
> vlc v4l2:///dev/video0 --v4l2-chroma=YU12
>
> [Other Info]
>
> The fix was reviewed and accepted by the subsystem maintainer and will
> be included upstream:
> https://git.linuxtv.org/media_stage.git/commit/?id=4c6e0976295add7f0ed94d276c04a3d6f1ea8f83
>
> Benjamin Drung (1):
> media: uvcvideo: Fix pixel format change for Elgato Cam Link 4K
>
> drivers/media/usb/uvc/uvc_video.c | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
--
-----------
Tim Gardner
Canonical, Inc
More information about the kernel-team
mailing list