[Vorbis-dev] Building a new decoder - some questions on the spec (residue decode)

Peter Steele steelehere at gmail.com
Sat Mar 28 00:50:32 PDT 2015


Hi

I am trying to build a new decoder in Java, I know there are a couple
of java decoders already but they don't implement the bit of the spec
I am having questions on

Question 1)

In section 8.6.2 it mentions

"However, it is also possible to set [residue_begin] and [residue_end]
to specify
a range partially or wholly beyond the maximum vector size. Before
beginning residue
decode, limit [residue_begin] and [residue_end] to the maximum
possible vector size
as follows."

The code segment then has

1) [actual\_size] = current blocksize/2;
2) if residue encoding is format 2
3) [actual\_size] = [actual\_size] * [ch];
4) [limit\_residue\_begin] = maximum of ([residue\_begin],[actual\_size]);
5) [limit\_residue\_end] = maximum of ([residue\_end],[actual\_size]);

In a real world vorbis file I see

residue_begin = 0;
residue_end = 256;
actual_size = 8;

following that code I would get

limit_residue_begin = 8
limit_residue_end = 256

Is this right? It feels wrong having an actual size of 8 yet the
difference of end-begin being 248.

Question 2)

Further down in 8.6.2 it has a line of code

18) if ([vqbook] is not ’unused’) {

Can someone tell me the full definition of 'unused' here? I have an
instance currently where the vqbook returned is not of type 1 or 2 so
doesn't have any vqvectors (The index returned from the
classifications was 0 which is the default up populated value from the
code in 8.6.1 which was retrieved in the header packet decode)

Many Thanks

Peter


More information about the Vorbis-dev mailing list