[FFmpeg-devel] [PATCH 1/3] lavf/riffenc: Improve spec compliance

Mats Peterson matsp888 at yahoo.com
Fri Mar 11 14:23:17 CET 2016


Mats Peterson <matsp888-at-yahoo.com at ffmpeg.org> skrev: (11 mars 2016 14:12:56 CET)
>Mats Peterson <matsp888-at-yahoo.com at ffmpeg.org> skrev: (11 mars 2016
>14:06:19 CET)
>>Mats Peterson <matsp888-at-yahoo.com at ffmpeg.org> skrev: (11 mars 2016
>>13:55:20 CET)
>>>Michael Niedermayer <michael at niedermayer.cc> skrev: (11 mars 2016
>>>13:49:32 CET)
>>>>On Fri, Mar 11, 2016 at 01:28:47PM +0100, Mats Peterson wrote:
>>>>> On 03/11/2016 01:25 PM, Mats Peterson wrote:
>>>>> >On 03/11/2016 01:14 PM, Michael Niedermayer wrote:
>>>>> >>On Fri, Mar 11, 2016 at 05:17:18AM +0100, Mats Peterson wrote:
>>>>> >>>On 03/11/2016 05:10 AM, Mats Peterson wrote:
>>>>> >>>>Forget patch 2/3 and 3/3 from the old patch set.
>>>>> >>>>
>>>>> >>>> From the Microsoft documentation for BITMAPINFOHEADER at
>>>>>
>>>>>>>>https://msdn.microsoft.com/en-us/library/windows/desktop/dd318229%28v=vs.85%29.aspx:
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>"biSize: Specifies the number of bytes required by the
>>>structure.
>>>>This
>>>>> >>>>value does not include the size of the color table or the size
>>>of
>>>>the
>>>>> >>>>color masks, if they are appended to the end of structure."
>>>>> >>>>
>>>>> >>>>So, biSize is always 40. Also, Windows Media Player won't
>>detect
>>>>video
>>>>> >>>>encoded with Microsoft Video 1 in 8 bpp mode if this value is
>>>>anything
>>>>> >>>>else than 40. I don't know about other codecs, they probably
>>>>work.
>>>>> >>>>Anyway, we should stick with the specs, and not include the
>>>>palette
>>>>> >>>>size
>>>>> >>>>in that field.
>>>>> >>>>
>>>>> >>>>Regarding the biClrUsed field, I'm setting it to 1 <<
>>>>> >>>>bits_per_coded_sample if palettized video, since setting it to
>>0
>>>>is
>>>>> >>>>another case where it won't work with Windows Media Player and
>>>>> >>>>Microsoft
>>>>> >>>>Video 1 in 8 bpp mode.
>>>>> >>>>
>>>>> >>>>Mats
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>
>>>>> >>>Once, again, HuffYUV has its own variant of BITMAPINFOHEADER
>>that
>>>>> >>>*does* include the size of the Huffman tables in biSize. That's
>>>>the
>>>>> >>>only exception as far as I know.
>>>>> >>
>>>>> >>is huffyuv really the exception ? and not raw rgb or palettes ?
>>>>> >>
>>>>> >>asv1 and asv2 do not have 40 there
>>>>
>>>>> >>which codec with a non-palette global header puts 40 there ?
>>>>
>>>>[...]
>>>>
>>>>> As I said before, Microsoft Video 1 in 8-bit mode and RLE4/RLE8
>>>>> won't even display in Windows Media Player if this value is
>>anything
>>>>> else than 40.
>>>>
>>>>msv1 / RLE4/8 doesnt have a "Non palette global header"
>>>>
>>>>
>>>>[...]
>>>
>>>That's correct. Sorry. Anyway, the only case I know of is HuffYUV
>with
>>>its special variant of BITMAPINFOHEADER that includes the Huffman
>>>tables. Is there stated anywhere in the ASUS specs that the size of
>>the
>>>extra data following the BITMAPINFOHEADER should be included in
>>biSize?
>>>If not, it should be 40.
>>>
>>>Mats
>>>-- 
>>>Mats Peterson
>>>http://matsp888.no-ip.org/~mats/
>>>_______________________________________________
>>>ffmpeg-devel mailing list
>>>ffmpeg-devel at ffmpeg.org
>>>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>>Those asv1/asv2 files play just fine with a biSize of 40, at that.
>>
>>Mats
>>-- 
>>Mats Peterson
>>http://matsp888.no-ip.org/~mats/
>>_______________________________________________
>>ffmpeg-devel mailing list
>>ffmpeg-devel at ffmpeg.org
>>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>Should we perhaps "tighten" the "specs" (I saw that you have written
>some documentation on asv1/asv2 in FFmpeg), and include those extra
>bytes in biSize? I suppose this is somewhat of a proprietary FFmpeg
>invention.
>
>Mats
>-- 
>Mats Peterson
>http://matsp888.no-ip.org/~mats/
>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel at ffmpeg.org
>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

In my book it's totally unnecessary, though, since we already have the size of the global asv1/asv2 header by subtracting the size of the BITMAPINFOHEADER from the strf chunk size. And the files play fine with a biSize of 40.

Mats
-- 
Mats Peterson
http://matsp888.no-ip.org/~mats/


More information about the ffmpeg-devel mailing list