shithub: libvpx

Download patch

ref: c1bce6b0aa288743fbd3d4515a9ec8965dc7fe23
parent: c37d54a93eb58b7a35419c736ca78deb451a2b50
parent: df46372eeedc5bb0330c00bd5caffc0906504697
author: Dmitry Kovalev <[email protected]>
date: Wed Jan 15 11:04:11 EST 2014

Merge "Cleaning up ivf-related code."

--- a/ivfdec.c
+++ b/ivfdec.c
@@ -13,6 +13,25 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+static void fix_framerate(int *num, int *den) {
+  // Some versions of vpxenc used 1/(2*fps) for the timebase, so
+  // we can guess the framerate using only the timebase in this
+  // case. Other files would require reading ahead to guess the
+  // timebase, like we do for webm.
+  if (*num < 1000) {
+    // Correct for the factor of 2 applied to the timebase in the encoder.
+    if (*num & 1)
+      *den *= 2;
+    else
+      *num /= 2;
+  } else {
+    // Don't know FPS for sure, and don't have readahead code
+    // (yet?), so just default to 30fps.
+    *num = 30;
+    *den = 1;
+  }
+}
+
 int file_is_ivf(struct VpxInputContext *input_ctx) {
   char raw_hdr[32];
   int is_ivf = 0;
@@ -32,27 +51,8 @@
       input_ctx->height = mem_get_le16(raw_hdr + 14);
       input_ctx->framerate.numerator = mem_get_le32(raw_hdr + 16);
       input_ctx->framerate.denominator = mem_get_le32(raw_hdr + 20);
-
-      /* Some versions of vpxenc used 1/(2*fps) for the timebase, so
-       * we can guess the framerate using only the timebase in this
-       * case. Other files would require reading ahead to guess the
-       * timebase, like we do for webm.
-       */
-      if (input_ctx->framerate.numerator < 1000) {
-        /* Correct for the factor of 2 applied to the timebase in the
-         * encoder.
-         */
-        if (input_ctx->framerate.numerator & 1)
-          input_ctx->framerate.denominator <<= 1;
-        else
-          input_ctx->framerate.numerator >>= 1;
-      } else {
-        /* Don't know FPS for sure, and don't have readahead code
-         * (yet?), so just default to 30fps.
-         */
-        input_ctx->framerate.numerator = 30;
-        input_ctx->framerate.denominator = 1;
-      }
+      fix_framerate(&input_ctx->framerate.numerator,
+                    &input_ctx->framerate.denominator);
     }
   }
 
--- a/ivfenc.c
+++ b/ivfenc.c
@@ -41,9 +41,6 @@
   char header[12];
   vpx_codec_pts_t pts;
 
-  if (pkt->kind != VPX_CODEC_CX_FRAME_PKT)
-    return;
-
   pts = pkt->data.frame.pts;
   mem_put_le32(header, (int)pkt->data.frame.sz);
   mem_put_le32(header + 4, pts & 0xFFFFFFFF);