summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java25
-rw-r--r--src/plugins/android/src/common/qandroidvideooutput.cpp2
-rw-r--r--src/plugins/android/src/mediaplayer/mediaplayer.pri4
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.cpp77
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.h63
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.cpp87
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.h63
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp10
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h2
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaservice.cpp18
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaservice.h4
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp89
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediaplayer.h3
-rw-r--r--src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp2
-rw-r--r--src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h2
-rw-r--r--src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcameracontrol.h16
-rw-r--r--src/plugins/avfoundation/camera/avfcameradevicecontrol.h14
-rw-r--r--src/plugins/avfoundation/camera/avfcameradevicecontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcameraflashcontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerainfocontrol.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerametadatacontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfcamerarenderercontrol.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm30
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.h2
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.mm18
-rw-r--r--src/plugins/avfoundation/camera/avfcameraserviceplugin.h14
-rw-r--r--src/plugins/avfoundation/camera/avfcameraserviceplugin.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.h2
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.mm14
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.h6
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.mm6
-rw-r--r--src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm8
-rw-r--r--src/plugins/avfoundation/camera/avfimagecapturecontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfmediaassetwriter.h29
-rw-r--r--src/plugins/avfoundation/camera/avfmediaassetwriter.mm31
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.h24
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h4
-rw-r--r--src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h2
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfdisplaylink.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm16
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h46
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h8
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h6
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h10
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm74
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm12
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm30
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h8
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm26
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidget.h6
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidget.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h30
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h40
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm6
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp2
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp6
-rw-r--r--src/plugins/directshow/directshow.pro5
-rw-r--r--src/plugins/directshow/directshow_camera.json4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp5
-rw-r--r--src/plugins/directshow/dsserviceplugin.h6
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.cpp139
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.h8
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp94
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.h3
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp1
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinmetadata.cpp41
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp28
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp8
-rw-r--r--src/plugins/plugins.pro8
-rw-r--r--src/plugins/pulseaudio/qaudiooutput_pulse.cpp32
-rw-r--r--src/plugins/pulseaudio/qaudiooutput_pulse.h6
-rw-r--r--src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp6
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp6
-rw-r--r--src/plugins/wmf/player/mfplayersession.h3
-rw-r--r--src/plugins/wmf/sourceresolver.cpp10
-rw-r--r--src/plugins/wmf/sourceresolver.h2
-rw-r--r--src/plugins/wmf/wmf.pro5
-rw-r--r--src/plugins/wmf/wmf_audiodecode.json4
-rw-r--r--src/plugins/wmf/wmfserviceplugin.cpp9
-rw-r--r--src/plugins/wmf/wmfserviceplugin.h5
91 files changed, 976 insertions, 563 deletions
diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
index 647cc7fe0..6569a7b8d 100644
--- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
+++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
@@ -46,6 +46,7 @@ import java.io.FileInputStream;
// API is level is < 9 unless marked otherwise.
import android.content.Context;
import android.media.MediaPlayer;
+import android.media.AudioAttributes;
import android.net.Uri;
import android.util.Log;
import java.io.FileDescriptor;
@@ -65,6 +66,7 @@ public class QtAndroidMediaPlayer
native public void onStateChangedNative(int state, long id);
private MediaPlayer mMediaPlayer = null;
+ private AudioAttributes mAudioAttributes = null;
private Uri mUri = null;
private final long mID;
private final Context mContext;
@@ -235,6 +237,7 @@ public class QtAndroidMediaPlayer
setState(State.Idle);
// Make sure the new media player has the volume that was set on the QMediaPlayer
setVolumeHelper(mMuted ? 0 : mVolume);
+ setAudioAttributes(mMediaPlayer, mAudioAttributes);
}
}
@@ -547,4 +550,26 @@ public class QtAndroidMediaPlayer
setState(State.Uninitialized);
}
+
+ public void setAudioAttributes(int type, int usage)
+ {
+ mAudioAttributes = new AudioAttributes.Builder()
+ .setUsage(usage)
+ .setContentType(type)
+ .build();
+
+ setAudioAttributes(mMediaPlayer, mAudioAttributes);
+ }
+
+ static private void setAudioAttributes(MediaPlayer player, AudioAttributes attr)
+ {
+ if (player == null || attr == null)
+ return;
+
+ try {
+ player.setAudioAttributes(attr);
+ } catch (final IllegalArgumentException e) {
+ Log.d(TAG, "" + e.getMessage());
+ }
+ }
}
diff --git a/src/plugins/android/src/common/qandroidvideooutput.cpp b/src/plugins/android/src/common/qandroidvideooutput.cpp
index a8351aadb..083ceff24 100644
--- a/src/plugins/android/src/common/qandroidvideooutput.cpp
+++ b/src/plugins/android/src/common/qandroidvideooutput.cpp
@@ -320,7 +320,7 @@ void QAndroidTextureVideoOutput::onFrameAvailable()
return;
QAbstractVideoBuffer *buffer = new AndroidTextureVideoBuffer(this, m_nativeSize);
- QVideoFrame frame(buffer, m_nativeSize, QVideoFrame::Format_BGR32);
+ QVideoFrame frame(buffer, m_nativeSize, QVideoFrame::Format_ABGR32);
if (m_surface->isActive() && (m_surface->surfaceFormat().pixelFormat() != frame.pixelFormat()
|| m_surface->surfaceFormat().frameSize() != frame.size())) {
diff --git a/src/plugins/android/src/mediaplayer/mediaplayer.pri b/src/plugins/android/src/mediaplayer/mediaplayer.pri
index 9f758a993..3a9cef3a1 100644
--- a/src/plugins/android/src/mediaplayer/mediaplayer.pri
+++ b/src/plugins/android/src/mediaplayer/mediaplayer.pri
@@ -4,10 +4,14 @@ HEADERS += \
$$PWD/qandroidmediaplayercontrol.h \
$$PWD/qandroidmediaservice.h \
$$PWD/qandroidmetadatareadercontrol.h \
+ $$PWD/qandroidaudiorolecontrol.h \
+ $$PWD/qandroidcustomaudiorolecontrol.h \
$$PWD/qandroidmediaplayervideorenderercontrol.h
SOURCES += \
$$PWD/qandroidmediaplayercontrol.cpp \
$$PWD/qandroidmediaservice.cpp \
$$PWD/qandroidmetadatareadercontrol.cpp \
+ $$PWD/qandroidaudiorolecontrol.cpp \
+ $$PWD/qandroidcustomaudiorolecontrol.cpp \
$$PWD/qandroidmediaplayervideorenderercontrol.cpp
diff --git a/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.cpp
new file mode 100644
index 000000000..5879b0cb9
--- /dev/null
+++ b/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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$
+**
+****************************************************************************/
+
+#include "qandroidaudiorolecontrol.h"
+
+QT_BEGIN_NAMESPACE
+
+QAndroidAudioRoleControl::QAndroidAudioRoleControl(QObject *parent)
+ : QAudioRoleControl(parent)
+{
+}
+
+QAudio::Role QAndroidAudioRoleControl::audioRole() const
+{
+ return m_role;
+}
+
+void QAndroidAudioRoleControl::setAudioRole(QAudio::Role role)
+{
+ if (m_role == role)
+ return;
+
+ m_role = role;
+ emit audioRoleChanged(m_role);
+}
+
+QList<QAudio::Role> QAndroidAudioRoleControl::supportedAudioRoles() const
+{
+ return QList<QAudio::Role>()
+ << QAudio::VoiceCommunicationRole
+ << QAudio::MusicRole
+ << QAudio::VideoRole
+ << QAudio::SonificationRole
+ << QAudio::AlarmRole
+ << QAudio::NotificationRole
+ << QAudio::RingtoneRole
+ << QAudio::AccessibilityRole
+ << QAudio::GameRole;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.h b/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.h
new file mode 100644
index 000000000..89219e026
--- /dev/null
+++ b/src/plugins/android/src/mediaplayer/qandroidaudiorolecontrol.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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$
+**
+****************************************************************************/
+
+#ifndef QANDROIDAUDIOROLECONTROL_H
+#define QANDROIDAUDIOROLECONTROL_H
+
+#include <qaudiorolecontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAndroidAudioRoleControl : public QAudioRoleControl
+{
+ Q_OBJECT
+public:
+ explicit QAndroidAudioRoleControl(QObject *parent = nullptr);
+
+ QAudio::Role audioRole() const override;
+ void setAudioRole(QAudio::Role role) override;
+ QList<QAudio::Role> supportedAudioRoles() const override;
+
+private:
+ QAudio::Role m_role = QAudio::UnknownRole;
+};
+
+QT_END_NAMESPACE
+
+#endif // QANDROIDAUDIOROLECONTROL_H
diff --git a/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.cpp
new file mode 100644
index 000000000..cb7b5d0af
--- /dev/null
+++ b/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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$
+**
+****************************************************************************/
+
+#include "qandroidcustomaudiorolecontrol.h"
+
+QT_BEGIN_NAMESPACE
+
+QAndroidCustomAudioRoleControl::QAndroidCustomAudioRoleControl(QObject *parent)
+ : QCustomAudioRoleControl(parent)
+{
+}
+
+QString QAndroidCustomAudioRoleControl::customAudioRole() const
+{
+ return m_role;
+}
+
+void QAndroidCustomAudioRoleControl::setCustomAudioRole(const QString &role)
+{
+ if (m_role == role)
+ return;
+
+ m_role = role;
+ emit customAudioRoleChanged(m_role);
+}
+
+QStringList QAndroidCustomAudioRoleControl::supportedCustomAudioRoles() const
+{
+ return QStringList()
+ << "CONTENT_TYPE_MOVIE"
+ << "CONTENT_TYPE_MUSIC"
+ << "CONTENT_TYPE_SONIFICATION"
+ << "CONTENT_TYPE_SPEECH"
+ << "USAGE_ALARM"
+ << "USAGE_ASSISTANCE_ACCESSIBILITY"
+ << "USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"
+ << "USAGE_ASSISTANCE_SONIFICATION"
+ << "USAGE_ASSISTANT"
+ << "USAGE_GAME"
+ << "USAGE_MEDIA"
+ << "USAGE_NOTIFICATION"
+ << "USAGE_NOTIFICATION_COMMUNICATION_DELAYED"
+ << "USAGE_NOTIFICATION_COMMUNICATION_INSTANT"
+ << "USAGE_NOTIFICATION_COMMUNICATION_REQUEST"
+ << "USAGE_NOTIFICATION_EVENT"
+ << "USAGE_NOTIFICATION_RINGTONE"
+ << "USAGE_VOICE_COMMUNICATION"
+ << "USAGE_VOICE_COMMUNICATION_SIGNALLING";
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.h b/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.h
new file mode 100644
index 000000000..4604ebe67
--- /dev/null
+++ b/src/plugins/android/src/mediaplayer/qandroidcustomaudiorolecontrol.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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$
+**
+****************************************************************************/
+
+#ifndef QANDROIDCUSTOMAUDIOROLECONTROL_H
+#define QANDROIDCUSTOMAUDIOROLECONTROL_H
+
+#include <qcustomaudiorolecontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAndroidCustomAudioRoleControl : public QCustomAudioRoleControl
+{
+ Q_OBJECT
+public:
+ explicit QAndroidCustomAudioRoleControl(QObject *parent = nullptr);
+
+ QString customAudioRole() const override;
+ void setCustomAudioRole(const QString &role) override;
+ QStringList supportedCustomAudioRoles() const override;
+
+private:
+ QString m_role;
+};
+
+QT_END_NAMESPACE
+
+#endif // QANDROIDCUSTOMAUDIOROLECONTROL_H
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
index df1463a87..4bfcce5bc 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
+++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
@@ -250,6 +250,16 @@ void QAndroidMediaPlayerControl::setMuted(bool muted)
Q_EMIT mutedChanged(muted);
}
+void QAndroidMediaPlayerControl::setAudioRole(QAudio::Role role)
+{
+ mMediaPlayer->setAudioRole(role);
+}
+
+void QAndroidMediaPlayerControl::setCustomAudioRole(const QString &role)
+{
+ mMediaPlayer->setCustomAudioRole(role);
+}
+
int QAndroidMediaPlayerControl::bufferStatus() const
{
return mBufferFilled ? 100 : 0;
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h
index 119add7f8..35f56145f 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h
+++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h
@@ -85,6 +85,8 @@ public Q_SLOTS:
void stop() override;
void setVolume(int volume) override;
void setMuted(bool muted) override;
+ void setAudioRole(QAudio::Role role);
+ void setCustomAudioRole(const QString &role);
private Q_SLOTS:
void onVideoOutputReady(bool ready);
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaservice.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaservice.cpp
index 2688f3550..c057f530a 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmediaservice.cpp
+++ b/src/plugins/android/src/mediaplayer/qandroidmediaservice.cpp
@@ -41,16 +41,26 @@
#include "qandroidmediaplayercontrol.h"
#include "qandroidmetadatareadercontrol.h"
+#include "qandroidaudiorolecontrol.h"
+#include "qandroidcustomaudiorolecontrol.h"
#include "qandroidmediaplayervideorenderercontrol.h"
QT_BEGIN_NAMESPACE
QAndroidMediaService::QAndroidMediaService(QObject *parent)
: QMediaService(parent)
+ , mAudioRoleControl(nullptr)
+ , mCustomAudioRoleControl(nullptr)
, mVideoRendererControl(0)
{
mMediaControl = new QAndroidMediaPlayerControl;
mMetadataControl = new QAndroidMetaDataReaderControl;
+ mAudioRoleControl = new QAndroidAudioRoleControl;
+ mCustomAudioRoleControl = new QAndroidCustomAudioRoleControl;
+ connect(mAudioRoleControl, &QAndroidAudioRoleControl::audioRoleChanged,
+ mMediaControl, &QAndroidMediaPlayerControl::setAudioRole);
+ connect(mCustomAudioRoleControl, &QAndroidCustomAudioRoleControl::customAudioRoleChanged,
+ mMediaControl, &QAndroidMediaPlayerControl::setCustomAudioRole);
connect(mMediaControl, SIGNAL(mediaChanged(QMediaContent)),
mMetadataControl, SLOT(onMediaChanged(QMediaContent)));
connect(mMediaControl, SIGNAL(metaDataUpdated()),
@@ -60,6 +70,8 @@ QAndroidMediaService::QAndroidMediaService(QObject *parent)
QAndroidMediaService::~QAndroidMediaService()
{
delete mVideoRendererControl;
+ delete mCustomAudioRoleControl;
+ delete mAudioRoleControl;
delete mMetadataControl;
delete mMediaControl;
}
@@ -72,6 +84,12 @@ QMediaControl *QAndroidMediaService::requestControl(const char *name)
if (qstrcmp(name, QMetaDataReaderControl_iid) == 0)
return mMetadataControl;
+ if (qstrcmp(name, QAudioRoleControl_iid) == 0)
+ return mAudioRoleControl;
+
+ if (qstrcmp(name, QCustomAudioRoleControl_iid) == 0)
+ return mCustomAudioRoleControl;
+
if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
if (!mVideoRendererControl) {
mVideoRendererControl = new QAndroidMediaPlayerVideoRendererControl(mMediaControl);
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaservice.h b/src/plugins/android/src/mediaplayer/qandroidmediaservice.h
index f78d05ddd..788c11098 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmediaservice.h
+++ b/src/plugins/android/src/mediaplayer/qandroidmediaservice.h
@@ -46,6 +46,8 @@ QT_BEGIN_NAMESPACE
class QAndroidMediaPlayerControl;
class QAndroidMetaDataReaderControl;
+class QAndroidAudioRoleControl;
+class QAndroidCustomAudioRoleControl;
class QAndroidMediaPlayerVideoRendererControl;
class QAndroidMediaService : public QMediaService
@@ -61,6 +63,8 @@ public:
private:
QAndroidMediaPlayerControl *mMediaControl;
QAndroidMetaDataReaderControl *mMetadataControl;
+ QAndroidAudioRoleControl *mAudioRoleControl;
+ QAndroidCustomAudioRoleControl *mCustomAudioRoleControl;
QAndroidMediaPlayerVideoRendererControl *mVideoRendererControl;
};
diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
index b81f98cbd..79685e16f 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
@@ -223,6 +223,95 @@ void AndroidMediaPlayer::setDisplay(AndroidSurfaceTexture *surfaceTexture)
surfaceTexture ? surfaceTexture->surfaceHolder() : 0);
}
+void AndroidMediaPlayer::setAudioRole(QAudio::Role role)
+{
+ QString str;
+ switch (role) {
+ case QAudio::MusicRole:
+ str = QLatin1String("CONTENT_TYPE_MUSIC");
+ break;
+ case QAudio::VideoRole:
+ str = QLatin1String("CONTENT_TYPE_MOVIE");
+ break;
+ case QAudio::VoiceCommunicationRole:
+ str = QLatin1String("USAGE_VOICE_COMMUNICATION");
+ break;
+ case QAudio::AlarmRole:
+ str = QLatin1String("USAGE_ALARM");
+ break;
+ case QAudio::NotificationRole:
+ str = QLatin1String("USAGE_NOTIFICATION");
+ break;
+ case QAudio::RingtoneRole:
+ str = QLatin1String("USAGE_NOTIFICATION_RINGTONE");
+ break;
+ case QAudio::AccessibilityRole:
+ str = QLatin1String("USAGE_ASSISTANCE_ACCESSIBILITY");
+ break;
+ case QAudio::SonificationRole:
+ str = QLatin1String("CONTENT_TYPE_SONIFICATION");
+ break;
+ case QAudio::GameRole:
+ str = QLatin1String("USAGE_GAME");
+ break;
+ default:
+ break;
+ }
+
+ setCustomAudioRole(str);
+}
+
+void AndroidMediaPlayer::setCustomAudioRole(const QString &role)
+{
+ QStringList roles = role.split(",", QString::SkipEmptyParts);
+
+ int type = 0; // CONTENT_TYPE_UNKNOWN
+ int usage = 0; // USAGE_UNKNOWN
+ for (int i = 0; i < qMin(2, roles.size()); ++i) {
+ auto r = roles[i];
+ if (r == QLatin1String("CONTENT_TYPE_MOVIE"))
+ type = 3;
+ else if (r == QLatin1String("CONTENT_TYPE_MUSIC"))
+ type = 2;
+ else if (r == QLatin1String("CONTENT_TYPE_SONIFICATION"))
+ type = 4;
+ else if (r == QLatin1String("CONTENT_TYPE_SPEECH"))
+ type = 1;
+ else if (r == QLatin1String("USAGE_ALARM"))
+ usage = 4;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_ACCESSIBILITY"))
+ usage = 11;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"))
+ usage = 12;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_SONIFICATION"))
+ usage = 13;
+ else if (r == QLatin1String("USAGE_ASSISTANT"))
+ usage = 16;
+ else if (r == QLatin1String("USAGE_GAME"))
+ usage = 14;
+ else if (r == QLatin1String("USAGE_MEDIA"))
+ usage = 1;
+ else if (r == QLatin1String("USAGE_NOTIFICATION"))
+ usage = 5;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"))
+ usage = 9;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"))
+ usage = 8;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_REQUEST"))
+ usage = 7;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_EVENT"))
+ usage = 10;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_RINGTONE"))
+ usage = 6;
+ else if (r == QLatin1String("USAGE_VOICE_COMMUNICATION"))
+ usage = 2;
+ else if (r == QLatin1String("USAGE_VOICE_COMMUNICATION_SIGNALLING"))
+ usage = 3;
+ }
+
+ mMediaPlayer.callMethod<void>("setAudioAttributes", "(II)V", jint(type), jint(usage));
+}
+
static void onErrorNative(JNIEnv *env, jobject thiz, jint what, jint extra, jlong id)
{
Q_UNUSED(env);
diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
index a7284bb0c..14cbf49bc 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
+++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
@@ -42,6 +42,7 @@
#include <QObject>
#include <QtCore/private/qjni_p.h>
+#include <QAudio>
QT_BEGIN_NAMESPACE
@@ -116,6 +117,8 @@ public:
void setVolume(int volume);
bool setPlaybackRate(qreal rate);
void setDisplay(AndroidSurfaceTexture *surfaceTexture);
+ void setAudioRole(QAudio::Role role);
+ void setCustomAudioRole(const QString &role);
static bool initJNI(JNIEnv *env);
diff --git a/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp b/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
index e69c9c16e..d70c8100b 100644
--- a/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
+++ b/src/plugins/android/videonode/qandroidsgvideonodeplugin.cpp
@@ -48,7 +48,7 @@ QList<QVideoFrame::PixelFormat> QAndroidSGVideoNodeFactoryPlugin::supportedPixel
QList<QVideoFrame::PixelFormat> pixelFormats;
if (handleType == QAbstractVideoBuffer::GLTextureHandle)
- pixelFormats.append(QVideoFrame::Format_BGR32);
+ pixelFormats.append(QVideoFrame::Format_ABGR32);
return pixelFormats;
}
diff --git a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
index 4ba987e53..94aa6a8f0 100644
--- a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
@@ -56,7 +56,7 @@ public:
QStringList supportedAudioCodecs() const override;
QString codecDescription(const QString &codecName) const override;
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override;
+ QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = nullptr) const override;
QAudioEncoderSettings audioSettings() const override;
void setAudioSettings(const QAudioEncoderSettings &settings) override;
diff --git a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
index 80669d242..a902a71f9 100644
--- a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
+++ b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
@@ -54,16 +54,16 @@ class AVFAudioInputSelectorControl : public QAudioInputSelectorControl
{
Q_OBJECT
public:
- AVFAudioInputSelectorControl(AVFCameraService *service, QObject *parent = 0);
+ AVFAudioInputSelectorControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFAudioInputSelectorControl();
- QList<QString> availableInputs() const;
- QString inputDescription(const QString &name) const;
- QString defaultInput() const;
- QString activeInput() const;
+ QList<QString> availableInputs() const override;
+ QString inputDescription(const QString &name) const override;
+ QString defaultInput() const override;
+ QString activeInput() const override;
public Q_SLOTS:
- void setActiveInput(const QString &name);
+ void setActiveInput(const QString &name) override;
public:
//device changed since the last createCaptureDevice()
diff --git a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
index b6228290d..de29fd970 100644
--- a/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
+++ b/src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
@@ -102,7 +102,7 @@ void AVFAudioInputSelectorControl::setActiveInput(const QString &name)
AVCaptureDevice *AVFAudioInputSelectorControl::createCaptureDevice()
{
m_dirty = false;
- AVCaptureDevice *device = 0;
+ AVCaptureDevice *device = nullptr;
if (!m_activeInput.isEmpty()) {
device = [AVCaptureDevice deviceWithUniqueID:
diff --git a/src/plugins/avfoundation/camera/avfcameracontrol.h b/src/plugins/avfoundation/camera/avfcameracontrol.h
index 7489e6cb3..df371e864 100644
--- a/src/plugins/avfoundation/camera/avfcameracontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameracontrol.h
@@ -53,19 +53,19 @@ class AVFCameraControl : public QCameraControl
{
Q_OBJECT
public:
- AVFCameraControl(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraControl();
- QCamera::State state() const;
- void setState(QCamera::State state);
+ QCamera::State state() const override;
+ void setState(QCamera::State state) override;
- QCamera::Status status() const;
+ QCamera::Status status() const override;
- QCamera::CaptureModes captureMode() const;
- void setCaptureMode(QCamera::CaptureModes);
- bool isCaptureModeSupported(QCamera::CaptureModes mode) const;
+ QCamera::CaptureModes captureMode() const override;
+ void setCaptureMode(QCamera::CaptureModes) override;
+ bool isCaptureModeSupported(QCamera::CaptureModes mode) const override;
- bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const;
+ bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override;
private Q_SLOTS:
void updateStatus();
diff --git a/src/plugins/avfoundation/camera/avfcameradevicecontrol.h b/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
index ac84b1983..0a16c0408 100644
--- a/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameradevicecontrol.h
@@ -54,19 +54,19 @@ class AVFCameraDeviceControl : public QVideoDeviceSelectorControl
{
Q_OBJECT
public:
- AVFCameraDeviceControl(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraDeviceControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraDeviceControl();
- int deviceCount() const;
+ int deviceCount() const override;
- QString deviceName(int index) const;
- QString deviceDescription(int index) const;
+ QString deviceName(int index) const override;
+ QString deviceDescription(int index) const override;
- int defaultDevice() const;
- int selectedDevice() const;
+ int defaultDevice() const override;
+ int selectedDevice() const override;
public Q_SLOTS:
- void setSelectedDevice(int index);
+ void setSelectedDevice(int index) override;
public:
//device changed since the last createCaptureDevice()
diff --git a/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm b/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
index 87180859a..907373b61 100644
--- a/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameradevicecontrol.mm
@@ -105,7 +105,7 @@ void AVFCameraDeviceControl::setSelectedDevice(int index)
AVCaptureDevice *AVFCameraDeviceControl::createCaptureDevice()
{
m_dirty = false;
- AVCaptureDevice *device = 0;
+ AVCaptureDevice *device = nullptr;
QString deviceId = deviceName(m_selectedDevice);
if (!deviceId.isEmpty()) {
diff --git a/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm b/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
index 134c88e68..42303ce17 100644
--- a/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameraflashcontrol.mm
@@ -50,7 +50,7 @@
AVFCameraFlashControl::AVFCameraFlashControl(AVFCameraService *service)
: m_service(service)
- , m_session(0)
+ , m_session(nullptr)
, m_supportedModes(QCameraExposure::FlashOff)
, m_flashMode(QCameraExposure::FlashOff)
{
diff --git a/src/plugins/avfoundation/camera/avfcamerainfocontrol.h b/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
index 806a51cbd..c3aa11918 100644
--- a/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerainfocontrol.h
@@ -48,10 +48,10 @@ class AVFCameraInfoControl : public QCameraInfoControl
{
Q_OBJECT
public:
- explicit AVFCameraInfoControl(QObject *parent = 0);
+ explicit AVFCameraInfoControl(QObject *parent = nullptr);
- QCamera::Position cameraPosition(const QString &deviceName) const;
- int cameraOrientation(const QString &deviceName) const;
+ QCamera::Position cameraPosition(const QString &deviceName) const override;
+ int cameraOrientation(const QString &deviceName) const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h b/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
index 1b00043d0..cba29c394 100644
--- a/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerametadatacontrol.h
@@ -50,15 +50,15 @@ class AVFCameraMetaDataControl : public QMetaDataWriterControl
{
Q_OBJECT
public:
- AVFCameraMetaDataControl(AVFCameraService *service, QObject *parent=0);
+ AVFCameraMetaDataControl(AVFCameraService *service, QObject *parent = nullptr);
virtual ~AVFCameraMetaDataControl();
- bool isMetaDataAvailable() const;
- bool isWritable() const;
+ bool isMetaDataAvailable() const override;
+ bool isWritable() const override;
- QVariant metaData(const QString &key) const;
- void setMetaData(const QString &key, const QVariant &value);
- QStringList availableMetaData() const;
+ QVariant metaData(const QString &key) const override;
+ void setMetaData(const QString &key, const QVariant &value) override;
+ QStringList availableMetaData() const override;
private:
QMap<QString, QVariant> m_tags;
diff --git a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
index e0966a027..3ef3d07d4 100644
--- a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.h
@@ -58,11 +58,11 @@ class AVFCameraRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- AVFCameraRendererControl(QObject *parent = 0);
+ AVFCameraRendererControl(QObject *parent = nullptr);
~AVFCameraRendererControl();
- QAbstractVideoSurface *surface() const;
- void setSurface(QAbstractVideoSurface *surface);
+ QAbstractVideoSurface *surface() const override;
+ void setSurface(QAbstractVideoSurface *surface) override;
void configureAVCaptureSession(AVFCameraSession *cameraSession);
void syncHandleViewfinderFrame(const QVideoFrame &frame);
diff --git a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
index e4f234b7e..0359f5d0a 100644
--- a/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcamerarenderercontrol.mm
@@ -65,7 +65,7 @@ public:
: QAbstractPlanarVideoBuffer(renderer->supportsTextures()
&& CVPixelBufferGetPixelFormatType(buffer) == kCVPixelFormatType_32BGRA
? GLTextureHandle : NoHandle)
- , m_texture(0)
+ , m_texture(nullptr)
, m_renderer(renderer)
#endif
, m_buffer(buffer)
@@ -117,8 +117,8 @@ public:
}
if (data) {
- data[0] = (uchar *)CVPixelBufferGetBaseAddressOfPlane(m_buffer, 0);
- data[1] = (uchar *)CVPixelBufferGetBaseAddressOfPlane(m_buffer, 1);
+ data[0] = static_cast<uchar*>(CVPixelBufferGetBaseAddressOfPlane(m_buffer, 0));
+ data[1] = static_cast<uchar*>(CVPixelBufferGetBaseAddressOfPlane(m_buffer, 1));
}
m_mode = mode;
@@ -140,9 +140,9 @@ public:
*bytesPerLine = CVPixelBufferGetBytesPerRow(m_buffer);
m_mode = mode;
- return (uchar*)CVPixelBufferGetBaseAddress(m_buffer);
+ return static_cast<uchar*>(CVPixelBufferGetBaseAddress(m_buffer));
} else {
- return 0;
+ return nullptr;
}
}
@@ -163,9 +163,9 @@ public:
if (!m_renderer->m_textureCache) {
CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault,
- NULL,
+ nullptr,
[EAGLContext currentContext],
- NULL,
+ nullptr,
&m_renderer->m_textureCache);
if (err != kCVReturnSuccess)
@@ -178,7 +178,7 @@ public:
CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
m_renderer->m_textureCache,
m_buffer,
- NULL,
+ nullptr,
GL_TEXTURE_2D,
GL_RGBA,
CVPixelBufferGetWidth(m_buffer),
@@ -211,10 +211,6 @@ private:
@interface AVFCaptureFramesDelegate : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate>
-{
-@private
- AVFCameraRendererControl *m_renderer;
-}
- (AVFCaptureFramesDelegate *) initWithRenderer:(AVFCameraRendererControl*)renderer;
@@ -225,6 +221,10 @@ private:
@end
@implementation AVFCaptureFramesDelegate
+{
+@private
+ AVFCameraRendererControl *m_renderer;
+}
- (AVFCaptureFramesDelegate *) initWithRenderer:(AVFCameraRendererControl*)renderer
{
@@ -266,11 +266,11 @@ private:
AVFCameraRendererControl::AVFCameraRendererControl(QObject *parent)
: QVideoRendererControl(parent)
- , m_surface(0)
+ , m_surface(nullptr)
, m_supportsTextures(false)
, m_needsHorizontalMirroring(false)
#ifdef Q_OS_IOS
- , m_textureCache(0)
+ , m_textureCache(nullptr)
#endif
{
m_viewfinderFramesDelegate = [[AVFCaptureFramesDelegate alloc] initWithRenderer:this];
@@ -317,7 +317,7 @@ void AVFCameraRendererControl::configureAVCaptureSession(AVFCameraSession *camer
m_videoDataOutput = [[[AVCaptureVideoDataOutput alloc] init] autorelease];
// Configure video output
- m_delegateQueue = dispatch_queue_create("vf_queue", NULL);
+ m_delegateQueue = dispatch_queue_create("vf_queue", nullptr);
[m_videoDataOutput
setSampleBufferDelegate:m_viewfinderFramesDelegate
queue:m_delegateQueue];
diff --git a/src/plugins/avfoundation/camera/avfcameraservice.h b/src/plugins/avfoundation/camera/avfcameraservice.h
index 9ce637ee3..2969882b0 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.h
+++ b/src/plugins/avfoundation/camera/avfcameraservice.h
@@ -75,7 +75,7 @@ class AVFCameraService : public QMediaService
{
Q_OBJECT
public:
- AVFCameraService(QObject *parent = 0);
+ AVFCameraService(QObject *parent = nullptr);
~AVFCameraService();
QMediaControl* requestControl(const char *name);
diff --git a/src/plugins/avfoundation/camera/avfcameraservice.mm b/src/plugins/avfoundation/camera/avfcameraservice.mm
index 71ea31e5b..33b4b72aa 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.mm
+++ b/src/plugins/avfoundation/camera/avfcameraservice.mm
@@ -74,7 +74,7 @@ QT_USE_NAMESPACE
AVFCameraService::AVFCameraService(QObject *parent):
QMediaService(parent),
- m_videoOutput(0)
+ m_videoOutput(nullptr)
{
m_session = new AVFCameraSession(this);
m_cameraControl = new AVFCameraControl(this);
@@ -93,12 +93,12 @@ AVFCameraService::AVFCameraService(QObject *parent):
#endif
m_imageCaptureControl = new AVFImageCaptureControl(this);
m_cameraFocusControl = new AVFCameraFocusControl(this);
- m_cameraExposureControl = 0;
+ m_cameraExposureControl = nullptr;
#ifdef Q_OS_IOS
m_cameraExposureControl = new AVFCameraExposureControl(this);
#endif
- m_cameraZoomControl = 0;
+ m_cameraZoomControl = nullptr;
#ifdef Q_OS_IOS
m_cameraZoomControl = new AVFCameraZoomControl(this);
#endif
@@ -120,9 +120,9 @@ AVFCameraService::~AVFCameraService()
#endif
if (m_videoOutput) {
- m_session->setVideoOutput(0);
+ m_session->setVideoOutput(nullptr);
delete m_videoOutput;
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
//delete controls before session,
@@ -199,7 +199,7 @@ QMediaControl *AVFCameraService::requestControl(const char *name)
return m_mediaContainerControl;
if (qstrcmp(name,QMediaVideoProbeControl_iid) == 0) {
- AVFMediaVideoProbeControl *videoProbe = 0;
+ AVFMediaVideoProbeControl *videoProbe = nullptr;
videoProbe = new AVFMediaVideoProbeControl(this);
m_session->addProbe(videoProbe);
return videoProbe;
@@ -220,7 +220,7 @@ QMediaControl *AVFCameraService::requestControl(const char *name)
}
}
- return 0;
+ return nullptr;
}
void AVFCameraService::releaseControl(QMediaControl *control)
@@ -230,9 +230,9 @@ void AVFCameraService::releaseControl(QMediaControl *control)
m_session->removeProbe(videoProbe);
delete videoProbe;
} else if (m_videoOutput == control) {
- m_session->setVideoOutput(0);
+ m_session->setVideoOutput(nullptr);
delete m_videoOutput;
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
}
diff --git a/src/plugins/avfoundation/camera/avfcameraserviceplugin.h b/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
index aec9767a7..bd5f83249 100644
--- a/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
+++ b/src/plugins/avfoundation/camera/avfcameraserviceplugin.h
@@ -60,15 +60,15 @@ class AVFServicePlugin : public QMediaServiceProviderPlugin,
public:
AVFServicePlugin();
- QMediaService* create(QString const& key);
- void release(QMediaService *service);
+ QMediaService* create(QString const &key) override;
+ void release(QMediaService *service) override;
- QByteArray defaultDevice(const QByteArray &service) const;
- QList<QByteArray> devices(const QByteArray &service) const;
- QString deviceDescription(const QByteArray &service, const QByteArray &device);
+ QByteArray defaultDevice(const QByteArray &service) const override;
+ QList<QByteArray> devices(const QByteArray &service) const override;
+ QString deviceDescription(const QByteArray &service, const QByteArray &device) override;
- QCamera::Position cameraPosition(const QByteArray &device) const;
- int cameraOrientation(const QByteArray &device) const;
+ QCamera::Position cameraPosition(const QByteArray &device) const override;
+ int cameraOrientation(const QByteArray &device) const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm b/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
index 434d28683..08bd8c9bd 100644
--- a/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
+++ b/src/plugins/avfoundation/camera/avfcameraserviceplugin.mm
@@ -59,7 +59,7 @@ QMediaService* AVFServicePlugin::create(QString const& key)
else
qWarning() << "unsupported key:" << key;
- return 0;
+ return nullptr;
}
void AVFServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.h b/src/plugins/avfoundation/camera/avfcamerasession.h
index 3f90f1f7f..103ec0e17 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.h
+++ b/src/plugins/avfoundation/camera/avfcamerasession.h
@@ -70,7 +70,7 @@ class AVFCameraSession : public QObject
{
Q_OBJECT
public:
- AVFCameraSession(AVFCameraService *service, QObject *parent = 0);
+ AVFCameraSession(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraSession();
static int defaultCameraIndex();
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.mm b/src/plugins/avfoundation/camera/avfcamerasession.mm
index 8e3436d39..8ed627774 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.mm
+++ b/src/plugins/avfoundation/camera/avfcamerasession.mm
@@ -64,11 +64,6 @@ int AVFCameraSession::m_defaultCameraIndex;
QList<AVFCameraInfo> AVFCameraSession::m_cameraDevices;
@interface AVFCameraSessionObserver : NSObject
-{
-@private
- AVFCameraSession *m_session;
- AVCaptureSession *m_captureSession;
-}
- (AVFCameraSessionObserver *) initWithCameraSession:(AVFCameraSession*)session;
- (void) processRuntimeError:(NSNotification *)notification;
@@ -78,6 +73,11 @@ QList<AVFCameraInfo> AVFCameraSession::m_cameraDevices;
@end
@implementation AVFCameraSessionObserver
+{
+@private
+ AVFCameraSession *m_session;
+ AVCaptureSession *m_captureSession;
+}
- (AVFCameraSessionObserver *) initWithCameraSession:(AVFCameraSession*)session
{
@@ -262,7 +262,7 @@ AVCaptureDevice *AVFCameraSession::videoCaptureDevice() const
if (m_videoInput)
return m_videoInput.device;
- return 0;
+ return nullptr;
}
QCamera::State AVFCameraSession::state() const
@@ -362,7 +362,7 @@ void AVFCameraSession::attachVideoInputDevice()
if (m_videoInput) {
[m_captureSession removeInput:m_videoInput];
[m_videoInput release];
- m_videoInput = 0;
+ m_videoInput = nullptr;
m_activeCameraInfo = AVFCameraInfo();
}
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.h b/src/plugins/avfoundation/camera/avfcamerautility.h
index ba1bd3861..370302b1c 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.h
+++ b/src/plugins/avfoundation/camera/avfcamerautility.h
@@ -118,7 +118,7 @@ template<>
class AVFScopedPointer<dispatch_queue_t>
{
public:
- AVFScopedPointer() : m_queue(0) {}
+ AVFScopedPointer() : m_queue(nullptr) {}
explicit AVFScopedPointer(dispatch_queue_t q) : m_queue(q) {}
~AVFScopedPointer()
@@ -138,7 +138,7 @@ public:
return m_queue;
}
- void reset(dispatch_queue_t q = 0)
+ void reset(dispatch_queue_t q = nullptr)
{
if (m_queue)
dispatch_release(m_queue);
@@ -148,7 +148,7 @@ public:
private:
dispatch_queue_t m_queue;
- Q_DISABLE_COPY(AVFScopedPointer);
+ Q_DISABLE_COPY(AVFScopedPointer)
};
typedef QPair<qreal, qreal> AVFPSRange;
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.mm b/src/plugins/avfoundation/camera/avfcamerautility.mm
index 8a2254c2e..e68fc703b 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.mm
+++ b/src/plugins/avfoundation/camera/avfcamerautility.mm
@@ -240,7 +240,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
Q_ASSERT(!request.isNull() && request.isValid());
if (!captureDevice.formats || !captureDevice.formats.count)
- return 0;
+ return nullptr;
QVector<AVCaptureDeviceFormat *> formats(qt_unique_device_formats(captureDevice, filter));
@@ -254,7 +254,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
}
if (!qt_area_sane(request))
- return 0;
+ return nullptr;
typedef QPair<QSize, AVCaptureDeviceFormat *> FormatPair;
@@ -272,7 +272,7 @@ AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDev
}
if (!pairs.size())
- return 0;
+ return nullptr;
AVCaptureDeviceFormat *best = pairs[0].second;
QSize next(pairs[0].first);
diff --git a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
index 0054a8d01..a77d7de03 100644
--- a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.mm
@@ -167,7 +167,7 @@ QCameraViewfinderSettings AVFCameraViewfinderSettingsControl2::viewfinderSetting
settings.setMinimumFrameRate(fps.first);
settings.setMaximumFrameRate(fps.second);
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (videoOutput) {
NSObject *obj = [videoOutput.videoSettings objectForKey:(id)kCVPixelBufferPixelFormatTypeKey];
if (obj && [obj isKindOfClass:[NSNumber class]]) {
@@ -291,7 +291,7 @@ QVector<QVideoFrame::PixelFormat> AVFCameraViewfinderSettingsControl2::viewfinde
{
QVector<QVideoFrame::PixelFormat> qtFormats;
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (!videoOutput) {
qDebugCamera() << Q_FUNC_INFO << "no video output found";
return qtFormats;
@@ -318,7 +318,7 @@ QVector<QVideoFrame::PixelFormat> AVFCameraViewfinderSettingsControl2::viewfinde
bool AVFCameraViewfinderSettingsControl2::convertPixelFormatIfSupported(QVideoFrame::PixelFormat qtFormat,
unsigned &avfFormat)const
{
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (!videoOutput)
return false;
@@ -372,7 +372,7 @@ bool AVFCameraViewfinderSettingsControl2::applySettings(const QCameraViewfinderS
// We still can update the pixel format at least.
}
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : 0;
+ AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput() ? m_service->videoOutput()->videoDataOutput() : nullptr;
if (videoOutput) {
unsigned avfPixelFormat = 0;
if (!convertPixelFormatIfSupported(settings.pixelFormat(), avfPixelFormat)) {
diff --git a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
index 2cdf0e5f3..314e867e7 100644
--- a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
+++ b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
@@ -60,17 +60,17 @@ public:
QSharedPointer<QSemaphore> previewReady;
};
- AVFImageCaptureControl(AVFCameraService *service, QObject *parent = 0);
+ AVFImageCaptureControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFImageCaptureControl();
- bool isReadyForCapture() const;
+ bool isReadyForCapture() const override;
- QCameraImageCapture::DriveMode driveMode() const { return QCameraImageCapture::SingleImageCapture; }
- void setDriveMode(QCameraImageCapture::DriveMode ) {}
+ QCameraImageCapture::DriveMode driveMode() const override { return QCameraImageCapture::SingleImageCapture; }
+ void setDriveMode(QCameraImageCapture::DriveMode ) override {}
AVCaptureStillImageOutput *stillImageOutput() const {return m_stillImageOutput;}
- int capture(const QString &fileName);
- void cancelCapture();
+ int capture(const QString &fileName) override;
+ void cancelCapture() override;
private Q_SLOTS:
void updateCaptureConnection();
diff --git a/src/plugins/avfoundation/camera/avfmediaassetwriter.h b/src/plugins/avfoundation/camera/avfmediaassetwriter.h
index 624906c85..9d61d5089 100644
--- a/src/plugins/avfoundation/camera/avfmediaassetwriter.h
+++ b/src/plugins/avfoundation/camera/avfmediaassetwriter.h
@@ -59,37 +59,8 @@ QT_END_NAMESPACE
@interface QT_MANGLE_NAMESPACE(AVFMediaAssetWriter) : NSObject<AVCaptureVideoDataOutputSampleBufferDelegate,
AVCaptureAudioDataOutputSampleBufferDelegate>
{
-@private
- AVFCameraService *m_service;
-
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_cameraWriterInput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureDeviceInput> m_audioInput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureAudioDataOutput> m_audioOutput;
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_audioWriterInput;
- AVCaptureDevice *m_audioCaptureDevice;
-
- // Queue to write sample buffers:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_writerQueue;
- // High priority serial queue for video output:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_videoQueue;
- // Serial queue for audio output:
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_audioQueue;
-
- QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriter> m_assetWriter;
-
- QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *m_delegate;
-
- bool m_setStartTime;
-
- QT_PREPEND_NAMESPACE(QAtomicInt) m_state;
@public
QT_PREPEND_NAMESPACE(AVFAtomicInt64) m_durationInMs;
-@private
- CMTime m_startTime;
- CMTime m_lastTimeStamp;
-
- NSDictionary *m_audioSettings;
- NSDictionary *m_videoSettings;
}
- (id)initWithDelegate:(QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *)delegate;
diff --git a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
index 5a1257f6c..318d66117 100644
--- a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
+++ b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
@@ -89,6 +89,37 @@ enum WriterState
@end
@implementation QT_MANGLE_NAMESPACE(AVFMediaAssetWriter)
+{
+@private
+ AVFCameraService *m_service;
+
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_cameraWriterInput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureDeviceInput> m_audioInput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVCaptureAudioDataOutput> m_audioOutput;
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriterInput> m_audioWriterInput;
+ AVCaptureDevice *m_audioCaptureDevice;
+
+ // Queue to write sample buffers:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_writerQueue;
+ // High priority serial queue for video output:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_videoQueue;
+ // Serial queue for audio output:
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<dispatch_queue_t> m_audioQueue;
+
+ QT_PREPEND_NAMESPACE(AVFScopedPointer)<AVAssetWriter> m_assetWriter;
+
+ QT_PREPEND_NAMESPACE(AVFMediaRecorderControlIOS) *m_delegate;
+
+ bool m_setStartTime;
+
+ QT_PREPEND_NAMESPACE(QAtomicInt) m_state;
+@private
+ CMTime m_startTime;
+ CMTime m_lastTimeStamp;
+
+ NSDictionary *m_audioSettings;
+ NSDictionary *m_videoSettings;
+}
- (id)initWithDelegate:(AVFMediaRecorderControlIOS *)delegate
{
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
index a4894b3da..fbba5eca4 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.h
@@ -60,27 +60,27 @@ class AVFMediaRecorderControl : public QMediaRecorderControl
{
Q_OBJECT
public:
- AVFMediaRecorderControl(AVFCameraService *service, QObject *parent = 0);
+ AVFMediaRecorderControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFMediaRecorderControl();
- QUrl outputLocation() const;
- bool setOutputLocation(const QUrl &location);
+ QUrl outputLocation() const override;
+ bool setOutputLocation(const QUrl &location) override;
- QMediaRecorder::State state() const;
- QMediaRecorder::Status status() const;
+ QMediaRecorder::State state() const override;
+ QMediaRecorder::Status status() const override;
- qint64 duration() const;
+ qint64 duration() const override;
- bool isMuted() const;
- qreal volume() const;
+ bool isMuted() const override;
+ qreal volume() const override;
- void applySettings();
+ void applySettings() override;
void unapplySettings();
public Q_SLOTS:
- void setState(QMediaRecorder::State state);
- void setMuted(bool muted);
- void setVolume(qreal volume);
+ void setState(QMediaRecorder::State state) override;
+ void setMuted(bool muted) override;
+ void setVolume(qreal volume) override;
void handleRecordingStarted();
void handleRecordingFinished();
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
index 546eabf89..9a6057e6b 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
@@ -394,7 +394,7 @@ void AVFMediaRecorderControl::setupSessionForCapture()
qWarning() << "Failed to create audio device input";
} else if (![captureSession canAddInput:m_audioInput]) {
qWarning() << "Could not connect the audio input";
- m_audioInput = 0;
+ m_audioInput = nullptr;
} else {
[m_audioInput retain];
[captureSession addInput:m_audioInput];
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
index 8e049a595..9afb1068d 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
@@ -62,8 +62,8 @@ class AVFMediaRecorderControlIOS : public QMediaRecorderControl
{
Q_OBJECT
public:
- AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = 0);
- ~AVFMediaRecorderControlIOS();
+ AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = nullptr);
+ ~AVFMediaRecorderControlIOS() override;
QUrl outputLocation() const override;
bool setOutputLocation(const QUrl &location) override;
diff --git a/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h b/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
index ce9ef4dbe..69a452a97 100644
--- a/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
+++ b/src/plugins/avfoundation/camera/avfmediavideoprobecontrol.h
@@ -48,7 +48,7 @@ class AVFMediaVideoProbeControl : public QMediaVideoProbeControl
{
Q_OBJECT
public:
- explicit AVFMediaVideoProbeControl(QObject *parent = 0);
+ explicit AVFMediaVideoProbeControl(QObject *parent = nullptr);
~AVFMediaVideoProbeControl();
void newFrameProbed(const QVideoFrame& frame);
diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
index 9bdf5a788..7c9574f3d 100644
--- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
@@ -59,10 +59,10 @@ public:
explicit AVFVideoEncoderSettingsControl(AVFCameraService *service);
QList<QSize> supportedResolutions(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const override;
+ bool *continuous = nullptr) const override;
QList<qreal> supportedFrameRates(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const override;
+ bool *continuous = nullptr) const override;
QStringList supportedVideoCodecs() const override;
QString videoCodecDescription(const QString &codecName) const override;
diff --git a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
index 45db7aef7..ba0803807 100644
--- a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
+++ b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.h
@@ -55,7 +55,7 @@ class AVFDisplayLink : public QObject
{
Q_OBJECT
public:
- explicit AVFDisplayLink(QObject *parent = 0);
+ explicit AVFDisplayLink(QObject *parent = nullptr);
virtual ~AVFDisplayLink();
bool isValid() const;
bool isActive() const;
@@ -71,7 +71,7 @@ public:
void displayLinkEvent(const CVTimeStamp *);
protected:
- virtual bool event(QEvent *);
+ virtual bool event(QEvent *) override;
private:
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
diff --git a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
index 63747e486..bae18bc0a 100644
--- a/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfdisplaylink.mm
@@ -55,10 +55,6 @@ QT_USE_NAMESPACE
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
@interface DisplayLinkObserver : NSObject
-{
- AVFDisplayLink *m_avfDisplayLink;
- CADisplayLink *m_displayLink;
-}
- (void)start;
- (void)stop;
@@ -67,6 +63,10 @@ QT_USE_NAMESPACE
@end
@implementation DisplayLinkObserver
+{
+ AVFDisplayLink *m_avfDisplayLink;
+ CADisplayLink *m_displayLink;
+}
- (id)initWithAVFDisplayLink:(AVFDisplayLink *)link
{
@@ -84,7 +84,7 @@ QT_USE_NAMESPACE
{
if (m_displayLink) {
[m_displayLink release];
- m_displayLink = NULL;
+ m_displayLink = nullptr;
}
[super dealloc];
@@ -129,7 +129,7 @@ static CVReturn CVDisplayLinkCallback(CVDisplayLinkRef displayLink,
AVFDisplayLink::AVFDisplayLink(QObject *parent)
: QObject(parent)
- , m_displayLink(0)
+ , m_displayLink(nullptr)
, m_pendingDisplayLinkEvent(false)
, m_isActive(false)
{
@@ -161,13 +161,13 @@ AVFDisplayLink::~AVFDisplayLink()
#else
CVDisplayLinkRelease(m_displayLink);
#endif
- m_displayLink = NULL;
+ m_displayLink = nullptr;
}
}
bool AVFDisplayLink::isValid() const
{
- return m_displayLink != 0;
+ return m_displayLink != nullptr;
}
bool AVFDisplayLink::isActive() const
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
index a65ee8529..ac0ba0ab2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.h
@@ -51,44 +51,44 @@ class AVFMediaPlayerControl : public QMediaPlayerControl
{
Q_OBJECT
public:
- explicit AVFMediaPlayerControl(QObject *parent = 0);
+ explicit AVFMediaPlayerControl(QObject *parent = nullptr);
~AVFMediaPlayerControl();
void setSession(AVFMediaPlayerSession *session);
- QMediaPlayer::State state() const;
- QMediaPlayer::MediaStatus mediaStatus() const;
+ QMediaPlayer::State state() const override;
+ QMediaPlayer::MediaStatus mediaStatus() const override;
- QMediaContent media() const;
- const QIODevice *mediaStream() const;
- void setMedia(const QMediaContent &content, QIODevice *stream);
+ QMediaContent media() const override;
+ const QIODevice *mediaStream() const override;
+ void setMedia(const QMediaContent &content, QIODevice *stream) override;
- qint64 position() const;
- qint64 duration() const;
+ qint64 position() const override;
+ qint64 duration() const override;
- int bufferStatus() const;
+ int bufferStatus() const override;
- int volume() const;
- bool isMuted() const;
+ int volume() const override;
+ bool isMuted() const override;
- bool isAudioAvailable() const;
- bool isVideoAvailable() const;
+ bool isAudioAvailable() const override;
+ bool isVideoAvailable() const override;
- bool isSeekable() const;
- QMediaTimeRange availablePlaybackRanges() const;
+ bool isSeekable() const override;
+ QMediaTimeRange availablePlaybackRanges() const override;
- qreal playbackRate() const;
- void setPlaybackRate(qreal rate);
+ qreal playbackRate() const override;
+ void setPlaybackRate(qreal rate) override;
public Q_SLOTS:
- void setPosition(qint64 pos);
+ void setPosition(qint64 pos) override;
- void play();
- void pause();
- void stop();
+ void play() override;
+ void pause() override;
+ void stop() override;
- void setVolume(int volume);
- void setMuted(bool muted);
+ void setVolume(int volume) override;
+ void setMuted(bool muted) override;
private:
AVFMediaPlayerSession *m_session;
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
index 396550047..ae99c7eda 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
@@ -50,14 +50,14 @@ class AVFMediaPlayerMetaDataControl : public QMetaDataReaderControl
{
Q_OBJECT
public:
- explicit AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent = 0);
+ explicit AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent = nullptr);
virtual ~AVFMediaPlayerMetaDataControl();
- bool isMetaDataAvailable() const;
+ bool isMetaDataAvailable() const override;
bool isWritable() const;
- QVariant metaData(const QString &key) const;
- QStringList availableMetaData() const;
+ QVariant metaData(const QString &key) const override;
+ QStringList availableMetaData() const override;
private Q_SLOTS:
void updateTags();
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
index 39783680b..b9ec38c0f 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
@@ -49,7 +49,7 @@ QT_USE_NAMESPACE
AVFMediaPlayerMetaDataControl::AVFMediaPlayerMetaDataControl(AVFMediaPlayerSession *session, QObject *parent)
: QMetaDataReaderControl(parent)
, m_session(session)
- , m_asset(0)
+ , m_asset(nullptr)
{
QObject::connect(m_session, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(updateTags()));
}
@@ -121,7 +121,7 @@ void AVFMediaPlayerMetaDataControl::updateTags()
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO;
#endif
- AVAsset *currentAsset = (AVAsset*)m_session->currentAssetHandle();
+ AVAsset *currentAsset = static_cast<AVAsset*>(m_session->currentAssetHandle());
//Don't read the tags from the same asset more than once
if (currentAsset == m_asset)
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
index 4460a4867..6a4b915cf 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.h
@@ -52,11 +52,11 @@ class AVFVideoOutput;
class AVFMediaPlayerService : public QMediaService
{
public:
- explicit AVFMediaPlayerService(QObject *parent = 0);
+ explicit AVFMediaPlayerService(QObject *parent = nullptr);
~AVFMediaPlayerService();
- QMediaControl* requestControl(const char *name);
- void releaseControl(QMediaControl *control);
+ QMediaControl* requestControl(const char *name) override;
+ void releaseControl(QMediaControl *control) override;
private:
AVFMediaPlayerSession *m_session;
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
index 91def6b3b..bc59fa921 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
@@ -56,7 +56,7 @@ QT_USE_NAMESPACE
AVFMediaPlayerService::AVFMediaPlayerService(QObject *parent)
: QMediaService(parent)
- , m_videoOutput(0)
+ , m_videoOutput(nullptr)
{
m_session = new AVFMediaPlayerSession(this);
m_control = new AVFMediaPlayerControl(this);
@@ -111,7 +111,7 @@ QMediaControl *AVFMediaPlayerService::requestControl(const char *name)
m_session->setVideoOutput(qobject_cast<AVFVideoOutput*>(m_videoOutput));
return m_videoOutput;
}
- return 0;
+ return nullptr;
}
void AVFMediaPlayerService::releaseControl(QMediaControl *control)
@@ -124,10 +124,10 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control)
AVFVideoRendererControl *renderControl = qobject_cast<AVFVideoRendererControl*>(m_videoOutput);
if (renderControl)
- renderControl->setSurface(0);
+ renderControl->setSurface(nullptr);
#endif
- m_videoOutput = 0;
- m_session->setVideoOutput(0);
+ m_videoOutput = nullptr;
+ m_session->setVideoOutput(nullptr);
delete control;
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
index eae9b9a05..e08f0f46e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.h
@@ -59,12 +59,12 @@ class AVFMediaPlayerServicePlugin
public:
explicit AVFMediaPlayerServicePlugin();
- QMediaService* create(QString const& key);
- void release(QMediaService *service);
+ QMediaService* create(QString const& key) override;
+ void release(QMediaService *service) override;
- QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const;
- QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const;
- QStringList supportedMimeTypes() const;
+ QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const override;
+ QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const override;
+ QStringList supportedMimeTypes() const override;
private:
void buildSupportedTypes();
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
index dcdd9efed..59b29a3d2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerserviceplugin.mm
@@ -60,7 +60,7 @@ QMediaService *AVFMediaPlayerServicePlugin::create(const QString &key)
return new AVFMediaPlayerService;
qWarning() << "unsupported key: " << key;
- return 0;
+ return nullptr;
}
void AVFMediaPlayerServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
index e20f4a1ec..f6e0ef3bf 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
@@ -57,7 +57,7 @@ class AVFMediaPlayerSession : public QObject
{
Q_OBJECT
public:
- AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent = 0);
+ AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent = nullptr);
virtual ~AVFMediaPlayerSession();
void setVideoOutput(AVFVideoOutput *output);
@@ -127,7 +127,7 @@ Q_SIGNALS:
private:
class ResourceHandler {
public:
- ResourceHandler():resource(0) {}
+ ResourceHandler() : resource(nullptr) {}
~ResourceHandler() { clear(); }
void setResourceFile(const QString &file) {
if (resource) {
@@ -138,10 +138,10 @@ private:
}
resource = new QResource(file);
}
- bool isValid() const { return resource && resource->isValid() && resource->data() != 0; }
+ bool isValid() const { return resource && resource->isValid() && resource->data() != nullptr; }
const uchar *data() {
if (!isValid())
- return 0;
+ return nullptr;
if (resource->isCompressed()) {
if (rawData.size() == 0)
rawData = qUncompress(resource->data(), resource->size());
@@ -150,7 +150,7 @@ private:
return resource->data();
}
qint64 size() {
- if (data() == 0)
+ if (data() == nullptr)
return 0;
return resource->isCompressed() ? rawData.size() : resource->size();
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index 06fb71ef8..2309221c2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -67,15 +67,6 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe
static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext = &AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext;
@interface AVFMediaPlayerSessionObserver : NSObject
-{
-@private
- AVFMediaPlayerSession *m_session;
- AVPlayer *m_player;
- AVPlayerItem *m_playerItem;
- AVPlayerLayer *m_playerLayer;
- NSURL *m_URL;
- BOOL m_bufferIsLikelyToKeepUp;
-}
@property (readonly, getter=player) AVPlayer* m_player;
@property (readonly, getter=playerItem) AVPlayerItem* m_playerItem;
@@ -96,6 +87,15 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
@end
@implementation AVFMediaPlayerSessionObserver
+{
+@private
+ AVFMediaPlayerSession *m_session;
+ AVPlayer *m_player;
+ AVPlayerItem *m_playerItem;
+ AVPlayerLayer *m_playerLayer;
+ NSURL *m_URL;
+ BOOL m_bufferIsLikelyToKeepUp;
+}
@synthesize m_player, m_playerItem, m_playerLayer, m_session;
@@ -339,7 +339,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
case AVPlayerStatusFailed:
{
- AVPlayerItem *playerItem = (AVPlayerItem *)object;
+ AVPlayerItem *playerItem = static_cast<AVPlayerItem*>(object);
[self assetFailedToPrepareForPlayback:playerItem.error];
if (self.session)
@@ -411,10 +411,10 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QObject *parent)
: QObject(parent)
, m_service(service)
- , m_videoOutput(0)
+ , m_videoOutput(nullptr)
, m_state(QMediaPlayer::StoppedState)
, m_mediaStatus(QMediaPlayer::NoMedia)
- , m_mediaStream(0)
+ , m_mediaStream(nullptr)
, m_muted(false)
, m_tryingAsync(false)
, m_volume(100)
@@ -435,8 +435,8 @@ AVFMediaPlayerSession::~AVFMediaPlayerSession()
qDebug() << Q_FUNC_INFO;
#endif
//Detatch the session from the sessionObserver (which could still be alive trying to communicate with this session).
- [(AVFMediaPlayerSessionObserver*)m_observer detatchSession];
- [(AVFMediaPlayerSessionObserver*)m_observer release];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) detatchSession];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) release];
}
void AVFMediaPlayerSession::setVideoOutput(AVFVideoOutput *output)
@@ -450,13 +450,13 @@ void AVFMediaPlayerSession::setVideoOutput(AVFVideoOutput *output)
//Set the current output layer to null to stop rendering
if (m_videoOutput) {
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
}
m_videoOutput = output;
if (m_videoOutput && m_state != QMediaPlayer::StoppedState)
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
void *AVFMediaPlayerSession::currentAssetHandle()
@@ -464,7 +464,7 @@ void *AVFMediaPlayerSession::currentAssetHandle()
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO;
#endif
- AVAsset *currentAsset = [[(AVFMediaPlayerSessionObserver*)m_observer playerItem] asset];
+ AVAsset *currentAsset = [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem] asset];
return currentAsset;
}
@@ -494,7 +494,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
qDebug() << Q_FUNC_INFO << content.canonicalUrl();
#endif
- [(AVFMediaPlayerSessionObserver*)m_observer unloadMedia];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) unloadMedia];
m_resources = content;
m_mediaStream = stream;
@@ -528,7 +528,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
//initialize asset using content's URL
NSString *urlString = [NSString stringWithUTF8String:content.canonicalUrl().toEncoded().constData()];
NSURL *url = [NSURL URLWithString:urlString];
- [(AVFMediaPlayerSessionObserver*)m_observer setURL:url];
+ [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) setURL:url];
m_state = QMediaPlayer::StoppedState;
if (m_state != oldState)
@@ -537,7 +537,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
qint64 AVFMediaPlayerSession::position() const
{
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (!playerItem)
return m_requestedPosition != -1 ? m_requestedPosition : 0;
@@ -616,7 +616,7 @@ void AVFMediaPlayerSession::setSeekable(bool seekable)
QMediaTimeRange AVFMediaPlayerSession::availablePlaybackRanges() const
{
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (playerItem) {
QMediaTimeRange timeRanges;
@@ -649,7 +649,7 @@ void AVFMediaPlayerSession::setPlaybackRate(qreal rate)
m_rate = rate;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player && m_state == QMediaPlayer::PlayingState)
[player setRate:m_rate];
@@ -665,7 +665,7 @@ void AVFMediaPlayerSession::setPosition(qint64 pos)
if (pos == position())
return;
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (!playerItem) {
m_requestedPosition = pos;
Q_EMIT positionChanged(m_requestedPosition);
@@ -711,7 +711,7 @@ void AVFMediaPlayerSession::play()
return;
if (m_videoOutput) {
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
// Reset media status if the current status is EndOfMedia
@@ -720,7 +720,7 @@ void AVFMediaPlayerSession::play()
if (m_mediaStatus == QMediaPlayer::LoadedMedia || m_mediaStatus == QMediaPlayer::BufferedMedia) {
// Setting the rate starts playback
- [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate];
}
m_state = QMediaPlayer::PlayingState;
@@ -744,10 +744,10 @@ void AVFMediaPlayerSession::pause()
m_state = QMediaPlayer::PausedState;
if (m_videoOutput) {
- m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]);
+ m_videoOutput->setLayer([static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer]);
}
- [[(AVFMediaPlayerSessionObserver*)m_observer player] pause];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] pause];
// Reset media status if the current status is EndOfMedia
if (m_mediaStatus == QMediaPlayer::EndOfMedia)
@@ -767,11 +767,11 @@ void AVFMediaPlayerSession::stop()
return;
// AVPlayer doesn't have stop(), only pause() and play().
- [[(AVFMediaPlayerSessionObserver*)m_observer player] pause];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] pause];
setPosition(0);
if (m_videoOutput) {
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
}
if (m_mediaStatus == QMediaPlayer::BufferedMedia)
@@ -792,7 +792,7 @@ void AVFMediaPlayerSession::setVolume(int volume)
m_volume = volume;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player)
[player setVolume:volume / 100.0f];
@@ -810,7 +810,7 @@ void AVFMediaPlayerSession::setMuted(bool muted)
m_muted = muted;
- AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
+ AVPlayer *player = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player];
if (player)
[player setMuted:muted];
@@ -832,14 +832,14 @@ void AVFMediaPlayerSession::processEOS()
// At this point, frames should not be rendered anymore.
// Clear the output layer to make sure of that.
if (m_videoOutput)
- m_videoOutput->setLayer(0);
+ m_videoOutput->setLayer(nullptr);
Q_EMIT stateChanged(m_state);
}
void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
{
- AVPlayerStatus currentStatus = [[(AVFMediaPlayerSessionObserver*)m_observer player] status];
+ AVPlayerStatus currentStatus = [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] status];
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO << currentStatus << ", " << m_mediaStatus << ", " << newState;
@@ -852,7 +852,7 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
QMediaPlayer::MediaStatus newStatus = m_mediaStatus;
- AVPlayerItem *playerItem = [(AVFMediaPlayerSessionObserver*)m_observer playerItem];
+ AVPlayerItem *playerItem = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerItem];
if (playerItem) {
// Check each track for audio and video content
@@ -874,7 +874,7 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
setSeekable([[playerItem seekableTimeRanges] count] > 0);
// Get the native size of the video, and reset the bounds of the player layer
- AVPlayerLayer *playerLayer = [(AVFMediaPlayerSessionObserver*)m_observer playerLayer];
+ AVPlayerLayer *playerLayer = [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) playerLayer];
if (videoTrack && playerLayer) {
playerLayer.bounds = CGRectMake(0.0f, 0.0f,
videoTrack.naturalSize.width,
@@ -899,9 +899,9 @@ void AVFMediaPlayerSession::processLoadStateChange(QMediaPlayer::State newState)
}
- if (newState == QMediaPlayer::PlayingState && [(AVFMediaPlayerSessionObserver*)m_observer player]) {
+ if (newState == QMediaPlayer::PlayingState && [static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player]) {
// Setting the rate is enough to start playback, no need to call play()
- [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate];
+ [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate];
}
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
index 054bce166..99b6bb0b5 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.h
@@ -58,7 +58,7 @@ class QAbstractVideoSurface;
class AVFVideoFrameRenderer : public QObject
{
public:
- AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
+ AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = nullptr);
virtual ~AVFVideoFrameRenderer();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
index 0759702e8..b2c6638cc 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
@@ -54,15 +54,15 @@ QT_USE_NAMESPACE
AVFVideoFrameRenderer::AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent)
: QObject(parent)
- , m_videoLayerRenderer(0)
+ , m_videoLayerRenderer(nullptr)
, m_surface(surface)
- , m_offscreenSurface(0)
- , m_glContext(0)
+ , m_offscreenSurface(nullptr)
+ , m_glContext(nullptr)
, m_currentBuffer(1)
, m_isContextShared(true)
{
- m_fbo[0] = 0;
- m_fbo[1] = 0;
+ m_fbo[0] = nullptr;
+ m_fbo[1] = nullptr;
}
AVFVideoFrameRenderer::~AVFVideoFrameRenderer()
@@ -155,7 +155,7 @@ QOpenGLFramebufferObject *AVFVideoFrameRenderer::initRenderer(AVPlayerLayer *lay
}
if (!m_glContext->create()) {
qWarning("failed to create QOpenGLContext");
- return 0;
+ return nullptr;
}
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
index 3def186ef..d9f6baa7e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.h
@@ -86,7 +86,7 @@ typedef CVOpenGLTextureRef CVOGLTextureRef;
class AVFVideoFrameRenderer : public QObject
{
public:
- AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
+ AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent = nullptr);
virtual ~AVFVideoFrameRenderer();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
index f84718c55..70e402e6c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer_ios.mm
@@ -54,11 +54,11 @@ QT_USE_NAMESPACE
AVFVideoFrameRenderer::AVFVideoFrameRenderer(QAbstractVideoSurface *surface, QObject *parent)
: QObject(parent)
- , m_glContext(0)
- , m_offscreenSurface(0)
+ , m_glContext(nullptr)
+ , m_offscreenSurface(nullptr)
, m_surface(surface)
- , m_textureCache(0)
- , m_videoOutput(0)
+ , m_textureCache(nullptr)
+ , m_videoOutput(nullptr)
, m_isContextShared(true)
{
}
@@ -81,7 +81,7 @@ void AVFVideoFrameRenderer::setPlayerLayer(AVPlayerLayer *layer)
Q_UNUSED(layer)
if (m_videoOutput) {
[m_videoOutput release];
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
// will be re-created in first call to copyPixelBufferFromLayer
}
}
@@ -92,7 +92,7 @@ CVOGLTextureRef AVFVideoFrameRenderer::renderLayerToTexture(AVPlayerLayer *layer
// If the glContext isn't shared, it doesn't make sense to return a texture for us
if (!m_isContextShared)
- return 0;
+ return nullptr;
size_t dummyWidth = 0, dummyHeight = 0;
return createCacheTextureFromLayer(layer, dummyWidth, dummyHeight);
@@ -111,7 +111,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
#ifdef QT_DEBUG_AVF
qWarning("copyPixelBufferFromLayer: invalid layer");
#endif
- return 0;
+ return nullptr;
}
if (!m_videoOutput) {
@@ -125,7 +125,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
CMTime currentCMFrameTime = [m_videoOutput itemTimeForHostTime:currentCAFrameTime];
// happens when buffering / loading
if (CMTimeCompare(currentCMFrameTime, kCMTimeZero) < 0) {
- return 0;
+ return nullptr;
}
CVPixelBufferRef pixelBuffer = [m_videoOutput copyPixelBufferForItemTime:currentCMFrameTime
@@ -135,7 +135,7 @@ CVPixelBufferRef AVFVideoFrameRenderer::copyPixelBufferFromLayer(AVPlayerLayer *
qWarning("copyPixelBufferForItemTime returned nil");
CMTimeShow(currentCMFrameTime);
#endif
- return 0;
+ return nullptr;
}
width = CVPixelBufferGetWidth(pixelBuffer);
@@ -149,12 +149,12 @@ CVOGLTextureRef AVFVideoFrameRenderer::createCacheTextureFromLayer(AVPlayerLayer
CVPixelBufferRef pixelBuffer = copyPixelBufferFromLayer(layer, width, height);
if (!pixelBuffer)
- return 0;
+ return nullptr;
CVOGLTextureCacheFlush(m_textureCache, 0);
- CVOGLTextureRef texture = 0;
- CVReturn err = CVOGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault, m_textureCache, pixelBuffer, NULL,
+ CVOGLTextureRef texture = nullptr;
+ CVReturn err = CVOGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault, m_textureCache, pixelBuffer, nullptr,
GL_TEXTURE_2D, GL_RGBA,
(GLsizei) width, (GLsizei) height,
GL_BGRA, GL_UNSIGNED_BYTE, 0,
@@ -214,7 +214,7 @@ void AVFVideoFrameRenderer::initRenderer()
//Make sure we have an OpenGL context to make current
if (!m_glContext) {
//Create OpenGL context and set share context from surface
- QOpenGLContext *shareContext = 0;
+ QOpenGLContext *shareContext = nullptr;
if (m_surface) {
shareContext = qobject_cast<QOpenGLContext*>(m_surface->property("GLContext").value<QObject*>());
}
@@ -248,9 +248,9 @@ void AVFVideoFrameRenderer::initRenderer()
if (!m_textureCache) {
// Create a new open gl texture cache
- CVReturn err = CVOGLTextureCacheCreate(kCFAllocatorDefault, NULL,
+ CVReturn err = CVOGLTextureCacheCreate(kCFAllocatorDefault, nullptr,
[EAGLContext currentContext],
- NULL, &m_textureCache);
+ nullptr, &m_textureCache);
if (err) {
#ifdef QT_DEBUG_AVF
qWarning("Error at CVOGLTextureCacheCreate %d", err);
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
index 26032f0be..85dc19d31 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.h
@@ -58,13 +58,13 @@ class AVFVideoRendererControl : public QVideoRendererControl, public AVFVideoOut
Q_OBJECT
Q_INTERFACES(AVFVideoOutput)
public:
- explicit AVFVideoRendererControl(QObject *parent = 0);
+ explicit AVFVideoRendererControl(QObject *parent = nullptr);
virtual ~AVFVideoRendererControl();
- QAbstractVideoSurface *surface() const;
- void setSurface(QAbstractVideoSurface *surface);
+ QAbstractVideoSurface *surface() const override;
+ void setSurface(QAbstractVideoSurface *surface) override;
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
private Q_SLOTS:
void updateVideoFrame(const CVTimeStamp &ts);
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
index e40b7eb17..5f468e532 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideorenderercontrol.mm
@@ -75,7 +75,7 @@ public:
}
MapMode mapMode() const { return NotMapped; }
- uchar *map(MapMode, int*, int*) { return 0; }
+ uchar *map(MapMode, int*, int*) { return nullptr; }
void unmap() {}
QVariant handle() const
@@ -116,9 +116,9 @@ private:
AVFVideoRendererControl::AVFVideoRendererControl(QObject *parent)
: QVideoRendererControl(parent)
- , m_surface(0)
- , m_playerLayer(0)
- , m_frameRenderer(0)
+ , m_surface(nullptr)
+ , m_playerLayer(nullptr)
+ , m_frameRenderer(nullptr)
, m_enableOpenGL(false)
{
@@ -132,7 +132,7 @@ AVFVideoRendererControl::~AVFVideoRendererControl()
qDebug() << Q_FUNC_INFO;
#endif
m_displayLink->stop();
- [(AVPlayerLayer*)m_playerLayer release];
+ [static_cast<AVPlayerLayer*>(m_playerLayer) release];
}
QAbstractVideoSurface *AVFVideoRendererControl::surface() const
@@ -160,10 +160,10 @@ void AVFVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
//If the surface changed, then the current frame renderer is no longer valid
delete m_frameRenderer;
- m_frameRenderer = 0;
+ m_frameRenderer = nullptr;
//If there is now no surface to render too
- if (m_surface == 0) {
+ if (m_surface == nullptr) {
m_displayLink->stop();
return;
}
@@ -191,8 +191,8 @@ void AVFVideoRendererControl::setLayer(void *playerLayer)
if (m_playerLayer == playerLayer)
return;
- [(AVPlayerLayer*)playerLayer retain];
- [(AVPlayerLayer*)m_playerLayer release];
+ [static_cast<AVPlayerLayer*>(playerLayer) retain];
+ [static_cast<AVPlayerLayer*>(playerLayer) release];
m_playerLayer = playerLayer;
@@ -208,7 +208,7 @@ void AVFVideoRendererControl::setLayer(void *playerLayer)
#endif
//If there is no layer to render, stop scheduling updates
- if (m_playerLayer == 0) {
+ if (m_playerLayer == nullptr) {
m_displayLink->stop();
return;
}
@@ -225,7 +225,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
{
Q_UNUSED(ts)
- AVPlayerLayer *playerLayer = (AVPlayerLayer*)m_playerLayer;
+ AVPlayerLayer *playerLayer = static_cast<AVPlayerLayer*>(playerLayer);
if (!playerLayer) {
qWarning("updateVideoFrame called without AVPlayerLayer (which shouldn't happen");
@@ -240,7 +240,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
CVOGLTextureRef tex = m_frameRenderer->renderLayerToTexture(playerLayer);
//Make sure we got a valid texture
- if (tex == 0)
+ if (tex == nullptr)
return;
QAbstractVideoBuffer *buffer = new TextureCacheVideoBuffer(tex);
@@ -305,7 +305,7 @@ void AVFVideoRendererControl::updateVideoFrame(const CVTimeStamp &ts)
void AVFVideoRendererControl::setupVideoOutput()
{
- AVPlayerLayer *playerLayer = (AVPlayerLayer*)m_playerLayer;
+ AVPlayerLayer *playerLayer = static_cast<AVPlayerLayer*>(playerLayer);
if (playerLayer)
m_nativeSize = QSize(playerLayer.bounds.size.width, playerLayer.bounds.size.height);
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.h b/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
index be6f16e64..faf71f1a4 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.h
@@ -57,14 +57,14 @@ public:
AVFVideoWidget(QWidget *parent);
virtual ~AVFVideoWidget();
- QSize sizeHint() const;
+ QSize sizeHint() const override;
Qt::AspectRatioMode aspectRatioMode() const;
void setAspectRatioMode(Qt::AspectRatioMode mode);
void setPlayerLayer(AVPlayerLayer *layer);
protected:
- void resizeEvent(QResizeEvent *);
- void paintEvent(QPaintEvent *);
+ void resizeEvent(QResizeEvent *) override;
+ void paintEvent(QPaintEvent *) override;
private:
void updateAspectRatio();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
index 7eb5a71cf..be349710c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
@@ -56,8 +56,8 @@ QT_USE_NAMESPACE
AVFVideoWidget::AVFVideoWidget(QWidget *parent)
: QWidget(parent)
, m_aspectRatioMode(Qt::KeepAspectRatio)
- , m_playerLayer(0)
- , m_nativeView(0)
+ , m_playerLayer(nullptr)
+ , m_nativeView(nullptr)
{
setAutoFillBackground(false);
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
index f442d666a..22379d273 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.h
@@ -54,30 +54,30 @@ class AVFVideoWidgetControl : public QVideoWidgetControl, public AVFVideoOutput
Q_OBJECT
Q_INTERFACES(AVFVideoOutput)
public:
- AVFVideoWidgetControl(QObject *parent = 0);
+ AVFVideoWidgetControl(QObject *parent = nullptr);
virtual ~AVFVideoWidgetControl();
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
- QWidget *videoWidget();
+ QWidget *videoWidget() override;
- bool isFullScreen() const;
- void setFullScreen(bool fullScreen);
+ bool isFullScreen() const override;
+ void setFullScreen(bool fullScreen) override;
- Qt::AspectRatioMode aspectRatioMode() const;
- void setAspectRatioMode(Qt::AspectRatioMode mode);
+ Qt::AspectRatioMode aspectRatioMode() const override;
+ void setAspectRatioMode(Qt::AspectRatioMode mode) override;
- int brightness() const;
- void setBrightness(int brightness);
+ int brightness() const override;
+ void setBrightness(int brightness) override;
- int contrast() const;
- void setContrast(int contrast);
+ int contrast() const override;
+ void setContrast(int contrast) override;
- int hue() const;
- void setHue(int hue);
+ int hue() const override;
+ void setHue(int hue) override;
- int saturation() const;
- void setSaturation(int saturation);
+ int saturation() const override;
+ void setSaturation(int saturation) override;
private:
AVFVideoWidget *m_videoWidget;
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
index 287dd3add..91ece817e 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidgetcontrol.mm
@@ -56,7 +56,7 @@ AVFVideoWidgetControl::AVFVideoWidgetControl(QObject *parent)
, m_hue(0)
, m_saturation(0)
{
- m_videoWidget = new AVFVideoWidget(0);
+ m_videoWidget = new AVFVideoWidget(nullptr);
}
AVFVideoWidgetControl::~AVFVideoWidgetControl()
@@ -73,7 +73,7 @@ void AVFVideoWidgetControl::setLayer(void *playerLayer)
qDebug() << Q_FUNC_INFO << playerLayer;
#endif
- m_videoWidget->setPlayerLayer((AVPlayerLayer*)playerLayer);
+ m_videoWidget->setPlayerLayer(static_cast<AVPlayerLayer*>(playerLayer));
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
index 18bf3fa71..763656c6c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.h
@@ -61,40 +61,40 @@ class AVFVideoWindowControl : public QVideoWindowControl, public AVFVideoOutput
Q_INTERFACES(AVFVideoOutput)
public:
- AVFVideoWindowControl(QObject *parent = 0);
+ AVFVideoWindowControl(QObject *parent = nullptr);
virtual ~AVFVideoWindowControl();
// QVideoWindowControl interface
public:
- WId winId() const;
- void setWinId(WId id);
+ WId winId() const override;
+ void setWinId(WId id) override;
- QRect displayRect() const;
- void setDisplayRect(const QRect &rect);
+ QRect displayRect() const override;
+ void setDisplayRect(const QRect &rect) override;
- bool isFullScreen() const;
- void setFullScreen(bool fullScreen);
+ bool isFullScreen() const override;
+ void setFullScreen(bool fullScreen) override;
- void repaint();
- QSize nativeSize() const;
+ void repaint() override;
+ QSize nativeSize() const override;
- Qt::AspectRatioMode aspectRatioMode() const;
- void setAspectRatioMode(Qt::AspectRatioMode mode);
+ Qt::AspectRatioMode aspectRatioMode() const override;
+ void setAspectRatioMode(Qt::AspectRatioMode mode) override;
- int brightness() const;
- void setBrightness(int brightness);
+ int brightness() const override;
+ void setBrightness(int brightness) override;
- int contrast() const;
- void setContrast(int contrast);
+ int contrast() const override;
+ void setContrast(int contrast) override;
- int hue() const;
- void setHue(int hue);
+ int hue() const override;
+ void setHue(int hue) override;
- int saturation() const;
- void setSaturation(int saturation);
+ int saturation() const override;
+ void setSaturation(int saturation) override;
// AVFVideoOutput interface
- void setLayer(void *playerLayer);
+ void setLayer(void *playerLayer) override;
private:
void updateAspectRatio();
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
index 5727cb0f4..7fa41fdc2 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
@@ -60,8 +60,8 @@ AVFVideoWindowControl::AVFVideoWindowControl(QObject *parent)
, m_hue(0)
, m_saturation(0)
, m_aspectRatioMode(Qt::IgnoreAspectRatio)
- , m_playerLayer(0)
- , m_nativeView(0)
+ , m_playerLayer(nullptr)
+ , m_nativeView(nullptr)
{
}
@@ -188,7 +188,7 @@ void AVFVideoWindowControl::setSaturation(int saturation)
void AVFVideoWindowControl::setLayer(void *playerLayer)
{
- AVPlayerLayer *layer = (AVPlayerLayer*)playerLayer;
+ AVPlayerLayer *layer = static_cast<AVPlayerLayer*>(playerLayer);
if (m_playerLayer == layer)
return;
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 872b97bcc..fdaedea7a 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -1208,6 +1208,8 @@ HRESULT EVRCustomPresenter::checkEndOfStream()
// Everything is complete. Now we can tell the EVR that we are done.
notifyEvent(EC_COMPLETE, (LONG_PTR)S_OK, 0);
m_endStreaming = false;
+
+ stopSurface();
return S_OK;
}
diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp
index 8f3f321e7..d1c1d42ab 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -56,8 +56,10 @@ bool DirectShowUtils::isPinConnected(IPin *pin, HRESULT *hrOut)
hrOut = &hr;
*hrOut = pin->ConnectedTo(&connectedPin);
- if (*hrOut == VFW_E_NOT_CONNECTED) // Not an error in this case
+ if (*hrOut == VFW_E_NOT_CONNECTED) { // Not an error in this case
*hrOut = S_OK;
+ return false;
+ }
if (FAILED(*hrOut)) {
qCDebug(qtDirectShowPlugin, "Querying pin connection failed!");
@@ -282,7 +284,7 @@ bool DirectShowUtils::connectFilters(IGraphBuilder *graph,
// Try to connect to the upstream filter first.
if (findAndConnect(upstreamFilter))
- return false;
+ return true;
const auto getFilters = [graph, hrOut]() -> IEnumFilters * {
IEnumFilters *f = nullptr;
diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro
index 54d617166..e531efc53 100644
--- a/src/plugins/directshow/directshow.pro
+++ b/src/plugins/directshow/directshow.pro
@@ -17,12 +17,11 @@ mingw {
}
include(common/common.pri)
-qtConfig(directshow-player): include(player/player.pri)
+include(player/player.pri)
include(camera/camera.pri)
OTHER_FILES += \
- directshow.json \
- directshow_camera.json
+ directshow.json
PLUGIN_TYPE = mediaservice
PLUGIN_CLASS_NAME = DSServicePlugin
diff --git a/src/plugins/directshow/directshow_camera.json b/src/plugins/directshow/directshow_camera.json
deleted file mode 100644
index c37ce2c9a..000000000
--- a/src/plugins/directshow/directshow_camera.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "Keys": ["directshow"],
- "Services": ["org.qt-project.qt.camera"]
-}
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index 64b30f561..727a11b55 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -51,9 +51,7 @@
#include <dshow.h>
#include "dscameraservice.h"
-#if QT_CONFIG(directshow_player)
#include "directshowplayerservice.h"
-#endif
#include <qmediaserviceproviderplugin.h>
@@ -95,12 +93,11 @@ QMediaService* DSServicePlugin::create(QString const& key)
addRefCount();
return new DSCameraService;
}
-#if QT_CONFIG(directshow_player)
+
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) {
addRefCount();
return new DirectShowPlayerService;
}
-#endif
return 0;
}
diff --git a/src/plugins/directshow/dsserviceplugin.h b/src/plugins/directshow/dsserviceplugin.h
index 2e87058c3..55db9310c 100644
--- a/src/plugins/directshow/dsserviceplugin.h
+++ b/src/plugins/directshow/dsserviceplugin.h
@@ -55,13 +55,7 @@ class DSServicePlugin
Q_INTERFACES(QMediaServiceSupportedDevicesInterface)
Q_INTERFACES(QMediaServiceDefaultDeviceInterface)
Q_INTERFACES(QMediaServiceFeaturesInterface)
- // The player service provided by the WMF-plugin should preferably be used.
- // DirectShow should then only provide the camera (see QTBUG-29172, QTBUG-29175).
-#if QT_CONFIG(directshow_player)
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow.json")
-#else
- Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow_camera.json")
-#endif
public:
QMediaService* create(QString const& key) override;
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
index 90d2b3e7d..52b73a7df 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
@@ -477,21 +477,14 @@ static QString convertBSTR(BSTR *string)
return value;
}
-void DirectShowMetaDataControl::reset()
+void DirectShowMetaDataControl::setMetadata(const QVariantMap &metadata)
{
- bool hadMetadata = !m_metadata.isEmpty();
- m_metadata.clear();
-
- setMetadataAvailable(false);
-
- if (hadMetadata)
- emit metaDataChanged();
+ m_metadata = metadata;
+ setMetadataAvailable(!m_metadata.isEmpty());
}
-void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, const QString &fileSrc)
+void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantMap &metadata)
{
- m_metadata.clear();
-
#if QT_CONFIG(wshellitem)
if (!sHCreateItemFromParsingName) {
QSystemLibrary lib(QStringLiteral("shell32"));
@@ -518,90 +511,90 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
continue;
if (IsEqualPropertyKey(key, PKEY_Author)) {
- m_metadata.insert(QMediaMetaData::Author, convertValue(var));
+ metadata.insert(QMediaMetaData::Author, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Title)) {
- m_metadata.insert(QMediaMetaData::Title, convertValue(var));
+ metadata.insert(QMediaMetaData::Title, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_SubTitle)) {
- m_metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
+ metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_ParentalRating)) {
- m_metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
+ metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Comment)) {
- m_metadata.insert(QMediaMetaData::Description, convertValue(var));
+ metadata.insert(QMediaMetaData::Description, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Copyright)) {
- m_metadata.insert(QMediaMetaData::Copyright, convertValue(var));
+ metadata.insert(QMediaMetaData::Copyright, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_ProviderStyle)) {
- m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
+ metadata.insert(QMediaMetaData::Genre, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Year)) {
- m_metadata.insert(QMediaMetaData::Year, convertValue(var));
+ metadata.insert(QMediaMetaData::Year, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_DateEncoded)) {
- m_metadata.insert(QMediaMetaData::Date, convertValue(var));
+ metadata.insert(QMediaMetaData::Date, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Rating)) {
- m_metadata.insert(QMediaMetaData::UserRating,
+ metadata.insert(QMediaMetaData::UserRating,
int((convertValue(var).toUInt() - 1) / qreal(98) * 100));
} else if (IsEqualPropertyKey(key, PKEY_Keywords)) {
- m_metadata.insert(QMediaMetaData::Keywords, convertValue(var));
+ metadata.insert(QMediaMetaData::Keywords, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Language)) {
- m_metadata.insert(QMediaMetaData::Language, convertValue(var));
+ metadata.insert(QMediaMetaData::Language, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Publisher)) {
- m_metadata.insert(QMediaMetaData::Publisher, convertValue(var));
+ metadata.insert(QMediaMetaData::Publisher, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Duration)) {
- m_metadata.insert(QMediaMetaData::Duration,
+ metadata.insert(QMediaMetaData::Duration,
(convertValue(var).toLongLong() + 10000) / 10000);
} else if (IsEqualPropertyKey(key, PKEY_Audio_EncodingBitrate)) {
- m_metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
+ metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_AverageLevel)) {
- m_metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
+ metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_ChannelCount)) {
- m_metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
+ metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_PeakValue)) {
- m_metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
+ metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Audio_SampleRate)) {
- m_metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
+ metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumTitle)) {
- m_metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
+ metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumArtist)) {
- m_metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
+ metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Artist)) {
- m_metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
+ metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Composer)) {
- m_metadata.insert(QMediaMetaData::Composer, convertValue(var));
+ metadata.insert(QMediaMetaData::Composer, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Conductor)) {
- m_metadata.insert(QMediaMetaData::Conductor, convertValue(var));
+ metadata.insert(QMediaMetaData::Conductor, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Lyrics)) {
- m_metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
+ metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Mood)) {
- m_metadata.insert(QMediaMetaData::Mood, convertValue(var));
+ metadata.insert(QMediaMetaData::Mood, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_TrackNumber)) {
- m_metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
+ metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Music_Genre)) {
- m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
+ metadata.insert(QMediaMetaData::Genre, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_ThumbnailStream)) {
- m_metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
+ metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameHeight)) {
QSize res;
res.setHeight(convertValue(var).toUInt());
if (SUCCEEDED(pStore->GetValue(PKEY_Video_FrameWidth, &var)))
res.setWidth(convertValue(var).toUInt());
- m_metadata.insert(QMediaMetaData::Resolution, res);
+ metadata.insert(QMediaMetaData::Resolution, res);
} else if (IsEqualPropertyKey(key, PKEY_Video_HorizontalAspectRatio)) {
QSize aspectRatio;
aspectRatio.setWidth(convertValue(var).toUInt());
if (SUCCEEDED(pStore->GetValue(PKEY_Video_VerticalAspectRatio, &var)))
aspectRatio.setHeight(convertValue(var).toUInt());
- m_metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
+ metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameRate)) {
- m_metadata.insert(QMediaMetaData::VideoFrameRate,
+ metadata.insert(QMediaMetaData::VideoFrameRate,
convertValue(var).toReal() / 1000);
} else if (IsEqualPropertyKey(key, PKEY_Video_EncodingBitrate)) {
- m_metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
+ metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_Director)) {
- m_metadata.insert(QMediaMetaData::Director, convertValue(var));
+ metadata.insert(QMediaMetaData::Director, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Media_Writer)) {
- m_metadata.insert(QMediaMetaData::Writer, convertValue(var));
+ metadata.insert(QMediaMetaData::Writer, convertValue(var));
} else if (IsEqualPropertyKey(key, PKEY_Video_Compression)) {
- m_metadata.insert(QMediaMetaData::VideoCodec, nameForGUIDString(convertValue(var).toString()));
+ metadata.insert(QMediaMetaData::VideoCodec, nameForGUIDString(convertValue(var).toString()));
} else if (IsEqualPropertyKey(key, PKEY_Audio_Format)) {
- m_metadata.insert(QMediaMetaData::AudioCodec, nameForGUIDString(convertValue(var).toString()));
+ metadata.insert(QMediaMetaData::AudioCodec, nameForGUIDString(convertValue(var).toString()));
}
PropVariantClear(&var);
@@ -614,11 +607,14 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
shellItem->Release();
}
}
-
- if (!m_metadata.isEmpty())
- goto send_event;
+#else
+ Q_UNUSED(fileSrc);
+ Q_UNUSED(metadata);
#endif
+}
+void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, QVariantMap &metadata)
+{
#if QT_CONFIG(wmsdk)
if (IWMHeaderInfo *info = com_cast<IWMHeaderInfo>(source, IID_IWMHeaderInfo)) {
const auto keys = *qt_wmMetaDataKeys();
@@ -644,15 +640,15 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
var = (var.toUInt() - 1) / qreal(98) * 100;
}
- m_metadata.insert(key.qtName, var);
+ metadata.insert(key.qtName, var);
}
}
info->Release();
}
- if (!m_metadata.isEmpty())
- goto send_event;
+ if (!metadata.isEmpty())
+ return;
#endif
{
IAMMediaContent *content = 0;
@@ -668,41 +664,23 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
BSTR string = 0;
if (content->get_AuthorName(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
if (content->get_Title(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Title, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Title, convertBSTR(&string));
if (content->get_Description(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Description, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Description, convertBSTR(&string));
if (content->get_Rating(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::UserRating, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::UserRating, convertBSTR(&string));
if (content->get_Copyright(&string) == S_OK)
- m_metadata.insert(QMediaMetaData::Copyright, convertBSTR(&string));
+ metadata.insert(QMediaMetaData::Copyright, convertBSTR(&string));
content->Release();
}
}
-
-send_event:
- // DirectShowMediaPlayerService holds a lock at this point so defer emitting signals to a later
- // time.
- QCoreApplication::postEvent(this, new QEvent(QEvent::Type(MetaDataChanged)));
-}
-
-void DirectShowMetaDataControl::customEvent(QEvent *event)
-{
- if (event->type() == QEvent::Type(MetaDataChanged)) {
- event->accept();
-
- setMetadataAvailable(!m_metadata.isEmpty());
-
- emit metaDataChanged();
- } else {
- QMetaDataReaderControl::customEvent(event);
- }
}
void DirectShowMetaDataControl::setMetadataAvailable(bool available)
@@ -711,5 +689,10 @@ void DirectShowMetaDataControl::setMetadataAvailable(bool available)
return;
m_available = available;
- emit metaDataAvailableChanged(m_available);
+
+ // If the metadata is not available, notify about it immediately.
+ Qt::ConnectionType type = m_available ? Qt::QueuedConnection : Qt::AutoConnection;
+ QMetaObject::invokeMethod(this, "metaDataAvailableChanged", type, Q_ARG(bool, m_available));
+ // Currently the metadata is changed only with its availability.
+ QMetaObject::invokeMethod(this, "metaDataChanged", type);
}
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h
index ea20bf0c5..4196a7950 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.h
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.h
@@ -62,12 +62,10 @@ public:
QVariant metaData(const QString &key) const override;
QStringList availableMetaData() const override;
- void reset();
- void updateMetadata(IFilterGraph2 *graph, IBaseFilter *source,
- const QString &fileSrc = QString());
+ void setMetadata(const QVariantMap &metadata);
-protected:
- void customEvent(QEvent *event) override;
+ static void updateMetadata(const QString &fileSrc, QVariantMap &metadata);
+ static void updateMetadata(IFilterGraph2 *graph, IBaseFilter *source, QVariantMap &metadata);
private:
void setMetadataAvailable(bool available);
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 08d99d735..d48350fa2 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -142,6 +142,7 @@ DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
, m_graphStatus(NoMedia)
, m_stream(0)
, m_graph(0)
+ , m_graphBuilder(nullptr)
, m_source(0)
, m_audioOutput(0)
, m_videoOutput(0)
@@ -297,7 +298,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
if (m_graph)
releaseGraph();
- m_resources = media.resources();
+ m_url = media.canonicalUrl();
m_stream = stream;
m_error = QMediaPlayer::NoError;
m_errorString = QString();
@@ -310,13 +311,11 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
m_seekable = false;
m_atEnd = false;
m_dontCacheNextSeekResult = false;
- m_metaDataControl->reset();
+ m_metaDataControl->setMetadata(QVariantMap());
- if (m_resources.isEmpty() && !stream) {
+ if (m_url.isEmpty() && !stream) {
m_pendingTasks = 0;
m_graphStatus = NoMedia;
-
- m_url.clear();
} else if (stream && (!stream->isReadable() || stream->isSequential())) {
m_pendingTasks = 0;
m_graphStatus = InvalidMedia;
@@ -328,6 +327,15 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
m_graphStatus = Loading;
m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph, iid_IFilterGraph2);
+ m_graphBuilder = com_new<ICaptureGraphBuilder2>(CLSID_CaptureGraphBuilder2, IID_ICaptureGraphBuilder2);
+
+ // Attach the filter graph to the capture graph.
+ HRESULT hr = m_graphBuilder->SetFiltergraph(m_graph);
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to attach filter to capture graph", hr);
+ m_graphBuilder->Release();
+ m_graphBuilder = nullptr;
+ }
if (stream)
m_pendingTasks = SetStreamSource;
@@ -348,9 +356,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
{
IBaseFilter *source = 0;
- QMediaResource resource = m_resources.takeFirst();
- m_url = resource.url();
-
HRESULT hr = E_FAIL;
if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) {
static const GUID clsid_WMAsfReader = {
@@ -403,7 +408,7 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
m_pendingTasks |= SetRate;
m_source = source;
- } else if (!m_resources.isEmpty()) {
+ } else if (!m_url.isEmpty()) {
m_pendingTasks |= SetUrlSource;
} else {
m_graphStatus = InvalidMedia;
@@ -596,7 +601,6 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker)
{
- Q_UNUSED(locker)
if (m_graphStatus != Loaded) {
if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph, IID_IMediaEvent)) {
event->GetEventHandle(reinterpret_cast<OAEVENT *>(&m_eventHandle));
@@ -625,6 +629,11 @@ void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker)
m_graphStatus = Loaded;
+ // Do not block gui thread while updating metadata from file.
+ locker->unlock();
+ DirectShowMetaDataControl::updateMetadata(m_url.toString(), m_metadata);
+ locker->relock();
+
QCoreApplication::postEvent(this, new QEvent(QEvent::Type(FinalizedLoad)));
}
@@ -674,6 +683,11 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker)
m_graph->Release();
m_graph = 0;
+ if (m_graphBuilder) {
+ m_graphBuilder->Release();
+ m_graphBuilder = nullptr;
+ }
+
m_loop->wake();
}
@@ -684,7 +698,7 @@ void DirectShowPlayerService::doSetVideoProbe(QMutexLocker *locker)
{
Q_UNUSED(locker);
- if (!m_graph) {
+ if (!m_graph || !m_graphBuilder) {
qCWarning(qtDirectShowPlugin, "Attempting to set a video probe without a valid graph!");
return;
}
@@ -700,41 +714,14 @@ void DirectShowPlayerService::doSetVideoProbe(QMutexLocker *locker)
return;
}
- // TODO: Make util function for getting this, so it's easy to keep it in sync.
- static const GUID subtypes[] = { MEDIASUBTYPE_ARGB32,
- MEDIASUBTYPE_RGB32,
- MEDIASUBTYPE_RGB24,
- MEDIASUBTYPE_RGB565,
- MEDIASUBTYPE_RGB555,
- MEDIASUBTYPE_AYUV,
- MEDIASUBTYPE_I420,
- MEDIASUBTYPE_IYUV,
- MEDIASUBTYPE_YV12,
- MEDIASUBTYPE_UYVY,
- MEDIASUBTYPE_YUYV,
- MEDIASUBTYPE_YUY2,
- MEDIASUBTYPE_NV12,
- MEDIASUBTYPE_MJPG,
- MEDIASUBTYPE_IMC1,
- MEDIASUBTYPE_IMC2,
- MEDIASUBTYPE_IMC3,
- MEDIASUBTYPE_IMC4 };
-
- // Negotiate the subtype
- DirectShowMediaType mediaType(AM_MEDIA_TYPE { MEDIATYPE_Video });
- const int items = (sizeof subtypes / sizeof(GUID));
- bool connected = false;
- for (int i = 0; i != items; ++i) {
- mediaType->subtype = subtypes[i];
- m_videoSampleGrabber->setMediaType(&mediaType);
- if (DirectShowUtils::connectFilters(m_graph, m_source, m_videoSampleGrabber->filter(), true)) {
- connected = true;
- break;
- }
- }
+ DirectShowMediaType mediaType({ MEDIATYPE_Video, MEDIASUBTYPE_ARGB32 });
+ m_videoSampleGrabber->setMediaType(&mediaType);
- if (!connected) {
- qCWarning(qtDirectShowPlugin, "Unable to connect the video probe!");
+ // Connect source filter to sample grabber filter.
+ HRESULT hr = m_graphBuilder->RenderStream(nullptr, &MEDIATYPE_Video,
+ m_source, nullptr, m_videoSampleGrabber->filter());
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to connect the video sample grabber", hr);
return;
}
@@ -765,8 +752,15 @@ void DirectShowPlayerService::doSetAudioProbe(QMutexLocker *locker)
}
if (!DirectShowUtils::connectFilters(m_graph, m_source, m_audioSampleGrabber->filter(), true)) {
- qCWarning(qtDirectShowPlugin, "Failed to connect the audio sample grabber");
- return;
+ // Connect source filter to sample grabber filter.
+ HRESULT hr = m_graphBuilder
+ ? m_graphBuilder->RenderStream(nullptr, &MEDIATYPE_Audio,
+ m_source, nullptr, m_audioSampleGrabber->filter())
+ : E_FAIL;
+ if (FAILED(hr)) {
+ qCWarning(qtDirectShowPlugin, "[0x%x] Failed to connect the audio sample grabber", hr);
+ return;
+ }
}
m_audioSampleGrabber->start(DirectShowSampleGrabber::CallbackMethod::BufferCB);
@@ -1406,7 +1400,11 @@ void DirectShowPlayerService::customEvent(QEvent *event)
QMutexLocker locker(&m_mutex);
m_playerControl->updateMediaInfo(m_duration, m_streamTypes, m_seekable);
- m_metaDataControl->updateMetadata(m_graph, m_source, m_url.toString());
+ if (m_metadata.isEmpty())
+ DirectShowMetaDataControl::updateMetadata(m_graph, m_source, m_metadata);
+
+ m_metaDataControl->setMetadata(m_metadata);
+ m_metadata.clear();
updateStatus();
} else if (event->type() == QEvent::Type(Error)) {
diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h
index 4a9e25678..a6eeb8a77 100644
--- a/src/plugins/directshow/player/directshowplayerservice.h
+++ b/src/plugins/directshow/player/directshowplayerservice.h
@@ -215,6 +215,7 @@ private:
QMediaPlayer::Error m_error;
QIODevice *m_stream;
IFilterGraph2 *m_graph;
+ ICaptureGraphBuilder2 *m_graphBuilder;
IBaseFilter *m_source;
IBaseFilter *m_audioOutput;
IBaseFilter *m_videoOutput;
@@ -224,13 +225,13 @@ private:
qint64 m_duration;
QMediaTimeRange m_playbackRange;
QUrl m_url;
- QMediaResourceList m_resources;
QString m_errorString;
QMutex m_mutex;
bool m_buffering;
bool m_seekable;
bool m_atEnd;
bool m_dontCacheNextSeekResult;
+ QVariantMap m_metadata;
friend class DirectShowPlayerServiceThread;
};
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 826d26bdb..74d59231c 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -462,6 +462,7 @@ HRESULT VideoSurfaceFilter::EndOfStream()
if (!m_pendingSample && m_running)
checkEOS();
+ stopSurface();
return S_OK;
}
diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
index 6ae41de0e..afda2346d 100644
--- a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
@@ -43,45 +43,12 @@
#include <gst/gst.h>
#include <gst/gstversion.h>
+#include <private/qgstutils_p.h>
#include <QDebug>
QT_BEGIN_NAMESPACE
-#if GST_CHECK_VERSION(0,10,30)
-
-static QVariant fromGStreamerOrientation(const QVariant &value)
-{
- // Note gstreamer tokens either describe the counter clockwise rotation of the
- // image or the clockwise transform to apply to correct the image. The orientation
- // value returned is the clockwise rotation of the image.
- const QString token = value.toString();
- if (token == QStringLiteral("rotate-90"))
- return 270;
- else if (token == QStringLiteral("rotate-180"))
- return 180;
- else if (token == QStringLiteral("rotate-270"))
- return 90;
- else
- return 0;
-}
-
-#endif
-
-static QVariant toGStreamerOrientation(const QVariant &value)
-{
- switch (value.toInt()) {
- case 90:
- return QStringLiteral("rotate-270");
- case 180:
- return QStringLiteral("rotate-180");
- case 270:
- return QStringLiteral("rotate-90");
- default:
- return QStringLiteral("rotate-0");
- }
-}
-
namespace {
struct QGStreamerMetaDataKey
{
@@ -196,7 +163,7 @@ QVariant CameraBinMetaData::metaData(const QString &key) const
{
#if GST_CHECK_VERSION(0,10,30)
if (key == QMediaMetaData::Orientation) {
- return fromGStreamerOrientation(m_values.value(QByteArray(GST_TAG_IMAGE_ORIENTATION)));
+ return QGstUtils::fromGStreamerOrientation(m_values.value(QByteArray(GST_TAG_IMAGE_ORIENTATION)));
} else if (key == QMediaMetaData::GPSSpeed) {
const double metersPerSec = m_values.value(QByteArray(GST_TAG_GEO_LOCATION_MOVEMENT_SPEED)).toDouble();
return (metersPerSec * 3600) / 1000;
@@ -214,14 +181,16 @@ QVariant CameraBinMetaData::metaData(const QString &key) const
void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
{
QVariant correctedValue = value;
+#if GST_CHECK_VERSION(0,10,30)
if (value.isValid()) {
if (key == QMediaMetaData::Orientation) {
- correctedValue = toGStreamerOrientation(value);
+ correctedValue = QGstUtils::toGStreamerOrientation(value);
} else if (key == QMediaMetaData::GPSSpeed) {
// kilometers per hour to meters per second.
correctedValue = (value.toDouble() * 1000) / 3600;
}
}
+#endif
const auto keys = *qt_gstreamerMetaDataKeys();
for (const QGStreamerMetaDataKey &metadataKey : keys) {
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index 23cbd6082..f064c7c92 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -541,13 +541,26 @@ GstElement *CameraBinSession::buildCameraSource()
if (!m_videoSrc)
m_videoSrc = gst_element_factory_make("v4l2src", "camera_source");
+ if (!m_videoSrc)
+ m_videoSrc = gst_element_factory_make("ksvideosrc", "camera_source");
+
+ if (!m_videoSrc)
+ m_videoSrc = gst_element_factory_make("avfvideosrc", "camera_source");
+
if (m_videoSrc)
g_object_set(G_OBJECT(m_cameraSrc), "video-source", m_videoSrc, NULL);
}
- if (m_videoSrc)
- g_object_set(G_OBJECT(m_videoSrc), "device", m_inputDevice.toUtf8().constData(), NULL);
+ if (m_videoSrc) {
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "device"))
+ g_object_set(G_OBJECT(m_videoSrc), "device", m_inputDevice.toUtf8().constData(), NULL);
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "device-path"))
+ g_object_set(G_OBJECT(m_videoSrc), "device-path", m_inputDevice.toUtf8().constData(), NULL);
+
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "device-index"))
+ g_object_set(G_OBJECT(m_videoSrc), "device-index", m_inputDevice.toInt(), NULL);
+ }
} else if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_cameraSrc), "camera-device")) {
if (m_inputDevice == QLatin1String("secondary")) {
g_object_set(G_OBJECT(m_cameraSrc), "camera-device", 1, NULL);
@@ -1177,11 +1190,16 @@ void CameraBinSession::recordVideo()
if (format.isEmpty())
format = m_mediaContainerControl->actualContainerFormat();
- const QString actualFileName = m_mediaStorageLocation.generateFileName(m_sink.isLocalFile() ? m_sink.toLocalFile()
- : m_sink.toString(),
+ const QString fileName = m_sink.isLocalFile() ? m_sink.toLocalFile() : m_sink.toString();
+ const QFileInfo fileInfo(fileName);
+ const QString extension = fileInfo.suffix().isEmpty()
+ ? QGstUtils::fileExtensionForMimeType(format)
+ : fileInfo.suffix();
+
+ const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName,
QMediaStorageLocation::Movies,
QLatin1String("clip_"),
- QGstUtils::fileExtensionForMimeType(format));
+ extension);
m_recordingActive = true;
m_actualSink = QUrl::fromLocalFile(actualFileName);
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 50ab0256b..8f2f6643c 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -43,6 +43,7 @@
#include <QtMultimedia/qmediametadata.h>
#include <gst/gstversion.h>
+#include <private/qgstutils_p.h>
QT_BEGIN_NAMESPACE
@@ -99,6 +100,9 @@ static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys()
// Image/Video
metadataKeys->insert("resolution", QMediaMetaData::Resolution);
metadataKeys->insert("pixel-aspect-ratio", QMediaMetaData::PixelAspectRatio);
+#if GST_CHECK_VERSION(0,10,30)
+ metadataKeys->insert(GST_TAG_IMAGE_ORIENTATION, QMediaMetaData::Orientation);
+#endif
// Video
//metadataKeys->insert(0, QMediaMetaData::VideoFrameRate);
@@ -145,6 +149,10 @@ bool QGstreamerMetaDataProvider::isWritable() const
QVariant QGstreamerMetaDataProvider::metaData(const QString &key) const
{
+#if GST_CHECK_VERSION(0,10,30)
+ if (key == QMediaMetaData::Orientation)
+ return QGstUtils::fromGStreamerOrientation(m_tags.value(key));
+#endif
return m_tags.value(key);
}
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 71b9ec6e1..95c004125 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -44,12 +44,10 @@ winrt {
audiocapture
}
+qtConfig(gstreamer): SUBDIRS += gstreamer
+
unix:!mac:!android {
- qtConfig(gstreamer) {
- SUBDIRS += gstreamer
- } else {
- SUBDIRS += audiocapture
- }
+ !qtConfig(gstreamer): SUBDIRS += audiocapture
qtConfig(pulseaudio): SUBDIRS += pulseaudio
qtConfig(alsa): SUBDIRS += alsa
diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
index ea7a2be0c..19ddac1e5 100644
--- a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
+++ b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
@@ -310,7 +310,34 @@ bool QPulseAudioOutput::open()
if (!m_category.isNull())
pa_proplist_sets(propList, PA_PROP_MEDIA_ROLE, m_category.toLatin1().constData());
- m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, 0, propList);
+ static const auto mapName = qEnvironmentVariable("QT_PA_CHANNEL_MAP");
+ pa_channel_map_def_t mapDef = PA_CHANNEL_MAP_DEFAULT;
+ if (mapName == QLatin1String("ALSA"))
+ mapDef = PA_CHANNEL_MAP_ALSA;
+ else if (mapName == QLatin1String("AUX"))
+ mapDef = PA_CHANNEL_MAP_AUX;
+ else if (mapName == QLatin1String("WAVEEX"))
+ mapDef = PA_CHANNEL_MAP_WAVEEX;
+ else if (mapName == QLatin1String("OSS"))
+ mapDef = PA_CHANNEL_MAP_OSS;
+ else if (!mapName.isEmpty())
+ qWarning() << "Unknown pulse audio channel mapping definition:" << mapName;
+
+ pa_channel_map m;
+ auto channelMap = pa_channel_map_init_extend(&m, m_spec.channels, mapDef);
+ if (!channelMap)
+ qWarning() << "QAudioOutput: pa_channel_map_init_extend() Could not initialize channel map";
+
+ m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, channelMap, propList);
+ if (!m_stream) {
+ qWarning() << "QAudioOutput: pa_stream_new_with_proplist() failed!";
+ pulseEngine->unlock();
+ setError(QAudio::OpenError);
+ setState(QAudio::StoppedState);
+ emit stateChanged(m_deviceState);
+ return false;
+ }
+
pa_proplist_free(propList);
pa_stream_set_state_callback(m_stream, outputStreamStateCallback, this);
@@ -469,8 +496,7 @@ void QPulseAudioOutput::userFeed()
if (m_notifyInterval && (m_timeStamp.elapsed() + m_elapsedTimeOffset) > m_notifyInterval) {
emit notify();
- m_elapsedTimeOffset = m_timeStamp.elapsed() + m_elapsedTimeOffset - m_notifyInterval;
- m_timeStamp.restart();
+ m_elapsedTimeOffset = m_timeStamp.restart() + m_elapsedTimeOffset - m_notifyInterval;
}
}
diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.h b/src/plugins/pulseaudio/qaudiooutput_pulse.h
index 58f175e18..40d052681 100644
--- a/src/plugins/pulseaudio/qaudiooutput_pulse.h
+++ b/src/plugins/pulseaudio/qaudiooutput_pulse.h
@@ -55,7 +55,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include "qaudio.h"
@@ -131,11 +131,11 @@ private:
int m_periodSize;
int m_bufferSize;
int m_maxBufferSize;
- QTime m_clockStamp;
+ QElapsedTimer m_clockStamp;
qint64 m_totalTimeValue;
QTimer *m_tickTimer;
char *m_audioBuffer;
- QTime m_timeStamp;
+ QElapsedTimer m_timeStamp;
qint64 m_elapsedTimeOffset;
bool m_resuming;
QString m_category;
diff --git a/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp b/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
index 438c2aae0..c0eada324 100644
--- a/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
+++ b/src/plugins/wmf/decoder/mfaudiodecodercontrol.cpp
@@ -124,14 +124,12 @@ void MFAudioDecoderControl::setSourceFilename(const QString &fileName)
m_sourceFilename = fileName;
if (!m_sourceFilename.isEmpty()) {
m_sourceResolver->shutdown();
- QMediaResourceList rl;
QUrl url;
if (m_sourceFilename.startsWith(':'))
url = QUrl(QStringLiteral("qrc%1").arg(m_sourceFilename));
else
url = QUrl::fromLocalFile(m_sourceFilename);
- rl.push_back(QMediaResource(url));
- m_sourceResolver->load(rl, 0);
+ m_sourceResolver->load(url, 0);
m_loadingSource = true;
} else {
onSourceCleared();
@@ -155,7 +153,7 @@ void MFAudioDecoderControl::setSourceDevice(QIODevice *device)
m_device = device;
if (m_device) {
m_sourceResolver->shutdown();
- m_sourceResolver->load(QMediaResourceList(), m_device);
+ m_sourceResolver->load(QUrl(), m_device);
m_loadingSource = true;
} else {
onSourceCleared();
diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp
index 3219936a7..9f909252d 100644
--- a/src/plugins/wmf/player/mfplayersession.cpp
+++ b/src/plugins/wmf/player/mfplayersession.cpp
@@ -197,12 +197,12 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
qDebug() << "load";
#endif
clear();
- QMediaResourceList resources = media.resources();
+ QUrl url = media.canonicalUrl();
if (m_status == QMediaPlayer::LoadingMedia && m_sourceResolver)
m_sourceResolver->cancel();
- if (resources.isEmpty() && !stream) {
+ if (url.isEmpty() && !stream) {
changeStatus(QMediaPlayer::NoMedia);
} else if (stream && (!stream->isReadable())) {
changeStatus(QMediaPlayer::InvalidMedia);
@@ -210,7 +210,7 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
} else {
createSession();
changeStatus(QMediaPlayer::LoadingMedia);
- m_sourceResolver->load(resources, stream);
+ m_sourceResolver->load(url, stream);
}
emit positionChanged(position());
}
diff --git a/src/plugins/wmf/player/mfplayersession.h b/src/plugins/wmf/player/mfplayersession.h
index 72dc99d02..21fabbd92 100644
--- a/src/plugins/wmf/player/mfplayersession.h
+++ b/src/plugins/wmf/player/mfplayersession.h
@@ -62,9 +62,6 @@ QT_END_NAMESPACE
QT_USE_NAMESPACE
class SourceResolver;
-#ifndef Q_WS_SIMULATOR
-class EvrVideoWindowControl;
-#endif
class MFAudioEndpointControl;
class MFVideoRendererControl;
class MFPlayerControl;
diff --git a/src/plugins/wmf/sourceresolver.cpp b/src/plugins/wmf/sourceresolver.cpp
index 83949c976..c6f4e8566 100644
--- a/src/plugins/wmf/sourceresolver.cpp
+++ b/src/plugins/wmf/sourceresolver.cpp
@@ -158,7 +158,7 @@ HRESULT STDMETHODCALLTYPE SourceResolver::GetParameters(DWORD*, DWORD*)
return E_NOTIMPL;
}
-void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream)
+void SourceResolver::load(const QUrl &url, QIODevice* stream)
{
QMutexLocker locker(&m_mutex);
HRESULT hr = S_OK;
@@ -174,12 +174,10 @@ void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream
qWarning() << "Failed to create Source Resolver!";
emit error(hr);
} else if (stream) {
- QString url;
- if (!resources.isEmpty())
- url = resources.constFirst().url().toString();
+ QString urlString = url.toString();
m_stream = new MFStream(stream, false);
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
- m_stream, url.isEmpty() ? 0 : reinterpret_cast<LPCWSTR>(url.utf16()),
+ m_stream, urlString.isEmpty() ? 0 : reinterpret_cast<LPCWSTR>(urlString.utf16()),
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
if (FAILED(hr)) {
@@ -187,8 +185,6 @@ void SourceResolver::load(const QMediaResourceList &resources, QIODevice* stream
emit error(hr);
}
} else {
- QMediaResource resource = resources.constFirst();
- QUrl url = resource.url();
#ifdef DEBUG_MEDIAFOUNDATION
qDebug() << "loading :" << url;
qDebug() << "url path =" << url.path().mid(1);
diff --git a/src/plugins/wmf/sourceresolver.h b/src/plugins/wmf/sourceresolver.h
index 387f59739..aa104a60e 100644
--- a/src/plugins/wmf/sourceresolver.h
+++ b/src/plugins/wmf/sourceresolver.h
@@ -59,7 +59,7 @@ public:
HRESULT STDMETHODCALLTYPE GetParameters(DWORD*, DWORD*);
- void load(const QMediaResourceList &resources, QIODevice* stream);
+ void load(const QUrl &url, QIODevice* stream);
void cancel();
diff --git a/src/plugins/wmf/wmf.pro b/src/plugins/wmf/wmf.pro
index b202ff2a1..7c712233d 100644
--- a/src/plugins/wmf/wmf.pro
+++ b/src/plugins/wmf/wmf.pro
@@ -17,12 +17,11 @@ SOURCES += \
mfstream.cpp \
sourceresolver.cpp
-qtConfig(wmf-player): include (player/player.pri)
+include (player/player.pri)
include (decoder/decoder.pri)
OTHER_FILES += \
- wmf.json \
- wmf_audiodecode.json
+ wmf.json
PLUGIN_TYPE = mediaservice
PLUGIN_CLASS_NAME = WMFServicePlugin
diff --git a/src/plugins/wmf/wmf_audiodecode.json b/src/plugins/wmf/wmf_audiodecode.json
deleted file mode 100644
index 2a65dd758..000000000
--- a/src/plugins/wmf/wmf_audiodecode.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "Keys": ["windowsmediafoundation"],
- "Services": ["org.qt-project.qt.audiodecode"]
-}
diff --git a/src/plugins/wmf/wmfserviceplugin.cpp b/src/plugins/wmf/wmfserviceplugin.cpp
index 1eeb22428..740067600 100644
--- a/src/plugins/wmf/wmfserviceplugin.cpp
+++ b/src/plugins/wmf/wmfserviceplugin.cpp
@@ -42,9 +42,7 @@
#include <QtCore/QFile>
#include "wmfserviceplugin.h"
-#if QT_CONFIG(wmf_player)
#include "mfplayerservice.h"
-#endif
#include "mfdecoderservice.h"
#include <mfapi.h>
@@ -74,12 +72,11 @@ void releaseRefCount()
QMediaService* WMFServicePlugin::create(QString const& key)
{
-#if QT_CONFIG(wmf_player)
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) {
addRefCount();
return new MFPlayerService;
}
-#endif
+
if (key == QLatin1String(Q_MEDIASERVICE_AUDIODECODER)) {
addRefCount();
return new MFAudioDecoderService;
@@ -97,13 +94,9 @@ void WMFServicePlugin::release(QMediaService *service)
QMediaServiceProviderHint::Features WMFServicePlugin::supportedFeatures(
const QByteArray &service) const
{
-#if QT_CONFIG(wmf_player)
if (service == Q_MEDIASERVICE_MEDIAPLAYER)
return QMediaServiceProviderHint::StreamPlayback;
else
-#else
- Q_UNUSED(service);
-#endif
return QMediaServiceProviderHint::Features();
}
diff --git a/src/plugins/wmf/wmfserviceplugin.h b/src/plugins/wmf/wmfserviceplugin.h
index 826ca1d26..493a0b08c 100644
--- a/src/plugins/wmf/wmfserviceplugin.h
+++ b/src/plugins/wmf/wmfserviceplugin.h
@@ -55,11 +55,8 @@ class WMFServicePlugin
Q_INTERFACES(QMediaServiceSupportedDevicesInterface)
Q_INTERFACES(QMediaServiceDefaultDeviceInterface)
Q_INTERFACES(QMediaServiceFeaturesInterface)
-#if QT_CONFIG(wmf_player)
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "wmf.json")
-#else
- Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "wmf_audiodecode.json")
-#endif
+
public:
QMediaService* create(QString const& key);
void release(QMediaService *service);