diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 2b685d111..f9714a086 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -377,6 +377,7 @@ Output.ConnectFail.Disconnected="Disconnected from server." # output streaming-related messages Output.StreamEncodeError.Title="Encoding error" Output.StreamEncodeError.Msg="An encoder error occurred while streaming." +Output.StreamEncodeError.Msg.LastError="An encoder error occurred while streaming:\n\n%1" # output recording-related messages Output.RecordFail.Title="Failed to start recording" @@ -386,6 +387,7 @@ Output.RecordNoSpace.Msg="There is not sufficient disk space to continue recordi Output.RecordError.Title="Recording error" Output.RecordError.Msg="An unspecified error occurred while recording." Output.RecordError.EncodeErrorMsg="An encoder error occurred while recording." +Output.RecordError.EncodeErrorMsg.LastError="An encoder error occurred while recording:\n\n%1" # output recording messages Output.BadPath.Title="Bad File Path" diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index b6147aef4..dc61aacf2 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -6800,9 +6800,13 @@ void OBSBasic::StreamingStop(int code, QString last_error) blog(LOG_INFO, STREAMING_STOP); if (encode_error) { + QString msg = + last_error.isEmpty() + ? QTStr("Output.StreamEncodeError.Msg") + : QTStr("Output.StreamEncodeError.Msg.LastError") + .arg(last_error); OBSMessageBox::information( - this, QTStr("Output.StreamEncodeError.Title"), - QTStr("Output.StreamEncodeError.Msg")); + this, QTStr("Output.StreamEncodeError.Title"), msg); } else if (code != OBS_OUTPUT_SUCCESS && isVisible()) { OBSMessageBox::information(this, @@ -6949,9 +6953,13 @@ void OBSBasic::RecordingStop(int code, QString last_error) QTStr("Output.RecordFail.Unsupported")); } else if (code == OBS_OUTPUT_ENCODE_ERROR && isVisible()) { - OBSMessageBox::warning( - this, QTStr("Output.RecordError.Title"), - QTStr("Output.RecordError.EncodeErrorMsg")); + QString msg = + last_error.isEmpty() + ? QTStr("Output.RecordError.EncodeErrorMsg") + : QTStr("Output.RecordError.EncodeErrorMsg.LastError") + .arg(last_error); + OBSMessageBox::warning(this, QTStr("Output.RecordError.Title"), + msg); } else if (code == OBS_OUTPUT_NO_SPACE && isVisible()) { OBSMessageBox::warning(this, diff --git a/libobs/obs-output.c b/libobs/obs-output.c index d4abf2333..6f9633236 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -1982,7 +1982,8 @@ static inline void signal_stop(struct obs_output *output) struct calldata params; calldata_init(¶ms); - calldata_set_string(¶ms, "last_error", output->last_error_message); + calldata_set_string(¶ms, "last_error", + obs_output_get_last_error(output)); calldata_set_int(¶ms, "code", output->stop_code); calldata_set_ptr(¶ms, "output", output); @@ -2617,7 +2618,23 @@ const char *obs_output_get_last_error(obs_output_t *output) if (!obs_output_valid(output, "obs_output_get_last_error")) return NULL; - return output->last_error_message; + if (output->last_error_message) { + return output->last_error_message; + } else { + obs_encoder_t *vencoder = output->video_encoder; + if (vencoder && vencoder->last_error_message) { + return vencoder->last_error_message; + } + + for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + obs_encoder_t *aencoder = output->audio_encoders[i]; + if (aencoder && aencoder->last_error_message) { + return aencoder->last_error_message; + } + } + } + + return NULL; } void obs_output_set_last_error(obs_output_t *output, const char *message)