From: Limin Wang <lance.lmw...@gmail.com> Signed-off-by: Limin Wang <lance.lmw...@gmail.com> --- libavutil/timecode.c | 26 ++++++++++++++++++++++++++ libavutil/timecode.h | 9 +++++++++ 2 files changed, 35 insertions(+)
diff --git a/libavutil/timecode.c b/libavutil/timecode.c index 60077ba..7a7ed1d 100644 --- a/libavutil/timecode.c +++ b/libavutil/timecode.c @@ -81,6 +81,32 @@ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum) (hh % 10); // units of hours } +uint32_t av_timecode_get_smpte_by_tc_string(const char *buf) +{ + char c; + int hh, mm, ss, ff, drop; + + if (sscanf(buf, "%d:%d:%d%c%d", &hh, &mm, &ss, &c, &ff) != 5) { + return AVERROR_INVALIDDATA; + } + drop = c != ':' ? AV_TIMECODE_FLAG_DROPFRAME : 0; // drop if ';', '.', ... + + return 0 << 31 | // color frame flag (0: unsync mode, 1: sync mode) + drop << 30 | // drop frame flag (0: non drop, 1: drop) + (ff / 10) << 28 | // tens of frames + (ff % 10) << 24 | // units of frames + 0 << 23 | // PC (NTSC) or BGF0 (PAL) + (ss / 10) << 20 | // tens of seconds + (ss % 10) << 16 | // units of seconds + 0 << 15 | // BGF0 (NTSC) or BGF2 (PAL) + (mm / 10) << 12 | // tens of minutes + (mm % 10) << 8 | // units of minutes + 0 << 7 | // BGF2 (NTSC) or PC (PAL) + 0 << 6 | // BGF1 + (hh / 10) << 4 | // tens of hours + (hh % 10); // units of hours +} + char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum) { int fps = tc->fps; diff --git a/libavutil/timecode.h b/libavutil/timecode.h index 37c1361..7bb4b78 100644 --- a/libavutil/timecode.h +++ b/libavutil/timecode.h @@ -71,6 +71,15 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); /** + * Convert TC string to SMPTE 12M binary representation. + * + * @param buf TC string + * @return the SMPTE binary representation, or AVERROR otherwise + * + */ +uint32_t av_timecode_get_smpte_by_tc_string(const char *buf); + +/** * Load timecode string in buf. * * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".