[FFmpeg-devel] [PATCH 2/3] lavf/mov: improve `tref/chap` chapter handling

Rodger Combs rodger.combs at gmail.com
Tue Sep 13 03:25:34 EEST 2016


> On Sep 10, 2016, at 20:41, Michael Niedermayer <michael at niedermayer.cc> wrote:
> 
> On Fri, Sep 09, 2016 at 09:07:31PM -0500, Rodger Combs wrote:
>> 3 parts:
>> - Supports multiple chapter streams
>> - Exports regular text chapter streams as opaque data. This prevents consumers
>>  from showing chapters as if they were regular subtitle streams.
>> - Exports video chapter streams as thumbnails, and provides the first one as
>>  an attached_pic.
>> ---
>> libavformat/isom.h |  3 ++-
>> libavformat/mov.c  | 52 +++++++++++++++++++++++++++++++++++++++++++++-------
>> 2 files changed, 47 insertions(+), 8 deletions(-)
>> 
>> diff --git a/libavformat/isom.h b/libavformat/isom.h
>> index 2246fed..9038057 100644
>> --- a/libavformat/isom.h
>> +++ b/libavformat/isom.h
>> @@ -210,7 +210,8 @@ typedef struct MOVContext {
>>     unsigned trex_count;
>>     int itunes_metadata;  ///< metadata are itunes style
>>     int handbrake_version;
>> -    int chapter_track;
>> +    int *chapter_tracks;
>> +    unsigned int nb_chapter_tracks;
>>     int use_absolute_path;
>>     int ignore_editlist;
>>     int ignore_chapters;
>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>> index 6e80b93..22ca809 100644
>> --- a/libavformat/mov.c
>> +++ b/libavformat/mov.c
>> @@ -3574,7 +3574,18 @@ static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>> 
>> static int mov_read_chap(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>> {
>> -    c->chapter_track = avio_rb32(pb);
>> +    unsigned i, num;
>> +    av_free(c->chapter_tracks);
>> +
>> +    num = atom.size / 4;
>> +    if (!(c->chapter_tracks = av_malloc(num * 4)))
> 
> av_malloc_array()

Done

> 
>> +        return AVERROR(ENOMEM);
> 
> the error return leaves the size and array in an inconsistent tstate

Fixed

> 
> 
>> +
>> +    c->nb_chapter_tracks = num;
>> +
> 
>> +    for (i = 0; i < num; i++)
>> +        c->chapter_tracks[i] = avio_rb32(pb);
> 
> missing eof check
> reading 16gb without checking is not a good idea, it could waste alot
> of time

Added

> 
> this patch also appears to result in missing codec parameters(pix fmt)
> and ffmpeg failing to transcode it
> should i upload a file that causes this ?

Would appreciate one, yeah

> 
> thx
> [...]
> -- 
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
> 
> Republics decline into democracies and democracies degenerate into
> despotisms. -- Aristotle
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel



More information about the ffmpeg-devel mailing list