[flac-dev] PATCH for rice_parameter calculation

Brian Willoughby brianw at sounds.wa.com
Fri Oct 11 10:34:55 PDT 2013


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;
>     }
>
>
> After tuning the code for 16-/24-bit WAV and 32-/64-bit compiles
> I wrote more complex code (see attach). It doesn't look pretty but
> it's faster than the current version. For highest compression preset,
> 24-bit input and 32-bit exe the encoding speed increases by 6..7%.




More information about the flac-dev mailing list