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; >>> } _______________________________________________ flac-dev mailing list flac-dev@xiph.org http://lists.xiph.org/mailman/listinfo/flac-dev