summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2015-10-31 16:31:47 +0100
committerYoann Lopes <yoann.lopes@theqtcompany.com>2015-11-04 15:04:14 +0000
commit4c189b18c3c976775658c59ae576c717634fd3f2 (patch)
treee9a034d4828ba469dabe9e828578780ef8edf29f /src
parent1ed707deeaf91b1b15e3d3175bc5d9f44b585710 (diff)
DirectShow: set timestamp on media player frames.
Change-Id: Ie3d395c7ac4a9c1f52c3dedfd5bc3993744aa503 Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 2f52e33de..51151b16c 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -606,10 +606,24 @@ void VideoSurfaceFilter::sampleReady()
IMediaSample *sample = m_sampleScheduler.takeSample(&eos);
if (sample) {
- m_surface->present(QVideoFrame(
- new MediaSampleVideoBuffer(sample, m_bytesPerLine),
- m_surfaceFormat.frameSize(),
- m_surfaceFormat.pixelFormat()));
+ QVideoFrame frame(new MediaSampleVideoBuffer(sample, m_bytesPerLine),
+ m_surfaceFormat.frameSize(),
+ m_surfaceFormat.pixelFormat());
+
+ if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) {
+ LONGLONG position = 0;
+ seeking->GetCurrentPosition(&position);
+ seeking->Release();
+
+ frame.setStartTime(position * 0.1);
+
+ REFERENCE_TIME startTime = -1;
+ REFERENCE_TIME endTime = -1;
+ if (sample->GetTime(&startTime, &endTime) == S_OK)
+ frame.setEndTime(frame.startTime() + (endTime - startTime) * 0.1);
+ }
+
+ m_surface->present(frame);
sample->Release();