Browse Source

Merge pull request #1589 from caffeinetv/minor-improvements

Minor improvements
Jim 6 years ago
parent
commit
b2bc1e159b
4 changed files with 91 additions and 57 deletions
  1. 80 51
      UI/window-basic-main-outputs.cpp
  2. 1 0
      UI/window-basic-main-outputs.hpp
  3. 5 3
      UI/window-basic-main.cpp
  4. 5 3
      libobs/obs-output.c

+ 80 - 51
UI/window-basic-main-outputs.cpp

@@ -714,28 +714,39 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
 				obs_output_get_signal_handler(streamOutput),
 				"stop", OBSStopStreaming, this);
 
-		const char *codec =
-			obs_output_get_supported_audio_codecs(streamOutput);
-		if (!codec) {
-			return false;
-		}
-
-		if (strcmp(codec, "aac") != 0) {
-			const char *id = FindAudioEncoderFromCodec(codec);
-			int audioBitrate = GetAudioBitrate();
-			obs_data_t *settings = obs_data_create();
-			obs_data_set_int(settings, "bitrate", audioBitrate);
-
-			aacStreaming = obs_audio_encoder_create(id,
-					"alt_audio_enc", nullptr, 0, nullptr);
-			obs_encoder_release(aacStreaming);
-			if (!aacStreaming)
+		bool isEncoded = obs_output_get_flags(streamOutput)
+			& OBS_OUTPUT_ENCODED;
+
+		if (isEncoded) {
+			const char *codec =
+				obs_output_get_supported_audio_codecs(
+						streamOutput);
+			if (!codec) {
+				blog(LOG_WARNING, "Failed to load audio codec");
 				return false;
+			}
 
-			obs_encoder_update(aacStreaming, settings);
-			obs_encoder_set_audio(aacStreaming, obs_get_audio());
-
-			obs_data_release(settings);
+			if (strcmp(codec, "aac") != 0) {
+				const char *id = FindAudioEncoderFromCodec(
+						codec);
+				int audioBitrate = GetAudioBitrate();
+				obs_data_t *settings = obs_data_create();
+				obs_data_set_int(settings, "bitrate",
+						audioBitrate);
+
+				aacStreaming = obs_audio_encoder_create(id,
+						"alt_audio_enc", nullptr, 0,
+						nullptr);
+				obs_encoder_release(aacStreaming);
+				if (!aacStreaming)
+					return false;
+
+				obs_encoder_update(aacStreaming, settings);
+				obs_encoder_set_audio(aacStreaming,
+						obs_get_audio());
+
+				obs_data_release(settings);
+			}
 		}
 
 		outputType = type;
@@ -789,12 +800,15 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
 	}
 
 	const char *error = obs_output_get_last_error(streamOutput);
-	bool has_last_error = error && *error;
+	bool hasLastError = error && *error;
+	if (hasLastError)
+		lastError = error;
+	else
+		lastError = string();
 
-	blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s",
-			type,
-			has_last_error ? "  Last Error: " : "",
-			has_last_error ? error : "");
+	blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
+			hasLastError ? "  Last Error: " : "",
+			hasLastError ? error : "");
 	return false;
 }
 
@@ -1506,30 +1520,42 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
 				obs_output_get_signal_handler(streamOutput),
 				"stop", OBSStopStreaming, this);
 
-		const char *codec =
-			obs_output_get_supported_audio_codecs(streamOutput);
-		if (!codec) {
-			return false;
-		}
+		bool isEncoded = obs_output_get_flags(streamOutput)
+			& OBS_OUTPUT_ENCODED;
 
