summaryrefslogtreecommitdiff
path: root/gr-dtv/lib/atsc/atsc_randomize.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-dtv/lib/atsc/atsc_randomize.cc')
-rw-r--r--gr-dtv/lib/atsc/atsc_randomize.cc141
1 files changed, 67 insertions, 74 deletions
diff --git a/gr-dtv/lib/atsc/atsc_randomize.cc b/gr-dtv/lib/atsc/atsc_randomize.cc
index 769b08587a..e598e2ecba 100644
--- a/gr-dtv/lib/atsc/atsc_randomize.cc
+++ b/gr-dtv/lib/atsc/atsc_randomize.cc
@@ -23,95 +23,88 @@
#include "atsc_randomize.h"
namespace gr {
- namespace dtv {
-
- unsigned char atsc_randomize::s_output_map[1 << 14];
- bool atsc_randomize::s_output_map_initialized_p = false;
-
- atsc_randomize::atsc_randomize ()
- {
- d_state = PRELOAD_VALUE;
-
- if (!s_output_map_initialized_p)
- initialize_output_map ();
- }
-
- /*!
- * \brief Generate the table used in the fast_output_map function.
- *
- * The table has 16K byte entries, but because of how is is used, only
- * 256 entries end up being resident in the cache. This seems
- * like a good use of memory. We can get away with a 16K table
- * because the low two bits of the state do not affect the output
- * function. By shifting right those two bits we shrink the table,
- * and also get better cache line utilization.
- */
- void
- atsc_randomize::initialize_output_map ()
- {
- s_output_map_initialized_p = true;
-
- for (int i = 0; i < (1 << 14); i++)
- s_output_map[i] = slow_output_map (i << 2);
- }
-
-
- void
- atsc_randomize::reset ()
- {
- d_state = PRELOAD_VALUE;
- }
-
- void
- atsc_randomize::randomize (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet &in)
- {
- assert (in.data[0] == MPEG_SYNC_BYTE); // confirm it's there, then drop
-
- for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
- out.data[i] = in.data[i + 1] ^ output_and_clk ();
- }
-
- void
- atsc_randomize::derandomize (atsc_mpeg_packet &out, const atsc_mpeg_packet_no_sync &in)
- {
- out.data[0] = MPEG_SYNC_BYTE; // add sync byte to beginning of packet
-
- for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
- out.data[i + 1] = in.data[i] ^ output_and_clk ();
- }
-
-
- unsigned char
- atsc_randomize::slow_output_map (int st)
- {
- int output = 0;
-
- if (st & 0x8000)
+namespace dtv {
+
+unsigned char atsc_randomize::s_output_map[1 << 14];
+bool atsc_randomize::s_output_map_initialized_p = false;
+
+atsc_randomize::atsc_randomize()
+{
+ d_state = PRELOAD_VALUE;
+
+ if (!s_output_map_initialized_p)
+ initialize_output_map();
+}
+
+/*!
+ * \brief Generate the table used in the fast_output_map function.
+ *
+ * The table has 16K byte entries, but because of how is is used, only
+ * 256 entries end up being resident in the cache. This seems
+ * like a good use of memory. We can get away with a 16K table
+ * because the low two bits of the state do not affect the output
+ * function. By shifting right those two bits we shrink the table,
+ * and also get better cache line utilization.
+ */
+void atsc_randomize::initialize_output_map()
+{
+ s_output_map_initialized_p = true;
+
+ for (int i = 0; i < (1 << 14); i++)
+ s_output_map[i] = slow_output_map(i << 2);
+}
+
+
+void atsc_randomize::reset() { d_state = PRELOAD_VALUE; }
+
+void atsc_randomize::randomize(atsc_mpeg_packet_no_sync& out, const atsc_mpeg_packet& in)
+{
+ assert(in.data[0] == MPEG_SYNC_BYTE); // confirm it's there, then drop
+
+ for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
+ out.data[i] = in.data[i + 1] ^ output_and_clk();
+}
+
+void atsc_randomize::derandomize(atsc_mpeg_packet& out,
+ const atsc_mpeg_packet_no_sync& in)
+{
+ out.data[0] = MPEG_SYNC_BYTE; // add sync byte to beginning of packet
+
+ for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
+ out.data[i + 1] = in.data[i] ^ output_and_clk();
+}
+
+
+unsigned char atsc_randomize::slow_output_map(int st)
+{
+ int output = 0;
+
+ if (st & 0x8000)
output |= 0x01;
- if (st & 0x2000)
+ if (st & 0x2000)
output |= 0x02;
- if (st & 0x1000)
+ if (st & 0x1000)
output |= 0x04;
- if (st & 0x0200)
+ if (st & 0x0200)
output |= 0x08;
- if (st & 0x0020)
+ if (st & 0x0020)
output |= 0x10;
- if (st & 0x0010)
+ if (st & 0x0010)
output |= 0x20;
- if (st & 0x0008)
+ if (st & 0x0008)
output |= 0x40;
- if (st & 0x0004)
+ if (st & 0x0004)
output |= 0x80;
- return output;
- }
+ return output;
+}
- } /* namespace dtv */
+} /* namespace dtv */
} /* namespace gr */