diff -r 56cd8111b7f7 -r 41300fa6a67c src/3rdparty/phonon/gstreamer/mediaobject.cpp --- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp Tue Jan 26 12:42:25 2010 +0200 +++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp Tue Feb 02 00:43:10 2010 +0200 @@ -87,7 +87,7 @@ m_name = "MediaObject" + QString::number(count++); if (!m_backend->isValid()) { - setError(tr("Cannot start playback. \n\nCheck your Gstreamer installation and make sure you " + setError(tr("Cannot start playback. \n\nCheck your GStreamer installation and make sure you " "\nhave libgstreamer-plugins-base installed."), Phonon::FatalError); } else { m_root = this; @@ -95,8 +95,8 @@ m_backend->addBusWatcher(this); connect(m_tickTimer, SIGNAL(timeout()), SLOT(emitTick())); } - connect(this, SIGNAL(stateChanged(Phonon::State, Phonon::State)), - this, SLOT(notifyStateChange(Phonon::State, Phonon::State))); + connect(this, SIGNAL(stateChanged(Phonon::State,Phonon::State)), + this, SLOT(notifyStateChange(Phonon::State,Phonon::State))); } @@ -226,6 +226,7 @@ QString value = "unknown codec"; // These functions require GStreamer > 0.10.12 +#ifndef QT_NO_LIBRARY static Ptr_gst_pb_utils_init p_gst_pb_utils_init = 0; static Ptr_gst_pb_utils_get_codec_description p_gst_pb_utils_get_codec_description = 0; if (!p_gst_pb_utils_init) { @@ -239,10 +240,13 @@ codecName = p_gst_pb_utils_get_codec_description (caps); value = QString::fromUtf8(codecName); g_free (codecName); - } else { + } else +#endif //QT_NO_LIBRARY + { // For GStreamer versions < 0.10.12 GstStructure *str = gst_caps_get_structure (caps, 0); value = QString::fromUtf8(gst_structure_get_name (str)); + } media->addMissingCodecName(value); } @@ -340,7 +344,7 @@ Q_UNUSED(decodebin); GstPad *decodepad = static_cast(data); gst_pad_link (pad, decodepad); - gst_object_unref (decodepad); + //gst_object_unref (decodepad); } /** @@ -370,9 +374,21 @@ return false; // Set the device for MediaSource::Disc - QByteArray mediaDevice = QFile::encodeName(m_source.deviceName()); - if (!mediaDevice.isEmpty()) - g_object_set (m_datasource, "device", mediaDevice.constData(), (const char*)NULL); + if (m_source.type() == MediaSource::Disc) { + + if (g_object_class_find_property (G_OBJECT_GET_CLASS (m_datasource), "device")) { + QByteArray mediaDevice = QFile::encodeName(m_source.deviceName()); + if (!mediaDevice.isEmpty()) + g_object_set (G_OBJECT (m_datasource), "device", mediaDevice.constData(), (const char*)NULL); + } + + // Also Set optical disc speed to 2X for Audio CD + if (m_source.discType() == Phonon::Cd + && (g_object_class_find_property (G_OBJECT_GET_CLASS (m_datasource), "read-speed"))) { + g_object_set (G_OBJECT (m_datasource), "read-speed", 2, (const char*)NULL); + m_backend->logMessage(QString("new device speed : 2X"), Backend::Info, this); + } + } // Link data source into pipeline gst_bin_add(GST_BIN(m_pipeline), m_datasource); @@ -392,6 +408,7 @@ */ bool MediaObject::createPipefromStream(const MediaSource &source) { +#ifndef QT_NO_PHONON_ABSTRACTMEDIASTREAM // Remove any existing data source if (m_datasource) { gst_bin_remove(GST_BIN(m_pipeline), m_datasource); @@ -413,6 +430,10 @@ return false; } return true; +#else //QT_NO_PHONON_ABSTRACTMEDIASTREAM + Q_UNUSED(source); + return false; +#endif } void MediaObject::createPipeline() @@ -907,23 +928,27 @@ setError(tr("Could not open media source.")); break; - case MediaSource::Disc: // CD tracks can be specified by setting the url in the following way uri=cdda:4 + case MediaSource::Disc: { - QUrl url; + QString mediaUrl; switch (source.discType()) { - case Phonon::Cd: - url = QUrl(QLatin1String("cdda://")); - break; - case Phonon::Dvd: - url = QUrl(QLatin1String("dvd://")); - break; - case Phonon::Vcd: - url = QUrl(QLatin1String("vcd://")); - break; - default: - break; + case Phonon::NoDisc: + qWarning() << "I should never get to see a MediaSource that is a disc but doesn't specify which one"; + return; + case Phonon::Cd: // CD tracks can be specified by setting the url in the following way uri=cdda:4 + mediaUrl = QLatin1String("cdda://"); + break; + case Phonon::Dvd: + mediaUrl = QLatin1String("dvd://"); + break; + case Phonon::Vcd: + mediaUrl = QLatin1String("vcd://"); + break; + default: + qWarning() << "media " << source.discType() << " not implemented"; + return; } - if (!url.isEmpty() && createPipefromURL(url)) + if (!mediaUrl.isEmpty() && createPipefromURL(QUrl(mediaUrl))) m_loading = true; else setError(tr("Could not open media source."));