[FFmpeg-devel] [PATCH] AMR-WB Decoder

Marcelo Galvão Póvoa marspeoplester
Sat Sep 18 15:45:05 CEST 2010


2010/9/18 M?ns Rullg?rd <mans at mansr.com>:
> Benjamin Larsson <banan at ludd.ltu.se> writes:
>
>> On 09/18/2010 12:15 PM, M?ns Rullg?rd wrote:
>>> Rob <robert.swain at gmail.com> writes:
>>>
>>>> On 18 September 2010 11:43, M?ns Rullg?rd <mans at mansr.com> wrote:
>>>>> Marcelo Galv?o P?voa <marspeoplester at gmail.com> writes:
>>>>>> Here is my floating point AMR-WB Decoder from GSoC. The output
>>>>>> quality seems good compared to the reference and libopencore
>>>>>> decoders.
>>>>>
>>>>> Seems good? ?Does it differ by more than +-1?
>>>>
>>>> http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/2010-September/009964.html
>>>
>>> Any difference of more than 1 from the reference needs to be understood.
>>
>> Celp codecs usually differ more cause of more steps where differences
>> can propagate.
>
> So rounding errors are amplified? ?Sounds like a bad design to me.
> However that may be, the cause discrepancies must still be understood,
> though not necessarily removed. ?If you can explain the differences,
> that is good enough for me. ?If you do not know where they come from,
> there could be bugs hiding.
>

Well, I have not tracked the errors for analyzing propagation but I
can tell that some parts (like the fixed gain and the fixed vector)
differ quite a bit between the implementations. I believe the same
applies to the existent AMR-NB decoder.

However, in all tests I did, my decoder deviation against the source
wav file (which was encoded by the reference encoder) was slightly
smaller than with the reference decoder, for example:

My decoder X original:
$ ./tests/tiny_psnr ~/am_ori.wav ~/am_new.wav 2 -190
stddev:  724.72 PSNR: 39.13 MAXDIFF: 7538 bytes:   473878/   473410

Ref decoder X original:
$ ./tests/tiny_psnr ~/am_ori.wav ~/amrwb/samples/all_men_ref.wav 2 -190
stddev:  733.69 PSNR: 39.02 MAXDIFF: 7368 bytes:   473878/   473410

My decoder X Ref decoder:
$ ./tests/tiny_psnr ~/amrwb/samples/all_men_ref.wav ~/am_new.wav 2
stddev:   54.49 PSNR: 61.60 MAXDIFF: 1088 bytes:   473600/   473600

and for a 35 min long sample:

My decoder X original:
vitor at vitor:~$ tiny_psnr orig_pod.wav soc_pod.wav 2 -190
stddev:  643.05 PSNR: 40.16 MAXDIFF:10705 bytes: 76480660/ 76480450

Ref decoder X original:
vitor at vitor:~$ tiny_psnr orig_pod.wav ref_pod.wav 2 -190
stddev:  648.78 PSNR: 40.09 MAXDIFF:10660 bytes: 76480660/ 76480450

My decoder X Ref decoder:
$ ./tests/tiny_psnr ~/ref_pod.wav ~/soc_pod.wav 2
stddev:  101.30 PSNR: 56.22 MAXDIFF: 5529 bytes: 76480640/ 76480640

The stddev when comparing both decoders is quite high I guess, but I
should point that this decoder involves a random noise excitation
generation for the higher frequency band, which may be part of the
problem.

-- 
Marcelo



More information about the ffmpeg-devel mailing list