[FFmpeg-devel] [PATCH 4/5] avformat/iamf: Don't mix ownership and non-ownership pointers

James Almer jamrial at gmail.com
Tue Feb 20 00:03:08 EET 2024


On 2/19/2024 6:52 PM, Andreas Rheinhardt wrote:
> IAMFAudioElement and IAMFMixPresentation currently contain
> pointers to independently allocated objects that are sometimes
> owned by said structures and sometimes not.
> 
> More precisely, upon success the demuxer transfers ownership
> of these other objects newly created AVStreamGroups, but it
> keeps its pointers. iamf_read_close() therefore always resets
> these pointers (because the cleanup code always treats them
> as ownership pointers). This leads to memory leaks in case
> iamf_read_header() without having attached all of these
> objects to stream groups.
> 
> The muxer has a similar issue: It also clears these pointers
> (pointing to objects owned by stream groups created by the user)
> in its deinit function.
> 
> This commit fixes this memleak by explicitly adding non-ownership
> pointers; this also allows to remove the code to reset the
> ownership pointers.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
>   libavformat/iamf.h        | 10 ++++++++++
>   libavformat/iamf_parse.c  |  2 ++
>   libavformat/iamf_writer.c | 16 ++++++++--------
>   libavformat/iamfdec.c     | 22 ++++++++--------------
>   libavformat/iamfenc.c     | 12 +-----------
>   5 files changed, 29 insertions(+), 33 deletions(-)
> 
> diff --git a/libavformat/iamf.h b/libavformat/iamf.h
> index d88a24c435..0cb0902e86 100644
> --- a/libavformat/iamf.h
> +++ b/libavformat/iamf.h
> @@ -86,6 +86,11 @@ typedef struct IAMFSubStream {
>   } IAMFSubStream;
>   
>   typedef struct IAMFAudioElement {
> +    const AVIAMFAudioElement *celement;
> +    /**
> +     * element backs celement iff the AVIAMFAudioElement

Typo. Also in IAMFMixPresentation.

Should be ok otherwise.


More information about the ffmpeg-devel mailing list