@ -116,7 +116,6 @@ typedef struct PacketQueue {
typedef struct VideoPicture {
double pts ; // presentation timestamp for this picture
int64_t pos ; // byte position in file
int skip ;
SDL_Overlay * bmp ;
int width , height ; /* source height & width */
AVRational sample_aspect_ratio ;
@ -1261,7 +1260,7 @@ static void pictq_prev_picture(VideoState *is) {
VideoPicture * prevvp ;
/* update queue size and signal for the previous picture */
prevvp = & is - > pictq [ ( is - > pictq_rindex + VIDEO_PICTURE_QUEUE_SIZE - 1 ) % VIDEO_PICTURE_QUEUE_SIZE ] ;
if ( prevvp - > allocated & & ! prevvp - > skip ) {
if ( prevvp - > allocated & & prevvp - > serial = = is - > videoq . serial ) {
SDL_LockMutex ( is - > pictq_mutex ) ;
if ( is - > pictq_size < VIDEO_PICTURE_QUEUE_SIZE - 1 ) {
if ( - - is - > pictq_rindex = = - 1 )
@ -1316,7 +1315,7 @@ retry:
/* dequeue the picture */
vp = & is - > pictq [ is - > pictq_rindex ] ;
if ( vp - > skip ) {
if ( vp - > serial ! = is - > videoq . serial ) {
pictq_next_picture ( is ) ;
goto retry ;
}
@ -1619,7 +1618,6 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_
vp - > pts = pts ;
vp - > pos = pos ;
vp - > skip = 0 ;
vp - > serial = serial ;
/* now we can update the picture count */
@ -1634,7 +1632,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_
static int get_video_frame ( VideoState * is , AVFrame * frame , int64_t * pts , AVPacket * pkt , int * serial )
{
int got_picture , i ;
int got_picture ;
if ( packet_queue_get ( & is - > videoq , pkt , 1 , serial ) < 0 )
return - 1 ;
@ -1644,9 +1642,6 @@ static int get_video_frame(VideoState *is, AVFrame *frame, int64_t *pts, AVPacke
SDL_LockMutex ( is - > pictq_mutex ) ;
// Make sure there are no long delay timers (ideally we should just flush the queue but that's harder)
for ( i = 0 ; i < VIDEO_PICTURE_QUEUE_SIZE ; i + + ) {
is - > pictq [ i ] . skip = 1 ;
}
while ( is - > pictq_size & & ! is - > videoq . abort_request ) {
SDL_CondWait ( is - > pictq_cond , is - > pictq_mutex ) ;
}
@ -1815,6 +1810,7 @@ static int video_thread(void *arg)
int last_w = 0 ;
int last_h = 0 ;
enum AVPixelFormat last_format = - 2 ;
int last_serial = - 1 ;
if ( codec - > codec - > capabilities & CODEC_CAP_DR1 ) {
is - > use_dr1 = 1 ;
@ -1845,7 +1841,8 @@ static int video_thread(void *arg)
# if CONFIG_AVFILTER
if ( last_w ! = frame - > width
| | last_h ! = frame - > height
| | last_format ! = frame - > format ) {
| | last_format ! = frame - > format
| | last_serial ! = serial ) {
av_log ( NULL , AV_LOG_INFO , " Frame changed from size:%dx%d to size:%dx%d \n " ,
last_w , last_h , frame - > width , frame - > height ) ;
avfilter_graph_free ( & graph ) ;
@ -1863,6 +1860,7 @@ static int video_thread(void *arg)
last_w = frame - > width ;
last_h = frame - > height ;
last_format = frame - > format ;
last_serial = serial ;
}
frame - > pts = pts_int ;