Signed-off-by: Sasi Inguva <[email protected]>
---
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
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel