commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 03/07: audio: modified the audio registrati


From: git
Subject: [Commit-gnuradio] [gnuradio] 03/07: audio: modified the audio registration system.
Date: Thu, 14 Aug 2014 15:23:29 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

trondeau pushed a commit to branch master
in repository gnuradio.

commit 2fc6293932564fd9f84a31898aa11c0b9a3b44cc
Author: Tom Rondeau <address@hidden>
Date:   Wed Aug 13 16:06:19 2014 -0400

    audio: modified the audio registration system.
    
    Instead of static functions and macros, this just uses simple ifdefs in the 
code to register new audio components if cmake found them. The code is more 
complicated for the developer, if we ever add a new audio machine. But this 
allows us to use gr-audio in statically linked cases.
---
 gr-audio/doc/audio.dox                     |  56 +++++++++++++++
 gr-audio/lib/CMakeLists.txt                |  24 ++++++-
 gr-audio/lib/alsa/alsa_sink.cc             |  34 +++++-----
 gr-audio/lib/alsa/alsa_source.cc           |  29 ++++----
 gr-audio/lib/audio_registry.cc             | 105 ++++++++++++++++++++++-------
 gr-audio/lib/audio_registry.h              |  83 ++++++++++++++++++-----
 gr-audio/lib/jack/jack_sink.cc             |  22 +++---
 gr-audio/lib/jack/jack_source.cc           |  22 +++---
 gr-audio/lib/oss/oss_sink.cc               |   7 +-
 gr-audio/lib/oss/oss_source.cc             |   7 +-
 gr-audio/lib/osx/osx_sink.cc               |   8 +--
 gr-audio/lib/osx/osx_source.cc             |   8 +--
 gr-audio/lib/portaudio/portaudio_sink.cc   |   9 +--
 gr-audio/lib/portaudio/portaudio_source.cc |   9 +--
 gr-audio/lib/windows/windows_sink.cc       |   9 +--
 gr-audio/lib/windows/windows_source.cc     |   9 +--
 16 files changed, 316 insertions(+), 125 deletions(-)

diff --git a/gr-audio/doc/audio.dox b/gr-audio/doc/audio.dox
index fd88b9e..6b3bbd9 100644
--- a/gr-audio/doc/audio.dox
+++ b/gr-audio/doc/audio.dox
@@ -61,4 +61,60 @@ its use would look like:
     audio_source = audio.source(int(audio_rate), audio_input)
 \endcode
 
+
+\section audio_adding Adding a New Audio Machine
+
+There may come a time when we need to define a new audio machine type
+besides those currently supported. To do this, we have to follow a
+simple pattern to add it to the list of potential machines GNU Radio
+can use.
+
+1. Add a new directory in gr-audio/lib for the new machine name, like
+the alsa, oss, etc. that are already there.
+
+2. Follow the pattern of the other machines to create the class
+structure for both a source and sink implementation for the machine.
+
+3. Make sure to add the factory function for both the new source and
+sink classes. Like in the ALSA sink case, we have:
+
+\code
+    sink::sptr
+    alsa_sink_fcn(int sampling_rate,
+                  const std::string &device_name,
+                  bool ok_to_block)
+    {
+      return sink::sptr
+        (new alsa_sink(sampling_rate, device_name, ok_to_block));
+    }
+\endcode
+
+4. Add the new source and sink factory functions to the audio
+registration list in gr-audio/lib/audio_registry.cc and
+audio_registry.h files. Select the appropriate registry priority, HIGH
+if you want this to be the default when using 'auto'. For Linux audio
+systems, we generally want to default to ALSA, fall back on OSS, but
+have other machine interfaces defined as MED priority. For example, in
+the .cc file for ALSA, OSS, and PortAudio:
+
+\code
+    #ifdef ALSA_FOUND
+            d_registry.push_back(register_source(REG_PRIO_HIGH, "alsa", 
alsa_source_fcn));
+    #endif /* ALSA_FOUND */
+
+    #ifdef OSS_FOUND
+            d_registry.push_back(register_source(REG_PRIO_LOW, "oss", 
oss_source_fcn));
+    #endif /* OSS_FOUND */
+
+    #ifdef PORTAUDIO_FOUND
+            d_registry.push_back(register_source(REG_PRIO_MED, "portaudio", 
portaudio_source_fcn));
+    #endif /* PORTAUDIO_FOUND */
+\endcode
+
+
+5. Follow the examples in the gr-audio/lib/CMakeLists.txt file for the
+different machine types to add the new one, including the
+add_definitions to provide the new YOURMACH_FOUND used in the
+audio_registry files.
+
 */
