commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4155 - gnuradio/branches/developers/brickle/jack/gr-a


From: brickle
Subject: [Commit-gnuradio] r4155 - gnuradio/branches/developers/brickle/jack/gr-audio-jack/src
Date: Tue, 19 Dec 2006 18:35:27 -0700 (MST)

Author: brickle
Date: 2006-12-19 18:35:26 -0700 (Tue, 19 Dec 2006)
New Revision: 4155

Modified:
   gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.cc
   gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.h
   
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.cc
   
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.h
Log:
filled out mgr code, most of source; sink will be parallel

Modified: 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.cc
===================================================================
--- 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.cc   
    2006-12-20 00:27:23 UTC (rev 4154)
+++ 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.cc   
    2006-12-20 01:35:26 UTC (rev 4155)
@@ -76,13 +76,13 @@
 
   for (int i = 0; i < MAX_JACK_PORTS; i++)
     if (out_info[i].used)
-      out_info[i].semaphore.post();
+      out_info[i].semaphore->post();
 
   // trip sources
 
   for (int i = 0; i < MAX_JACK_PORTS; i++)
     if (in_info[i].used)
-      in_info[i].semaphore.post();
+      in_info[i].semaphore->post();
 }
 
 // minor callbacks
@@ -101,6 +101,18 @@
 //------------------------------------------------------------------------
 
 int
+audio_jack_mgr::audio_jack_mgr_sample_rate()
+{
+  return d_sample_rate;
+}
+
+int
+audio_jack_mgr::audio_jack_mgr_buffer_size()
+{
+  return d_buffer_size;
+}
+
+int
 audio_jack_mgr::audio_jack_mgr_register_source(const std::string name,
                                               jack_ringbuffer_t *rb_ptr,
                                               omni_semaphore *sem_ptr)

Modified: 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.h
===================================================================
--- 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.h    
    2006-12-20 00:27:23 UTC (rev 4154)
+++ 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_mgr.h    
    2006-12-20 01:35:26 UTC (rev 4155)
@@ -58,13 +58,18 @@
   jack_info_t          d_jack_input[MAX_JACK_PORTS]; // sources
   jack_info_t          d_jack_output[MAX_JACK_PORTS]; // sinks
 
-
   audio_jack_mgr (int sample_rate, const std::string name);
 
  public:
   ~audio_jack_mgr ();
 
   int
+  audio_jack_mgr_sample_rate();
+
+  int
+  audio_jack_mgr_buffer_size();
+
+  int
   audio_jack_mgr_register_source(const std::string name,
                                 jack_ringbuffer_t *rb_ptr,
                                 omni_semaphore *sem_ptr);

Modified: 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.cc
===================================================================
--- 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.cc
    2006-12-20 00:27:23 UTC (rev 4154)
+++ 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.cc
    2006-12-20 01:35:26 UTC (rev 4155)
@@ -58,80 +58,50 @@
   : gr_sync_block ("audio_jack_source",
                   gr_make_io_signature (0, 0, 0),
                   gr_make_io_signature (0, 0, 0)),
-    d_sampling_rate (sampling_rate),
     d_device_name (device_name.empty() ? default_device_name() : device_name),
     d_ok_to_block(ok_to_block),
