aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/timecode.c
diff options
context:
space:
mode:
authorClément Bœsch <clement.boesch@smartjog.com>2011-07-06 15:04:26 +0200
committerClément Bœsch <ubitux@gmail.com>2011-08-13 19:13:02 +0200
commit4c3c6e60f97e450c35a90dc6d66f3726b7b938b4 (patch)
tree3a9e10114bc7b8ebf14f2fd7ac5e52c11e104c82 /libavcodec/timecode.c
parentb7b72963e06f21fb985c58100c7d048cfea2736a (diff)
downloadffmpeg-4c3c6e60f97e450c35a90dc6d66f3726b7b938b4.tar.gz
mxf: move framenum to timecode convert to timecode helpers.
This is based on the original work by Baptiste Coudurier.
Diffstat (limited to 'libavcodec/timecode.c')
-rw-r--r--libavcodec/timecode.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libavcodec/timecode.c b/libavcodec/timecode.c
index 434b3cb03a..b12506f74d 100644
--- a/libavcodec/timecode.c
+++ b/libavcodec/timecode.c
@@ -37,6 +37,24 @@ int ff_framenum_to_drop_timecode(int frame_num)
return frame_num + 18 * d + 2 * ((m - 2) / 1798);
}
+uint32_t ff_framenum_to_smtpe_timecode(unsigned frame, int fps, int drop)
+{
+ return (0 << 31) | // color frame flag
+ (drop << 30) | // drop frame flag
+ ( ((frame % fps) / 10) << 28) | // tens of frames
+ ( ((frame % fps) % 10) << 24) | // units of frames
+ (0 << 23) | // field phase (NTSC), b0 (PAL)
+ ((((frame / fps) % 60) / 10) << 20) | // tens of seconds
+ ((((frame / fps) % 60) % 10) << 16) | // units of seconds
+ (0 << 15) | // b0 (NTSC), b2 (PAL)
+ ((((frame / (fps * 60)) % 60) / 10) << 12) | // tens of minutes
+ ((((frame / (fps * 60)) % 60) % 10) << 8) | // units of minutes
+ (0 << 7) | // b1
+ (0 << 6) | // b2 (NTSC), field phase (PAL)
+ ((((frame / (fps * 3600) % 24)) / 10) << 4) | // tens of hours
+ ( (frame / (fps * 3600) % 24)) % 10; // units of hours
+}
+
int ff_init_smtpe_timecode(void *avcl, struct ff_timecode *tc)
{
int hh, mm, ss, ff, fps;