@ -454,6 +454,9 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
* got_picture_ptr = p - > got_frame ;
* got_picture_ptr = p - > got_frame ;
picture - > pkt_dts = p - > avpkt . dts ;
picture - > pkt_dts = p - > avpkt . dts ;
if ( p - > result < 0 )
err = p - > result ;
/*
/*
* A later call with avkpt - > size = = 0 may loop over all threads ,
* A later call with avkpt - > size = = 0 may loop over all threads ,
* including this one , searching for a frame to return before being
* including this one , searching for a frame to return before being
@ -471,6 +474,14 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
fctx - > next_finished = finished ;
fctx - > next_finished = finished ;
/*
* When no frame was found while flushing , but an error occured in
* any thread , return it instead of 0.
* Otherwise the error can get lost .
*/
if ( ! avpkt - > size & & ! * got_picture_ptr )
return err ;
/* return the size of the consumed packet if no error occurred */
/* return the size of the consumed packet if no error occurred */
return ( p - > result > = 0 ) ? avpkt - > size : p - > result ;
return ( p - > result > = 0 ) ? avpkt - > size : p - > result ;
}
}