[Flac-dev] FLAC StreamInfo Parsing

Brian Willoughby brianw at sounds.wa.com
Tue Jun 22 22:48:41 PDT 2010


Oops.  I proofread my email a little too late.  I corrected the  
example.  Hopefully what I am suggesting is clear.

Brian Willoughby
Sound Consulting


On Jun 22, 2010, at 22:15, Brian Willoughby wrote:
> What you need to do is write a bitStream function.  It should only  
> read each byte from the stream once and completely deal with all 8  
> bits before reading the next byte.  You should never look ahead  
> beyond the current byte.  Instead, you need an accumulator to  
> collect the incoming bits.  Each time you read a byte, add 8 to  
> your bit count, and shift any existing bits in your accumulator  
> around to make room for the new bits.  When pulling values out of  
> the accumulator, you do that based upon the number of bits  
> requested.  The accumulator will have to be (long long) because you  
> will sometimes request more than 32 bits.
>
> In other words, instead of:
>
> GetEndianBytes(streamArray, streamOffset, numBytes);
>
> ... you should implement:
>
> (long long)GetBigEndianStreamBits(streamHandle, (unsigned)numBits);
>
> The return value will have to be 64-bit to handle totalSamples.   
> The nice thing is that you won't need any indexing or bit shifting,  
> because GetBigEndianStreamBits() will directly return the value you  
> ask for, based upon the number of bits requested.




More information about the Flac-dev mailing list