Files
monibuca/pkg/ring-reader.go
langhuihui fdcc85d932 dev
2024-04-25 20:28:28 +08:00

83 lines
1.6 KiB
Go

package pkg
import (
"m7s.live/m7s/v5/pkg/util"
)
type RingReader struct {
*util.Ring[AVFrame]
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.Count++
return
}
// func (r *RingReader) StartRead(ring *util.Ring[AVFrame]) (err error) {
// r.Ring = ring
// if r.Value.IsDiscarded() {
// return ErrDiscard
// }
// if r.Value.IsWriting() {
// // t := time.Now()
// r.Value.Wait()
// // log.Info("wait", time.Since(t))
// }
// r.Count++
// r.Value.ReaderEnter()
// return
// }
// func (r *RingReader) TryRead() (f *AVFrame, err error) {
// if r.Count > 0 {
// preValue := &r.Value
// if preValue.IsDiscarded() {
// preValue.ReaderLeave()
// err = ErrDiscard
// return
// }
// if r.Next().Value.IsWriting() {
// return
// }
// defer preValue.ReaderLeave()
// r.Ring = r.Next()
// } else {
// if r.Value.IsWriting() {
// return
// }
// }
// if r.Value.IsDiscarded() {
// err = ErrDiscard
// return
// }
// r.Count++
// f = &r.Value
// r.Value.ReaderEnter()
// return
// }
func (r *RingReader) ReadNext() (err error) {
return r.Read(r.Next())
}
func (r *RingReader) Read(ring *util.Ring[AVFrame]) (err error) {
preValue := &r.Value
preValue.RUnlock()
return r.StartRead(ring)
}
// func (r *RingReader) Read(ring *util.Ring[AVFrame]) (err error) {
// preValue := &r.Value
// defer preValue.ReaderLeave()
// if preValue.IsDiscarded() {
// return ErrDiscard
// }
// return r.StartRead(ring)
// }