diff options
author | James Almer <jamrial@gmail.com> | 2022-10-23 04:07:34 +0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-10-26 16:18:24 +0300 |
commit | 676e7d7f9b5dc76d5124cc99e3a3fa6c823decc3 (patch) | |
tree | 2dee153930f693309ab00ee185f9bd6d0dd626f1 /libavcodec/adts_parser.c | |
parent | 72db6a4f5f5a909114ad46f5c5fb1221f452e9f3 (diff) |
avcodec/adts_parser: allow passing a pre allocated AACADTSHeaderInfo to avpriv_adts_header_parse()
Code freeing the struct on failure is kept for backwards compatibility, but
should be removed in the next major bump, and the existing lavf user adapted.
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/adts_parser.c')
-rw-r--r-- | libavcodec/adts_parser.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libavcodec/adts_parser.c b/libavcodec/adts_parser.c index 4a1a8fd5f4..f2e155fc99 100644 --- a/libavcodec/adts_parser.c +++ b/libavcodec/adts_parser.c @@ -47,24 +47,30 @@ int avpriv_adts_header_parse(AACADTSHeaderInfo **phdr, const uint8_t *buf, size_ { #if CONFIG_ADTS_HEADER int ret = 0; + int allocated = 0; GetBitContext gb; if (!phdr || !buf || size < AV_AAC_ADTS_HEADER_SIZE) return AVERROR_INVALIDDATA; - *phdr = av_mallocz(sizeof(AACADTSHeaderInfo)); + if (!*phdr) { + allocated = 1; + *phdr = av_mallocz(sizeof(AACADTSHeaderInfo)); + } if (!*phdr) return AVERROR(ENOMEM); ret = init_get_bits8(&gb, buf, AV_AAC_ADTS_HEADER_SIZE); if (ret < 0) { - av_freep(phdr); + if (allocated) + av_freep(phdr); return ret; } ret = ff_adts_header_parse(&gb, *phdr); if (ret < 0) { - av_freep(phdr); + if (allocated) + av_freep(phdr); return ret; } |