diff options
author | Clément Bœsch <clement.boesch@smartjog.com> | 2012-08-03 15:40:15 +0200 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-08-08 09:11:26 +0200 |
commit | 4b365b08685b0ab9df3f4bae4ee8b6506eb637ea (patch) | |
tree | 4daf96f657d99fb8145976784062f1255cd322d5 | |
parent | 6b3484dcbc6fe6a5f3d0919922790592c9d5a608 (diff) | |
download | ffmpeg-4b365b08685b0ab9df3f4bae4ee8b6506eb637ea.tar.gz |
lavu/timecode: add av_timecode_check_frame_rate().
-rw-r--r-- | libavutil/timecode.c | 26 | ||||
-rw-r--r-- | libavutil/timecode.h | 7 | ||||
-rw-r--r-- | libavutil/version.h | 4 |
3 files changed, 27 insertions, 10 deletions
diff --git a/libavutil/timecode.c b/libavutil/timecode.c index c74abf2bd0..fcbd00d660 100644 --- a/libavutil/timecode.c +++ b/libavutil/timecode.c @@ -146,6 +146,17 @@ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit) return buf; } +static int check_fps(int fps) +{ + int i; + static const int supported_fps[] = {24, 25, 30, 50, 60}; + + for (i = 0; i < FF_ARRAY_ELEMS(supported_fps); i++) + if (fps == supported_fps[i]) + return 0; + return -1; +} + static int check_timecode(void *log_ctx, AVTimecode *tc) { if (tc->fps <= 0) { @@ -156,18 +167,12 @@ static int check_timecode(void *log_ctx, AVTimecode *tc) av_log(log_ctx, AV_LOG_ERROR, "Drop frame is only allowed with 30000/1001 FPS\n"); return AVERROR(EINVAL); } - switch (tc->fps) { - case 24: - case 25: - case 30: - case 50: - case 60: return 0; - - default: + if (check_fps(tc->fps) < 0) { av_log(log_ctx, AV_LOG_ERROR, "Timecode frame rate %d/%d not supported\n", tc->rate.num, tc->rate.den); return AVERROR_PATCHWELCOME; } + return 0; } static int fps_from_frame_rate(AVRational rate) @@ -177,6 +182,11 @@ static int fps_from_frame_rate(AVRational rate) return (rate.num + rate.den/2) / rate.den; } +int av_timecode_check_frame_rate(AVRational rate) +{ + return check_fps(fps_from_frame_rate(rate)); +} + int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx) { memset(tc, 0, sizeof(*tc)); diff --git a/libavutil/timecode.h b/libavutil/timecode.h index be4102e577..17d6b95ffd 100644 --- a/libavutil/timecode.h +++ b/libavutil/timecode.h @@ -140,4 +140,11 @@ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start */ int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); +/** + * Check if the timecode feature is available for the given frame rate + * + * @return 0 if supported, <0 otherwise + */ +int av_timecode_check_frame_rate(AVRational rate); + #endif /* AVUTIL_TIMECODE_H */ diff --git a/libavutil/version.h b/libavutil/version.h index f9448d5781..ebc782d77f 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -39,8 +39,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 66 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 67 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ |