diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-02-03 14:21:45 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-02-03 14:21:45 +0100 |
commit | 3e5ce23aefb42a07f3b44086fe872f2de54e2804 (patch) | |
tree | 39a724907505134abb3331741b2038729eaaca96 | |
parent | e010d6a4e8342cf3042fb96a94ef3df766eeda3d (diff) | |
download | dabmux-3e5ce23aefb42a07f3b44086fe872f2de54e2804.tar.gz dabmux-3e5ce23aefb42a07f3b44086fe872f2de54e2804.tar.bz2 dabmux-3e5ce23aefb42a07f3b44086fe872f2de54e2804.zip |
Do not lose fragments in EDI interleaver
-rw-r--r-- | src/dabOutput/edi/Interleaver.cpp | 19 | ||||
-rw-r--r-- | 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<fragment_vec> m_buffer; }; |