Support and General Use > Audio Playback, Database and Playlists

Decoding performance on iPOD

<< < (3/4) > >>

safetydan:
What codec are you seeing that uses double? For MP3 decoding, libmad is already fixed point and shouldn't need any changes in that respect.

Buschel:
I am working on musepack. Just tested some thoughts about reducing 64bit-multiplies -- seems to work, the speed-up is few though (+5%). For this I needed to reduced the quality of the synthesis filter, I do not have any overview about the differences in the overall-output yet.

linuxstb:
I've just (a few minutes ago) committed wav-writing capabilities to test_codec.  Hope it helps.

preglow:

--- Quote from: Buschel on May 12, 2007, 03:59:52 PM ---From what I saw in the source I was sure there were several double-calculations within the synthesis filterbank. I removed these calculations with direct int32 / int64-multiplications. Decoder now becoms (slight) slower?
In general the signal workflow in fixed point is hard to follow compared to the float-signals I am coped to...

--- End quote ---
Where did you see this? The only use of doubles I can see in synth_filter.c is in the _() macro that is used for stuff that is resolved at compile-time. There shouldn't be any floating point calculations done runtime.
Which 64 bit multiplies are you removing? In general, one should try optimising all other areas of the code before starting to compromise accuracy.
Also, why optimise musepack? This codec is already one of the fastest ones we have, why not try to optimise libmad, for example? :)

Buschel:
I am working on musepack because I only have .mpc-files. Also I am quite into this codec...

Regarding the use of doubles/float in the synthesis-filter: As far as I can see there are several scaling operations in calc_new_V() which use the macros MPC_SCALE_CONST, MPC_MULTIPLY_FRACT_CONST_FIX and similar ones. These macros are expanded with usage of the MAKE_MPC_SAMPLE_EX macro. This one will use double-conversion and -multiplication.

I removed these conversions via defining additional constants and a new macro. Now either 64bit- or 32bit-multiplies are possible.

Current I am measuring different combinations of the optimization -- including using -O1 instead of -O2. Including all optimizations (also accuracy reduction) the performance went up by up to 18%.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version