avutil/timecode: add av_timecode_init_from_components

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint
2020-09-05 23:04:28 +02:00
parent 2d90d51c56
commit eca12f4d5a
4 changed files with 39 additions and 11 deletions

View File

@@ -226,19 +226,12 @@ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start
return check_timecode(log_ctx, tc);
}
int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx)
int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx)
{
char c;
int hh, mm, ss, ff, ret;
if (sscanf(str, "%d:%d:%d%c%d", &hh, &mm, &ss, &c, &ff) != 5) {
av_log(log_ctx, AV_LOG_ERROR, "Unable to parse timecode, "
"syntax: hh:mm:ss[:;.]ff\n");
return AVERROR_INVALIDDATA;
}
int ret;
memset(tc, 0, sizeof(*tc));
tc->flags = c != ':' ? AV_TIMECODE_FLAG_DROPFRAME : 0; // drop if ';', '.', ...
tc->flags = flags;
tc->rate = rate;
tc->fps = fps_from_frame_rate(rate);
@@ -253,3 +246,18 @@ int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *st
}
return 0;
}
int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx)
{
char c;
int hh, mm, ss, ff, flags;
if (sscanf(str, "%d:%d:%d%c%d", &hh, &mm, &ss, &c, &ff) != 5) {
av_log(log_ctx, AV_LOG_ERROR, "Unable to parse timecode, "
"syntax: hh:mm:ss[:;.]ff\n");
return AVERROR_INVALIDDATA;
}
flags = c != ':' ? AV_TIMECODE_FLAG_DROPFRAME : 0; // drop if ';', '.', ...
return av_timecode_init_from_components(tc, rate, flags, hh, mm, ss, ff, log_ctx);
}