mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
libobs: Add support for output error messages
This commit is contained in:
parent
2933b89733
commit
50f8a066b9
|
@ -872,6 +872,8 @@ struct obs_output {
|
|||
volatile long delay_restart_refs;
|
||||
volatile bool delay_active;
|
||||
volatile bool delay_capturing;
|
||||
|
||||
char *last_error_message;
|
||||
};
|
||||
|
||||
static inline void do_output_signal(struct obs_output *output,
|
||||
|
|
|
@ -212,6 +212,8 @@ void obs_output_destroy(obs_output_t *output)
|
|||
circlebuf_free(&output->delay_data);
|
||||
if (output->owns_info_id)
|
||||
bfree((void*)output->info.id);
|
||||
if (output->last_error_message)
|
||||
bfree(output->last_error_message);
|
||||
bfree(output);
|
||||
}
|
||||
}
|
||||
|
@ -228,6 +230,10 @@ bool obs_output_actual_start(obs_output_t *output)
|
|||
|
||||
os_event_wait(output->stopping_event);
|
||||
output->stop_code = 0;
|
||||
if (output->last_error_message) {
|
||||
bfree(output->last_error_message);
|
||||
output->last_error_message = NULL;
|
||||
}
|
||||
|
||||
if (output->context.data)
|
||||
success = output->info.start(output->context.data);
|
||||
|
@ -1558,12 +1564,15 @@ static inline void signal_reconnect_success(struct obs_output *output)
|
|||
static inline void signal_stop(struct obs_output *output)
|
||||
{
|
||||
struct calldata params;
|
||||
uint8_t stack[128];
|
||||
|
||||
calldata_init_fixed(¶ms, stack, sizeof(stack));
|
||||
calldata_init(¶ms);
|
||||
calldata_set_string(¶ms, "last_error", output->last_error_message);
|
||||
calldata_set_int(¶ms, "code", output->stop_code);
|
||||
calldata_set_ptr(¶ms, "output", output);
|
||||
|
||||
signal_handler_signal(output->context.signals, "stop", ¶ms);
|
||||
|
||||
calldata_free(¶ms);
|
||||
}
|
||||
|
||||
static inline void convert_flags(const struct obs_output *output,
|
||||
|
@ -2116,6 +2125,28 @@ int obs_output_get_connect_time_ms(obs_output_t *output)
|
|||
return -1;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void obs_output_set_last_error(obs_output_t *output, const char *message)
|
||||
{
|
||||
if (!obs_output_valid(output, "obs_output_set_last_error"))
|
||||
return;
|
||||
|
||||
if (output->last_error_message)
|
||||
bfree(output->last_error_message);
|
||||
|
||||
if (message)
|
||||
output->last_error_message = bstrdup(message);
|
||||
else
|
||||
output->last_error_message = NULL;
|
||||
}
|
||||
|
||||
bool obs_output_reconnecting(const obs_output_t *output)
|
||||
{
|
||||
if (!obs_output_valid(output, "obs_output_reconnecting"))
|
||||
|
|
|
@ -1513,6 +1513,10 @@ EXPORT int obs_output_get_connect_time_ms(obs_output_t *output);
|
|||
|
||||
EXPORT bool obs_output_reconnecting(const obs_output_t *output);
|
||||
|
||||
/** Pass a string of the last output error, for UI use */
|
||||
EXPORT void obs_output_set_last_error(obs_output_t *output,
|
||||
const char *message);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Functions used by outputs */
|
||||
|
||||
|
|
Loading…
Reference in a new issue