[FFmpeg-cvslog] avformat/mov: remove modulo operations from mov_estimate_video_delay()

Michael Niedermayer git at videolan.org
Thu Jul 12 02:29:01 EEST 2018


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Wed Jul 11 02:17:55 2018 +0200| [c995e01b1e01ac11cf2545b3ce86569a482ff434] | committer: Michael Niedermayer

avformat/mov: remove modulo operations from mov_estimate_video_delay()

0.324 <-0.491 sec

Reviewed-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
Reviewed-by: Sasi Inguva <isasi at google.com>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c995e01b1e01ac11cf2545b3ce86569a482ff434
---

 libavformat/mov.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 1346ffe480..aabf06de12 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -3310,13 +3310,16 @@ static void mov_estimate_video_delay(MOVContext *c, AVStream* st) {
         for(ind = 0; ind < st->nb_index_entries && ctts_ind < msc->ctts_count; ++ind) {
             if (buf_size == (MAX_REORDER_DELAY + 1)) {
                 // If circular buffer is full, then move the first element forward.
-                buf_start = (buf_start + 1) % buf_size;
+                buf_start = (buf_start + 1);
+                if (buf_start == MAX_REORDER_DELAY + 1)
+                    buf_start = 0;
             } else {
                 ++buf_size;
             }
 
             // Point j to the last elem of the buffer and insert the current pts there.
-            j = (buf_start + buf_size - 1) % buf_size;
+            j = buf_start - 1;
+            if (j < 0) j = buf_size - 1;
             pts_buf[j] = st->index_entries[ind].timestamp + msc->ctts_data[ctts_ind].duration;
 
             // The timestamps that are already in the sorted buffer, and are greater than the
@@ -3327,7 +3330,8 @@ static void mov_estimate_video_delay(MOVContext *c, AVStream* st) {
             // go through, to keep this buffer in sorted order.
             num_swaps = 0;
             while (j != buf_start) {
-                r = (j - 1 + buf_size) % buf_size;
+                r = j - 1;
+                if (r < 0) r = buf_size - 1;
                 if (pts_buf[j] < pts_buf[r]) {
                     FFSWAP(int64_t, pts_buf[j], pts_buf[r]);
                     ++num_swaps;



More information about the ffmpeg-cvslog mailing list