diff --git a/gr-audio/lib/CMakeLists.txt b/gr-audio/lib/CMakeLists.txt
index d50e547..81a4975 100644
--- a/gr-audio/lib/CMakeLists.txt
+++ b/gr-audio/lib/CMakeLists.txt
@@ -17,6 +17,8 @@
 # the Free Software Foundation, Inc., 51 Franklin Street,
 # Boston, MA 02110-1301, USA.
 
+include(GrComponent)
+
 ########################################################################
 # Setup the include and linker paths
 ########################################################################
@@ -47,6 +49,9 @@ find_package(ALSA)
 
 if(ALSA_FOUND)
 
+    add_definitions(-DALSA_FOUND)
+    GR_APPEND_SUBCOMPONENT("alsa")
+
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/alsa)
     include_directories(${ALSA_INCLUDE_DIRS})
     list(APPEND gr_audio_libs ${ALSA_LIBRARIES})
@@ -66,6 +71,9 @@ find_package(OSS)
 
 if(OSS_FOUND)
 
+    add_definitions(-DOSS_FOUND)
+    GR_APPEND_SUBCOMPONENT("oss")
+
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/oss)
     include_directories(${OSS_INCLUDE_DIRS})
     list(APPEND gr_audio_sources
@@ -84,6 +92,9 @@ find_package(Jack)
 
 if(JACK_FOUND)
 
+    add_definitions(-DJACK_FOUND)
+    GR_APPEND_SUBCOMPONENT("jack")
+
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/jack)
     include_directories(${JACK_INCLUDE_DIRS})
     list(APPEND gr_audio_libs ${JACK_LIBRARIES})
@@ -106,6 +117,9 @@ CHECK_INCLUDE_FILE_CXX(AudioToolbox/AudioToolbox.h 
AUDIO_TOOLBOX_H)
 
 if(AUDIO_UNIT_H AND AUDIO_TOOLBOX_H)
 
+    add_definitions(-DOSX_FOUND)
+    GR_APPEND_SUBCOMPONENT("osx")
+
     set(OSX_AUDIO_VALID 1 CACHE INTERNAL "OSX Audio is valid")
 
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/osx)
@@ -134,7 +148,10 @@ endif(AUDIO_UNIT_H AND AUDIO_TOOLBOX_H)
 ########################################################################
 find_package(Portaudio)
 
-if(PORTAUDIO_FOUND)
+if(PORTAUDIO2_FOUND)
+
+    add_definitions(-DPORTAUDIO_FOUND)
+    GR_APPEND_SUBCOMPONENT("portaudio")
 
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/portaudio)
     include_directories(${PORTAUDIO_INCLUDE_DIRS})
@@ -147,13 +164,16 @@ if(PORTAUDIO_FOUND)
     )
     list(APPEND gr_audio_confs 
${CMAKE_CURRENT_SOURCE_DIR}/portaudio/gr-audio-portaudio.conf)
 
-endif(PORTAUDIO_FOUND)
+endif(PORTAUDIO2_FOUND)
 
 ########################################################################
 ## Windows Support
 ########################################################################
 if(WIN32)
 
+    add_definitions(-DWIN32_FOUND)
+    GR_APPEND_SUBCOMPONENT("windows")
+
     include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/windows)
     list(APPEND gr_audio_libs winmm.lib)
     list(APPEND gr_audio_sources
diff --git a/gr-audio/lib/alsa/alsa_sink.cc b/gr-audio/lib/alsa/alsa_sink.cc
index a922473..cfb2475 100644
--- a/gr-audio/lib/alsa/alsa_sink.cc
+++ b/gr-audio/lib/alsa/alsa_sink.cc
@@ -36,15 +36,16 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_HIGH, alsa)(int sampling_rate,
-                                             const std::string &device_name,
-                                             bool ok_to_block)
+    sink::sptr
+    alsa_sink_fcn(int sampling_rate,
+                  const std::string &device_name,
+                  bool ok_to_block)
     {
       return sink::sptr
         (new alsa_sink(sampling_rate, device_name, ok_to_block));
     }
 
