Quellcode durchsuchen

UI: Allow multi-track recording in advanced output

jp9000 vor 10 Jahren
Ursprung
Commit
a24af63527

+ 6 - 9
obs/forms/OBSBasicSettings.ui

@@ -1175,31 +1175,28 @@
                                <number>0</number>
                               </property>
                               <item>
-                               <widget class="QRadioButton" name="advOutRecTrack1">
+                               <widget class="QCheckBox" name="advOutRecTrack1">
                                 <property name="text">
                                  <string notr="true">1</string>
                                 </property>
-                                <property name="checked">
-                                 <bool>true</bool>
-                                </property>
                                </widget>
                               </item>
                               <item>
-                               <widget class="QRadioButton" name="advOutRecTrack2">
+                               <widget class="QCheckBox" name="advOutRecTrack2">
                                 <property name="text">
                                  <string notr="true">2</string>
                                 </property>
                                </widget>
                               </item>
                               <item>
-                               <widget class="QRadioButton" name="advOutRecTrack3">
+                               <widget class="QCheckBox" name="advOutRecTrack3">
                                 <property name="text">
                                  <string notr="true">3</string>
                                 </property>
                                </widget>
                               </item>
                               <item>
-                               <widget class="QRadioButton" name="advOutRecTrack4">
+                               <widget class="QCheckBox" name="advOutRecTrack4">
                                 <property name="text">
                                  <string notr="true">4</string>
                                 </property>
@@ -2487,8 +2484,8 @@
              <rect>
               <x>0</x>
               <y>0</y>
-              <width>734</width>
-              <height>553</height>
+              <width>325</width>
+              <height>229</height>
              </rect>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_16">

+ 6 - 15
obs/window-basic-main-outputs.cpp

@@ -490,15 +490,11 @@ inline void AdvancedOutput::SetupRecording()
 			"RecRescale");
 	const char *rescaleRes = config_get_string(main->Config(), "AdvOut",
 			"RecRescaleRes");
-	bool multitrack = config_get_bool(main->Config(), "AdvOut",
-			"RecMultitrack");
-	int trackIndex = config_get_int(main->Config(), "AdvOut",
-			"RecTrackIndex");
-	int trackCount = config_get_int(main->Config(), "AdvOut",
-			"RecTrackCount");
+	int tracks = config_get_int(main->Config(), "AdvOut", "RecTracks");
 	obs_data_t *settings = obs_data_create();
 	unsigned int cx = 0;
 	unsigned int cy = 0;
+	int idx = 0;
 
 	if (useStreamEncoder) {
 		obs_output_set_video_encoder(fileOutput, h264Streaming);
@@ -515,16 +511,11 @@ inline void AdvancedOutput::SetupRecording()
 		obs_output_set_video_encoder(fileOutput, h264Recording);
 	}
 
-	if (multitrack) {
-		int i = 0;
-		for (; i < trackCount; i++)
+	for (int i = 0; i < MAX_AUDIO_MIXES; i++) {
+		if ((tracks & (1<<i)) != 0) {
 			obs_output_set_audio_encoder(fileOutput, aacTrack[i],
-					i);
-		for (; i < 4; i++)
-			obs_output_set_audio_encoder(fileOutput, nullptr, i);
-	} else {
-		obs_output_set_audio_encoder(fileOutput,
-				aacTrack[trackIndex - 1], 0);
+					idx++);
+		}
 	}
 
 	obs_data_set_string(settings, "path", path);

+ 1 - 2
obs/window-basic-main.cpp

@@ -496,8 +496,7 @@ bool OBSBasic::InitBasicConfigDefaults()
 			false);
 	config_set_default_bool  (basicConfig, "AdvOut", "RecMultitrack",
 			false);
-	config_set_default_uint  (basicConfig, "AdvOut", "RecTrackIndex", 1);
-	config_set_default_uint  (basicConfig, "AdvOut", "RecTrackCount", 1);
+	config_set_default_uint  (basicConfig, "AdvOut", "RecTracks", (1<<0));
 	config_set_default_string(basicConfig, "AdvOut", "RecEncoder",
 			"none");
 

+ 11 - 11
obs/window-basic-settings.cpp

@@ -1042,8 +1042,7 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
 			"RecRescale");
 	const char *rescaleRes = config_get_string(main->Config(), "AdvOut",
 			"RecRescaleRes");
-	int trackIndex = config_get_int(main->Config(), "AdvOut",
-			"RecTrackIndex");
+	int tracks = config_get_int(main->Config(), "AdvOut", "RecTracks");
 
 	int typeIndex = (astrcmpi(type, "FFmpeg") == 0) ? 1 : 0;
 	ui->advOutRecType->setCurrentIndex(typeIndex);
@@ -1054,12 +1053,10 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
 	int idx = ui->advOutRecFormat->findText(format);
 	ui->advOutRecFormat->setCurrentIndex(idx);
 
-	switch (trackIndex) {
-	case 1: ui->advOutRecTrack1->setChecked(true); break;
-	case 2: ui->advOutRecTrack2->setChecked(true); break;
-	case 3: ui->advOutRecTrack3->setChecked(true); break;
-	case 4: ui->advOutRecTrack4->setChecked(true); break;
-	}
+	ui->advOutRecTrack1->setChecked(tracks & (1<<0));
+	ui->advOutRecTrack2->setChecked(tracks & (1<<1));
+	ui->advOutRecTrack3->setChecked(tracks & (1<<2));
+	ui->advOutRecTrack4->setChecked(tracks & (1<<3));
 }
 
 void OBSBasicSettings::LoadAdvOutputRecordingEncoderProperties()
@@ -2006,9 +2003,12 @@ void OBSBasicSettings::SaveOutputSettings()
 	SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder");
 	SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale");
 	SaveCombo(ui->advOutRecRescale, "AdvOut", "RecRescaleRes");
-	SaveTrackIndex(main->Config(), "AdvOut", "RecTrackIndex",
-			ui->advOutRecTrack1, ui->advOutRecTrack2,
-			ui->advOutRecTrack3, ui->advOutRecTrack4);
+
+	config_set_int(main->Config(), "AdvOut", "RecTracks",
+			(ui->advOutRecTrack1->isChecked() ? (1<<0) : 0) |
+			(ui->advOutRecTrack2->isChecked() ? (1<<1) : 0) |
+			(ui->advOutRecTrack3->isChecked() ? (1<<2) : 0) |
+			(ui->advOutRecTrack4->isChecked() ? (1<<3) : 0));
 
 	SaveEdit(ui->advOutFFURL, "AdvOut", "FFURL");
 	SaveFormat(ui->advOutFFFormat);