Ver Fonte

UI: Add AMD presets and update settings

Michael Fabian Dirks há 9 anos atrás
pai
commit
01a33edea9

+ 29 - 22
UI/window-basic-main-outputs.cpp

@@ -501,42 +501,49 @@ void SimpleOutput::UpdateRecordingSettings_nvenc(int cqp)
 void SimpleOutput::UpdateStreamingSettings_amd(obs_data_t *settings,
 		int bitrate)
 {
-	int bits = bitrate * 1000;
+	// Static Properties
 	obs_data_set_int(settings, "AMF.H264.Usage", 0);
-	obs_data_set_int(settings, "AMF.H264.QualityPreset", 2);
-	obs_data_set_int(settings, "AMF.H264.ProfileLevel", 51);
+	obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
+	obs_data_set_string(settings, "profile", "high"); // High
+	obs_data_set_int(settings, "AMF.H264.ProfileLevel", 0); // Automatic
+	
+	// Rate Control Properties
+	obs_data_set_int(settings, "AMF.H264.RateControlMethod", 1);
+	obs_data_set_string(settings, "rate_control", "CBR");
+	obs_data_set_int(settings, "AMF.H264.Bitrate.Target", bitrate);
+	obs_data_set_int(settings, "bitrate", bitrate);
 	obs_data_set_int(settings, "AMF.H264.FillerData", 1);
-	obs_data_set_int(settings, "AMF.H264.FrameSkipping", -1);
-	obs_data_set_int(settings, "AMF.H264.BPicture.Pattern", 2);
-	obs_data_set_int(settings, "AMF.H264.BPicture.Reference", 1);
-	obs_data_set_int(settings, "AMF.H264.Bitrate.Target", bits);
-	obs_data_set_int(settings, "AMF.H264.Bitrate.Peak", bits);
-	obs_data_set_int(settings, "AMF.H264Advanced.VBVBuffer.Size", bits);
-	obs_data_set_string(settings, "profile", "high");
+	obs_data_set_int(settings, "AMF.H264.VBVBuffer", 0); // Automatic VBV Buffer
+	obs_data_set_double(settings, "AMF.H264.VBVBuffer.Strictness", 0.9);
+	
+	// Picture Control Properties
+	obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
+	obs_data_set_int(settings, "keyint_sec", 2);
 }
 
 void SimpleOutput::UpdateRecordingSettings_amd_cqp(int cqp)
 {
 	obs_data_t *settings = obs_data_create();
 
+	// Static Properties
 	obs_data_set_int(settings, "AMF.H264.Usage", 0);
-	obs_data_set_int(settings, "AMF.H264.QualityPreset", 2);
-	obs_data_set_int(settings, "AMF.H264.ProfileLevel", 51);
-	obs_data_set_int(settings, "AMF.H264.FillerData", 0);
-	obs_data_set_int(settings, "AMF.H264.FrameSkipping", 0);
-	obs_data_set_int(settings, "AMF.H264.QP.Minimum", 0);
-	obs_data_set_int(settings, "AMF.H264.QP.Maximum", 51);
+	obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
+	obs_data_set_string(settings, "profile", "high"); // High
+	obs_data_set_int(settings, "AMF.H264.ProfileLevel", 0); // Automatic
+
+															// Rate Control Properties
+	obs_data_set_int(settings, "AMF.H264.RateControlMethod", 0);
+	obs_data_set_string(settings, "rate_control", "CQP");
 	obs_data_set_int(settings, "AMF.H264.QP.IFrame", cqp);
 	obs_data_set_int(settings, "AMF.H264.QP.PFrame", cqp);
 	obs_data_set_int(settings, "AMF.H264.QP.BFrame", cqp);
-	obs_data_set_int(settings, "AMF.H264.BPicture.Pattern", 3);
-	obs_data_set_int(settings, "AMF.H264.BPicture.Reference", 1);
-	obs_data_set_int(settings, "keyint_sec", 1);
-	obs_data_set_string(settings, "rate_control", "CQP");
-	obs_data_set_string(settings, "profile", "high");
 
-	obs_encoder_update(h264Recording, settings);
+	// Picture Control Properties
+	obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
+	obs_data_set_int(settings, "keyint_sec", 2);
 
+	// Update and release
+	obs_encoder_update(h264Recording, settings);
 	obs_data_release(settings);
 }
 

+ 5 - 2
UI/window-basic-settings.cpp

@@ -3331,9 +3331,12 @@ void OBSBasicSettings::SimpleStreamingEncoderChanged()
 		preset = curNVENCPreset;
 
 	} else if (encoder == SIMPLE_ENCODER_AMD) {
-		/* none */
-		defaultPreset = "";
+		ui->simpleOutPreset->addItem("Speed", "speed");
+		ui->simpleOutPreset->addItem("Balanced", "balanced");
+		ui->simpleOutPreset->addItem("Quality", "quality");
 
+		defaultPreset = "balanced";
+		preset = curAMDPreset;
 	} else {
 		ui->simpleOutPreset->addItem("ultrafast", "ultrafast");
 		ui->simpleOutPreset->addItem("superfast", "superfast");

+ 1 - 0
UI/window-basic-settings.hpp

@@ -111,6 +111,7 @@ private:
 	QString curPreset;
 	QString curQSVPreset;
 	QString curNVENCPreset;
+	QString curAMDPreset;
 
 	QString curAdvStreamEncoder;
 	QString curAdvRecordEncoder;