annotate mpeg4audio.h @ 11032:01bd040f8607 libavcodec

Unroll main loop so the edge==0 case is seperate. This allows many things to be simplified away. h264 decoder is overall 1% faster with a mbaff sample and 0.1% slower with the cathedral sample, probably because the slow loop filter code must be loaded into the code cache for each first MB of each row but isnt used for the following MBs.
author michael
date Thu, 28 Jan 2010 01:24:25 +0000
parents 18ff6110a6b0
children e340262ba532
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6558
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
1 /*
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
2 * MPEG-4 Audio common header
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
3 * Copyright (c) 2008 Baptiste Coudurier <baptiste.coudurier@free.fr>
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
4 *
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
5 * This file is part of FFmpeg.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
6 *
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
11 *
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
15 * Lesser General Public License for more details.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
16 *
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
20 */
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
21
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6558
diff changeset
22 #ifndef AVCODEC_MPEG4AUDIO_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6558
diff changeset
23 #define AVCODEC_MPEG4AUDIO_H
6558
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
24
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
25 #include <stdint.h>
9636
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
26 #include "get_bits.h"
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
27 #include "put_bits.h"
6558
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
28
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
29 typedef struct {
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
30 int object_type;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
31 int sampling_index;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
32 int sample_rate;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
33 int chan_config;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
34 int sbr; //< -1 implicit, 1 presence
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
35 int ext_object_type;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
36 int ext_sampling_index;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
37 int ext_sample_rate;
9527
b687da895962 Read extended channel configuration when extended AOT is BSAC.
jai_menon
parents: 9186
diff changeset
38 int ext_chan_config;
10518
d7ac0d3ddd95 Add a channels field to MPEG4AudioConfig.
alexc
parents: 10516
diff changeset
39 int channels;
6558
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
40 } MPEG4AudioConfig;
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
41
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
42 extern const int ff_mpeg4audio_sample_rates[16];
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
43 extern const uint8_t ff_mpeg4audio_channels[8];
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
44 /**
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
45 * Parse MPEG-4 systems extradata to retrieve audio configuration.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
46 * @param[in] c MPEG4AudioConfig structure to fill.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
47 * @param[in] buf Extradata from container.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
48 * @param[in] buf_size Extradata size.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
49 * @return On error -1 is returned, on success AudioSpecificConfig bit index in extradata.
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
50 */
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
51 int ff_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int buf_size);
06b1e0371e90 mpeg4audio common code
bcoudurier
parents:
diff changeset
52
9184
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
53 enum AudioObjectType {
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
54 AOT_NULL,
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
55 // Support? Name
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
56 AOT_AAC_MAIN, ///< Y Main
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
57 AOT_AAC_LC, ///< Y Low Complexity
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
58 AOT_AAC_SSR, ///< N (code in SoC repo) Scalable Sample Rate
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
59 AOT_AAC_LTP, ///< N (code in SoC repo) Long Term Prediction
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
60 AOT_SBR, ///< N (in progress) Spectral Band Replication
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
61 AOT_AAC_SCALABLE, ///< N Scalable
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
62 AOT_TWINVQ, ///< N Twin Vector Quantizer
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
63 AOT_CELP, ///< N Code Excited Linear Prediction
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
64 AOT_HVXC, ///< N Harmonic Vector eXcitation Coding
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
65 AOT_TTSI = 12, ///< N Text-To-Speech Interface
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
66 AOT_MAINSYNTH, ///< N Main Synthesis
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
67 AOT_WAVESYNTH, ///< N Wavetable Synthesis
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
68 AOT_MIDI, ///< N General MIDI
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
69 AOT_SAFX, ///< N Algorithmic Synthesis and Audio Effects
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
70 AOT_ER_AAC_LC, ///< N Error Resilient Low Complexity
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
71 AOT_ER_AAC_LTP = 19, ///< N Error Resilient Long Term Prediction
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
72 AOT_ER_AAC_SCALABLE, ///< N Error Resilient Scalable
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
73 AOT_ER_TWINVQ, ///< N Error Resilient Twin Vector Quantizer
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
74 AOT_ER_BSAC, ///< N Error Resilient Bit-Sliced Arithmetic Coding
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
75 AOT_ER_AAC_LD, ///< N Error Resilient Low Delay
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
76 AOT_ER_CELP, ///< N Error Resilient Code Excited Linear Prediction
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
77 AOT_ER_HVXC, ///< N Error Resilient Harmonic Vector eXcitation Coding
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
78 AOT_ER_HILN, ///< N Error Resilient Harmonic and Individual Lines plus Noise
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
79 AOT_ER_PARAM, ///< N Error Resilient Parametric
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
80 AOT_SSC, ///< N SinuSoidal Coding
9185
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
81 AOT_PS, ///< N Parametric Stereo
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
82 AOT_SURROUND, ///< N MPEG Surround
10063
669776b7b051 Mark the AOT escape value as supported.
alexc
parents: 10062
diff changeset
83 AOT_ESCAPE, ///< Y Escape Value
9185
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
84 AOT_L1, ///< Y Layer 1
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
85 AOT_L2, ///< Y Layer 2
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
86 AOT_L3, ///< Y Layer 3
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
87 AOT_DST, ///< N Direct Stream Transfer
10525
18ff6110a6b0 Mark AOT_ALS as a supported MPEG-4 audio object type.
alexc
parents: 10520
diff changeset
88 AOT_ALS, ///< Y Audio LosslesS
9185
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
89 AOT_SLS, ///< N Scalable LosslesS
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
90 AOT_SLS_NON_CORE, ///< N Scalable LosslesS (non core)
9186
f7fda987b769 Fix typo in AOT_ER_AAC_ELD
alexc
parents: 9185
diff changeset
91 AOT_ER_AAC_ELD, ///< N Error Resilient Enhanced Low Delay
9185
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
92 AOT_SMR_SIMPLE, ///< N Symbolic Music Representation Simple
8ad2de43aac6 Update the MPEG-4 AOT table.
alexc
parents: 9184
diff changeset
93 AOT_SMR_MAIN, ///< N Symbolic Music Representation Main
10062
2497c153571a Add USAC and SAOC AOTs to the AudioObjectType enum.
alexc
parents: 9636
diff changeset
94 AOT_USAC_NOSBR, ///< N Unified Speech and Audio Coding (no SBR)
2497c153571a Add USAC and SAOC AOTs to the AudioObjectType enum.
alexc
parents: 9636
diff changeset
95 AOT_SAOC, ///< N Spatial Audio Object Coding
10516
f59203839b77 Add Low Delay MPEG Surround to the enum of MPEG-4 Audio Object Types.
alexc
parents: 10063
diff changeset
96 AOT_LD_SURROUND, ///< N Low Delay MPEG Surround
10520
6a7840f3ed4e Cosmetics: Remove the implied gap before AOT_USAC in the MPEG-4 AOT enum.
alexc
parents: 10518
diff changeset
97 AOT_USAC, ///< N Unified Speech and Audio Coding
9184
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
98 };
a5c709bba8e4 Move MPEG-4 AOT enum to mpeg4audio.h.
alexc
parents: 7760
diff changeset
99
9636
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
100 #define MAX_PCE_SIZE 304 ///<Maximum size of a PCE including the 3-bit ID_PCE
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
101 ///<marker and the comment
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
102
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
103 int ff_copy_pce_data(PutBitContext *pb, GetBitContext *gb);
8e95c7402d1a Subroutine to copy an AAC Program Config Element (PCE)
alexc
parents: 9527
diff changeset
104
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 6558
diff changeset
105 #endif /* AVCODEC_MPEG4AUDIO_H */