diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-09-12 14:16:50 -0600 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-09-12 14:19:29 -0600 |
commit | f7cdfff6a85ce52b1d7c0b5131645fcb77405fe8 (patch) | |
tree | 908af9bf8d1c512e22116cb3afbc89eb5883cc93 /gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc | |
parent | a867a290194228d09ba93f0f46e3a4e4523f5396 (diff) | |
parent | af4323d1e471476efa255e3df745397f7c8a1b71 (diff) |
Merge remote-tracking branch 'upstream/next' into gtk3
Diffstat (limited to 'gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc')
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc index 54d25e49ea..0787464aa2 100644 --- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2015 Free Software Foundation, Inc. + * Copyright 2015,2016 Free Software Foundation, Inc. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,27 +24,21 @@ #include <gnuradio/io_signature.h> #include "dvbt_inner_coder_impl.h" -#include <stdio.h> #include <assert.h> namespace gr { namespace dtv { - void + inline void dvbt_inner_coder_impl::generate_codeword(unsigned char in, int &x, int &y) { //insert input bit d_reg |= ((in & 0x1) << 7); - d_reg = d_reg >> 1; + d_reg = d_reg >> 1; - // TODO - do this with polynoms and bitcnt - //generate output G1=171(OCT) - x = ((d_reg >> 6) ^ (d_reg >> 5) ^ (d_reg >> 4) ^ \ - (d_reg >> 3) ^ d_reg) & 0x1; - //generate output G2=133(OCT) - y = ((d_reg >> 6) ^ (d_reg >> 4) ^ (d_reg >> 3) ^ \ - (d_reg >> 1) ^ d_reg) & 0x1; + x = d_lookup_171[d_reg]; + y = d_lookup_133[d_reg]; } //TODO - do this based on puncturing matrix @@ -55,7 +49,7 @@ namespace gr { * 00000c0c1c2 */ - void + inline void dvbt_inner_coder_impl::generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out) { int x, y; @@ -175,17 +169,17 @@ namespace gr { d_out_bs = 4 * d_n; // allocate bit buffers - d_in_buff = new unsigned char[8 * d_in_bs]; + d_in_buff = new (std::nothrow) unsigned char[8 * d_in_bs]; if (d_in_buff == NULL) { - std::cout << "Cannot allocate memory for d_in_buff" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_in_buff."); + throw std::bad_alloc(); } - d_out_buff = new unsigned char[8 * d_in_bs * d_n / d_k]; + d_out_buff = new (std::nothrow) unsigned char[8 * d_in_bs * d_n / d_k]; if (d_out_buff == NULL) { - std::cout << "Cannot allocate memory for d_out_buff" << std::endl; + GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_out_buff."); delete [] d_in_buff; - exit(1); + throw std::bad_alloc(); } } @@ -251,6 +245,26 @@ namespace gr { return noutput_items; } + const int dvbt_inner_coder_impl::d_lookup_171[128] = + {0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1}; + + const int dvbt_inner_coder_impl::d_lookup_133[128] = + {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1}; + } /* namespace dtv */ } /* namespace gr */ |