Revision ffb61814 libavcodec/h264.c

View differences:

libavcodec/h264.c
2910 2910
    int linesize, uvlinesize, mb_x, mb_y;
2911 2911
    const int end_mb_y= s->mb_y + FRAME_MBAFF;
2912 2912
    const int old_slice_type= h->slice_type;
2913
    const int end_mb_x  = s->mb_x;
2913 2914

  
2914 2915
    if(h->deblocking_filter) {
2915
        for(mb_x= 0; mb_x<s->mb_width; mb_x++){
2916
        int start_x= s->resync_mb_y == s->mb_y ? s->resync_mb_x : 0;
2917
        for(mb_x= start_x; mb_x<end_mb_x; mb_x++){
2916 2918
            for(mb_y=end_mb_y - FRAME_MBAFF; mb_y<= end_mb_y; mb_y++){
2917 2919
                int mb_xy, mb_type;
2918 2920
                mb_xy = h->mb_xy = mb_x + mb_y*s->mb_stride;
......
2957 2959
        }
2958 2960
    }
2959 2961
    h->slice_type= old_slice_type;
2960
    s->mb_x= 0;
2962
    s->mb_x= end_mb_x;
2961 2963
    s->mb_y= end_mb_y - FRAME_MBAFF;
2962 2964
    h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
2963 2965
    h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
......
3059 3061
            }
3060 3062

  
3061 3063
            if( ++s->mb_x >= s->mb_width ) {
3062
                s->mb_x = 0;
3063 3064
                loop_filter(h);
3065
                s->mb_x = 0;
3064 3066
                decode_finish_row(h);
3065 3067
                ++s->mb_y;
3066 3068
                if(FIELD_OR_MBAFF_PICTURE) {
......
3071 3073
            }
3072 3074

  
3073 3075
            if( eos || s->mb_y >= s->mb_height ) {
3076
                if(s->mb_x)
3077
                    loop_filter(h);
3074 3078
                tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits);
3075 3079
                ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
3076 3080
                return 0;
......
3099 3103
            }
3100 3104

  
3101 3105
            if(++s->mb_x >= s->mb_width){
3102
                s->mb_x=0;
3103 3106
                loop_filter(h);
3107
                s->mb_x=0;
3104 3108
                decode_finish_row(h);
3105 3109
                ++s->mb_y;
3106 3110
                if(FIELD_OR_MBAFF_PICTURE) {
......
3127 3131
            if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->mb_skip_run<=0){
3128 3132
                tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits);
3129 3133
                if(get_bits_count(&s->gb) == s->gb.size_in_bits ){
3134
                    if(s->mb_x)
3135
                        loop_filter(h);
3130 3136
                    ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
3131 3137

  
3132 3138
                    return 0;

Also available in: Unified diff