@ -157,7 +157,6 @@ typedef struct NvencContext
char * preset ;
int cbr ;
int twopass ;
int gobpattern ;
int gpu ;
} NvencContext ;
@ -595,11 +594,24 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
ctx - > encode_config . encodeCodecConfig . h264Config . maxNumRefFrames = avctx - > refs ;
}
if ( avctx - > gop_size > = 0 ) {
if ( avctx - > gop_size > 0 ) {
if ( avctx - > max_b_frames > = 0 ) {
/* 0 is intra-only, 1 is I/P only, 2 is one B Frame, 3 two B frames, and so on. */
ctx - > encode_config . frameIntervalP = avctx - > max_b_frames + 1 ;
}
ctx - > encode_config . gopLength = avctx - > gop_size ;
ctx - > encode_config . encodeCodecConfig . h264Config . idrPeriod = avctx - > gop_size ;
} else if ( avctx - > gop_size = = 0 ) {
ctx - > encode_config . frameIntervalP = 0 ;
ctx - > encode_config . gopLength = 1 ;
ctx - > encode_config . encodeCodecConfig . h264Config . idrPeriod = 1 ;
}
/* when there're b frames, set dts offset */
if ( ctx - > encode_config . frameIntervalP > = 2 )
ctx - > last_dts = - 2 ;
if ( avctx - > bit_rate > 0 )
ctx - > encode_config . rcParams . averageBitRate = avctx - > bit_rate ;
@ -669,15 +681,6 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
break ;
}
if ( ctx - > gobpattern > = 0 ) {
ctx - > encode_config . frameIntervalP = ctx - > gobpattern ;
}
// when there're b frames, set dts offset
if ( ctx - > encode_config . frameIntervalP > = 2 ) {
ctx - > last_dts = - 2 ;
}
ctx - > encode_config . encodeCodecConfig . h264Config . h264VUIParameters . colourDescriptionPresentFlag = 1 ;
ctx - > encode_config . encodeCodecConfig . h264Config . h264VUIParameters . videoSignalTypePresentFlag = 1 ;
@ -924,7 +927,7 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, AVFrame
pkt - > pts = lock_params . outputTimeStamp ;
pkt - > dts = timestamp_queue_dequeue ( & ctx - > timestamp_list ) ;
// when there're b frame(s), set dts offset
/* when there're b frame(s), set dts offset */
if ( ctx - > encode_config . frameIntervalP > = 2 )
pkt - > dts - = 1 ;
@ -1158,7 +1161,6 @@ static const AVOption options[] = {
{ " preset " , " Set the encoding preset (one of hq, hp, bd, ll, llhq, llhp, default) " , OFFSET ( preset ) , AV_OPT_TYPE_STRING , { . str = " hq " } , 0 , 0 , VE } ,
{ " cbr " , " Use cbr encoding mode " , OFFSET ( cbr ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , 1 , VE } ,
{ " 2pass " , " Use 2pass cbr encoding mode (low latency mode only) " , OFFSET ( twopass ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 1 , VE } ,
{ " goppattern " , " Specifies the GOP pattern as follows: 0: I, 1: IPP, 2: IBP, 3: IBBP " , OFFSET ( gobpattern ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 3 , VE } ,
{ " gpu " , " Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. " , OFFSET ( gpu ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , INT_MAX , VE } ,
{ NULL }
} ;