[Flac-dev] FLAC StreamInfo Parsing
Ilia Ternovich
ternovich at gmail.com
Wed Jun 23 07:19:43 PDT 2010
I see your point, thanks for interesting suggestion!
2010/6/23 Brian Willoughby <brianw at sounds.wa.com>:
> 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