[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