[FFmpeg-cvslog] libavformat/mov.c: Handle timecode from tmcd atom in counter mode

Jon Morley git at videolan.org
Fri Jan 23 14:13:51 CET 2015


ffmpeg | branch: master | Jon Morley <jon at tweaksoftware.com> | Thu Jan 22 23:04:24 2015 -0800| [47372caac507c4c4fbef57e32233a3a5e1823f68] | committer: Michael Niedermayer

libavformat/mov.c: Handle timecode from tmcd atom in counter mode

When the timecode value is in counter mode then it is important to use
the timescale and frameduration to calculate the timecode fps.

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=47372caac507c4c4fbef57e32233a3a5e1823f68
---

 libavformat/mov.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6851947..ee45aa5 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1658,6 +1658,13 @@ static int mov_parse_stsd_data(MOVContext *c, AVIOContext *pb,
                 st->codec->flags2 |= CODEC_FLAG2_DROP_FRAME_TIMECODE;
             st->codec->time_base.den = st->codec->extradata[16]; /* number of frame */
             st->codec->time_base.num = 1;
+            /* adjust for per frame dur in counter mode */
+            if (tmcd_ctx->tmcd_flags & 0x0008) {
+                int timescale = AV_RB32(st->codec->extradata + 8);
+                int framedur = AV_RB32(st->codec->extradata + 12);
+                st->codec->time_base.den *= timescale;
+                st->codec->time_base.num *= framedur;
+            }
             if (size > 30) {
                 uint32_t len = AV_RB32(st->codec->extradata + 18); /* name atom length */
                 uint32_t format = AV_RB32(st->codec->extradata + 22);



More information about the ffmpeg-cvslog mailing list