-    d_jack_client (0),
-    d_ringbuffer (0),
-    d_noverruns (0)
+    d_ringbuffer_ready(1, 1)
 {
+  d_jack_sample_rate =
+    audio_jack_mgr::singleton()->audio_jack_mgr_sample_rate();
+  d_jack_buffer_size =
+    audio_jack_mgr::singleton()->audio_jack_mgr_buffer_size();
 
-    pthread_cond_init(&d_ringbuffer_ready, NULL);
-    pthread_mutex_init(&d_jack_process_lock, NULL);
+  d_ringbuffer =
+    jack_ringbuffer_create(N_BUFFERS * d_jack_buffer_size * sizeof(sample_t));
+  if (d_ringbuffer == NULL)
+    bail("jack_ringbuffer_create failed", 0);
 
-  // try to become a client of the JACK server
-  if ((d_jack_client = jack_client_new (d_device_name.c_str ())) == 0) {
-    fprintf (stderr, "audio_jack_source[%s]: jack server not running?\n",
-            d_device_name.c_str());
-    throw std::runtime_error ("audio_jack_source");
-  }
+  d_id_from_mgr =
+    audio_jack_mgr::audio_jack_mgr_register_source(name,
+                                                  d_ringbuffer,
+                                                  &d_ringbuffer_ready);
 
-  // tell the JACK server to call `jack_source_process()' whenever
-  // there is work to be done.
-  jack_set_process_callback (d_jack_client, &jack_source_process, (void*)this);
-
-  // tell the JACK server to call `jack_shutdown()' if
-  // it ever shuts down, either entirely, or if it
-  // just decides to stop calling us.
-
-  //jack_on_shutdown (d_jack_client, &jack_shutdown, (void*)this);
- 
   d_jack_input_port = jack_port_register (d_jack_client, "in", 
                                          JACK_DEFAULT_AUDIO_TYPE,
                                          JackPortIsInput, 0);
 
-  d_jack_buffer_size = jack_get_buffer_size (d_jack_client);
-
-  set_output_multiple (d_jack_buffer_size);
-
-  d_ringbuffer = jack_ringbuffer_create 
(N_BUFFERS*d_jack_buffer_size*sizeof(sample_t));
-  if (d_ringbuffer == NULL)
-    bail ("jack_ringbuffer_create failed", 0);
-
-  assert(sizeof(float)==sizeof(sample_t));
-  set_output_signature (gr_make_io_signature (1, 1, sizeof (sample_t)));
-
-
-  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);
-  }
+  set_output_multiple(d_jack_buffer_size);
+  set_output_signature(gr_make_io_signature (1, 1, sizeof (sample_t)));
 }
 
 
 bool
 audio_jack_source::check_topology (int ninputs, int noutputs)
 {
-  // tell the JACK server that we are ready to roll 
-  if (jack_activate (d_jack_client))
-    throw std::runtime_error ("audio_jack_source");
-
   return true;
 }
 
-audio_jack_source::~audio_jack_source ()
+audio_jack_source::~audio_jack_source()
 {
-  jack_client_close (d_jack_client);
+  audio_jack_mgr::audio_jack_mgr_unregister_source(d_id_from_manager);
   jack_ringbuffer_free (d_ringbuffer);
 }
 
 int
-audio_portaudio_source::work (int noutput_items,
-                             gr_vector_const_void_star &input_items,
-                             gr_vector_void_star &output_items)
+audio_portaudio_source::work(int noutput_items,
+                            gr_vector_const_void_star &input_items,
+                            gr_vector_void_star &output_items)
 {
   float **out = (float **) &output_items[0];
   const unsigned nchan = d_input_parameters.channelCount; // # of channels == 
samples/frame

Modified: 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.h
===================================================================
--- 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.h 
    2006-12-20 00:27:23 UTC (rev 4154)
+++ 
gnuradio/branches/developers/brickle/jack/gr-audio-jack/src/audio_jack_source.h 
    2006-12-20 01:35:26 UTC (rev 4155)
@@ -66,18 +66,19 @@
                                           gr_vector_const_void_star 
&input_items,
                                           gr_vector_void_star &output_items);
 
-  unsigned int         d_sampling_rate;
+  unsigned int         d_sample_rate;
   std::string          d_device_name;
   bool                 d_ok_to_block;
 
-  jack_ringbuffer_t    *d_ringbuffer;
   jack_nframes_t       d_jack_buffer_size;
 
+  jack_ringbuffer_t    *d_ringbuffer;
+
   omni_semaphore       d_ringbuffer_ready;
 
   // our position in the manager's table of sources/ports
 
-  int                  d_mgr_id;
+  int                  d_id_from_mgr;
 
   // random stats
 





reply via email to

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