[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55616] trunk/blender: Fix #33518: Jack sync doesn't work in 2.64, 2.64 or 2.65 stable versions

Sergey Sharybin sergey.vfx at gmail.com
Wed Mar 27 08:19:55 CET 2013


Revision: 55616
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55616
Author:   nazgul
Date:     2013-03-27 07:19:54 +0000 (Wed, 27 Mar 2013)
Log Message:
-----------
Fix #33518: Jack sync doesn't work in 2.64, 2.64 or 2.65 stable versions

Added new build option WITH_JACK_DYNLOAD for CMake and
WITH_BF_JACK_DYNLOAD for SCons, which means there'll be
no build-time linking against libjack and getting symbols
from libjack will happen runtime using dlopen and dlsym
tricks.

Alternative would be to use weak linking, but it'll require
having wrapper for preloading libjack.

This new options are disabled by default and they only
intended to be used on linux. Other platforms shall not
be using this and there shall be no functional changes
on non-linux platforms at all.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/build_files/buildbot/config/user-config-glibc211-i686.py
    trunk/blender/build_files/buildbot/config/user-config-glibc211-x86_64.py
    trunk/blender/build_files/buildbot/config/user-config-player-glibc211-i686.py
    trunk/blender/build_files/buildbot/config/user-config-player-glibc211-x86_64.py
    trunk/blender/build_files/cmake/macros.cmake
    trunk/blender/build_files/scons/tools/Blender.py
    trunk/blender/build_files/scons/tools/btools.py
    trunk/blender/intern/audaspace/CMakeLists.txt
    trunk/blender/intern/audaspace/SConscript
    trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
    trunk/blender/intern/audaspace/intern/AUD_C-API.h
    trunk/blender/intern/audaspace/jack/AUD_JackDevice.cpp
    trunk/blender/intern/audaspace/jack/AUD_JackDevice.h
    trunk/blender/source/blender/blenkernel/BKE_sound.h
    trunk/blender/source/blender/blenkernel/intern/sound.c
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Added Paths:
-----------
    trunk/blender/intern/audaspace/jack/AUD_JackLibrary.cpp
    trunk/blender/intern/audaspace/jack/AUD_JackLibrary.h

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/CMakeLists.txt	2013-03-27 07:19:54 UTC (rev 55616)
@@ -229,6 +229,9 @@
 option(WITH_SDL           "Enable SDL for sound and joystick support" ON)
 option(WITH_OPENAL        "Enable OpenAL Support (http://www.openal.org)" ON)
 option(WITH_JACK          "Enable Jack Support (http://www.jackaudio.org)" OFF)
+if(UNIX AND NOT APPLE)
+	option(WITH_JACK_DYNLOAD  "Enable runtime dynamic Jack libraries loading" OFF)
+endif()
 
 # Compression
 option(WITH_LZO           "Enable fast LZO compression (used for pointcache)" ON)
@@ -2202,6 +2205,7 @@
 	info_cfg_option(WITH_OPENAL)
 	info_cfg_option(WITH_SDL)
 	info_cfg_option(WITH_JACK)
+	info_cfg_option(WITH_JACK_DYNLOAD)
 	info_cfg_option(WITH_CODEC_AVI)
 	info_cfg_option(WITH_CODEC_FFMPEG)
 	info_cfg_option(WITH_CODEC_SNDFILE)

Modified: trunk/blender/build_files/buildbot/config/user-config-glibc211-i686.py
===================================================================
--- trunk/blender/build_files/buildbot/config/user-config-glibc211-i686.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/buildbot/config/user-config-glibc211-i686.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -104,9 +104,8 @@
 WITH_BF_STATICFFTW3 = True
 
 # JACK
-WITH_BF_JACK = False
-WITH_BF_STATICJACK = True
-BF_JACK_LIB_STATIC = '${BF_ZLIB}/lib/libjack.a'
+WITH_BF_JACK = True
+WITH_BF_JACK_DYNLOAD = True
 
 # Cycles
 WITH_BF_CYCLES = True

Modified: trunk/blender/build_files/buildbot/config/user-config-glibc211-x86_64.py
===================================================================
--- trunk/blender/build_files/buildbot/config/user-config-glibc211-x86_64.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/buildbot/config/user-config-glibc211-x86_64.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -104,9 +104,8 @@
 WITH_BF_STATICFFTW3 = True
 
 # JACK
-WITH_BF_JACK = False
-WITH_BF_STATICJACK = True
-BF_JACK_LIB_STATIC = '${BF_ZLIB}/lib/libjack.a'
+WITH_BF_JACK = True
+WITH_BF_JACK_DYNLOAD = True
 
 # Cycles
 WITH_BF_CYCLES = True

