From 20740fe57962c9cbfb0cd6c2f1036da775c40c8b Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 8 Aug 2026 04:11:11 +0200 Subject: Fix nvenc crash on shutdown. part 2 --- src/encoder/video/nvenc.c | 2 +- src/encoder/video/vaapi.c | 2 +- src/encoder/video/vulkan.c | 2 +- src/recorder/recorder.c | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/encoder/video/nvenc.c b/src/encoder/video/nvenc.c index f7fca41..594416c 100644 --- a/src/encoder/video/nvenc.c +++ b/src/encoder/video/nvenc.c @@ -152,7 +152,7 @@ void gsr_video_encoder_nvenc_stop(gsr_video_encoder_nvenc *self, AVCodecContext self->target_textures[0] = 0; self->target_textures[1] = 0; - if(video_codec_context->hw_frames_ctx) + if(video_codec_context && video_codec_context->hw_frames_ctx) av_buffer_unref(&video_codec_context->hw_frames_ctx); if(self->device_ctx) av_buffer_unref(&self->device_ctx); diff --git a/src/encoder/video/vaapi.c b/src/encoder/video/vaapi.c index d310125..12dd3d7 100644 --- a/src/encoder/video/vaapi.c +++ b/src/encoder/video/vaapi.c @@ -294,7 +294,7 @@ void gsr_video_encoder_vaapi_stop(gsr_video_encoder_vaapi *self, AVCodecContext self->target_textures[0] = 0; self->target_textures[1] = 0; - if(video_codec_context->hw_frames_ctx) + if(video_codec_context && video_codec_context->hw_frames_ctx) av_buffer_unref(&video_codec_context->hw_frames_ctx); if(self->device_ctx) av_buffer_unref(&self->device_ctx); diff --git a/src/encoder/video/vulkan.c b/src/encoder/video/vulkan.c index c90a1f9..232a37d 100644 --- a/src/encoder/video/vulkan.c +++ b/src/encoder/video/vulkan.c @@ -862,7 +862,7 @@ void gsr_video_encoder_vulkan_stop(gsr_video_encoder_vulkan *self, AVCodecContex } } - if(video_codec_context->hw_frames_ctx) + if(video_codec_context && video_codec_context->hw_frames_ctx) av_buffer_unref(&video_codec_context->hw_frames_ctx); if(self->device_ctx) av_buffer_unref(&self->device_ctx); diff --git a/src/recorder/recorder.c b/src/recorder/recorder.c index ca4dcea..29d36d8 100644 --- a/src/recorder/recorder.c +++ b/src/recorder/recorder.c @@ -914,17 +914,17 @@ void gsr_recorder_destroy(gsr_recorder *self, bool exiting) { if(self->video_frame) av_frame_free(&self->video_frame); + if(self->video_codec_context) + avcodec_free_context(&self->video_codec_context); + if(self->video_encoder) - gsr_video_encoder_destroy(self->video_encoder, self->video_codec_context); + gsr_video_encoder_destroy(self->video_encoder, NULL); if(self->encoder_initialized) gsr_encoder_deinit(&self->encoder, exiting); gsr_video_sources_deinit(&self->video_sources_data); - if(self->video_codec_context) - avcodec_free_context(&self->video_codec_context); - if(self->av_format_context) { if(self->av_format_context->pb && !(self->av_format_context->oformat->flags & AVFMT_NOFILE)) avio_close(self->av_format_context->pb); -- cgit v1.2.3