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],
|
rc = gen_state_info(&trellis->vals[i],
|
||||||
i, outputs, code);
|
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;
|
return trellis;
|
||||||
|
|
||||||
|
@ -425,22 +436,6 @@ fail:
|
||||||
return NULL;
|
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,
|
static void _traceback(struct vdecoder *dec,
|
||||||
unsigned state, uint8_t *out, int len)
|
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];
|
int8_t depunc[dec->len * dec->n];
|
||||||
|
|
||||||
reset_decoder(dec, term);
|
|
||||||
|
|
||||||
if (punc) {
|
if (punc) {
|
||||||
depuncture(seq, punc, depunc, dec->len * dec->n);
|
depuncture(seq, punc, depunc, dec->len * dec->n);
|
||||||
seq = depunc;
|
seq = depunc;
|
||||||
|
|
Loading…
Reference in New Issue