[FFmpeg-soc] [soc]: r2957 - in aacenc: aac.h aacenc.c aacpsy.c aacpsy.h
kostya
subversion at mplayerhq.hu
Thu Jul 31 18:57:15 CEST 2008
Author: kostya
Date: Thu Jul 31 18:57:15 2008
New Revision: 2957
Log:
Move borrowed declarations to aac.h, it will be easier to merge with decoder in future
Added:
aacenc/aac.h
Modified:
aacenc/aacenc.c
aacenc/aacpsy.c
aacenc/aacpsy.h
Added: aacenc/aac.h
==============================================================================
--- (empty file)
+++ aacenc/aac.h Thu Jul 31 18:57:15 2008
@@ -0,0 +1,167 @@
+/* this file is a mere collection of things that were borrowed from
+ * GSoC AAC decoder and should be put into common aac.h
+ * while the merge is not done, declarations should reside here
+ */
+#ifndef ERSATZ_AAC_H
+#define ERSATZ_AAC_H
+
+#define MAX_SWB_SIZE 51
+
+DECLARE_ALIGNED_16(static float, kbd_long_1024[1024]);
+DECLARE_ALIGNED_16(static float, kbd_short_128[128]);
+DECLARE_ALIGNED_16(static float, sine_long_1024[1024]);
+DECLARE_ALIGNED_16(static float, sine_short_128[128]);
+
+/**
+ * window sequences
+ */
+enum WindowSequence {
+ ONLY_LONG_SEQUENCE,
+ LONG_START_SEQUENCE,
+ EIGHT_SHORT_SEQUENCE,
+ LONG_STOP_SEQUENCE,
+};
+
+/**
+ * IDs for raw_data_block
+ */
+enum {
+ ID_SCE = 0x0,
+ ID_CPE,
+ ID_CCE,
+ ID_LFE,
+ ID_DSE,
+ ID_PCE,
+ ID_FIL,
+ ID_END
+};
+
+/**
+ * special codebooks
+ */
+enum Codebook {
+ ZERO_HCB = 0,
+ FIRST_PAIR_HCB = 5,
+ ESC_HCB = 11,
+ NOISE_HCB = 13,
+ INTENSITY_HCB2 = 14,
+ INTENSITY_HCB = 15,
+ ESC_FLAG = 16,
+};
+
+/**
+ * pulse tool
+ */
+typedef struct {
+ int present;
+ int num_pulse;
+ int start;
+ int offset[4];
+ int amp[4];
+} Pulse;
+
+#define MAX_TAGID 16
+
+/**
+ * Program configuration - describes how channels are arranged. Either read from
+ * stream (ID_PCE) or created based on a default fixed channel arrangement.
+ */
+typedef struct {
+ int che_type[4][MAX_TAGID]; ///< channel element type with the first index as the first 4 raw_data_block IDs
+ int mono_mixdown; ///< The SCE tag to use if user requests mono output, -1 if not available.
+ int stereo_mixdown; ///< The CPE tag to use if user requests stereo output, -1 if not available.
+ int matrix_mixdown; ///< The CPE tag to use if user requests matrixed stereo output, -1 if not available.
+ int mixdown_coeff_index; ///< 0-3
+ int pseudo_surround; ///< Mix surround channels out of phase.
+} ProgramConfig;
+
+
+/**
+ * Individual Channel Stream
+ */
+typedef struct {
+ int intensity_present;
+ uint8_t max_sfb; ///< number of scalefactor bands per group
+ enum WindowSequence window_sequence;
+ enum WindowSequence window_sequence_prev;
+ uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window.
+ int num_window_groups;
+ uint8_t grouping;
+ uint8_t group_len[8];
+ const uint8_t *swb_sizes;
+ int num_swb;
+ int num_windows;
+ int tns_max_bands;
+} IndividualChannelStream;
+
+#define TNS_MAX_ORDER 20
+/**
+ * Temporal Noise Shaping
+ */
+typedef struct {
+ int present;
+ int n_filt[8];
+ int length[8][4];
+ int direction[8][4];
+ int order[8][4];
+ int coef_res[8];
+ int coef_compress[8][4];
+ int coef_len[8][4];
+ const float *tmp2_map[8][4];
+ int coef[8][4][TNS_MAX_ORDER];
+} TemporalNoiseShaping;
+
+/**
+ * M/S joint channel coding
+ */
+typedef struct {
+ int present;
+ uint8_t mask[8][64];
+} MidSideStereo;
+
+/**
+ * Single Channel Element
+ * Used for both SCE and LFE elements
+ */
+typedef struct {
+ int gain; /**< Channel gain (not used by AAC bitstream).
+ * Note that this is applied before joint stereo decoding.
+ * Thus, when used inside CPE elements, both channels must have equal gain.
+ */
+ IndividualChannelStream ics;
+ TemporalNoiseShaping tns;
+ Pulse pulse;
+ int zeroes[8][64];
+ int sf_idx[8][64];
+ enum Codebook cb[8][64]; ///< codebooks
+ int cb_run_end[8][64]; ///< codebook run end points
+ float sf[8][64]; ///< scalefactors
+ DECLARE_ALIGNED_16(float, coeffs[1024]); ///< coefficients for IMDCT
+ DECLARE_ALIGNED_16(float, saved[1024]); ///< overlap
+ DECLARE_ALIGNED_16(float, ret[1024]); ///< PCM output
+ DECLARE_ALIGNED_16(int, icoefs[1024]); ///< integer coefficients for coding
+} SingleChannelElement;
+
+/**
+ * channel element - generic struct for SCE/CPE/CCE/LFE
+ */
+typedef struct {
+ // CPE specific
+ int common_window; ///< Set if channels share a common 'IndividualChannelStream' in bitstream.
+ MidSideStereo ms;
+ // shared
+ SingleChannelElement ch[2];
+ // CCE specific
+// ChannelCoupling coup;
+} ChannelElement;
+
+//my stuff
+
+#define SCALE_ONE_POS 140 ///< scalefactor index that corresponds to scale=1.0
+#define SCALE_MAX_POS 255 ///< scalefactor index maximum value
+#define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard
+#define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference
+
+
+#endif
+
Modified: aacenc/aacenc.c
==============================================================================
--- aacenc/aacenc.c (original)
+++ aacenc/aacenc.c Thu Jul 31 18:57:15 2008
@@ -30,13 +30,7 @@
#include "mpeg4audio.h"
#include "aacpsy.h"
-
-// XXX: borrowed from aac.c, move to some header eventually
-DECLARE_ALIGNED_16(static float, kbd_long_1024[1024]);
-DECLARE_ALIGNED_16(static float, kbd_short_128[128]);
-DECLARE_ALIGNED_16(static float, sine_long_1024[1024]);
-DECLARE_ALIGNED_16(static float, sine_short_128[128]);
-
+#include "aac.h"
#include "aactab.h"
static const uint8_t swb_size_1024_96[] = {
@@ -118,11 +112,6 @@ static const uint8_t *swb_size_128[] = {
swb_size_128_16, swb_size_128_16, swb_size_128_8
};
-
-#define MAX_SWB_SIZE 51
-
-//borrowed data ends here
-
#define CB_UNSIGNED 0x01 ///< coefficients are coded as absolute values
#define CB_PAIRS 0x02 ///< coefficients are grouped into pairs before coding (quads by default)
#define CB_ESCAPE 0x04 ///< codebook allows escapes
@@ -174,11 +163,6 @@ typedef struct {
AACPsyContext psy;
} AACEncContext;
-#define SCALE_ONE_POS 140 ///< scalefactor index that corresponds to scale=1.0
-#define SCALE_MAX_POS 255 ///< scalefactor index maximum value
-#define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard
-#define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference
-
/**
* Make AAC audio config object.
* @see 1.6.2.1
Modified: aacenc/aacpsy.c
==============================================================================
--- aacenc/aacpsy.c (original)
+++ aacenc/aacpsy.c Thu Jul 31 18:57:15 2008
@@ -32,11 +32,6 @@
static float pow2sf_tab[340];
-#define SCALE_ONE_POS 140
-#define SCALE_MAX_POS 255
-#define SCALE_MAX_DIFF 60
-
-
/**
* Convert coefficients to integers.
* @return sum of coefficients
Modified: aacenc/aacpsy.h
==============================================================================
--- aacenc/aacpsy.h (original)
+++ aacenc/aacpsy.h Thu Jul 31 18:57:15 2008
@@ -24,6 +24,7 @@
#include "avcodec.h"
#include "dsputil.h"
+#include "aac.h"
enum AACPsyModelType{
AAC_PSY_NULL, // do nothing on frequencies
@@ -33,151 +34,6 @@ enum AACPsyModelType{
AAC_NB_PSY_MODELS
};
-// data structures borrowed from aac.c with some minor modifications
-/**
- * window sequences
- */
-enum WindowSequence {
- ONLY_LONG_SEQUENCE,
- LONG_START_SEQUENCE,
- EIGHT_SHORT_SEQUENCE,
- LONG_STOP_SEQUENCE,
-};
-
-/**
- * IDs for raw_data_block
- */
-enum {
- ID_SCE = 0x0,
- ID_CPE,
- ID_CCE,
- ID_LFE,
- ID_DSE,
- ID_PCE,
- ID_FIL,
- ID_END
-};
-
-/**
- * special codebooks
- */
-enum Codebook {
- ZERO_HCB = 0,
- FIRST_PAIR_HCB = 5,
- ESC_HCB = 11,
- NOISE_HCB = 13,
- INTENSITY_HCB2 = 14,
- INTENSITY_HCB = 15,
- ESC_FLAG = 16,
-};
-
-/**
- * pulse tool
- */
-typedef struct {
- int present;
- int num_pulse;
- int start;
- int offset[4];
- int amp[4];
-} Pulse;
-
-#define MAX_TAGID 16
-
-/**
- * Program configuration - describes how channels are arranged. Either read from
- * stream (ID_PCE) or created based on a default fixed channel arrangement.
- */
-typedef struct {
- int che_type[4][MAX_TAGID]; ///< channel element type with the first index as the first 4 raw_data_block IDs
- int mono_mixdown; ///< The SCE tag to use if user requests mono output, -1 if not available.
- int stereo_mixdown; ///< The CPE tag to use if user requests stereo output, -1 if not available.
- int matrix_mixdown; ///< The CPE tag to use if user requests matrixed stereo output, -1 if not available.
- int mixdown_coeff_index; ///< 0-3
- int pseudo_surround; ///< Mix surround channels out of phase.
-} ProgramConfig;
-
-/**
- * Individual Channel Stream
- */
-typedef struct {
- int intensity_present;
- uint8_t max_sfb; ///< number of scalefactor bands per group
- enum WindowSequence window_sequence;
- enum WindowSequence window_sequence_prev;
- uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window.
- int num_window_groups;
- uint8_t grouping;
- uint8_t group_len[8];
- const uint8_t *swb_sizes;
- int num_swb;
- int num_windows;
- int tns_max_bands;
-} IndividualChannelStream;
-
-#define TNS_MAX_ORDER 20
-/**
- * Temporal Noise Shaping
- */
-typedef struct {
- int present;
- int n_filt[8];
- int length[8][4];
- int direction[8][4];
- int order[8][4];
- int coef_res[8];
- int coef_compress[8][4];
- int coef_len[8][4];
- const float *tmp2_map[8][4];
- int coef[8][4][TNS_MAX_ORDER];
-} TemporalNoiseShaping;
-
-/**
- * M/S joint channel coding
- */
-typedef struct {
- int present;
- uint8_t mask[8][64];
-} MidSideStereo;
-
-/**
- * Single Channel Element
- * Used for both SCE and LFE elements
- */
-typedef struct {
- int gain; /**< Channel gain (not used by AAC bitstream).
- * Note that this is applied before joint stereo decoding.
- * Thus, when used inside CPE elements, both channels must have equal gain.
- */
- IndividualChannelStream ics;
- TemporalNoiseShaping tns;
- Pulse pulse;
- int zeroes[8][64];
- int sf_idx[8][64];
- enum Codebook cb[8][64]; ///< codebooks
- int cb_run_end[8][64]; ///< codebook run end points
- float sf[8][64]; ///< scalefactors
- DECLARE_ALIGNED_16(float, coeffs[1024]); ///< coefficients for IMDCT
- DECLARE_ALIGNED_16(float, saved[1024]); ///< overlap
- DECLARE_ALIGNED_16(float, ret[1024]); ///< PCM output
- DECLARE_ALIGNED_16(int, icoefs[1024]); ///< integer coefficients for coding
-} SingleChannelElement;
-
-/**
- * channel element - generic struct for SCE/CPE/CCE/LFE
- */
-typedef struct {
- // CPE specific
- int common_window; ///< Set if channels share a common 'IndividualChannelStream' in bitstream.
- MidSideStereo ms;
- // shared
- SingleChannelElement ch[2];
- // CCE specific
-// ChannelCoupling coup;
-} ChannelElement;
-
-// borrowing temporarily ends here
-
/**
* context used by psychoacoustic model
*/
More information about the FFmpeg-soc
mailing list