[FFmpeg-devel] [PATCH] ALS decoder

Justin Ruggles justin.ruggles
Sun Aug 23 00:29:52 CEST 2009


Thilo Borgmann wrote:

>>> +    int rlslms;               ///< use RLS-LMS predictor: 1 = on, 0 = off
>> RLSMLS?
>> no i did not read the spec ...
> It is correct as it is.

I think he means, what is rlslms?

So your comment should say Recursive Least Square-Least Mean Square
instead of RLS-LMS.

>>> +/** Converts PARCOR coefficient k to direct filter coefficient.
>>> + */
>>> +static void parcor_to_lpc(unsigned int k, int64_t *par, int64_t *cof)
>>> +{
>>> +    int i;
>>> +    int64_t tmp1, tmp2;
>>> +
>>> +    for (i = 0; i < (k+1) >> 1; i++) {
>>> +        tmp1 = cof[    i    ] + ((par[k] * cof[k - i - 1] + (1 << 19)) >> 20);
>>> +        tmp2 = cof[k - i - 1] + ((par[k] * cof[    i    ] + (1 << 19)) >> 20);
>>> +        cof[k - i - 1] = tmp2;
>>> +        cof[    i    ] = tmp1;
>>> +    }
>>> +
>>> +    cof[k] = par[k];
>>> +}
>> doesnt look entirely unfamiliar, dont some of our other audio codecs have
>> something that can be used? (no i dont know which, i would have to RTFS too)
> RTFS for me too and RTFM about other audio codecs... anyone?

The only thing I could find is a function in ra144.c that converts
reflection coefficients to lpc coefficients, but it seems to be very
codec-specific.  This function is also very codec-specific because the
ALS spec defines a bit-exact transformation between the 20-bit quantized
PARCOR and LPC coefficients.  This is required in order for it to be
lossless.


>>> +
>>> +    if (const_block) {
>>> +        unsigned int const_val_bits;
>>> +
>>> +        if (sconf->resolution == 2 || sconf->floating)
>>> +            const_val_bits = 24;
>>> +        else
>>> +            const_val_bits = avctx->bits_per_raw_sample;
>> why would const_val_bits != avctx->bits_per_raw_sample ?
> bits_per_raw_sample = 32 for floating sconf->floating.

To explain this further... The way floating-point in ALS works is that
it has a 24-bit integer part and a floating-point difference part.  So
the final output is 32-bit, even though the integer part decoded here is
only 24-bit.

-Justin



More information about the ffmpeg-devel mailing list