diff options
author | Clément Bœsch <clement.boesch@smartjog.com> | 2011-12-06 11:18:26 +0100 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2011-12-12 17:49:34 +0100 |
commit | ad5ade6615d5bb224cab99f91e162abbbe6c160a (patch) | |
tree | 7f757f4d8ab28f9bbde5ee2af48e4b59cec50a76 /libavcodec | |
parent | 98aca4bbef6818bbc8209a801425c3a6f1ff41a9 (diff) | |
download | ffmpeg-ad5ade6615d5bb224cab99f91e162abbbe6c160a.tar.gz |
timecode: add avpriv_timecode_to_string().
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/timecode.c | 16 | ||||
-rw-r--r-- | libavcodec/timecode.h | 11 |
2 files changed, 27 insertions, 0 deletions
diff --git a/libavcodec/timecode.c b/libavcodec/timecode.c index 8cd1bec941..379f08a74d 100644 --- a/libavcodec/timecode.c +++ b/libavcodec/timecode.c @@ -79,6 +79,22 @@ static int check_timecode_rate(void *avcl, AVRational rate, int drop) } } +char *avpriv_timecode_to_string(char *buf, const struct ff_timecode *tc, unsigned frame) +{ + int frame_num = tc->start + frame; + int fps = (tc->rate.num + tc->rate.den/2) / tc->rate.den; + int ff = frame_num % fps; + int ss = frame_num / fps % 60; + int mm = frame_num / (fps*60) % 60; + int hh = frame_num / (fps*3600) % 24; + + if (tc->drop) + frame_num = ff_framenum_to_drop_timecode(frame_num); + snprintf(buf, sizeof("hh:mm:ss.ff"), "%02d:%02d:%02d%c%02d", + hh, mm, ss, tc->drop ? ';' : ':', ff); + return buf; +} + int ff_init_smtpe_timecode(void *avcl, struct ff_timecode *tc) { int hh, mm, ss, ff, fps, ret; diff --git a/libavcodec/timecode.h b/libavcodec/timecode.h index 5646199ff7..7bbd1ead62 100644 --- a/libavcodec/timecode.h +++ b/libavcodec/timecode.h @@ -61,6 +61,17 @@ int ff_framenum_to_drop_timecode(int frame_num); uint32_t ff_framenum_to_smtpe_timecode(unsigned frame, int fps, int drop); /** + * @brief Load timecode string in buf + * @param buf Destination buffer + * @param tc Timecode struct pointer + * @param frame Frame id (timecode frame is computed with tc->start+frame) + * @return a pointer to the buf parameter + * @note buf must have enough space to store the timecode representation + * (sizeof("hh:mm:ss.ff")) + */ +char *avpriv_timecode_to_string(char *buf, const struct ff_timecode *tc, unsigned frame); + +/** * Parse SMTPE 12M time representation (hh:mm:ss[:;.]ff). str and rate fields * from tc struct must be set. * |