From d5d0ca37f209d85298f46fa730abed5fa671174f Mon Sep 17 00:00:00 2001 From: michaelld Date: Fri, 17 Aug 2007 03:18:37 +0000 Subject: [PATCH] added some debugging comments; fixed a bug in the circular buffer so 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 | 19 ++++++++++++++++--- gr-audio-osx/src/circular_buffer.h | 6 ++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gr-audio-osx/src/audio_osx_source.cc b/gr-audio-osx/src/audio_osx_source.cc index 27097f10..66bed24f 100644 --- a/gr-audio-osx/src/audio_osx_source.cc +++ b/gr-audio-osx/src/audio_osx_source.cc @@ -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); } diff --git a/gr-audio-osx/src/circular_buffer.h b/gr-audio-osx/src/circular_buffer.h index 984182dd..4b5e7ba3 100644 --- a/gr-audio-osx/src/circular_buffer.h +++ b/gr-audio-osx/src/circular_buffer.h @@ -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); }; /* -- 2.30.2