Merge remote-tracking branch 'origin/stable' into dev

Conflicts:
	.qmake.conf

Change-Id: I6ea9c40c69f55fa733fd9000a57d570fff21f1e9
This commit is contained in:
Frederik Gladhorn
2013-11-29 16:03:52 +01:00
13 changed files with 95 additions and 25 deletions

View File

@@ -0,0 +1,6 @@
SOURCES = mmrenderertest.cpp
CONFIG -= qt
LIBS += -lmmrndclient -lstrm

View File

@@ -0,0 +1,50 @@
/****************************************************************************
**
** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation 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 Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/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 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <mm/renderer.h>
int main(int argc,char **argv)
{
mmr_connect(0);
return 0;
}

View File

@@ -16,6 +16,8 @@ win32 {
SDK_ROOT = $$(ANDROID_SDK_ROOT) SDK_ROOT = $$(ANDROID_SDK_ROOT)
isEmpty(SDK_ROOT): SDK_ROOT = $$DEFAULT_ANDROID_SDK_ROOT isEmpty(SDK_ROOT): SDK_ROOT = $$DEFAULT_ANDROID_SDK_ROOT
!exists($$SDK_ROOT/platforms/android-11/android.jar): error("QtMultimedia for Android requires API level 11") !exists($$SDK_ROOT/platforms/android-11/android.jar): error("QtMultimedia for Android requires API level 11")
} else:qnx {
qtCompileTest(mmrenderer)
} else { } else {
qtCompileTest(alsa) qtCompileTest(alsa)
qtCompileTest(pulseaudio) qtCompileTest(pulseaudio)

View File

@@ -3,4 +3,3 @@ plugin declarative_multimedia
classname QMultimediaDeclarativeModule classname QMultimediaDeclarativeModule
typeinfo plugins.qmltypes typeinfo plugins.qmltypes
Video 5.0 Video.qml Video 5.0 Video.qml
classname QMultimediaDeclarativeModule

View File

@@ -265,7 +265,7 @@ int QSoundEffect::loopsRemaining() const
*/ */
qreal QSoundEffect::volume() const qreal QSoundEffect::volume() const
{ {
return qreal(d->volume()) / 100; return d->volume();
} }
/*! /*!
@@ -273,15 +273,15 @@ qreal QSoundEffect::volume() const
*/ */
void QSoundEffect::setVolume(qreal volume) void QSoundEffect::setVolume(qreal volume)
{ {
if (volume < 0 || volume > 1) { if (volume < qreal(0.0) || volume > qreal(1.0)) {
qWarning("SoundEffect: volume should be between 0.0 and 1.0"); qWarning("SoundEffect: volume should be between 0.0 and 1.0");
return; return;
} }
int iVolume = qRound(volume * 100);
if (d->volume() == iVolume) if (qFuzzyCompare(d->volume(), volume))
return; return;
d->setVolume(iVolume); d->setVolume(volume);
} }
/*! /*!

View File

@@ -382,7 +382,7 @@ QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
m_muted(false), m_muted(false),
m_playQueued(false), m_playQueued(false),
m_stopping(false), m_stopping(false),
m_volume(100), m_volume(1.0),
m_loopCount(1), m_loopCount(1),
m_runningCount(0), m_runningCount(0),
m_reloadCategory(false), m_reloadCategory(false),
@@ -517,12 +517,12 @@ void QSoundEffectPrivate::setLoopCount(int loopCount)
m_loopCount = loopCount; m_loopCount = loopCount;
} }
int QSoundEffectPrivate::volume() const qreal QSoundEffectPrivate::volume() const
{ {
return m_volume; return m_volume;
} }
void QSoundEffectPrivate::setVolume(int volume) void QSoundEffectPrivate::setVolume(qreal volume)
{ {
m_volume = volume; m_volume = volume;
emit volumeChanged(); emit volumeChanged();
@@ -537,7 +537,7 @@ void QSoundEffectPrivate::updateVolume()
pa_cvolume volume; pa_cvolume volume;
volume.channels = m_pulseSpec.channels; volume.channels = m_pulseSpec.channels;
if (pulseDaemon()->context()) if (pulseDaemon()->context())
pa_operation_unref(pa_context_set_sink_input_volume(pulseDaemon()->context(), m_sinkInputId, pulseDaemon()->calcVolume(&volume, m_volume), setvolume_callback, m_ref->getRef())); pa_operation_unref(pa_context_set_sink_input_volume(pulseDaemon()->context(), m_sinkInputId, pulseDaemon()->calcVolume(&volume, qRound(m_volume * 100)), setvolume_callback, m_ref->getRef()));
Q_ASSERT(pa_cvolume_valid(&volume)); Q_ASSERT(pa_cvolume_valid(&volume));
#ifdef QT_PA_DEBUG #ifdef QT_PA_DEBUG
qDebug() << this << "updateVolume =" << pa_cvolume_max(&volume); qDebug() << this << "updateVolume =" << pa_cvolume_max(&volume);

View File

@@ -80,8 +80,8 @@ public:
int loopCount() const; int loopCount() const;
int loopsRemaining() const; int loopsRemaining() const;
void setLoopCount(int loopCount); void setLoopCount(int loopCount);
int volume() const; qreal volume() const;
void setVolume(int volume); void setVolume(qreal volume);
bool isMuted() const; bool isMuted() const;
void setMuted(bool muted); void setMuted(bool muted);
bool isLoaded() const; bool isLoaded() const;
@@ -153,7 +153,7 @@ private:
bool m_muted; bool m_muted;
bool m_playQueued; bool m_playQueued;
bool m_stopping; bool m_stopping;
int m_volume; qreal m_volume;
int m_loopCount; int m_loopCount;
int m_runningCount; int m_runningCount;
QUrl m_source; QUrl m_source;

View File

@@ -175,20 +175,20 @@ void QSoundEffectPrivate::setLoopCount(int loopCount)
d->m_runningCount = loopCount; d->m_runningCount = loopCount;
} }
int QSoundEffectPrivate::volume() const qreal QSoundEffectPrivate::volume() const
{ {
if (d->m_audioOutput && !d->m_muted) if (d->m_audioOutput && !d->m_muted)
return d->m_audioOutput->volume()*100.0f; return d->m_audioOutput->volume();
return d->m_volume; return d->m_volume;
} }
void QSoundEffectPrivate::setVolume(int volume) void QSoundEffectPrivate::setVolume(qreal volume)
{ {
d->m_volume = volume; d->m_volume = volume;
if (d->m_audioOutput && !d->m_muted) if (d->m_audioOutput && !d->m_muted)
d->m_audioOutput->setVolume(volume/100.0f); d->m_audioOutput->setVolume(volume);
emit volumeChanged(); emit volumeChanged();
} }
@@ -203,7 +203,7 @@ void QSoundEffectPrivate::setMuted(bool muted)
if (muted && d->m_audioOutput) if (muted && d->m_audioOutput)
d->m_audioOutput->setVolume(0); d->m_audioOutput->setVolume(0);
else if (!muted && d->m_audioOutput && d->m_muted) else if (!muted && d->m_audioOutput && d->m_muted)
d->m_audioOutput->setVolume(d->m_volume/100.0f); d->m_audioOutput->setVolume(d->m_volume);
d->m_muted = muted; d->m_muted = muted;
emit mutedChanged(); emit mutedChanged();
@@ -314,7 +314,7 @@ PrivateSoundSource::PrivateSoundSource(QSoundEffectPrivate* s):
m_audioOutput(0), m_audioOutput(0),
m_sample(0), m_sample(0),
m_muted(false), m_muted(false),
m_volume(100), m_volume(1.0),
m_sampleReady(false), m_sampleReady(false),
m_offset(0) m_offset(0)
{ {
@@ -337,7 +337,7 @@ void PrivateSoundSource::sampleReady()
m_audioOutput = new QAudioOutput(m_sample->format()); m_audioOutput = new QAudioOutput(m_sample->format());
connect(m_audioOutput,SIGNAL(stateChanged(QAudio::State)), this, SLOT(stateChanged(QAudio::State))); connect(m_audioOutput,SIGNAL(stateChanged(QAudio::State)), this, SLOT(stateChanged(QAudio::State)));
if (!m_muted) if (!m_muted)
m_audioOutput->setVolume(m_volume/100.0f); m_audioOutput->setVolume(m_volume);
else else
m_audioOutput->setVolume(0); m_audioOutput->setVolume(0);
} }

View File

@@ -88,7 +88,7 @@ private:
QAudioOutput *m_audioOutput; QAudioOutput *m_audioOutput;
QSample *m_sample; QSample *m_sample;
bool m_muted; bool m_muted;
int m_volume; qreal m_volume;
bool m_sampleReady; bool m_sampleReady;
qint64 m_offset; qint64 m_offset;
QString m_category; QString m_category;
@@ -113,8 +113,8 @@ public:
int loopCount() const; int loopCount() const;
int loopsRemaining() const; int loopsRemaining() const;
void setLoopCount(int loopCount); void setLoopCount(int loopCount);
int volume() const; qreal volume() const;
void setVolume(int volume); void setVolume(qreal volume);
bool isMuted() const; bool isMuted() const;
void setMuted(bool muted); void setMuted(bool muted);
bool isLoaded() const; bool isLoaded() const;

View File

@@ -864,6 +864,11 @@ void QMediaPlayer::setPlaybackRate(qreal rate)
Setting the media to a null QMediaContent will cause the player to discard all Setting the media to a null QMediaContent will cause the player to discard all
information relating to the current media source and to cease all I/O operations related information relating to the current media source and to cease all I/O operations related
to that media. to that media.
\note This function returns immediately after recording the specified source of the media.
It does not wait for the media to finish loading and does not check for errors. Listen for
the mediaStatusChanged() and error() signals to be notified when the media is loaded and
when an error occurs during loading.
*/ */
void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream) void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream)