-		if (strcmp(codec, "aac") == 0) {
-			streamAudioEnc = aacTrack[trackIndex - 1];
-		} else {
-			const char *id = FindAudioEncoderFromCodec(codec);
-			int audioBitrate = GetAudioBitrate(trackIndex - 1);
-			obs_data_t *settings = obs_data_create();
-			obs_data_set_int(settings, "bitrate", audioBitrate);
-
-			streamAudioEnc = obs_audio_encoder_create(id,
-					"alt_audio_enc", nullptr,
-					trackIndex - 1, nullptr);
-			if (!streamAudioEnc)
+		if (isEncoded) {
+			const char *codec =
+				obs_output_get_supported_audio_codecs(
+						streamOutput);
+			if (!codec) {
+				blog(LOG_WARNING, "Failed to load audio codec");
 				return false;
+			}
 
-			obs_encoder_update(streamAudioEnc, settings);
-			obs_encoder_set_audio(streamAudioEnc, obs_get_audio());
-
-			obs_data_release(settings);
+			if (strcmp(codec, "aac") == 0) {
+				streamAudioEnc = aacTrack[trackIndex - 1];
+			} else {
+				obs_data_t *settings = obs_data_create();
+				const char *id =
+					FindAudioEncoderFromCodec(codec);
+				int audioBitrate =
+					GetAudioBitrate(trackIndex - 1);
+				
+				obs_data_set_int(settings, "bitrate",
+						audioBitrate);
+				streamAudioEnc = obs_audio_encoder_create(id,
+						"alt_audio_enc", nullptr,
+						trackIndex - 1, nullptr);
+
+				if (!streamAudioEnc)
+					return false;
+
+				obs_encoder_update(streamAudioEnc, settings);
+				obs_encoder_set_audio(streamAudioEnc,
+						obs_get_audio());
+
+				obs_data_release(settings);
+			}
 		}
 
 		outputType = type;
@@ -1581,12 +1607,15 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
 	}
 
 	const char *error = obs_output_get_last_error(streamOutput);
-	bool has_last_error = error && *error;
+	bool hasLastError = error && *error;
+	if (hasLastError)
+		lastError = error;
+	else
+		lastError = string();
 
-	blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s",
-			type,
-			has_last_error ? "  Last Error: " : "",
-			has_last_error ? error : "");
+	blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
+			hasLastError ? "  Last Error: " : "",
+			hasLastError ? error : "");
 	return false;
 }
 

+ 1 - 0
UI/window-basic-main-outputs.hpp

@@ -15,6 +15,7 @@ struct BasicOutputHandler {
 	OBSBasic               *main;
 
 	std::string            outputType;
+	std::string            lastError;
 
 	OBSSignal              startRecording;
 	OBSSignal              stopRecording;

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

@@ -4970,6 +4970,9 @@ void OBSBasic::StartStreaming()
 	}
 
 	if (!outputHandler->StartStreaming(service)) {
+		QString message = !outputHandler->lastError.empty()
+			? QTStr(outputHandler->lastError.c_str())
+			: QTStr("Output.StartFailedGeneric");
 		ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
 		ui->streamButton->setEnabled(true);
 		ui->streamButton->setChecked(false);
@@ -4979,9 +4982,8 @@ void OBSBasic::StartStreaming()
 			sysTrayStream->setEnabled(true);
 		}
 
-		QMessageBox::critical(this,
-				QTStr("Output.StartStreamFailed"),
-				QTStr("Output.StartFailedGeneric"));
+		QMessageBox::critical(this, QTStr("Output.StartStreamFailed"),
+				message);
 		return;
 	}
 

+ 5 - 3
libobs/obs-output.c

@@ -255,13 +255,17 @@ bool obs_output_actual_start(obs_output_t *output)
 bool obs_output_start(obs_output_t *output)
 {
 	bool encoded;
+	bool has_service;
 	if (!obs_output_valid(output, "obs_output_start"))
 		return false;
 	if (!output->context.data)
 		return false;
 
-	encoded = (output->info.flags & OBS_OUTPUT_ENCODED) != 0;
+	has_service = (output->info.flags & OBS_OUTPUT_SERVICE) != 0;
+	if (has_service && !obs_service_initialize(output->service, output))
+		return false;
 
+	encoded = (output->info.flags & OBS_OUTPUT_ENCODED) != 0;
 	if (encoded && output->delay_sec) {
 		return obs_output_delay_start(output);
 	} else {
@@ -1746,8 +1750,6 @@ bool obs_output_initialize_encoders(obs_output_t *output, uint32_t flags)
 
 	if (!encoded)
 		return false;
-	if (has_service && !obs_service_initialize(output->service, output))
-		return false;
 	if (has_video && !obs_encoder_initialize(output->video_encoder))
 		return false;
 	if (has_audio && !initialize_audio_encoders(output, num_mixes))