Hello,

I have got this patch for RTAudio 6 "support" (not tested, but it builds with 7.18.0). This patch also applies to the 7.20.0 version. The problem is with the patch applied mlt builds against rtaudio 6.0.1, but it fails against 5.2.0 just with:

[ 57%] Linking CXX shared module ../../../out/lib/mlt/libmltmovit.so
cd /build/mlt-7.20.0/obj-x86_64-linux-gnu/src/modules/movit && /usr/bin/cmake -E cmake_link_script CMakeFiles/mltmovit.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -g -O2 -ffile-prefix-map=/build/mlt-7.20.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wl,-z,now -shared  -o ../../../out/lib/mlt/libmltmovit.so CMakeFiles/mltmovit.dir/factory.c.o CMakeFiles/mltmovit.dir/filter_glsl_manager.cpp.o CMakeFiles/mltmovit.dir/filter_movit_blur.cpp.o CMakeFiles/mltmovit.dir/filter_movit_convert.cpp.o CMakeFiles/mltmovit.dir/filter_movit_crop.cpp.o CMakeFiles/mltmovit.dir/filter_movit_deconvolution_sharpen.cpp.o CMakeFiles/mltmovit.dir/filter_movit_diffusion.cpp.o CMakeFiles/mltmovit.dir/filter_movit_flip.cpp.o CMakeFiles/mltmovit.dir/filter_movit_glow.cpp.o CMakeFiles/mltmovit.dir/filter_movit_lift_gamma_gain.cpp.o CMakeFiles/mltmovit.dir/filter_movit_mirror.cpp.o CMakeFiles/mltmovit.dir/filter_movit_opacity.cpp.o CMakeFiles/mltmovit.dir/filter_movit_rect.cpp.o CMakeFiles/mltmovit.dir/filter_movit_resample.cpp.o CMakeFiles/mltmovit.dir/filter_movit_resize.cpp.o CMakeFiles/mltmovit.dir/filter_movit_saturation.cpp.o CMakeFiles/mltmovit.dir/filter_movit_vignette.cpp.o CMakeFiles/mltmovit.dir/filter_movit_white_balance.cpp.o CMakeFiles/mltmovit.dir/mlt_movit_input.cpp.o CMakeFiles/mltmovit.dir/transition_movit_luma.cpp.o CMakeFiles/mltmovit.dir/transition_movit_mix.cpp.o CMakeFiles/mltmovit.dir/transition_movit_overlay.cpp.o CMakeFiles/mltmovit.dir/consumer_xgl.c.o -Wl,-rpath,/build/mlt-7.20.0/obj-x86_64-linux-gnu/out/lib: -lm ../../../out/lib/libmlt++-7.so.7.20.0 /usr/lib/x86_64-linux-gnu/libX11.so ../../../out/lib/libmlt-7.so.7.20.0 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /usr/lib/x86_64-linux-gnu/libmovit.so /usr/lib/x86_64-linux-gnu/libepoxy.so
make[3]: Leaving directory '/build/mlt-7.20.0/obj-x86_64-linux-gnu'
[ 57%] Built target mltmovit
make[2]: Leaving directory '/build/mlt-7.20.0/obj-x86_64-linux-gnu'
make[1]: *** [Makefile:139: all] Error 2
make[1]: Leaving directory '/build/mlt-7.20.0/obj-x86_64-linux-gnu'
dh_auto_build: error: cd obj-x86_64-linux-gnu && make -j2 "INSTALL=install --strip-program=true" VERBOSE=1 returned exit code 2
make: *** [debian/rules:11: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2


A better fix would be welcome :)


-------- Weitergeleitete Nachricht --------
Betreff:        Bug#1051570: mlt: FTBFS with RtAudio 6
Weitersenden-Datum:     Sat, 09 Sep 2023 21:15:01 +0000
Weitersenden-Von:       IOhannes m zmoelnig <umlae...@debian.org>
Weitersenden-An:        debian-bugs-d...@lists.debian.org
Weitersenden-CC:        Patrick Matthäi <pmatth...@debian.org>
Datum:  Sat, 09 Sep 2023 23:10:59 +0200
Von:    IOhannes m zmoelnig <umlae...@debian.org>
Antwort an: IOhannes m zmoelnig <umlae...@debian.org>, 1051...@bugs.debian.org
An:     Debian Bug Tracking System <sub...@bugs.debian.org>



Source: mlt
Version: 7.18.0-2
Severity: serious
Tags: ftbfs patch
Justification: fails to build from source (but built successfully in the past)

Dear Maintainer,

mlt ftbfs with RtAudio 6 (currently in experimental).

