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