mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
audio/internal/readerdriver: Refactoring: Remove player.state
This commit is contained in:
parent
f556590582
commit
ded3cd1433
9
audio/internal/oboe/binding_android.cpp
vendored
9
audio/internal/oboe/binding_android.cpp
vendored
@ -68,6 +68,10 @@ public:
|
|||||||
std::atomic_store(&volume_, volume);
|
std::atomic_store(&volume_, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsPlaying() {
|
||||||
|
return stream_->getState() == oboe::StreamState::Started;
|
||||||
|
}
|
||||||
|
|
||||||
void AppendBuffer(uint8_t* data, int length) {
|
void AppendBuffer(uint8_t* data, int length) {
|
||||||
// Sync this constants with internal/readerdriver/driver.go
|
// Sync this constants with internal/readerdriver/driver.go
|
||||||
const size_t bytes_per_sample = channel_num_ * bit_depth_in_bytes_;
|
const size_t bytes_per_sample = channel_num_ * bit_depth_in_bytes_;
|
||||||
@ -210,6 +214,11 @@ PlayerID Player_Create(int sample_rate, int channel_num, int bit_depth_in_bytes,
|
|||||||
return reinterpret_cast<PlayerID>(p);
|
return reinterpret_cast<PlayerID>(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Player_IsPlaying(PlayerID audio_player) {
|
||||||
|
Player* p = reinterpret_cast<Player*>(audio_player);
|
||||||
|
return p->IsPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void Player_AppendBuffer(PlayerID audio_player, uint8_t* data, int length) {
|
void Player_AppendBuffer(PlayerID audio_player, uint8_t* data, int length) {
|
||||||
Player* p = reinterpret_cast<Player*>(audio_player);
|
Player* p = reinterpret_cast<Player*>(audio_player);
|
||||||
p->AppendBuffer(data, length);
|
p->AppendBuffer(data, length);
|
||||||
|
4
audio/internal/oboe/binding_android.go
vendored
4
audio/internal/oboe/binding_android.go
vendored
@ -60,6 +60,10 @@ func onWrittenCallback(player C.uintptr_t) {
|
|||||||
p.onWritten()
|
p.onWritten()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Player) IsPlaying() bool {
|
||||||
|
return bool(C.Player_IsPlaying(p.player))
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Player) AppendBuffer(buf []byte) {
|
func (p *Player) AppendBuffer(buf []byte) {
|
||||||
ptr := C.CBytes(buf)
|
ptr := C.CBytes(buf)
|
||||||
defer C.free(ptr)
|
defer C.free(ptr)
|
||||||
|
1
audio/internal/oboe/binding_android.h
vendored
1
audio/internal/oboe/binding_android.h
vendored
@ -28,6 +28,7 @@ typedef uintptr_t PlayerID;
|
|||||||
const char* Suspend();
|
const char* Suspend();
|
||||||
const char* Resume();
|
const char* Resume();
|
||||||
PlayerID Player_Create(int sample_rate, int channel_num, int bit_depth_in_bytes, double volume, uintptr_t go_player);
|
PlayerID Player_Create(int sample_rate, int channel_num, int bit_depth_in_bytes, double volume, uintptr_t go_player);
|
||||||
|
bool Player_IsPlaying(PlayerID audio_player);
|
||||||
void Player_AppendBuffer(PlayerID audio_player, uint8_t* data, int length);
|
void Player_AppendBuffer(PlayerID audio_player, uint8_t* data, int length);
|
||||||
const char* Player_Play(PlayerID audio_player);
|
const char* Player_Play(PlayerID audio_player);
|
||||||
const char* Player_Pause(PlayerID audio_player);
|
const char* Player_Pause(PlayerID audio_player);
|
||||||
|
@ -74,11 +74,12 @@ type player struct {
|
|||||||
src io.Reader
|
src io.Reader
|
||||||
err error
|
err error
|
||||||
cond *sync.Cond
|
cond *sync.Cond
|
||||||
state playerState
|
closed bool
|
||||||
volume float64
|
volume float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) Pause() {
|
func (p *player) Pause() {
|
||||||
|
// TODO: Implement the 'true' pause after #1633 is fixed.
|
||||||
p.Reset()
|
p.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ func (p *player) Play() {
|
|||||||
if p.err != nil {
|
if p.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if p.state != playerPaused {
|
if p.p != nil && p.p.IsPlaying() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer p.cond.Signal()
|
defer p.cond.Signal()
|
||||||
@ -113,7 +114,6 @@ func (p *player) Play() {
|
|||||||
p.setErrorImpl(err)
|
p.setErrorImpl(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.state = playerPlay
|
|
||||||
if runLoop {
|
if runLoop {
|
||||||
go p.loop()
|
go p.loop()
|
||||||
}
|
}
|
||||||
@ -122,7 +122,10 @@ func (p *player) Play() {
|
|||||||
func (p *player) IsPlaying() bool {
|
func (p *player) IsPlaying() bool {
|
||||||
p.cond.L.Lock()
|
p.cond.L.Lock()
|
||||||
defer p.cond.L.Unlock()
|
defer p.cond.L.Unlock()
|
||||||
return p.state == playerPlay
|
if p.p == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return p.p.IsPlaying()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) Reset() {
|
func (p *player) Reset() {
|
||||||
@ -132,7 +135,7 @@ func (p *player) Reset() {
|
|||||||
if p.err != nil {
|
if p.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if p.state == playerClosed {
|
if p.closed {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if p.p == nil {
|
if p.p == nil {
|
||||||
@ -146,7 +149,6 @@ func (p *player) Reset() {
|
|||||||
p.setErrorImpl(err)
|
p.setErrorImpl(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.state = playerPaused
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) Volume() float64 {
|
func (p *player) Volume() float64 {
|
||||||
@ -190,7 +192,7 @@ func (p *player) closeImpl() error {
|
|||||||
defer p.cond.Signal()
|
defer p.cond.Signal()
|
||||||
|
|
||||||
runtime.SetFinalizer(p, nil)
|
runtime.SetFinalizer(p, nil)
|
||||||
p.state = playerClosed
|
p.closed = true
|
||||||
if p.p == nil {
|
if p.p == nil {
|
||||||
return p.err
|
return p.err
|
||||||
}
|
}
|
||||||
@ -215,19 +217,16 @@ func (p *player) setErrorImpl(err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) shouldWait() bool {
|
func (p *player) shouldWait() bool {
|
||||||
|
if p.closed {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if p.p == nil {
|
if p.p == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
switch p.state {
|
if !p.p.IsPlaying() {
|
||||||
case playerPlay:
|
|
||||||
return p.p.UnplayedBufferSize() >= int64(p.context.MaxBufferSize())
|
|
||||||
case playerPaused:
|
|
||||||
return true
|
|
||||||
case playerClosed:
|
|
||||||
return false
|
return false
|
||||||
default:
|
|
||||||
panic("not reached")
|
|
||||||
}
|
}
|
||||||
|
return p.p.UnplayedBufferSize() >= int64(p.context.MaxBufferSize())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) wait() bool {
|
func (p *player) wait() bool {
|
||||||
@ -237,14 +236,14 @@ func (p *player) wait() bool {
|
|||||||
for p.shouldWait() {
|
for p.shouldWait() {
|
||||||
p.cond.Wait()
|
p.cond.Wait()
|
||||||
}
|
}
|
||||||
return p.p != nil && p.state == playerPlay
|
return p.p != nil && p.p.IsPlaying()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *player) write(buf []byte) {
|
func (p *player) write(buf []byte) {
|
||||||
p.cond.L.Lock()
|
p.cond.L.Lock()
|
||||||
defer p.cond.L.Unlock()
|
defer p.cond.L.Unlock()
|
||||||
|
|
||||||
if p.state == playerClosed {
|
if p.closed {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if p.p == nil {
|
if p.p == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user