diff options
author | Rostislav Pehlivanov <atomnuker@gmail.com> | 2017-07-18 22:47:30 +0300 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2017-07-18 22:52:06 +0300 |
commit | 79450adfc80bb5d5d94deb1e1dd573b6cebfbe99 (patch) | |
tree | 272e4641323652a5750e2b36e03d25dc47c38b39 | |
parent | 9b937958907daaddade139c36ce33c6eac269631 (diff) |
opus: simplify coarse energy beta coefficients
Just put the subtraction in the table.
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
-rw-r--r-- | libavcodec/opus_celt.c | 26 | ||||
-rw-r--r-- | libavcodec/opusenc.c | 4 | ||||
-rw-r--r-- | libavcodec/opustab.c | 4 |
3 files changed, 15 insertions, 19 deletions
diff --git a/libavcodec/opus_celt.c b/libavcodec/opus_celt.c index 0177b123b1..84d484753b 100644 --- a/libavcodec/opus_celt.c +++ b/libavcodec/opus_celt.c @@ -29,25 +29,21 @@ #include "opustab.h" #include "opus_pvq.h" +/* Use the 2D z-transform to apply prediction in both the time domain (alpha) + * and the frequency domain (beta) */ static void celt_decode_coarse_energy(CeltFrame *f, OpusRangeCoder *rc) { int i, j; - float prev[2] = {0}; - float alpha, beta; - const uint8_t *model; - - /* use the 2D z-transform to apply prediction in both */ - /* the time domain (alpha) and the frequency domain (beta) */ - - if (opus_rc_tell(rc)+3 <= f->framebits && ff_opus_rc_dec_log(rc, 3)) { - /* intra frame */ - alpha = 0; - beta = 1.0f - 4915.0f/32768.0f; + float prev[2] = { 0 }; + float alpha = ff_celt_alpha_coef[f->size]; + float beta = ff_celt_beta_coef[f->size]; + const uint8_t *model = ff_celt_coarse_energy_dist[f->size][0]; + + /* intra frame */ + if (opus_rc_tell(rc) + 3 <= f->framebits && ff_opus_rc_dec_log(rc, 3)) { + alpha = 0.0f; + beta = 1.0f - (4915.0f/32768.0f); model = ff_celt_coarse_energy_dist[f->size][1]; - } else { - alpha = ff_celt_alpha_coef[f->size]; - beta = 1.0f - ff_celt_beta_coef[f->size]; - model = ff_celt_coarse_energy_dist[f->size][0]; } for (i = 0; i < CELT_MAX_BANDS; i++) { diff --git a/libavcodec/opusenc.c b/libavcodec/opusenc.c index c54df8c060..8f2da4a7ba 100644 --- a/libavcodec/opusenc.c +++ b/libavcodec/opusenc.c @@ -644,10 +644,10 @@ static void exp_quant_coarse(OpusRangeCoder *rc, CeltFrame *f, if (intra) { alpha = 0.0f; - beta = 1.0f - 4915.0f/32768.0f; + beta = 1.0f - (4915.0f/32768.0f); } else { alpha = ff_celt_alpha_coef[f->size]; - beta = 1.0f - ff_celt_beta_coef[f->size]; + beta = ff_celt_beta_coef[f->size]; } for (i = f->start_band; i < f->end_band; i++) { diff --git a/libavcodec/opustab.c b/libavcodec/opustab.c index b31705297e..fb340e07e8 100644 --- a/libavcodec/opustab.c +++ b/libavcodec/opustab.c @@ -796,8 +796,8 @@ const float ff_celt_alpha_coef[] = { 29440.0f/32768.0f, 26112.0f/32768.0f, 21248.0f/32768.0f, 16384.0f/32768.0f }; -const float ff_celt_beta_coef[] = { /* TODO: precompute 1 minus this if the code ends up neater */ - 30147.0f/32768.0f, 22282.0f/32768.0f, 12124.0f/32768.0f, 6554.0f/32768.0f +const float ff_celt_beta_coef[] = { + 1.0f - (30147.0f/32768.0f), 1.0f - (22282.0f/32768.0f), 1.0f - (12124.0f/32768.0f), 1.0f - (6554.0f/32768.0f), }; const uint8_t ff_celt_coarse_energy_dist[4][2][42] = { |