[FFmpeg-devel] [PATCH] QCELP decoder

Kenan Gillet kenan.gillet
Wed Nov 12 18:33:36 CET 2008


Hi,
On Nov 11, 2008, at 10:00 AM, Michael Niedermayer wrote:

>> /**
>> + * Initialize the speech codec according to the specification.
>> + *
>> + * TIA/EIA/IS-733 2.4.9
>> + */
>> +static av_cold int qcelp_decode_init(AVCodecContext *avctx) {
>> +    QCELPContext *q = avctx->priv_data;
>> +    int i;
>> +
>> +    avctx->sample_fmt = SAMPLE_FMT_FLT;
>> +
>> +    for (i = 0; i < 10; i++)
>> +        q->prev_lspf[i] = (i + 1) / 11.;
>> +
>
>> +    q->bandwith_expansion_coeff[0] = - 
>> QCELP_BANDWITH_EXPANSION_COEFF;
>> +    for (i = 1; i < 10; i++) {
>> +        q->bandwith_expansion_coeff[i] = q- 
>> >bandwith_expansion_coeff[i-1]
>> +                                       *  
>> QCELP_BANDWITH_EXPANSION_COEFF;
>
> this seem to be 10 constants, thus they do not need to be in each  
> context

recalculating the coeffs looks as fast ot a little bit faster so I  
will just drop this table.

benchmark:
ffmpeg -i codeblue-interrupt01.mov codeblue-interrupt01.wav

on Core 2 Duo
FFmpeg version SVN-r15797, Copyright (c) 2000-2008 Fabrice Bellard, et  
al.
   configuration:
   libavutil     49.12. 0 / 49.12. 0
   libavcodec    52. 3. 0 / 52. 3. 0
   libavformat   52.23. 1 / 52.23. 1
   libavdevice   52. 1. 0 / 52. 1. 0
   built on Nov 11 2008 12:52:53, gcc: 4.2.1 (Apple Inc. build 5564)


Coeff in qcelp_bandwith_expansion_coeff

116400 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
67560 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
42300 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
29550 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
22867 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19286 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17386 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16455 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15909 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15727 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15590 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15514 dezicycles in benchmark_qcelp_lspf2lpc, 2048 runs, 0 skips

130080 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
74460 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
45750 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
31320 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
23722 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19721 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17615 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16662 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
16080 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15814 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15639 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15523 dezicycles in benchmark_qcelp_lspf2lpc, 2047 runs, 1 skips

100200 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
59460 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
38310 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
27585 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
21840 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
18768 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17141 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16278 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15859 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15709 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15581 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15515 dezicycles in benchmark_qcelp_lspf2lpc, 2047 runs, 1 skips

121440 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
70020 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
43440 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
30120 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
23317 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19848 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17709 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16587 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
16037 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15810 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15647 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15563 dezicycles in benchmark_qcelp_lspf2lpc, 2047 runs, 1 skips

137640 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
78360 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
47760 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
32310 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
24262 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
20002 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17812 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16775 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
16125 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15837 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15644 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15554 dezicycles in benchmark_qcelp_lspf2lpc, 2046 runs, 2 skips






Coeffs recalculated everytime in qcelp_lspf2lpc

121320 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
70260 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
43380 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
30300 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
23257 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19383 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17375 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16358 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15916 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15682 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15521 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15441 dezicycles in benchmark_qcelp_lspf2lpc, 2048 runs, 0 skips

131160 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
75120 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
45900 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
31230 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
23700 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19590 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17480 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16523 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15989 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15707 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15518 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15442 dezicycles in benchmark_qcelp_lspf2lpc, 2047 runs, 1 skips

134400 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
77100 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
46830 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
31650 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
23970 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19758 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17602 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16457 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15948 dezicycles in benchmark_qcelp_lspf2lpc, 255 runs, 1 skips
15695 dezicycles in benchmark_qcelp_lspf2lpc, 511 runs, 1 skips
15529 dezicycles in benchmark_qcelp_lspf2lpc, 1022 runs, 2 skips
15450 dezicycles in benchmark_qcelp_lspf2lpc, 2045 runs, 3 skips

111360 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
65460 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
41160 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
28965 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
22590 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
19042 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
17188 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16270 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15824 dezicycles in benchmark_qcelp_lspf2lpc, 256 runs, 0 skips
15603 dezicycles in benchmark_qcelp_lspf2lpc, 512 runs, 0 skips
15452 dezicycles in benchmark_qcelp_lspf2lpc, 1024 runs, 0 skips
15388 dezicycles in benchmark_qcelp_lspf2lpc, 2048 runs, 0 skips

101160 dezicycles in benchmark_qcelp_lspf2lpc, 1 runs, 0 skips
60120 dezicycles in benchmark_qcelp_lspf2lpc, 2 runs, 0 skips
38460 dezicycles in benchmark_qcelp_lspf2lpc, 4 runs, 0 skips
27540 dezicycles in benchmark_qcelp_lspf2lpc, 8 runs, 0 skips
21810 dezicycles in benchmark_qcelp_lspf2lpc, 16 runs, 0 skips
18645 dezicycles in benchmark_qcelp_lspf2lpc, 32 runs, 0 skips
16998 dezicycles in benchmark_qcelp_lspf2lpc, 64 runs, 0 skips
16158 dezicycles in benchmark_qcelp_lspf2lpc, 128 runs, 0 skips
15793 dezicycles in benchmark_qcelp_lspf2lpc, 255 runs, 1 skips
15601 dezicycles in benchmark_qcelp_lspf2lpc, 511 runs, 1 skips
15459 dezicycles in benchmark_qcelp_lspf2lpc, 1023 runs, 1 skips
15419 dezicycles in benchmark_qcelp_lspf2lpc, 2047 runs, 1 skips





More information about the ffmpeg-devel mailing list