summaryrefslogtreecommitdiff
path: root/libavcodec/libopenh264enc.c
diff options
context:
space:
mode:
authorLinjie Fu <linjie.fu@intel.com>2020-04-29 11:00:47 +0800
committerMartin Storsjö <martin@martin.st>2020-04-29 20:58:17 +0300
commite5f097eca78342bf34a70f4c43c61238c8ae41c2 (patch)
tree4997d798c49cca58bf2980f7282584c1c60192ca /libavcodec/libopenh264enc.c
parent433ece8c8b62e092601ee9580029ba0e6e48ff58 (diff)
downloadffmpeg-e5f097eca78342bf34a70f4c43c61238c8ae41c2.tar.gz
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: Linjie Fu <linjie.fu@intel.com> Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec/libopenh264enc.c')
-rw-r--r--libavcodec/libopenh264enc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 265eb9c941..245752d71e 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -37,6 +37,8 @@
#define SM_SIZELIMITED_SLICE SM_DYN_SLICE
#endif
+#define TARGET_BITRATE_DEFAULT 2*1000*1000
+
typedef struct SVCContext {
const AVClass *av_class;
ISVCEncoder *encoder;
@@ -132,7 +134,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.fMaxFrameRate = 1/av_q2d(avctx->time_base);
param.iPicWidth = avctx->width;
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.iRCMode = RC_QUALITY_MODE;
if (avctx->qmax >= 0)
@@ -147,7 +149,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.bEnableFrameSkip = s->skip_frames;
param.bEnableLongTermReference = 0;
param.iLtrMarkPeriod = 30;
- param.uiIntraPeriod = avctx->gop_size;
+ if (avctx->gop_size >= 0)
+ param.uiIntraPeriod = avctx->gop_size;
#if OPENH264_VER_AT_LEAST(1, 4)
param.eSpsPpsIdStrategy = CONSTANT_ID;
#else
@@ -336,6 +339,8 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
}
static const AVCodecDefault svc_enc_defaults[] = {
+ { "b", "0" },
+ { "g", "-1" },
{ "qmin", "-1" },
{ "qmax", "-1" },
{ NULL },