-    static bool CHATTY_DEBUG = false;
+    static bool CHATTY_DEBUG = true;
 
     static snd_pcm_format_t acceptable_formats[] = {
       // these are in our preferred order...
@@ -111,8 +112,8 @@ namespace gr {
       if(ok_to_block == false)
         snd_pcm_nonblock(d_pcm_handle, !ok_to_block);
       if(error < 0){
-        fprintf(stderr, "audio_alsa_sink[%s]: %s\n",
-                d_device_name.c_str(), snd_strerror(error));
+        GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%") \
+                     % (d_device_name) % (snd_strerror(error)));
         throw std::runtime_error("audio_alsa_sink");
       }
 
@@ -171,9 +172,9 @@ namespace gr {
         bail("failed to set rate near", error);
 
       if(orig_sampling_rate != d_sampling_rate) {
-        fprintf(stderr, "audio_alsa_sink[%s]: unable to support sampling rate 
%d\n",
-                snd_pcm_name(d_pcm_handle), orig_sampling_rate);
-        fprintf(stderr, "  card requested %d instead.\n", d_sampling_rate);
+        GR_LOG_INFO(d_logger, boost::format("[%1%]: unable to support sampling 
rate %2%\n\tCard requested %3% instead.") \
+                     % snd_pcm_name(d_pcm_handle) % orig_sampling_rate \
+                     % d_sampling_rate);
       }
 
       /*
@@ -185,8 +186,6 @@ namespace gr {
       unsigned int min_nperiods, max_nperiods;
       snd_pcm_hw_params_get_periods_min(d_hw_params, &min_nperiods, &dir);
       snd_pcm_hw_params_get_periods_max(d_hw_params, &max_nperiods, &dir);
-      //fprintf(stderr, "alsa_sink: min_nperiods = %d, max_nperiods = %d\n",
-      // min_nperiods, max_nperiods);
 
       unsigned int orig_nperiods = d_nperiods;
       d_nperiods = std::min (std::max (min_nperiods, d_nperiods), 
max_nperiods);
@@ -274,10 +273,11 @@ namespace gr {
 
       d_buffer = new char[d_buffer_size_bytes];
 
-      if(CHATTY_DEBUG)
-        fprintf(stdout, "audio_alsa_sink[%s]: sample resolution = %d bits\n",
-                snd_pcm_name(d_pcm_handle),
-                snd_pcm_hw_params_get_sbits(d_hw_params));
+      if(CHATTY_DEBUG) {
+        GR_LOG_DEBUG(d_logger, boost::format("[%1%]: sample resolution = %d 
bits") \
+                     % snd_pcm_name(d_pcm_handle)                       \
+                     % snd_pcm_hw_params_get_sbits(d_hw_params));
+      }
 
       switch(d_format) {
       case SND_PCM_FORMAT_S16:
@@ -533,8 +533,8 @@ namespace gr {
     void
     alsa_sink::output_error_msg (const char *msg, int err)
     {
-      fprintf(stderr, "audio_alsa_sink[%s]: %s: %s\n",
-              snd_pcm_name(d_pcm_handle), msg,  snd_strerror(err));
+      GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%: %3%") \
+                   % snd_pcm_name(d_pcm_handle) % msg % snd_strerror(err));
     }
 
     void
diff --git a/gr-audio/lib/alsa/alsa_source.cc b/gr-audio/lib/alsa/alsa_source.cc
index b6103c3..92a7bc5 100644
--- a/gr-audio/lib/alsa/alsa_source.cc
+++ b/gr-audio/lib/alsa/alsa_source.cc
@@ -36,9 +36,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_HIGH, alsa)(int sampling_rate,
-                                               const std::string &device_name,
-                                               bool ok_to_block)
+    source::sptr
+    alsa_source_fcn(int sampling_rate,
+                    const std::string &device_name,
+                    bool ok_to_block)
     {
       return source::sptr
         (new alsa_source(sampling_rate, device_name, ok_to_block));
@@ -106,8 +107,8 @@ namespace gr {
       error = snd_pcm_open(&d_pcm_handle, d_device_name.c_str(),
                            SND_PCM_STREAM_CAPTURE, 0);
       if(error < 0){
-        fprintf(stderr, "audio_alsa_source[%s]: %s\n",
-                d_device_name.c_str(), snd_strerror(error));
+        GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%") \
+                     % (d_device_name) % (snd_strerror(error)));
         throw std::runtime_error("audio_alsa_source");
       }
 
@@ -168,9 +169,9 @@ namespace gr {
         bail("failed to set rate near", error);
 
       if(orig_sampling_rate != d_sampling_rate){
-        fprintf(stderr, "audio_alsa_source[%s]: unable to support sampling 
rate %d\n",
-                snd_pcm_name (d_pcm_handle), orig_sampling_rate);
-        fprintf(stderr, "  card requested %d instead.\n", d_sampling_rate);
+        GR_LOG_INFO(d_logger, boost::format("[%1%]: unable to support sampling 
rate %2%\n\tCard requested %3% instead.") \
+                     % snd_pcm_name(d_pcm_handle) % orig_sampling_rate \
+                     % d_sampling_rate);
       }
 
       /*
@@ -182,8 +183,6 @@ namespace gr {
       unsigned int min_nperiods, max_nperiods;
       snd_pcm_hw_params_get_periods_min(d_hw_params, &min_nperiods, &dir);
       snd_pcm_hw_params_get_periods_max(d_hw_params, &max_nperiods, &dir);
-      //fprintf (stderr, "alsa_source: min_nperiods = %d, max_nperiods = %d\n",
-      // min_nperiods, max_nperiods);
 
       unsigned int orig_nperiods = d_nperiods;
       d_nperiods = std::min(std::max (min_nperiods, d_nperiods), max_nperiods);
@@ -253,9 +252,9 @@ namespace gr {
       d_buffer = new char[d_buffer_size_bytes];
 
       if(CHATTY_DEBUG) {
-        fprintf(stdout, "audio_alsa_source[%s]: sample resolution = %d bits\n",
-            snd_pcm_name(d_pcm_handle),
-            snd_pcm_hw_params_get_sbits(d_hw_params));
+        GR_LOG_DEBUG(d_logger, boost::format("[%1%]: sample resolution = %d 
bits") \
+                     % snd_pcm_name(d_pcm_handle)                       \
+                     % snd_pcm_hw_params_get_sbits(d_hw_params));
       }
 
       switch(d_format) {
@@ -499,8 +498,8 @@ namespace gr {
     void
     alsa_source::output_error_msg(const char *msg, int err)
     {
-      fprintf(stderr, "audio_alsa_source[%s]: %s: %s\n",
-              snd_pcm_name(d_pcm_handle), msg, snd_strerror (err));
+      GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%: %3%") \
+                   % snd_pcm_name(d_pcm_handle) % msg % snd_strerror(err));
     }
 
     void
diff --git a/gr-audio/lib/audio_registry.cc b/gr-audio/lib/audio_registry.cc
index 98848a0..ece723f 100644
--- a/gr-audio/lib/audio_registry.cc
+++ b/gr-audio/lib/audio_registry.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright 2011,2013 Free Software Foundation, Inc.
+ * Copyright 2011,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -22,6 +22,7 @@
 #include "audio_registry.h"
 #include <boost/foreach.hpp>
 #include <gnuradio/prefs.h>
+#include <gnuradio/logger.h>
 #include <stdexcept>
 #include <vector>
 #include <iostream>
@@ -33,35 +34,84 @@ namespace gr {
      * Create registries
      **********************************************************************/
 
-    struct source_entry_t {
-      reg_prio_type prio;
-      std::string arch;
-      source_factory_t source;
-    };
-
-    static std::vector<source_entry_t> &get_source_registry(void)
+    static std::vector<source_entry_t> &
+    get_source_registry(void)
     {
+      static bool src_reg = false;
       static std::vector<source_entry_t> d_registry;
+
+      if(!src_reg) {
+#ifdef ALSA_FOUND
+        d_registry.push_back(register_source(REG_PRIO_HIGH, "alsa", 
alsa_source_fcn));
+#endif /* ALSA_FOUND */
+
+#ifdef OSS_FOUND
+        d_registry.push_back(register_source(REG_PRIO_LOW, "oss", 
oss_source_fcn));
+#endif /* OSS_FOUND */
+
+#ifdef PORTAUDIO_FOUND
+        d_registry.push_back(register_source(REG_PRIO_MED, "portaudio", 
portaudio_source_fcn));
+#endif /* PORTAUDIO_FOUND */
+
+#ifdef JACK_FOUND
+        d_registry.push_back(register_source(REG_PRIO_MED, "jack", 
jack_source_fcn));
+#endif /* JACK_FOUND */
+
+#ifdef OSX_FOUND
+        d_registry.push_back(register_source(REG_PRIO_HIGH, "osx", 
osx_source_fcn));
+#endif /* OSX_FOUND */
+
+#ifdef WIN32_FOUND
+        d_registry.push_back(register_source(REG_PRIO_HIGH, "windows", 
windows_source_fcn));
+#endif /* WIN32_FOUND */
+
+        src_reg = true;
+      }
+
       return d_registry;
     }
 
-    struct sink_entry_t
-    {
-      reg_prio_type prio;
-      std::string arch;
-      sink_factory_t sink;
-    };
-
-    static std::vector<sink_entry_t> &get_sink_registry(void)
+    static std::vector<sink_entry_t> &
+    get_sink_registry(void)
     {
+      static bool snk_reg = false;
       static std::vector<sink_entry_t> d_registry;
+
+      if(!snk_reg) {
+#if ALSA_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_HIGH, "alsa", 
alsa_sink_fcn));
+#endif /* ALSA_FOUND */
+
+#if OSS_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_LOW, "oss", oss_sink_fcn));
+#endif /* OSS_FOUND */
+
+#if PORTAUDIO_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_MED, "portaudio", 
portaudio_sink_fcn));
+#endif /* PORTAUDIO_FOUND */
+
+#if JACK_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_MED, "jack", 
jack_sink_fcn));
+#endif /* JACK_FOUND */
+
+#ifdef OSX_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_HIGH, "osx", 
osx_sink_fcn));
+#endif /* OSX_FOUND */
+
+#ifdef WIN32_FOUND
+        d_registry.push_back(register_sink(REG_PRIO_HIGH, "windows", 
windows_sink_fcn));
+#endif /* WIN32_FOUND */
+
+        snk_reg = true;
+      }
+
       return d_registry;
     }
 
     /***********************************************************************
      * Register functions
      **********************************************************************/
-    void
+    source_entry_t
     register_source(reg_prio_type prio,
                     const std::string &arch,
                     source_factory_t source)
@@ -70,18 +120,19 @@ namespace gr {
       entry.prio = prio;
       entry.arch = arch;
       entry.source = source;
-      get_source_registry().push_back(entry);
+      return entry;
     }
 
-    void register_sink(reg_prio_type prio,
-                       const std::string &arch,
-                       sink_factory_t sink)
+    sink_entry_t
+    register_sink(reg_prio_type prio,
+                  const std::string &arch,
+                  sink_factory_t sink)
     {
       sink_entry_t entry;
       entry.prio = prio;
       entry.arch = arch;
       entry.sink = sink;
-      get_sink_registry().push_back(entry);
+      return entry;
     }
 
     /***********************************************************************
@@ -106,6 +157,9 @@ namespace gr {
                  const std::string device_name,
                  bool ok_to_block)
     {
+      gr::logger_ptr logger, debug_logger;
+      configure_default_loggers(logger, debug_logger, "audio source");
+
       if(get_source_registry().empty()) {
         throw std::runtime_error("no available audio source factories");
       }
@@ -121,7 +175,7 @@ namespace gr {
         return e.source(sampling_rate, device_name, ok_to_block);
       }
 
-      //std::cout << "Audio source arch: " << entry.name << std::endl;
+      GR_LOG_INFO(logger, boost::format("Audio source arch: %1%") % 
(entry.arch));
       return entry.source(sampling_rate, device_name, ok_to_block);
     }
 
@@ -130,6 +184,9 @@ namespace gr {
                const std::string device_name,
                bool ok_to_block)
     {
+      gr::logger_ptr logger, debug_logger;
+      configure_default_loggers(logger, debug_logger, "audio source");
+
       if(get_sink_registry().empty()) {
         throw std::runtime_error("no available audio sink factories");
       }
@@ -146,7 +203,7 @@ namespace gr {
       }
 
       do_arch_warning(arch);
-      //std::cout << "Audio sink arch: " << entry.name << std::endl;
+      GR_LOG_INFO(logger, boost::format("Audio sink arch: %1%") % 
(entry.arch));
       return entry.sink(sampling_rate, device_name, ok_to_block);
     }
 
diff --git a/gr-audio/lib/audio_registry.h b/gr-audio/lib/audio_registry.h
index 6caf5c4..d18d5c5 100644
--- a/gr-audio/lib/audio_registry.h
+++ b/gr-audio/lib/audio_registry.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -38,24 +38,77 @@ namespace gr {
       REG_PRIO_HIGH = 300
     };
 
-    void register_source(reg_prio_type prio, const std::string &arch,
-                         source_factory_t source);
-    void register_sink(reg_prio_type prio, const std::string &arch,
+    struct source_entry_t {
+      reg_prio_type prio;
+      std::string arch;
+      source_factory_t source;
+    };
+
+    struct sink_entry_t
+    {
+      reg_prio_type prio;
+      std::string arch;
+      sink_factory_t sink;
+    };
+
+    source_entry_t register_source(reg_prio_type prio, const std::string &arch,
+                                  source_factory_t source);
+    sink_entry_t register_sink(reg_prio_type prio, const std::string &arch,
                        sink_factory_t sink);
 
-#define AUDIO_REGISTER_FIXTURE(x) static struct x{x();}x;x::x()
+#ifdef ALSA_FOUND
+    source::sptr alsa_source_fcn(int sampling_rate,
+                                 const std::string &device_name,
+                                 bool ok_to_block);
+    sink::sptr alsa_sink_fcn(int sampling_rate,
+                             const std::string &device_name,
+                             bool ok_to_block);
+#endif /* ALSA_FOUND */
+
+#ifdef OSS_FOUND
+    source::sptr oss_source_fcn(int sampling_rate,
+                                const std::string &device_name,
+                                bool ok_to_block);
+    sink::sptr oss_sink_fcn(int sampling_rate,
+                            const std::string &device_name,
+                            bool ok_to_block);
+#endif /* OSS_FOUND */
+
+#ifdef PORTAUDIO_FOUND
+    source::sptr portaudio_source_fcn(int sampling_rate,
+                                      const std::string &device_name,
+                                      bool ok_to_block);
+    sink::sptr portaudio_sink_fcn(int sampling_rate,
+                                  const std::string &device_name,
+                                  bool ok_to_block);
+#endif /* PORTAUDIO_FOUND */
+
+#ifdef JACK_FOUND
+    source::sptr jack_source_fcn(int sampling_rate,
+                                 const std::string &device_name,
+                                 bool ok_to_block);
+    sink::sptr jack_sink_fcn(int sampling_rate,
+                             const std::string &device_name,
+                             bool ok_to_block);
+#endif /* JACK_FOUND */
 
-#define AUDIO_REGISTER_SOURCE(prio, arch) \
-    static source::sptr arch##_source_fcn(int, const std::string &, bool); \
-    AUDIO_REGISTER_FIXTURE(arch##_source_reg) {                   \
-      register_source(prio, #arch, &arch##_source_fcn);           \
-    } static source::sptr arch##_source_fcn
+#ifdef OSX_FOUND
+    source::sptr osx_source_fcn(int sampling_rate,
+                                const std::string &device_name,
+                                bool ok_to_block);
+    sink::sptr osx_sink_fcn(int sampling_rate,
+                            const std::string &device_name,
+                            bool ok_to_block);
+#endif /* OSX_FOUND */
 
-#define AUDIO_REGISTER_SINK(prio, arch)                            \
-    static sink::sptr arch##_sink_fcn(int, const std::string &, bool); \
-    AUDIO_REGISTER_FIXTURE(arch##_sink_reg) {                     \
-      register_sink(prio, #arch, &arch##_sink_fcn);               \
-    } static sink::sptr arch##_sink_fcn
+#ifdef WIN32_FOUND
+    source::sptr windows_source_fcn(int sampling_rate,
+                                    const std::string &device_name,
+                                    bool ok_to_block);
+    sink::sptr windows_sink_fcn(int sampling_rate,
+                                const std::string &device_name,
+                                bool ok_to_block);
+#endif /* WIN32_FOUND */
 
   } /* namespace audio */
 } /* namespace gr */
