diff options
author | Rainer Hochecker <fernetmenta@online.de> | 2018-09-09 11:07:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-09 11:07:13 +0200 |
commit | 98ed5b143586bb419078452e27be73296825da73 (patch) | |
tree | 6d63e9dac257acc190caedde111ef4927847dbc5 | |
parent | e70825a750be58575f4ae06ec09e7fb86e6dc9b9 (diff) | |
parent | b93599b1aee026a97d314906b99dc81fd3a78d92 (diff) |
Merge pull request #14408 from FernetMenta/ready
VideoPlayer: demuxClient, wait until video has extradata
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp | 21 | ||||
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp index 8c5ea25223..fde83a051f 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp @@ -292,6 +292,15 @@ DemuxPacket* CDVDDemuxClient::Read() } } + if (!IsVideoReady()) + { + m_packet.reset(); + DemuxPacket *pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); + pPacket->demuxerId = m_demuxerId; + return pPacket; + } + + //! @todo drop this block CDVDInputStream::IDisplayTime *inputStream = m_pInput->GetIDisplayTime(); if (inputStream) { @@ -310,6 +319,7 @@ DemuxPacket* CDVDDemuxClient::Read() m_packet->dispTime += DVD_TIME_TO_MSEC(m_packet->dts - m_dtsAtDisplayTime); } } + return m_packet.release(); } @@ -554,6 +564,17 @@ int CDVDDemuxClient::GetNrOfStreams() const return m_streams.size(); } +bool CDVDDemuxClient::IsVideoReady() +{ + for (const auto& stream : m_streams) + { + if (stream.second->type == STREAM_VIDEO && + stream.second->ExtraData == nullptr) + return false; + } + return true; +} + std::string CDVDDemuxClient::GetFileName() { if (m_pInput) diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h index 692fe1dd43..d41f354a44 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h @@ -47,6 +47,7 @@ protected: bool ParsePacket(DemuxPacket* pPacket); void DisposeStreams(); std::shared_ptr<CDemuxStream> GetStreamInternal(int iStreamId); + bool IsVideoReady(); std::shared_ptr<CDVDInputStream> m_pInput; std::shared_ptr<CDVDInputStream::IDemux> m_IDemux; |