shithub: libvpx

Download patch

ref: 77c959654c7defafa6b740f37000b973c8ee202a
parent: 5010fa9dc32fdb73e2ea0847dbbe62d452bb84b8
author: angiebird <[email protected]>
date: Mon Mar 16 08:34:02 EDT 2020

Correct time_base of ivf header in SimpleEncode

Change-Id: I8a14fcad3e7b4c4689f4e7387414e59ba9c4c20a

--- a/vp9/simple_encode.cc
+++ b/vp9/simple_encode.cc
@@ -123,13 +123,6 @@
   return v;
 }
 
-static INLINE vpx_rational_t invert_vpx_rational(vpx_rational_t v) {
-  vpx_rational_t inverse_v;
-  inverse_v.num = v.den;
-  inverse_v.den = v.num;
-  return inverse_v;
-}
-
 static INLINE FrameType
 get_frame_type_from_update_type(FRAME_UPDATE_TYPE update_type) {
   switch (update_type) {
@@ -852,7 +845,14 @@
 
   if (out_file_ != nullptr) {
     const char *fourcc = "VP90";
-    vpx_rational_t time_base = invert_vpx_rational(frame_rate);
+    // In SimpleEncode, we use time_base = 1 / TICKS_PER_SEC.
+    // Based on that, the ivf_timestamp for each image is set to
+    // show_idx * TICKS_PER_SEC / frame_rate
+    // such that each image's actual timestamp in seconds can be computed as
+    // ivf_timestamp * time_base == show_idx / frame_rate
+    // TODO(angiebird): 1) Add unit test for ivf timestamp.
+    // 2) Simplify the frame_rate setting process.
+    vpx_rational_t time_base = make_vpx_rational(1, TICKS_PER_SEC);
     ivf_write_file_header_with_video_info(out_file_, *(const uint32_t *)fourcc,
                                           num_frames_, frame_width_,
                                           frame_height_, time_base);