[FFmpeg-devel] [PATCH] QCELP decoder

Kenan Gillet kenan.gillet
Sat Oct 18 02:16:05 CEST 2008


On Oct 17, 2008, at 3:44 PM, Diego Biurrun wrote:

> On Fri, Oct 17, 2008 at 09:46:31AM -0700, Kenan Gillet wrote:
>>
>> round 6 summary:
>> - no code change from round 5
>> - replace svn cp by svn add to make the patch smaller
>> - rename qcelp_math.[ch] into celp_math.[ch]
>
> Maybe we can rename some of the acelp_*.[ch] files to celp_*.[ch]
>
> already if it helps you.

sure or i can just add the code in acelp_*.[ch].
Either way is fine with me

>
>
>> - the patch is now broken into:
>>
>>    - qcelp-round6-doc-glue.patch.txt
>>    doc and glue code
>
> This patch is OK.
>
>> Let me know if I can do anything to ease you reviewing effort.
>
> The small patches are helping, some of these can be committed before  
> the
> others, that should speed things up.
>
>> --- libavcodec/qcelpdata.h	(revision 0)
>> +++ libavcodec/qcelpdata.h	(revision 0)
>> @@ -0,0 +1,500 @@
>> +/**
>> + * Unpacking bitmap tables for RATE_FULL
>
> Are these the unpacked tables or the tables used to unpack?

tables used to unpack


>> --- libavcodec/qcelpdec.c	(revision 0)
>> +++ libavcodec/qcelpdec.c	(revision 0)
>> @@ -0,0 +1,662 @@
>> + * @param memory buffer for the previous state of the filter
>> + *        - must be able to contain 303 elements
>> + *        - the 143 fist elements are from the previous state
>
> fiRst

done


>> +    v_out = memory + 143; // output vector start at memory[143]
>
> startS

done


>> +                if (pfrac[i]) { // If is a fractional lag...
>
> If it is

done


>> +static int decode_scaled_codebook_vector(QCELPContext *q, float  
>> cdn_vector[160]) {
>> +    float gain[16];
>
> Align the function parameters.

done


>
>> --- libavcodec/qcelp_lsp.c	(revision 0)
>> +++ libavcodec/qcelp_lsp.c	(revision 0)
>> @@ -0,0 +1,98 @@
>> +/**
>> + * Linear convolution of two vectors v1 and [1, cos, 1]
>> + *
>> + * @param v_out the result of the convolution,
>> + *              needs to be able to hold v_in_len + 2 elements
>> + * @param v_in the input vector
>> + * @param cos
>
> Yes?

second element in the second vector of the convolution [1, cos, 1]
I suspect that the function will need some rework to be more generic  
though.

>> + * @param v_in_len the dimension of v_in assumed to be in   
>> {2,4,6,8,10}
>
> nit: two spaces

done


>> +/**
>> + * Reconstructs LPC coefficients from the line spectral pair  
>> frequencies.
>> + *
>> + * TIA/EIA/IS-733 2.4.3.3.5
>> + */
>> +void qcelp_lspf2lpc(const float *lspf, float *lpc) {
>> +    float pa[5],qa[5];
>> +    float v1[12], v2[12];
>> +    float beta = 0.9883;
>> +    int   i;
>> +
>> +    v1[0] = 0.5;
>> +    v1[1] = 0.5;
>> +    lsp2poly(pa, lspf, v1, v2, 0);
>> +
>> +    v1[0] =  0.5;
>> +    v1[1] = -0.5;
>> +    lsp2poly(qa, lspf, v1, v2, 1);
>> +
>> +    for (i = 0; i < 5; i++) {
>> +        lpc[i] = -(pa[i] + qa[i]) * beta;
>> +        beta *= 0.9883;
>> +    }
>> +    for (i = 5; i < 10; i++) {
>> +        lpc[i] = -(pa[9-i] - qa[9-i]) * beta;
>> +        beta *= 0.9883;
>> +    }
>> +}
>
>> Index: libavcodec/celp_math.c
>> ===================================================================
>> --- libavcodec/celp_math.c	(revision 0)
>> +++ libavcodec/celp_math.c	(revision 0)
>> @@ -0,0 +1,40 @@
>> +
>> +/**
>> + * returns the dot product.
>> + * @param a input data array
>> + * @param b input data array
>> + * @param length number of elements
>> + *
>> + * @return dot product = sum of elementwise products
>> + */
>> +float ff_dot_product(const float* a, const float* b, int length)
>
> I think the Doxygen documentation in the header file is enough.

done


>> --- libavcodec/celp_math.h	(revision 0)
>> +++ libavcodec/celp_math.h	(revision 0)
>> @@ -0,0 +1,36 @@
>> +
>> +#ifndef AVCODEC_QCELP_MATH_H
>> +#define AVCODEC_QCELP_MATH_H
>
> Use the filename as multiple inclusion guard.

done






More information about the ffmpeg-devel mailing list