stream/mts: added some consts to describe indexes and masks, and fixed some syntax errors, so now it all builds

This commit is contained in:
saxon 2019-01-27 17:04:46 +10:30
parent 1be7e08b9e
commit 46b2bc4520
1 changed files with 25 additions and 15 deletions

View File

@ -83,6 +83,16 @@ const (
SectionLenMask1 = 0x03 SectionLenMask1 = 0x03
) )
const (
ProgramInfoLenIdx1 = 11
ProgramInfoLenIdx2 = 12
ProgramInfoLenMask1 = 0x03
)
const (
DescriptorsIdx = ProgramInfoLenIdx2 + 1
)
const MetadataTag = 0x26 const MetadataTag = 0x26
type ( type (
@ -246,49 +256,49 @@ func (p *PSIBytes) ProgramInfoLen() int {
return int((((*p)[ProgramInfoLenIdx1] & ProgramInfoLenMask1) << 8) | (*p)[ProgramInfoLenIdx2]) return int((((*p)[ProgramInfoLenIdx1] & ProgramInfoLenMask1) << 8) | (*p)[ProgramInfoLenIdx2])
} }
func (p *PSIBytes) HasDescriptor(int tag) Descriptor { func (p *PSIBytes) HasDescriptor(tag int) Descriptor {
descs := p.descriptors() descs := p.descriptors()
if descs == nil { if descs == nil {
return nil return nil
} }
for i := 0; i < len(descs); { for i := 0; i < len(descs); {
t := descs[i] t := int(descs[i])
if t == tag { if t == tag {
return esc[i : i+int(descs[i+1])] return descs[i : i+int(descs[i+1])]
} }
i += 1 + desc[i+1] i += 1 + int(descs[i+1])
} }
return nil return nil
} }
func (p *PSIBytes) descriptors() []byte { func (p *PSIBytes) descriptors() []byte {
return p[DescriptorsIdx : DescriptorsIdx+p.ProgramInfoLen()] return (*p)[DescriptorsIdx : DescriptorsIdx+p.ProgramInfoLen()]
} }
func (p *PSIBytes) createDescriptor(tag, data) { func (p *PSIBytes) createDescriptor(tag int, data []byte) {
curProgLen := p.ProgramInfoLen() curProgLen := p.ProgramInfoLen()
dataLen := len(data) dataLen := len(data)
// Calculate the new descriptors index and length. // Calculate the new descriptors index and length.
newDescIdx := DescriptorsIdx + curProgLen newDescIdx := DescriptorsIdx + curProgLen
newDescLen := dLen + 2 newDescLen := dataLen + 2
// Copy data down from newDescIdx to create room for the new descriptor. // Copy data down from newDescIdx to create room for the new descriptor.
copy(p[newDescIdx+newDescLen:], p[newDescIdx:dataLen-newDescLen]) copy((*p)[newDescIdx+newDescLen:], (*p)[newDescIdx:dataLen-newDescLen])
// Set the tag, data len and data of the new desriptor. // Set the tag, data len and data of the new desriptor.
p[newDescIdx] = tag (*p)[newDescIdx] = byte(tag)
p[newDescIdx+1] = dataLen (*p)[newDescIdx+1] = byte(dataLen)
copy(p[newDescIdx+2:newDescIdx+2+dataLen], data) copy((*p)[newDescIdx+2:newDescIdx+2+dataLen], data)
// Update the program info length to account for the new descriptor. // Update the program info length to account for the new descriptor.
newProgInfoLen := curProgLen + dataLen newProgInfoLen := curProgLen + dataLen
p[ProgramInfoLenIdx1] = newProgInfoLen >> 8 (*p)[ProgramInfoLenIdx1] = byte(newProgInfoLen >> 8)
p[ProgramInfoLenIdx2] = byte(newProgInfoLen) (*p)[ProgramInfoLenIdx2] = byte(newProgInfoLen)
} }
func (d *Descriptor) update(data) { func (d *Descriptor) update(data []byte) {
if len(data) > d[1] { if len(data) > int((*d)[1]) {
// TODO: implement resizing of descriptor // TODO: implement resizing of descriptor
panic("Can't resize descriptor data") panic("Can't resize descriptor data")
} }