diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index db94b4f4f..67e8e04d5 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -197,6 +197,7 @@ static void remove_connection(struct obs_encoder *encoder) video_output_disconnect(encoder->media, receive_video, encoder); + obs_encoder_shutdown(encoder); encoder->active = false; } @@ -368,9 +369,8 @@ bool obs_encoder_initialize(obs_encoder_t *encoder) if (encoder->active) return true; - if (encoder->context.data) - encoder->info.destroy(encoder->context.data); + return false; if (encoder->info.create) encoder->context.data = encoder->info.create( @@ -387,6 +387,14 @@ bool obs_encoder_initialize(obs_encoder_t *encoder) return true; } +void obs_encoder_shutdown(obs_encoder_t *encoder) +{ + if (encoder->context.data) { + encoder->info.destroy(encoder->context.data); + encoder->context.data = NULL; + } +} + static inline size_t get_callback_idx( const struct obs_encoder *encoder, void (*new_packet)(void *param, struct encoder_packet *packet), diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index b999b2496..82408ca18 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -770,6 +770,7 @@ struct obs_encoder { extern struct obs_encoder_info *find_encoder(const char *id); extern bool obs_encoder_initialize(obs_encoder_t *encoder); +extern void obs_encoder_shutdown(obs_encoder_t *encoder); extern void obs_encoder_start(obs_encoder_t *encoder, void (*new_packet)(void *param, struct encoder_packet *packet),