player/Thread: move mutex lock out of ActivateDecoder()
This commit is contained in:
@@ -299,7 +299,7 @@ private:
|
|||||||
* yet, therefore we don't know the audio format yet. To
|
* yet, therefore we don't know the audio format yet. To
|
||||||
* finish decoder startup, call CheckDecoderStartup().
|
* finish decoder startup, call CheckDecoderStartup().
|
||||||
*
|
*
|
||||||
* The player lock is not held.
|
* Caller must lock the mutex.
|
||||||
*/
|
*/
|
||||||
void ActivateDecoder() noexcept;
|
void ActivateDecoder() noexcept;
|
||||||
|
|
||||||
@@ -419,27 +419,26 @@ Player::ActivateDecoder() noexcept
|
|||||||
|
|
||||||
queued = false;
|
queued = false;
|
||||||
|
|
||||||
|
pc.ClearTaggedSong();
|
||||||
|
|
||||||
|
song = std::exchange(pc.next_song, nullptr);
|
||||||
|
|
||||||
|
elapsed_time = pc.seek_time;
|
||||||
|
|
||||||
|
/* set the "starting" flag, which will be cleared by
|
||||||
|
player_check_decoder_startup() */
|
||||||
|
decoder_starting = true;
|
||||||
|
|
||||||
|
/* update PlayerControl's song information */
|
||||||
|
pc.total_time = song->GetDuration();
|
||||||
|
pc.bit_rate = 0;
|
||||||
|
pc.audio_format.Clear();
|
||||||
|
|
||||||
{
|
{
|
||||||
const std::lock_guard<Mutex> lock(pc.mutex);
|
/* call syncPlaylistWithQueue() in the main thread */
|
||||||
|
const ScopeUnlock unlock(pc.mutex);
|
||||||
pc.ClearTaggedSong();
|
pc.listener.OnPlayerSync();
|
||||||
|
|
||||||
song = std::exchange(pc.next_song, nullptr);
|
|
||||||
|
|
||||||
elapsed_time = pc.seek_time;
|
|
||||||
|
|
||||||
/* set the "starting" flag, which will be cleared by
|
|
||||||
player_check_decoder_startup() */
|
|
||||||
decoder_starting = true;
|
|
||||||
|
|
||||||
/* update PlayerControl's song information */
|
|
||||||
pc.total_time = song->GetDuration();
|
|
||||||
pc.bit_rate = 0;
|
|
||||||
pc.audio_format.Clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call syncPlaylistWithQueue() in the main thread */
|
|
||||||
pc.listener.OnPlayerSync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -634,9 +633,9 @@ Player::SeekDecoder() noexcept
|
|||||||
|
|
||||||
/* re-start the decoder */
|
/* re-start the decoder */
|
||||||
StartDecoder(*pipe);
|
StartDecoder(*pipe);
|
||||||
|
const std::lock_guard<Mutex> lock(pc.mutex);
|
||||||
ActivateDecoder();
|
ActivateDecoder();
|
||||||
|
|
||||||
const std::lock_guard<Mutex> lock(pc.mutex);
|
|
||||||
if (!WaitDecoderStartup())
|
if (!WaitDecoderStartup())
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -966,7 +965,10 @@ Player::SongBorder() noexcept
|
|||||||
|
|
||||||
pc.outputs.SongBorder();
|
pc.outputs.SongBorder();
|
||||||
|
|
||||||
ActivateDecoder();
|
{
|
||||||
|
const std::lock_guard<Mutex> lock(pc.mutex);
|
||||||
|
ActivateDecoder();
|
||||||
|
}
|
||||||
|
|
||||||
const bool border_pause = pc.LockApplyBorderPause();
|
const bool border_pause = pc.LockApplyBorderPause();
|
||||||
if (border_pause) {
|
if (border_pause) {
|
||||||
@@ -981,9 +983,9 @@ Player::Run() noexcept
|
|||||||
pipe = new MusicPipe();
|
pipe = new MusicPipe();
|
||||||
|
|
||||||
StartDecoder(*pipe);
|
StartDecoder(*pipe);
|
||||||
|
pc.Lock();
|
||||||
ActivateDecoder();
|
ActivateDecoder();
|
||||||
|
|
||||||
pc.Lock();
|
|
||||||
pc.state = PlayerState::PLAY;
|
pc.state = PlayerState::PLAY;
|
||||||
|
|
||||||
pc.CommandFinished();
|
pc.CommandFinished();
|
||||||
|
Reference in New Issue
Block a user