[FFmpeg-trac] #9878(undetermined:new): v4l2 encoder ignores input_format specification
FFmpeg
trac at avcodec.org
Wed Aug 17 03:32:43 EEST 2022
#9878: v4l2 encoder ignores input_format specification
-------------------------------------+-------------------------------------
Reporter: leezu | Type: defect
Status: new | Priority: normal
Component: | Version: git-
undetermined | master
Keywords: v4l2 | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug: With a video capture device providing both compressed
Motion-JPEG and uncompressed YUYV, ffmpeg always chooses YUYV even if
MJPEG is requested.
How to reproduce:
{{{
% ~/Downloads/ffmpeg -v 9 -loglevel 99 -i /dev/video0 -input_format mjpeg
ffmpeg version N-107804-gaa9eabb7a5-https://www.martin-riedl.de Copyright
(c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/home/ffmpegBuild/out --enable-gpl --pkg-config-
flags=--static --extra-version='https://www.martin-riedl.de' --ena
ble-gray --enable-libxml2 --enable-libfreetype --enable-fontconfig
--enable-libbluray --enable-libass --enable-libaom --enable-libopenh264 -
-enable-libsvtav1 --enable-libvpx --enable-libx264 --enable-libx265
--enable-libmp3lame --enable-libopus --enable-libvorbis
libavutil 57. 33.101 / 57. 33.101
libavcodec 59. 42.101 / 59. 42.101
libavformat 59. 30.100 / 59. 30.100
libavdevice 59. 8.101 / 59. 8.101
libavfilter 8. 46.103 / 8. 46.103
libswscale 6. 8.102 / 6. 8.102
libswresample 4. 8.100 / 4. 8.100
libpostproc 56. 7.100 / 56. 7.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument '99'.
Reading option '-i' ... matched as input url with argument '/dev/video0'.
Reading option '-input_format' ... matched as AVOption 'input_format' with
argument 'mjpeg'.
Trailing option(s) found in the command: may be ignored.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input url /dev/video0.
Successfully parsed a group of options.
Opening an input file: /dev/video0.
Probing video4linux2,v4l2 score:99 size:0
[video4linux2,v4l2 @ 0x5d5a711060] fd:3 capabilities:84a00001
[video4linux2,v4l2 @ 0x5d5a711060] Current input_channel: 0, input_name:
Camera 1, input_std: 0
[video4linux2,v4l2 @ 0x5d5a711060] Querying the device for the current
frame size
[video4linux2,v4l2 @ 0x5d5a711060] Setting frame size to 1280x720
[video4linux2,v4l2 @ 0x5d5a711060] The V4L2 driver changed the pixel
format from 0x32315559 to 0x47504A4D
[video4linux2,v4l2 @ 0x5d5a711060] Trying to set codec:rawvideo
pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x5d5a711060] The V4L2 driver changed the pixel
format from 0x32315559 to 0x47504A4D
[video4linux2,v4l2 @ 0x5d5a711060] Trying to set codec:rawvideo
pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x5d5a711060] The V4L2 driver changed the pixel
format from 0x32315659 to 0x47504A4D
[video4linux2,v4l2 @ 0x5d5a711060] Trying to set codec:rawvideo
pix_fmt:yuv422p
[video4linux2,v4l2 @ 0x5d5a711060] The V4L2 driver changed the pixel
format from 0x50323234 to 0x47504A4D
[video4linux2,v4l2 @ 0x5d5a711060] Trying to set codec:rawvideo
pix_fmt:yuyv422
[video4linux2,v4l2 @ 0x5d5a711060] All info found
[video4linux2,v4l2 @ 0x5d5a711060] stream 0: start_time: 639.743 duration:
NOPTS
[video4linux2,v4l2 @ 0x5d5a711060] format: start_time: 639.743 duration:
NOPTS (estimate from bit rate) bitrate=147456 kb/s
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 639.742977, bitrate: 147456 kb/s
Stream #0:0, 1, 1/1000000: Video: rawvideo, 1 reference frame (YUY2 /
0x32595559), yuyv422, 1280x720, 0/1, 147456 kb/s, 10 fps, 10 tbr, 10
00k tbn
}}}
Note that ffmpeg -list_formats all does list the mjpeg:
{{{
% ffmpeg -f video4linux2 -list_formats all -i /dev/video0
ffmpeg version 5.1-2+b1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12 (Debian 12.1.0-7)
configuration: --prefix=/usr --extra-version=2+b1 --toolchain=hardened
--libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-
gnu --arch=arm64 --enable-gpl --disable-stripping --enable-gnutls
--enable-ladspa --enable-libaom --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2
--enable-libdav1d --enable-libflite --enable-libfontconfig --enable-
libfreetype --enable-libfribidi --enable-libglslang --enable-libgme
--enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa
--enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-
libpulse --enable-librabbitmq --enable-librist --enable-librubberband
--enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex
--enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora
--enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx
--enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid
--enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-
omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2
--disable-sndio --enable-pocketsphinx --enable-librsvg --enable-libdc1394
--enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r
--enable-libplacebo --enable-libx264 --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
[video4linux2,v4l2 @ 0x5694e62800] Compressed: mjpeg :
Motion-JPEG : 1280x720 320x240 640x360 640x480
[video4linux2,v4l2 @ 0x5694e62800] Raw : yuyv422 :
YUYV 4:2:2 : 1280x720 320x240 640x360 640x480
/dev/video0: Immediate exit requested
}}}
v4l2-ctl provides further details on supported fps
{{{
% v4l2-ctl --list-formats-ext --device /dev/video0
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
}}}
This bug was observed on a Snapdragon 7c arm64 based system with the
Adreno 618 GPU.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/9878>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list