Revision 806ac67b

View differences:

libavcodec/h264.h
741 741
        {0,2,0,2,7,10,7,10,7+0*8, 7+2*8, 7+0*8, 7+2*8, 2+0*8, 2+3*8, 2+0*8, 2+3*8}
742 742
    };
743 743

  
744
    top_xy     = mb_xy  - (s->mb_stride << FIELD_PICTURE);
744
    top_xy     = mb_xy  - (s->mb_stride << MB_FIELD);
745 745

  
746 746
    //FIXME deblocking could skip the intra and nnz parts.
747 747
//     if(for_deblock && (h->slice_num == 1 || h->slice_table[mb_xy] == h->slice_table[top_xy]) && !FRAME_MBAFF)
......
755 755
    left_xy[1] = left_xy[0] = mb_xy-1;
756 756
    left_block = left_block_options[0];
757 757
    if(FRAME_MBAFF){
758
        const int pair_xy          = s->mb_x     + (s->mb_y & ~1)*s->mb_stride;
759
        const int top_pair_xy      = pair_xy     - s->mb_stride;
760
        const int topleft_pair_xy  = top_pair_xy - 1;
761
        const int topright_pair_xy = top_pair_xy + 1;
762
        const int topleft_mb_field_flag  = IS_INTERLACED(s->current_picture.mb_type[topleft_pair_xy]);
763
        const int top_mb_field_flag      = IS_INTERLACED(s->current_picture.mb_type[top_pair_xy]);
764
        const int topright_mb_field_flag = IS_INTERLACED(s->current_picture.mb_type[topright_pair_xy]);
765
        const int left_mb_field_flag     = IS_INTERLACED(s->current_picture.mb_type[pair_xy-1]);
758
        const int left_mb_field_flag     = IS_INTERLACED(s->current_picture.mb_type[mb_xy-1]);
766 759
        const int curr_mb_field_flag     = IS_INTERLACED(mb_type);
767
        const int bottom = (s->mb_y & 1);
768
        tprintf(s->avctx, "fill_caches: curr_mb_field_flag:%d, left_mb_field_flag:%d, topleft_mb_field_flag:%d, top_mb_field_flag:%d, topright_mb_field_flag:%d\n", curr_mb_field_flag, left_mb_field_flag, topleft_mb_field_flag, top_mb_field_flag, topright_mb_field_flag);
769

  
770
        if (curr_mb_field_flag && (bottom || top_mb_field_flag)){
771
            top_xy -= s->mb_stride;
772
        }
773
        if (curr_mb_field_flag && (bottom || topleft_mb_field_flag)){
774
            topleft_xy -= s->mb_stride;
775
        } else if(bottom && !curr_mb_field_flag && left_mb_field_flag) {
776
            topleft_xy += s->mb_stride;
777
            // take top left mv from the middle of the mb, as opposed to all other modes which use the bottom right partition
778
            topleft_partition = 0;
779
        }
780
        if (curr_mb_field_flag && (bottom || topright_mb_field_flag)){
781
            topright_xy -= s->mb_stride;
782
        }
783
        if (left_mb_field_flag != curr_mb_field_flag) {
784
            left_xy[1] = left_xy[0] = pair_xy - 1;
785
            if (curr_mb_field_flag) {
786
                left_xy[1] += s->mb_stride;
787
                left_block = left_block_options[3];
788
            } else {
789
                left_block= left_block_options[2 - bottom];
760
        if(s->mb_y&1){
761
            if (left_mb_field_flag != curr_mb_field_flag) {
762
                left_xy[1] = left_xy[0] = mb_xy - s->mb_stride - 1;
763
                if (curr_mb_field_flag) {
764
                    left_xy[1] += s->mb_stride;
765
                    left_block = left_block_options[3];
766
                } else {
767
                    topleft_xy += s->mb_stride;
768
                    // take top left mv from the middle of the mb, as opposed to all other modes which use the bottom right partition
769
                    topleft_partition = 0;
770
                    left_block = left_block_options[1];
771
                }
772
            }
773
        }else{
774
            if(curr_mb_field_flag){
775
                topleft_xy  += s->mb_stride & (((s->current_picture.mb_type[top_xy - 1]>>7)&1)-1);
776
                topright_xy += s->mb_stride & (((s->current_picture.mb_type[top_xy + 1]>>7)&1)-1);
777
                top_xy      += s->mb_stride & (((s->current_picture.mb_type[top_xy    ]>>7)&1)-1);
778
            }
779
            if (left_mb_field_flag != curr_mb_field_flag) {
780
                left_xy[1] = left_xy[0] = mb_xy - 1;
781
                if (curr_mb_field_flag) {
782
                    left_xy[1] += s->mb_stride;
783
                    left_block = left_block_options[3];
784
                } else {
785
                    left_block = left_block_options[2];
786
                }
790 787
            }
791 788
        }
792 789
    }

Also available in: Unified diff