diff options
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/qffmpegthread.cpp')
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegthread.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegthread.cpp b/src/plugins/multimedia/ffmpeg/qffmpegthread.cpp new file mode 100644 index 000000000..fb14ced54 --- /dev/null +++ b/src/plugins/multimedia/ffmpeg/qffmpegthread.cpp @@ -0,0 +1,53 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qffmpegthread_p.h" + + +QT_BEGIN_NAMESPACE + +using namespace QFFmpeg; + +void ConsumerThread::stopAndDelete() +{ + { + QMutexLocker locker(&m_loopDataMutex); + m_exit = true; + } + dataReady(); + wait(); + delete this; +} + +void ConsumerThread::dataReady() +{ + m_condition.wakeAll(); +} + +void ConsumerThread::run() +{ + init(); + + while (true) { + + { + QMutexLocker locker(&m_loopDataMutex); + while (!hasData() && !m_exit) + m_condition.wait(&m_loopDataMutex); + + if (m_exit) + break; + } + + processOne(); + } + + cleanup(); +} + +QMutexLocker<QMutex> ConsumerThread::lockLoopData() const +{ + return QMutexLocker(&m_loopDataMutex); +} + +QT_END_NAMESPACE |