aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/mov.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2016-06-25 11:33:46 +0200
committerPaul B Mahol <onemda@gmail.com>2016-06-27 10:27:25 +0200
commitd693392886b8454c818e384c816b9ede53c570d8 (patch)
treea909615b06a988485fea5629b559308ff94ea95b /libavformat/mov.c
parentb18d6c58000beed872d6bb1fe7d0fbe75ae26aef (diff)
downloadffmpeg-d693392886b8454c818e384c816b9ede53c570d8.tar.gz
avformat/mov: parse rtmd track timecode
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r--libavformat/mov.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index c7caf80b11..973115ab89 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4676,6 +4676,31 @@ static int parse_timecode_in_framenum_format(AVFormatContext *s, AVStream *st,
return 0;
}
+static int mov_read_rtmd_track(AVFormatContext *s, AVStream *st)
+{
+ MOVStreamContext *sc = st->priv_data;
+ char buf[AV_TIMECODE_STR_SIZE];
+ int64_t cur_pos = avio_tell(sc->pb);
+ int hh, mm, ss, ff, drop;
+
+ if (!st->nb_index_entries)
+ return -1;
+
+ avio_seek(sc->pb, st->index_entries->pos, SEEK_SET);
+ avio_skip(s->pb, 13);
+ hh = avio_r8(s->pb);
+ mm = avio_r8(s->pb);
+ ss = avio_r8(s->pb);
+ drop = avio_r8(s->pb);
+ ff = avio_r8(s->pb);
+ snprintf(buf, AV_TIMECODE_STR_SIZE, "%02d:%02d:%02d%c%02d",
+ hh, mm, ss, drop ? ';' : ':', ff);
+ av_dict_set(&st->metadata, "timecode", buf, 0);
+
+ avio_seek(sc->pb, cur_pos, SEEK_SET);
+ return 0;
+}
+
static int mov_read_timecode_track(AVFormatContext *s, AVStream *st)
{
MOVStreamContext *sc = st->priv_data;
@@ -4954,8 +4979,11 @@ static int mov_read_header(AVFormatContext *s)
if (mov->chapter_track > 0 && !mov->ignore_chapters)
mov_read_chapters(s);
for (i = 0; i < s->nb_streams; i++)
- if (s->streams[i]->codecpar->codec_tag == AV_RL32("tmcd"))
+ if (s->streams[i]->codecpar->codec_tag == AV_RL32("tmcd")) {
mov_read_timecode_track(s, s->streams[i]);
+ } else if (s->streams[i]->codecpar->codec_tag == AV_RL32("rtmd")) {
+ mov_read_rtmd_track(s, s->streams[i]);
+ }
}
/* copy timecode metadata from tmcd tracks to the related video streams */