Files
monibuca/pkg/ring-reader.go
2024-11-12 10:19:55 +08:00

39 lines
605 B
Go

package pkg
import (
"m7s.live/v5/pkg/util"
)
type RingReader struct {
*util.Ring[AVFrame]
locked bool
Count int // 读取的帧数
}
func (r *RingReader) StartRead(ring *util.Ring[AVFrame]) (err error) {
r.Ring = ring
if r.Value.discard {
return ErrDiscard
}
r.Value.RLock()
r.locked = true
r.Count++
return
}
func (r *RingReader) StopRead() {
if r.locked {
r.Value.RUnlock()
r.locked = false
}
}
func (r *RingReader) ReadNext() (err error) {
return r.Read(r.Next())
}
func (r *RingReader) Read(ring *util.Ring[AVFrame]) (err error) {
r.StopRead()
return r.StartRead(ring)
}