// The 6 bits are used to specify the prediction method and order as follows:
// 000000: Constant prediction method.
// 000001: Verbatim prediction method.
// 00001x: reserved.
// 0001xx: reserved.
// 001xxx:
// if (xxx <= 4)
// Fixed prediction method; xxx=order
// else
// reserved.
// 01xxxx: reserved.
// 1xxxxx: LPC prediction method; xxxxx=order-1
switch{
casex<1:
// 000000: Constant prediction method.
subframe.Pred=PredConstant
casex<2:
// 000001: Verbatim prediction method.
subframe.Pred=PredVerbatim
casex<8:
// 00001x: reserved.
// 0001xx: reserved.
returnfmt.Errorf("frame.Subframe.parseHeader: reserved prediction method bit pattern (%06b)",x)
casex<16:
// 001xxx:
// if (xxx <= 4)
// Fixed prediction method; xxx=order
// else
// reserved.
order:=uint8(x&0x07)
iforder>4{
returnfmt.Errorf("frame.Subframe.parseHeader: reserved prediction method bit pattern (%06b)",x)
}
subframe.Pred=PredFixed
subframe.Order=order
casex<32:
// 01xxxx: reserved.
returnfmt.Errorf("frame.Subframe.parseHeader: reserved prediction method bit pattern (%06b)",x)
default:
// 1xxxxx: LPC prediction method; xxxxx=order-1
subframe.Pred=PredLPC
subframe.Order=uint8(x&0x1F)+1
}
// 1 bit: hasWastedBits.
x,err=br.Read(1)
iferr!=nil{
returnerr
}
ifx!=0{
// The number of wasted bits-per-sample is unary coded.
_,err=bitutil.DecodeUnary(br)
iferr!=nil{
returnerr
}
panic("Never seen a FLAC file contain wasted-bits-per-sample before. Not really a reason to panic, but I want to dissect one of those files. Please send it to me :)")