View File

@@ -13,7 +13,8 @@ android {
} }
qnx { qnx {
SUBDIRS += qnx audiocapture config_mmrenderer: SUBDIRS += qnx
SUBDIRS += audiocapture
} }
qnx:!blackberry { qnx:!blackberry {

View File

@@ -57,7 +57,7 @@ QVariant MmRendererMetaDataReaderControl::metaData(const QString &key) const
{ {
if (key == QMediaMetaData::Title) if (key == QMediaMetaData::Title)
return m_metaData.title(); return m_metaData.title();
else if (key == QMediaMetaData::Author) else if (key == QMediaMetaData::AlbumArtist)
return m_metaData.artist(); return m_metaData.artist();
else if (key == QMediaMetaData::Comment) else if (key == QMediaMetaData::Comment)
return m_metaData.comment(); return m_metaData.comment();

View File

@@ -60,6 +60,8 @@ void MFAudioEndpointControl::clear()
foreach (LPWSTR wstrID, m_devices) foreach (LPWSTR wstrID, m_devices)
CoTaskMemFree(wstrID); CoTaskMemFree(wstrID);
m_devices.clear();
if (m_currentActivate) if (m_currentActivate)
m_currentActivate->Release(); m_currentActivate->Release();
m_currentActivate = NULL; m_currentActivate = NULL;
@@ -130,6 +132,11 @@ IMFActivate* MFAudioEndpointControl::createActivate()
clear(); clear();
updateEndpoints(); updateEndpoints();
// Check if an endpoint is available ("Default" is always inserted)
if (m_devices.count() <= 1)
return NULL;
setActiveOutput(m_defaultEndpoint); setActiveOutput(m_defaultEndpoint);
return m_currentActivate; return m_currentActivate;