install go2rtc on bob
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
// Package pcm
|
||||
// https://www.codeproject.com/Articles/14237/Using-the-G711-standard
|
||||
package pcm
|
||||
|
||||
const alawMax = 0x7FFF
|
||||
|
||||
func PCMAtoPCM(alaw byte) int16 {
|
||||
alaw ^= 0xD5
|
||||
|
||||
data := int16(((alaw & 0x0F) << 4) + 8)
|
||||
exponent := (alaw & 0x70) >> 4
|
||||
|
||||
if exponent != 0 {
|
||||
data |= 0x100
|
||||
}
|
||||
|
||||
if exponent > 1 {
|
||||
data <<= exponent - 1
|
||||
}
|
||||
|
||||
// sign
|
||||
if alaw&0x80 == 0 {
|
||||
return data
|
||||
} else {
|
||||
return -data
|
||||
}
|
||||
}
|
||||
|
||||
func PCMtoPCMA(pcm int16) byte {
|
||||
var alaw byte
|
||||
|
||||
if pcm < 0 {
|
||||
pcm = -pcm
|
||||
alaw = 0x80
|
||||
}
|
||||
|
||||
if pcm > alawMax {
|
||||
pcm = alawMax
|
||||
}
|
||||
|
||||
exponent := byte(7)
|
||||
for expMask := int16(0x4000); (pcm&expMask) == 0 && exponent > 0; expMask >>= 1 {
|
||||
exponent--
|
||||
}
|
||||
|
||||
if exponent == 0 {
|
||||
alaw |= byte(pcm>>4) & 0x0F
|
||||
} else {
|
||||
alaw |= (exponent << 4) | (byte(pcm>>(exponent+3)) & 0x0F)
|
||||
}
|
||||
|
||||
return alaw ^ 0xD5
|
||||
}
|
||||
Reference in New Issue
Block a user