OSDN Git Service

genX_mfd: optimize comparison out of loop
authorcarpalis <jerome.borsboom@carpalis.nl>
Sun, 12 Nov 2017 14:56:57 +0000 (15:56 +0100)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 5 Jan 2018 06:57:31 +0000 (14:57 +0800)
Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
src/gen6_mfd.c
src/gen75_mfd.c
src/gen7_mfd.c
src/gen8_mfd.c

index 2066612..06657ec 100644 (file)
@@ -1730,16 +1730,18 @@ gen6_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offse
     int slice_header_size = in_slice_data_bit_offset / 8;
     int i, j;
 
-    if (profile == 3) { /* Advanced Profile */
-        for (i = 0, j = 0; i < slice_header_size; i++, j++) {
-            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
-                if (i < slice_header_size - 1)
+    if (profile == 3 && slice_header_size) { /* Advanced Profile */
+        for (i = 0, j = 0; i < slice_header_size - 1; i++, j++)
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4)
                     i++, j += 2;
-                else {
-                    buf[j + 2] = buf[j + 1];
-                    j++;
-                }
+
+        if (i == slice_header_size - 1) {
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
+                buf[j + 2] = 0;
+                j++;
             }
+
+            j++;
         }
 
         out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8;
index 18e612a..c735c0e 100644 (file)
@@ -2500,16 +2500,18 @@ gen75_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offs
     int slice_header_size = in_slice_data_bit_offset / 8;
     int i, j;
 
-    if (profile == 3) { /* Advanced Profile */
-        for (i = 0, j = 0; i < slice_header_size; i++, j++) {
-            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
-                if (i < slice_header_size - 1)
+    if (profile == 3 && slice_header_size) { /* Advanced Profile */
+        for (i = 0, j = 0; i < slice_header_size - 1; i++, j++)
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4)
                     i++, j += 2;
-                else {
-                    buf[j + 2] = buf[j + 1];
-                    j++;
-                }
+
+        if (i == slice_header_size - 1) {
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
+                buf[j + 2] = 0;
+                j++;
             }
+
+            j++;
         }
 
         out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8;
index 8366404..77c1a5a 100644 (file)
@@ -2155,16 +2155,18 @@ gen7_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offse
     int slice_header_size = in_slice_data_bit_offset / 8;
     int i, j;
 
-    if (profile == 3) { /* Advanced Profile */
-        for (i = 0, j = 0; i < slice_header_size; i++, j++) {
-            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
-                if (i < slice_header_size - 1)
+    if (profile == 3 && slice_header_size) { /* Advanced Profile */
+        for (i = 0, j = 0; i < slice_header_size - 1; i++, j++)
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4)
                     i++, j += 2;
-                else {
-                    buf[j + 2] = buf[j + 1];
-                    j++;
-                }
+
+        if (i == slice_header_size - 1) {
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
+                buf[j + 2] = 0;
+                j++;
             }
+
+            j++;
         }
 
         out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8;
index dd13cc8..f616182 100644 (file)
@@ -2208,16 +2208,18 @@ gen8_mfd_vc1_get_macroblock_bit_offset(uint8_t *buf, int in_slice_data_bit_offse
     int slice_header_size = in_slice_data_bit_offset / 8;
     int i, j;
 
-    if (profile == 3) { /* Advanced Profile */
-        for (i = 0, j = 0; i < slice_header_size; i++, j++) {
-            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
-                if (i < slice_header_size - 1)
+    if (profile == 3 && slice_header_size) { /* Advanced Profile */
+        for (i = 0, j = 0; i < slice_header_size - 1; i++, j++)
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4)
                     i++, j += 2;
-                else {
-                    buf[j + 2] = buf[j + 1];
-                    j++;
-                }
+
+        if (i == slice_header_size - 1) {
+            if (!buf[j] && !buf[j + 1] && buf[j + 2] == 3 && buf[j + 3] < 4) {
+                buf[j + 2] = 0;
+                j++;
             }
+
+            j++;
         }
 
         out_slice_data_bit_offset = 8 * j + in_slice_data_bit_offset % 8;