|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|