1/* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19#include "config.h" 20 21#include <stddef.h> 22#include <stdint.h> 23 24#include "adts_header.h" 25#include "adts_parser.h" 26 27int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, uint8_t *frames) 28{ 29#if CONFIG_ADTS_HEADER 30 GetBitContext gb; 31 AACADTSHeaderInfo hdr; 32 int err = init_get_bits8(&gb, buf, AV_AAC_ADTS_HEADER_SIZE); 33 if (err < 0) 34 return err; 35 err = ff_adts_header_parse(&gb, &hdr); 36 if (err < 0) 37 return err; 38 *samples = hdr.samples; 39 *frames = hdr.num_aac_frames; 40 return 0; 41#else 42 return AVERROR(ENOSYS); 43#endif 44} 45 46int avpriv_adts_header_parse(AACADTSHeaderInfo **phdr, const uint8_t *buf, size_t size) 47{ 48#if CONFIG_ADTS_HEADER 49 int ret = 0; 50 GetBitContext gb; 51 52 if (!phdr || !buf || size < AV_AAC_ADTS_HEADER_SIZE) 53 return AVERROR_INVALIDDATA; 54 55 *phdr = av_mallocz(sizeof(AACADTSHeaderInfo)); 56 if (!*phdr) 57 return AVERROR(ENOMEM); 58 59 ret = init_get_bits8(&gb, buf, AV_AAC_ADTS_HEADER_SIZE); 60 if (ret < 0) { 61 av_freep(phdr); 62 return ret; 63 } 64 65 ret = ff_adts_header_parse(&gb, *phdr); 66 if (ret < 0) { 67 av_freep(phdr); 68 return ret; 69 } 70 71 return 0; 72#else 73 return AVERROR(ENOSYS); 74#endif 75} 76