DirectShow: set timestamp on media player frames.
Change-Id: Ie3d395c7ac4a9c1f52c3dedfd5bc3993744aa503 Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
@@ -606,10 +606,24 @@ void VideoSurfaceFilter::sampleReady()
|
|||||||
IMediaSample *sample = m_sampleScheduler.takeSample(&eos);
|
IMediaSample *sample = m_sampleScheduler.takeSample(&eos);
|
||||||
|
|
||||||
if (sample) {
|
if (sample) {
|
||||||
m_surface->present(QVideoFrame(
|
QVideoFrame frame(new MediaSampleVideoBuffer(sample, m_bytesPerLine),
|
||||||
new MediaSampleVideoBuffer(sample, m_bytesPerLine),
|
|
||||||
m_surfaceFormat.frameSize(),
|
m_surfaceFormat.frameSize(),
|
||||||
m_surfaceFormat.pixelFormat()));
|
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();
|
sample->Release();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user