diff --git a/gr-audio/lib/jack/jack_sink.cc b/gr-audio/lib/jack/jack_sink.cc
index 0da0742..6261545 100644
--- a/gr-audio/lib/jack/jack_sink.cc
+++ b/gr-audio/lib/jack/jack_sink.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005-2011,2013 Free Software Foundation, Inc.
+ * Copyright 2005-2011,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -40,9 +40,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_MED, jack)(int sampling_rate,
-                                            const std::string &device_name,
-                                            bool ok_to_block)
+    sink::sptr
+    jack_sink_fcn(int sampling_rate,
+                  const std::string &device_name,
+                  bool ok_to_block)
     {
       return sink::sptr
         (new jack_sink(sampling_rate, device_name, ok_to_block));
@@ -125,8 +126,8 @@ namespace gr {
       if((d_jack_client = jack_client_open(d_device_name.c_str(),
                                            options, &status,
                                            server_name)) == NULL) {
-        fprintf(stderr, "audio_jack_sink[%s]: jack server not running?\n",
-                d_device_name.c_str());
+        GR_LOG_ERROR(d_logger, boost::format("[%1%]: jack server not 
running?") \
+                     % d_device_name);
         throw std::runtime_error("audio_jack_sink");
       }
 
@@ -153,9 +154,8 @@ namespace gr {
       jack_nframes_t sample_rate = jack_get_sample_rate(d_jack_client);
 
       if((jack_nframes_t)sampling_rate != sample_rate) {
-        fprintf(stderr, "audio_jack_sink[%s]: unable to support sampling rate 
%d\n",
-                d_device_name.c_str(), sampling_rate);
-        fprintf(stderr, "  card requested %d instead.\n", sample_rate);
+        GR_LOG_INFO(d_logger, boost::format("[%1%]: unable to support sampling 
rate %2%\n\tCard requested %3% instead.") \
+                     % d_device_name % sampling_rate % d_sampling_rate);
       }
     }
 
@@ -251,8 +251,8 @@ namespace gr {
     void
     jack_sink::output_error_msg(const char *msg, int err)
     {
-      fprintf(stderr, "audio_jack_sink[%s]: %s: %d\n",
-              d_device_name.c_str(), msg,  err);
+      GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%: %3%") \
+                   % d_device_name % msg % err);
     }
 
     void
diff --git a/gr-audio/lib/jack/jack_source.cc b/gr-audio/lib/jack/jack_source.cc
index 9223cbb..ced1d47 100644
--- a/gr-audio/lib/jack/jack_source.cc
+++ b/gr-audio/lib/jack/jack_source.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005,2006,2010,2013 Free Software Foundation, Inc.
+ * Copyright 2005,2006,2010,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -40,9 +40,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_MED, jack)(int sampling_rate,
-                                              const std::string &device_name,
-                                              bool ok_to_block)
+    source::sptr
+    jack_source_fcn(int sampling_rate,
+                    const std::string &device_name,
+                    bool ok_to_block)
     {
       return source::sptr
         (new jack_source(sampling_rate, device_name, ok_to_block));
@@ -125,8 +126,8 @@ namespace gr {
       if((d_jack_client = jack_client_open(d_device_name.c_str(),
                                            options, &status,
                                            server_name)) == NULL) {
-        fprintf(stderr, "audio_jack_source[%s]: jack server not running?\n",
-                d_device_name.c_str());
+        GR_LOG_ERROR(d_logger, boost::format("[%1%]: jack server not 
running?") \
+                     % d_device_name);
         throw std::runtime_error("audio_jack_source");
       }
 
@@ -150,9 +151,8 @@ namespace gr {
       jack_nframes_t sample_rate = jack_get_sample_rate(d_jack_client);
 
       if((jack_nframes_t)sampling_rate != sample_rate) {
-        fprintf(stderr, "audio_jack_source[%s]: unable to support sampling 
rate %d\n",
-                d_device_name.c_str(), sampling_rate);
-        fprintf(stderr, "  card requested %d instead.\n", sample_rate);
+        GR_LOG_INFO(d_logger, boost::format("[%1%]: unable to support sampling 
rate %2%\n\tCard requested %3% instead.") \
+                     % d_device_name % sampling_rate % d_sampling_rate);
       }
     }
 
@@ -251,8 +251,8 @@ namespace gr {
     void
     jack_source::output_error_msg(const char *msg, int err)
     {
-      fprintf(stderr, "audio_jack_source[%s]: %s: %d\n",
-              d_device_name.c_str(), msg,  err);
+      GR_LOG_ERROR(d_logger, boost::format("[%1%]: %2%: %3%") \
+                   % d_device_name % msg % err);
     }
 
     void
diff --git a/gr-audio/lib/oss/oss_sink.cc b/gr-audio/lib/oss/oss_sink.cc
index 75372b0..b11adc0 100644
--- a/gr-audio/lib/oss/oss_sink.cc
+++ b/gr-audio/lib/oss/oss_sink.cc
@@ -41,9 +41,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_LOW, oss)(int sampling_rate,
-                                           const std::string &device_name,
-                                           bool ok_to_block)
+    sink::sptr
+    oss_sink_fcn(int sampling_rate,
+                 const std::string &device_name,
+                 bool ok_to_block)
     {
       return sink::sptr
         (new oss_sink(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/oss/oss_source.cc b/gr-audio/lib/oss/oss_source.cc
index 0d27f74..719349e 100644
--- a/gr-audio/lib/oss/oss_source.cc
+++ b/gr-audio/lib/oss/oss_source.cc
@@ -41,9 +41,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_LOW, oss)(int sampling_rate,
-                                             const std::string &device_name,
-                                             bool ok_to_block)
+    source::sptr
+    oss_source_fcn(int sampling_rate,
+                   const std::string &device_name,
+                   bool ok_to_block)
     {
       return source::sptr
         (new oss_source(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/osx/osx_sink.cc b/gr-audio/lib/osx/osx_sink.cc
index dc21ab2..0b304ee 100644
--- a/gr-audio/lib/osx/osx_sink.cc
+++ b/gr-audio/lib/osx/osx_sink.cc
@@ -34,10 +34,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_HIGH, osx)
-      (int sampling_rate,
-       const std::string& device_name,
-       bool ok_to_block)
+    sink::sptr
+    osx_sink_fcn(int sampling_rate,
+                 const std::string& device_name,
+                 bool ok_to_block)
     {
       return sink::sptr
         (new osx_sink(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/osx/osx_source.cc b/gr-audio/lib/osx/osx_source.cc
index b51a656..e37fc07 100644
--- a/gr-audio/lib/osx/osx_source.cc
+++ b/gr-audio/lib/osx/osx_source.cc
@@ -34,10 +34,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_HIGH, osx)
-      (int sampling_rate,
-       const std::string& device_name,
-       bool ok_to_block)
+    source::sptr
+    osx_source_fcn(int sampling_rate,
+                   const std::string& device_name,
+                   bool ok_to_block)
     {
       return source::sptr
         (new osx_source(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/portaudio/portaudio_sink.cc 
b/gr-audio/lib/portaudio/portaudio_sink.cc
index f3315f1..4a0a969 100644
--- a/gr-audio/lib/portaudio/portaudio_sink.cc
+++ b/gr-audio/lib/portaudio/portaudio_sink.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2006-2011,2013 Free Software Foundation, Inc.
+ * Copyright 2006-2011,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -38,9 +38,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_MED, portaudio)(int sampling_rate,
-                                                 const std::string 
&device_name,
-                                                 bool ok_to_block)
+    sink::sptr
+    portaudio_sink_fcn(int sampling_rate,
+                       const std::string &device_name,
+                       bool ok_to_block)
     {
       return sink::sptr
         (new portaudio_sink(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/portaudio/portaudio_source.cc 
b/gr-audio/lib/portaudio/portaudio_source.cc
index 178d507..efbe2b6 100644
--- a/gr-audio/lib/portaudio/portaudio_source.cc
+++ b/gr-audio/lib/portaudio/portaudio_source.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2006-2011,2013 Free Software Foundation, Inc.
+ * Copyright 2006-2011,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -38,9 +38,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_MED, portaudio)(int sampling_rate,
-                                                   const std::string 
&device_name,
-                                                   bool ok_to_block)
+    source::sptr
+    portaudio_source_fcn(int sampling_rate,
+                         const std::string &device_name,
+                         bool ok_to_block)
     {
       return source::sptr
         (new portaudio_source(sampling_rate, device_name, ok_to_block));
diff --git a/gr-audio/lib/windows/windows_sink.cc 
b/gr-audio/lib/windows/windows_sink.cc
index 33a706b..6598c97 100644
--- a/gr-audio/lib/windows/windows_sink.cc
+++ b/gr-audio/lib/windows/windows_sink.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
-* Copyright 2004-2011,2013 Free Software Foundation, Inc.
+* Copyright 2004-2011,2013-2014 Free Software Foundation, Inc.
 *
 * This file is part of GNU Radio
 *
@@ -40,9 +40,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SINK(REG_PRIO_HIGH, windows)(int sampling_rate,
-                                                const std::string &device_name,
-                                                bool)
+    sink::sptr
+    windows_sink_fcn(int sampling_rate,
+                     const std::string &device_name,
+                     bool)
     {
       return sink::sptr
         (new windows_sink(sampling_rate, device_name));
diff --git a/gr-audio/lib/windows/windows_source.cc 
b/gr-audio/lib/windows/windows_source.cc
index bc1597f..02c9311 100644
--- a/gr-audio/lib/windows/windows_source.cc
+++ b/gr-audio/lib/windows/windows_source.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2004-2011,2013 Free Software Foundation, Inc.
+ * Copyright 2004-2011,2013-2014 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -40,9 +40,10 @@
 namespace gr {
   namespace audio {
 
-    AUDIO_REGISTER_SOURCE(REG_PRIO_HIGH, windows)(int sampling_rate,
-                                                  const std::string 
&device_name,
-                                                  bool)
+    source::sptr
+    windows_source_fcn(int sampling_rate,
+                       const std::string &device_name,
+                       bool)
     {
       return source::sptr
         (new windows_source(sampling_rate, device_name));



reply via email to

[Prev in Thread] Current Thread [Next in Thread]