Add audio role API to QMediaPlayer.
Change-Id: Ia5e3e2fe714f10b6aad62f0a4801c607905c7e0d Task-number: QTBUG-41054 Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
This commit is contained in:
@@ -13,3 +13,7 @@ SOURCES += \
|
||||
|
||||
INCLUDEPATH += ../../../../src/imports/multimedia
|
||||
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
|
||||
|
||||
include (../qmultimedia_common/mock.pri)
|
||||
include (../qmultimedia_common/mockplayer.pri)
|
||||
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
#include "qdeclarativeaudio_p.h"
|
||||
#include "qdeclarativemediametadata_p.h"
|
||||
|
||||
#include "mockmediaserviceprovider.h"
|
||||
#include "mockmediaplayerservice.h"
|
||||
|
||||
#include <QtMultimedia/qmediametadata.h>
|
||||
#include <qmediaplayercontrol.h>
|
||||
#include <qmediaservice.h>
|
||||
@@ -45,6 +48,8 @@
|
||||
#include <qmetadatareadercontrol.h>
|
||||
|
||||
#include <QtGui/qguiapplication.h>
|
||||
#include <QtQml/qqmlengine.h>
|
||||
#include <QtQml/qqmlcomponent.h>
|
||||
|
||||
class tst_QDeclarativeAudio : public QObject
|
||||
{
|
||||
@@ -73,9 +78,11 @@ private slots:
|
||||
void metaData();
|
||||
void error();
|
||||
void loops();
|
||||
void audioRole();
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(QDeclarativeAudio::Error);
|
||||
Q_DECLARE_METATYPE(QDeclarativeAudio::AudioRole);
|
||||
|
||||
class QtTestMediaPlayerControl : public QMediaPlayerControl
|
||||
{
|
||||
@@ -285,6 +292,7 @@ public:
|
||||
void tst_QDeclarativeAudio::initTestCase()
|
||||
{
|
||||
qRegisterMetaType<QDeclarativeAudio::Error>();
|
||||
qRegisterMetaType<QDeclarativeAudio::AudioRole>();
|
||||
}
|
||||
|
||||
void tst_QDeclarativeAudio::nullPlayerControl()
|
||||
@@ -1007,6 +1015,47 @@ void tst_QDeclarativeAudio::loops()
|
||||
qDebug() << "Testing version 5";
|
||||
}
|
||||
|
||||
void tst_QDeclarativeAudio::audioRole()
|
||||
{
|
||||
MockMediaPlayerService mockService;
|
||||
MockMediaServiceProvider mockProvider(&mockService);
|
||||
QMediaServiceProvider::setDefaultServiceProvider(&mockProvider);
|
||||
|
||||
QQmlEngine engine;
|
||||
QQmlComponent component(&engine);
|
||||
component.setData("import QtQuick 2.0 \n import QtMultimedia 5.6 \n Audio { }", QUrl());
|
||||
|
||||
{
|
||||
mockService.setHasAudioRole(false);
|
||||
QDeclarativeAudio *audio = static_cast<QDeclarativeAudio*>(component.create());
|
||||
|
||||
QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
|
||||
QVERIFY(audio->supportedAudioRoles().isArray());
|
||||
QVERIFY(audio->supportedAudioRoles().toVariant().toList().isEmpty());
|
||||
|
||||
QSignalSpy spy(audio, SIGNAL(audioRoleChanged()));
|
||||
audio->setAudioRole(QDeclarativeAudio::MusicRole);
|
||||
QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
|
||||
QCOMPARE(spy.count(), 0);
|
||||
}
|
||||
|
||||
{
|
||||
mockService.reset();
|
||||
mockService.setHasAudioRole(true);
|
||||
QDeclarativeAudio *audio = static_cast<QDeclarativeAudio*>(component.create());
|
||||
QSignalSpy spy(audio, SIGNAL(audioRoleChanged()));
|
||||
|
||||
QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
|
||||
QVERIFY(audio->supportedAudioRoles().isArray());
|
||||
QVERIFY(!audio->supportedAudioRoles().toVariant().toList().isEmpty());
|
||||
|
||||
audio->setAudioRole(QDeclarativeAudio::MusicRole);
|
||||
QCOMPARE(audio->audioRole(), QDeclarativeAudio::MusicRole);
|
||||
QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::MusicRole);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QDeclarativeAudio)
|
||||
|
||||
#include "tst_qdeclarativeaudio.moc"
|
||||
|
||||
@@ -135,6 +135,7 @@ private slots:
|
||||
void testSupportedMimeTypes();
|
||||
void testQrc_data();
|
||||
void testQrc();
|
||||
void testAudioRole();
|
||||
|
||||
private:
|
||||
void setupCommonTestData();
|
||||
@@ -1296,5 +1297,45 @@ void tst_QMediaPlayer::testQrc()
|
||||
QCOMPARE(bool(mockService->mockControl->mediaStream()), backendHasStream);
|
||||
}
|
||||
|
||||
void tst_QMediaPlayer::testAudioRole()
|
||||
{
|
||||
{
|
||||
mockService->setHasAudioRole(false);
|
||||
QMediaPlayer player;
|
||||
|
||||
QCOMPARE(player.audioRole(), QAudio::UnknownRole);
|
||||
QVERIFY(player.supportedAudioRoles().isEmpty());
|
||||
|
||||
QSignalSpy spy(&player, SIGNAL(audioRoleChanged(QAudio::Role)));
|
||||
player.setAudioRole(QAudio::MusicRole);
|
||||
QCOMPARE(player.audioRole(), QAudio::UnknownRole);
|
||||
QCOMPARE(spy.count(), 0);
|
||||
}
|
||||
|
||||
{
|
||||
mockService->reset();
|
||||
mockService->setHasAudioRole(true);
|
||||
QMediaPlayer player;
|
||||
QSignalSpy spy(&player, SIGNAL(audioRoleChanged(QAudio::Role)));
|
||||
|
||||
QCOMPARE(player.audioRole(), QAudio::UnknownRole);
|
||||
QVERIFY(!player.supportedAudioRoles().isEmpty());
|
||||
|
||||
player.setAudioRole(QAudio::MusicRole);
|
||||
QCOMPARE(player.audioRole(), QAudio::MusicRole);
|
||||
QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::MusicRole);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QAudio::Role>(spy.last().value(0)), QAudio::MusicRole);
|
||||
|
||||
spy.clear();
|
||||
|
||||
player.setProperty("audioRole", qVariantFromValue(QAudio::AlarmRole));
|
||||
QCOMPARE(qvariant_cast<QAudio::Role>(player.property("audioRole")), QAudio::AlarmRole);
|
||||
QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::AlarmRole);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QAudio::Role>(spy.last().value(0)), QAudio::AlarmRole);
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(tst_QMediaPlayer)
|
||||
#include "tst_qmediaplayer.moc"
|
||||
|
||||
72
tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h
Normal file
72
tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** 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 http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://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 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef MOCKAUDIOROLECONTROL_H
|
||||
#define MOCKAUDIOROLECONTROL_H
|
||||
|
||||
#include <qaudiorolecontrol.h>
|
||||
|
||||
class MockAudioRoleControl : public QAudioRoleControl
|
||||
{
|
||||
friend class MockMediaPlayerService;
|
||||
|
||||
public:
|
||||
MockAudioRoleControl()
|
||||
: QAudioRoleControl()
|
||||
, m_audioRole(QAudio::UnknownRole)
|
||||
{
|
||||
}
|
||||
|
||||
QAudio::Role audioRole() const
|
||||
{
|
||||
return m_audioRole;
|
||||
}
|
||||
|
||||
void setAudioRole(QAudio::Role role)
|
||||
{
|
||||
if (role != m_audioRole)
|
||||
emit audioRoleChanged(m_audioRole = role);
|
||||
}
|
||||
|
||||
QList<QAudio::Role> supportedAudioRoles() const
|
||||
{
|
||||
return QList<QAudio::Role>() << QAudio::MusicRole
|
||||
<< QAudio::AlarmRole
|
||||
<< QAudio::NotificationRole;
|
||||
}
|
||||
|
||||
QAudio::Role m_audioRole;
|
||||
};
|
||||
|
||||
#endif // MOCKAUDIOROLECONTROL_H
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "mockvideorenderercontrol.h"
|
||||
#include "mockvideoprobecontrol.h"
|
||||
#include "mockvideowindowcontrol.h"
|
||||
#include "mockaudiorolecontrol.h"
|
||||
|
||||
class MockMediaPlayerService : public QMediaService
|
||||
{
|
||||
@@ -51,6 +52,7 @@ public:
|
||||
MockMediaPlayerService():QMediaService(0)
|
||||
{
|
||||
mockControl = new MockMediaPlayerControl;
|
||||
mockAudioRoleControl = new MockAudioRoleControl;
|
||||
mockStreamsControl = new MockStreamsControl;
|
||||
mockNetworkControl = new MockNetworkAccessControl;
|
||||
rendererControl = new MockVideoRendererControl;
|
||||
@@ -58,11 +60,13 @@ public:
|
||||
mockVideoProbeControl = new MockVideoProbeControl;
|
||||
windowControl = new MockVideoWindowControl;
|
||||
windowRef = 0;
|
||||
enableAudioRole = true;
|
||||
}
|
||||
|
||||
~MockMediaPlayerService()
|
||||
{
|
||||
delete mockControl;
|
||||
delete mockAudioRoleControl;
|
||||
delete mockStreamsControl;
|
||||
delete mockNetworkControl;
|
||||
delete rendererControl;
|
||||
@@ -87,6 +91,8 @@ public:
|
||||
windowRef += 1;
|
||||
return windowControl;
|
||||
}
|
||||
} else if (enableAudioRole && qstrcmp(iid, QAudioRoleControl_iid) == 0) {
|
||||
return mockAudioRoleControl;
|
||||
}
|
||||
|
||||
if (qstrcmp(iid, QMediaNetworkAccessControl_iid) == 0)
|
||||
@@ -125,6 +131,8 @@ public:
|
||||
|
||||
void selectCurrentConfiguration(QNetworkConfiguration config) { mockNetworkControl->setCurrentConfiguration(config); }
|
||||
|
||||
void setHasAudioRole(bool enable) { enableAudioRole = enable; }
|
||||
|
||||
void reset()
|
||||
{
|
||||
mockControl->_state = QMediaPlayer::StoppedState;
|
||||
@@ -143,11 +151,15 @@ public:
|
||||
mockControl->_isValid = false;
|
||||
mockControl->_errorString = QString();
|
||||
|
||||
enableAudioRole = true;
|
||||
mockAudioRoleControl->m_audioRole = QAudio::UnknownRole;
|
||||
|
||||
mockNetworkControl->_current = QNetworkConfiguration();
|
||||
mockNetworkControl->_configurations = QList<QNetworkConfiguration>();
|
||||
}
|
||||
|
||||
MockMediaPlayerControl *mockControl;
|
||||
MockAudioRoleControl *mockAudioRoleControl;
|
||||
MockStreamsControl *mockStreamsControl;
|
||||
MockNetworkAccessControl *mockNetworkControl;
|
||||
MockVideoRendererControl *rendererControl;
|
||||
@@ -155,6 +167,7 @@ public:
|
||||
MockVideoWindowControl *windowControl;
|
||||
int windowRef;
|
||||
int rendererRef;
|
||||
bool enableAudioRole;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ HEADERS *= \
|
||||
../qmultimedia_common/mockmediaplayercontrol.h \
|
||||
../qmultimedia_common/mockmediastreamscontrol.h \
|
||||
../qmultimedia_common/mockmedianetworkaccesscontrol.h \
|
||||
../qmultimedia_common/mockvideoprobecontrol.h
|
||||
../qmultimedia_common/mockvideoprobecontrol.h \
|
||||
../qmultimedia_common/mockaudiorolecontrol.h
|
||||
|
||||
include(mockvideo.pri)
|
||||
|
||||
Reference in New Issue
Block a user