Mercurial > libavcodec.hg
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]= |