[FFmpeg-devel] [PATCH] G.729 LSF decoding

Vladimir Voroshilov voroshil
Sat Jun 20 09:23:07 CEST 2009


>> ?g729data.h | ? 11 +++++++++
>> ?g729dec.c ?| ? 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> ?2 files changed, 81 insertions(+)
>> 180ee12ea9d2d6990454e9bc3a25d29828c2e0b2 ?0001-LSF-decoding-routines.161.patch
>> From e2e6b6b18255c9d24f9cc0cf60dfbd1c4ccbcef1 Mon Sep 17 00:00:00 2001
>> From: Vladimir Voroshilov <voroshil at gmail.com>
>> Date: Sat, 6 Jun 2009 08:00:56 +0700
>> Subject: [PATCH] LSF decoding routines
>>
>>
>> diff --git ffmpeg-r19218/libavcodec/g729data.h ffmpeg-r19218_v161/libavcodec/g729data.h
>> index 796d24e..587db67 100644
>> --- ffmpeg-r19218/libavcodec/g729data.h
>> +++ ffmpeg-r19218_v161/libavcodec/g729data.h
>> @@ -262,4 +262,15 @@ static const int16_t cb_ma_predictor[2][MA_NP][10] = { /* (0.15) */
>> ? ? ?{ 3024, ?1592, ? 940, ?1631, ?1723, ?1579, ?2034, ?2084, ?1913, ?2601}
>> ? ?}
>> ?};
>> +
>> +/**
>> + * ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3
>> + * ff_g720_cb_ma_predictor_sum[j][i] = ?1 - sum ( ff_g729_cb_ma_predictor[k][i] ), j=0..1, i=0..9
>> + * ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?k=0
>> + */
>
> this doesnt look correct

It does in floating-point.
I've changed "1" to "32765" (now it is correct for fixed-point) and added notice
why values may slightly differ in array and formula.


> [...]
>> @@ -114,8 +120,60 @@ static inline int get_parity(uint8_t value)
>> ? ? return (0x6996966996696996ULL >> (value >> 2)) & 1;
>> ?}
>>
>> +/**
>> + * Decodes LSP coefficients from L0-L3 (3.2.4).
>> + * @param lsfq [out] (2.13) quantized LSF coefficients
>> + * @param past_quantizer_outputs [in/out] (2.13) quantizer outputs from previous frames
>> + * @param ma_predictor switched MA predictor of LSP quantizer
>> + * @param vq_1st first stage vector of quantizer
>> + * @param vq_2nd_low second stage lower vector of LSP quantizer
>> + * @param vq_2nd_high second stage higher vector of LSP quantizer
>> + */
>> +static void lsf_decode(int16_t* lsfq, int16_t* past_quantizer_outputs[MA_NP + 1],
>> + ? ? ? ? ? ? ? ? ? ? ? int16_t ma_predictor,
>> + ? ? ? ? ? ? ? ? ? ? ? int16_t vq_1st, int16_t vq_2nd_low, int16_t vq_2nd_high)
>> +{
>> + ? ?int i,j,k;
>> + ? ?static const uint8_t min_distance[2]={10, 5}; //(2.13)
>> + ? ?int16_t* quantizer_output = past_quantizer_outputs[MA_NP];
>> + ? ?int16_t diff; ? ? ? ? //(2.13)
>> + ? ?int sum; ? ? ? ? ? ? ?//(2.28)
>> +
>> + ? ?for (i = 0; i < 5; i++) {
>> + ? ? ? ?quantizer_output[i] ? ? = cb_lsp_1st[vq_1st][i ? ?] + cb_lsp_2nd[vq_2nd_low ][i ? ?];
>> + ? ? ? ?quantizer_output[i + 5] = cb_lsp_1st[vq_1st][i + 5] + cb_lsp_2nd[vq_2nd_high][i + 5];
>> + ? ?}
>> +
>> + ? ?for (j = 0; j < 2; j++) {
>> + ? ? ? ?for (i = 1; i < 10; i++) {
>> + ? ? ? ? ? ?diff = (quantizer_output[i - 1] - quantizer_output[i] + min_distance[j]) >> 1;
>
> declaration and init can be merged also it does ot need exactly 16 bit
>
>
>> + ? ? ? ? ? ?if (diff > 0) {
>> + ? ? ? ? ? ? ? ?quantizer_output[i - 1] -= diff;
>> + ? ? ? ? ? ? ? ?quantizer_output[i ? ?] += diff;
>> + ? ? ? ? ? ?}
>> + ? ? ? ?}
>> + ? ?}
>> +
>> + ? ?for (i = 0; i < 10; i++) {
>> + ? ? ? ?sum = quantizer_output[i] * cb_ma_predictor_sum[ma_predictor][i];
>
> same

Done.

I've also moved lsfq array to context structure.
This will avoid using of two extra memcpy in future patches.
Also fixed error with pointers initialization in init routine.

>
> [...]
> --
> Michael ? ? GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Complexity theory is the science of finding the exact solution to an
> approximation. Benchmarking OTOH is finding an approximation of the exact
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iD8DBQFKO8fyYR7HhwQLD6sRApzwAJ9QrIEFg+SYfv2F9FXpF0tuqJqfJQCfVpHH
> uTXWPoryEe3o/ZC+VPWQxSA=
> =55TC
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
>



-- 
Regards,
Vladimir Voroshilov     mailto:voroshil at gmail.com
JID: voroshil at gmail.com, voroshil at jabber.ru
ICQ: 95587719
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-LSF-decoding-routines.163.patch
Type: text/x-diff
Size: 5700 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090620/d38a9aef/attachment.patch>



More information about the ffmpeg-devel mailing list