[FFmpeg-cvslog] lavu/timecode: fix time code calculation for 60000/1001 drop frame

Jason git at videolan.org
Thu Jan 24 21:12:06 CET 2013


ffmpeg | branch: master | Jason <jason at cpcweb.com> | Tue Jan 22 14:47:58 2013 -0500| [77b740ac0ac4d6f7a011594ae116d5c85384bc68] | committer: Michael Niedermayer

lavu/timecode: fix time code calculation for 60000/1001 drop frame

Reviewed-by: Matthieu Bouron <matthieu.bouron at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavutil/timecode.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/libavutil/timecode.c b/libavutil/timecode.c
index 5f9ebc2..d396032 100644
--- a/libavutil/timecode.c
+++ b/libavutil/timecode.c
@@ -35,18 +35,21 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps)
 {
     /* only works for NTSC 29.97 and 59.94 */
     int drop_frames = 0;
-    int d = framenum / 17982;
-    int m = framenum % 17982;
+    int d, m, frames_per_10mins;
 
-    if (fps == 30)
+    if (fps == 30) {
         drop_frames = 2;
-    else if (fps == 60)
+        frames_per_10mins = 17982;
+    } else if (fps == 60) {
         drop_frames = 4;
-    else
+        frames_per_10mins = 35964;
+    } else
         return framenum;
 
-    //if (m < 2) m += 2; /* not needed since -2,-1 / 1798 in C returns 0 */
-    return framenum + 9 * drop_frames * d + drop_frames * ((m - 2) / 1798);
+    d = framenum / frames_per_10mins;
+    m = framenum % frames_per_10mins;
+
+    return framenum + 9 * drop_frames * d + drop_frames * ((m - drop_frames) / (frames_per_10mins / 10));
 }
 
 uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum)



More information about the ffmpeg-cvslog mailing list