From 6ea83ecce7ea83f4487b1b0884c5e3f7cf46ec77 Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Sun, 2 Oct 2022 14:28:41 +0200 Subject: [PATCH] Remove goconcurrentqueue dependency for channel based queue, update dependencies --- go.mod | 4 +--- go.sum | 11 ++--------- queue/queue.go | 2 +- stream/mount.go | 26 ++++++++++++++++---------- 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index 78dc8ba..8e26156 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,9 @@ module git.gammaspectra.live/S.O.N.G/MeteorLight go 1.19 require ( - git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220910154422-15e4c8e6f889 + git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220915065938-f487b8f0b04a github.com/BurntSushi/toml v1.2.0 github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 - github.com/enriquebris/goconcurrentqueue v0.6.3 ) require ( @@ -19,7 +18,6 @@ require ( git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0 // indirect git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0 // indirect github.com/aam335/aac-go v0.0.0-20200408070016-52c23bd38988 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect github.com/dh1tw/gosamplerate v0.1.2 // indirect github.com/edgeware/mp4ff v0.29.0 // indirect github.com/hajimehoshi/go-mp3 v0.3.3 // indirect diff --git a/go.sum b/go.sum index 6d58c4b..f81f21c 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220910154422-15e4c8e6f889 h1:lWAD5z3UGa3CbrO41+RCPlgn+aM+9qM6efxeVNQXaPc= -git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220910154422-15e4c8e6f889/go.mod h1:74MyNr0STf4khX56PUoR6IMyNMM3GIVKbs1TS/IDP5I= +git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220915065938-f487b8f0b04a h1:kYlTnwESq8w0FbyXgLnKNI9/iJvi2C2g7ZYv/Bh/v8c= +git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220915065938-f487b8f0b04a/go.mod h1:y3dAETc57qpC0HbqmNzke7GOg4/IpPjx3PwYU87Zkjk= git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391 h1:us3yKKsnMe0FZVHRSFZCw113ddiNrZgKf5M5PNr3SQ4= git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391/go.mod h1:ZVHB/7Vrs9xxK1j98+SJ5TRYBc7Q9dIUaNJHEmysZcI= git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f h1:CxN7zlk5FdAieyRKQSbwBGBsvQ2cDF8JVCODZpzcRkA= @@ -22,16 +22,12 @@ github.com/aam335/aac-go v0.0.0-20200408070016-52c23bd38988 h1:DZeJTINv0mpfBVfDt github.com/aam335/aac-go v0.0.0-20200408070016-52c23bd38988/go.mod h1:JBA06GZmW2MVVBYRrKuaZ2AFMSDiPmafb/qmF/ATTUM= github.com/cocoonlife/testify v0.0.0-20160218172820-792cc1faeb64 h1:LjPYdzoFSAJ5Tr/ElL8kzTJghXgpnOjJVbgd1UvZB1o= github.com/d4l3k/messagediff v1.2.2-0.20190829033028-7e0a312ae40b/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dh1tw/gosamplerate v0.1.2 h1:oyqtZk67xB9B4l+vIZCZ3F0RYV/z66W58VOah11/ktI= github.com/dh1tw/gosamplerate v0.1.2/go.mod h1:zooTyHpoR7hE+FLfdE3yjLHb2QA2NpMusNfuaZqEACM= github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 h1:ORubSQoKnncsBnR4zD9CuYFJCPOCuSNEpWEZrDdBXkc= github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086/go.mod h1:Z3Lomva4pyMWYezjMAU5QWRh0p1VvO4199OHlFnyKkM= github.com/edgeware/mp4ff v0.29.0 h1:wRW0ng0+inNGTpy7vCcSHQ7h/V71cQYnnM6woeQCHbw= github.com/edgeware/mp4ff v0.29.0/go.mod h1:GNUeA6tEFksH2CrjJF2FSGdJolba8yPGmo16qZTXsm8= -github.com/enriquebris/goconcurrentqueue v0.6.3 h1:+ma7EEEFMDmJBIS6Q4KNJruChctgwYQFqlxdveIoEE4= -github.com/enriquebris/goconcurrentqueue v0.6.3/go.mod h1:OZ+KC2BcRYzjg0vgoUs1GFqdAjkD9mz2Ots7Jbm1yS4= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/hajimehoshi/go-mp3 v0.3.3 h1:cWnfRdpye2m9ElSoVqneYRcpt/l3ijttgjMeQh+r+FE= @@ -55,10 +51,8 @@ github.com/mewkiz/pkg v0.0.0-20220820102221-bbbca16e2a6c/go.mod h1:J/rDzvIiwiVpv github.com/oov/audio v0.0.0-20171004131523-88a2be6dbe38 h1:4Upfs5rLQdx7KwBct3bmPYAhWsDDJdx660gYb7Lv9TQ= github.com/oov/audio v0.0.0-20171004131523-88a2be6dbe38/go.mod h1:Xj06yMta9R1RSKiHmxL0Bo2TB8wiKVnMgA0KVopHHkk= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/sssgun/mp3 v0.0.0-20170810093403-85f2ec632081 h1:Qo/HswJzVywl0podyXMD62HIohsj/Ij2oXbD26aUIxM= github.com/sssgun/mp3 v0.0.0-20170810093403-85f2ec632081/go.mod h1:ExwZtltybPz8zLO8c2lKRfpPk1HAxhrkp038QIBs+yg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/viert/go-lame v0.0.0-20201108052322-bb552596b11d h1:LptdD7GTUZeklomtW5vZ1AHwBvDBUCZ2Ftpaz7uEI7g= github.com/viert/go-lame v0.0.0-20201108052322-bb552596b11d/go.mod h1:EqTcYM7y4JlSfeTI47pmNu3EZQuCuLQefsQyg1Imlz8= github.com/youpy/go-riff v0.1.0 h1:vZO/37nI4tIET8tQI0Qn0Y79qQh99aEpponTPiPut7k= @@ -74,4 +68,3 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= diff --git a/queue/queue.go b/queue/queue.go index d60d033..43bca73 100644 --- a/queue/queue.go +++ b/queue/queue.go @@ -105,7 +105,7 @@ func (q *Queue) AddTrack(entry *track.Entry, tail bool) error { log.Printf("now playing \"%s\": %s - %s (%s)\n", e.Path, e.Metadata.Title, e.Metadata.Artist, e.Metadata.Album) q.NowPlaying <- e for _, mount := range q.mounts { - _ = mount.MetadataQueue.Enqueue(&metadata.Packet{ + mount.QueueMetadata(&metadata.Packet{ //TODO: carry sample rate error SampleNumber: (q.duration.Load() * int64(queue.GetSampleRate())) / int64(time.Second), TrackEntry: e, diff --git a/stream/mount.go b/stream/mount.go index 183500a..abd4500 100644 --- a/stream/mount.go +++ b/stream/mount.go @@ -13,7 +13,6 @@ import ( "git.gammaspectra.live/S.O.N.G/MeteorLight/config" "git.gammaspectra.live/S.O.N.G/MeteorLight/listener" "git.gammaspectra.live/S.O.N.G/MeteorLight/queue/metadata" - "github.com/enriquebris/goconcurrentqueue" "io" "log" "sync" @@ -28,7 +27,7 @@ type Mount struct { SampleRate int Channels int OffsetStart bool - MetadataQueue *goconcurrentqueue.FIFO + metadataQueue chan *metadata.Packet listeners []listener.Listener listenersLock sync.RWMutex keepBuffer []packetizer.Packet @@ -185,7 +184,7 @@ func NewStreamMount(source audio.Source, config *config.StreamConfig) *Mount { OffsetStart: config.GetBoolOption("offset_start", true), Channels: channels, Options: options, - MetadataQueue: goconcurrentqueue.NewFIFO(), + metadataQueue: make(chan *metadata.Packet, 1), } } @@ -308,6 +307,12 @@ func (m *Mount) handlePacket(packet packetizer.Packet) { } } +func (m *Mount) QueueMetadata(meta *metadata.Packet) { + if meta != nil { + m.metadataQueue <- meta + } +} + func (m *Mount) Process(group *sync.WaitGroup) { defer group.Done() defer func() { @@ -320,20 +325,21 @@ func (m *Mount) Process(group *sync.WaitGroup) { m.listenersLock.Unlock() }() + var metadataPacket *metadata.Packet + for { packet := m.Packetizer.GetPacket() if packet == nil { return } - if item, err := m.MetadataQueue.Get(0); err == nil { - if metadataPacket, ok := item.(*metadata.Packet); ok { - if packet.GetEndSampleNumber() > metadataPacket.GetStartSampleNumber() { - m.MetadataQueue.Dequeue() - m.handlePacket(metadataPacket) - } + if metadataPacket == nil && len(m.metadataQueue) > 0 { + metadataPacket = <-m.metadataQueue + } - } + if metadataPacket != nil && packet.GetEndSampleNumber() > metadataPacket.GetStartSampleNumber() { + m.handlePacket(metadataPacket) + metadataPacket = nil } m.handlePacket(packet)