]> git.sesse.net Git - nageru/commitdiff
Fix an overflow issue with long (>= 10 min) clips.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 13 Feb 2019 08:18:01 +0000 (09:18 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 13 Feb 2019 08:18:08 +0000 (09:18 +0100)
futatabi/player.cpp
shared/timebase.h

index ce165d03f90461066e38cd312a76ef27948b0eea..9c20278702abcb4a50a6284068667b0dad102602 100644 (file)
@@ -181,7 +181,7 @@ void Player::play_playlist_once()
                }
 
                steady_clock::time_point next_frame_start;
-               for (int frameno = 0; !should_quit; ++frameno) {  // Ends when the clip ends.
+               for (int64_t frameno = 0; !should_quit; ++frameno) {  // Ends when the clip ends.
                        double out_pts = out_pts_origin + TIMEBASE * frameno / global_flags.output_framerate;
                        next_frame_start =
                                origin + microseconds(lrint((out_pts - out_pts_origin) * 1e6 / TIMEBASE));
index 532ec86395c4fa08f08d53dbcc12daa7093ba127..ba20d7f21d87da5b132fda6ff2eb6b0f1b03cf7f 100644 (file)
@@ -3,6 +3,8 @@
 
 #include <ratio>
 
+#include <stdint.h>
+
 // Common timebase that allows us to represent one frame exactly in all the
 // relevant frame rates:
 //
@@ -15,7 +17,7 @@
 // If we also wanted to represent one sample at 48000 Hz, we'd need
 // to go to 300000. Also supporting one sample at 44100 Hz would mean
 // going to 44100000; probably a bit excessive.
-#define TIMEBASE 120000
+constexpr uint64_t TIMEBASE = 120000;
 
 // Some muxes, like MP4 (or at least avformat's implementation of it),
 // are not too fond of values above 2^31. At timebase 120000, that's only