[FFmpeg-soc] [soc]: r1400 - in amr: amrnbfloatdata.h amrnbfloatdec.c
superdump
subversion at mplayerhq.hu
Wed Oct 10 12:55:09 CEST 2007
Author: superdump
Date: Wed Oct 10 12:55:08 2007
New Revision: 1400
Log:
- Revert unintended commit
Modified:
amr/amrnbfloatdata.h
amr/amrnbfloatdec.c
Modified: amr/amrnbfloatdata.h
==============================================================================
--- amr/amrnbfloatdata.h (original)
+++ amr/amrnbfloatdata.h Wed Oct 10 12:55:08 2007
@@ -29,8 +29,7 @@
#include <math.h>
// general definitions
-#define AMR_BLOCK_SIZE 160
-#define AMR_SUBFRAME_SIZE 40
+#define AMR_BLOCK_SIZE 160
// definition of modes for decoder
#define NO_DATA 15
@@ -1775,36 +1774,5 @@ static const float pred_fac[LP_FILTER_OR
#define PRED_FAC_MODE_122 0.65
#define FREQ_LSP_FAC 2*M_PI/8000.0
-// pitch tables
-
-#define PITCH_LAG_MAX 143
-#define PITCH_LAG_MIN 20
-#define PITCH_LAG_MIN_MODE_122 18
-
-// b60 hamming windowed sinc function coefficients
-static const float b60[61] = {
-0.898529 , 0.865051 , 0.769257 , 0.624054 , 0.448639 , 0.265289 , 0.0959167 , 0.0412598 ,
-0.134338 , 0.178986 , 0.178528 , 0.142609 , 0.0849304 , 0.0205078 , 0.0369568 , 0.0773926 ,
-0.0955200 , 0.0912781 , 0.0689392 , 0.0357056 , 0.000000 , 0.0305481 , 0.0504150 , 0.0570068 ,
-0.0508423 , 0.0350037 , 0.0141602 , 0.00665283 , 0.0230713 , 0.0323486 , 0.0335388 , 0.0275879 ,
-0.0167847 , 0.00411987 , 0.00747681 , 0.0156860 , 0.0193481 , 0.0183716 , 0.0137634 , 0.00704956 ,
-0.000000 , 0.00582886 , 0.00939941 , 0.0103760 , 0.00903320 , 0.00604248 , 0.00238037 , 0.00109863 ,
-0.00366211 , 0.00497437 , 0.00503540 , 0.00402832 , 0.00241089 , 0.000579834, 0.00103760 , 0.00222778 ,
-0.00277710 , 0.00271606 , 0.00213623 , 0.00115967 , 0.000000 ,
-};
-
-static const float qua_gain_pit[16] = {
-0.0 , 0.20001220703125, 0.400146484375 , 0.5 ,
-0.5999755859375 , 0.70001220703125, 0.75 , 0.79998779296875,
-0.8499755859375 , 0.9000244140625 , 0.95001220703125, 1.0 ,
-1.04998779296875, 1.0999755859375 , 1.1500244140625 , 1.20001220703125,
-};
-
-static const float qua_gain_pit_MODE_122[16] = {
-0.0 , 0.199951171875, 0.400146484375, 0.5 ,
-0.599853515625, 0.699951171875, 0.75 , 0.7998046875 ,
-0.849853515625, 0.89990234375 , 0.949951171875, 1.0 ,
-1.0498046875 , 1.099853515625, 1.14990234375 , 1.199951171875,
-};
/**************************** end of tables *****************************/
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c (original)
+++ amr/amrnbfloatdec.c Wed Oct 10 12:55:08 2007
@@ -43,7 +43,6 @@ typedef struct AMRContext {
int16_t *amr_prms; ///< pointer to the decoded amr parameters (lsf coefficients, codebook indices, etc)
int bad_frame_indicator; ///< bad frame ? 1 : 0
- int cur_frame_mode; ///< current frame mode
float prev_lsf_r[LP_FILTER_ORDER];
float lsp[4][LP_FILTER_ORDER]; ///< lsp vectors from current frame
@@ -51,13 +50,6 @@ typedef struct AMRContext {
float lpc[4][LP_FILTER_ORDER]; ///< vectors of lpc coefficients for 4 subframes
- int pitch_lag_int; ///< integer part of pitch lag from current subframe
- int pitch_lag_frac; ///< fractional part of pitch lag from current subframe
- int prev_pitch_lag_int; ///< integer part of pitch lag from previous subframe
-
- float prev_excitation[PITCH_LAG_MAX + LP_FILTER_ORDER + 1]; ///< buffer of the past excitation vector
- float pitch_vector[AMR_SUBFRAME_SIZE]; ///< adaptive code book (pitch) vector
-
} AMRContext;
@@ -401,152 +393,13 @@ static void lsp2lpc(float *lsp, float *l
/*** end of LPC coefficient decoding functions ***/
-/*** pitch vector decoding functions ***/
-
-/**
- * Decode the adaptive codebook index to the integer and fractional parts of the
- * pitch lag for one subframe at 1/3 resolution
- *
- * @param p pointer to the AMRContext
- * @param pitch_index parsed adaptive codebook (pitch) index
- *
- * @return void
- */
-
-static void decode_pitch_lag_3(AMRContext *p, int pitch_index) {
- // subframe 1 or 3
- if(p->cur_subframe & 1) {
- if(pitch_index < 197) {
- // 10923>>15 is approximately 1/3
- p->pitch_lag_int = ( ((pitch_index + 2)*10923)>>15 ) + 19;
- p->pitch_lag_frac = pitch_index - p->pitch_lag_int*3 + 58;
- }else {
- p->pitch_lag_int = pitch_index - 112;
- p->pitch_lag_frac = 0;
- }
- // subframe 2 or 4
- }else {
- if( (p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515) ||
- (p->cur_frame_mode == MODE_59) || (p->cur_frame_mode == MODE_67) ) {
- // decoding with 4 bit resolution
- int t1_temp = clip(p->prev_pitch_lag_int, p->search_range_max-4, p->search_range_min+5);
-
- if(pitch_index < 4) {
- // integer only precision for [t1_temp-5, t1_temp-2]
- p->pitch_lag_int = pitch_index + (t1_temp - 5);
- p->pitch_lag_frac = 0;
- }else if(pitch_index < 12) {
- // 1/3 fractional precision for [t1_temp-1 2/3, t1_temp+2/3]
- p->pitch_lag_int = ( ((pitch_index - 5)*10923)>>15 ) + t1_temp - 1;
- p->pitch_lag_frac = pitch_index - p->pitch_lag_int*3 - 9;
- }else {
- // integer only precision for [t1_temp+1, t1_temp+4]
- pitch_lag_int = pitch_index + t1_temp - 11;
- pitch_lag_frac = 0;
- }
- }else {
- // decoding with 5 or 6 bit resolution, 1/3 fractional precision
- // 10923>>15 is approximately 1/3
- int temp = ( ((pitch_index + 2)*10923)>>15 ) - 1;
- p->pitch_lag_int = temp + p->search_range_min;
- p->pitch_lag_frac = pitch_index - temp*3 - 2;
- }
- }
-}
-
-
-/**
- * Decode the adaptive codebook index to the integer and fractional parts of the
- * pitch lag for one subframe at 1/6 resolution
- *
- * @param p pointer to the AMRContext
- * @param pitch_index parsed adaptive codebook (pitch) index
- *
- * @return void
- */
-
-static void decode_pitch_lag_6(AMRContext *p, int pitch_index) {
- // subframe 1 or 3
- if(p->cur_subframe & 1) {
- if(pitch_index < 463){
- p->pitch_lag_int = (pitch_index + 5)/6 + 17;
- p->pitch_lag_frac = pitch_index - p->pitch_lag_int*6 + 105;
- }else {
- p->pitch_lag_int = pitch_index - 368;
- p->pitch_lag_frac = 0;
- }
- // subframe 2 or 4
- }else {
- int temp;
- // find the search range
- p->search_range_min = FFMAX(p->pitch_lag_int - 5, PITCH_LAG_MIN_MODE_122);
- p->search_range_max = p->search_range_min + 9;
- if(p->search_range_max > PITCH_LAG_MAX) {
- p->search_range_max = PITCH_LAG_MAX;
- p->search_range_min = p->search_range_max - 9;
- }
- // calculate the pitch lag
- temp = (pitch_index + 5)/6 - 1;
- p->pitch_lag_int = temp + p->search_range_min;
- p->pitch_lag_frac = pitch_index - temp*6 - 3;
- }
-}
-
-/**
- * Calculate the pitch vector by interpolating the past excitation at the pitch
- * pitch lag using a b60 hamming windowed sinc function
- *
- * @param p pointer to the AMRContext
- * @param lag_int integer part of pitch lag
- * @param lag_frac fractional part of pitch lag
- *
- * @return void
- */
-
-static void interp_pitch_vector(AMRContext *p, int lag_int, int lag_frac) {
- int n, i;
- float *b60_idx1, *b60_idx2, *exc_idx;
-
- lag_frac *= -1;
- if(p->cur_frame_mode != MODE_122) {
- lag_frac <<= 1;
- }
-
- if(lag_frac < 0) {
- lag_frac += 6;
- lag_int--;
- }
-
- b60_idx1 = &b60[ lag_frac];
- b60_idx2 = &b60[6 - lag_frac];
- exc_idx = &p->prev_excitation[-lag_int];
-
- for(n=0; n<AMR_SUBFRAME_SIZE; n++) {
- for(i=0; i<10; i++) {
- p->pitch_vector[n] += b60_idx1[6*i] * exc_idx[-i];
- }
- exc_idx++;
- for(i=0; i<10; i++) {
- p->pitch_vector[n] += b60_idx2[6*i] * exc_idx[ i];
- }
- exc_idx++;
- }
-}
-
-/*** end of pitch vector decoding functions ***/
-
-/*** algebraic code book (fixed) vector decoding functions ***/
-/*** end of algebraic code book (fixed) vector decoding functions ***/
-
static int amrnb_decode_frame(AVCodecContext *avctx,
void *data, int *data_size, uint8_t *buf, int buf_size) {
AMRContext *p = avctx->priv_data; // pointer to private data
int16_t *buf_out = data; // pointer to the output data buffer
- int i, subframe; // counters
- int index = 0; // index counter (different modes
- // advance through amr_prms differently)
+ int i; // counter
enum Mode speech_mode = MODE_475; // ???
// decode the bitstream to amr parameters
@@ -559,15 +412,11 @@ static int amrnb_decode_frame(AVCodecCon
lsf2lsp_5(p);
// interpolate LSP vectors at subframes 1 and 3
interp_lsp_13(p);
- // advance index into amr_prms
- index += 5;
}else {
// decode split-matrix quantised lsf vector indices to an lsp vector
lsf2lsp_3(p);
// interpolate LSP vectors at subframes 1, 2 and 3
interp_lsp_123(p);
- // advance index into amr_prms
- index += 3;
}
// convert LSP vectors to LPC coefficient vectors
@@ -577,59 +426,6 @@ static int amrnb_decode_frame(AVCodecCon
/*** end of LPC coefficient decoding ***/
- for(subframe = 0; subframe < 5; subframe++) {
-
-/*** adaptive code book (pitch) vector decoding ***/
-
- // decode integer and fractional parts of pitch lag from parsed pitch
- // index
- if(p->cur_frame_mode == MODE_122) {
- decode_pitch_lag_6(p, p->amr_prms[index]);
- }else {
- decode_pitch_lag_3(p, p->amr_prms[index]);
- }
-
- // interpolate the past excitation at the pitch lag to obtain the pitch
- // vector
- interp_pitch_vector(p, p->pitch_lag_int, p->pitch_lag_frac);
-
-/*** end of adaptive code book (pitch) vector decoding ***/
-
-/*** algebraic code book (fixed) vector decoding ***/
-
- switch(p->cur_frame_mode) {
- case MODE_475:
- case MODE_515:
- decode_2_pulses_9bits(p, index++, index++);
- break;
- case MODE_59:
- decode_2_pulses_11bits(p, index++, index++);
- break;
- case MODE_67:
- decode_3_pulses_14bits(p, index++, index++);
- break;
- case MODE_74:
- case MODE_795:
- decode_4_pulses_17bits(p, index++, index++);
- break;
- case MODE_102:
- decode_8_pulses_31bits(p, index);
- index += 7;
- break;
- case MODE_122:
- // decode pitch gain
- // INSERT PITCH GAIN DECODING FUNCTION HERE calling with index++
- decode_10_pulses_35bits(p, index);
- index += 10;
- break;
- default:
- break;
- }
-
-/*** end of algebraic code book (fixed) vector decoding ***/
-
- }
-
/* Report how many samples we got */
*data_size = buf_size;
More information about the FFmpeg-soc
mailing list