[FFmpeg-devel] [PATCH 2/2] lavf/avienc: Add xxpc entries to index

Mats Peterson matsp888 at yahoo.com
Sat Mar 12 14:36:59 CET 2016


On 03/12/2016 02:26 PM, Mats Peterson wrote:
> On 03/12/2016 12:53 PM, Michael Niedermayer wrote:
>> On Sat, Mar 12, 2016 at 07:14:16AM +0100, Mats Peterson wrote:
>>> Here's an interesting one. Windows Media Player won't make any palette
>>> changes without the xxpc chunks beeing indexed.
>>>
>>> Fixing the logic for reading and seeking with xxpc chunks in the
>>> demuxer  is a future task. Now the muxing of video with xxpc chunks
>>> works properly at least.
>>>
>>> Try playing the resulting test.avi file from the command line below
>>> with Windows Media Player, with and without this patch.
>>>
>>> ffmpeg -i TOON.AVI -c:v copy -c:a copy test.avi
>>>
>>> Mats
>>>
>>> --
>>> Mats Peterson
>>> http://matsp888.no-ip.org/~mats/
>>
>>>   libavformat/avi.h            |    6 +++-
>>>   libavformat/avienc.c         |   56
>>> +++++++++++++++++++++++++++++++++----------
>>>   tests/ref/lavf-fate/avi_cram |    4 +--
>>>   3 files changed, 51 insertions(+), 15 deletions(-)
>>> 2cf2565f9e258ee1a2bfcb83e4f30ecb1c13296d
>>> 0002-Add-xxpc-entries-to-index.patch
>>>  From 50f6c1dd38f503e77d53e0e6cdbadfe511282126 Mon Sep 17 00:00:00 2001
>>> From: Mats Peterson <matsp888 at yahoo.com>
>>> Date: Sat, 12 Mar 2016 07:00:33 +0100
>>> Subject: [PATCH 2/2] lavf/avienc: Add xxpc entries to index
>>>
>>> ---
>>>   libavformat/avi.h            |    6 ++++-
>>>   libavformat/avienc.c         |   56
>>> +++++++++++++++++++++++++++++++++---------
>>>   tests/ref/lavf-fate/avi_cram |    4 +--
>>>   3 files changed, 51 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/libavformat/avi.h b/libavformat/avi.h
>>> index 34da76f..af21f2c 100644
>>> --- a/libavformat/avi.h
>>> +++ b/libavformat/avi.h
>>> @@ -32,7 +32,11 @@
>>>   #define AVI_MASTER_INDEX_SIZE   256
>>>   #define AVI_MAX_STREAM_COUNT    100
>>>
>>> +/* stream header flags */
>>> +#define AVISF_VIDEO_PALCHANGES  0x00010000
>>> +
>>>   /* index flags */
>>> -#define AVIIF_INDEX             0x10
>>> +#define AVIIF_INDEX             0x00000010
>>> +#define AVIIF_NO_TIME           0x00000100
>>>
>>>   #endif /* AVFORMAT_AVI_H */
>>> diff --git a/libavformat/avienc.c b/libavformat/avienc.c
>>> index ad50379..b731bc2 100644
>>> --- a/libavformat/avienc.c
>>> +++ b/libavformat/avienc.c
>>> @@ -44,13 +44,14 @@
>>>    */
>>>
>>>   typedef struct AVIIentry {
>>> -    unsigned int flags, pos, len;
>>> +    char tag[5];
>>
>> the tag should be 4 bytes
>> 5 is ugly, it requires padding and bloats the structure with a zero
>> byte
>>
>
> OK.
>
>>
>>> +    unsigned int flags;
>>> +    unsigned int pos;
>>> +    unsigned int len;
>>>   } AVIIentry;
>>>
>>>   #define AVI_INDEX_CLUSTER_SIZE 16384
>>>
>>> -#define AVISF_VIDEO_PALCHANGES 0x00010000
>>> -
>>>   typedef struct AVIIndex {
>>>       int64_t     indx_start;
>>>       int64_t     audio_strm_offset;
>>
>>> @@ -612,9 +613,13 @@ static int avi_write_idx1(AVFormatContext *s)
>>>               }
>>>               if (!empty) {
>>>                   avist = s->streams[stream_id]->priv_data;
>>> -                avi_stream2fourcc(tag, stream_id,
>>> +                if (*ie->tag)
>>
>> ==18406== Conditional jump or move depends on uninitialised value(s)
>> ==18406==    at 0x598D80: avi_write_idx1 (avienc.c:616)
>> ==18406==    by 0x599D6D: avi_write_trailer (avienc.c:859)
>> ==18406==    by 0x64A234: av_write_trailer (mux.c:1124)
>> ==18406==    by 0x43A729: transcode (ffmpeg.c:4173)
>> ==18406==    by 0x43ACE3: main (ffmpeg.c:4334)
>>
>
> OK.


It's not really uninitalised, is it? Since it isn't used by anything but 
my own code, it's all zero bytes, right?

Mats



More information about the ffmpeg-devel mailing list