From 776244b79a8bcfb5732f39fbebb9cd7fc0092bcb Mon Sep 17 00:00:00 2001
From: erankor <eran.kornblau@kaltura.com>
Date: Tue, 29 May 2018 17:29:09 +0300
Subject: [PATCH 2/2] qt-faststart - optimize the offset change loop

---
 tools/qt-faststart.c | 42 +++++++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/tools/qt-faststart.c b/tools/qt-faststart.c
index d0ae7245f3..2ddaf87e1b 100644
--- a/tools/qt-faststart.c
+++ b/tools/qt-faststart.c
@@ -96,9 +96,11 @@ int main(int argc, char *argv[])
     int64_t last_offset;
     unsigned char *moov_atom = NULL;
     unsigned char *ftyp_atom = NULL;
+    unsigned char *ptr;
+    unsigned char *end;
     uint64_t moov_atom_size;
     uint64_t ftyp_atom_size = 0;
-    uint64_t i, j;
+    uint64_t i;
     uint32_t offset_count;
     uint64_t current_offset;
     int64_t start_offset = 0;
@@ -253,13 +255,16 @@ int main(int argc, char *argv[])
                 printf(" bad atom size/element count\n");
                 goto error_out;
             }
-            for (j = 0; j < offset_count; j++) {
-                current_offset  = BE_32(&moov_atom[i + 12 + j * 4]);
+
+            ptr = moov_atom + i + 12;
+            end = ptr + offset_count * 4;
+            while (ptr < end) {
+                current_offset  = BE_32(ptr);
                 current_offset += moov_atom_size;
-                moov_atom[i + 12 + j * 4 + 0] = (current_offset >> 24) & 0xFF;
-                moov_atom[i + 12 + j * 4 + 1] = (current_offset >> 16) & 0xFF;
-                moov_atom[i + 12 + j * 4 + 2] = (current_offset >>  8) & 0xFF;
-                moov_atom[i + 12 + j * 4 + 3] = (current_offset >>  0) & 0xFF;
+                *ptr++ = (current_offset >> 24) & 0xFF;
+                *ptr++ = (current_offset >> 16) & 0xFF;
+                *ptr++ = (current_offset >>  8) & 0xFF;
+                *ptr++ = (current_offset >>  0) & 0xFF;
             }
             i += atom_size - 4;
         } else if (atom_type == CO64_ATOM) {
@@ -274,17 +279,20 @@ int main(int argc, char *argv[])
                 printf(" bad atom size/element count\n");
                 goto error_out;
             }
-            for (j = 0; j < offset_count; j++) {
-                current_offset  = BE_64(&moov_atom[i + 12 + j * 8]);
+
+            ptr = moov_atom + i + 12;
+            end = ptr + offset_count * 8;
+            while (ptr < end) {
+                current_offset  = BE_64(ptr);
                 current_offset += moov_atom_size;
-                moov_atom[i + 12 + j * 8 + 0] = (current_offset >> 56) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 1] = (current_offset >> 48) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 2] = (current_offset >> 40) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 3] = (current_offset >> 32) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 4] = (current_offset >> 24) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 5] = (current_offset >> 16) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 6] = (current_offset >>  8) & 0xFF;
-                moov_atom[i + 12 + j * 8 + 7] = (current_offset >>  0) & 0xFF;
+                *ptr++ = (current_offset >> 56) & 0xFF;
+                *ptr++ = (current_offset >> 48) & 0xFF;
+                *ptr++ = (current_offset >> 40) & 0xFF;
+                *ptr++ = (current_offset >> 32) & 0xFF;
+                *ptr++ = (current_offset >> 24) & 0xFF;
+                *ptr++ = (current_offset >> 16) & 0xFF;
+                *ptr++ = (current_offset >>  8) & 0xFF;
+                *ptr++ = (current_offset >>  0) & 0xFF;
             }
             i += atom_size - 4;
         }
-- 
2.16.2.windows.1

