diff options
author | Kristian Maier <kristian.maier@gmx.de> | 2017-05-01 12:13:50 +0200 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-12-13 20:19:03 -0800 |
commit | 561d859780ed9bdfd4465a6f31c8eae5379638a2 (patch) | |
tree | 9301d550b0466d52c17288e17a77dd028e820b3c /gr-dtv | |
parent | 5676739debbdcbf3de658848cc17bdf4e80df36d (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.cc | 10 | ||||
-rw-r--r-- | gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.h | 3 |
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: |