Commit e5f097ec authored by Linjie Fu's avatar Linjie Fu Committed by Martin Storsjö

lavc/libopenh264enc: add default gop size and bit rate

It would be 200kbps bitrate with gop size = 12 by default
which generated too many IDR frames in rather low bit rate.
The quality would be poor.

Set these default values to -1 to check whether it's specified
by user explicitly.

Use 2Mbps bitrate as nvenc sugguested, and leave gop size
untouched in libopenh264.
Signed-off-by: 's avatarLinjie Fu <linjie.fu@intel.com>
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 433ece8c
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
#define SM_SIZELIMITED_SLICE SM_DYN_SLICE #define SM_SIZELIMITED_SLICE SM_DYN_SLICE
#endif #endif
#define TARGET_BITRATE_DEFAULT 2*1000*1000
typedef struct SVCContext { typedef struct SVCContext {
const AVClass *av_class; const AVClass *av_class;
ISVCEncoder *encoder; ISVCEncoder *encoder;
...@@ -132,7 +134,7 @@ FF_ENABLE_DEPRECATION_WARNINGS ...@@ -132,7 +134,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.fMaxFrameRate = 1/av_q2d(avctx->time_base); param.fMaxFrameRate = 1/av_q2d(avctx->time_base);
param.iPicWidth = avctx->width; param.iPicWidth = avctx->width;
param.iPicHeight = avctx->height; param.iPicHeight = avctx->height;
param.iTargetBitrate = avctx->bit_rate; param.iTargetBitrate = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT;
param.iMaxBitrate = FFMAX(avctx->rc_max_rate, avctx->bit_rate); param.iMaxBitrate = FFMAX(avctx->rc_max_rate, avctx->bit_rate);
param.iRCMode = RC_QUALITY_MODE; param.iRCMode = RC_QUALITY_MODE;
if (avctx->qmax >= 0) if (avctx->qmax >= 0)
...@@ -147,6 +149,7 @@ FF_ENABLE_DEPRECATION_WARNINGS ...@@ -147,6 +149,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.bEnableFrameSkip = s->skip_frames; param.bEnableFrameSkip = s->skip_frames;
param.bEnableLongTermReference = 0; param.bEnableLongTermReference = 0;
param.iLtrMarkPeriod = 30; param.iLtrMarkPeriod = 30;
if (avctx->gop_size >= 0)
param.uiIntraPeriod = avctx->gop_size; param.uiIntraPeriod = avctx->gop_size;
#if OPENH264_VER_AT_LEAST(1, 4) #if OPENH264_VER_AT_LEAST(1, 4)
param.eSpsPpsIdStrategy = CONSTANT_ID; param.eSpsPpsIdStrategy = CONSTANT_ID;
...@@ -336,6 +339,8 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ...@@ -336,6 +339,8 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
} }
static const AVCodecDefault svc_enc_defaults[] = { static const AVCodecDefault svc_enc_defaults[] = {
{ "b", "0" },
{ "g", "-1" },
{ "qmin", "-1" }, { "qmin", "-1" },
{ "qmax", "-1" }, { "qmax", "-1" },
{ NULL }, { NULL },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment