diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-03-22 00:37:14 +0300 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-03-22 00:37:14 +0300 |
commit | 78ffe99757eab0672dd5bca5b464f8127bdd7914 (patch) | |
tree | bbe51cdffa712d6ba0baf7154e9ea20f460a08cf /demuxer | |
parent | 85310137d42764482cd5a19c71a2f7f7d17c5876 (diff) |
Don't report keyframe info for fragmented mp4 files
The information is inaccurate and results in seeking breaking if the player is too strict about its usage.
Fixes #74
Diffstat (limited to 'demuxer')
-rw-r--r-- | demuxer/Demuxers/LAVFDemuxer.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp index ec7b8ed4..e1c51456 100644 --- a/demuxer/Demuxers/LAVFDemuxer.cpp +++ b/demuxer/Demuxers/LAVFDemuxer.cpp @@ -37,6 +37,7 @@ typedef struct CodecMime{ #include "libavformat/mpegts.h" #include "libavformat/matroska.h" #include "libavutil/avstring.h" +#include "libavformat/isom.h" AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base, int64_t start, int64_t end, const char *title); } @@ -1608,6 +1609,13 @@ STDMETHODIMP CLAVFDemuxer::GetKeyFrameCount(UINT& nKFs) return E_FAIL; } + // No reliable info for fragmented mp4 files + if (m_bMP4) { + MOVContext *mov = (MOVContext *)m_avFormat->priv_data; + if (mov->fragment_index_count) + return S_FALSE; + } + nKFs = 0; AVStream *stream = m_avFormat->streams[m_dActiveStreams[video]]; @@ -1629,6 +1637,13 @@ STDMETHODIMP CLAVFDemuxer::GetKeyFrames(const GUID* pFormat, REFERENCE_TIME* pKF return E_FAIL; } + // No reliable info for fragmented mp4 files + if (m_bMP4) { + MOVContext *mov = (MOVContext *)m_avFormat->priv_data; + if (mov->fragment_index_count) + return S_FALSE; + } + if(*pFormat != TIME_FORMAT_MEDIA_TIME) return E_INVALIDARG; UINT nKFsMax = nKFs; |