added some debugging comments; fixed a bug in the circular buffer so
authormichaelld <michaelld@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 17 Aug 2007 03:18:37 +0000 (03:18 +0000)
committermichaelld <michaelld@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 17 Aug 2007 03:18:37 +0000 (03:18 +0000)
that the internal mutex is released correctly and new data overwrites
older data when an overrun occurs and writing is not blocked.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@6145 221aa14e-8319-0410-a670-987f0aec2ac5

gr-audio-osx/src/audio_osx_source.cc
gr-audio-osx/src/circular_buffer.h

index 27097f106cf807f473bd333cdb9b053000340e52..66bed24fe69eff4ea30b9654836a86b453cb7b77 100644 (file)
@@ -248,7 +248,7 @@ audio_osx_source::audio_osx_source (int sample_rate,
                      "audio_osx_source::audio_osx_source");
 
 #if _OSX_AU_DEBUG_
-  fprintf (stderr, "---- Device Stream Format ----\n" );
+  fprintf (stderr, "\n---- Device Stream Format ----\n" );
   PrintStreamDesc (&asbd_device);
 #endif
 
@@ -264,7 +264,7 @@ audio_osx_source::audio_osx_source (int sample_rate,
                      "audio_osx_source::audio_osx_source");
 
 #if _OSX_AU_DEBUG_
-  fprintf (stderr, "---- Client Stream Format ----\n");
+  fprintf (stderr, "\n---- Client Stream Format ----\n");
   PrintStreamDesc (&asbd_client);
 #endif
 
@@ -839,6 +839,11 @@ audio_osx_source::AUInputCallback (void* inRefCon,
 
   while (--l_counter >= 0) {
     float* inBuffer = (float*) This->d_OutputBuffer->mBuffers[l_counter].mData;
+
+#if _OSX_AU_DEBUG_
+  fprintf (stderr, "cb2.5: enqueuing audio data.\n");
+#endif
+
     int l_res = This->d_buffers[l_counter]->enqueue (inBuffer, ActualOutputFrames);
     if (l_res == -1)
       res = -1;
@@ -857,7 +862,7 @@ audio_osx_source::AUInputCallback (void* inRefCon,
   }
 
 #if _OSX_AU_DEBUG_
-  fprintf (stderr, "cb5: #OI = %4ld, #Cnt = %4ld, mSC = %ld, \n",
+  fprintf (stderr, "cb3: #OI = %4ld, #Cnt = %4ld, mSC = %ld, \n",
           ActualOutputFrames, This->d_queueSampleCount,
           This->d_max_sample_count);
 #endif
@@ -865,9 +870,17 @@ audio_osx_source::AUInputCallback (void* inRefCon,
 // signal that data is available, if appropraite
   This->d_cond_data->signal ();
 
+#if _OSX_AU_DEBUG_
+  fprintf (stderr, "cb4: releasing internal mutex.\n");
+#endif
+
 // release control to allow for other processing parts to run
   This->d_internal->post ();
 
+#if _OSX_AU_DEBUG_
+  fprintf (stderr, "cb5: returning.\n");
+#endif
+
   return (err);
 }
 
index 984182dd2b3f578b97933d9f91350ca7ba411bbc..4b5e7ba3518867197b7b60fa8335a10ed285528d 100644 (file)
@@ -159,6 +159,8 @@ public:
       d_internal->unlock ();
       return (2);
     }
+    // set the return value to 1: success; change if needed
+    int retval = 1;
     if (bufLen_I > d_n_avail_write_I) {
       if (d_doWriteBlock) {
        while (bufLen_I > d_n_avail_write_I) {
@@ -185,7 +187,7 @@ public:
 #if DO_DEBUG
        fprintf (stderr, "circular_buffer::enqueue: overflow\n");
 #endif
-       return (-1);
+       retval = -1;
       }
     }
     UInt32 n_now_I = d_bufLen_I - d_writeNdx_I, n_start_I = 0;
@@ -203,7 +205,7 @@ public:
     d_n_avail_write_I -= bufLen_I;
     d_readBlock->signal ();
     d_internal->unlock ();
-    return (1);
+    return (retval);
   };
 
 /*