mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
83 lines
1.6 KiB
Go
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)
|
|
// }
|