Modified: trunk/blender/build_files/buildbot/config/user-config-player-glibc211-i686.py
===================================================================
--- trunk/blender/build_files/buildbot/config/user-config-player-glibc211-i686.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/buildbot/config/user-config-player-glibc211-i686.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -103,9 +103,8 @@
 BF_BOOST_LIBPATH = '${BF_BOOST}/lib'
 
 # JACK
-WITH_BF_JACK = False
-WITH_BF_STATICJACK = True
-BF_JACK_LIB_STATIC = '${BF_ZLIB}/lib/libjack.a'
+WITH_BF_JACK = True
+WITH_BF_JACK_DYNLOAD = True
 
 # Motion Tracking
 WITH_BF_LIBMV = False

Modified: trunk/blender/build_files/buildbot/config/user-config-player-glibc211-x86_64.py
===================================================================
--- trunk/blender/build_files/buildbot/config/user-config-player-glibc211-x86_64.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/buildbot/config/user-config-player-glibc211-x86_64.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -103,9 +103,8 @@
 BF_BOOST_LIBPATH = '${BF_BOOST}/lib'
 
 # JACK
-WITH_BF_JACK = False
-WITH_BF_STATICJACK = True
-BF_JACK_LIB_STATIC = '${BF_ZLIB}/lib/libjack.a'
+WITH_BF_JACK = True
+WITH_BF_JACK_DYNLOAD = True
 
 # Motion Tracking
 WITH_BF_LIBMV = False

Modified: trunk/blender/build_files/cmake/macros.cmake
===================================================================
--- trunk/blender/build_files/cmake/macros.cmake	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/cmake/macros.cmake	2013-03-27 07:19:54 UTC (rev 55616)
@@ -228,7 +228,7 @@
 	if(WITH_OPENAL)
 		link_directories(${OPENAL_LIBPATH})
 	endif()
-	if(WITH_JACK)
+	if(WITH_JACK AND NOT WITH_JACK_DYNLOAD)
 		link_directories(${JACK_LIBPATH})
 	endif()
 	if(WITH_CODEC_SNDFILE)
@@ -293,7 +293,7 @@
 	if(WITH_FFTW3)
 		target_link_libraries(${target} ${FFTW3_LIBRARIES})
 	endif()
-	if(WITH_JACK)
+	if(WITH_JACK AND NOT WITH_JACK_DYNLOAD)
 		target_link_libraries(${target} ${JACK_LIBRARIES})
 	endif()
 	if(WITH_CODEC_SNDFILE)

Modified: trunk/blender/build_files/scons/tools/Blender.py
===================================================================
--- trunk/blender/build_files/scons/tools/Blender.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/scons/tools/Blender.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -147,10 +147,9 @@
         libincs += Split(lenv['BF_PYTHON_LIBPATH'])
     if lenv['WITH_BF_SDL']:
         libincs += Split(lenv['BF_SDL_LIBPATH'])
-    if lenv['WITH_BF_JACK']:
+    if lenv['WITH_BF_JACK'] and not lenv['WITH_BF_JACK_DYNLOAD']:
         libincs += Split(lenv['BF_JACK_LIBPATH'])
-        if lenv['WITH_BF_STATICJACK']:
-            statlibs += Split(lenv['BF_JACK_LIB_STATIC'])
+        statlibs += Split(lenv['BF_JACK_LIB_STATIC'])
     if lenv['WITH_BF_SNDFILE']:
         libincs += Split(lenv['BF_SNDFILE_LIBPATH'])
     if lenv['WITH_BF_OPENEXR']:
@@ -292,7 +291,7 @@
         syslibs += Split(lenv['BF_FFMPEG_LIB'])
         if lenv['WITH_BF_OGG']:
             syslibs += Split(lenv['BF_OGG_LIB'])
-    if lenv['WITH_BF_JACK'] and not lenv['WITH_BF_STATICJACK']:
+    if lenv['WITH_BF_JACK'] and not lenv['WITH_BF_JACK_DYNLOAD']:
         syslibs += Split(lenv['BF_JACK_LIB'])
     if lenv['WITH_BF_SNDFILE'] and not lenv['WITH_BF_STATICSNDFILE']:
         syslibs += Split(lenv['BF_SNDFILE_LIB'])

Modified: trunk/blender/build_files/scons/tools/btools.py
===================================================================
--- trunk/blender/build_files/scons/tools/btools.py	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/build_files/scons/tools/btools.py	2013-03-27 07:19:54 UTC (rev 55616)
@@ -99,7 +99,7 @@
             'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'WITH_OSX_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL', 'BF_PYTHON_ABI_FLAGS', 
             'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
             'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
