libobs: Make internal version of remove encoder

This commit is contained in:
John Bradley 2023-01-16 17:33:15 -06:00 committed by tt2468
parent 5a68d3aaf5
commit d70171daa6
3 changed files with 21 additions and 4 deletions

View file

@ -245,7 +245,9 @@ static void obs_encoder_actually_destroy(obs_encoder_t *encoder)
pthread_mutex_lock(&encoder->outputs_mutex);
for (size_t i = 0; i < encoder->outputs.num; i++) {
struct obs_output *output = encoder->outputs.array[i];
obs_output_remove_encoder(output, encoder);
// This happens while the output is still "active", so
// remove without checking active
obs_output_remove_encoder_internal(output, encoder);
}
da_free(encoder->outputs);
pthread_mutex_unlock(&encoder->outputs_mutex);

View file

@ -1265,3 +1265,6 @@ extern bool obs_service_initialize(struct obs_service *service,
struct obs_output *output);
void obs_service_destroy(obs_service_t *service);
void obs_output_remove_encoder_internal(struct obs_output *output,
struct obs_encoder *encoder);

View file

@ -792,10 +792,10 @@ size_t obs_output_get_mixers(const obs_output_t *output)
: 0;
}
void obs_output_remove_encoder(struct obs_output *output,
struct obs_encoder *encoder)
void obs_output_remove_encoder_internal(struct obs_output *output,
struct obs_encoder *encoder)
{
if (!obs_output_valid(output, "obs_output_remove_encoder"))
if (!obs_output_valid(output, "obs_output_remove_encoder_internal"))
return;
if (output->video_encoder == encoder) {
@ -808,6 +808,18 @@ void obs_output_remove_encoder(struct obs_output *output,
}
}
void obs_output_remove_encoder(struct obs_output *output,
struct obs_encoder *encoder)
{
if (!obs_output_valid(output, "obs_output_remove_encoder"))
return;
if (active(output)) {
return;
}
obs_output_remove_encoder_internal(output, encoder);
}
void obs_output_set_video_encoder(obs_output_t *output, obs_encoder_t *encoder)
{
if (!obs_output_valid(output, "obs_output_set_video_encoder"))