comparison cavs.c @ 3458:9bb2734f65d7 libavcodec

simplify
author michael
date Sun, 09 Jul 2006 15:20:18 +0000
parents b8faae2c5d0c
children 9ccc2eb20012
comparison
equal deleted inserted replaced
3457:ad66c11aeab4 3458:9bb2734f65d7
102 * 102 *
103 * in-loop deblocking filter 103 * in-loop deblocking filter
104 * 104 *
105 ****************************************************************************/ 105 ****************************************************************************/
106 106
107 static inline int get_bs_p(vector_t *mvP, vector_t *mvQ) { 107 static inline int get_bs(vector_t *mvP, vector_t *mvQ, int b) {
108 if((mvP->ref == REF_INTRA) || (mvQ->ref == REF_INTRA)) 108 if((mvP->ref == REF_INTRA) || (mvQ->ref == REF_INTRA))
109 return 2; 109 return 2;
110 if(mvP->ref != mvQ->ref)
111 return 1;
112 if( (abs(mvP->x - mvQ->x) >= 4) || (abs(mvP->y - mvQ->y) >= 4) ) 110 if( (abs(mvP->x - mvQ->x) >= 4) || (abs(mvP->y - mvQ->y) >= 4) )
113 return 1; 111 return 1;
114 return 0; 112 if(b){
115 } 113 mvP += MV_BWD_OFFS;
116 114 mvQ += MV_BWD_OFFS;
117 static inline int get_bs_b(vector_t *mvP, vector_t *mvQ) { 115 if( (abs(mvP->x - mvQ->x) >= 4) || (abs(mvP->y - mvQ->y) >= 4) )
118 if((mvP->ref == REF_INTRA) || (mvQ->ref == REF_INTRA)) { 116 return 1;
119 return 2; 117 }else{
120 } else { 118 if(mvP->ref != mvQ->ref)
121 vector_t *mvPbw = mvP + MV_BWD_OFFS;
122 vector_t *mvQbw = mvQ + MV_BWD_OFFS;
123 if( (abs( mvP->x - mvQ->x) >= 4) ||
124 (abs( mvP->y - mvQ->y) >= 4) ||
125 (abs(mvPbw->x - mvQbw->x) >= 4) ||
126 (abs(mvPbw->y - mvQbw->y) >= 4) )
127 return 1; 119 return 1;
128 } 120 }
129 return 0; 121 return 0;
130 } 122 }
131 123
163 h->left_border_y[i*2+1] = *(h->cy + 15 + (i*2+1)*h->l_stride); 155 h->left_border_y[i*2+1] = *(h->cy + 15 + (i*2+1)*h->l_stride);
164 h->left_border_u[i+1] = *(h->cu + 7 + i*h->c_stride); 156 h->left_border_u[i+1] = *(h->cu + 7 + i*h->c_stride);
165 h->left_border_v[i+1] = *(h->cv + 7 + i*h->c_stride); 157 h->left_border_v[i+1] = *(h->cv + 7 + i*h->c_stride);
166 } 158 }
167 if(!h->loop_filter_disable) { 159 if(!h->loop_filter_disable) {
168 /* clear bs */
169 *((uint64_t *)bs) = 0;
170 /* determine bs */ 160 /* determine bs */
171 switch(mb_type) { 161 if(mb_type == I_8X8)
172 case I_8X8:
173 *((uint64_t *)bs) = 0x0202020202020202ULL; 162 *((uint64_t *)bs) = 0x0202020202020202ULL;
174 break; 163 else{
175 case P_8X8: 164 *((uint64_t *)bs) = 0;
176 case P_8X16: 165 if(partition_flags[mb_type] & SPLITV){
177 bs[2] = get_bs_p(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1]); 166 bs[2] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1], mb_type > P_8X8);
178 bs[3] = get_bs_p(&h->mv[MV_FWD_X2], &h->mv[MV_FWD_X3]); 167 bs[3] = get_bs(&h->mv[MV_FWD_X2], &h->mv[MV_FWD_X3], mb_type > P_8X8);
179 case P_16X8:
180 bs[6] = get_bs_p(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2]);
181 bs[7] = get_bs_p(&h->mv[MV_FWD_X1], &h->mv[MV_FWD_X3]);
182 case P_16X16:
183 case P_SKIP:
184 bs[0] = get_bs_p(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0]);
185 bs[1] = get_bs_p(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2]);
186 bs[4] = get_bs_p(&h->mv[MV_FWD_B2], &h->mv[MV_FWD_X0]);
187 bs[5] = get_bs_p(&h->mv[MV_FWD_B3], &h->mv[MV_FWD_X1]);
188 break;
189 case B_SKIP:
190 case B_DIRECT:
191 case B_8X8:
192 bs[2] = get_bs_b(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1]);
193 bs[3] = get_bs_b(&h->mv[MV_FWD_X2], &h->mv[MV_FWD_X3]);
194 bs[6] = get_bs_b(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2]);
195 bs[7] = get_bs_b(&h->mv[MV_FWD_X1], &h->mv[MV_FWD_X3]);
196 case B_FWD_16X16:
197 case B_BWD_16X16:
198 case B_SYM_16X16:
199 bs[0] = get_bs_b(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0]);
200 bs[1] = get_bs_b(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2]);
201 bs[4] = get_bs_b(&h->mv[MV_FWD_B2], &h->mv[MV_FWD_X0]);
202 bs[5] = get_bs_b(&h->mv[MV_FWD_B3], &h->mv[MV_FWD_X1]);
203 break;
204 default:
205 if(mb_type & 1) { //16X8
206 bs[6] = bs[7] = get_bs_b(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2]);
207 } else { //8X16
208 bs[2] = bs[3] = get_bs_b(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X1]);
209 } 168 }
210 bs[0] = get_bs_b(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0]); 169 if(partition_flags[mb_type] & SPLITH){
211 bs[1] = get_bs_b(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2]); 170 bs[6] = get_bs(&h->mv[MV_FWD_X0], &h->mv[MV_FWD_X2], mb_type > P_8X8);
212 bs[4] = get_bs_b(&h->mv[MV_FWD_B2], &h->mv[MV_FWD_X0]); 171 bs[7] = get_bs(&h->mv[MV_FWD_X1], &h->mv[MV_FWD_X3], mb_type > P_8X8);
213 bs[5] = get_bs_b(&h->mv[MV_FWD_B3], &h->mv[MV_FWD_X1]); 172 }
173 bs[0] = get_bs(&h->mv[MV_FWD_A1], &h->mv[MV_FWD_X0], mb_type > P_8X8);
174 bs[1] = get_bs(&h->mv[MV_FWD_A3], &h->mv[MV_FWD_X2], mb_type > P_8X8);
175 bs[4] = get_bs(&h->mv[MV_FWD_B2], &h->mv[MV_FWD_X0], mb_type > P_8X8);
176 bs[5] = get_bs(&h->mv[MV_FWD_B3], &h->mv[MV_FWD_X1], mb_type > P_8X8);
214 } 177 }
215 if( *((uint64_t *)bs) ) { 178 if( *((uint64_t *)bs) ) {
216 if(h->flags & A_AVAIL) { 179 if(h->flags & A_AVAIL) {
217 qp_avg = (h->qp + h->left_qp + 1) >> 1; 180 qp_avg = (h->qp + h->left_qp + 1) >> 1;
218 SET_PARAMS; 181 SET_PARAMS;
484 qpix_op, chroma_op, mv+MV_BWD_OFFS); 447 qpix_op, chroma_op, mv+MV_BWD_OFFS);
485 } 448 }
486 } 449 }
487 450
488 static void inter_pred(AVSContext *h, enum mb_t mb_type) { 451 static void inter_pred(AVSContext *h, enum mb_t mb_type) {
489 switch(mb_type) { 452 if(partition_flags[mb_type] == 0){ // 16x16
490 case P_SKIP:
491 case P_16X16:
492 case B_FWD_16X16:
493 case B_BWD_16X16:
494 case B_SYM_16X16:
495 mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0, 453 mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0,
496 h->s.dsp.put_cavs_qpel_pixels_tab[0], 454 h->s.dsp.put_cavs_qpel_pixels_tab[0],
497 h->s.dsp.put_h264_chroma_pixels_tab[0], 455 h->s.dsp.put_h264_chroma_pixels_tab[0],
498 h->s.dsp.avg_cavs_qpel_pixels_tab[0], 456 h->s.dsp.avg_cavs_qpel_pixels_tab[0],
499 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]); 457 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]);
500 break; 458 }else{
501 default:
502 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0, 459 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0,
503 h->s.dsp.put_cavs_qpel_pixels_tab[1], 460 h->s.dsp.put_cavs_qpel_pixels_tab[1],
504 h->s.dsp.put_h264_chroma_pixels_tab[1], 461 h->s.dsp.put_h264_chroma_pixels_tab[1],
505 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 462 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
506 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]); 463 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]);
517 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4, 474 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4,
518 h->s.dsp.put_cavs_qpel_pixels_tab[1], 475 h->s.dsp.put_cavs_qpel_pixels_tab[1],
519 h->s.dsp.put_h264_chroma_pixels_tab[1], 476 h->s.dsp.put_h264_chroma_pixels_tab[1],
520 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 477 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
521 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X3]); 478 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X3]);
522 break;
523 } 479 }
524 /* set intra prediction modes to default values */ 480 /* set intra prediction modes to default values */
525 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP; 481 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP;
526 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP; 482 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP;
527 } 483 }
1100 MV_PRED_MEDIAN, BLK_8X8, 0); 1056 MV_PRED_MEDIAN, BLK_8X8, 0);
1101 } 1057 }
1102 break; 1058 break;
1103 default: 1059 default:
1104 assert((mb_type > B_SYM_16X16) && (mb_type < B_8X8)); 1060 assert((mb_type > B_SYM_16X16) && (mb_type < B_8X8));
1105 flags = b_partition_flags[(mb_type-1)>>1]; 1061 flags = partition_flags[mb_type];
1106 if(mb_type & 1) { /* 16x8 macroblock types */ 1062 if(mb_type & 1) { /* 16x8 macroblock types */
1107 if(flags & FWD0) 1063 if(flags & FWD0)
1108 mv_pred(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1); 1064 mv_pred(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1);
1109 if(flags & SYM0) { 1065 if(flags & SYM0) {
1110 mv_pred(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1); 1066 mv_pred(h, MV_FWD_X0, MV_FWD_C2, MV_PRED_TOP, BLK_16X8, 1);