summaryrefslogtreecommitdiffstats
path: root/src/input/Edi.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2019-10-01 12:08:55 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2019-10-01 12:08:55 +0200
commit5ea9d01de68fc9d0f4c6578d41b09bfe541ea20f (patch)
treee4222f33fdc777ad983f45acaefec6f426222b2f /src/input/Edi.cpp
parentc5185cbf27cc01d0f097254d6a8e762a13281f52 (diff)
downloaddabmux-5ea9d01de68fc9d0f4c6578d41b09bfe541ea20f.tar.gz
dabmux-5ea9d01de68fc9d0f4c6578d41b09bfe541ea20f.tar.bz2
dabmux-5ea9d01de68fc9d0f4c6578d41b09bfe541ea20f.zip
EDI input: fix timestamped frame read
Diffstat (limited to 'src/input/Edi.cpp')
-rw-r--r--src/input/Edi.cpp21
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;
}
}