aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/input/Edi.cpp17
-rw-r--r--src/input/Edi.h3
2 files changed, 16 insertions, 4 deletions
diff --git a/src/input/Edi.cpp b/src/input/Edi.cpp
index ebeca77..692ecb3 100644
--- a/src/input/Edi.cpp
+++ b/src/input/Edi.cpp
@@ -140,8 +140,11 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size)
else if (not m_pending_sti_frame.frame.empty()) {
// Can only happen when switching from timestamp-based buffer management!
if (m_pending_sti_frame.frame.size() != size) {
- etiLog.level(debug) << "EDI input " << m_name << " size mismatch: " <<
- m_pending_sti_frame.frame.size() << " received, " << size << " requested";
+ if (not m_size_mismatch_printed) {
+ etiLog.level(debug) << "EDI input " << m_name << " size mismatch: " <<
+ m_pending_sti_frame.frame.size() << " received, " << size << " requested";
+ m_size_mismatch_printed = true;
+ }
memset(buffer, 0, size * sizeof(*buffer));
m_stats.notifyUnderrun();
return 0;
@@ -158,6 +161,7 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size)
m_pending_sti_frame.frame.end(),
buffer);
m_pending_sti_frame.frame.clear();
+ m_size_mismatch_printed = false;
return size;
}
}
@@ -192,11 +196,15 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size)
m_stats.notifyPeakLevels(sti.audio_levels.left, sti.audio_levels.right);
copy(sti.frame.cbegin(), sti.frame.cend(), buffer);
+ m_size_mismatch_printed = false;
return size;
}
else {
- etiLog.level(debug) << "EDI input " << m_name << " size mismatch: " <<
- sti.frame.size() << " received, " << size << " requested";
+ if (not m_size_mismatch_printed) {
+ etiLog.level(debug) << "EDI input " << m_name << " size mismatch: " <<
+ sti.frame.size() << " received, " << size << " requested";
+ m_size_mismatch_printed = true;
+ }
memset(buffer, 0, size * sizeof(*buffer));
m_stats.notifyUnderrun();
return 0;
@@ -206,6 +214,7 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size)
memset(buffer, 0, size * sizeof(*buffer));
m_is_prebuffering = true;
etiLog.level(info) << "EDI input " << m_name << " re-enabling pre-buffering";
+ m_size_mismatch_printed = false;
m_stats.notifyUnderrun();
return 0;
}
diff --git a/src/input/Edi.h b/src/input/Edi.h
index ca465bd..cf4c576 100644
--- a/src/input/Edi.h
+++ b/src/input/Edi.h
@@ -105,6 +105,9 @@ class Edi : public InputBase, public RemoteControllable {
// State variable used in prebuffering-based buffer management
bool m_is_prebuffering = true;
+ // Display the 'size mismatch' warning only once
+ bool m_size_mismatch_printed = false;
+
/* When using prebuffering, consider the buffer to be full on the
* receive side if it's above the overrun threshold.
*