1. 16 Jun, 2021 4 commits
  2. 11 Jun, 2021 1 commit
    • Benjamin Drung's avatar
      media: uvcvideo: Fix pixel format change for Elgato Cam Link 4K · 4c6e0976
      Benjamin Drung authored
      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.
      
      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).
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarBenjamin Drung <bdrung@posteo.de>
      Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      4c6e0976
  3. 09 Jun, 2021 1 commit
    • Mauro Carvalho Chehab's avatar
      media: dmxdev: change the check for problems allocing secfeed · 3d42c93e
      Mauro Carvalho Chehab authored
      While the logic there is right, it tricks static check analyzers,
      like smatch:
      
      	drivers/media/dvb-core/dmxdev.c:729 dvb_dmxdev_filter_start() error: we previously assumed '*secfeed' could be null (see line 719)
      
      Because the implementation of the filter itself is made via
      a callback, with its real implementation at the
      dvbdmx_allocate_section_feed() inside dvb_demux.c.
      
      So, change the check logic to make it clear that the function
      will not try to use *secfeed == NULL.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      3d42c93e
  4. 08 Jun, 2021 34 commits