From a89e07f913cf94084c4187789156a935fa87740b Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sat, 9 Nov 2019 15:19:27 +0900 Subject: [PATCH] Revert "audio: Bug fix: Fill empty data even when audio is suspended" This reverts commit 529dddda53758a272061ee658bdfe7eaf0ac8b75. Updates #975 Reason: This causes PARTIAL_WAKE_LOCK on Android (AudioDirectOut) (#931) --- audio/audio.go | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/audio/audio.go b/audio/audio.go index f7c1c3598..f5b32060e 100644 --- a/audio/audio.go +++ b/audio/audio.go @@ -63,11 +63,11 @@ type Context struct { sampleRate int err error ready bool - suspended bool players map[*playerImpl]struct{} - m sync.Mutex + m sync.Mutex + semaphore chan struct{} } var ( @@ -75,8 +75,6 @@ var ( theContextLock sync.Mutex ) -var emptyBytes = make([]byte, 256) - // NewContext creates a new audio context with the given sample rate. // // The sample rate is also used for decoding MP3 with audio/mp3 package @@ -101,19 +99,16 @@ func NewContext(sampleRate int) (*Context, error) { c: newContext(sampleRate), players: map[*playerImpl]struct{}{}, inited: make(chan struct{}), + semaphore: make(chan struct{}, 1), } theContext = c h := getHook() h.OnSuspendAudio(func() { - c.m.Lock() - c.suspended = true - c.m.Unlock() + c.semaphore <- struct{}{} }) h.OnResumeAudio(func() { - c.m.Lock() - c.suspended = false - c.m.Unlock() + <-c.semaphore }) h.AppendHookOnBeforeUpdate(func() error { @@ -460,14 +455,10 @@ func (p *playerImpl) read() ([]byte, bool) { const bufSize = 2048 - // If audio is suspended, fill zero values not to cause delay (#975). - // TODO: Oto's players should be able to be suspended and resumed. - p.context.m.Lock() - s := p.context.suspended - p.context.m.Unlock() - if s { - return emptyBytes, true - } + p.context.semaphore <- struct{}{} + defer func() { + <-p.context.semaphore + }() newBuf := make([]byte, bufSize-len(p.buf)) n, err := p.src.Read(newBuf)