diff options
author | James Zern <jzern@google.com> | 2013-08-23 18:52:10 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2013-08-23 18:52:10 -0700 |
commit | 2c6ba737f83bd40214aae7510a9a6a8b4f8c30ce (patch) | |
tree | 6df17a147cfdf008c818238dbb2afc8b5d38c32a | |
parent | e6c435b506fbcabacabbe1535d60ebcbfd5c2c11 (diff) | |
parent | 85640f1c9dd56378e9f86d85843732387731e69e (diff) | |
download | libvpx-2c6ba737f83bd40214aae7510a9a6a8b4f8c30ce.tar libvpx-2c6ba737f83bd40214aae7510a9a6a8b4f8c30ce.tar.gz libvpx-2c6ba737f83bd40214aae7510a9a6a8b4f8c30ce.tar.bz2 libvpx-2c6ba737f83bd40214aae7510a9a6a8b4f8c30ce.zip |
Merge "vp9: remove unnecessary wait w/threaded loopfilter"
-rw-r--r-- | vp9/decoder/vp9_decodframe.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index 5e9d24edc..1be38095f 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -592,6 +592,7 @@ static void decode_tile(VP9D_COMP *pbi, vp9_reader *r) { lf_data->frame_buffer = fb; lf_data->cm = pc; lf_data->xd = pbi->mb; + lf_data->stop = 0; lf_data->y_only = 0; } vp9_loop_filter_frame_init(pc, pc->lf.filter_level); @@ -615,6 +616,9 @@ static void decode_tile(VP9D_COMP *pbi, vp9_reader *r) { if (num_threads > 1) { LFWorkerData *const lf_data = (LFWorkerData*)pbi->lf_worker.data1; + // decoding has completed: finish up the loop filter in this thread. + if (mi_row + MI_BLOCK_SIZE >= pc->cur_tile_mi_row_end) continue; + vp9_worker_sync(&pbi->lf_worker); lf_data->start = lf_start; lf_data->stop = mi_row; @@ -627,13 +631,17 @@ static void decode_tile(VP9D_COMP *pbi, vp9_reader *r) { } if (pbi->do_loopfilter_inline) { + int lf_start; if (num_threads > 1) { - // TODO(jzern): since the loop filter is delayed one mb row, this will be - // forced to wait for the last row scheduled in the for loop. + 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, pc, &pbi->mb, - mi_row - MI_BLOCK_SIZE, pc->mi_rows, 0); + lf_start, pc->mi_rows, 0); } } |