summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-08-18 14:29:47 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-23 13:57:27 +0000
commit33c6d336f1f5b8141b4f787711bcd01a9a915c74 (patch)
treea575eab68e650f7f879d3d9ccc82a15e0164c95b
parentba7e0310a742aee9e3b1c6aadcae3c5c375a2073 (diff)
Apply openh264 encoder settings
Change-Id: If557d27fc82cdddf7db8ce2987bc18705be63c09 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars@knoll.priv.no> (cherry picked from commit cca6b9a873fde44e93c52ffd14a8322cc29971b4) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegencoderoptions.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegencoderoptions.cpp b/src/plugins/multimedia/ffmpeg/qffmpegencoderoptions.cpp
index 63b3fd15c..bd6a8e09b 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegencoderoptions.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpegencoderoptions.cpp
@@ -57,6 +57,20 @@ static int bitrateForSettings(const QMediaEncoderSettings &settings, bool hdr =
return bitrate;
}
+static void apply_openh264(const QMediaEncoderSettings &settings, AVCodecContext *codec,
+ AVDictionary **opts)
+{
+ if (settings.encodingMode() == QMediaRecorder::ConstantBitRateEncoding
+ || settings.encodingMode() == QMediaRecorder::AverageBitRateEncoding) {
+ codec->bit_rate = settings.videoBitRate();
+ av_dict_set(opts, "rc_mode", "bitrate", 0);
+ } else {
+ av_dict_set(opts, "rc_mode", "quality", 0);
+ static const int q[] = { 51, 48, 38, 25, 5 };
+ codec->qmax = codec->qmin = q[settings.quality()];
+ }
+}
+
static void apply_x264(const QMediaEncoderSettings &settings, AVCodecContext *codec, AVDictionary **opts)
{
if (settings.encodingMode() == QMediaRecorder::ConstantBitRateEncoding || settings.encodingMode() == QMediaRecorder::AverageBitRateEncoding) {
@@ -275,6 +289,7 @@ const struct {
{ "libx265xx", apply_x265 },
{ "libvpx", apply_libvpx },
{ "libvpx_vp9", apply_libvpx },
+ { "libopenh264", apply_openh264 },
{ "h264_nvenc", apply_nvenc },
{ "hevc_nvenc", apply_nvenc },
{ "av1_nvenc", apply_nvenc },