[FFmpeg-cvslog] r26174 - trunk/libavcodec/ac3enc.c
jbr
subversion
Thu Dec 30 23:30:48 CET 2010
Author: jbr
Date: Thu Dec 30 23:30:48 2010
New Revision: 26174
Log:
Add typedefs and a macro that will allow sharing of functions between the
fixed-point and floating-point AC-3 encoders.
Modified:
trunk/libavcodec/ac3enc.c
Modified: trunk/libavcodec/ac3enc.c
==============================================================================
--- trunk/libavcodec/ac3enc.c Thu Dec 30 23:13:41 2010 (r26173)
+++ trunk/libavcodec/ac3enc.c Thu Dec 30 23:30:48 2010 (r26174)
@@ -43,6 +43,11 @@
/** Scale a float value by 2^bits and convert to an integer. */
#define SCALE_FLOAT(a, bits) lrintf((a) * (float)(1 << (bits)))
+typedef int16_t SampleType;
+typedef int32_t CoefType;
+
+#define SCALE_COEF(a) (a)
+
/** Scale a float value by 2^15, convert to an integer, and clip to range -32767..32767. */
#define FIX15(a) av_clip(SCALE_FLOAT(a, 15), -32767, 32767)
@@ -71,7 +76,7 @@ typedef struct AC3MDCTContext {
*/
typedef struct AC3Block {
uint8_t **bap; ///< bit allocation pointers (bap)
- int32_t **mdct_coef; ///< MDCT coefficients
+ CoefType **mdct_coef; ///< MDCT coefficients
uint8_t **exp; ///< original exponents
uint8_t **grouped_exp; ///< grouped exponents
int16_t **psd; ///< psd per frequency bin
@@ -137,7 +142,7 @@ typedef struct AC3EncodeContext {
int16_t **planar_samples;
uint8_t *bap_buffer;
uint8_t *bap1_buffer;
- int32_t *mdct_coef_buffer;
+ CoefType *mdct_coef_buffer;
uint8_t *exp_buffer;
uint8_t *grouped_exp_buffer;
int16_t *psd_buffer;
@@ -145,7 +150,7 @@ typedef struct AC3EncodeContext {
int16_t *mask_buffer;
uint16_t *qmant_buffer;
- DECLARE_ALIGNED(16, int16_t, windowed_samples)[AC3_WINDOW_SIZE];
+ DECLARE_ALIGNED(16, SampleType, windowed_samples)[AC3_WINDOW_SIZE];
} AC3EncodeContext;
@@ -204,13 +209,13 @@ static void adjust_frame_size(AC3EncodeC
* Channels are reordered from FFmpeg's default order to AC-3 order.
*/
static void deinterleave_input_samples(AC3EncodeContext *s,
- const int16_t *samples)
+ const SampleType *samples)
{
int ch, i;
/* deinterleave and remap input samples */
for (ch = 0; ch < s->channels; ch++) {
- const int16_t *sptr;
+ const SampleType *sptr;
int sinc;
/* copy last 256 samples of previous frame to the start of the current frame */
@@ -525,7 +530,7 @@ static void apply_mdct(AC3EncodeContext
for (ch = 0; ch < s->channels; ch++) {
for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
AC3Block *block = &s->blocks[blk];
- const int16_t *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE];
+ const SampleType *input_samples = &s->planar_samples[ch][blk * AC3_BLOCK_SIZE];
apply_window(s->windowed_samples, input_samples, s->mdct.window, AC3_WINDOW_SIZE);
@@ -567,7 +572,7 @@ static void extract_exponents(AC3EncodeC
AC3Block *block = &s->blocks[blk];
for (i = 0; i < AC3_MAX_COEFS; i++) {
int e;
- int v = abs(block->mdct_coef[ch][i]);
+ int v = abs(SCALE_COEF(block->mdct_coef[ch][i]));
if (v == 0)
e = 24;
else {
@@ -1287,7 +1292,7 @@ static inline int asym_quant(int c, int
/**
* Quantize a set of mantissas for a single channel in a single block.
*/
-static void quantize_mantissas_blk_ch(AC3EncodeContext *s, int32_t *mdct_coef,
+static void quantize_mantissas_blk_ch(AC3EncodeContext *s, CoefType *mdct_coef,
int8_t exp_shift, uint8_t *exp,
uint8_t *bap, uint16_t *qmant, int n)
{
@@ -1295,7 +1300,7 @@ static void quantize_mantissas_blk_ch(AC
for (i = 0; i < n; i++) {
int v;
- int c = mdct_coef[i];
+ int c = SCALE_COEF(mdct_coef[i]);
int e = exp[i] - exp_shift;
int b = bap[i];
switch (b) {
@@ -1650,7 +1655,7 @@ static int ac3_encode_frame(AVCodecConte
int buf_size, void *data)
{
AC3EncodeContext *s = avctx->priv_data;
- const int16_t *samples = data;
+ const SampleType *samples = data;
int ret;
if (s->bit_alloc.sr_code == 1)
More information about the ffmpeg-cvslog
mailing list