Commit 0e4dbe29 authored by Justin Ruggles's avatar Justin Ruggles

ac3enc: avoid masking output in asym_quant() by using signed values for

quantized mantissas.
parent 2702a6f1
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#include "eac3enc.h" #include "eac3enc.h"
typedef struct AC3Mant { typedef struct AC3Mant {
uint16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr; ///< mantissa pointers for bap=1,2,4 int16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr; ///< mantissa pointers for bap=1,2,4
int mant1_cnt, mant2_cnt, mant4_cnt; ///< mantissa counts for bap=1,2,4 int mant1_cnt, mant2_cnt, mant4_cnt; ///< mantissa counts for bap=1,2,4
} AC3Mant; } AC3Mant;
...@@ -1136,7 +1136,7 @@ static inline int asym_quant(int c, int e, int qbits) ...@@ -1136,7 +1136,7 @@ static inline int asym_quant(int c, int e, int qbits)
if (v >= m) if (v >= m)
v = m - 1; v = m - 1;
av_assert2(v >= -m); av_assert2(v >= -m);
return v & ((1 << qbits)-1); return v;
} }
...@@ -1145,7 +1145,7 @@ static inline int asym_quant(int c, int e, int qbits) ...@@ -1145,7 +1145,7 @@ static inline int asym_quant(int c, int e, int qbits)
*/ */
static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef, static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef,
uint8_t *exp, uint8_t *bap, uint8_t *exp, uint8_t *bap,
uint16_t *qmant, int start_freq, int16_t *qmant, int start_freq,
int end_freq) int end_freq)
{ {
int i; int i;
...@@ -1497,14 +1497,14 @@ static void output_audio_block(AC3EncodeContext *s, int blk) ...@@ -1497,14 +1497,14 @@ static void output_audio_block(AC3EncodeContext *s, int blk)
q = block->qmant[ch][i]; q = block->qmant[ch][i];
b = s->ref_bap[ch][blk][i]; b = s->ref_bap[ch][blk][i];
switch (b) { switch (b) {
case 0: break; case 0: break;
case 1: if (q != 128) put_bits(&s->pb, 5, q); break; case 1: if (q != 128) put_bits (&s->pb, 5, q); break;
case 2: if (q != 128) put_bits(&s->pb, 7, q); break; case 2: if (q != 128) put_bits (&s->pb, 7, q); break;
case 3: put_bits(&s->pb, 3, q); break; case 3: put_sbits(&s->pb, 3, q); break;
case 4: if (q != 128) put_bits(&s->pb, 7, q); break; case 4: if (q != 128) put_bits (&s->pb, 7, q); break;
case 14: put_bits(&s->pb, 14, q); break; case 14: put_sbits(&s->pb, 14, q); break;
case 15: put_bits(&s->pb, 16, q); break; case 15: put_sbits(&s->pb, 16, q); break;
default: put_bits(&s->pb, b-1, q); break; default: put_sbits(&s->pb, b-1, q); break;
} }
} }
if (ch == CPL_CH) if (ch == CPL_CH)
......
...@@ -212,7 +212,7 @@ typedef struct AC3EncodeContext { ...@@ -212,7 +212,7 @@ typedef struct AC3EncodeContext {
int16_t *psd_buffer; int16_t *psd_buffer;
int16_t *band_psd_buffer; int16_t *band_psd_buffer;
int16_t *mask_buffer; int16_t *mask_buffer;
uint16_t *qmant_buffer; int16_t *qmant_buffer;
uint8_t *cpl_coord_exp_buffer; uint8_t *cpl_coord_exp_buffer;
uint8_t *cpl_coord_mant_buffer; uint8_t *cpl_coord_mant_buffer;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment