[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