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) { + 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)) { + 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); -- 2.5.0.rc2.392.g76e840b _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel