summaryrefslogtreecommitdiff
path: root/gr-audio/lib/audio_registry.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-audio/lib/audio_registry.cc')
-rw-r--r--gr-audio/lib/audio_registry.cc105
1 files changed, 81 insertions, 24 deletions
diff --git a/gr-audio/lib/audio_registry.cc b/gr-audio/lib/audio_registry.cc
index 98848a0f89..ece723f287 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);
}