comparison cavs.c @ 5249:dc2579bede07 libavcodec

prepare splitting decoder-only parts into own file: make commonly used tables global
author stefang
date Sun, 08 Jul 2007 07:13:25 +0000
parents eeba62cd2181
children 2a3d31a8c66f
comparison
equal deleted inserted replaced
5248:d138b2abf3d5 5249:dc2579bede07
93 /* determine bs */ 93 /* determine bs */
94 if(mb_type == I_8X8) 94 if(mb_type == I_8X8)
95 *((uint64_t *)bs) = 0x0202020202020202ULL; 95 *((uint64_t *)bs) = 0x0202020202020202ULL;
96 else{ 96 else{
97 *((uint64_t *)bs) = 0; 97 *((uint64_t *)bs) = 0;
98 if(partition_flags[mb_type] & SPLITV){ 98 if(ff_cavs_partition_flags[mb_type] & SPLITV){
99 bs[2] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1], mb_type > P_8X8); 99 bs[2] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1], mb_type > P_8X8);
100 bs[3] = get_bs(&h->mv[MV_FWD_X2], &h->mv[MV_FWD_X3], mb_type > P_8X8); 100 bs[3] = get_bs(&h->mv[MV_FWD_X2], &h->mv[MV_FWD_X3], mb_type > P_8X8);
101 } 101 }
102 if(partition_flags[mb_type] & SPLITH){ 102 if(ff_cavs_partition_flags[mb_type] & SPLITH){
103 bs[6] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2], mb_type > P_8X8); 103 bs[6] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2], mb_type > P_8X8);
104 bs[7] = get_bs(&h->mv[MV_FWD_X1], &h->mv[MV_FWD_X3], mb_type > P_8X8); 104 bs[7] = get_bs(&h->mv[MV_FWD_X1], &h->mv[MV_FWD_X3], mb_type > P_8X8);
105 } 105 }
106 bs[0] = get_bs(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0], mb_type > P_8X8); 106 bs[0] = get_bs(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0], mb_type > P_8X8);
107 bs[1] = get_bs(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2], mb_type > P_8X8); 107 bs[1] = get_bs(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2], mb_type > P_8X8);
322 qpix_op, chroma_op, mv+MV_BWD_OFFS); 322 qpix_op, chroma_op, mv+MV_BWD_OFFS);
323 } 323 }
324 } 324 }
325 325
326 void ff_cavs_inter(AVSContext *h, enum mb_t mb_type) { 326 void ff_cavs_inter(AVSContext *h, enum mb_t mb_type) {
327 if(partition_flags[mb_type] == 0){ // 16x16 327 if(ff_cavs_partition_flags[mb_type] == 0){ // 16x16
328 mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0, 328 mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0,
329 h->s.dsp.put_cavs_qpel_pixels_tab[0], 329 h->s.dsp.put_cavs_qpel_pixels_tab[0],
330 h->s.dsp.put_h264_chroma_pixels_tab[0], 330 h->s.dsp.put_h264_chroma_pixels_tab[0],
331 h->s.dsp.avg_cavs_qpel_pixels_tab[0], 331 h->s.dsp.avg_cavs_qpel_pixels_tab[0],
332 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]); 332 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]);
522 r += r->rltab[level_code][2]; 522 r += r->rltab[level_code][2];
523 } 523 }
524 level_buf[i] = level; 524 level_buf[i] = level;
525 run_buf[i] = run; 525 run_buf[i] = run;
526 } 526 }
527 if(dequant(h,level_buf, run_buf, block, dequant_mul[qp], 527 if(dequant(h,level_buf, run_buf, block, ff_cavs_dequant_mul[qp],
528 dequant_shift[qp], i)) 528 ff_cavs_dequant_shift[qp], i))
529 return -1; 529 return -1;
530 h->s.dsp.cavs_idct8_add(dst,block,stride); 530 h->s.dsp.cavs_idct8_add(dst,block,stride);
531 return 0; 531 return 0;
532 } 532 }
533 533
534 534
535 static inline void decode_residual_chroma(AVSContext *h) { 535 static inline void decode_residual_chroma(AVSContext *h) {
536 if(h->cbp & (1<<4)) 536 if(h->cbp & (1<<4))
537 decode_residual_block(h,&h->s.gb,chroma_dec,0, chroma_qp[h->qp], 537 decode_residual_block(h,&h->s.gb,ff_cavs_chroma_dec,0,
538 h->cu,h->c_stride); 538 ff_cavs_chroma_qp[h->qp],h->cu,h->c_stride);
539 if(h->cbp & (1<<5)) 539 if(h->cbp & (1<<5))
540 decode_residual_block(h,&h->s.gb,chroma_dec,0, chroma_qp[h->qp], 540 decode_residual_block(h,&h->s.gb,ff_cavs_chroma_dec,0,
541 h->cv,h->c_stride); 541 ff_cavs_chroma_qp[h->qp],h->cv,h->c_stride);
542 } 542 }
543 543
544 static inline int decode_residual_inter(AVSContext *h) { 544 static inline int decode_residual_inter(AVSContext *h) {
545 int block; 545 int block;
546 546
555 /* get quantizer */ 555 /* get quantizer */
556 if(h->cbp && !h->qp_fixed) 556 if(h->cbp && !h->qp_fixed)
557 h->qp = (h->qp + get_se_golomb(&h->s.gb)) & 63; 557 h->qp = (h->qp + get_se_golomb(&h->s.gb)) & 63;
558 for(block=0;block<4;block++) 558 for(block=0;block<4;block++)
559 if(h->cbp & (1<<block)) 559 if(h->cbp & (1<<block))
560 decode_residual_block(h,&h->s.gb,inter_dec,0,h->qp, 560 decode_residual_block(h,&h->s.gb,ff_cavs_inter_dec,0,h->qp,
561 h->cy + h->luma_scan[block], h->l_stride); 561 h->cy + h->luma_scan[block], h->l_stride);
562 decode_residual_chroma(h); 562 decode_residual_chroma(h);
563 563
564 return 0; 564 return 0;
565 } 565 }
580 init_mb(h); 580 init_mb(h);
581 581
582 /* get intra prediction modes from stream */ 582 /* get intra prediction modes from stream */
583 for(block=0;block<4;block++) { 583 for(block=0;block<4;block++) {
584 int nA,nB,predpred; 584 int nA,nB,predpred;
585 int pos = scan3x3[block]; 585 int pos = ff_cavs_scan3x3[block];
586 586
587 nA = h->pred_mode_Y[pos-1]; 587 nA = h->pred_mode_Y[pos-1];
588 nB = h->pred_mode_Y[pos-3]; 588 nB = h->pred_mode_Y[pos-3];
589 predpred = FFMIN(nA,nB); 589 predpred = FFMIN(nA,nB);
590 if(predpred == NOT_AVAIL) // if either is not available 590 if(predpred == NOT_AVAIL) // if either is not available
615 615
616 /* luma intra prediction interleaved with residual decode/transform/add */ 616 /* luma intra prediction interleaved with residual decode/transform/add */
617 for(block=0;block<4;block++) { 617 for(block=0;block<4;block++) {
618 d = h->cy + h->luma_scan[block]; 618 d = h->cy + h->luma_scan[block];
619 load_intra_pred_luma(h, top, &left, block); 619 load_intra_pred_luma(h, top, &left, block);
620 h->intra_pred_l[h->pred_mode_Y[scan3x3[block]]] 620 h->intra_pred_l[h->pred_mode_Y[ff_cavs_scan3x3[block]]]
621 (d, top, left, h->l_stride); 621 (d, top, left, h->l_stride);
622 if(h->cbp & (1<<block)) 622 if(h->cbp & (1<<block))
623 decode_residual_block(h,gb,intra_dec,1,h->qp,d,h->l_stride); 623 decode_residual_block(h,gb,ff_cavs_intra_dec,1,h->qp,d,h->l_stride);
624 } 624 }
625 625
626 /* chroma intra prediction */ 626 /* chroma intra prediction */
627 load_intra_pred_chroma(h); 627 load_intra_pred_chroma(h);
628 h->intra_pred_c[pred_mode_uv](h->cu, &h->top_border_u[h->mbx*10], 628 h->intra_pred_c[pred_mode_uv](h->cu, &h->top_border_u[h->mbx*10],
750 MV_PRED_MEDIAN, BLK_8X8, 0); 750 MV_PRED_MEDIAN, BLK_8X8, 0);
751 } 751 }
752 break; 752 break;
753 default: 753 default:
754 assert((mb_type > B_SYM_16X16) && (mb_type < B_8X8)); 754 assert((mb_type > B_SYM_16X16) && (mb_type < B_8X8));
755 flags = partition_flags[mb_type]; 755 flags = ff_cavs_partition_flags[mb_type];
756 if(mb_type & 1) { /* 16x8 macroblock types */ 756 if(mb_type & 1) { /* 16x8 macroblock types */
757 if(flags & FWD0) 757 if(flags & FWD0)
758 ff_cavs_mv(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1); 758 ff_cavs_mv(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1);
759 if(flags & SYM0) 759 if(flags & SYM0)
760 mv_pred_sym(h, &h->mv[MV_FWD_X0], BLK_16X8); 760 mv_pred_sym(h, &h->mv[MV_FWD_X0], BLK_16X8);