summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc17
-rw-r--r--gr-dtv/lib/atsc/atsc_deinterleaver_impl.h8
-rw-r--r--gr-dtv/lib/atsc/atsc_interleaver_fifo.h27
-rw-r--r--gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc15
-rw-r--r--gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h2
-rw-r--r--gr-dtv/lib/atsc/interleaver_fifo.h27
6 files changed, 35 insertions, 61 deletions
diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc
index a906bf8597..fcc5931365 100644
--- a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc
+++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc
@@ -30,25 +30,22 @@ atsc_deinterleaver_impl::atsc_deinterleaver_impl()
io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))),
alignment_fifo(156)
{
- m_fifo.resize(52);
+ m_fifo.reserve(s_interleavers);
- for (int i = 0; i < 52; i++)
- m_fifo[52 - 1 - i] = new interleaver_fifo<unsigned char>(i * 4);
+ for (int i = 0; i < s_interleavers; i++)
+ m_fifo.emplace_back((52 - 1 - i) * 4);
sync();
}
-atsc_deinterleaver_impl::~atsc_deinterleaver_impl()
-{
- for (int i = 0; i < 52; i++)
- delete m_fifo[i];
-}
+atsc_deinterleaver_impl::~atsc_deinterleaver_impl() {}
void atsc_deinterleaver_impl::reset()
{
sync();
- for (int i = 0; i < 52; i++)
- m_fifo[i]->reset();
+
+ for (auto& i : m_fifo)
+ i.reset();
}
int atsc_deinterleaver_impl::work(int noutput_items,
diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h
index c8cefacae4..124775eb9c 100644
--- a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h
+++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h
@@ -21,12 +21,14 @@ namespace dtv {
class atsc_deinterleaver_impl : public atsc_deinterleaver
{
private:
+ static constexpr int s_interleavers = 52;
+
//! transform a single symbol
unsigned char transform(unsigned char input)
{
- unsigned char retval = m_fifo[m_commutator]->stuff(input);
+ unsigned char retval = m_fifo[m_commutator].stuff(input);
m_commutator++;
- if (m_commutator >= 52)
+ if (m_commutator >= s_interleavers)
m_commutator = 0;
return retval;
}
@@ -41,7 +43,7 @@ private:
interleaver_fifo<unsigned char> alignment_fifo;
int m_commutator;
- std::vector<interleaver_fifo<unsigned char>*> m_fifo;
+ std::vector<interleaver_fifo<unsigned char>> m_fifo;
public:
atsc_deinterleaver_impl();
diff --git a/gr-dtv/lib/atsc/atsc_interleaver_fifo.h b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h
index cdbf01ff5c..32e6da2d12 100644
--- a/gr-dtv/lib/atsc/atsc_interleaver_fifo.h
+++ b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h
@@ -11,7 +11,8 @@
#ifndef INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H
#define INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H
-#include <string.h>
+#include <algorithm>
+#include <vector>
namespace gr {
namespace dtv {
@@ -21,7 +22,6 @@ class interleaver_fifo
{
public:
interleaver_fifo(unsigned int size);
- ~interleaver_fifo();
//! reset interleaver (flushes contents and resets commutator)
void reset();
@@ -29,44 +29,33 @@ public:
//! stuff a symbol into the fifo and return the oldest
symbol_type stuff(symbol_type input)
{
- if (m_size == 0)
+ if (m_fifo.empty())
return input;
symbol_type retval = m_fifo[m_position];
m_fifo[m_position] = input;
m_position++;
- if (m_position >= m_size)
+ if (m_position >= m_fifo.size())
m_position = 0;
return retval;
}
protected:
- unsigned int m_size;
- unsigned int m_position;
- symbol_type* m_fifo;
+ unsigned int m_position = 0;
+ std::vector<symbol_type> m_fifo;
};
template <class symbol_type>
-interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size)
+interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) : m_fifo(size)
{
- m_size = size;
- m_position = 0;
- m_fifo = new symbol_type[size];
- memset(m_fifo, 0, m_size * sizeof(symbol_type));
-}
-
-template <class symbol_type>
-interleaver_fifo<symbol_type>::~interleaver_fifo()
-{
- delete[] m_fifo;
}
template <class symbol_type>
void interleaver_fifo<symbol_type>::reset()
{
m_position = 0;
- memset(m_fifo, 0, m_size * sizeof(symbol_type));
+ std::fill(std::begin(m_fifo), std::end(m_fifo), 0);
}
} /* namespace dtv */
diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc
index c80731000b..e02649861e 100644
--- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc
+++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc
@@ -43,23 +43,20 @@ atsc_viterbi_decoder_impl::atsc_viterbi_decoder_impl()
*/
// the -4 is for the 4 sync symbols
- int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay();
+ const int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay();
+ fifo.reserve(NCODERS);
for (int i = 0; i < NCODERS; i++)
- fifo[i] = new fifo_t(fifo_size);
+ fifo.emplace_back(fifo_size);
reset();
}
-atsc_viterbi_decoder_impl::~atsc_viterbi_decoder_impl()
-{
- for (int i = 0; i < NCODERS; i++)
- delete fifo[i];
-}
+atsc_viterbi_decoder_impl::~atsc_viterbi_decoder_impl() {}
void atsc_viterbi_decoder_impl::reset()
{
for (int i = 0; i < NCODERS; i++)
- fifo[i]->reset();
+ fifo[i].reset();
}
std::vector<float> atsc_viterbi_decoder_impl::decoder_metrics() const
@@ -111,7 +108,7 @@ int atsc_viterbi_decoder_impl::work(int noutput_items,
dbindex = dbwhere >> 3;
shift = dbwhere & 0x7;
out_copy[dbindex] = (out_copy[dbindex] & ~(0x03 << shift)) |
- (fifo[encoder]->stuff(dibits[encoder][k]) << shift);
+ (fifo[encoder].stuff(dibits[encoder][k]) << shift);
} /* Symbols fed into one encoder */
} /* Encoders */
diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h
index d9fed5d02d..9c265678c3 100644
--- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h
+++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h
@@ -44,7 +44,7 @@ private:
static constexpr int INPUT_SIZE = (ATSC_DATA_SEGMENT_LENGTH * 12);
single_viterbi_t viterbi[NCODERS];
- fifo_t* fifo[NCODERS];
+ std::vector<fifo_t> fifo;
public:
atsc_viterbi_decoder_impl();
diff --git a/gr-dtv/lib/atsc/interleaver_fifo.h b/gr-dtv/lib/atsc/interleaver_fifo.h
index 12977feb18..7db48a155e 100644
--- a/gr-dtv/lib/atsc/interleaver_fifo.h
+++ b/gr-dtv/lib/atsc/interleaver_fifo.h
@@ -11,7 +11,8 @@
#ifndef _INTERLEAVER_FIFO_H_
#define _INTERLEAVER_FIFO_H_
-#include <string.h>
+#include <algorithm>
+#include <vector>
/*!
* \brief template class for interleaver fifo
@@ -22,7 +23,6 @@ class interleaver_fifo
{
public:
interleaver_fifo(unsigned int size);
- ~interleaver_fifo();
//! reset interleaver (flushes contents and resets commutator)
void reset();
@@ -30,44 +30,33 @@ public:
//! stuff a symbol into the fifo and return the oldest
symbol_type stuff(symbol_type input)
{
- if (m_size == 0)
+ if (m_fifo.empty())
return input;
symbol_type retval = m_fifo[m_position];
m_fifo[m_position] = input;
m_position++;
- if (m_position >= m_size)
+ if (m_position >= m_fifo.size())
m_position = 0;
return retval;
}
protected:
- unsigned int m_size;
- unsigned int m_position;
- symbol_type* m_fifo;
+ unsigned int m_position = 0;
+ std::vector<symbol_type> m_fifo;
};
template <class symbol_type>
-interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size)
+interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) : m_fifo(size)
{
- m_size = size;
- m_position = 0;
- m_fifo = new symbol_type[size];
- memset(m_fifo, 0, m_size * sizeof(symbol_type));
-}
-
-template <class symbol_type>
-interleaver_fifo<symbol_type>::~interleaver_fifo()
-{
- delete[] m_fifo;
}
template <class symbol_type>
void interleaver_fifo<symbol_type>::reset()
{
m_position = 0;
- memset(m_fifo, 0, m_size * sizeof(symbol_type));
+ std::fill(std::begin(m_fifo), std::end(m_fifo), 0);
}
#endif /* _INTERLEAVER_FIFO_H_ */