Skip to content

Commit

Permalink
Merge pull request #24257 from enen92/upnp_player_playpause
Browse files Browse the repository at this point in the history
[UPnP] Fix playback restore after pause
  • Loading branch information
enen92 committed Dec 18, 2023
2 parents ca903e2 + 3bffc88 commit 0ac9c10
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
27 changes: 26 additions & 1 deletion xbmc/network/upnp/UPnPPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,12 +457,14 @@ void CUPnPPlayer::Pause()
m_control->Play(m_delegate->m_device, m_delegate->m_instance, "1", m_delegate.get()),
failed);
CDataCacheCore::GetInstance().SetSpeed(1.0, 1.0);
m_callback.OnPlayBackResumed();
}
else
{
NPT_CHECK_LABEL(
m_control->Pause(m_delegate->m_device, m_delegate->m_instance, m_delegate.get()), failed);
CDataCacheCore::GetInstance().SetSpeed(1.0, 0.0);
m_callback.OnPlayBackPaused();
}

return;
Expand Down Expand Up @@ -523,6 +525,19 @@ void CUPnPPlayer::DoAudioWork()
static_cast<void*>(new CFileItem(*item)));
}

// Player may be paused or resumed from the target player, state needs to be synchronized to data cache core.
CDataCacheCore& dataCacheCore = CDataCacheCore::GetInstance();
if (IsPaused() && dataCacheCore.GetSpeed() > 0.0f)
{
m_callback.OnPlayBackPaused();
dataCacheCore.SetSpeed(1.0, 0.0);
}
else if (!IsPaused() && dataCacheCore.GetSpeed() == 0.0f)
{
m_callback.OnPlayBackResumed();
dataCacheCore.SetSpeed(1.0, 1.0);
}

if (m_delegate->GetTransportState() == "STOPPED")
{
m_logger->info("Transport state flagged as STOPPED. Triggering OnPlayBackEnded.");
Expand Down Expand Up @@ -599,7 +614,17 @@ bool CUPnPPlayer::OnAction(const CAction &action)

void CUPnPPlayer::SetSpeed(float speed)
{

if (IsPaused() && speed == 1.0f)
{
NPT_CHECK_LABEL(
m_control->Play(m_delegate->m_device, m_delegate->m_instance, "1", m_delegate.get()),
failed);
m_callback.OnPlayBackResumed();
CDataCacheCore::GetInstance().SetSpeed(1.0, 1.0);
}
return;
failed:
m_logger->error("- unable to set speed");
}

void CUPnPPlayer::FrameMove()
Expand Down
4 changes: 2 additions & 2 deletions xbmc/network/upnp/UPnPPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ class CUPnPPlayer
bool CloseFile(bool reopen = false) override;
bool IsPlaying() const override;
void Pause() override;
bool HasVideo() const override { return false; }
bool HasAudio() const override { return false; }
bool HasVideo() const override { return true; }
bool HasAudio() const override { return true; }
void Seek(bool bPlus, bool bLargeStep, bool bChapterOverride) override;
void SeekPercentage(float fPercent = 0) override;
void SetVolume(float volume) override;
Expand Down

0 comments on commit 0ac9c10

Please sign in to comment.