view libtwamr/dtx_dec.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 5a1d18542f8a
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             : dtx_dec.h
*      Purpose          : Decode comfort noice when in DTX
*
*****************************************************************************
*/
#ifndef dtx_dec_h
#define dtx_dec_h "$Id $" 
 
/*
*****************************************************************************
*                         INCLUDE FILES
*****************************************************************************
*/
#include "tw_amr.h"
#include "typedef.h"
#include "dtx_common.h"
#include "d_plsf.h"
#include "gc_pred.h"
#include "c_g_aver.h"

/*
*****************************************************************************
*                         LOCAL VARIABLES AND TABLES
*****************************************************************************
*/
enum DTXStateType {SPEECH = 0, DTX, DTX_MUTE};

#define DTX_MAX_EMPTY_THRESH 50

/*
*****************************************************************************
*                         DEFINITION OF DATA TYPES
*****************************************************************************
*/

typedef struct {
   Word16 since_last_sid;
   Word16 true_sid_period_inv;
   Word16 log_en;
   Word16 old_log_en;
   Word32 L_pn_seed_rx; 
   Word16 lsp[M];
   Word16 lsp_old[M]; 
   
   Word16 lsf_hist[M*DTX_HIST_SIZE];
   Word16 lsf_hist_ptr;
   Word16 lsf_hist_mean[M*DTX_HIST_SIZE]; 
   Word16 log_pg_mean;
   Word16 log_en_hist[DTX_HIST_SIZE];
   Word16 log_en_hist_ptr;

   Word16 log_en_adjust;

   Word16 dtxHangoverCount;
   Word16 decAnaElapsedCount;

   Word16 sid_frame;       
   Word16 valid_data;          
   Word16 dtxHangoverAdded;
 
   enum DTXStateType dtxGlobalState;     /* contains previous state */
                                         /* updated in main decoder */ 

   Word16 data_updated;      /* marker to know if CNI data is ever renewed */ 

} dtx_decState;

/*
*****************************************************************************
*                         DECLARATION OF PROTOTYPES
*****************************************************************************
*/
 
/*
**************************************************************************
*
*  Function    : dtx_dec_reset
*  Purpose     : Resets state memory
*  Returns     : 0 on success
*
**************************************************************************
*/
void dtx_dec_reset (dtx_decState *st);
 
/*
**************************************************************************
*
*  Function    : dtx_dec
*  Purpose     :
*  Description :
*                
**************************************************************************
*/
int dtx_dec(
   dtx_decState *st,                /* i/o : State struct                    */
   Word16 mem_syn[],                /* i/o : AMR decoder state               */
   D_plsfState* lsfState,           /* i/o : decoder lsf states              */
   gc_predState* predState,         /* i/o : prediction states               */
   Cb_gain_averageState* averState, /* i/o : CB gain average states          */
   enum DTXStateType new_state,     /* i   : new DTX state                   */    
   enum Mode mode,                  /* i   : AMR mode                        */
   Word16 parm[],                   /* i   : Vector of synthesis parameters  */
   Word16 synth[],                  /* o   : synthesised speech              */
   Word16 A_t[]                     /* o   : decoded LP filter in 4 subframes*/
   );

void dtx_dec_activity_update(dtx_decState *st,
                             Word16 lsf[],
                             Word16 frame[]);

/*
**************************************************************************
*
*  Function    : rx_dtx_handler 
*  Purpose     : reads the frame type and checks history  
*  Description : to decide what kind of DTX/CNI action to perform

**************************************************************************
*/
enum DTXStateType rx_dtx_handler(dtx_decState *st,           /* i/o : State struct */
                                 enum RXFrameType frame_type /* i   : Frame type   */
                                 );

#endif