diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 598904c4cc4173cd779c14c101f2f060aa33012b..08745d8e0cc7445d485c77b99bc1aada8f781ea9 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -2174,12 +2174,6 @@ static void loop_filter(H264Context *h){ h->slice_num= h->slice_table[mb_xy]; mb_type= s->current_picture.mb_type[mb_xy]; h->list_count= h->list_counts[mb_xy]; - if(h->list_count==2){ - h->slice_type= h->slice_type_nos= FF_B_TYPE; - }else if(h->list_count==1){ - h->slice_type= h->slice_type_nos= FF_P_TYPE; - }else - h->slice_type= h->slice_type_nos= FF_I_TYPE; if(FRAME_MBAFF) h->mb_mbaff = h->mb_field_decoding_flag = !!IS_INTERLACED(mb_type); diff --git a/libavcodec/h264_loopfilter.c b/libavcodec/h264_loopfilter.c index 84a3464cc5c0023c395b0c7d387e3cbac92082f4..7f54ce5bbdd3ef7d4aa2e77e05e9be4e61af70be 100644 --- a/libavcodec/h264_loopfilter.c +++ b/libavcodec/h264_loopfilter.c @@ -381,7 +381,7 @@ void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, int step = IS_8x8DCT(mb_type) ? 2 : 1; edges = (mb_type & MB_TYPE_16x16) && !(h->cbp & 15) ? 1 : 4; s->dsp.h264_loop_filter_strength( bS, h->non_zero_count_cache, h->ref_cache, h->mv_cache, - (h->slice_type_nos == FF_B_TYPE), edges, step, mask_edge0, mask_edge1, FIELD_PICTURE); + h->list_count==2, edges, step, mask_edge0, mask_edge1, FIELD_PICTURE); } if( IS_INTRA(s->current_picture.mb_type[mb_xy-1]) ) bSv[0][0] = 0x0004000400040004ULL; @@ -513,13 +513,13 @@ static av_always_inline void filter_mb_dir(H264Context *h, int mb_x, int mb_y, u int bn_idx= b_idx - (dir ? 8:1); int v = 0; - for( l = 0; !v && l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) { + for( l = 0; !v && l < h->list_count; l++ ) { v |= h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] | h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] + 3 >= 7U | FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit; } - if(h->slice_type_nos == FF_B_TYPE && v){ + if(h->list_count==2 && v){ v=0; for( l = 0; !v && l < 2; l++ ) { int ln= 1-l; @@ -548,7 +548,7 @@ static av_always_inline void filter_mb_dir(H264Context *h, int mb_x, int mb_y, u else if(!mv_done) { bS[i] = 0; - for( l = 0; l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) { + for( l = 0; l < h->list_count; l++ ) { if( h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] | h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] + 3 >= 7U | FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit ) { @@ -557,7 +557,7 @@ static av_always_inline void filter_mb_dir(H264Context *h, int mb_x, int mb_y, u } } - if(h->slice_type_nos == FF_B_TYPE && bS[i]){ + if(h->list_count == 2 && bS[i]){ bS[i] = 0; for( l = 0; l < 2; l++ ) { int ln= 1-l;