On 09/11/2010 04:47 PM, Marcelo Galvão Póvoa wrote:
On 9 September 2010 16:11, Vitor Sessak<[email protected]> wrote:
On 09/07/2010 02:05 AM, Marcelo Galvão Póvoa wrote:
On 6 September 2010 11:31, Vitor Sessak<[email protected]> wrote:
On 09/06/2010 02:46 AM, Marcelo Galvăo Póvoa wrote:
[...]
Can celp_filters.c:ff_celp_circ_addf() simplify this?
I already gave some thought to that but I couldn't figure out how to
use ff_celp_circ_addf() there. I wrote the algorithm the simplest way
I could think of.
Try
for (i = 0; i< AMRWB_SFR_SIZE; i++)
if (fixed_vector[i])
ff_celp_circ_addf(buf, buf, coef, i, fixed_vector[i],
AMRWB_SFR_SIZE);
That's right indeed, thanks!
/*
* AMR wideband decoder
* Copyright (c) 2010 Marcelo Galvao Povoa
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A particular PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "libavutil/lfg.h"
#include "avcodec.h"
#include "get_bits.h"
#include "lsp.h"
#include "celp_math.h"
#include "celp_filters.h"
#include "acelp_filters.h"
#include "acelp_vectors.h"
#include "acelp_pitch_delay.h"
#include "amrwbdata.h"
No need to include amr.h?
typedef struct {
AMRWBFrame frame; ///< AMRWB parameters decoded
from bitstream
enum Mode fr_cur_mode; ///< mode index of current
frame
uint8_t fr_quality; ///< frame quality index (FQI)
float isf_cur[LP_ORDER]; ///< working ISF vector from
current frame
float isf_q_past[LP_ORDER]; ///< quantized ISF vector of
the previous frame
float isf_past_final[LP_ORDER]; ///< final processed ISF
vector of the previous frame
double isp[4][LP_ORDER]; ///< ISP vectors from current
frame
double isp_sub4_past[LP_ORDER]; ///< ISP vector for the 4th
subframe of the previous frame
float lp_coef[4][LP_ORDER]; ///< Linear Prediction
Coefficients from ISP vector
uint8_t base_pitch_lag; ///< integer part of pitch
lag for the next relative subframe
uint8_t pitch_lag_int; ///< integer part of pitch
lag of the previous subframe
float excitation_buf[AMRWB_P_DELAY_MAX + LP_ORDER + 2 + AMRWB_SFR_SIZE];
///< current excitation and all necessary excitation history
float *excitation; ///< points to current
excitation in excitation_buf[]
float pitch_vector[AMRWB_SFR_SIZE]; ///< adaptive codebook
(pitch) vector for current subframe
float fixed_vector[AMRWB_SFR_SIZE]; ///< algebraic codebook
(fixed) vector for current subframe
float prediction_error[4]; ///< quantified prediction
errors {20log10(^gamma_gc)} for previous four subframes
float pitch_gain[6]; ///< quantified pitch gains
for the current and previous five subframes
float fixed_gain[2]; ///< quantified fixed gains
for the current and previous subframes
float tilt_coef; ///< {beta_1} related to the
voicing of the previous subframe
float prev_sparse_fixed_gain; ///< previous fixed gain; used by
anti-sparseness to determine "onset"
uint8_t prev_ir_filter_nr; ///< previous impulse response filter
"impNr": 0 - strong, 1 - medium, 2 - none
float prev_tr_gain; ///< previous initial gain
used by noise enhancer for threshold
float samples_az[LP_ORDER + AMRWB_SFR_SIZE]; ///< low-band samples
and memory from synthesis at 12.8kHz
float samples_up[UPS_MEM_SIZE + AMRWB_SFR_SIZE]; ///< low-band samples
and memory processed for upsampling
float samples_hb[LP_ORDER_16k + AMRWB_SFR_SIZE_16k]; ///< high-band samples
and memory from synthesis at 16kHz
float hpf_31_mem[4], hpf_400_mem[4]; ///< previous values in the
high pass filters
I think now just two elements for the filter memory should be enough.
diff --git a/libavcodec/amrwbdata.h b/libavcodec/amrwbdata.h
new file mode 100644
index 0000000..6344763
--- /dev/null
+++ b/libavcodec/amrwbdata.h
/** [i][j] is the number of pulses present in track j at mode i */
static const int pulses_nb_per_mode_tr[][4] = {
{1, 1, 0, 0}, {1, 1, 1, 1}, {2, 2, 2, 2},
{3, 3, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4},
{5, 5, 4, 4}, {6, 6, 6, 6}, {6, 6, 6, 6}
};
uint8_t?
And I have no further comments :D
-Vitor
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc