lavu/timecode: add av_timecode_check_frame_rate().
authorClément Bœsch <clement.boesch@smartjog.com>
Fri, 3 Aug 2012 13:40:15 +0000 (15:40 +0200)
committerClément Bœsch <ubitux@gmail.com>
Wed, 8 Aug 2012 07:11:26 +0000 (09:11 +0200)
libavutil/timecode.c
libavutil/timecode.h
libavutil/version.h

index c74abf2..fcbd00d 100644 (file)
@@ -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));
index be4102e..17d6b95 100644 (file)
@@ -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 */
index f9448d5..ebc782d 100644 (file)
@@ -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, \