]> granicus.if.org Git - libvpx/commitdiff
Reformat non-RD coding flow
authorJingning Han <jingning@google.com>
Thu, 20 Mar 2014 21:06:54 +0000 (14:06 -0700)
committerJingning Han <jingning@google.com>
Fri, 21 Mar 2014 23:41:55 +0000 (16:41 -0700)
This commit reformats non-RD coding flow layout to allow mode
decision with fixed and variable block sizes.

Change-Id: I2cdd3bb9f26c499ee4a9849004fd925cdd195d09

vp9/encoder/vp9_encodeframe.c

index a0196e6cfe15e73069aa71ada14514802246390e..65961cf8e2b86e6d666a7fb7ff1f0149da633d7a 100644 (file)
@@ -2824,54 +2824,65 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
     cpi->mb.source_variance = UINT_MAX;
 
     // Set the partition type of the 64X64 block
-    if (cpi->sf.partition_search_type == VAR_BASED_PARTITION)
-      choose_partitioning(cpi, tile, mi_row, mi_col);
-    else if (cpi->sf.partition_search_type == REFERENCE_PARTITION) {
-      if (cpi->sf.partition_check) {
-        MACROBLOCK *x = &cpi->mb;
-        int rate1 = 0, rate2 = 0, rate3 = 0;
-        int64_t dist1 = 0, dist2 = 0, dist3 = 0;
-        set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, BLOCK_8X8);
-        nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col, BLOCK_64X64,
-                            0, &rate1, &dist1);
-        set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, BLOCK_16X16);
+    switch (cpi->sf.partition_search_type) {
+      case VAR_BASED_PARTITION:
+        choose_partitioning(cpi, tile, mi_row, mi_col);
         nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col, BLOCK_64X64,
-                            0, &rate2, &dist2);
-        set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, BLOCK_32X32);
+                            1, &dummy_rate, &dummy_dist);
+        break;
+      case VAR_BASED_FIXED_PARTITION:
+      case FIXED_PARTITION:
+        set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, bsize);
         nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col, BLOCK_64X64,
-                            0, &rate3, &dist3);
+                            1, &dummy_rate, &dummy_dist);
+        break;
+      case REFERENCE_PARTITION:
+        if (cpi->sf.partition_check) {
+          MACROBLOCK *x = &cpi->mb;
+          int rate1 = 0, rate2 = 0, rate3 = 0;
+          int64_t dist1 = 0, dist2 = 0, dist3 = 0;
+          set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, BLOCK_8X8);
+          nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col,
+                              BLOCK_64X64, 0, &rate1, &dist1);
+          set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                 BLOCK_16X16);
+          nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col,
+                              BLOCK_64X64, 0, &rate2, &dist2);
+          set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                 BLOCK_32X32);
+          nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col,
+                              BLOCK_64X64, 0, &rate3, &dist3);
 
-        if (RDCOST(x->rdmult, x->rddiv, rate1, dist1) <
-            RDCOST(x->rdmult, x->rddiv, rate2, dist2)) {
           if (RDCOST(x->rdmult, x->rddiv, rate1, dist1) <
-              RDCOST(x->rdmult, x->rddiv, rate3, dist3))
-            set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
-                                   BLOCK_8X8);
-          else
-            set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
-                                   BLOCK_32X32);
+              RDCOST(x->rdmult, x->rddiv, rate2, dist2)) {
+            if (RDCOST(x->rdmult, x->rddiv, rate1, dist1) <
+                RDCOST(x->rdmult, x->rddiv, rate3, dist3))
+              set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                     BLOCK_8X8);
+            else
+              set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                     BLOCK_32X32);
+          } else {
+            if (RDCOST(x->rdmult, x->rddiv, rate2, dist2) <
+                RDCOST(x->rdmult, x->rddiv, rate3, dist3))
+              set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                     BLOCK_16X16);
+            else
+              set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
+                                     BLOCK_32X32);
+          }
         } else {
-          if (RDCOST(x->rdmult, x->rddiv, rate2, dist2) <
-              RDCOST(x->rdmult, x->rddiv, rate3, dist3))
-            set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
-                                   BLOCK_16X16);
+          if (!sb_has_motion(cm, prev_mi_8x8))
+            copy_partitioning(cm, mi_8x8, prev_mi_8x8);
           else
-            set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col,
-                                   BLOCK_32X32);
+            set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, bsize);
         }
-
-      } else {
-        if (!sb_has_motion(cm, prev_mi_8x8))
-          copy_partitioning(cm, mi_8x8, prev_mi_8x8);
-        else
-          set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, bsize);
-      }
+        nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col, BLOCK_64X64,
+                            1, &dummy_rate, &dummy_dist);
+        break;
+      default:
+        assert(0);
     }
-    else
-      set_fixed_partitioning(cpi, tile, mi_8x8, mi_row, mi_col, bsize);
-
-    nonrd_use_partition(cpi, tile, mi_8x8, tp, mi_row, mi_col, BLOCK_64X64, 1,
-                        &dummy_rate, &dummy_dist);
   }
 }
 // end RTC play code