diff --git a/lib/src/phy/fec/viterbi.c b/lib/src/phy/fec/viterbi.c index ed4b3b9a4..9edcb52c0 100644 --- a/lib/src/phy/fec/viterbi.c +++ b/lib/src/phy/fec/viterbi.c @@ -73,7 +73,7 @@ int decode37(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { } update_viterbi37_blk_port(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_port(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_port(q->ptr, symbols, frame_length + q->K - 1, NULL); chainback_viterbi37_port(q->ptr, data, frame_length, 0); @@ -105,7 +105,7 @@ int decode37_sse(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length } update_viterbi37_blk_sse(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_sse(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_sse(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_sse(q->ptr, data, frame_length, 0); @@ -151,7 +151,7 @@ int decode37_avx2_16bit(void *o, uint16_t *symbols, uint8_t *data, uint32_t fram } update_viterbi37_blk_avx2_16bit(q->ptr, q->tmp_s, TB_ITER*frame_length, &best_state); chainback_viterbi37_avx2_16bit(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_avx2_16bit(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_avx2_16bit(q->ptr, data, frame_length, 0); @@ -192,7 +192,7 @@ int decode37_avx2(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_lengt } update_viterbi37_blk_avx2(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_avx2(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_avx2(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_avx2(q->ptr, data, frame_length, 0); @@ -237,7 +237,7 @@ int decode37_neon(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_lengt } update_viterbi37_blk_neon(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_neon(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_neon(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_neon(q->ptr, data, frame_length, 0);