소스 검색

UI: Add multi-track FFmpeg output support

pkviet 7 년 전
부모
커밋
047e586eaf
4개의 변경된 파일46개의 추가작업 그리고 26개의 파일을 삭제
  1. 6 6
      UI/forms/OBSBasicSettings.ui
  2. 3 3
      UI/window-basic-main-outputs.cpp
  3. 22 2
      UI/window-basic-main.cpp
  4. 15 15
      UI/window-basic-settings.cpp

+ 6 - 6
UI/forms/OBSBasicSettings.ui

@@ -2247,7 +2247,7 @@
                              <number>0</number>
                             </property>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack1">
+                             <widget class="QCheckBox" name="advOutFFTrack1">
                               <property name="text">
                                <string notr="true">1</string>
                               </property>
@@ -2257,35 +2257,35 @@
                              </widget>
                             </item>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack2">
+                             <widget class="QCheckBox" name="advOutFFTrack2">
                               <property name="text">
                                <string notr="true">2</string>
                               </property>
                              </widget>
                             </item>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack3">
+                             <widget class="QCheckBox" name="advOutFFTrack3">
                               <property name="text">
                                <string notr="true">3</string>
                               </property>
                              </widget>
                             </item>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack4">
+                             <widget class="QCheckBox" name="advOutFFTrack4">
                               <property name="text">
                                <string notr="true">4</string>
                               </property>
                              </widget>
                             </item>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack5">
+                             <widget class="QCheckBox" name="advOutFFTrack5">
                               <property name="text">
                                <string notr="true">5</string>
                               </property>
                              </widget>
                             </item>
                             <item>
-                             <widget class="QRadioButton" name="advOutFFTrack6">
+                             <widget class="QCheckBox" name="advOutFFTrack6">
                               <property name="text">
                                <string notr="true">6</string>
                               </property>

+ 3 - 3
UI/window-basic-main-outputs.cpp

@@ -1302,8 +1302,8 @@ inline void AdvancedOutput::SetupFFmpeg()
 			"FFVCustom");
 	int aBitrate = config_get_int(main->Config(), "AdvOut",
 			"FFABitrate");
-	int aTrack = config_get_int(main->Config(), "AdvOut",
-			"FFAudioTrack");
+	int aMixes = config_get_int(main->Config(), "AdvOut",
+			"FFAudioMixes");
 	const char *aEncoder = config_get_string(main->Config(), "AdvOut",
 			"FFAEncoder");
 	int aEncoderId = config_get_int(main->Config(), "AdvOut",
@@ -1337,7 +1337,7 @@ inline void AdvancedOutput::SetupFFmpeg()
 		}
 	}
 
-	obs_output_set_mixer(fileOutput, aTrack - 1);
+	obs_output_set_mixers(fileOutput, aMixes);
 	obs_output_set_media(fileOutput, obs_get_video(), obs_get_audio());
 	obs_output_update(fileOutput, settings);
 

+ 22 - 2
UI/window-basic-main.cpp

@@ -1115,6 +1115,21 @@ bool OBSBasic::InitBasicConfigDefaults()
 		cy = 1080;
 	}
 
+	bool changed = false;
+
+	/* ----------------------------------------------------- */
+	/* move over old FFmpeg track settings                   */
+	if (config_has_user_value(basicConfig, "AdvOut", "FFAudioTrack") &&
+	    !config_has_user_value(basicConfig, "AdvOut", "Pre22.1Settings")) {
+
+		int track = (int)config_get_int(basicConfig, "AdvOut",
+				"FFAudioTrack");
+		config_set_int(basicConfig, "AdvOut", "FFAudioMixes",
+				1LL << (track - 1));
+		config_set_bool(basicConfig, "AdvOut", "Pre22.1Settings", true);
+		changed = true;
+	}
+
 	/* ----------------------------------------------------- */
 	/* move over mixer values in advanced if older config */
 	if (config_has_user_value(basicConfig, "AdvOut", "RecTrackIndex") &&
@@ -1125,11 +1140,16 @@ bool OBSBasic::InitBasicConfigDefaults()
 		track = 1ULL << (track - 1);
 		config_set_uint(basicConfig, "AdvOut", "RecTracks", track);
 		config_remove_value(basicConfig, "AdvOut", "RecTrackIndex");
-		config_save_safe(basicConfig, "tmp", nullptr);
+		changed = true;
 	}
 
 	/* ----------------------------------------------------- */
 
+	if (changed)
+		config_save_safe(basicConfig, "tmp", nullptr);
+
+	/* ----------------------------------------------------- */
+
 	config_set_default_string(basicConfig, "Output", "Mode", "Simple");
 
 	config_set_default_string(basicConfig, "SimpleOutput", "FilePath",
@@ -1186,7 +1206,7 @@ bool OBSBasic::InitBasicConfigDefaults()
 	config_set_default_bool  (basicConfig, "AdvOut", "FFIgnoreCompat",
 			false);
 	config_set_default_uint  (basicConfig, "AdvOut", "FFABitrate", 160);
-	config_set_default_uint  (basicConfig, "AdvOut", "FFAudioTrack", 1);
+	config_set_default_uint  (basicConfig, "AdvOut", "FFAudioMixes", 1);
 
 	config_set_default_uint  (basicConfig, "AdvOut", "Track1Bitrate", 160);
 	config_set_default_uint  (basicConfig, "AdvOut", "Track2Bitrate", 160);

+ 15 - 15
UI/window-basic-settings.cpp

@@ -1774,8 +1774,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
 			"FFVCustom");
 	int audioBitrate = config_get_int(main->Config(), "AdvOut",
 			"FFABitrate");
-	int audioTrack = config_get_int(main->Config(), "AdvOut",
-			"FFAudioTrack");
+	int audioMixes = config_get_int(main->Config(), "AdvOut",
+			"FFAudioMixes");
 	const char *aEncoder = config_get_string(main->Config(), "AdvOut",
 			"FFAEncoder");
 	int aEncoderId = config_get_int(main->Config(), "AdvOut",
@@ -1801,14 +1801,12 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
 	SelectEncoder(ui->advOutFFAEncoder, aEncoder, aEncoderId);
 	ui->advOutFFACfg->setText(aEncCustom);
 
-	switch (audioTrack) {
-	case 1: ui->advOutFFTrack1->setChecked(true); break;
-	case 2: ui->advOutFFTrack2->setChecked(true); break;
-	case 3: ui->advOutFFTrack3->setChecked(true); break;
-	case 4: ui->advOutFFTrack4->setChecked(true); break;
-	case 5: ui->advOutFFTrack5->setChecked(true); break;
-	case 6: ui->advOutFFTrack6->setChecked(true); break;
-	}
+	ui->advOutFFTrack1->setChecked(audioMixes & (1 << 0));
+	ui->advOutFFTrack2->setChecked(audioMixes & (1 << 1));
+	ui->advOutFFTrack3->setChecked(audioMixes & (1 << 2));
+	ui->advOutFFTrack4->setChecked(audioMixes & (1 << 3));
+	ui->advOutFFTrack5->setChecked(audioMixes & (1 << 4));
+	ui->advOutFFTrack6->setChecked(audioMixes & (1 << 5));
 }
 
 void OBSBasicSettings::LoadAdvOutputAudioSettings()
@@ -3133,11 +3131,13 @@ void OBSBasicSettings::SaveOutputSettings()
 	SaveSpinBox(ui->advOutFFABitrate, "AdvOut", "FFABitrate");
 	SaveEncoder(ui->advOutFFAEncoder, "AdvOut", "FFAEncoder");
 	SaveEdit(ui->advOutFFACfg, "AdvOut", "FFACustom");
-	SaveTrackIndex(main->Config(), "AdvOut", "FFAudioTrack",
-			ui->advOutFFTrack1, ui->advOutFFTrack2,
-			ui->advOutFFTrack3, ui->advOutFFTrack4,
-			ui->advOutFFTrack5, ui->advOutFFTrack6);
-
+	config_set_int(main->Config(), "AdvOut", "FFAudioMixes",
+			(ui->advOutFFTrack1->isChecked() ? (1 << 0) : 0) |
+			(ui->advOutFFTrack2->isChecked() ? (1 << 1) : 0) |
+			(ui->advOutFFTrack3->isChecked() ? (1 << 2) : 0) |
+			(ui->advOutFFTrack4->isChecked() ? (1 << 3) : 0) |
+			(ui->advOutFFTrack5->isChecked() ? (1 << 4) : 0) |
+			(ui->advOutFFTrack6->isChecked() ? (1 << 5) : 0));
 	SaveCombo(ui->advOutTrack1Bitrate, "AdvOut", "Track1Bitrate");
 	SaveCombo(ui->advOutTrack2Bitrate, "AdvOut", "Track2Bitrate");
 	SaveCombo(ui->advOutTrack3Bitrate, "AdvOut", "Track3Bitrate");