diff options
author | hkuang <hkuang@google.com> | 2014-05-15 10:51:10 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2014-05-15 10:51:10 -0700 |
commit | 1fe6496b176d20c8adf02ccfe00fb61d2097af96 (patch) | |
tree | d590bb40f5a1290dffedc5306f43b2cb12a0bfdc | |
parent | 71854f3a6e424c842ad45a76dd71028dd6e0df96 (diff) | |
parent | bf8c58be5a11b4c1c822a01d494bf63391d42833 (diff) | |
download | libvpx-1fe6496b176d20c8adf02ccfe00fb61d2097af96.tar libvpx-1fe6496b176d20c8adf02ccfe00fb61d2097af96.tar.gz libvpx-1fe6496b176d20c8adf02ccfe00fb61d2097af96.tar.bz2 libvpx-1fe6496b176d20c8adf02ccfe00fb61d2097af96.zip |
Merge "Refactor calling loopfilter code."
-rw-r--r-- | vp9/decoder/vp9_decodeframe.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index 169e939ca..57ee4cdfc 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -1326,16 +1326,6 @@ int vp9_decode_frame(VP9Decoder *pbi, vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, "Truncated packet or corrupt header length"); - if (do_loopfilter_inline && pbi->lf_worker.data1 == NULL) { - CHECK_MEM_ERROR(cm, pbi->lf_worker.data1, - vpx_memalign(32, sizeof(LFWorkerData))); - pbi->lf_worker.hook = (VP9WorkerHook)vp9_loop_filter_worker; - if (pbi->max_threads > 1 && !vp9_worker_reset(&pbi->lf_worker)) { - vpx_internal_error(&cm->error, VPX_CODEC_ERROR, - "Loop filter thread creation failed"); - } - } - init_macroblockd(cm, &pbi->mb); if (cm->coding_use_prev_mi) @@ -1358,9 +1348,23 @@ int vp9_decode_frame(VP9Decoder *pbi, if (pbi->max_threads > 1 && tile_rows == 1 && tile_cols > 1 && cm->frame_parallel_decoding_mode) { *p_data_end = decode_tiles_mt(pbi, data + first_partition_size, data_end); + // If multiple threads are used to decode tiles, then we use those threads + // to do parallel loopfiltering. + vp9_loop_filter_frame_mt(new_fb, pbi, cm, cm->lf.filter_level, 0, 0); } else { + if (do_loopfilter_inline && pbi->lf_worker.data1 == NULL) { + CHECK_MEM_ERROR(cm, pbi->lf_worker.data1, + vpx_memalign(32, sizeof(LFWorkerData))); + pbi->lf_worker.hook = (VP9WorkerHook)vp9_loop_filter_worker; + if (pbi->max_threads > 1 && !vp9_worker_reset(&pbi->lf_worker)) { + vpx_internal_error(&cm->error, VPX_CODEC_ERROR, + "Loop filter thread creation failed"); + } + } *p_data_end = decode_tiles(pbi, data + first_partition_size, data_end, do_loopfilter_inline); + if (!do_loopfilter_inline) + vp9_loop_filter_frame(new_fb, cm, &pbi->mb, cm->lf.filter_level, 0, 0); } new_fb->corrupted |= xd->corrupted; @@ -1389,16 +1393,5 @@ int vp9_decode_frame(VP9Decoder *pbi, if (cm->refresh_frame_context) cm->frame_contexts[cm->frame_context_idx] = cm->fc; - // Loopfilter - if (!do_loopfilter_inline) { - // If multiple threads are used to decode tiles, then we use those threads - // to do parallel loopfiltering. - if (pbi->num_tile_workers) { - vp9_loop_filter_frame_mt(new_fb, pbi, cm, cm->lf.filter_level, 0, 0); - } else { - vp9_loop_filter_frame(new_fb, cm, &pbi->mb, cm->lf.filter_level, 0, 0); - } - } - return 0; } |