@ -646,7 +646,13 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
{
libx265Context * ctx = avctx - > priv_data ;
x265_picture x265pic ;
x265_picture x265pic_out = { 0 } ;
# if X265_BUILD >= 210
x265_picture x265pic_layers_out [ MAX_SCALABLE_LAYERS ] ;
x265_picture * x265pic_lyrptr_out [ MAX_SCALABLE_LAYERS ] ;
# else
x265_picture x265pic_solo_out = { 0 } ;
# endif
x265_picture * x265pic_out ;
x265_nal * nal ;
x265_sei * sei ;
uint8_t * dst ;
@ -764,8 +770,16 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
}
}
# if X265_BUILD >= 210
for ( i = 0 ; i < MAX_SCALABLE_LAYERS ; i + + )
x265pic_lyrptr_out [ i ] = & x265pic_layers_out [ i ] ;
ret = ctx - > api - > encoder_encode ( ctx - > encoder , & nal , & nnal ,
pic ? & x265pic : NULL , x265pic_lyrptr_out ) ;
# else
ret = ctx - > api - > encoder_encode ( ctx - > encoder , & nal , & nnal ,
pic ? & x265pic : NULL , & x265pic_out ) ;
pic ? & x265pic : NULL , & x265pic_solo_out ) ;
# endif
for ( i = 0 ; i < sei - > numPayloads ; i + + )
av_free ( sei - > payloads [ i ] . payload ) ;
@ -795,10 +809,16 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
pkt - > flags | = AV_PKT_FLAG_KEY ;
}
pkt - > pts = x265pic_out . pts ;
pkt - > dts = x265pic_out . dts ;
# if X265_BUILD >= 210
x265pic_out = x265pic_lyrptr_out [ 0 ] ;
# else
x265pic_out = & x265pic_solo_out ;
# endif
pkt - > pts = x265pic_out - > pts ;
pkt - > dts = x265pic_out - > dts ;
switch ( x265pic_out . sliceType ) {
switch ( x265pic_out - > sliceType ) {
case X265_TYPE_IDR :
case X265_TYPE_I :
pict_type = AV_PICTURE_TYPE_I ;
@ -816,16 +836,16 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
}
# if X265_BUILD >= 130
if ( x265pic_out . sliceType = = X265_TYPE_B )
if ( x265pic_out - > sliceType = = X265_TYPE_B )
# else
if ( x265pic_out . frameData . sliceType = = ' b ' )
if ( x265pic_out - > frameData . sliceType = = ' b ' )
# endif
pkt - > flags | = AV_PKT_FLAG_DISPOSABLE ;
ff_side_data_set_encoder_stats ( pkt , x265pic_out . frameData . qp * FF_QP2LAMBDA , NULL , 0 , pict_type ) ;
ff_side_data_set_encoder_stats ( pkt , x265pic_out - > frameData . qp * FF_QP2LAMBDA , NULL , 0 , pict_type ) ;
if ( x265pic_out . userData ) {
int idx = ( int ) ( intptr_t ) x265pic_out . userData - 1 ;
if ( x265pic_out - > userData ) {
int idx = ( int ) ( intptr_t ) x265pic_out - > userData - 1 ;
ReorderedData * rd = & ctx - > rd [ idx ] ;
pkt - > duration = rd - > duration ;