Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2013-01-05 17:16:11 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2013-01-05 17:16:11 +0400
commit05a2fc42d10600352151af02139034def56e9edf (patch)
tree0961097313555d40d05d8c3997d2ffe08cd04259
parentfd744ff521a74c583555841ecb69134616267b29 (diff)
Only use index entries marked as keyframes for IKeyFrameInfo
-rw-r--r--demuxer/Demuxers/LAVFDemuxer.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp
index 66010d87..f7c8fb80 100644
--- a/demuxer/Demuxers/LAVFDemuxer.cpp
+++ b/demuxer/Demuxers/LAVFDemuxer.cpp
@@ -927,9 +927,14 @@ STDMETHODIMP CLAVFDemuxer::GetKeyFrameCount(UINT& nKFs)
return E_FAIL;
}
+ nKFs = 0;
+
AVStream *stream = m_avFormat->streams[m_dActiveStreams[video]];
- nKFs = stream->nb_index_entries;
- return (stream->nb_index_entries == stream->nb_frames) ? S_FALSE : S_OK;
+ for (int i = 0; i < stream->nb_index_entries; i++) {
+ if (stream->index_entries[i].flags & AVINDEX_KEYFRAME)
+ nKFs++;
+ }
+ return (nKFs == stream->nb_frames) ? S_FALSE : S_OK;
}
STDMETHODIMP CLAVFDemuxer::GetKeyFrames(const GUID* pFormat, REFERENCE_TIME* pKFs, UINT& nKFs)
@@ -945,10 +950,15 @@ STDMETHODIMP CLAVFDemuxer::GetKeyFrames(const GUID* pFormat, REFERENCE_TIME* pKF
if(*pFormat != TIME_FORMAT_MEDIA_TIME) return E_INVALIDARG;
+ UINT nKFsMax = nKFs;
+ nKFs = 0;
+
AVStream *stream = m_avFormat->streams[m_dActiveStreams[video]];
- nKFs = stream->nb_index_entries;
- for(unsigned int i = 0; i < nKFs; ++i) {
- pKFs[i] = ConvertTimestampToRT(stream->index_entries[i].timestamp, stream->time_base.num, stream->time_base.den);
+ for(unsigned int i = 0; i < stream->nb_index_entries && nKFs < nKFsMax; i++) {
+ if (stream->index_entries[i].flags & AVINDEX_KEYFRAME) {
+ pKFs[nKFs] = ConvertTimestampToRT(stream->index_entries[i].timestamp, stream->time_base.num, stream->time_base.den);
+ nKFs++;
+ }
}
return S_OK;
}