From: Stefan Dietzel Date: Tue, 6 Aug 2019 09:17:15 +0000 (+0200) Subject: Fixed bad quality for vaapi transcoding h264 and hevc with bitrate X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c767042262eeeac2b416bad2905cdd3697b5378e;p=thirdparty%2Ftvheadend.git Fixed bad quality for vaapi transcoding h264 and hevc with bitrate --- diff --git a/src/transcoding/codec/codecs/libs/vaapi.c b/src/transcoding/codec/codecs/libs/vaapi.c index fd2af241d..d2cb7a467 100644 --- a/src/transcoding/codec/codecs/libs/vaapi.c +++ b/src/transcoding/codec/codecs/libs/vaapi.c @@ -177,6 +177,9 @@ tvh_codec_profile_vaapi_h264_open(tvh_codec_profile_vaapi_t *self, // bit_rate or qp if (self->bit_rate) { AV_DICT_SET_BIT_RATE(opts, self->bit_rate); + AV_DICT_SET_INT(opts, "maxrate", (self->bit_rate) * 1000, AV_DICT_DONT_OVERWRITE); + AV_DICT_SET_INT(opts, "bufsize", ((self->bit_rate) * 1000) * 2, AV_DICT_DONT_OVERWRITE); + AV_DICT_SET(opts, "force_key_frames", "expr:gte(t,n_forced*3)", AV_DICT_DONT_OVERWRITE); } else { AV_DICT_SET_QP(opts, self->qp, 20); @@ -234,6 +237,9 @@ tvh_codec_profile_vaapi_hevc_open(tvh_codec_profile_vaapi_t *self, // bit_rate or qp if (self->bit_rate) { AV_DICT_SET_BIT_RATE(opts, self->bit_rate); + AV_DICT_SET_INT(opts, "maxrate", (self->bit_rate) * 1000, AV_DICT_DONT_OVERWRITE); + AV_DICT_SET_INT(opts, "bufsize", ((self->bit_rate) * 1000) * 2, AV_DICT_DONT_OVERWRITE); + AV_DICT_SET(opts, "force_key_frames", "expr:gte(t,n_forced*3)", AV_DICT_DONT_OVERWRITE); } else { AV_DICT_SET_QP(opts, self->qp, 25); @@ -241,6 +247,7 @@ tvh_codec_profile_vaapi_hevc_open(tvh_codec_profile_vaapi_t *self, // max_b_frames // XXX: remove when b-frames handling in vaapi_encode is fixed AV_DICT_SET_INT(opts, "bf", 0, 0); + return 0; }