The syntax is the normal syntax HH:MM:SS used everywhere. av_parse_time can parse both [-]HH:MM:SS[.m...]]] and [-]S+[.m...] syntax for duration. So if mkvmerge outputs 1200.00 secs in duration it would be able to parse that also .
On Fri, Jul 31, 2015 at 3:31 PM, wm4 <nfx...@googlemail.com> wrote: > On Fri, 31 Jul 2015 13:00:02 -0700 > Sasi Inguva <is...@google.com> wrote: > > > Signed-off-by: Sasi Inguva <is...@google.com> > > --- > > libavformat/matroskadec.c | 20 ++++++++++++++++++-- > > 1 file changed, 18 insertions(+), 2 deletions(-) > > > > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > > index 1807cae..03b564e 100644 > > --- a/libavformat/matroskadec.c > > +++ b/libavformat/matroskadec.c > > @@ -41,6 +41,7 @@ > > #include "libavutil/lzo.h" > > #include "libavutil/mathematics.h" > > #include "libavutil/opt.h" > > +#include "libavutil/parseutils.h" > > #include "libavutil/time_internal.h" > > > > #include "libavcodec/bytestream.h" > > @@ -1418,10 +1419,25 @@ static void > matroska_convert_tags(AVFormatContext *s) > > &chapter[j].chapter->metadata, > NULL); > > } else if (tags[i].target.trackuid) { > > MatroskaTrack *track = matroska->tracks.elem; > > - for (j = 0; j < matroska->tracks.nb_elem; j++) > > - if (track[j].uid == tags[i].target.trackuid && > track[j].stream) > > + for (j = 0; j < matroska->tracks.nb_elem; j++) { > > + if (track[j].uid == tags[i].target.trackuid && > track[j].stream) { > > Adding the { and } seems redundant, but personally I don't mind. > > > + MatroskaTag *track_tags = tags[i].tag.elem; > > + int64_t track_duration_ms; > > + for (int ind = 0; ind < tags[i].tag.nb_elem; ++ind) > { > > + if (track_tags[ind].name && > > + !av_strcasecmp(track_tags[ind].name, > "duration") && > > + track_tags[ind].string && > > + (av_parse_time(&track_duration_ms, > track_tags[ind].string, 1) == 0)) { > > Who says the syntax mkvmerge writes and the syntax av_parse_time() will > always be the same? I'm not sure if we should rely on this. > > > + track[j].stream->duration = > av_rescale_q(track_duration_ms, > > + > (AVRational){ 1, 1000000 }, > > + > track[j].stream->time_base); > > + } > > + } > > + > > matroska_convert_tag(s, &tags[i].tag, > > &track[j].stream->metadata, > NULL); > > + } > > + } > > } else { > > matroska_convert_tag(s, &tags[i].tag, &s->metadata, > > tags[i].target.type); > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel