RtAudio-5.2.0 support
authorIOhannes m zmölnig <zmoelnig@iem.at>
Fri, 17 Dec 2021 09:35:28 +0000 (10:35 +0100)
committerIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>
Thu, 3 Mar 2022 14:40:12 +0000 (15:40 +0100)
Upstream vendored in a RtAudio-6 git snapshot and called it 5.2.0

Gbp-Pq: Name RtAudio52.patch

src/core/kernelAudio.cpp

index 748bf5dea9044d7a7b22519d9f58fe8d3c8f865d..63c0f470c48150fed30c0727c88eae9452df748d 100644 (file)
@@ -94,10 +94,6 @@ int KernelAudio::openDevice(const Conf::Data& conf)
                return 0;
        }
 
-       m_rtAudio->setErrorCallback([](RtAudioErrorType type, const std::string& msg) {
-               u::log::print("[KA] RtAudio error %d: %s\n", type, msg.c_str());
-       });
-
        u::log::print("[KA] Opening device out=%d, in=%d, samplerate=%d\n",
            conf.soundDeviceOut, conf.soundDeviceIn, conf.samplerate);
 
@@ -158,33 +154,33 @@ int KernelAudio::openDevice(const Conf::Data& conf)
 
 #endif
 
-       m_callbackInfo = {
-           /* kernelAudio      = */ this,
-           /* ready            = */ true,
-           /* withJack         = */ getAPI() == G_SYS_API_JACK,
-           /* outBuf           = */ nullptr, // filled later on in audio callback
-           /* inBuf            = */ nullptr, // filled later on in audio callback
-           /* bufferSize       = */ 0,       // filled later on in audio callback
-           /* channelsOutCount = */ m_channelsOutCount,
-           /* channelsInCount  = */ m_channelsInCount};
-
-       RtAudioErrorType res = m_rtAudio->openStream(
-           &outParams,                                     // output params
-           conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
-           RTAUDIO_FLOAT32,                                // audio format
-           m_realSampleRate,                               // sample rate
-           &m_realBufferSize,                              // buffer size in byte
-           &audioCallback,                                 // audio callback
-           &m_callbackInfo,                                // user data passed to callback
-           &options);
-
-       if (res == RtAudioErrorType::RTAUDIO_NO_ERROR)
+       try
        {
+               m_callbackInfo = {
+                   /* kernelAudio      = */ this,
+                   /* ready            = */ true,
+                   /* withJack         = */ getAPI() == G_SYS_API_JACK,
+                   /* outBuf           = */ nullptr, // filled later on in audio callback
+                   /* inBuf            = */ nullptr, // filled later on in audio callback
+                   /* bufferSize       = */ 0,       // filled later on in audio callback
+                   /* channelsOutCount = */ m_channelsOutCount,
+                   /* channelsInCount  = */ m_channelsInCount};
+
+               m_rtAudio->openStream(
+                   &outParams,                                     // output params
+                   conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
+                   RTAUDIO_FLOAT32,                                // audio format
+                   m_realSampleRate,                               // sample rate
+                   &m_realBufferSize,                              // buffer size in byte
+                   &audioCallback,                                 // audio callback
+                   &m_callbackInfo,                                // user data passed to callback
+                   &options);
                m_ready = true;
                return 1;
        }
-       else
+       catch (RtAudioError& e)
        {
+               u::log::print("[KA] RtAudio init error: %s\n", e.getMessage());
                closeDevice();
                return 0;
        }
@@ -194,24 +190,33 @@ int KernelAudio::openDevice(const Conf::Data& conf)
 
 int KernelAudio::startStream()
 {
-       if (m_rtAudio->startStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
+       try
        {
-               u::log::print("[KA] Start stream - latency = %lu\n", m_rtAudio->getStreamLatency());
+               m_rtAudio->startStream();
+               u::log::print("[KA] latency = %lu\n", m_rtAudio->getStreamLatency());
                return 1;
        }
-       return 0;
+       catch (RtAudioError& e)
+       {
+               u::log::print("[KA] Start stream error: %s\n", e.getMessage());
+               return 0;
+       }
 }
 
 /* -------------------------------------------------------------------------- */
 
 int KernelAudio::stopStream()
 {
-       if (m_rtAudio->stopStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
+       try
        {
-               u::log::print("[KA] Stop stream\n");
+               m_rtAudio->stopStream();
                return 1;
        }
-       return 0;
+       catch (RtAudioError& /*e*/)
+       {
+               u::log::print("[KA] Stop stream error\n");
+               return 0;
+       }
 }
 
 /* -------------------------------------------------------------------------- */
@@ -328,24 +333,32 @@ void KernelAudio::logCompiledAPIs()
 
 m::KernelAudio::Device KernelAudio::fetchDevice(size_t deviceIndex) const
 {
-       RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
+       try
+       {
+               RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
 
-       if (!info.probed)
+               if (!info.probed)
+               {
+                       u::log::print("[KA] Can't probe device %d\n", deviceIndex);
+                       return {deviceIndex};
+               }
+
+               return {
+                   deviceIndex,
+                   true,
+                   info.name,
+                   static_cast<int>(info.outputChannels),
+                   static_cast<int>(info.inputChannels),
+                   static_cast<int>(info.duplexChannels),
+                   info.isDefaultOutput,
+                   info.isDefaultInput,
+                   u::vector::cast<int>(info.sampleRates)};
+       }
+       catch (RtAudioError& e)
        {
-               u::log::print("[KA] Can't probe device %d\n", deviceIndex);
-               return {deviceIndex};
+               u::log::print("[KA] Error fetching device %d: %s\n", deviceIndex, e.getMessage());
+               return {0};
        }
-
-       return {
-           deviceIndex,
-           true,
-           info.name,
-           static_cast<int>(info.outputChannels),
-           static_cast<int>(info.inputChannels),
-           static_cast<int>(info.duplexChannels),
-           info.isDefaultOutput,
-           info.isDefaultInput,
-           u::vector::cast<int>(info.sampleRates)};
 }
 
 /* -------------------------------------------------------------------------- */