Revision 96465b90 libavcodec/h264.c

View differences:

libavcodec/h264.c
2561 2561
        if((simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)) && (h->cbp&0x30)){
2562 2562
            uint8_t *dest[2] = {dest_cb, dest_cr};
2563 2563
            if(transform_bypass){
2564
                idct_add = idct_dc_add = s->dsp.add_pixels4;
2564
                idct_add = s->dsp.add_pixels4;
2565
                if(IS_INTRA(mb_type) && h->sps.profile_idc==244 && (h->chroma_pred_mode==VERT_PRED8x8 || h->chroma_pred_mode==HOR_PRED8x8)){
2566
                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[0], block_offset + 16, h->mb + 16*16, uvlinesize);
2567
                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[1], block_offset + 20, h->mb + 20*16, uvlinesize);
2568
                }else{
2569
                    for(i=16; i<16+8; i++){
2570
                        if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16])
2571
                            idct_add   (dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
2572
                    }
2573
                }
2565 2574
            }else{
2566 2575
                idct_add = s->dsp.h264_idct_add;
2567 2576
                idct_dc_add = s->dsp.h264_idct_dc_add;
2568 2577
                chroma_dc_dequant_idct_c(h->mb + 16*16, h->chroma_qp[0], h->dequant4_coeff[IS_INTRA(mb_type) ? 1:4][h->chroma_qp[0]][0]);
2569 2578
                chroma_dc_dequant_idct_c(h->mb + 16*16+4*16, h->chroma_qp[1], h->dequant4_coeff[IS_INTRA(mb_type) ? 2:5][h->chroma_qp[1]][0]);
2570
            }
2571 2579
            if(is_h264){
2572
                if(transform_bypass && IS_INTRA(mb_type) && h->sps.profile_idc==244 && (h->chroma_pred_mode==VERT_PRED8x8 || h->chroma_pred_mode==HOR_PRED8x8)){
2573
                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[0], block_offset + 16, h->mb + 16*16, uvlinesize);
2574
                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[1], block_offset + 20, h->mb + 20*16, uvlinesize);
2575
                }else{
2576 2580
                    for(i=16; i<16+8; i++){
2577 2581
                        if(h->non_zero_count_cache[ scan8[i] ])
2578 2582
                            idct_add   (dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
2579 2583
                        else if(h->mb[i*16])
2580 2584
                            idct_dc_add(dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
2581 2585
                    }
2582
                }
2583 2586
            }else{
2584 2587
                for(i=16; i<16+8; i++){
2585 2588
                    if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16]){
......
2587 2590
                        svq3_add_idct_c(ptr, h->mb + i*16, uvlinesize, chroma_qp[s->qscale + 12] - 12, 2);
2588 2591
                    }
2589 2592
                }
2593
                }
2590 2594
            }
2591 2595
        }
2592 2596
    }

Also available in: Unified diff