@ -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 ;