[FFmpeg-soc] [soc]AMR-WB decoder branch, master, updated.
Marcelo Póvoa
marspeoplester at gmail.com
Fri Jul 23 06:20:53 CEST 2010
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "AMR-WB decoder".
The branch, master has been updated
via 30af71e0fb3351656d148d939ba401c980304d4f (commit)
from ade74ca125016eab5a8c5766e192bd8885686b01 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 30af71e0fb3351656d148d939ba401c980304d4f
Author: Marcelo Povoa <marspeoplester at gmail.com>
Date: Fri Jul 23 01:15:27 2010 -0300
Various small fixes to the ISP/LP vector calculation,
added "const" to some ISF/ISP function headers
diff --git a/libavcodec/amrwbdec.c b/libavcodec/amrwbdec.c
index a0bf66d..4f0e765 100644
--- a/libavcodec/amrwbdec.c
+++ b/libavcodec/amrwbdec.c
@@ -176,8 +176,10 @@ static void isf2isp(const float *isf, double *isp)
{
int i;
- for (i = 0; i < LP_ORDER; i++)
+ for (i = 0; i < LP_ORDER - 1; i++)
isp[i] = cos(2.0 * M_PI * isf[i]);
+
+ isp[LP_ORDER - 1] = cos(4.0 * M_PI * isf[LP_ORDER - 1]);
}
/**
@@ -256,7 +258,7 @@ static void decode_isf_indices_46b(uint16_t *ind, float *isf_q, uint8_t fr_q) {
* @param isf_past [in/out] past quantized ISF
*
*/
-static void isf_add_mean_and_past(float *isf_q, float *isf_past) {
+static void isf_add_mean_and_past(const float *isf_q, float *isf_past) {
int i;
float tmp;
@@ -293,7 +295,7 @@ static void isf_set_min_dist(float *isf, float min_spacing, int size) {
* @param isp_q [in/out] ISPs for each subframe
* @param isp4_past [in] Past ISP for subframe 4
*/
-static void interpolate_isp(double isp_q[4][LP_ORDER], double *isp4_past)
+static void interpolate_isp(double *isp_q[4], const double *isp4_past)
{
int i;
// XXX: Did not use ff_weighted_vector_sumf because using double
@@ -316,28 +318,29 @@ static void interpolate_isp(double isp_q[4][LP_ORDER], double *isp4_past)
* @param lp [out] LP coefficients
* @param lp_half_order [in] Half the number of LPs to construct
*/
-static void isp2lp(double isp[LP_ORDER], float *lp, int lp_half_order) {
+static void isp2lp(const double *isp, float *lp, int lp_half_order) {
double pa[MAX_LP_HALF_ORDER+1], qa[MAX_LP_HALF_ORDER+1];
float *lp2 = lp + (lp_half_order << 1);
double last_isp = isp[2 * lp_half_order - 1];
- double qa_old = 0; // XXX: qa[i-2] assuming qa[-1] = 0, not mentioned in spec
+ double qa_old = 0.0;
int i;
ff_lsp2polyf(isp, pa, lp_half_order);
- ff_lsp2polyf(isp + 1, qa, lp_half_order);
+ ff_lsp2polyf(isp + 1, qa, lp_half_order - 1);
- for (i=1; i<lp_half_order; i++) {
+ for (i = 1; i < lp_half_order; i++) {
double paf = (1 + last_isp) * pa[i];
double qaf = (1 - last_isp) * (qa[i] - qa_old);
- qa_old = qa[i-1];
+ qa_old = qa[i - 1];
- lp[i] = 0.5 * (paf + qaf);
- lp2[i] = 0.5 * (paf - qaf);
+ lp[i] = 0.5 * (paf + qaf);
+ lp2[-i] = 0.5 * (paf - qaf);
}
- lp2[0] = 0.5 * (1 + last_isp) * pa[lp_half_order] * lp_half_order;
- lp2[lp_half_order] = last_isp;
+ lp[0] = 1.0;
+ lp[lp_half_order] = 0.5 * (1 + last_isp) * pa[lp_half_order];
+ lp2[0] = last_isp;
}
/**
@@ -1140,11 +1143,11 @@ static int amrwb_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
}
interpolate_isp(ctx->isp, ctx->isp_sub4_past);
- /* XXX: Tested against the ref code until here */
-
for (sub = 0; sub < 4; sub++)
isp2lp(ctx->isp[sub], ctx->lp_coef[sub], LP_ORDER/2);
+ /* XXX: Tested against the ref code until here */
+
for (sub = 0; sub < 4; sub++) {
const AMRWBSubFrame *cur_subframe = &cf->subframe[sub];
-----------------------------------------------------------------------
Summary of changes:
libavcodec/amrwbdec.c | 31 +++++++++++++++++--------------
1 files changed, 17 insertions(+), 14 deletions(-)
hooks/post-receive
--
AMR-WB decoder
More information about the FFmpeg-soc
mailing list