[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdereview/phonon/gstreamer
From: Matthias Kretz <kretz () kde ! org>
Date: 2008-04-23 13:43:53
Message-ID: 1208958233.343925.8211.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 800152 by mkretz:
hotfix for the blocking (deadlocking) alsasink in GStreamer:
- use custom alsasink2 which uses non-blocking writes in order to not deadlock
when a USB soundcard is unplugged while playing
- while patching the code, switch to listing default:X devices in addition to
hw:X,Y which is a lot more compatible
M +47 -33 CMakeLists.txt
A alsasink2.c [License: LGPL (v2+) (wrong address)]
A alsasink2.h [License: LGPL (v2+) (wrong address)]
M +16 -0 devicemanager.cpp
--- trunk/kdereview/phonon/gstreamer/CMakeLists.txt #800151:800152
@@ -1,4 +1,5 @@
# Copyright (C) 2007 Trolltech ASA. All rights reserved.
+# Copyright (C) 2008 Matthias Kretz <kretz@kde.org>
#
# 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
@@ -16,41 +17,54 @@
include(ConfigureChecks.cmake)
if (BUILD_PHONON_GSTREAMER)
- include_directories(${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR}
+ include_directories(${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR}
${LIBXML2_INCLUDE_DIR})
- set(phonon_gstreamer_SRCS
- audiooutput.cpp
- artssink.cpp
- backend.cpp
- devicemanager.cpp
- effectmanager.cpp
- gsthelper.cpp
- mediaobject.cpp
- medianode.cpp
- effect.cpp
- medianodeevent.cpp
- videowidget.cpp
- qwidgetvideosink.cpp
- streamreader.cpp
- phononsrc.cpp
- message.cpp
- audioeffect.cpp
- abstractrenderer.cpp
- x11renderer.cpp
- widgetrenderer.cpp
- glrenderer.cpp
- volumefadereffect.cpp
- )
+ set(phonon_gstreamer_SRCS
+ audiooutput.cpp
+ artssink.cpp
+ backend.cpp
+ devicemanager.cpp
+ effectmanager.cpp
+ gsthelper.cpp
+ mediaobject.cpp
+ medianode.cpp
+ effect.cpp
+ medianodeevent.cpp
+ videowidget.cpp
+ qwidgetvideosink.cpp
+ streamreader.cpp
+ phononsrc.cpp
+ message.cpp
+ audioeffect.cpp
+ abstractrenderer.cpp
+ x11renderer.cpp
+ widgetrenderer.cpp
+ glrenderer.cpp
+ volumefadereffect.cpp
+ )
- kde4_add_plugin(phonon_gstreamer ${phonon_gstreamer_SRCS})
- target_link_libraries(phonon_gstreamer
- ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY}
- ${KDE4_PHONON_LIBS} ${OPENGL_gl_LIBRARY}
- ${GSTREAMER_LIBRARIES} ${GSTREAMER_BASE_LIBRARY} ${GSTREAMER_INTERFACE_LIBRARY}
- ${GSTREAMER_PLUGIN_VIDEO_LIBRARIES} ${GSTREAMER_PLUGIN_AUDIO_LIBRARIES}
- ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES})
- install(TARGETS phonon_gstreamer DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/phonon_backend)
- install(FILES gstreamer.desktop DESTINATION ${SERVICES_INSTALL_DIR}/phononbackends)
+ find_package(Alsa)
+ if(ALSA_FOUND)
+ add_definitions(-DUSE_ALSASINK2)
+ include_directories(${ALSA_INCLUDES})
+ set(phonon_gstreamer_SRCS
+ ${phonon_gstreamer_SRCS}
+ alsasink2.c
+ )
+ endif(ALSA_FOUND)
+ kde4_add_plugin(phonon_gstreamer ${phonon_gstreamer_SRCS})
+ target_link_libraries(phonon_gstreamer
+ ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY}
+ ${KDE4_PHONON_LIBS} ${OPENGL_gl_LIBRARY}
+ ${GSTREAMER_LIBRARIES} ${GSTREAMER_BASE_LIBRARY} ${GSTREAMER_INTERFACE_LIBRARY}
+ ${GSTREAMER_PLUGIN_VIDEO_LIBRARIES} ${GSTREAMER_PLUGIN_AUDIO_LIBRARIES}
+ ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES} ${ASOUND_LIBRARY})
+ if(ALSA_FOUND)
+ target_link_libraries(phonon_gstreamer ${ASOUND_LIBRARY})
+ endif(ALSA_FOUND)
+
+ install(TARGETS phonon_gstreamer DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/phonon_backend)
+ install(FILES gstreamer.desktop DESTINATION ${SERVICES_INSTALL_DIR}/phononbackends)
endif (BUILD_PHONON_GSTREAMER)
--- trunk/kdereview/phonon/gstreamer/devicemanager.cpp #800151:800152
@@ -25,6 +25,10 @@
#include "x11renderer.h"
#include "artssink.h"
+#ifdef USE_ALSASINK2
+#include "alsasink2.h"
+#endif
+
/*
* This class manages the list of currently
* active output devices
@@ -171,7 +175,19 @@
}
}
+#ifdef USE_ALSASINK2
if (!sink) {
+ sink = GST_ELEMENT(g_object_new(gst_alsasink2_get_type(), NULL));
+ if (canOpenDevice(sink))
+ m_backend->logMessage("AudioOutput using alsa2 audio sink");
+ else if (sink) {
+ gst_object_unref(sink);
+ sink = 0;
+ }
+ }
+#endif
+
+ if (!sink) {
sink = gst_element_factory_make ("alsasink", NULL);
if (canOpenDevice(sink))
m_backend->logMessage("AudioOutput using alsa audio sink");
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic