]> granicus.if.org Git - libvpx/commitdiff
Enable encode breakout in real time
authorYunqing Wang <yunqingwang@google.com>
Sat, 28 Jun 2014 00:44:32 +0000 (17:44 -0700)
committerYunqing Wang <yunqingwang@google.com>
Mon, 30 Jun 2014 17:41:12 +0000 (10:41 -0700)
For real time speed 7, once encode breakout is on(i.e. encoding
setting --static-thresh=1), a proper encode breakout threshold
is set to speed up the encoder.

Set --static-thresh=1, RTC set borg test showed a slight overall
psnr loss of 0.162%, but ssim gain of 0.287%. The average speedup
on RTC set is 6%, and for some clips, the speedup can be 10+%.

Change-Id: Id522d9ce779ff7c699936d13d0c47083de4afb85

vp9/encoder/vp9_speed_features.c
vp9/encoder/vp9_speed_features.h

index b8a2ce0ff6b176d535e256d3f7d4bcc168fb948c..88a750276c0c8f3723cb84f5592c409525d23249 100644 (file)
@@ -280,6 +280,8 @@ static void set_rt_speed_feature(VP9_COMP *cpi, SPEED_FEATURES *sf,
   }
   if (speed >= 7) {
     sf->lpf_pick = LPF_PICK_MINIMAL_LPF;
+    sf->encode_breakout_thresh = (MIN(cm->width, cm->height) >= 720) ?
+        800 : 300;
   }
   if (speed >= 8) {
     int i;
@@ -349,6 +351,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
   // to FIXED_PARTITION.
   sf->always_this_block_size = BLOCK_16X16;
   sf->search_type_check_frequency = 50;
+  sf->encode_breakout_thresh = 0;
 
   // Recode loop tolerence %.
   sf->recode_tolerance = 25;
@@ -392,4 +395,8 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
   if (!cpi->oxcf.frame_periodic_boost) {
     sf->max_delta_qindex = 0;
   }
+
+  if (cpi->encode_breakout && oxcf->mode == REALTIME &&
+      sf->encode_breakout_thresh > cpi->encode_breakout)
+    cpi->encode_breakout = sf->encode_breakout_thresh;
 }
index 7a5cc34bc5d6aee204dea0fb7ec05946e183af9e..e14eb404c8704b619927b16b23ccf0da3c7ace31 100644 (file)
@@ -357,6 +357,10 @@ typedef struct SPEED_FEATURES {
   // can be reused in final block encoding process. It is enabled only for real-
   // time mode speed 6.
   int reuse_inter_pred_sby;
+
+  // This variable sets the encode_breakout threshold. Currently, it is only
+  // enabled in real time mode.
+  int encode_breakout_thresh;
 } SPEED_FEATURES;
 
 struct VP9_COMP;