Skip to content

Commit

Permalink
Revert "audio: Bug fix: Fill empty data even when audio is suspended"
Browse files Browse the repository at this point in the history
This reverts commit 529dddd.

Updates #975

Reason: This causes PARTIAL_WAKE_LOCK on Android (AudioDirectOut) (#931)
  • Loading branch information
hajimehoshi committed Nov 9, 2019
1 parent 35436ea commit a89e07f
Showing 1 changed file with 9 additions and 18 deletions.
27 changes: 9 additions & 18 deletions audio/audio.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,20 +63,18 @@ 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 (
theContext *Context
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
Expand All @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit a89e07f

Please sign in to comment.