libobs: Protect some encoder functions from being used while active

Protect `obs_encoder_set_video()` and `obs_encoder_set_audio()` from
being used if the encoder is active. Changing these values while active
is undefined behavior.
This commit is contained in:
tt2468
2023-01-15 20:12:09 -08:00
committed by John R. Bradley
parent 447adfbe38
commit dfc20bbb31
+18 -2
View File
@@ -792,6 +792,14 @@ void obs_encoder_set_video(obs_encoder_t *encoder, video_t *video)
obs_encoder_get_name(encoder));
return;
}
if (encoder_active(encoder)) {
blog(LOG_WARNING,
"encoder '%s': Cannot apply a new video_t "
"object while the encoder is active",
obs_encoder_get_name(encoder));
return;
}
if (!video)
return;
@@ -813,6 +821,14 @@ void obs_encoder_set_audio(obs_encoder_t *encoder, audio_t *audio)
obs_encoder_get_name(encoder));
return;
}
if (encoder_active(encoder)) {
blog(LOG_WARNING,
"encoder '%s': Cannot apply a new audio_t "
"object while the encoder is active",
obs_encoder_get_name(encoder));
return;
}
if (!audio)
return;
@@ -1316,7 +1332,7 @@ end:
void obs_encoder_add_output(struct obs_encoder *encoder,
struct obs_output *output)
{
if (!encoder)
if (!encoder || !output)
return;
pthread_mutex_lock(&encoder->outputs_mutex);
@@ -1327,7 +1343,7 @@ void obs_encoder_add_output(struct obs_encoder *encoder,
void obs_encoder_remove_output(struct obs_encoder *encoder,
struct obs_output *output)
{
if (!encoder)
if (!encoder || !output)
return;
pthread_mutex_lock(&encoder->outputs_mutex);