[flac-dev] PATCH for rice_parameter calculation
Brian Willoughby
brianw at sounds.wa.com
Mon Oct 14 00:37:57 PDT 2013
D'oh! Now I see the problem. My 'n' would have to be calculated based
on log2(), I think, to get the right value. Subtracting as I did will
not work. I suppose calling any sort of logarithm calculation might
be expensive, but it seems like there has to be a smarter way to
determine 'n'
On Oct 11, 2013, at 10:47, Brian Willoughby wrote:
>
> Or, I was originally thinking:
>
> rice_parameter = 0; k = partition_samples;
> if (k < mean) {
> int n = mean - k;
> rice_parameter += n;
> k <<= n;
> }
>
> (sorry for the hasty post)
>
>
> On Oct 11, 2013, at 10:34, Brian Willoughby wrote:
>> Hmm, maybe I'm missing something, but what about this:
>>
>> rice_parameter = 0; k = partition_samples;
>> int n = mean - k;
>> if (n > 0) {
>> rice_parameter += n;
>> k <<= n;
>> }
>>
>> I've not looked at this code in its context within stream_encoder.c,
>> so it's easily possible that I left out something.
>>
>> Brian Willoughby
>> Sound Consulting
>>
>>
>> On Oct 9, 2013, at 08:54, lvqcl wrote:
>>> MSVS profiler shows that the following code in stream_encoder.c
>>> takes
>>> several percent of CPU time:
>>>
>>> for(rice_parameter = 0, k = partition_samples; k < mean;
>>> rice_parameter++, k <<= 1)
>>> ;
>>>
>>> this code is equivalent to:
>>>
>>> rice_parameter = 0; k = partition_samples;
>>> while(k < mean) {
>>> rice_parameter++; k <<= 1;
>>> }
>>>
>>> The idea was to accelerate it:
>>>
>>> rice_parameter = 0; k = partition_samples;
>>> while(k*2 < mean) {
>>> rice_parameter+=2; k <<= 2;
>>> }
>>> while(k < mean) {
>>> rice_parameter++; k <<= 1;
>>> }
>>>
>>> or:
>>> rice_parameter = 0; k = partition_samples;
>>> while(k*4 < mean) {
>>> rice_parameter+=3; k <<= 3;
>>> }
>>> while(k < mean) {
>>> rice_parameter++; k <<= 1;
>>> }
More information about the flac-dev
mailing list