diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index a05a24314..31956c42c 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -950,6 +950,7 @@ 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.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)" Basic.Settings.Output.Simple.Encoder.Hardware.NVENC.H264="Hardware (NVENC, H.264)" Basic.Settings.Output.Simple.Encoder.Hardware.NVENC.AV1="Hardware (NVENC, AV1)" Basic.Settings.Output.Simple.Encoder.Hardware.NVENC.HEVC="Hardware (NVENC, HEVC)" diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 60a097f11..26c43dc01 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -377,6 +377,8 @@ const char *get_simple_output_encoder(const char *encoder) } else if (strcmp(encoder, SIMPLE_ENCODER_AMD_HEVC) == 0) { return "h265_texture_amf"; #endif + } else if (strcmp(encoder, SIMPLE_ENCODER_AMD_AV1) == 0) { + return "av1_texture_amf"; } else if (strcmp(encoder, SIMPLE_ENCODER_NVENC) == 0) { return EncoderAvailable("jim_nvenc") ? "jim_nvenc" : "ffmpeg_nvenc"; @@ -549,6 +551,9 @@ void SimpleOutput::Update() presetType = "NVENCPreset2"; #endif + } else if (strcmp(encoder, SIMPLE_ENCODER_AMD_AV1) == 0) { + presetType = "AMDAV1Preset"; + } else if (strcmp(encoder, SIMPLE_ENCODER_NVENC_AV1) == 0) { presetType = "NVENCPreset2"; diff --git a/UI/window-basic-main-profiles.cpp b/UI/window-basic-main-profiles.cpp index f4dc8f44f..384369f38 100644 --- a/UI/window-basic-main-profiles.cpp +++ b/UI/window-basic-main-profiles.cpp @@ -829,6 +829,7 @@ void OBSBasic::CheckForSimpleModeX264Fallback() bool nve_hevc_supported = false; bool apple_hevc_supported = false; #endif + bool amd_av1_supported = false; bool apple_supported = false; bool changed = false; size_t idx = 0; @@ -847,6 +848,8 @@ void OBSBasic::CheckForSimpleModeX264Fallback() else if (strcmp(id, "ffmpeg_hevc_nvenc") == 0) nve_hevc_supported = true; #endif + else if (strcmp(id, "av1_texture_amf") == 0) + amd_av1_supported = true; else if (strcmp(id, "com.apple.videotoolbox.videoencoder.ave.avc") == 0) @@ -898,6 +901,12 @@ void OBSBasic::CheckForSimpleModeX264Fallback() name = SIMPLE_ENCODER_X264; return false; } + } else if (strcmp(name, SIMPLE_ENCODER_AMD_AV1) == 0) { + if (!amd_av1_supported) { + changed = true; + name = SIMPLE_ENCODER_X264; + return false; + } } else if (strcmp(name, SIMPLE_ENCODER_APPLE_H264) == 0) { if (!apple_supported) { changed = true; diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 54e4502f3..4def5ed32 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -70,6 +70,7 @@ class OBSBasicStats; #define SIMPLE_ENCODER_NVENC_HEVC "nvenc_hevc" #define SIMPLE_ENCODER_AMD "amd" #define SIMPLE_ENCODER_AMD_HEVC "amd_hevc" +#define SIMPLE_ENCODER_AMD_AV1 "amd_av1" #define SIMPLE_ENCODER_APPLE_H264 "apple_h264" #define SIMPLE_ENCODER_APPLE_HEVC "apple_hevc" diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 03a8ba6b4..c5cf82f91 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1729,6 +1729,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings() "NVENCPreset2"); const char *amdPreset = config_get_string(main->Config(), "SimpleOutput", "AMDPreset"); + const char *amdAV1Preset = config_get_string( + main->Config(), "SimpleOutput", "AMDAV1Preset"); const char *custom = config_get_string(main->Config(), "SimpleOutput", "x264Settings"); const char *recQual = @@ -1748,6 +1750,7 @@ void OBSBasicSettings::LoadSimpleOutputSettings() curQSVPreset = qsvPreset; curNVENCPreset = nvPreset; curAMDPreset = amdPreset; + curAMDAV1Preset = amdAV1Preset; audioBitrate = FindClosestAvailableAACBitrate(audioBitrate); @@ -3491,6 +3494,8 @@ void OBSBasicSettings::SaveOutputSettings() #endif else if (encoder == SIMPLE_ENCODER_AMD) presetType = "AMDPreset"; + else if (encoder == SIMPLE_ENCODER_AMD_AV1) + presetType = "AMDAV1Preset"; else if (encoder == SIMPLE_ENCODER_APPLE_H264 #ifdef ENABLE_HEVC || encoder == SIMPLE_ENCODER_APPLE_HEVC @@ -4776,6 +4781,10 @@ void OBSBasicSettings::FillSimpleRecordingValues() ui->simpleOutRecEncoder->addItem( ENCODER_STR("Hardware.AMD.H264"), QString(SIMPLE_ENCODER_AMD)); + if (EncoderAvailable("av1_texture_amf")) + ui->simpleOutRecEncoder->addItem( + ENCODER_STR("Hardware.AMD.AV1"), + QString(SIMPLE_ENCODER_AMD_AV1)); if (EncoderAvailable("com.apple.videotoolbox.videoencoder.ave.avc") #ifndef __aarch64__ && os_get_emulation_status() == true @@ -4892,6 +4901,15 @@ void OBSBasicSettings::SimpleStreamingEncoderChanged() ui->simpleOutAdvanced->setVisible(false); ui->simpleOutPreset->setVisible(false); ui->simpleOutPresetLabel->setVisible(false); + + } else if (encoder == SIMPLE_ENCODER_AMD_AV1) { + ui->simpleOutPreset->addItem("Speed", "speed"); + ui->simpleOutPreset->addItem("Balanced", "balanced"); + ui->simpleOutPreset->addItem("Quality", "quality"); + ui->simpleOutPreset->addItem("High Quality", "highQuality"); + + defaultPreset = "balanced"; + preset = curAMDAV1Preset; } else { #define PRESET_STR(val) \ diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 6e79fe747..c312eec89 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -146,6 +146,7 @@ private: QString curQSVPreset; QString curNVENCPreset; QString curAMDPreset; + QString curAMDAV1Preset; QString curAdvStreamEncoder; QString curAdvRecordEncoder;