From 77b740ac0ac4d6f7a011594ae116d5c85384bc68 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 22 Jan 2013 14:47:58 -0500 Subject: lavu/timecode: fix time code calculation for 60000/1001 drop frame Reviewed-by: Matthieu Bouron Signed-off-by: Michael Niedermayer --- libavutil/timecode.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'libavutil/timecode.c') diff --git a/libavutil/timecode.c b/libavutil/timecode.c index 5f9ebc29f9..d396032b9c 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) -- cgit v1.2.3