diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-10-31 16:31:47 +0100 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-11-04 15:04:14 +0000 |
commit | 4c189b18c3c976775658c59ae576c717634fd3f2 (patch) | |
tree | e9a034d4828ba469dabe9e828578780ef8edf29f /src | |
parent | 1ed707deeaf91b1b15e3d3175bc5d9f44b585710 (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.cpp | 22 |
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(); |