FreeCalypso > hg > gsm-codec-lib
view libtwamr/gc_pred.h @ 477:4c9222d95647
libtwamr encoder: always emit frame->mode = mode;
In the original implementation of amr_encode_frame(), the 'mode' member
of the output struct was set to 0xFF if the output frame type is TX_NO_DATA.
This design was made to mimic the mode field (16-bit word) being set to
0xFFFF (or -1) in 3GPP test sequence format - but nothing actually depends
on this struct member being set in any way, and amr_frame_to_tseq()
generates the needed 0xFFFF on its own, based on frame->type being equal
to TX_NO_DATA.
It is simpler and more efficient to always set frame->mode to the actual
encoding mode in amr_encode_frame(), and this new behavior has already
been documented in doc/AMR-library-API description in anticipation of
the present change.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 18 May 2024 22:30:42 +0000 |
parents | 7f99b8ed30e5 |
children |
line wrap: on
line source
/* ******************************************************************************** * * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 * R99 Version 3.3.0 * REL-4 Version 4.1.0 * ******************************************************************************** * * File : gc_pred.h * Purpose : codebook gain MA prediction * ******************************************************************************** */ #ifndef gc_pred_h #define gc_pred_h "$Id $" /* ******************************************************************************** * INCLUDE FILES ******************************************************************************** */ #include "tw_amr.h" #include "typedef.h" /* ******************************************************************************** * LOCAL VARIABLES AND TABLES ******************************************************************************** */ /* ******************************************************************************** * DEFINITION OF DATA TYPES ******************************************************************************** */ typedef struct { Word16 past_qua_en[4]; /* normal MA predictor memory, Q10 */ /* (contains 20*log10(qua_err)) */ Word16 past_qua_en_MR122[4]; /* MA predictor memory for MR122 mode, Q10 */ /* (contains log2(qua_err)) */ } gc_predState; /* ******************************************************************************** * DECLARATION OF PROTOTYPES ******************************************************************************** */ void gc_pred_reset (gc_predState *st); /* reset of codebook gain MA predictor state (i.e. set state memory to zero) returns 0 on success */ void gc_pred_copy( gc_predState *st_src, /* i : State struct */ gc_predState *st_dest /* o : State struct */ ); /************************************************************************* * * FUNCTION: gc_pred() * * PURPOSE: MA prediction of the innovation energy * (in dB/(20*log10(2))) with mean removed). * *************************************************************************/ void gc_pred( gc_predState *st, /* i/o: State struct */ enum Mode mode, /* i : AMR mode */ Word16 *code, /* i : innovative codebook vector (L_SUBFR) */ /* MR122: Q12, other modes: Q13 */ Word16 *exp_gcode0, /* o : exponent of predicted gain factor, Q0 */ Word16 *frac_gcode0,/* o : fraction of predicted gain factor Q15 */ Word16 *exp_en, /* o : exponent of innovation energy, Q0 */ /* (only calculated for MR795) */ Word16 *frac_en /* o : fraction of innovation energy, Q15 */ /* (only calculated for MR795) */ ); /************************************************************************* * * FUNCTION: gc_pred_update() * * PURPOSE: update MA predictor with last quantized energy * *************************************************************************/ void gc_pred_update( gc_predState *st, /* i/o: State struct */ Word16 qua_ener_MR122, /* i : quantized energy for update, Q10 */ /* (log2(qua_err)) */ Word16 qua_ener /* i : quantized energy for update, Q10 */ /* (20*log10(qua_err)) */ ); /************************************************************************* * * FUNCTION: gc_pred_average_limited() * * PURPOSE: get average of MA predictor state values (with a lower limit) * [used in error concealment] * *************************************************************************/ void gc_pred_average_limited( gc_predState *st, /* i: State struct */ Word16 *ener_avg_MR122, /* o: averaged quantized energy, Q10 */ /* (log2(qua_err)) */ Word16 *ener_avg /* o: averaged quantized energy, Q10 */ /* (20*log10(qua_err)) */ ); #endif