```
[ 89%] Building CXX object src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/consumer_rtaudio.cpp.o cd /build/mlt-zme0kO/mlt-7.18.0/obj-x86_64-linux-gnu/src/modules/rtaudio && /usr/lib/ccache/c++ -Dmltrtaudio_EXPORTS -I/build/mlt-zme0kO/mlt-7.18.0/src/framework/.. -isystem /usr/include/rtaudio -g -O2 -ffile-prefix-map=/build/mlt-zme0kO/mlt-7.18.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 -std=c++14 -fPIC -mmmx -msse -msse2 -pthread -D__LINUX_ALSA__ -D__LINUX_PULSE__ -D__UNIX_JACK__ -D_REENTRANT -MD -MT src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/consumer_rtaudio.cpp.o -MF CMakeFiles/mltrtaudio.dir/consumer_rtaudio.cpp.o.d -o CMakeFiles/mltrtaudio.dir/consumer_rtaudio.cpp.o -c /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp: In member function ‘bool RtAudioConsumer::create_rtaudio(RtAudio::Api, int, int)’: /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:164:26: error: ‘struct RtAudio::DeviceInfo’ has no member named ‘probed’
164 | if (info.probed && info.name == resource) {
| ^~~~~~
/build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:212:16: error: ‘RtAudioError’ does not name a type; did you mean ‘RtAudioErrorType’?
212 | catch (RtAudioError &e) {
| ^~~~~~~~~~~~
| RtAudioErrorType
In file included from /build/mlt-zme0kO/mlt-7.18.0/src/framework/../framework/mlt.h:50, from /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:20: /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:214:49: error: ‘e’ was not declared in this scope
214 | mlt_log_info(getConsumer(), "%s\n", e.getMessage().c_str());
| ^
/build/mlt-zme0kO/mlt-7.18.0/src/framework/../framework/mlt_log.h:88:93: note: in definition of macro ‘mlt_log_info’ 88 | #define mlt_log_info(service, format, args...) mlt_log((service), MLT_LOG_INFO, (format), ##args)
| ^~~~
/build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp: In member function ‘int RtAudioConsumer::stop()’: /build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:365:24: error: ‘RtAudioError’ does not name a type; did you mean ‘RtAudioErrorType’?
365 | catch (RtAudioError &e) {
| ^~~~~~~~~~~~
| RtAudioErrorType
/build/mlt-zme0kO/mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp:367:58: error: ‘e’ was not declared in this scope
367 | mlt_log_error(getConsumer(), "%s\n", e.getMessage().c_str());
| ^
/build/mlt-zme0kO/mlt-7.18.0/src/framework/../framework/mlt_log.h:85:95: note: in definition of macro ‘mlt_log_error’ 85 | #define mlt_log_error(service, format, args...) mlt_log((service), MLT_LOG_ERROR, (format), ##args)
| ^~~~
make[2]: *** [src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/build.make:79: src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/consumer_rtaudio.cpp.o] Error 1 make[2]: Target 'src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/build' not remade because of errors. make[2]: Leaving directory '/build/mlt-zme0kO/mlt-7.18.0/obj-x86_64-linux-gnu'
```

Attached is a patch that fixes the FTBFS (but is otherwise untested).
No debdiff this time, sorry.

cheers.
Description: Fix FTBFS with RtAudio 6
 replace try/catch with check for return codes.
 check device.ID instead of device.probed
Author: IOhannes m zmölnig
Origin: Debian
Forwarded: no
Last-Update: 2023-09-09
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
Index: mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp
===================================================================
--- mlt-7.18.0.orig/src/modules/rtaudio/consumer_rtaudio.cpp
+++ mlt-7.18.0/src/modules/rtaudio/consumer_rtaudio.cpp
@@ -161,7 +161,7 @@ public:
             for (i = 0; i < n; i++) {
                 info = rt->getDeviceInfo(i);
                 mlt_log_verbose(NULL, "RtAudio device %d = %s\n", i, 
info.name.c_str());
-                if (info.probed && info.name == resource) {
+                if (info.ID > 0 && info.name == resource) {
                     device_id = i;
                     break;
                 }
@@ -192,11 +192,11 @@ public:
             }
         }
 
-        try {
             if (rt->isStreamOpen()) {
                 rt->closeStream();
             }
-            rt->openStream(&parameters,
+           RtAudioErrorType err;
+            err = rt->openStream(&parameters,
                            NULL,
                            RTAUDIO_SINT16,
                            frequency,
@@ -204,14 +204,10 @@ public:
                            &rtaudio_callback,
                            this,
                            &options);
-            rt->startStream();
-        }
-#ifdef RTERROR_H
-        catch (RtError &e) {
-#else
-        catch (RtAudioError &e) {
-#endif
-            mlt_log_info(getConsumer(), "%s\n", e.getMessage().c_str());
+           if(!err)
+             err = rt->startStream();
+       if (err) {
+            mlt_log_info(getConsumer(), "%s\n", rt->getErrorText().c_str());
             delete rt;
             rt = NULL;
             return false;
@@ -355,16 +351,9 @@ public:
             pthread_mutex_unlock(&audio_mutex);
 
             if (rt && rt->isStreamOpen())
-                try {
                     // Stop the stream
-                    rt->stopStream();
-                }
-#ifdef RTERROR_H
-                catch (RtError &e) {
-#else
-                catch (RtAudioError &e) {
-#endif
-                    mlt_log_error(getConsumer(), "%s\n", 
e.getMessage().c_str());
+                    if(rt->stopStream()) {
+                    mlt_log_error(getConsumer(), "%s\n", 
rt->getErrorText().c_str());
                 }
             delete rt;
             rt = NULL;

Reply via email to