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(¶meters, + RtAudioErrorType err; + err = rt->openStream(¶meters, 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;