decoding performance

This commit is contained in:
Arndt Brenschede 2019-06-29 10:11:59 +02:00
parent 7b4db81c78
commit 828227f59d
6 changed files with 65 additions and 46 deletions

View file

@ -62,7 +62,7 @@ public final class MicroCache2 extends MicroCache
if ( debug ) System.out.println( "*** decoding cache of size=" + size + " for lonIdx=" + lonIdx + " latIdx=" + latIdx );
bc.decodeSortedArray( faid, 0, size, 0x20000000, 0 );
bc.decodeSortedArray( faid, 0, size, 29, 0 );
for( int n = 0; n<size; n++ )
{

View file

@ -269,22 +269,18 @@ public final class StatCoderContext extends BitCoderContext
* @param value
* should be 0
*/
public void decodeSortedArray( int[] values, int offset, int subsize, int nextbit, int value )
public void decodeSortedArray( int[] values, int offset, int subsize, int nextbitpos, int value )
{
if ( subsize == 1 ) // last-choice shortcut
{
while (nextbit != 0)
if ( nextbitpos >= 0 )
{
if ( decodeBit() )
{
value |= nextbit;
}
nextbit >>= 1;
value |= decodeBitsReverse( nextbitpos+1 );
}
values[offset] = value;
return;
}
if ( nextbit == 0 )
if ( nextbitpos < 0 )
{
while (subsize-- > 0)
{
@ -298,11 +294,11 @@ public final class StatCoderContext extends BitCoderContext
if ( size1 > 0 )
{
decodeSortedArray( values, offset, size1, nextbit >> 1, value );
decodeSortedArray( values, offset, size1, nextbitpos-1, value );
}
if ( size2 > 0 )
{
decodeSortedArray( values, offset + size1, size2, nextbit >> 1, value | nextbit );
decodeSortedArray( values, offset + size1, size2, nextbitpos-1, value | (1 << nextbitpos) );
}
}

View file

@ -13,7 +13,7 @@ public class StatCoderContextTest
{
byte[] ab = new byte[40000];
StatCoderContext ctx = new StatCoderContext( ab );
for ( int noisybits = 0; noisybits < 12; noisybits++ )
for ( int noisybits = 1; noisybits < 12; noisybits++ )
{
for ( int i = 0; i < 1000; i++ )
{
@ -22,7 +22,7 @@ public class StatCoderContextTest
}
ctx = new StatCoderContext( ab );
for ( int noisybits = 0; noisybits < 12; noisybits++ )
for ( int noisybits = 1; noisybits < 12; noisybits++ )
{
for ( int i = 0; i < 1000; i++ )
{
@ -114,7 +114,7 @@ public class StatCoderContextTest
ctx = new StatCoderContext( ab );
int[] decodedValues = new int[size];
ctx.decodeSortedArray( decodedValues, 0, size, 0x08000000, 0 );
ctx.decodeSortedArray( decodedValues, 0, size, 27, 0 );
for ( int i = 0; i < size; i++ )
{