diff options
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h')
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h | 100 |
1 files changed, 56 insertions, 44 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h b/src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h index 353cab3e7..25340dad5 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h +++ b/src/plugins/multimedia/ffmpeg/qffmpegmediacapturesession_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 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 #ifndef QFFMPEGMEDIACAPTURESESSION_H #define QFFMPEGMEDIACAPTURESESSION_H @@ -53,24 +17,43 @@ #include <private/qplatformmediacapture_p.h> #include <private/qplatformmediaintegration_p.h> +#include "qpointer.h" +#include "qiodevice.h" QT_BEGIN_NAMESPACE class QFFmpegMediaRecorder; class QFFmpegImageCapture; class QVideoFrame; +class QAudioSink; +class QFFmpegAudioInput; +class QAudioBuffer; +class QPlatformVideoSource; +class QPlatformAudioBufferInput; +class QPlatformAudioBufferInputBase; class QFFmpegMediaCaptureSession : public QPlatformMediaCaptureSession { Q_OBJECT public: + using VideoSources = std::vector<QPointer<QPlatformVideoSource>>; + QFFmpegMediaCaptureSession(); - virtual ~QFFmpegMediaCaptureSession(); + ~QFFmpegMediaCaptureSession() override; QPlatformCamera *camera() override; void setCamera(QPlatformCamera *camera) override; + QPlatformSurfaceCapture *screenCapture() override; + void setScreenCapture(QPlatformSurfaceCapture *) override; + + QPlatformSurfaceCapture *windowCapture() override; + void setWindowCapture(QPlatformSurfaceCapture *) override; + + QPlatformVideoFrameInput *videoFrameInput() override; + void setVideoFrameInput(QPlatformVideoFrameInput *) override; + QPlatformImageCapture *imageCapture() override; void setImageCapture(QPlatformImageCapture *imageCapture) override; @@ -78,21 +61,50 @@ public: void setMediaRecorder(QPlatformMediaRecorder *recorder) override; void setAudioInput(QPlatformAudioInput *input) override; - QPlatformAudioInput *audioInput() { return m_audioInput; } + QPlatformAudioInput *audioInput() const; + + void setAudioBufferInput(QPlatformAudioBufferInput *input) override; void setVideoPreview(QVideoSink *sink) override; void setAudioOutput(QPlatformAudioOutput *output) override; -public Q_SLOTS: - void newVideoFrame(const QVideoFrame &frame); + QPlatformVideoSource *primaryActiveVideoSource(); + + // it might be moved to the base class, but it needs QPlatformAudioInput + // to be QPlatformAudioBufferInputBase, which might not make sense + std::vector<QPlatformAudioBufferInputBase *> activeAudioInputs() const; + +private Q_SLOTS: + void updateAudioSink(); + void updateVolume(); + void updateVideoFrameConnection(); + void updatePrimaryActiveVideoSource(); + +Q_SIGNALS: + void primaryActiveVideoSourceChanged(); private: - QPlatformCamera *m_camera = nullptr; - QPlatformAudioInput *m_audioInput = nullptr; + template<typename VideoSource> + bool setVideoSource(QPointer<VideoSource> &source, VideoSource *newSource); + + QPointer<QPlatformCamera> m_camera; + QPointer<QPlatformSurfaceCapture> m_screenCapture; + QPointer<QPlatformSurfaceCapture> m_windowCapture; + QPointer<QPlatformVideoFrameInput> m_videoFrameInput; + QPointer<QPlatformVideoSource> m_primaryActiveVideoSource; + + QPointer<QFFmpegAudioInput> m_audioInput; + QPointer<QPlatformAudioBufferInput> m_audioBufferInput; + QFFmpegImageCapture *m_imageCapture = nullptr; QFFmpegMediaRecorder *m_mediaRecorder = nullptr; QPlatformAudioOutput *m_audioOutput = nullptr; QVideoSink *m_videoSink = nullptr; + std::unique_ptr<QAudioSink> m_audioSink; + QPointer<QIODevice> m_audioIODevice; + qsizetype m_audioBufferSize = 0; + + QMetaObject::Connection m_videoFrameConnection; }; QT_END_NAMESPACE |