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

Mats Peterson matsp888 at yahoo.com
Fri Mar 11 22:50:42 CET 2016


Mats Peterson <matsp888-at-yahoo.com at ffmpeg.org> skrev: (11 mars 2016 22:26:43 CET)
>On 03/11/2016 06:45 PM, Michael Niedermayer wrote:
>> On Fri, Mar 11, 2016 at 03:31:55PM +0100, Mats Peterson wrote:
>>> On 03/11/2016 03:27 PM, Mats Peterson wrote:
>>>> On 03/11/2016 03:21 PM, Mats Peterson wrote:
>>>>> On 03/11/2016 03:13 PM, Mats Peterson wrote:
>>>>>> Michael Niedermayer <michael at niedermayer.cc> skrev: (11 mars 2016
>>>>>> 15:05:49 CET)
>>>>>>> On Fri, Mar 11, 2016 at 02:12:56PM +0100, Mats Peterson wrote:
>>>>>>>> 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.
>>>>>>>
>>>>>>> we didnt invent ASUS video 1 and 2 nor huffyuv
>>>>>>>
>>>>>>> which codec with a non-palette global header puts 40 there ?
>>>>>>>
>>>>>>> the ms specs just says the color table & mask isnt part of
>biSize
>>>>>>> it doesnt say the global header isnt, or iam looking at the
>wrong text
>>>>>>> or location in the text/spec
>>>>>>>
>>>>>>> [...]
>>>>>>
>>>>>> Again, only one I know of is HuffYUV, and the specs define a
>custom
>>>>>> BITMAPINFOHEADER that includes the Huffman tables. The "global
>data"
>>>>>> in ASUS is only 8 bytes. Do they regard the BITMAPINFOHEADER as
>being
>>>>>> part of this global data as well? And should we? A
>BITMAPINFOHEADER is
>>>>>> a BITMAPINFOHEADER is a BITMAPINFOHEADER...
>>>>>>
>>>>>> Mats
>>>>>>
>>>>>
>>>>> Do you have a sample file with asv1/asv2 *created by ASUS* where
>biSize
>>>>> isn't 40?
>>>>>
>>>>> Mts
>>>>>
>>>>
>>>> I got the asv1/asv2 samples from the MPlayer sample directory. Are
>they
>>> >from ASUS? They all use a biSize of 48.
>>>>
>>>> Mats
>>>>
>>>
>>> Nope. Written with libavformat.
>>
>> why do you think they are written by libavformat ?
>>
>> i see:
>> "C:\PROGRAM FILES\ASUS\ASUS LIVE\ASUSLIVE.EXE -AVICAP32- ASUS Video
>Capture Driver, Version:  3.8.2.2"
>>
>> in asv2_320x240_3.avi
>>
>>
>
>Yes, you are right. I was looking at some other files. Sorry. So how do
>
>we proceed from here? Should we make an exception to the "40-byte rule"
>
>for HuffYUV, ffvhuff, asv1 and asv2 in the meantime?
>
>Mats
>
>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel at ffmpeg.org
>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

We can always add others as we discover them (not that I think they're abundant).
-- 
Mats Peterson
http://matsp888.no-ip.org/~mats/


More information about the ffmpeg-devel mailing list