public override void Write(FlacStream stream, int blockSize, ref uint[] samples) { // only one partition partitionOrder_ = 0; blockSize_ = blockSize; stream.Writer.WriteBits(partitionOrder_, PARTITION_ORDER_BITS_COUNT); int currentSubframeSample = predictorOrder_; RicePartition p = new RicePartition(); p.EncodingParameter = 0; p.Write(stream, GetSampleCount(blockSize_, predictorOrder_, partitionOrder_, true), ref currentSubframeSample, ref samples); }
public override void Read(FlacStream stream, int frameBlockSize, int predictorOrder, ref uint[] samples) { partitionOrder_ = stream.Reader.ReadBitsAsSByte(PARTITION_ORDER_BITS_COUNT); predictorOrder_ = predictorOrder; blockSize_ = frameBlockSize; int partitionCount = 1 << partitionOrder_; // 2 ^ order Validation.IsValid(partitionCount >= 1); int currentSubframeSample = predictorOrder; int sampleCount0 = GetSampleCount(frameBlockSize, predictorOrder, partitionOrder_, true); int sampleCount1 = GetSampleCount(frameBlockSize, predictorOrder, partitionOrder_, false); while (partitions_.Count < partitionCount) { int count = partitions_.Count == 0 ? sampleCount0 : sampleCount1; RicePartition partition = new RicePartition(); partition.Read(stream, count, ref currentSubframeSample, ref samples); partitions_.Add(partition); } }