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;