-            'WITH_BF_JACK', 'BF_JACK', 'BF_JACK_INC', 'BF_JACK_LIB', 'BF_JACK_LIBPATH', 'WITH_BF_STATICJACK', 'BF_JACK_LIB_STATIC',
+            'WITH_BF_JACK', 'BF_JACK', 'BF_JACK_INC', 'BF_JACK_LIB', 'BF_JACK_LIBPATH', 'WITH_BF_JACK_DYNLOAD',
             'WITH_BF_SNDFILE', 'BF_SNDFILE', 'BF_SNDFILE_INC', 'BF_SNDFILE_LIB', 'BF_SNDFILE_LIBPATH', 'WITH_BF_STATICSNDFILE', 'BF_SNDFILE_LIB_STATIC',
             'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
             'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
@@ -288,12 +288,11 @@
         ('BF_SDL_LIBPATH', 'SDL library path', ''),
 
         (BoolVariable('WITH_BF_JACK', 'Enable jack support if true', True)),
-        (BoolVariable('WITH_BF_STATICJACK', 'Staticly link to jack', False)),
         ('BF_JACK', 'jack base path', ''),
         ('BF_JACK_INC', 'jack include path', ''),
         ('BF_JACK_LIB', 'jack library', ''),
         ('BF_JACK_LIBPATH', 'jack library path', ''),
-        ('BF_JACK_LIB_STATIC', 'jack static library', ''),
+        (BoolVariable('WITH_BF_JACK_DYNLOAD', 'Enable runtime dynamic Jack libraries loading (works only on Linux)', False)),
 
         (BoolVariable('WITH_BF_SNDFILE', 'Enable sndfile support if true', True)),
         ('BF_SNDFILE', 'sndfile base path', ''),

Modified: trunk/blender/intern/audaspace/CMakeLists.txt
===================================================================
--- trunk/blender/intern/audaspace/CMakeLists.txt	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/intern/audaspace/CMakeLists.txt	2013-03-27 07:19:54 UTC (rev 55616)
@@ -253,9 +253,15 @@
 	)
 	list(APPEND SRC
 		jack/AUD_JackDevice.cpp
+		jack/AUD_JackLibrary.cpp
 
 		jack/AUD_JackDevice.h
+		jack/AUD_JackLibrary.h
 	)	
+
+	if(WITH_JACK_DYNLOAD)
+		add_definitions(-DWITH_JACK_DYNLOAD)
+	endif()
 endif()
 
 if(WITH_CODEC_SNDFILE)

Modified: trunk/blender/intern/audaspace/SConscript
===================================================================
--- trunk/blender/intern/audaspace/SConscript	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/intern/audaspace/SConscript	2013-03-27 07:19:54 UTC (rev 55616)
@@ -46,6 +46,8 @@
     sources += env.Glob('jack/*.cpp')
     incs += ' jack ' + env['BF_JACK_INC']
     defs.append('WITH_JACK')
+    if env['WITH_BF_JACK_DYNLOAD']:
+        defs.append('WITH_JACK_DYNLOAD')
 
 if env['WITH_BF_SNDFILE']:
     sources += env.Glob('sndfile/*.cpp')

Modified: trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_C-API.cpp	2013-03-27 06:49:16 UTC (rev 55615)
+++ trunk/blender/intern/audaspace/intern/AUD_C-API.cpp	2013-03-27 07:19:54 UTC (rev 55616)
@@ -79,6 +79,7 @@
 
 #ifdef WITH_JACK
 #include "AUD_JackDevice.h"
+#include "AUD_JackLibrary.h"
 #endif
 
 
@@ -110,8 +111,18 @@
 #ifdef WITH_FFMPEG
 	av_register_all();
 #endif
+#ifdef WITH_JACK
+	AUD_jack_init();
+#endif
 }
 
+void AUD_exitOnce()
+{
+#ifdef WITH_JACK
+	AUD_jack_exit();
+#endif
+}
+
 int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize)
 {
 	boost::shared_ptr<AUD_IDevice> dev;
@@ -144,14 +155,16 @@
 				// No break, fall through to default, to return false
 			}
 			else
-			{
 #endif
+			if (!AUD_jack_supported()) {
+				printf("Warning: Jack cllient not installed\n");
+				// No break, fall through to default, to return false
+			}
+			else {
 				dev = boost::shared_ptr<AUD_IDevice>(new AUD_JackDevice("Blender", specs, buffersize));
 				break;
-#ifdef __APPLE__
 			}
 #endif
-#endif
 		default:
 			return false;
 		}
@@ -1262,3 +1275,12 @@
 {
 	return AUD_3ddevice;
 }
+
+int AUD_isJackSupported(void)
+{
+#ifdef WITH_JACK
+	return AUD_jack_supported();
+#else
+	return 0;
+#endif
+}

Modified: trunk/blender/intern/audaspace/intern/AUD_C-API.h
===================================================================

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list