summaryrefslogtreecommitdiff
path: root/gr-dtv
diff options
context:
space:
mode:
authorKristian Maier <kristian.maier@gmx.de>2017-05-01 12:13:50 +0200
committerMartin Braun <martin.braun@ettus.com>2018-12-13 20:19:03 -0800
commit561d859780ed9bdfd4465a6f31c8eae5379638a2 (patch)
tree9301d550b0466d52c17288e17a77dd028e820b3c /gr-dtv
parent5676739debbdcbf3de658848cc17bdf4e80df36d (diff)
gr-dtv: optimize bbscrambler to 8byte datatype
because kbch is always a multiple of 8, we can xor 8 bytes at once in the scrambler by casting to an uint64_t written by Team "Kommando Spektralkräfte" @ Rohde & Schwarz Engineering Competition 2017
Diffstat (limited to 'gr-dtv')
-rw-r--r--gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc10
-rw-r--r--gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h3
2 files changed, 8 insertions, 5 deletions
diff --git a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
index 8e86eb4f64..776009ff42 100644
--- a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
@@ -268,6 +268,8 @@ namespace gr {
sr |= 0x4000;
}
}
+ bb_randomize64 = (uint64_t*)&bb_randomise[0];
+
}
int
@@ -275,12 +277,12 @@ namespace gr {
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- const unsigned char *in = (const unsigned char *) input_items[0];
- unsigned char *out = (unsigned char *) output_items[0];
+ const uint64_t *in = (const uint64_t *) input_items[0];
+ uint64_t *out = (uint64_t *) output_items[0];
for (int i = 0; i < noutput_items; i += kbch) {
- for (int j = 0; j < (int)kbch; ++j) {
- out[i + j] = in[i + j] ^ bb_randomise[j];
+ for (int j = 0; j < kbch/8; ++j) {
+ *out++ = *in++ ^ bb_randomize64[j];
}
}
diff --git a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h
index d717731502..062e1b68a2 100644
--- a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h
+++ b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h
@@ -30,8 +30,9 @@ namespace gr {
class dvb_bbscrambler_bb_impl : public dvb_bbscrambler_bb
{
private:
- unsigned int kbch;
+ int kbch;
unsigned char bb_randomise[FRAME_SIZE_NORMAL];
+ uint64_t* bb_randomize64;
void init_bb_randomiser(void);
public: