I compiled mad with profiling and am in the process of running it over my entire mp3 library. I have mp3's encoded w/ bladenc, gogo, and those traded with other people. When finished, I will have 179 profiling outputs.
My current findings are (about 2/3's done):
Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 31.21 4.26 4.26 5239 0.81 1.10 mad_synth_frame 24.98 7.67 3.41 668256 0.01 0.01 imdct36 16.19 9.88 2.21 5239 0.42 1.43 III_decode 10.84 11.36 1.48 377208 0.00 0.00 dct32
Your findings so far are pretty much in agreement with my own profiling results. I doubt you'll find significant variation throughout your MP3 collection, although the ratio of short to long Layer III blocks produced by various encoders might make a small difference.
mad_synth_frame is the subband synthesis routine for all layers; it calls dct32. I did some work to optimize this early on, but it might be possible to improve it further.
The "easy" targets out of that list are imdct36 (the Layer III long block IMDCT) and to a lesser extent, III_decode which is currently doing more data copying than it should.
What platform are you profiling on?
-rob