UI: Add QSV AV1 to simple output mode

This commit is contained in:
Jim 2022-11-21 17:56:05 -08:00
parent 3c4f9f18c7
commit 00078a6a73
6 changed files with 35 additions and 5 deletions

View file

@ -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)"

View file

@ -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);

View file

@ -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;

View file

@ -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"

View file

@ -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"),

View file

@ -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");