diff options
-rw-r--r-- | src/multimedia/platform/windows/mediacapture/qwindowscamerareader.cpp | 20 | ||||
-rw-r--r-- | src/multimedia/platform/windows/mediacapture/qwindowscamerareader_p.h | 7 |
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 |