comparison rv34.c @ 11431:da870c6f71ce libavcodec

Check for reference frames so RV 3/4 won't segfault trying to copy data from nonexisting reference.
author kostya
date Tue, 09 Mar 2010 07:14:34 +0000
parents 93f1f9d9d847
children 1a7d902e33ac
comparison
equal deleted inserted replaced
11430:b1b2215cb7c7 11431:da870c6f71ce
1450 init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, 0), buf_size-get_slice_offset(avctx, slices_hdr, 0)); 1450 init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, 0), buf_size-get_slice_offset(avctx, slices_hdr, 0));
1451 if(r->parse_slice_header(r, &r->s.gb, &si) < 0 || si.start){ 1451 if(r->parse_slice_header(r, &r->s.gb, &si) < 0 || si.start){
1452 av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n"); 1452 av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n");
1453 return -1; 1453 return -1;
1454 } 1454 }
1455 if((!s->last_picture_ptr || !s->last_picture_ptr->data[0]) && si.type == FF_P_TYPE)
1456 return -1;
1455 if((!s->last_picture_ptr || !s->last_picture_ptr->data[0]) && si.type == FF_B_TYPE) 1457 if((!s->last_picture_ptr || !s->last_picture_ptr->data[0]) && si.type == FF_B_TYPE)
1458 return -1;
1459 if((!s->next_picture_ptr || !s->next_picture_ptr->data[0]) && si.type == FF_B_TYPE)
1456 return -1; 1460 return -1;
1457 /* skip b frames if we are in a hurry */ 1461 /* skip b frames if we are in a hurry */
1458 if(avctx->hurry_up && si.type==FF_B_TYPE) return buf_size; 1462 if(avctx->hurry_up && si.type==FF_B_TYPE) return buf_size;
1459 if( (avctx->skip_frame >= AVDISCARD_NONREF && si.type==FF_B_TYPE) 1463 if( (avctx->skip_frame >= AVDISCARD_NONREF && si.type==FF_B_TYPE)
1460 || (avctx->skip_frame >= AVDISCARD_NONKEY && si.type!=FF_I_TYPE) 1464 || (avctx->skip_frame >= AVDISCARD_NONKEY && si.type!=FF_I_TYPE)