diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/SampleQueue.h | 9 | ||||
| -rw-r--r-- | src/odr-audioenc.cpp | 9 | 
2 files changed, 16 insertions, 2 deletions
| diff --git a/src/SampleQueue.h b/src/SampleQueue.h index dd01986..646f3dd 100644 --- a/src/SampleQueue.h +++ b/src/SampleQueue.h @@ -120,10 +120,12 @@ public:      /*! Wait until len elements in the queue are available,       * and then fill the buf. If the timeout_ms (expressed in milliseconds       * expires), fill the available number of elements. +     * Also update the overrun variable with the information +     * of how many overruns we saw since the last pop.       *       * \return the number of elemets written into buf       */ -    size_t pop_wait(T* buf, size_t len, int timeout_ms) +    size_t pop_wait(T* buf, size_t len, int timeout_ms, size_t* overruns = NULL)      {          assert(len % (m_channels * m_bytes_per_sample) == 0); @@ -132,6 +134,11 @@ public:  #endif          std::unique_lock<std::mutex> lock(m_mutex); +        if (overruns) { +            *overruns = m_overruns; +            m_overruns = 0; +        } +          auto time_start = std::chrono::steady_clock::now();          const auto timeout = std::chrono::milliseconds(timeout_ms); diff --git a/src/odr-audioenc.cpp b/src/odr-audioenc.cpp index da9b93a..b5f7b9f 100644 --- a/src/odr-audioenc.cpp +++ b/src/odr-audioenc.cpp @@ -1099,9 +1099,16 @@ int main(int argc, char *argv[])              const int timeout_ms = 10000;              read_bytes = input_buf.size(); +            size_t overruns = 0; +              /*! pop_wait() must return after a timeout, otherwise the silence detector cannot do               * its job. */ -            size_t bytes_from_queue = queue.pop_wait(&input_buf[0], read_bytes, timeout_ms); // returns bytes +            size_t bytes_from_queue = queue.pop_wait(&input_buf[0], read_bytes, timeout_ms, &overruns); // returns bytes + +            if (overruns) { +                fprintf(stderr, "%zd overruns occured!\n", overruns); +                status |= STATUS_OVERRUN; +            }              if (bytes_from_queue < read_bytes) {                  // queue timeout occurred | 
