// 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 #include "qandroidmediaencoder_p.h" #include "qandroidmultimediautils_p.h" #include "qandroidcapturesession_p.h" #include "qandroidmediacapturesession_p.h" QT_BEGIN_NAMESPACE QAndroidMediaEncoder::QAndroidMediaEncoder(QMediaRecorder *parent) : QPlatformMediaRecorder(parent) { } bool QAndroidMediaEncoder::isLocationWritable(const QUrl &location) const { return location.isValid() && (location.isLocalFile() || location.isRelative()); } QMediaRecorder::RecorderState QAndroidMediaEncoder::state() const { return m_session ? m_session->state() : QMediaRecorder::StoppedState; } qint64 QAndroidMediaEncoder::duration() const { return m_session ? m_session->duration() : 0; } void QAndroidMediaEncoder::record(QMediaEncoderSettings &settings) { if (m_session) m_session->start(settings, outputLocation()); } void QAndroidMediaEncoder::stop() { if (m_session) m_session->stop(); } void QAndroidMediaEncoder::setOutputLocation(const QUrl &location) { if (location.isLocalFile()) { qt_androidRequestWriteStoragePermission(); } QPlatformMediaRecorder::setOutputLocation(location); } void QAndroidMediaEncoder::setCaptureSession(QPlatformMediaCaptureSession *session) { QAndroidMediaCaptureSession *captureSession = static_cast(session); if (m_service == captureSession) return; if (m_service) stop(); if (m_session) m_session->setMediaEncoder(nullptr); m_service = captureSession; if (!m_service) return; m_session = m_service->captureSession(); Q_ASSERT(m_session); m_session->setMediaEncoder(this); } QT_END_NAMESPACE