summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp20
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h7
2 files changed, 26 insertions, 1 deletions
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp b/src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp
index 1fb78f912..589585b9c 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp
+++ b/src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp
@@ -50,6 +50,8 @@ QWindowsCameraReader::QWindowsCameraReader(QObject *parent)
: QObject(parent),
m_finalizeSemaphore(1)
{
+ m_durationTimer.setInterval(100);
+ connect(&m_durationTimer, SIGNAL(timeout()), this, SLOT(updateDuration()));
}
QWindowsCameraReader::~QWindowsCameraReader()
@@ -250,6 +252,10 @@ bool QWindowsCameraReader::startRecording(const QString &fileName, const GUID &c
hr = m_sinkWriter->BeginWriting();
if (SUCCEEDED(hr)) {
+ m_lastDuration = -1;
+ m_currentDuration = 0;
+ updateDuration();
+ m_durationTimer.start();
m_recording = true;
m_firstFrame = true;
m_paused = false;
@@ -288,6 +294,10 @@ void QWindowsCameraReader::stopRecording()
m_recording = false;
m_paused = false;
m_pauseChanging = false;
+
+ m_durationTimer.stop();
+ m_lastDuration = -1;
+ m_currentDuration = -1;
}
bool QWindowsCameraReader::pauseRecording()
@@ -361,6 +371,14 @@ qreal QWindowsCameraReader::frameRate() const
return m_frameRate;
}
+void QWindowsCameraReader::updateDuration()
+{
+ if (m_currentDuration >= 0 && m_lastDuration != m_currentDuration) {
+ m_lastDuration = m_currentDuration;
+ emit durationChanged(m_currentDuration);
+ }
+}
+
//from IMFSourceReaderCallback
STDMETHODIMP QWindowsCameraReader::OnReadSample(HRESULT hrStatus, DWORD dwStreamIndex,
DWORD dwStreamFlags, LONGLONG llTimestamp,
@@ -402,7 +420,7 @@ STDMETHODIMP QWindowsCameraReader::OnReadSample(HRESULT hrStatus, DWORD dwStream
if (m_sinkWriter && !m_paused) {
pSample->SetSampleTime(llTimestamp - m_timeOffset);
m_sinkWriter->WriteSample(m_videoStreamIndex, pSample);
- emit durationChanged((llTimestamp - m_timeOffset)/10000);
+ m_currentDuration = (llTimestamp - m_timeOffset) / 10000;
}
}
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h b/src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h
index 5bc43c788..f6cf5a44f 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h
+++ b/src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h
@@ -58,6 +58,7 @@
#include <QtCore/qobject.h>
#include <QtCore/qmutex.h>
#include <QtCore/qsemaphore.h>
+#include <QtCore/qtimer.h>
#include <qvideoframe.h>
QT_BEGIN_NAMESPACE
@@ -112,6 +113,9 @@ Q_SIGNALS:
void recordingStopped();
void durationChanged(qint64 duration);
+private slots:
+ void updateDuration();
+
private:
void stopStreaming();
@@ -137,6 +141,9 @@ private:
QVideoFrameFormat::PixelFormat m_pixelFormat = QVideoFrameFormat::Format_Invalid;
LONGLONG m_timeOffset = 0;
LONGLONG m_pauseTime = 0;
+ QTimer m_durationTimer;
+ qint64 m_currentDuration = -1;
+ qint64 m_lastDuration = -1;
};
QT_END_NAMESPACE