Message ID | 1476093601-20057-3-git-send-email-jcaille@gmail.com |
---|---|
State | Superseded |
Headers | show |
On Mon, Oct 10, 2016 at 12:00:01PM +0200, Jean Caillé wrote: > From: Jean Caillé <jean@stupeflix.com> > > --- > libavformat/mov.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index add1812..3e73320 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -268,6 +268,23 @@ static int mov_metadata_loci(MOVContext *c, AVIOContext *pb, unsigned len) > return av_dict_set(&c->fc->metadata, key, buf, 0); > } > > +static int mov_metadata_hmmt(MOVContext *c, AVIOContext *pb, unsigned len) > +{ > + int i, n_hmmt; > + > + if (len < 2) > + return 0; > + if (c->ignore_chapters) > + return 0; > + > + n_hmmt = avio_rb32(pb); > + for (i = 0; i < n_hmmt; i++) { > + int moment_time = avio_rb32(pb); please add a eof check here this loop could otherwise run for a long time eating both time and memory even with a small file [...]
diff --git a/libavformat/mov.c b/libavformat/mov.c index add1812..3e73320 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -268,6 +268,23 @@ static int mov_metadata_loci(MOVContext *c, AVIOContext *pb, unsigned len) return av_dict_set(&c->fc->metadata, key, buf, 0); } +static int mov_metadata_hmmt(MOVContext *c, AVIOContext *pb, unsigned len) +{ + int i, n_hmmt; + + if (len < 2) + return 0; + if (c->ignore_chapters) + return 0; + + n_hmmt = avio_rb32(pb); + for (i = 0; i < n_hmmt; i++) { + int moment_time = avio_rb32(pb); + avpriv_new_chapter(c->fc, i, av_make_q(1, 1000), moment_time, AV_NOPTS_VALUE, NULL); + } + return 0; +} + static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) { char tmp_key[5]; @@ -303,6 +320,8 @@ static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) parse = mov_metadata_gnre; break; case MKTAG( 'h','d','v','d'): key = "hd_video"; parse = mov_metadata_int8_no_padding; break; + case MKTAG( 'H','M','M','T'): + return mov_metadata_hmmt(c, pb, atom.size); case MKTAG( 'k','e','y','w'): key = "keywords"; break; case MKTAG( 'l','d','e','s'): key = "synopsis"; break; case MKTAG( 'l','o','c','i'):
From: Jean Caillé <jean@stupeflix.com> --- libavformat/mov.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)