mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-26 18:51:13 +08:00
39 lines
605 B
Go
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)
|
|
}
|