diff options
Diffstat (limited to 'source/l/phonon/phonon.gstreamer.qt-4.5.1.diff')
-rw-r--r-- | source/l/phonon/phonon.gstreamer.qt-4.5.1.diff | 431 |
1 files changed, 431 insertions, 0 deletions
diff --git a/source/l/phonon/phonon.gstreamer.qt-4.5.1.diff b/source/l/phonon/phonon.gstreamer.qt-4.5.1.diff new file mode 100644 index 00000000..d55d2f88 --- /dev/null +++ b/source/l/phonon/phonon.gstreamer.qt-4.5.1.diff @@ -0,0 +1,431 @@ +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/CMakeLists.txt phonon-4.3.1/gstreamer/CMakeLists.txt +--- phonon-4.3.1.orig/gstreamer/CMakeLists.txt 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/CMakeLists.txt 2009-10-19 13:07:39.000000000 -0500 +@@ -1,4 +1,4 @@ +-# Copyright (C) 2009 Nokia Corporation. All rights reserved. ++# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + # Copyright (C) 2008 Matthias Kretz <kretz@kde.org> + # + # This library is free software: you can redistribute it and/or modify +@@ -19,7 +19,6 @@ + if (BUILD_PHONON_GSTREAMER) + include_directories(${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} + ${LIBXML2_INCLUDE_DIR}) +- add_definitions(-DPHONON_BACKEND_VERSION_4_2) + + set(phonon_gstreamer_SRCS + audiooutput.cpp +@@ -46,17 +45,17 @@ + ) + + find_package(Alsa) +- macro_ensure_version("0.10.22" ${GSTREAMER_VERSION} GSTREAMER_HAS_NONBLOCKING_ALSASINK) +- if(ALSA_FOUND AND NOT GSTREAMER_HAS_NONBLOCKING_ALSASINK) ++ if(ALSA_FOUND) + add_definitions(-DUSE_ALSASINK2) + include_directories(${ALSA_INCLUDES}) + set(phonon_gstreamer_SRCS + ${phonon_gstreamer_SRCS} + alsasink2.c + ) +- endif(ALSA_FOUND AND NOT GSTREAMER_HAS_NONBLOCKING_ALSASINK) ++ endif(ALSA_FOUND) + +- automoc4_add_library(phonon_gstreamer SHARED ${phonon_gstreamer_SRCS}) ++ automoc4(phonon_gstreamer phonon_gstreamer_SRCS) ++ add_library(phonon_gstreamer SHARED ${phonon_gstreamer_SRCS}) + set_target_properties(phonon_gstreamer PROPERTIES PREFIX "") + target_link_libraries(phonon_gstreamer + ${QT_QTOPENGL_LIBRARY} +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/ConfigureChecks.cmake phonon-4.3.1/gstreamer/ConfigureChecks.cmake +--- phonon-4.3.1.orig/gstreamer/ConfigureChecks.cmake 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/ConfigureChecks.cmake 2009-10-19 13:07:39.000000000 -0500 +@@ -1,4 +1,4 @@ +-# Copyright (C) 2009 Nokia Corporation. All rights reserved. ++# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + # + # This library is free software: you can redistribute it and/or modify + # it under the terms of the GNU Lesser General Public License as published by +@@ -17,7 +17,6 @@ + + macro_optional_find_package(GStreamerPlugins) + macro_log_feature(GSTREAMER_PLUGIN_VIDEO_LIBRARIES "GStreamer video plugin" "The gstreamer video plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10") +-macro_log_feature(GSTREAMER_PLUGIN_AUDIO_LIBRARIES "GStreamer audio plugin" "The gstreamer audio plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10") + + macro_optional_find_package(GLIB2) + macro_log_feature(GLIB2_FOUND "GLib2" "GLib 2 is required to compile the gstreamer backend for Phonon" "http://www.gtk.org/download/" FALSE) +@@ -31,8 +30,8 @@ + macro_optional_find_package(OpenGL) + macro_log_feature(OPENGL_FOUND "OpenGL" "OpenGL support is required to compile the gstreamer backend for Phonon" "" FALSE) + +-if (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) ++if (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) + set(BUILD_PHONON_GSTREAMER TRUE) +-else (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) ++else (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) + set(BUILD_PHONON_GSTREAMER FALSE) +-endif (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) ++endif (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND) +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/audiooutput.cpp phonon-4.3.1/gstreamer/audiooutput.cpp +--- phonon-4.3.1.orig/gstreamer/audiooutput.cpp 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/audiooutput.cpp 2009-10-19 13:07:39.000000000 -0500 +@@ -42,6 +42,7 @@ + static int count = 0; + m_name = "AudioOutput" + QString::number(count++); + if (m_backend->isValid()) { ++ g_set_application_name(qApp->applicationName().toUtf8()); + m_audioBin = gst_bin_new (NULL); + gst_object_ref (GST_OBJECT (m_audioBin)); + gst_object_sink (GST_OBJECT (m_audioBin)); +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/mediaobject.cpp phonon-4.3.1/gstreamer/mediaobject.cpp +--- phonon-4.3.1.orig/gstreamer/mediaobject.cpp 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/mediaobject.cpp 2009-10-19 13:19:20.000000000 -0500 +@@ -14,7 +14,6 @@ + You should have received a copy of the GNU Lesser General Public License + along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +- + #include <cmath> + #include <gst/interfaces/propertyprobe.h> + #include "common.h" +@@ -24,7 +23,6 @@ + #include "backend.h" + #include "streamreader.h" + #include "phononsrc.h" +- + #include <QtCore> + #include <QtCore/QTimer> + #include <QtCore/QVector> +@@ -78,6 +76,9 @@ + , m_videoGraph(0) + , m_previousTickTime(-1) + , m_resetNeeded(false) ++ , m_autoplayTitles(true) ++ , m_availableTitles(0) ++ , m_currentTitle(1) + { + qRegisterMetaType<GstCaps*>("GstCaps*"); + qRegisterMetaType<State>("State"); +@@ -141,9 +142,9 @@ + if (m_resumeState) + return; + +- if (m_state == Phonon::PlayingState || m_state == Phonon::PausedState) { ++ if (m_pendingState == Phonon::PlayingState || m_pendingState == Phonon::PausedState) { + m_resumeState = true; +- m_oldState = m_state; ++ m_oldState = m_pendingState; + m_oldPos = getPipelinePos(); + } + } +@@ -347,11 +348,8 @@ + * + * returns true if successful + */ +-bool MediaObject::createPipefromURL(const QString &encodedUrl) ++bool MediaObject::createPipefromURL(const QUrl &url) + { +- // Convert back to URL +- QUrl url(encodedUrl, QUrl::StrictMode); +- + // Remove any existing data source + if (m_datasource) { + gst_bin_remove(GST_BIN(m_pipeline), m_datasource); +@@ -361,7 +359,7 @@ + + // Verify that the uri can be parsed + if (!url.isValid()) { +- m_backend->logMessage(QString("%1 is not a valid URI").arg(encodedUrl)); ++ m_backend->logMessage(QString("%1 is not a valid URI").arg(url.toString())); + return false; + } + +@@ -875,8 +873,7 @@ + + switch (source.type()) { + case MediaSource::Url: { +- QString urlString = source.url().toEncoded(); +- if (createPipefromURL(urlString)) ++ if (createPipefromURL(source.url())) + m_loading = true; + else + setError(tr("Could not open media source.")); +@@ -884,8 +881,7 @@ + break; + + case MediaSource::LocalFile: { +- QString urlString = QUrl::fromLocalFile(source.fileName()).toString(); +- if (createPipefromURL(urlString)) ++ if (createPipefromURL(QUrl::fromLocalFile(source.fileName()))) + m_loading = true; + else + setError(tr("Could not open media source.")); +@@ -907,8 +903,13 @@ + break; + + case MediaSource::Disc: // CD tracks can be specified by setting the url in the following way uri=cdda:4 +- m_backend->logMessage("Source type Disc not currently supported", Backend::Warning, this); +- setError(tr("Could not open media source."), Phonon::NormalError); ++ { ++ QUrl cdurl(QLatin1String("cdda://")); ++ if (createPipefromURL(cdurl)) ++ m_loading = true; ++ else ++ setError(tr("Could not open media source.")); ++ } + break; + + default: +@@ -959,6 +960,19 @@ + m_hasVideo = m_videoStreamFound; + emit hasVideoChanged(m_hasVideo); + } ++ ++ m_availableTitles = 1; ++ gint64 titleCount; ++ GstFormat format = gst_format_get_by_nick("track"); ++ if (gst_element_query_duration (m_pipeline, &format, &titleCount)) { ++ int oldAvailableTitles = m_availableTitles; ++ m_availableTitles = (int)titleCount; ++ if (m_availableTitles != oldAvailableTitles) { ++ emit availableTitlesChanged(m_availableTitles); ++ m_backend->logMessage(QString("Available titles changed: %0").arg(m_availableTitles), Backend::Info, this); ++ } ++ } ++ + } + + void MediaObject::setPrefinishMark(qint32 newPrefinishMark) +@@ -1356,6 +1370,13 @@ + if (!m_seekable) + m_atEndOfStream = true; + ++ if (m_autoplayTitles && ++ m_availableTitles > 1 && ++ m_currentTitle < m_availableTitles) { ++ _iface_setCurrentTitle(m_currentTitle + 1); ++ return; ++ } ++ + if (m_nextSource.type() != MediaSource::Invalid + && m_nextSource.type() != MediaSource::Empty) { // We only emit finish when the queue is actually empty + QTimer::singleShot (qMax(0, transitionTime()), this, SLOT(beginPlay())); +@@ -1384,6 +1405,72 @@ + notify(&event); + } + ++#ifndef QT_NO_PHONON_MEDIACONTROLLER ++//interface management ++bool MediaObject::hasInterface(Interface iface) const ++{ ++ return iface == AddonInterface::TitleInterface; ++} ++ ++QVariant MediaObject::interfaceCall(Interface iface, int command, const QList<QVariant> ¶ms) ++{ ++ if (hasInterface(iface)) { ++ ++ switch (iface) ++ { ++ case TitleInterface: ++ switch (command) ++ { ++ case availableTitles: ++ return _iface_availableTitles(); ++ case title: ++ return _iface_currentTitle(); ++ case setTitle: ++ _iface_setCurrentTitle(params.first().toInt()); ++ break; ++ case autoplayTitles: ++ return m_autoplayTitles; ++ case setAutoplayTitles: ++ m_autoplayTitles = params.first().toBool(); ++ break; ++ } ++ break; ++ default: ++ break; ++ } ++ } ++ return QVariant(); ++} ++#endif ++ ++int MediaObject::_iface_availableTitles() const ++{ ++ return m_availableTitles; ++} ++ ++int MediaObject::_iface_currentTitle() const ++{ ++ return m_currentTitle; ++} ++ ++void MediaObject::_iface_setCurrentTitle(int title) ++{ ++ GstFormat trackFormat = gst_format_get_by_nick("track"); ++ m_backend->logMessage(QString("setCurrentTitle %0").arg(title), Backend::Info, this); ++ if ((title == m_currentTitle) || (title < 1) || (title > m_availableTitles)) ++ return; ++ ++ m_currentTitle = title; ++ ++ //let's seek to the beginning of the song ++ if (gst_element_seek_simple(m_pipeline, trackFormat, GST_SEEK_FLAG_FLUSH, m_currentTitle - 1)) { ++ updateTotalTime(); ++ m_atEndOfStream = false; ++ emit titleChanged(title); ++ emit totalTimeChanged(totalTime()); ++ } ++} ++ + } // ns Gstreamer + } // ns Phonon + +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/mediaobject.h phonon-4.3.1/gstreamer/mediaobject.h +--- phonon-4.3.1.orig/gstreamer/mediaobject.h 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/mediaobject.h 2009-10-19 13:07:39.000000000 -0500 +@@ -21,7 +21,6 @@ + #include "backend.h" + #include "common.h" + #include "medianode.h" +- + #include <phonon/mediaobjectinterface.h> + #include <phonon/addoninterface.h> + +@@ -32,7 +31,6 @@ + #include <QtCore/QDate> + #include <QtCore/QEvent> + #include <QtCore/QUrl> +- + #include <gst/gst.h> + + QT_BEGIN_NAMESPACE +@@ -50,11 +48,20 @@ + class VideoPath; + class AudioOutput; + +-class MediaObject : public QObject, public MediaObjectInterface, public AddonInterface, public MediaNode ++class MediaObject : public QObject, public MediaObjectInterface ++#ifndef QT_NO_PHONON_MEDIACONTROLLER ++ , public AddonInterface ++#endif ++ , public MediaNode + { + friend class Stream; + Q_OBJECT +- Q_INTERFACES(Phonon::MediaObjectInterface Phonon::AddonInterface Phonon::Gstreamer::MediaNode) ++ Q_INTERFACES(Phonon::MediaObjectInterface ++#ifndef QT_NO_PHONON_MEDIACONTROLLER ++ Phonon::AddonInterface ++#endif ++ Phonon::Gstreamer::MediaNode ++ ) + + public: + +@@ -93,16 +100,10 @@ + MediaSource source() const; + + // No additional interfaces currently supported +- bool hasInterface(Interface) const +- { +- return false; +- } +- +- QVariant interfaceCall(Interface, int, const QList<QVariant> &) +- { +- return QVariant(); +- } +- ++#ifndef QT_NO_PHONON_MEDIACONTROLLER ++ bool hasInterface(Interface) const; ++ QVariant interfaceCall(Interface, int, const QList<QVariant> &); ++#endif + bool isLoading() + { + return m_loading; +@@ -176,6 +177,19 @@ + QMultiMap<QString, QString> metaData(); + void setMetaData(QMultiMap<QString, QString> newData); + ++ // AddonInterface: ++ void titleChanged(int); ++ void availableTitlesChanged(int); ++ ++ // Not implemented ++ void chapterChanged(int); ++ void availableChaptersChanged(int); ++ void angleChanged(int); ++ void availableAnglesChanged(int); ++ ++ void availableSubtitlesChanged(); ++ void availableAudioChannelsChanged(); ++ + protected: + void beginLoad(); + void loadingComplete(); +@@ -185,7 +199,7 @@ + /* + * @param encodedUrl percent-encoded QString for source compat reasons. Should change to QUrl + */ +- bool createPipefromURL(const QString &encodedUrl); ++ bool createPipefromURL(const QUrl &url); + bool createPipefromStream(const MediaSource &); + + private Q_SLOTS: +@@ -219,6 +233,10 @@ + void updateSeekable(); + qint64 getPipelinePos() const; + ++ int _iface_availableTitles() const; ++ int _iface_currentTitle() const; ++ void _iface_setCurrentTitle(int title); ++ + bool m_resumeState; + State m_oldState; + quint64 m_oldPos; +@@ -264,6 +282,9 @@ + bool m_resetNeeded; + QStringList m_missingCodecs; + QMultiMap<QString, QString> m_metaData; ++ bool m_autoplayTitles; ++ int m_availableTitles; ++ int m_currentTitle; + }; + } + } //namespace Phonon::Gstreamer +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/qwidgetvideosink.h phonon-4.3.1/gstreamer/qwidgetvideosink.h +--- phonon-4.3.1.orig/gstreamer/qwidgetvideosink.h 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/qwidgetvideosink.h 2009-10-19 13:07:39.000000000 -0500 +@@ -19,7 +19,6 @@ + #define Phonon_GSTREAMER_VIDEOSINK_H + + #include "common.h" +-#include "qwidgetvideosink.h" + + #include <QtCore/QByteArray> + #include <QtCore/QEvent> +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/videowidget.h phonon-4.3.1/gstreamer/videowidget.h +--- phonon-4.3.1.orig/gstreamer/videowidget.h 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/videowidget.h 2009-10-19 13:07:39.000000000 -0500 +@@ -25,7 +25,6 @@ + #include "common.h" + #include "medianode.h" + #include "abstractrenderer.h" +-#include "videowidget.h" + + #include <gst/gst.h> + +diff -u -r --new-file phonon-4.3.1.orig/gstreamer/x11renderer.cpp phonon-4.3.1/gstreamer/x11renderer.cpp +--- phonon-4.3.1.orig/gstreamer/x11renderer.cpp 2009-02-27 04:15:42.000000000 -0600 ++++ phonon-4.3.1/gstreamer/x11renderer.cpp 2009-10-19 13:07:39.000000000 -0500 +@@ -138,7 +138,6 @@ + void X11Renderer::movieSizeChanged(const QSize &movieSize) + { + Q_UNUSED(movieSize); +- + if (m_renderWidget) { + m_renderWidget->setGeometry(m_videoWidget->calculateDrawFrameRect()); + } |