stash/vendor/github.com/asticode/go-astits/program_map.go
2022-11-07 12:33:15 +11:00

57 lines
1 KiB
Go

package astits
import "sync"
// programMap represents a program ids map
type programMap struct {
m *sync.Mutex
p map[uint16]uint16 // map[ProgramMapID]ProgramNumber
}
// newProgramMap creates a new program ids map
func newProgramMap() programMap {
return programMap{
m: &sync.Mutex{},
p: make(map[uint16]uint16),
}
}
// exists checks whether the program with this pid exists
func (m programMap) exists(pid uint16) (ok bool) {
m.m.Lock()
defer m.m.Unlock()
_, ok = m.p[pid]
return
}
// set sets a new program id
func (m programMap) set(pid, number uint16) {
m.m.Lock()
defer m.m.Unlock()
m.p[pid] = number
}
func (m programMap) unset(pid uint16) {
m.m.Lock()
defer m.m.Unlock()
delete(m.p, pid)
}
func (m programMap) toPATData() *PATData {
m.m.Lock()
defer m.m.Unlock()
d := &PATData{
Programs: []*PATProgram{},
TransportStreamID: uint16(PSITableIDPAT),
}
for pid, pnr := range m.p {
d.Programs = append(d.Programs, &PATProgram{
ProgramMapID: pid,
ProgramNumber: pnr,
})
}
return d
}