comparison h264.c @ 7533:e61de3e409eb libavcodec

Simplify constrained_intra_pred code in fill_caches().
author michael
date Mon, 11 Aug 2008 02:52:14 +0000
parents c4de4b187b4f
children 4891fe700813
comparison
equal deleted inserted replaced
7532:c4de4b187b4f 7533:e61de3e409eb
205 left_type[0] = h->slice_table[left_xy[0] ] == h->slice_num ? s->current_picture.mb_type[left_xy[0]] : 0; 205 left_type[0] = h->slice_table[left_xy[0] ] == h->slice_num ? s->current_picture.mb_type[left_xy[0]] : 0;
206 left_type[1] = h->slice_table[left_xy[1] ] == h->slice_num ? s->current_picture.mb_type[left_xy[1]] : 0; 206 left_type[1] = h->slice_table[left_xy[1] ] == h->slice_num ? s->current_picture.mb_type[left_xy[1]] : 0;
207 } 207 }
208 208
209 if(IS_INTRA(mb_type)){ 209 if(IS_INTRA(mb_type)){
210 int type_mask= h->pps.constrained_intra_pred ? IS_INTRA(-1) : -1;
210 h->topleft_samples_available= 211 h->topleft_samples_available=
211 h->top_samples_available= 212 h->top_samples_available=
212 h->left_samples_available= 0xFFFF; 213 h->left_samples_available= 0xFFFF;
213 h->topright_samples_available= 0xEEEA; 214 h->topright_samples_available= 0xEEEA;
214 215
215 if(!IS_INTRA(top_type) && (top_type==0 || h->pps.constrained_intra_pred)){ 216 if(!(top_type & type_mask)){
216 h->topleft_samples_available= 0xB3FF; 217 h->topleft_samples_available= 0xB3FF;
217 h->top_samples_available= 0x33FF; 218 h->top_samples_available= 0x33FF;
218 h->topright_samples_available= 0x26EA; 219 h->topright_samples_available= 0x26EA;
219 } 220 }
220 if(IS_INTERLACED(mb_type) != IS_INTERLACED(left_type[0])){ 221 if(IS_INTERLACED(mb_type) != IS_INTERLACED(left_type[0])){
221 if(IS_INTERLACED(mb_type)){ 222 if(IS_INTERLACED(mb_type)){
222 if(!IS_INTRA(left_type[0]) && (left_type[0]==0 || h->pps.constrained_intra_pred)){ 223 if(!(left_type[0] & type_mask)){
223 h->topleft_samples_available&= 0xDFFF; 224 h->topleft_samples_available&= 0xDFFF;
224 h->left_samples_available&= 0x5FFF; 225 h->left_samples_available&= 0x5FFF;
225 } 226 }
226 if(!IS_INTRA(left_type[1]) && (left_type[1]==0 || h->pps.constrained_intra_pred)){ 227 if(!(left_type[1] & type_mask)){
227 h->topleft_samples_available&= 0xFF5F; 228 h->topleft_samples_available&= 0xFF5F;
228 h->left_samples_available&= 0xFF5F; 229 h->left_samples_available&= 0xFF5F;
229 } 230 }
230 }else{ 231 }else{
231 int left_typei = h->slice_table[left_xy[0] + s->mb_stride ] == h->slice_num 232 int left_typei = h->slice_table[left_xy[0] + s->mb_stride ] == h->slice_num
232 ? s->current_picture.mb_type[left_xy[0] + s->mb_stride] : 0; 233 ? s->current_picture.mb_type[left_xy[0] + s->mb_stride] : 0;
233 assert(left_xy[0] == left_xy[1]); 234 assert(left_xy[0] == left_xy[1]);
234 if(!(IS_INTRA(left_typei) && IS_INTRA(left_type[0])) && (left_typei==0 || h->pps.constrained_intra_pred)){ 235 if(!((left_typei & type_mask) && (left_type[0] & type_mask))){
235 h->topleft_samples_available&= 0xDF5F; 236 h->topleft_samples_available&= 0xDF5F;
236 h->left_samples_available&= 0x5F5F; 237 h->left_samples_available&= 0x5F5F;
237 } 238 }
238 } 239 }
239 }else{ 240 }else{
240 if(!IS_INTRA(left_type[0]) && (left_type[0]==0 || h->pps.constrained_intra_pred)){ 241 if(!(left_type[0] & type_mask)){
241 h->topleft_samples_available&= 0xDF5F; 242 h->topleft_samples_available&= 0xDF5F;
242 h->left_samples_available&= 0x5F5F; 243 h->left_samples_available&= 0x5F5F;
243 } 244 }
244 } 245 }
245 246
246 if(!IS_INTRA(topleft_type) && (topleft_type==0 || h->pps.constrained_intra_pred)) 247 if(!(topleft_type & type_mask))
247 h->topleft_samples_available&= 0x7FFF; 248 h->topleft_samples_available&= 0x7FFF;
248 249
249 if(!IS_INTRA(topright_type) && (topright_type==0 || h->pps.constrained_intra_pred)) 250 if(!(topright_type & type_mask))
250 h->topright_samples_available&= 0xFBFF; 251 h->topright_samples_available&= 0xFBFF;
251 252
252 if(IS_INTRA4x4(mb_type)){ 253 if(IS_INTRA4x4(mb_type)){
253 if(IS_INTRA4x4(top_type)){ 254 if(IS_INTRA4x4(top_type)){
254 h->intra4x4_pred_mode_cache[4+8*0]= h->intra4x4_pred_mode[top_xy][4]; 255 h->intra4x4_pred_mode_cache[4+8*0]= h->intra4x4_pred_mode[top_xy][4];
255 h->intra4x4_pred_mode_cache[5+8*0]= h->intra4x4_pred_mode[top_xy][5]; 256 h->intra4x4_pred_mode_cache[5+8*0]= h->intra4x4_pred_mode[top_xy][5];
256 h->intra4x4_pred_mode_cache[6+8*0]= h->intra4x4_pred_mode[top_xy][6]; 257 h->intra4x4_pred_mode_cache[6+8*0]= h->intra4x4_pred_mode[top_xy][6];
257 h->intra4x4_pred_mode_cache[7+8*0]= h->intra4x4_pred_mode[top_xy][3]; 258 h->intra4x4_pred_mode_cache[7+8*0]= h->intra4x4_pred_mode[top_xy][3];
258 }else{ 259 }else{
259 int pred; 260 int pred;
260 if(!top_type || (IS_INTER(top_type) && h->pps.constrained_intra_pred)) 261 if(!(top_type & type_mask))
261 pred= -1; 262 pred= -1;
262 else{ 263 else{
263 pred= 2; 264 pred= 2;
264 } 265 }
265 h->intra4x4_pred_mode_cache[4+8*0]= 266 h->intra4x4_pred_mode_cache[4+8*0]=
271 if(IS_INTRA4x4(left_type[i])){ 272 if(IS_INTRA4x4(left_type[i])){
272 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[0+2*i]]; 273 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[0+2*i]];
273 h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[1+2*i]]; 274 h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[1+2*i]];
274 }else{ 275 }else{
275 int pred; 276 int pred;
276 if(!left_type[i] || (IS_INTER(left_type[i]) && h->pps.constrained_intra_pred)) 277 if(!(left_type[i] & type_mask))
277 pred= -1; 278 pred= -1;
278 else{ 279 else{
279 pred= 2; 280 pred= 2;
280 } 281 }
281 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= 282 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]=