From ef1b4dacaa565cb6b93c848d2d5fa691e73a2085 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Fri, 5 Jun 2026 20:54:58 +0100 Subject: [PATCH] Fix memory leak in `AudioLayout` by uninitializing channel layout --- av/audio/layout.py | 3 +++ include/avcodec.pxd | 1 + 2 files changed, 4 insertions(+) diff --git a/av/audio/layout.py b/av/audio/layout.py index 344efa220..f3adb3514 100644 --- a/av/audio/layout.py +++ b/av/audio/layout.py @@ -28,6 +28,9 @@ def get_audio_layout(c_layout: lib.AVChannelLayout) -> AudioLayout: @cython.final @cython.cclass class AudioLayout: + def __dealloc__(self): + lib.av_channel_layout_uninit(cython.address(self.layout)) + def __cinit__(self, layout): if layout is _cinit_bypass_sentinel: return diff --git a/include/avcodec.pxd b/include/avcodec.pxd index 21b5e8324..f2123ce0d 100644 --- a/include/avcodec.pxd +++ b/include/avcodec.pxd @@ -16,6 +16,7 @@ cdef extern from "libavutil/channel_layout.h" nogil: int av_channel_description(char *buf, size_t buf_size, AVChannel channel_id) int av_channel_layout_compare(AVChannelLayout *chl, AVChannelLayout *chl1) AVChannel av_channel_layout_channel_from_index(AVChannelLayout *channel_layout, unsigned int idx) + void av_channel_layout_uninit(AVChannelLayout *channel_layout) cdef extern from "libavcodec/avcodec.h" nogil: cdef int avcodec_version()