@ -158,36 +158,15 @@ static int avfmt2_num_planes(int avfmt)
}
}
static int X264_frame ( AVCodecContext * ctx , AVPacket * pkt , const AVFrame * frame ,
int * got_packet )
static void reconfig_encoder ( AVCodecContext * ctx , const AVFrame * frame )
{
X264Context * x4 = ctx - > priv_data ;
x264_nal_t * nal ;
int nnal , i , ret ;
x264_picture_t pic_out = { 0 } ;
AVFrameSideData * side_data ;
x264_picture_init ( & x4 - > pic ) ;
x4 - > pic . img . i_csp = x4 - > params . i_csp ;
if ( x264_bit_depth > 8 )
x4 - > pic . img . i_csp | = X264_CSP_HIGH_DEPTH ;
x4 - > pic . img . i_plane = avfmt2_num_planes ( ctx - > pix_fmt ) ;
if ( frame ) {
for ( i = 0 ; i < x4 - > pic . img . i_plane ; i + + ) {
x4 - > pic . img . plane [ i ] = frame - > data [ i ] ;
x4 - > pic . img . i_stride [ i ] = frame - > linesize [ i ] ;
}
x4 - > pic . i_pts = frame - > pts ;
x4 - > pic . i_type =
frame - > pict_type = = AV_PICTURE_TYPE_I ? X264_TYPE_KEYFRAME :
frame - > pict_type = = AV_PICTURE_TYPE_P ? X264_TYPE_P :
frame - > pict_type = = AV_PICTURE_TYPE_B ? X264_TYPE_B :
X264_TYPE_AUTO ;
if ( x4 - > avcintra_class < 0 ) {
if ( x4 - > params . b_interlaced & & x4 - > params . b_tff ! = frame - > top_field_first ) {
x4 - > params . b_tff = frame - > top_field_first ;
x264_encoder_reconfig ( x4 - > enc , & x4 - > params ) ;
}
@ -267,6 +246,36 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
}
}
}
static int X264_frame ( AVCodecContext * ctx , AVPacket * pkt , const AVFrame * frame ,
int * got_packet )
{
X264Context * x4 = ctx - > priv_data ;
x264_nal_t * nal ;
int nnal , i , ret ;
x264_picture_t pic_out = { 0 } ;
x264_picture_init ( & x4 - > pic ) ;
x4 - > pic . img . i_csp = x4 - > params . i_csp ;
if ( x264_bit_depth > 8 )
x4 - > pic . img . i_csp | = X264_CSP_HIGH_DEPTH ;
x4 - > pic . img . i_plane = avfmt2_num_planes ( ctx - > pix_fmt ) ;
if ( frame ) {
for ( i = 0 ; i < x4 - > pic . img . i_plane ; i + + ) {
x4 - > pic . img . plane [ i ] = frame - > data [ i ] ;
x4 - > pic . img . i_stride [ i ] = frame - > linesize [ i ] ;
}
x4 - > pic . i_pts = frame - > pts ;
x4 - > pic . i_type =
frame - > pict_type = = AV_PICTURE_TYPE_I ? X264_TYPE_KEYFRAME :
frame - > pict_type = = AV_PICTURE_TYPE_P ? X264_TYPE_P :
frame - > pict_type = = AV_PICTURE_TYPE_B ? X264_TYPE_B :
X264_TYPE_AUTO ;
reconfig_encoder ( ctx , frame ) ;
}
do {
if ( x264_encoder_encode ( x4 - > enc , & nal , & nnal , frame ? & x4 - > pic : NULL , & pic_out ) < 0 )
return AVERROR_EXTERNAL ;