Hjalmar, I recall that many hardware decoders have a limit on the level that they can handle. At the very least, hardware encoders may only support a subset of the compression levels. As for the decoders, I cannot remember specifically whether they are all capable of decoding all compression levels (it certainly would be more convenient).
My memory from discussions on this mailing list is that the file format does not have anywhere to store the compression level. The reason is that compression levels are just human conveniences, and the actual compression is much more complex than a single digit number. Look at the command-line options for flac and you'll see that each compression level is synonymous with a group of up to five separate parameters. Maximum LPC Order, blocksize, (adaptive) mid-side coding, Rice partition order, and an exhaustive model search. I would assume that the factor affecting your decoder mips is the model, more than anything else which may be contributing. But you might have some luck varying those individual parameters instead of the basic compression level to see if any of them have a direct effect on your decoding complexity. If one of them does have a direct effect, then it might be easier to correlate something in the file headers with your clock speed. Perhaps you could just monitor your CPU usage and adapt the clock speed. Starting at the highest clock speed (in order to guarantee real-time decoding) you could measure percent CPU usage and drop the clock speed any time you're using less than half the available time. Another possibility is that your clock speed may depend almost entirely upon the sample rate, not the compression level. It's difficult for me to tell for certain from your cited examples, but while it seems clear that the sample rate has a effect on the clock speed needed, I'm not nearly so sure that different compression levels for the same sample rate would vary so widely. Perhaps you can just look in the FLAC headers for the sample rate, and then set your clock speed based on that, unless you're saying that a 44.1 kHz level 8 file takes more processing than a 96 kHz level 1 file, or that a 96 kHz level 8 file takes more processing than a 192 kHz level 1 file. You did imply that 192 kHz takes almost twice the CPU at level 8 versus level 1, but I would point out that sometimes you can only adjust your clock speed in large increments, so it may not actually be possible to drop your clock speed by less than half, especially not at the highest clock speed (with the way clock dividers work). Brian Willoughby Sound Consulting P.S. What is your embedded platform environment? On Mar 23, 2011, at 10:10, hjalmar nilsson wrote: > I'm developing a flac decoder in an embedded environment. I have it > fully up and running but I am trying to optimise the performance > vs. the power it takes to decode the stream. > > Using the reference decoder code with a few optimisations for the > hw I'm on I experience quite a difference in mips depending on the > level. > For instance, on a 192kHz/24 bit file the difference is almost that > it takes twice as many mips on level 8 vs. level 1. > > Unfortunately I can't tell our customer that they need to decode at > a certain level, BUT I want to minimize the frequency the processor > is running on. > Since I have no problem reading a 441/16 from a memory stick and > decode it on 40 MHz, but I require almost 240 MHz on a 192/24 file, > I would like to dynamically change the frequency depending on the > file I'm about to decode. > > Now, since you managed to plough through all this, I would really > appreciate if you could answer one simple question: > Is there any way I can read out the compression level from the > encoding process from the file? _______________________________________________ Flac-dev mailing list [email protected] http://lists.xiph.org/mailman/listinfo/flac-dev
