diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2013-05-11 23:57:13 +0400 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2013-05-11 23:57:13 +0400 |
commit | 756e4047f89235a2e3ea6462cabe8d5384beb0b5 (patch) | |
tree | 18b01833fc730166ffd0d50e763eca720666d959 | |
parent | 0dc09fbce5705ec16f732a0b2856078d0329d6ca (diff) |
Improve handling of get_CurrentMarker with start-only chapters
-rw-r--r-- | demuxer/Demuxers/LAVFDemuxer.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp index cbb4efe3..e3b2ca41 100644 --- a/demuxer/Demuxers/LAVFDemuxer.cpp +++ b/demuxer/Demuxers/LAVFDemuxer.cpp @@ -1128,17 +1128,22 @@ STDMETHODIMP CLAVFDemuxer::get_MarkerCount(long* pMarkerCount) STDMETHODIMP CLAVFDemuxer::get_CurrentMarker(long* pCurrentMarker) { CheckPointer(pCurrentMarker, E_POINTER); + + *pCurrentMarker = 0; + // Can the time_base change in between chapters? // Anyhow, we do the calculation in the loop, just to be safe for(unsigned int i = 0; i < m_avFormat->nb_chapters; ++i) { int64_t pts = ConvertRTToTimestamp(m_rtCurrent, m_avFormat->chapters[i]->time_base.num, m_avFormat->chapters[i]->time_base.den); // Check if the pts is in between the bounds of the chapter - if (pts >= m_avFormat->chapters[i]->start && pts <= m_avFormat->chapters[i]->end) { + if (pts >= m_avFormat->chapters[i]->start) { *pCurrentMarker = (i + 1); - return S_OK; + // Many files only have chapter start points and no end times + if (pts <= m_avFormat->chapters[i]->end) + return S_OK; } } - return E_FAIL; + return *pCurrentMarker > 0 ? S_OK : E_FAIL; } STDMETHODIMP CLAVFDemuxer::GetMarkerTime(long MarkerNum, double* pMarkerTime) |