[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