mirror of https://gerrit.osmocom.org/libosmocore
core/conv/conv_acc.c: delete reset_decoder()
Currently this implementation exposes nothing than osmo_conv_decode_acc(), so it wasn't possible to call reset_decoder() from outside. The method itself was used to initialize accumulated path metrics and the starting state of encoder. Now this code is moved to generate_trellis(). Moreover, setting accumulated path metrics inside existing loop is a bit faster that calling memset(). Change-Id: I8f17cebf468cf0106927ccee091cfb2896649cb2
This commit is contained in:
parent
037c1212b6
commit
40db2e3011
|
@ -413,10 +413,21 @@ static struct vtrellis *generate_trellis(const struct osmo_conv_code *code)
|
|||
rc = gen_state_info(&trellis->vals[i],
|
||||
i, outputs, code);
|
||||
}
|
||||
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
|
||||
/* Set accumulated path metrics to zero */
|
||||
trellis->sums[i] = 0;
|
||||
}
|
||||
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
/**
|
||||
* For termination other than tail-biting, initialize the zero state
|
||||
* as the encoder starting state. Initialize with the maximum
|
||||
* accumulated sum at length equal to the constraint length.
|
||||
*/
|
||||
if (code->term != CONV_TERM_TAIL_BITING)
|
||||
trellis->sums[0] = INT8_MAX * code->N * code->K;
|
||||
|
||||
return trellis;
|
||||
|
||||
|
@ -425,22 +436,6 @@ fail:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Reset decoder
|
||||
* Set accumulated path metrics to zero. For termination other than
|
||||
* tail-biting, initialize the zero state as the encoder starting state.
|
||||
* Initialize with the maximum accumulated sum at length equal to the
|
||||
* constraint length.
|
||||
*/
|
||||
static void reset_decoder(struct vdecoder *dec, int term)
|
||||
{
|
||||
int ns = dec->trellis->num_states;
|
||||
|
||||
memset(dec->trellis->sums, 0, sizeof(int16_t) * ns);
|
||||
|
||||
if (term != CONV_TERM_TAIL_BITING)
|
||||
dec->trellis->sums[0] = INT8_MAX * dec->n * dec->k;
|
||||
}
|
||||
|
||||
static void _traceback(struct vdecoder *dec,
|
||||
unsigned state, uint8_t *out, int len)
|
||||
{
|
||||
|
@ -641,8 +636,6 @@ static int conv_decode(struct vdecoder *dec, const int8_t *seq,
|
|||
{
|
||||
int8_t depunc[dec->len * dec->n];
|
||||
|
||||
reset_decoder(dec, term);
|
||||
|
||||
if (punc) {
|
||||
depuncture(seq, punc, depunc, dec->len * dec->n);
|
||||
seq = depunc;
|
||||
|
|
Loading…
Reference in New Issue