[FFmpeg-trac] #10418(avdevice:new): DirectShow, wrong pixel format
FFmpeg
trac at avcodec.org
Thu Jun 15 15:49:21 EEST 2023
#10418: DirectShow, wrong pixel format
--------------------------------------+------------------------------------
Reporter: Michael Koch | Owner: (none)
Type: defect | Status: new
Priority: normal | Component: avdevice
Version: git-master | Resolution:
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
--------------------------------------+------------------------------------
Description changed by Michael Koch:
Old description:
> There is a problem with a ASI178MM (monochrome) camera and its
> DirectShow driver. When I check the options with this command
>
> ffmpeg -list_options 1 -f dshow -i video="ASI178MM Camera (ZWO Design)"
>
> I get this output:
>
> [dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=3096x2080
> fps=1.0842e-12 max s=3096x2080 fps=30
> [dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=1280x960
> fps=1.0842e-12 max s=1280x960 fps=30
> [dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=1280x800
> fps=1.0842e-12 max s=1280x800 fps=30
> ... (there are more sizes listed, all with the same pixel format rgb8)
>
> When FFmpeg gets a frame from the camera, the detected pixel format is
> rgb8 (as defined in FFmpeg: 2 bits red, 3 bits green, 3 bits blue). Of
> course that's wrong, because it's a monochrome camera and the data is
> 8-bit gray.
>
> My first idea was that it must be a bug in the DirectShow driver. The
> data is obviously correct 8-bit gray (I did verify that), but it's
> incorrectly labeled as "rgb8" instead of "gray".
>
> When you look at the specifications of DirectShow
>
> https://learn.microsoft.com/en-us/windows/win32/directshow/uncompressed-
> rgb-video-subtypes
>
> you see that there exists no "gray" pixel format, and "RGB8" is a
> different pixel format described as "RGB, 8 bpp, palettized". It seems an
> uncompressed 8-bit gray frame must be encoded with "RGB8" pixel format,
> together with a palette which contains 256 levels of gray.
>
> "RGB8" in DirectShow should become "pal8" or "gray" in FFmpeg, and not
> "rgb8".
>
> By the way, in line 64 of dshow.c there is a comment that this pixel
> format is untested. So this might be the first test.
New description:
There is a problem with a ASI178MM (monochrome) camera and its DirectShow
driver. When I check the options with this command
ffmpeg -list_options 1 -f dshow -i video="ASI178MM Camera (ZWO Design)"
I get this output:
[dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=3096x2080
fps=1.0842e-12 max s=3096x2080 fps=30
[dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=1280x960
fps=1.0842e-12 max s=1280x960 fps=30
[dshow @ 00000203f5b315c0] pixel_format=rgb8 min s=1280x800
fps=1.0842e-12 max s=1280x800 fps=30
... (there are more sizes listed, all with the same pixel format rgb8)
When FFmpeg gets a frame from the camera, the detected pixel format is
rgb8 (as defined in FFmpeg: 2 bits red, 3 bits green, 3 bits blue). Of
course that's wrong, because it's a monochrome camera and the data is
8-bit gray.
My first idea was that it must be a bug in the DirectShow driver. The data
is obviously correct 8-bit gray (I did verify that), but it's incorrectly
labeled as "rgb8" instead of "gray".
When you look at the specifications of DirectShow
https://learn.microsoft.com/en-us/windows/win32/directshow/uncompressed-
rgb-video-subtypes
you see that there exists no "gray" pixel format, and "RGB8" is a
different pixel format described as "RGB, 8 bpp, palettized". It seems an
uncompressed 8-bit gray frame must be encoded with "RGB8" pixel format,
together with a palette which contains 256 levels of gray.
"RGB8" in DirectShow should become "pal8" or "gray" in FFmpeg, and not
"rgb8".
By the way, in line 64 of dshow.c there is a comment that this pixel
format is untested. So this might be the first test.
--
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10418#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list