[FFmpeg-devel] [RFC] WC3 decoder without AVPaletteControl

Baptiste Coudurier baptiste.coudurier
Wed Apr 15 20:49:54 CEST 2009

On 4/15/2009 11:35 AM, Michael Niedermayer wrote:
> On Wed, Apr 15, 2009 at 10:51:22AM -0700, Baptiste Coudurier wrote:
>> On 4/15/2009 10:33 AM, Michael Niedermayer wrote:
>>> On Wed, Apr 15, 2009 at 10:22:26AM -0700, Baptiste Coudurier wrote:
>>>> Hi,
>>>> On 4/11/2009 3:19 PM, Reimar D?ffinger wrote:
>>>>> Hello,
>>>>> attached patch implements this.
>>>>> It is a bit ugly because it adds a lot of seeking to the demuxer, but I
>>>>> think for such a fringe format there is no point in extra work for avoiding it.
>>>>> The patch also adds two helper functions, one to increase the size of a
>>>>> packet and one that appends data read from a file to a possibly already
>>>>> filled packet.
>>>>> I expect that there will be more that a few bugs still, e.g. while the
>>>>> video looks visually ok in ffplay the FATE regressions do not match at
>>>>> all.
>>>> Well it seems that palette could be stored in extradata in it's read in
>>>> wv3_read_header, a way to pass palette change information through
>>>> AVPacket would be needed.
>>>> Also AVPacket could have ->palette_data field which seems a lot cleaner
>>>> to me and Ronald.
>>> palette_data would be a nightmare in pretty much every aspect
>>> first many formats allow multiple palette chunks to update a palette
>>> for a frame. Yes AVI too which i had forgotten, it too can update
>>> 2 entries in a palette through 2 pc chunks that each changes just 1
>>> entry.
>> Please enumerate the formats. State exactly what the problem is.
> i think i did
>> Doesn't avi use bmp header ? If so palette -> extradata.
> if you dont belive me you can read the source, look at sample files
> (like CIMOVI01.avi) or the avi spec
>>> second, muxers that do not support such palettes (mov/mp4/asf?/rm/mkv/nut/...)
>>> must somehow merge them and this should really have been done in the demuxer
>>> already.
>> I'm not sure about this, in _any_ case -vcodec copy will cause problems
>> since you have merged the palette and the data in the packet.
> -vcodec copy will not cause problems if muxers and demuxers implement the
> API correctly, this is true for any not to crappy API.

Parsing packet data is annoying in any case and IMHO it will only
produces clutter like the AVMedatata language crap, code has proven it.

>> If the muxer can handle palette seperatly (mov does) it can create
>> multiple stsd with correct palette information. It avoids parsing
>> palette in the packet which is _really_ ugly.
> the first sample file i picked has
> 87 palette chunks and a duration of 7.8 seconds (at 12fps)
> are you sure that 3600*30 stsd chunks in mov will work?

Well it will work for sure. It's certainly not efficient.

>>> third its another field that bloats small AVPackets, another field that
>>> must be handled explicitlyin every user application that does not use
>>> AVPackets natively
>> And modifying demuxer require updating every decoder.
> so would they if it was in AVPacket->palette

Well, it seems that storing palette in AVFormatContext and let the
application updating AVCodecContext won't need decoders to be changed.

>> AVPacket has a useless ->priv flag already it seems. Adding a field is
>> _not_ a problem.
>> There is still the possibility to put in in AVFormatContext.
> no that is not, we try to fix the race condition that is caused by
> seperating the palette data from packets

IIRC the race condition happens because demuxer sets palette to
AVCodecContext _directly_.

Storing it in AVFormatContext should avoid this race, or is there
something I'm forgetting ?

Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no
FFmpeg maintainer                                  http://www.ffmpeg.org

More information about the ffmpeg-devel mailing list