@ -692,31 +692,32 @@ static inline void cx_pktcpy(struct FrameListData *dst,
* @ return a negative AVERROR on error
*/
static int storeframe ( AVCodecContext * avctx , struct FrameListData * cx_frame ,
AVPacket * pkt , AVFrame * coded_frame )
AVPacket * pkt )
{
int ret = ff_alloc_packet2 ( avctx , pkt , cx_frame - > sz ) ;
uint8_t * side_data ;
if ( ret > = 0 ) {
memcpy ( pkt - > data , cx_frame - > buf , pkt - > size ) ;
pkt - > pts = pkt - > dts = cx_frame - > pts ;
coded_frame - > pts = cx_frame - > pts ;
coded_frame - > key_frame = ! ! ( cx_frame - > flags & VPX_FRAME_IS_KEY ) ;
pkt - > pts = pkt - > dts = cx_frame - > pts ;
avctx - > coded_frame - > pts = cx_frame - > pts ;
avctx - > coded_frame - > key_frame = ! ! ( cx_frame - > flags & VPX_FRAME_IS_KEY ) ;
if ( coded_frame - > key_frame ) {
coded_frame - > pict_type = AV_PICTURE_TYPE_I ;
pkt - > flags | = AV_PKT_FLAG_KEY ;
} else
coded_frame - > pict_type = AV_PICTURE_TYPE_P ;
if ( ! ! ( cx_frame - > flags & VPX_FRAME_IS_KEY ) ) {
avctx - > coded_frame - > pict_type = AV_PICTURE_TYPE_I ;
pkt - > flags | = AV_PKT_FLAG_KEY ;
} else {
avctx - > coded_frame - > pict_type = AV_PICTURE_TYPE_P ;
}
if ( cx_frame - > have_sse ) {
int i ;
/* Beware of the Y/U/V/all order! */
coded_frame - > error [ 0 ] = cx_frame - > sse [ 1 ] ;
coded_frame - > error [ 1 ] = cx_frame - > sse [ 2 ] ;
coded_frame - > error [ 2 ] = cx_frame - > sse [ 3 ] ;
coded_frame - > error [ 3 ] = 0 ; // alpha
avctx - > coded_frame - > error [ 0 ] = cx_frame - > sse [ 1 ] ;
avctx - > coded_frame - > error [ 1 ] = cx_frame - > sse [ 2 ] ;
avctx - > coded_frame - > error [ 2 ] = cx_frame - > sse [ 3 ] ;
avctx - > coded_frame - > error [ 3 ] = 0 ; // alpha
for ( i = 0 ; i < 4 ; + + i ) {
avctx - > error [ i ] + = coded_frame - > error [ i ] ;
avctx - > error [ i ] + = avctx - > coded_frame - > error [ i ] ;
}
cx_frame - > have_sse = 0 ;
}
@ -746,8 +747,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
* @ return AVERROR ( EINVAL ) on output size error
* @ return AVERROR ( ENOMEM ) on coded frame queue data allocation error
*/
static int queue_frames ( AVCodecContext * avctx , AVPacket * pkt_out ,
AVFrame * coded_frame )
static int queue_frames ( AVCodecContext * avctx , AVPacket * pkt_out )
{
VP8Context * ctx = avctx - > priv_data ;
const struct vpx_codec_cx_pkt * pkt ;
@ -759,7 +759,7 @@ static int queue_frames(AVCodecContext *avctx, AVPacket *pkt_out,
if ( ctx - > coded_frame_list ) {
struct FrameListData * cx_frame = ctx - > coded_frame_list ;
/* return the leading frame if we've already begun queueing */
size = storeframe ( avctx , cx_frame , pkt_out , coded_frame ) ;
size = storeframe ( avctx , cx_frame , pkt_out ) ;
if ( size < 0 )
return size ;
ctx - > coded_frame_list = cx_frame - > next ;
@ -780,7 +780,7 @@ static int queue_frames(AVCodecContext *avctx, AVPacket *pkt_out,
provided a frame for output */
av_assert0 ( ! ctx - > coded_frame_list ) ;
cx_pktcpy ( & cx_frame , pkt , pkt_alpha , ctx ) ;
size = storeframe ( avctx , & cx_frame , pkt_out , coded_frame ) ;
size = storeframe ( avctx , & cx_frame , pkt_out ) ;
if ( size < 0 )
return size ;
} else {
@ -907,7 +907,7 @@ static int vp8_encode(AVCodecContext *avctx, AVPacket *pkt,
}
}
coded_size = queue_frames ( avctx , pkt , avctx - > coded_frame ) ;
coded_size = queue_frames ( avctx , pkt ) ;
if ( ! frame & & avctx - > flags & CODEC_FLAG_PASS1 ) {
unsigned int b64_size = AV_BASE64_SIZE ( ctx - > twopass_stats . sz ) ;