Restructure dummy frame allocation.
New code also allocates a dummy frame for an p field after an i field, previously that could segfault due to reading from NULL+x. Originally committed as revision 20653 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
729ef3ba62
commit
d9b99556bf
@ -2371,14 +2371,8 @@ static int decode_chunks(AVCodecContext *avctx,
|
||||
if(s2->last_picture_ptr==NULL){
|
||||
/* Skip B-frames if we do not have reference frames and gop is not closed */
|
||||
if(s2->pict_type==FF_B_TYPE){
|
||||
int i;
|
||||
if(!s2->closed_gop)
|
||||
break;
|
||||
/* Allocate a dummy frame */
|
||||
i= ff_find_unused_picture(s2, 0);
|
||||
s2->last_picture_ptr= &s2->picture[i];
|
||||
if(ff_alloc_picture(s2, s2->last_picture_ptr, 0) < 0)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if(s2->next_picture_ptr==NULL){
|
||||
@ -2416,6 +2410,25 @@ static int decode_chunks(AVCodecContext *avctx,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(s2->last_picture_ptr==NULL && s2->pict_type!=FF_I_TYPE){
|
||||
int i;
|
||||
/* Allocate a dummy frame */
|
||||
i= ff_find_unused_picture(s2, 0);
|
||||
s2->last_picture_ptr= &s2->picture[i];
|
||||
if(ff_alloc_picture(s2, s2->last_picture_ptr, 0) < 0)
|
||||
return -1;
|
||||
s2->last_picture= *s2->last_picture_ptr;
|
||||
}
|
||||
if(s2->next_picture_ptr==NULL && s2->pict_type==FF_B_TYPE){
|
||||
int i;
|
||||
/* Allocate a dummy frame */
|
||||
i= ff_find_unused_picture(s2, 0);
|
||||
s2->next_picture_ptr= &s2->picture[i];
|
||||
if(ff_alloc_picture(s2, s2->next_picture_ptr, 0) < 0)
|
||||
return -1;
|
||||
s2->next_picture= *s2->next_picture_ptr;
|
||||
}
|
||||
|
||||
if (avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) {
|
||||
s->slice_count++;
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user