diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 65c17bc37..e66cb30f3 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -961,6 +961,7 @@ Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are you sure you want to use los Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warning!" Basic.Settings.Output.Simple.Encoder.Software="Software (x264)" Basic.Settings.Output.Simple.Encoder.Hardware.QSV.H264="Hardware (QSV, H.264)" +Basic.Settings.Output.Simple.Encoder.Hardware.QSV.AV1="Hardware (QSV, AV1)" Basic.Settings.Output.Simple.Encoder.Hardware.AMD.H264="Hardware (AMD, H.264)" Basic.Settings.Output.Simple.Encoder.Hardware.AMD.HEVC="Hardware (AMD, HEVC)" Basic.Settings.Output.Simple.Encoder.Hardware.AMD.AV1="Hardware (AMD, AV1)" diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 33509e127..6a0985419 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -288,7 +288,7 @@ struct SimpleOutput : BasicOutputHandler { int CalcCRF(int crf); void UpdateRecordingSettings_x264_crf(int crf); - void UpdateRecordingSettings_qsv11(int crf); + void UpdateRecordingSettings_qsv11(int crf, bool av1); void UpdateRecordingSettings_nvenc(int cqp); void UpdateRecordingSettings_nvenc_hevc_av1(int cqp); void UpdateRecordingSettings_amd_cqp(int cqp); @@ -371,6 +371,8 @@ const char *get_simple_output_encoder(const char *encoder) return "obs_x264"; } else if (strcmp(encoder, SIMPLE_ENCODER_QSV) == 0) { return "obs_qsv11_v2"; + } else if (strcmp(encoder, SIMPLE_ENCODER_QSV_AV1) == 0) { + return "obs_qsv11_av1"; } else if (strcmp(encoder, SIMPLE_ENCODER_AMD) == 0) { return "h264_texture_amf"; #ifdef ENABLE_HEVC @@ -535,6 +537,9 @@ void SimpleOutput::Update() if (strcmp(encoder, SIMPLE_ENCODER_QSV) == 0) { presetType = "QSVPreset"; + } else if (strcmp(encoder, SIMPLE_ENCODER_QSV_AV1) == 0) { + presetType = "QSVPreset"; + } else if (strcmp(encoder, SIMPLE_ENCODER_AMD) == 0) { presetType = "AMDPreset"; @@ -665,14 +670,14 @@ static bool icq_available(obs_encoder_t *encoder) return icq_found; } -void SimpleOutput::UpdateRecordingSettings_qsv11(int crf) +void SimpleOutput::UpdateRecordingSettings_qsv11(int crf, bool av1) { bool icq = icq_available(videoRecording); OBSDataAutoRelease settings = obs_data_create(); obs_data_set_string(settings, "profile", "high"); - if (icq) { + if (icq && !av1) { obs_data_set_string(settings, "rate_control", "ICQ"); obs_data_set_int(settings, "icq_quality", crf); } else { @@ -744,7 +749,10 @@ void SimpleOutput::UpdateRecordingSettings() UpdateRecordingSettings_x264_crf(crf); } else if (videoEncoder == SIMPLE_ENCODER_QSV) { - UpdateRecordingSettings_qsv11(crf); + UpdateRecordingSettings_qsv11(crf, false); + + } else if (videoEncoder == SIMPLE_ENCODER_QSV_AV1) { + UpdateRecordingSettings_qsv11(crf, true); } else if (videoEncoder == SIMPLE_ENCODER_AMD) { UpdateRecordingSettings_amd_cqp(crf); diff --git a/UI/window-basic-main-profiles.cpp b/UI/window-basic-main-profiles.cpp index 384369f38..4941359ea 100644 --- a/UI/window-basic-main-profiles.cpp +++ b/UI/window-basic-main-profiles.cpp @@ -822,6 +822,7 @@ void OBSBasic::CheckForSimpleModeX264Fallback() const char *curRecEncoder = config_get_string(basicConfig, "SimpleOutput", "RecEncoder"); bool qsv_supported = false; + bool qsv_av1_supported = false; bool amd_supported = false; bool nve_supported = false; #ifdef ENABLE_HEVC @@ -840,6 +841,8 @@ void OBSBasic::CheckForSimpleModeX264Fallback() amd_supported = true; else if (strcmp(id, "obs_qsv11") == 0) qsv_supported = true; + else if (strcmp(id, "obs_qsv11_av1") == 0) + qsv_av1_supported = true; else if (strcmp(id, "ffmpeg_nvenc") == 0) nve_supported = true; #ifdef ENABLE_HEVC @@ -869,6 +872,12 @@ void OBSBasic::CheckForSimpleModeX264Fallback() name = SIMPLE_ENCODER_X264; return false; } + } else if (strcmp(name, SIMPLE_ENCODER_QSV_AV1) == 0) { + if (!qsv_av1_supported) { + changed = true; + name = SIMPLE_ENCODER_X264; + return false; + } } else if (strcmp(name, SIMPLE_ENCODER_NVENC) == 0) { if (!nve_supported) { changed = true; diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 9dab98cbc..158e27485 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -65,6 +65,7 @@ class OBSBasicStats; #define SIMPLE_ENCODER_X264 "x264" #define SIMPLE_ENCODER_X264_LOWCPU "x264_lowcpu" #define SIMPLE_ENCODER_QSV "qsv" +#define SIMPLE_ENCODER_QSV_AV1 "qsv_av1" #define SIMPLE_ENCODER_NVENC "nvenc" #define SIMPLE_ENCODER_NVENC_AV1 "nvenc_av1" #define SIMPLE_ENCODER_NVENC_HEVC "nvenc_hevc" diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index a3be78a77..020121ca4 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1411,6 +1411,10 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.QSV.H264"), QString(SIMPLE_ENCODER_QSV)); + if (service_supports_encoder(codecs, "obs_qsv11_av1")) + ui->simpleOutStrEncoder->addItem( + ENCODER_STR("Hardware.QSV.AV1"), + QString(SIMPLE_ENCODER_QSV_AV1)); if (service_supports_encoder(codecs, "ffmpeg_nvenc")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.NVENC.H264"), diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index cfdb76e09..f0c73ba71 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -3575,6 +3575,8 @@ void OBSBasicSettings::SaveOutputSettings() if (encoder == SIMPLE_ENCODER_QSV) presetType = "QSVPreset"; + else if (encoder == SIMPLE_ENCODER_QSV_AV1) + presetType = "QSVPreset"; else if (encoder == SIMPLE_ENCODER_NVENC) presetType = "NVENCPreset2"; else if (encoder == SIMPLE_ENCODER_NVENC_AV1) @@ -4857,6 +4859,10 @@ void OBSBasicSettings::FillSimpleRecordingValues() ui->simpleOutRecEncoder->addItem( ENCODER_STR("Hardware.QSV.H264"), QString(SIMPLE_ENCODER_QSV)); + if (EncoderAvailable("obs_qsv11_av1")) + ui->simpleOutRecEncoder->addItem( + ENCODER_STR("Hardware.QSV.AV1"), + QString(SIMPLE_ENCODER_QSV_AV1)); if (EncoderAvailable("ffmpeg_nvenc")) ui->simpleOutRecEncoder->addItem( ENCODER_STR("Hardware.NVENC.H264"), @@ -4952,7 +4958,8 @@ void OBSBasicSettings::SimpleStreamingEncoderChanged() ui->simpleOutPreset->setVisible(true); ui->simpleOutPreset->clear(); - if (encoder == SIMPLE_ENCODER_QSV) { + if (encoder == SIMPLE_ENCODER_QSV || + encoder == SIMPLE_ENCODER_QSV_AV1) { ui->simpleOutPreset->addItem("speed", "speed"); ui->simpleOutPreset->addItem("balanced", "balanced"); ui->simpleOutPreset->addItem("quality", "quality");