diff options
author | Clément Bœsch <clement.boesch@smartjog.com> | 2011-07-06 15:04:26 +0200 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2011-08-13 19:13:02 +0200 |
commit | 4c3c6e60f97e450c35a90dc6d66f3726b7b938b4 (patch) | |
tree | 3a9e10114bc7b8ebf14f2fd7ac5e52c11e104c82 /libavcodec | |
parent | b7b72963e06f21fb985c58100c7d048cfea2736a (diff) | |
download | ffmpeg-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')
-rw-r--r-- | libavcodec/timecode.c | 18 | ||||
-rw-r--r-- | libavcodec/timecode.h | 9 |
2 files changed, 27 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; diff --git a/libavcodec/timecode.h b/libavcodec/timecode.h index bf4116b28a..d8507a7419 100644 --- a/libavcodec/timecode.h +++ b/libavcodec/timecode.h @@ -52,6 +52,15 @@ struct ff_timecode { int ff_framenum_to_drop_timecode(int frame_num); /** + * @brief Convert frame id (timecode) to SMPTE 12M binary representation + * @param frame Frame number + * @param fps Frame rate + * @param drop Drop flag + * @return The actual binary representation + */ +uint32_t ff_framenum_to_smtpe_timecode(unsigned frame, int fps, int drop); + +/** * Parse SMTPE 12M time representation (hh:mm:ss[:;.]ff). str and rate fields * from tc struct must be set. * |