aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Hochecker <fernetmenta@online.de>2018-09-09 11:07:13 +0200
committerGitHub <noreply@github.com>2018-09-09 11:07:13 +0200
commit98ed5b143586bb419078452e27be73296825da73 (patch)
tree6d63e9dac257acc190caedde111ef4927847dbc5
parente70825a750be58575f4ae06ec09e7fb86e6dc9b9 (diff)
parentb93599b1aee026a97d314906b99dc81fd3a78d92 (diff)
Merge pull request #14408 from FernetMenta/ready
VideoPlayer: demuxClient, wait until video has extradata
-rw-r--r--xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp21
-rw-r--r--xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h1
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;