aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMaPePeR <MaPePeR@users.noreply.github.com>2018-06-01 14:10:54 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2018-06-04 14:21:19 +0200
commitee29f6dbd130f26ed51b7a94b34790ba4c039089 (patch)
tree8d46ae6451f1f61dee3b78af2096b6e34365a93a /src
parent510b1edfd400752f91957e058fd6e009ed694d92 (diff)
downloadODR-AudioEnc-ee29f6dbd130f26ed51b7a94b34790ba4c039089.tar.gz
ODR-AudioEnc-ee29f6dbd130f26ed51b7a94b34790ba4c039089.tar.bz2
ODR-AudioEnc-ee29f6dbd130f26ed51b7a94b34790ba4c039089.zip
Check if overruns occured even when drift compensation is not turned on
(cherry picked from commit 15610351b76113f1026e4ad40ec7ba9926d09498)
Diffstat (limited to 'src')
-rw-r--r--src/SampleQueue.h9
-rw-r--r--src/odr-audioenc.cpp9
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