diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-08-09 21:17:14 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-08-09 21:29:33 +0200 |
commit | 8d7c4cc08238d06eb921bb0c6134a4475b0c689e (patch) | |
tree | f19330af9fa8f49a231795ef14252ba2f2865c0f | |
parent | 3f2495d98c260e6ea836d2f8e0b8e093983e8337 (diff) | |
parent | a7a17e3f1915ce69b787dc58c5d8dba0910fc0a4 (diff) | |
download | ffmpeg-8d7c4cc08238d06eb921bb0c6134a4475b0c689e.tar.gz |
Merge commit 'a7a17e3f1915ce69b787dc58c5d8dba0910fc0a4'
* commit 'a7a17e3f1915ce69b787dc58c5d8dba0910fc0a4':
hevc_filter: move some conditions out of loops
Conflicts:
libavcodec/hevc_filter.c
This is possibly less readable than the variant used before.
Thus please take a look and if people agree its worse, dont
hesitate to revert.
See: 83976e40e89655162e5394cf8915d9b6d89702d9
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/hevc_filter.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index 4c8642007e..0188680308 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -580,22 +580,26 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, int min_tu_width = s->sps->min_tb_width; int is_intra = tab_mvf[(y0 >> log2_min_pu_size) * min_pu_width + (x0 >> log2_min_pu_size)].pred_flag == PF_INTRA; + int boundary_upper, boundary_left; int i, j, bs; - if (y0 > 0 && (y0 & 7) == 0) { - int bd_ctby = y0 & ((1 << s->sps->log2_ctb_size) - 1); - int bd_slice = s->sh.slice_loop_filter_across_slices_enabled_flag || - !(lc->boundary_flags & BOUNDARY_UPPER_SLICE); - int bd_tiles = s->pps->loop_filter_across_tiles_enabled_flag || - !(lc->boundary_flags & BOUNDARY_UPPER_TILE); - if (((bd_slice && bd_tiles) || bd_ctby)) { + boundary_upper = y0 > 0 && !(y0 & 7); + if (boundary_upper && + ((!s->sh.slice_loop_filter_across_slices_enabled_flag && + lc->boundary_flags & BOUNDARY_UPPER_SLICE && + (y0 % (1 << s->sps->log2_ctb_size)) == 0) || + (!s->pps->loop_filter_across_tiles_enabled_flag && + lc->boundary_flags & BOUNDARY_UPPER_TILE && + (y0 % (1 << s->sps->log2_ctb_size)) == 0))) + boundary_upper = 0; + + if (boundary_upper) { int yp_pu = (y0 - 1) >> log2_min_pu_size; int yq_pu = y0 >> log2_min_pu_size; int yp_tu = (y0 - 1) >> log2_min_tu_size; int yq_tu = y0 >> log2_min_tu_size; RefPicList *top_refPicList = ff_hevc_get_ref_list(s, s->ref, x0, y0 - 1); - for (i = 0; i < (1 << log2_trafo_size); i += 4) { int x_pu = (x0 + i) >> log2_min_pu_size; int x_tu = (x0 + i) >> log2_min_tu_size; @@ -612,17 +616,20 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, bs = boundary_strength(s, curr, top, top_refPicList); s->horizontal_bs[((x0 + i) + y0 * s->bs_width) >> 2] = bs; } - } } // bs for vertical TU boundaries - if (x0 > 0 && (x0 & 7) == 0) { - int bd_ctbx = x0 & ((1 << s->sps->log2_ctb_size) - 1); - int bd_slice = s->sh.slice_loop_filter_across_slices_enabled_flag || - !(lc->boundary_flags & BOUNDARY_LEFT_SLICE); - int bd_tiles = s->pps->loop_filter_across_tiles_enabled_flag || - !(lc->boundary_flags & BOUNDARY_LEFT_TILE); - if (((bd_slice && bd_tiles) || bd_ctbx)) { + boundary_left = x0 > 0 && !(x0 & 7); + if (boundary_left && + ((!s->sh.slice_loop_filter_across_slices_enabled_flag && + lc->boundary_flags & BOUNDARY_LEFT_SLICE && + (x0 % (1 << s->sps->log2_ctb_size)) == 0) || + (!s->pps->loop_filter_across_tiles_enabled_flag && + lc->boundary_flags & BOUNDARY_LEFT_TILE && + (x0 % (1 << s->sps->log2_ctb_size)) == 0))) + boundary_left = 0; + + if (boundary_left) { int xp_pu = (x0 - 1) >> log2_min_pu_size; int xq_pu = x0 >> log2_min_pu_size; int xp_tu = (x0 - 1) >> log2_min_tu_size; @@ -646,7 +653,6 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, bs = boundary_strength(s, curr, left, left_refPicList); s->vertical_bs[(x0 + (y0 + i) * s->bs_width) >> 2] = bs; } - } } if (log2_trafo_size > log2_min_pu_size && !is_intra) { |