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

Mats Peterson matsp888 at yahoo.com
Sat Mar 12 14:54:45 CET 2016


On 03/12/2016 02:52 PM, Michael Niedermayer wrote:
> On Sat, Mar 12, 2016 at 02:36:59PM +0100, Mats Peterson wrote:
>> 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?
>
> after this patch snow encoding failed, i run valgrind and saw this
> so there was something wrong, i dont know for sure if it was this
>
>

OK. By the way, are you in the process of applying patch 1 at least?

Mats



More information about the ffmpeg-devel mailing list