@ -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 ) {