Mercurial > libavcodec.hg
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); |