mirror of
https://github.com/Monibuca/engine.git
synced 2025-10-07 01:22:51 +08:00
4.0初步改造
This commit is contained in:
101
data_track.go
101
data_track.go
@@ -1,58 +1,57 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
// import (
|
||||
// "sync"
|
||||
// "time"
|
||||
// "unsafe"
|
||||
|
||||
type DataTrack struct {
|
||||
RingBuffer
|
||||
BaseTrack
|
||||
*LockItem
|
||||
sync.Locker // 写入锁,可选,单一写入可以不加锁
|
||||
}
|
||||
// "github.com/Monibuca/engine/v4/util"
|
||||
// )
|
||||
|
||||
func (s *Stream) NewDataTrack(l sync.Locker) (dt *DataTrack) {
|
||||
dt = &DataTrack{
|
||||
Locker: l,
|
||||
}
|
||||
dt.Stream = s
|
||||
dt.Init(s.Context, 256)
|
||||
dt.setCurrent()
|
||||
return
|
||||
}
|
||||
// type DataTrack struct {
|
||||
// LockRing[any]
|
||||
// BaseTrack
|
||||
// *LockFrame[any]
|
||||
// sync.Locker // 写入锁,可选,单一写入可以不加锁
|
||||
// }
|
||||
|
||||
func (dt *DataTrack) Push(data interface{}) {
|
||||
if dt.Locker != nil {
|
||||
dt.Lock()
|
||||
defer dt.Unlock()
|
||||
}
|
||||
dt.Timestamp = time.Now()
|
||||
dt.addBytes(int(unsafe.Sizeof(data)))
|
||||
dt.GetBPS()
|
||||
if time.Since(dt.ts) > 1000 {
|
||||
dt.resetBPS()
|
||||
}
|
||||
dt.Write(data)
|
||||
dt.setCurrent()
|
||||
}
|
||||
// func (s *Stream) NewDataTrack(l sync.Locker) (dt *DataTrack) {
|
||||
// dt = &DataTrack{
|
||||
// Locker: l,
|
||||
// }
|
||||
// dt.Stream = s
|
||||
// dt.Init(s.Context, 256)
|
||||
// dt.setCurrent()
|
||||
// return
|
||||
// }
|
||||
|
||||
func (at *DataTrack) setCurrent() {
|
||||
at.LockItem = at.Current()
|
||||
}
|
||||
// func (dt *DataTrack) Push(data any) {
|
||||
// if dt.Locker != nil {
|
||||
// dt.Lock()
|
||||
// defer dt.Unlock()
|
||||
// }
|
||||
// dt.Timestamp = time.Now()
|
||||
// dt.bytesIn = (int(unsafe.Sizeof(data)))
|
||||
// dt.GetBPS()
|
||||
// dt.Write(data)
|
||||
// dt.setCurrent()
|
||||
// }
|
||||
|
||||
func (dt *DataTrack) Play(onData func(*DataItem), exit1, exit2 <-chan struct{}) {
|
||||
dr := dt.Clone()
|
||||
for dp := dr.Read(); ; dp = dr.Read() {
|
||||
select {
|
||||
case <-exit1:
|
||||
return
|
||||
case <-exit2:
|
||||
return
|
||||
default:
|
||||
onData(dp.(*DataItem))
|
||||
dr.MoveNext()
|
||||
}
|
||||
}
|
||||
}
|
||||
// func (at *DataTrack) setCurrent() {
|
||||
// at.LockFrame = at.Current()
|
||||
// }
|
||||
|
||||
// func (dt *DataTrack) Play(onData func(DataFrame[any]), exit1, exit2 <-chan struct{}) {
|
||||
// dr := util.Clone(dt.LockRing)
|
||||
// for dp := dr.Read(); ; dp = dr.Read() {
|
||||
// select {
|
||||
// case <-exit1:
|
||||
// return
|
||||
// case <-exit2:
|
||||
// return
|
||||
// default:
|
||||
// onData(dp)
|
||||
// dr.MoveNext()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
Reference in New Issue
Block a user