summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAlex Converse <alex.converse@gmail.com>2010-07-12 18:52:03 +0000
committerAlex Converse <alex.converse@gmail.com>2010-07-12 18:52:03 +0000
commit3cac899af968f9963241c0d0236a16d70eb6b06d (patch)
tree761092f304d74ed56bef732c075cc6a8fb0b75d3 /libavcodec
parent65415bb93a32f1be81cb852e6caf925511078fc2 (diff)
Split the ADTS header decoder off of the ADTS parser.
The AAC decoder and ADTS-to-ASC BSF both require the header decoder but not full parsing capabilities. Originally committed as revision 24217 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/Makefile8
-rw-r--r--libavcodec/aac_adtstoasc_bsf.c2
-rw-r--r--libavcodec/aac_parser.c45
-rw-r--r--libavcodec/aacadtsdec.c70
-rw-r--r--libavcodec/aacadtsdec.h (renamed from libavcodec/aac_parser.h)9
-rw-r--r--libavcodec/aacdec.c2
6 files changed, 82 insertions, 54 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index e98173aab6..545c355ce8 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -42,7 +42,8 @@ OBJS-$(CONFIG_VAAPI) += vaapi.o
OBJS-$(CONFIG_VDPAU) += vdpau.o
# decoders/encoders/hardware accelerators
-OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps.o
+OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps.o \
+ aacadtsdec.o mpeg4audio.o
OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o \
aacpsy.o aactab.o \
psymodel.o iirfilter.o \
@@ -550,7 +551,7 @@ OBJS-$(CONFIG_LIBXVID) += libxvidff.o libxvid_rc.o
# parsers
OBJS-$(CONFIG_AAC_PARSER) += aac_parser.o aac_ac3_parser.o \
- mpeg4audio.o
+ aacadtsdec.o mpeg4audio.o
OBJS-$(CONFIG_AC3_PARSER) += ac3_parser.o ac3tab.o \
aac_ac3_parser.o
OBJS-$(CONFIG_CAVSVIDEO_PARSER) += cavs_parser.o
@@ -586,7 +587,8 @@ OBJS-$(CONFIG_VP3_PARSER) += vp3_parser.o
OBJS-$(CONFIG_VP8_PARSER) += vp8_parser.o
# bitstream filters
-OBJS-$(CONFIG_AAC_ADTSTOASC_BSF) += aac_adtstoasc_bsf.o
+OBJS-$(CONFIG_AAC_ADTSTOASC_BSF) += aac_adtstoasc_bsf.o aacadtsdec.o \
+ mpeg4audio.o
OBJS-$(CONFIG_CHOMP_BSF) += chomp_bsf.o
OBJS-$(CONFIG_DUMP_EXTRADATA_BSF) += dump_extradata_bsf.o
OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF) += h264_mp4toannexb_bsf.o
diff --git a/libavcodec/aac_adtstoasc_bsf.c b/libavcodec/aac_adtstoasc_bsf.c
index 9d53a011c8..9b615e65d3 100644
--- a/libavcodec/aac_adtstoasc_bsf.c
+++ b/libavcodec/aac_adtstoasc_bsf.c
@@ -20,7 +20,7 @@
*/
#include "avcodec.h"
-#include "aac_parser.h"
+#include "aacadtsdec.h"
#include "put_bits.h"
#include "get_bits.h"
#include "mpeg4audio.h"
diff --git a/libavcodec/aac_parser.c b/libavcodec/aac_parser.c
index 23ac8cebbd..3ad4610e95 100644
--- a/libavcodec/aac_parser.c
+++ b/libavcodec/aac_parser.c
@@ -22,53 +22,10 @@
#include "parser.h"
#include "aac_ac3_parser.h"
-#include "aac_parser.h"
+#include "aacadtsdec.h"
#include "get_bits.h"
#include "mpeg4audio.h"
-int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
-{
- int size, rdb, ch, sr;
- int aot, crc_abs;
-
- if(get_bits(gbc, 12) != 0xfff)
- return AAC_AC3_PARSE_ERROR_SYNC;
-
- skip_bits1(gbc); /* id */
- skip_bits(gbc, 2); /* layer */
- crc_abs = get_bits1(gbc); /* protection_absent */
- aot = get_bits(gbc, 2); /* profile_objecttype */
- sr = get_bits(gbc, 4); /* sample_frequency_index */
- if(!ff_mpeg4audio_sample_rates[sr])
- return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
- skip_bits1(gbc); /* private_bit */
- ch = get_bits(gbc, 3); /* channel_configuration */
-
- skip_bits1(gbc); /* original/copy */
- skip_bits1(gbc); /* home */
-
- /* adts_variable_header */
- skip_bits1(gbc); /* copyright_identification_bit */
- skip_bits1(gbc); /* copyright_identification_start */
- size = get_bits(gbc, 13); /* aac_frame_length */
- if(size < AAC_ADTS_HEADER_SIZE)
- return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
-
- skip_bits(gbc, 11); /* adts_buffer_fullness */
- rdb = get_bits(gbc, 2); /* number_of_raw_data_blocks_in_frame */
-
- hdr->object_type = aot + 1;
- hdr->chan_config = ch;
- hdr->crc_absent = crc_abs;
- hdr->num_aac_frames = rdb + 1;
- hdr->sampling_index = sr;
- hdr->sample_rate = ff_mpeg4audio_sample_rates[sr];
- hdr->samples = (rdb + 1) * 1024;
- hdr->bit_rate = size * 8 * hdr->sample_rate / hdr->samples;
-
- return size;
-}
-
static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info,
int *need_next_header, int *new_frame_start)
{
diff --git a/libavcodec/aacadtsdec.c b/libavcodec/aacadtsdec.c
new file mode 100644
index 0000000000..fd86d288a6
--- /dev/null
+++ b/libavcodec/aacadtsdec.c
@@ -0,0 +1,70 @@
+/*
+ * Audio and Video frame extraction
+ * Copyright (c) 2003 Fabrice Bellard
+ * Copyright (c) 2003 Michael Niedermayer
+ * Copyright (c) 2009 Alex Converse
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "aac_ac3_parser.h"
+#include "aacadtsdec.h"
+#include "get_bits.h"
+#include "mpeg4audio.h"
+
+int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
+{
+ int size, rdb, ch, sr;
+ int aot, crc_abs;
+
+ if(get_bits(gbc, 12) != 0xfff)
+ return AAC_AC3_PARSE_ERROR_SYNC;
+
+ skip_bits1(gbc); /* id */
+ skip_bits(gbc, 2); /* layer */
+ crc_abs = get_bits1(gbc); /* protection_absent */
+ aot = get_bits(gbc, 2); /* profile_objecttype */
+ sr = get_bits(gbc, 4); /* sample_frequency_index */
+ if(!ff_mpeg4audio_sample_rates[sr])
+ return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
+ skip_bits1(gbc); /* private_bit */
+ ch = get_bits(gbc, 3); /* channel_configuration */
+
+ skip_bits1(gbc); /* original/copy */
+ skip_bits1(gbc); /* home */
+
+ /* adts_variable_header */
+ skip_bits1(gbc); /* copyright_identification_bit */
+ skip_bits1(gbc); /* copyright_identification_start */
+ size = get_bits(gbc, 13); /* aac_frame_length */
+ if(size < AAC_ADTS_HEADER_SIZE)
+ return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
+
+ skip_bits(gbc, 11); /* adts_buffer_fullness */
+ rdb = get_bits(gbc, 2); /* number_of_raw_data_blocks_in_frame */
+
+ hdr->object_type = aot + 1;
+ hdr->chan_config = ch;
+ hdr->crc_absent = crc_abs;
+ hdr->num_aac_frames = rdb + 1;
+ hdr->sampling_index = sr;
+ hdr->sample_rate = ff_mpeg4audio_sample_rates[sr];
+ hdr->samples = (rdb + 1) * 1024;
+ hdr->bit_rate = size * 8 * hdr->sample_rate / hdr->samples;
+
+ return size;
+}
diff --git a/libavcodec/aac_parser.h b/libavcodec/aacadtsdec.h
index 1e32cd84f4..bdc577179f 100644
--- a/libavcodec/aac_parser.h
+++ b/libavcodec/aacadtsdec.h
@@ -1,5 +1,5 @@
/*
- * AAC parser prototypes
+ * AAC ADTS header decoding prototypes and structures
* Copyright (c) 2003 Fabrice Bellard
* Copyright (c) 2003 Michael Niedermayer
*
@@ -20,11 +20,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_AAC_PARSER_H
-#define AVCODEC_AAC_PARSER_H
+#ifndef AVCODEC_AACADTSDEC_H
+#define AVCODEC_AACADTSDEC_H
#include <stdint.h>
-#include "aac_ac3_parser.h"
#include "get_bits.h"
#define AAC_ADTS_HEADER_SIZE 7
@@ -52,4 +51,4 @@ typedef struct {
*/
int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr);
-#endif /* AVCODEC_AAC_PARSER_H */
+#endif /* AVCODEC_AACADTSDEC_H */
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index f85b29240f..19e7783dbf 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -90,7 +90,7 @@
#include "sbr.h"
#include "aacsbr.h"
#include "mpeg4audio.h"
-#include "aac_parser.h"
+#include "aacadtsdec.h"
#include <assert.h>
#include <errno.h>