encoder fix: segfault on exit

This commit is contained in:
minjaesong
2025-09-01 21:35:03 +09:00
parent 680b545590
commit c0f4c2789c

View File

@@ -1532,18 +1532,21 @@ static int alloc_encoder_buffers(tev_encoder_t *enc) {
static void free_encoder(tev_encoder_t *enc) { static void free_encoder(tev_encoder_t *enc) {
if (!enc) return; if (!enc) return;
ZSTD_freeCCtx(enc->zstd_context); if (enc->zstd_context) {
ZSTD_freeCCtx(enc->zstd_context);
enc->zstd_context = NULL;
}
free(enc->current_rgb); if (enc->current_rgb) { free(enc->current_rgb); enc->current_rgb = NULL; }
free(enc->previous_rgb); if (enc->previous_rgb) { free(enc->previous_rgb); enc->previous_rgb = NULL; }
free(enc->reference_rgb); if (enc->reference_rgb) { free(enc->reference_rgb); enc->reference_rgb = NULL; }
free(enc->y_workspace); if (enc->y_workspace) { free(enc->y_workspace); enc->y_workspace = NULL; }
free(enc->co_workspace); if (enc->co_workspace) { free(enc->co_workspace); enc->co_workspace = NULL; }
free(enc->cg_workspace); if (enc->cg_workspace) { free(enc->cg_workspace); enc->cg_workspace = NULL; }
free(enc->dct_workspace); if (enc->dct_workspace) { free(enc->dct_workspace); enc->dct_workspace = NULL; }
free(enc->block_data); if (enc->block_data) { free(enc->block_data); enc->block_data = NULL; }
free(enc->compressed_buffer); if (enc->compressed_buffer) { free(enc->compressed_buffer); enc->compressed_buffer = NULL; }
free(enc->mp2_buffer); if (enc->mp2_buffer) { free(enc->mp2_buffer); enc->mp2_buffer = NULL; }
free(enc); free(enc);
} }
@@ -2015,15 +2018,19 @@ static void show_usage(const char *program_name) {
static void cleanup_encoder(tev_encoder_t *enc) { static void cleanup_encoder(tev_encoder_t *enc) {
if (!enc) return; if (!enc) return;
if (enc->ffmpeg_video_pipe) pclose(enc->ffmpeg_video_pipe); if (enc->ffmpeg_video_pipe) {
pclose(enc->ffmpeg_video_pipe);
enc->ffmpeg_video_pipe = NULL;
}
if (enc->mp2_file) { if (enc->mp2_file) {
fclose(enc->mp2_file); fclose(enc->mp2_file);
enc->mp2_file = NULL;
unlink(TEMP_AUDIO_FILE); // Remove temporary audio file unlink(TEMP_AUDIO_FILE); // Remove temporary audio file
} }
free(enc->input_file); if (enc->input_file) { free(enc->input_file); enc->input_file = NULL; }
free(enc->output_file); if (enc->output_file) { free(enc->output_file); enc->output_file = NULL; }
free(enc->subtitle_file); if (enc->subtitle_file) { free(enc->subtitle_file); enc->subtitle_file = NULL; }
free_subtitle_list(enc->subtitle_list); free_subtitle_list(enc->subtitle_list);
free_encoder(enc); free_encoder(enc);