]> granicus.if.org Git - libvpx/commitdiff
vp9/dec: use loop filter worker for all inline cases
authorJames Zern <jzern@google.com>
Mon, 21 Oct 2013 12:28:40 +0000 (14:28 +0200)
committerJames Zern <jzern@google.com>
Mon, 21 Oct 2013 12:28:40 +0000 (14:28 +0200)
- uses vp9_worker_execute() in non-threaded case
+ removes hook reassignment

Change-Id: I305fd55f2be5cd92367373c929cdb9004066f90f

vp9/decoder/vp9_decodframe.c
vp9/decoder/vp9_onyxd_if.c

index b914de793eb472fc1f5464b45a8ac259d3bb70f7..7c0e681a6121eae9750604f97e418248024e21de 100644 (file)
@@ -593,14 +593,12 @@ static void decode_tile(VP9D_COMP *pbi, vp9_reader *r, int tile_col) {
   YV12_BUFFER_CONFIG *const fb = &cm->yv12_fb[cm->new_fb_idx];
 
   if (pbi->do_loopfilter_inline) {
-    if (num_threads > 1) {
-      LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
-      lf_data->frame_buffer = fb;
-      lf_data->cm = cm;
-      lf_data->xd = pbi->mb;
-      lf_data->stop = 0;
-      lf_data->y_only = 0;
-    }
+    LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
+    lf_data->frame_buffer = fb;
+    lf_data->cm = cm;
+    lf_data->xd = pbi->mb;
+    lf_data->stop = 0;
+    lf_data->y_only = 0;
     vp9_loop_filter_frame_init(cm, cm->lf.filter_level);
   }
 
@@ -614,39 +612,33 @@ static void decode_tile(VP9D_COMP *pbi, vp9_reader *r, int tile_col) {
       decode_modes_sb(pbi, tile_col, mi_row, mi_col, r, BLOCK_64X64);
 
     if (pbi->do_loopfilter_inline) {
-      // delay the loopfilter by 1 macroblock row.
       const int lf_start = mi_row - MI_BLOCK_SIZE;
-      if (lf_start < 0) continue;
+      LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
 
-      if (num_threads > 1) {
-        LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
+      // delay the loopfilter by 1 macroblock row.
+      if (lf_start < 0) continue;
 
-        // decoding has completed: finish up the loop filter in this thread.
-        if (mi_row + MI_BLOCK_SIZE >= cm->cur_tile_mi_row_end) continue;
+      // decoding has completed: finish up the loop filter in this thread.
+      if (mi_row + MI_BLOCK_SIZE >= cm->cur_tile_mi_row_end) continue;
 
-        vp9_worker_sync(&pbi->lf_worker);
-        lf_data->start = lf_start;
-        lf_data->stop = mi_row;
-        pbi->lf_worker.hook = vp9_loop_filter_worker;
+      vp9_worker_sync(&pbi->lf_worker);
+      lf_data->start = lf_start;
+      lf_data->stop = mi_row;
+      if (num_threads > 1) {
         vp9_worker_launch(&pbi->lf_worker);
       } else {
-        vp9_loop_filter_rows(fb, cm, &pbi->mb, lf_start, mi_row, 0);
+        vp9_worker_execute(&pbi->lf_worker);
       }
     }
   }
 
   if (pbi->do_loopfilter_inline) {
-    int lf_start;
-    if (num_threads > 1) {
-      LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
+    LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1;
 
-      vp9_worker_sync(&pbi->lf_worker);
-      lf_start = lf_data->stop;
-    } else {
-      lf_start = mi_row - MI_BLOCK_SIZE;
-    }
-    vp9_loop_filter_rows(fb, cm, &pbi->mb,
-                         lf_start, cm->mi_rows, 0);
+    vp9_worker_sync(&pbi->lf_worker);
+    lf_data->start = lf_data->stop;
+    lf_data->stop = cm->mi_rows;
+    vp9_worker_execute(&pbi->lf_worker);
   }
 }
 
index c1fbee31236cf70e463ad7f54469c8bdd3ab689b..243dbef214891402b7033036d4e6444b8bc8feb9 100644 (file)
@@ -141,14 +141,13 @@ VP9D_PTR vp9_create_decompressor(VP9D_CONFIG *oxcf) {
   cm->error.setjmp = 0;
   pbi->decoded_key_frame = 0;
 
-  if (pbi->oxcf.max_threads > 1) {
-    vp9_worker_init(&pbi->lf_worker);
-    pbi->lf_worker.data1 = vpx_malloc(sizeof(LFWorkerData));
-    pbi->lf_worker.hook = (VP9WorkerHook)vp9_loop_filter_worker;
-    if (pbi->lf_worker.data1 == NULL || !vp9_worker_reset(&pbi->lf_worker)) {
-      vp9_remove_decompressor(pbi);
-      return NULL;
-    }
+  vp9_worker_init(&pbi->lf_worker);
+  pbi->lf_worker.data1 = vpx_malloc(sizeof(LFWorkerData));
+  pbi->lf_worker.hook = (VP9WorkerHook)vp9_loop_filter_worker;
+  if (pbi->lf_worker.data1 == NULL ||
+      (pbi->oxcf.max_threads > 1 && !vp9_worker_reset(&pbi->lf_worker))) {
+    vp9_remove_decompressor(pbi);
+    return NULL;
   }
 
   return pbi;