Opened 8 years ago
Last modified 4 years ago
#6279 open enhancement
can't request rgb24 (uvc over dshow, unknown compression type)
Reported by: | Djfe | Owned by: | |
---|---|---|---|
Priority: | wish | Component: | avdevice |
Version: | git-master | Keywords: | dshow |
Cc: | Diederick Niehorster | Blocked By: | |
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
ffmpeg doesn't seem to know some of the color space id's that dshow uses.
In particular the rgb24 color space:
"[dshow @ 0000000000756320] unknown compression type 0xE436EB7D min s=1920x1080 fps=15 max s=1920x1080 fps=59.9999"
(I provided a log output, containing more similar lines)
A quick google search for the id (0xE436EB7D) in question reveals, that it represents rgb24:
https://github.com/opencv/opencv/blob/master/modules/videoio/test/test_fourcc.cpp#L81
I bet ffmpeg doesn't know the other RGB GUIDs either, but I can't verify it, since my device only supports outputting in those two color spaces.
I'm unsure if it is allowed to simply take the information from the linked opencv file (regarding the opencv license (vs LGPL)) though.
But it would be nice if other GUIDs apart from rgb could be "imported" into ffmpeg's knowledge as well.
But now to the interesting part:
is it enough if ffmpeg knows, that the data is of color space rgb24, or not?
until someone finds the time: I'm looking forward to rgb24 support for uvc over dshow :) (maybe that will give you some motivation )
The reason being, that I'm recording to qtrle (lossless, but only rgb color space).
Asking the grabber to give me rgb avoids unneccessary color space conversion on both sides.
PS:
I'm unsure if the type of this bug report is a defect or an enhancement,
feel free to correct it, if you think it isn't a defect ;)
Attachments (2)
Change History (8)
by , 8 years ago
Attachment: | ffmpeg-20170330-204303.log added |
---|
comment:1 by , 8 years ago
Component: | ffmpeg → avdevice |
---|---|
Keywords: | dshow added |
Priority: | normal → wish |
Type: | defect → enhancement |
Please test attached patch.
by , 8 years ago
Attachment: | patchdshowguid.diff added |
---|
comment:2 by , 8 years ago
Thx for your quick answer, I'll do that.
I only have to setup an environment for compiling ffmpeg on windows now
so I'll reply in a few hours/tomorrow when I'm done.
comment:3 by , 5 years ago
now that I finally got around to compiling ffmpeg for windows:
so the detection works fine with your patch, in addition to yuyv422 it now lists the second half of all entries as "rgb24"
nice
(for some reason all entries seem to be duplicated, but maybe there is a difference, that isn't visible here)
ffmpeg -list_options true -f dshow -i video="USB Capture HDMI" ffmpeg version N-94089-gbc3306fd5b Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7.3-win32 (GCC) 20180312 configuration: --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- libavutil 56. 29.100 / 56. 29.100 libavcodec 58. 53.100 / 58. 53.100 libavformat 58. 28.100 / 58. 28.100 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 55.100 / 7. 55.100 libswscale 5. 4.101 / 5. 4.101 libswresample 3. 4.100 / 3. 4.100 [dshow @ 01f53400] DirectShow video device options (from video devices) [dshow @ 01f53400] Pin "Capture" (alternative pin name "0") [dshow @ 01f53400] pixel_format=yuyv422 min s=1920x1080 fps=25 max s=1920x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1920x1080 fps=25 max s=1920x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=640x360 fps=25 max s=640x360 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=640x360 fps=25 max s=640x360 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=720x480 fps=25 max s=720x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=720x480 fps=25 max s=720x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=720x576 fps=25 max s=720x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=720x576 fps=25 max s=720x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=768x576 fps=25 max s=768x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=768x576 fps=25 max s=768x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=800x600 fps=25 max s=800x600 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=800x600 fps=25 max s=800x600 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=856x480 fps=25 max s=856x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=856x480 fps=25 max s=856x480 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=960x540 fps=25 max s=960x540 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=960x540 fps=25 max s=960x540 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1024x576 fps=25 max s=1024x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1024x576 fps=25 max s=1024x576 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1024x768 fps=25 max s=1024x768 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1024x768 fps=25 max s=1024x768 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x720 fps=25 max s=1280x720 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x720 fps=25 max s=1280x720 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x800 fps=25 max s=1280x800 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x800 fps=25 max s=1280x800 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x960 fps=25 max s=1280x960 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x960 fps=25 max s=1280x960 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x1024 fps=25 max s=1280x1024 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1280x1024 fps=25 max s=1280x1024 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1368x768 fps=25 max s=1368x768 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1368x768 fps=25 max s=1368x768 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1440x900 fps=25 max s=1440x900 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1440x900 fps=25 max s=1440x900 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1600x1200 fps=25 max s=1600x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1600x1200 fps=25 max s=1600x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1680x1050 fps=25 max s=1680x1050 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1680x1050 fps=25 max s=1680x1050 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1920x1200 fps=25 max s=1920x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=1920x1200 fps=25 max s=1920x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=2048x1080 fps=25 max s=2048x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=yuyv422 min s=2048x1080 fps=25 max s=2048x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1920x1080 fps=25 max s=1920x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1920x1080 fps=25 max s=1920x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=640x360 fps=25 max s=640x360 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=640x360 fps=25 max s=640x360 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=640x480 fps=25 max s=640x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=640x480 fps=25 max s=640x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=720x480 fps=25 max s=720x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=720x480 fps=25 max s=720x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=720x576 fps=25 max s=720x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=720x576 fps=25 max s=720x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=768x576 fps=25 max s=768x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=768x576 fps=25 max s=768x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=800x600 fps=25 max s=800x600 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=800x600 fps=25 max s=800x600 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=856x480 fps=25 max s=856x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=856x480 fps=25 max s=856x480 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=960x540 fps=25 max s=960x540 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=960x540 fps=25 max s=960x540 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1024x576 fps=25 max s=1024x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1024x576 fps=25 max s=1024x576 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1024x768 fps=25 max s=1024x768 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1024x768 fps=25 max s=1024x768 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x720 fps=25 max s=1280x720 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x720 fps=25 max s=1280x720 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x800 fps=25 max s=1280x800 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x800 fps=25 max s=1280x800 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x960 fps=25 max s=1280x960 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x960 fps=25 max s=1280x960 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x1024 fps=25 max s=1280x1024 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1280x1024 fps=25 max s=1280x1024 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1368x768 fps=25 max s=1368x768 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1368x768 fps=25 max s=1368x768 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1440x900 fps=25 max s=1440x900 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1440x900 fps=25 max s=1440x900 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1600x1200 fps=25 max s=1600x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1600x1200 fps=25 max s=1600x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1680x1050 fps=25 max s=1680x1050 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1680x1050 fps=25 max s=1680x1050 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1920x1200 fps=25 max s=1920x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=1920x1200 fps=25 max s=1920x1200 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=2048x1080 fps=25 max s=2048x1080 fps=59.9999 [dshow @ 01f53400] pixel_format=rgb24 min s=2048x1080 fps=25 max s=2048x1080 fps=59.9999 video=USB Capture HDMI: Immediate exit requested
But I can't save the rawvideo, yet. It shows "[125][235]6[228]" instead of RGB and errors "Invalid pixel format."
ffmpeg -f dshow -video_size 1280x720 -framerate 25 -pixel_format rgb24 -i video="USB Capture HDMI" -c:v qtrle test.mov ffmpeg version N-94089-gbc3306fd5b Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7.3-win32 (GCC) 20180312 configuration: --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- libavutil 56. 29.100 / 56. 29.100 libavcodec 58. 53.100 / 58. 53.100 libavformat 58. 28.100 / 58. 28.100 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 55.100 / 7. 55.100 libswscale 5. 4.101 / 5. 4.101 libswresample 3. 4.100 / 3. 4.100 [rawvideo @ 022bedc0] Invalid pixel format. Input #0, dshow, from 'video=USB Capture HDMI': Duration: N/A, start: 751073.323000, bitrate: N/A Stream #0:0: Video: rawvideo ([125][235]6[228] / 0xE436EB7D), none, 1280x720, 25 fps, 25 tbr, 10000k tbn, 10000k tbc [rawvideo @ 01f52580] Invalid pixel format. Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> qtrle (native)) Error while opening decoder for input stream #0:0 : Invalid argument
yuyv422 still works fine (yes I'm saving as rgb here, but that was only as a test to see if everything still works as expected, which it does)
ffmpeg -f dshow -video_size 1280x720 -framerate 25 -pixel_format yuyv422 -i video="USB Capture HDMI" -c:v qtrle test.mov ffmpeg version N-94089-gbc3306fd5b Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7.3-win32 (GCC) 20180312 configuration: --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- libavutil 56. 29.100 / 56. 29.100 libavcodec 58. 53.100 / 58. 53.100 libavformat 58. 28.100 / 58. 28.100 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 55.100 / 7. 55.100 libswscale 5. 4.101 / 5. 4.101 libswresample 3. 4.100 / 3. 4.100 Input #0, dshow, from 'video=USB Capture HDMI': Duration: N/A, start: 751105.511000, bitrate: N/A Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 25 fps, 25 tbr, 10000k tbn, 10000k tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> qtrle (native)) Press [q] to stop, [?] for help Output #0, mov, to 'test.mov': Metadata: encoder : Lavf58.28.100 Stream #0:0: Video: qtrle (rle / 0x20656C72), rgb24, 1280x720, q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc Metadata: encoder : Lavc58.53.100 qtrle frame= 67 fps= 25 q=-0.0 Lsize= 5244kB time=00:00:02.64 bitrate=16271.0kbits/s dup=13 drop=0 speed=0.997x video:5243kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.019857%
comment:4 by , 5 years ago
and now I forgot to mention, that I had to modify your patch diff to get it running:
diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index f2453e6..a23b1d9 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -51,6 +51,14 @@ static enum AVPixelFormat dshow_pixfmt(DWORD biCompression, WORD biBitCount) return AV_PIX_FMT_0RGB32; } + case 0xe436eb7b: + return AV_PIX_FMT_RGB565; + case 0xe436eb7c: + return AV_PIX_FMT_RGB555; + case 0xe436eb7d: + return AV_PIX_FMT_RGB24; + case 0xe436eb7e: + return AV_PIX_FMT_0RGB32; } return avpriv_find_pix_fmt(avpriv_get_raw_pix_fmt_tags(), biCompression); // all others }
I needed to move one of the curly brackets below the new cases, without that the cases were outside of the outer switch statement (variable: biCompression).
comment:5 by , 4 years ago
Cc: | added |
---|
comment:6 by , 4 years ago
Status: | new → open |
---|
This is a strange problem. Why avpriv_find_pix_fmt() does not find it? Like it does for https://trac.ffmpeg.org/ticket/8454#comment:6 as the functions searches through those.
ffmpeg report log; device: Magewell USB Capture HDMI (it does HDMI -> USB 3.0 -> UVC)