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

Michael Niedermayer michael at niedermayer.cc
Sun Sep 11 04:41:38 EEST 2016


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()

> +        return AVERROR(ENOMEM);

the error return leaves the size and array in an inconsistent tstate


> +
> +    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

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 ?

thx
[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Republics decline into democracies and democracies degenerate into
despotisms. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160911/8310549a/attachment.sig>


More information about the ffmpeg-devel mailing list