From 3e5ce23aefb42a07f3b44086fe872f2de54e2804 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 3 Feb 2017 14:21:45 +0100 Subject: Do not lose fragments in EDI interleaver --- src/dabOutput/edi/Interleaver.cpp | 19 ++++++++++--------- src/dabOutput/edi/Interleaver.h | 4 +++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/dabOutput/edi/Interleaver.cpp b/src/dabOutput/edi/Interleaver.cpp index 83f2512..810e76f 100644 --- a/src/dabOutput/edi/Interleaver.cpp +++ b/src/dabOutput/edi/Interleaver.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 + Copyright (C) 2017 Matthias P. Braendli, matthias.braendli@mpb.li http://www.opendigitalradio.org @@ -50,16 +50,17 @@ Interleaver::fragment_vec Interleaver::Interleave(fragment_vec &fragments) auto& last_buffer = m_buffer.back(); - const bool last_buffer_is_complete = - (last_buffer.size() >= m_fragment_count * m_latency); + for (auto& fragment : fragments) { + const bool last_buffer_is_complete = + (last_buffer.size() >= m_fragment_count * m_latency); - if (last_buffer_is_complete) { - m_buffer.emplace_back(); - last_buffer = m_buffer.back(); - } + if (last_buffer_is_complete) { + m_buffer.emplace_back(); + last_buffer = m_buffer.back(); + } - std::move(fragments.begin(), fragments.end(), - std::back_inserter(last_buffer)); + last_buffer.push_back(std::move(fragment)); + } fragments.clear(); diff --git a/src/dabOutput/edi/Interleaver.h b/src/dabOutput/edi/Interleaver.h index 51a584f..f94219e 100644 --- a/src/dabOutput/edi/Interleaver.h +++ b/src/dabOutput/edi/Interleaver.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 + Copyright (C) 2017 Matthias P. Braendli, matthias.braendli@mpb.li http://www.opendigitalradio.org @@ -61,6 +61,8 @@ class Interleaver { size_t m_fragment_count = 0; size_t m_interleave_offset = 0; size_t m_stride = 0; + + /* Buffer that accumulates enough fragments to interleave */ std::deque m_buffer; }; -- cgit v1.2.3