diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/input/Edi.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/input/Edi.cpp b/src/input/Edi.cpp index ec0f17b..4a499e1 100644 --- a/src/input/Edi.cpp +++ b/src/input/Edi.cpp @@ -257,9 +257,7 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size, std::time_t seconds, int utc } } else { - EdiDecoder::sti_frame_t sti_frame; - m_frames.try_pop(sti_frame); - if (sti_frame.frame.empty()) { + if (m_pending_sti_frame.frame.empty()) { etiLog.level(warn) << "EDI input " << m_name << " empty, re-enabling pre-buffering"; memset(buffer, 0, size); @@ -267,10 +265,11 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size, std::time_t seconds, int utc m_is_prebuffering = true; return 0; } - else if (not sti_frame.timestamp.valid()) { + else if (not m_pending_sti_frame.timestamp.valid()) { etiLog.level(warn) << "EDI input " << m_name << " invalid timestamp, ignoring"; memset(buffer, 0, size); + m_pending_sti_frame.frame.clear(); m_stats.notifyUnderrun(); return 0; } @@ -281,21 +280,23 @@ size_t Edi::readFrame(uint8_t *buffer, size_t size, std::time_t seconds, int utc if (offset > 24e-3) { m_stats.notifyUnderrun(); m_is_prebuffering = true; + m_pending_sti_frame.frame.clear(); etiLog.level(warn) << "EDI input " << m_name << " timestamp out of bounds, re-enabling pre-buffering"; memset(buffer, 0, size); return 0; } else { - if (not sti_frame.version_data.version.empty()) { + if (not m_pending_sti_frame.version_data.version.empty()) { m_stats.notifyVersion( - sti_frame.version_data.version, - sti_frame.version_data.uptime_s); + m_pending_sti_frame.version_data.version, + m_pending_sti_frame.version_data.uptime_s); } - m_stats.notifyPeakLevels(sti_frame.audio_levels.left, - sti_frame.audio_levels.right); - copy(sti_frame.frame.cbegin(), sti_frame.frame.cend(), buffer); + m_stats.notifyPeakLevels(m_pending_sti_frame.audio_levels.left, + m_pending_sti_frame.audio_levels.right); + copy(m_pending_sti_frame.frame.cbegin(), m_pending_sti_frame.frame.cend(), buffer); + m_pending_sti_frame.frame.clear(); return size; } } |