]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Fixed bad quality for vaapi transcoding h264 and hevc with bitrate
authorStefan Dietzel <ovaron@myovaron.de>
Tue, 6 Aug 2019 09:17:15 +0000 (11:17 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 15 Oct 2019 12:03:42 +0000 (14:03 +0200)
src/transcoding/codec/codecs/libs/vaapi.c

index fd2af241d7e607a453f34effe4bf855fdf8ebae2..d2cb7a467a4467c0ccaa53929ac668dbc46b67df 100644 (file)
@@ -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;
 }