Merge branch 'stable' into dev

Conflicts:
	.qmake.conf

Change-Id: Id3427cb1a80956ba61373313c21b4b9aa007ea54
This commit is contained in:
Sergio Ahumada
2013-08-05 10:38:25 +02:00
36 changed files with 62 additions and 25 deletions

View File

@@ -6,6 +6,6 @@ QT += quick qml multimedia
SOURCES += qmlcamera.cpp
RESOURCES += declarative-camera.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/multimediawidgets/declarative-camera
target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/declarative-camera
INSTALLS += target

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -13,8 +13,9 @@ qtHaveModule(widgets) {
audiooutput \
}
qtHaveModule(gui):qtHaveModule(qml) {
qtHaveModule(quick) {
SUBDIRS += \
declarative-camera \
declarative-radio \
video
}

View File

@@ -129,13 +129,11 @@ int main(int argc, char *argv[])
rootObject, SLOT(qmlFramePainted()));
#endif
QUrl videoPath;
const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
if (moviesLocation.isEmpty()) {
QUrl appPath(QString("file://%1").arg(app.applicationDirPath()));
videoPath = appPath.resolved(QUrl("./"));
} else
videoPath = QString("file://%1").arg(moviesLocation.first());
const QUrl videoPath =
QUrl::fromLocalFile(moviesLocation.isEmpty() ?
app.applicationDirPath() :
moviesLocation.front());
viewer.rootContext()->setContextProperty("videoPath", videoPath);
QMetaObject::invokeMethod(rootObject, "init");

View File

@@ -101,7 +101,10 @@ Rectangle {
Rectangle {
id: wrapper
function launch() {
var path = "file://" + filePath;
var path = "file://";
if (filePath.length > 2 && filePath[1] === ':') // Windows drive logic, see QUrl::fromLocalFile()
path += '/';
path += filePath;
if (folders.isFolder(index))
down(path);
else
@@ -306,7 +309,7 @@ Rectangle {
MouseArea { id: upRegion; anchors.centerIn: parent
width: 56
height: 56
onClicked: if (folders.parentFolder != "") up()
onClicked: up()
}
states: [
State {
@@ -352,6 +355,8 @@ Rectangle {
function up() {
var path = folders.parentFolder;
if (path.toString().length === 0 || path.toString() === 'file:')
return;
if (folders == folders1) {
view = view2
folders = folders2;

View File

@@ -9,8 +9,3 @@ qtHaveModule(widgets) {
player \
customvideosurface
}
qtHaveModule(gui):qtHaveModule(qml) {
disabled:SUBDIRS += declarative-camera
}

View File

@@ -7,7 +7,7 @@ win32 {
qtCompileTest(directshow)
qtCompileTest(wmsdk)
qtCompileTest(wmp)
qtCompileTest(wmf)
contains(QT_CONFIG, wmf-backend): qtCompileTest(wmf)
qtCompileTest(evr)
} else:mac {
qtCompileTest(avfoundation)

View File

@@ -147,9 +147,20 @@ public:
Q_SIGNALS:
void contextReady();
void contextFailed();
void volumeChanged();
private:
private Q_SLOTS:
void onContextFailed()
{
release();
// Try to reconnect later
QTimer::singleShot(30000, this, SLOT(prepare()));
emit contextFailed();
}
void prepare()
{
m_vol = PA_VOLUME_NORM;
@@ -196,12 +207,23 @@ private:
m_prepared = true;
}
private:
void release()
{
if (!m_prepared) return;
if (!m_prepared)
return;
if (m_context) {
pa_context_unref(m_context);
m_context = 0;
}
if (m_mainLoop) {
pa_threaded_mainloop_stop(m_mainLoop);
pa_threaded_mainloop_free(m_mainLoop);
m_mainLoop = 0;
}
m_prepared = false;
}
@@ -221,6 +243,9 @@ private:
#endif
QMetaObject::invokeMethod(self, "contextReady", Qt::QueuedConnection);
break;
case PA_CONTEXT_FAILED:
QMetaObject::invokeMethod(self, "onContextFailed", Qt::QueuedConnection);
break;
default:
break;
}
@@ -511,6 +536,7 @@ void QSoundEffectPrivate::updateVolume()
PulseDaemonLocker locker;
pa_cvolume volume;
volume.channels = m_pulseSpec.channels;
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()));
Q_ASSERT(pa_cvolume_valid(&volume));
#ifdef QT_PA_DEBUG
@@ -535,6 +561,7 @@ void QSoundEffectPrivate::updateMuted()
if (m_sinkInputId < 0)
return;
PulseDaemonLocker locker;
if (pulseDaemon()->context())
pa_operation_unref(pa_context_set_sink_input_mute(pulseDaemon()->context(), m_sinkInputId, m_muted, setmuted_callback, m_ref->getRef()));
#ifdef QT_PA_DEBUG
qDebug() << this << "updateMuted = " << m_muted;
@@ -705,7 +732,7 @@ void QSoundEffectPrivate::sampleReady()
}
#endif
} else {
if (pa_context_get_state(pulseDaemon()->context()) != PA_CONTEXT_READY) {
if (!pulseDaemon()->context() || pa_context_get_state(pulseDaemon()->context()) != PA_CONTEXT_READY) {
connect(pulseDaemon(), SIGNAL(contextReady()), SLOT(contextReady()));
return;
}
@@ -741,6 +768,7 @@ void QSoundEffectPrivate::unloadPulseStream()
pa_stream_disconnect(m_pulseStream);
pa_stream_unref(m_pulseStream);
disconnect(pulseDaemon(), SIGNAL(volumeChanged()), this, SLOT(updateVolume()));
disconnect(pulseDaemon(), SIGNAL(contextFailed()), this, SLOT(contextFailed()));
m_pulseStream = 0;
m_reloadCategory = false; // category will be reloaded when we connect anyway
}
@@ -895,6 +923,9 @@ void QSoundEffectPrivate::createPulseStream()
qDebug() << this << "createPulseStream";
#endif
if (!pulseDaemon()->context())
return;
pa_proplist *propList = pa_proplist_new();
if (m_category.isNull()) {
// Meant to be one of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y", "test"
@@ -906,6 +937,7 @@ void QSoundEffectPrivate::createPulseStream()
pa_proplist_free(propList);
connect(pulseDaemon(), SIGNAL(volumeChanged()), this, SLOT(updateVolume()));
connect(pulseDaemon(), SIGNAL(contextFailed()), this, SLOT(contextFailed()));
if (stream == 0) {
qWarning("QSoundEffect(pulseaudio): Failed to create stream");
@@ -947,6 +979,12 @@ void QSoundEffectPrivate::contextReady()
createPulseStream();
}
void QSoundEffectPrivate::contextFailed()
{
unloadPulseStream();
connect(pulseDaemon(), SIGNAL(contextReady()), this, SLOT(contextReady()));
}
void QSoundEffectPrivate::stream_write_callback(pa_stream *s, size_t length, void *userdata)
{
Q_UNUSED(length);

View File

@@ -111,6 +111,7 @@ private Q_SLOTS:
void sampleReady();
void uploadSample();
void contextReady();
void contextFailed();
void underRun();
void prepare();
void streamReady();

View File

@@ -57,7 +57,6 @@ QT += multimediawidgets
\section2 Examples
\list
\li \l{QML Camera Example}
\li \l{Camera Example}
\li \l{Media Player Example}
\li \l{Video Graphics Item Example}