Vadim Yanitskiy has submitted this change and it was merged. Change subject: core/conv/conv_acc.c: delete reset_decoder() ......................................................................
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 --- M src/conv_acc.c 1 file changed, 13 insertions(+), 20 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/conv_acc.c b/src/conv_acc.c index c4545d7..7f03628 100644 --- a/src/conv_acc.c +++ b/src/conv_acc.c @@ -413,32 +413,27 @@ 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; fail: free_trellis(trellis); 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, @@ -640,8 +635,6 @@ const int *punc, uint8_t *out, int len, int term) { int8_t depunc[dec->len * dec->n]; - - reset_decoder(dec, term); if (punc) { depuncture(seq, punc, depunc, dec->len * dec->n); -- To view, visit https://gerrit.osmocom.org/2967 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8f17cebf468cf0106927ccee091cfb2896649cb2 Gerrit-PatchSet: 4 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com> Gerrit-Reviewer: Harald Welte <lafo...@gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Tom Tsou <t...@tsou.cc> Gerrit-Reviewer: Vadim Yanitskiy <axilira...@gmail.com>