1b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* ------------------------------------------------------------------ 2b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 4b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * you may not use this file except in compliance with the License. 6b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * You may obtain a copy of the License at 7b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 8b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 10b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Unless required by applicable law or agreed to in writing, software 11b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * express or implied. 14b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * See the License for the specific language governing permissions 15b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * and limitations under the License. 16b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * ------------------------------------------------------------------- 17b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber */ 18b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/**************************************************************************************** 19b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPortions of this file are derived from the following 3GPP standard: 20b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 21b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 3GPP TS 26.073 22b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Available from http://www.3gpp.org 24b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 25b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPermission to distribute, modify and use this file under the standard license 27b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberterms listed above has been obtained from the copyright holder. 28b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber****************************************************************************************/ 29b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 30b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 31b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 32b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 33b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 34b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Filename: /audio/gsm-amr/c/src/amrencode.c 35b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Functions: AMREncode 36b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber AMREncodeInit 37b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber AMREncodeReset 38b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber AMREncodeExit 39b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Date: 01/26/2002 41b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 42b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 43b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REVISION HISTORY 44b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 45b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added input_type in the parameter list and updated code to 46b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber check the type of output formatting to use. 47b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 48b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Corrected typo in Include section. 49b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 50b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added code to support ETS format. 51b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Modified file by adding the return of the number of encoder 53b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frame bytes. 54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 55b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added call to sid_sync function to support TX_NO_DATA case. 56b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Added SID type and mode info to ets_output_bfr for ETS SID 57b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frames. Created AMREncodeInit, AMREncodeReset, and AMREncodeExit 58b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber functions. 59b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 60b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Modified design of handling of ETS outputs such that the ETS 61b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber testvectors could be compared directly to the output of this 62b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber function. 63b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 64b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added conditional compile around calls to AMR Encoder interface 65b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber functions to allow amrencode.c to be used in the ETS reference 66b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber console. 67b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 68b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Replaced "int" and/or "char" with OSCL defined types. 69b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 70b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: 71b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 72b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 73b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODULE DESCRIPTION 74b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 75b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This file contains the functions required to initialize, reset, exit, and 76b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber invoke the ETS 3GPP GSM AMR encoder. 77b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 78b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 79b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 80b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 81b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 82b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 83b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; INCLUDES 84b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 85b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "cnst.h" 86b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "mode.h" 87b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "frame_type_3gpp.h" 88b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "typedef.h" 89b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 90b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "amrencode.h" 91b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "ets_to_if2.h" 92b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "ets_to_wmf.h" 93b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "sid_sync.h" 94b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "sp_enc.h" 95b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 96b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 97b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; MACROS [optional] 98b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; [Define module specific macros here] 99b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 100b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 101b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 102b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; DEFINES [optional] 103b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; [Include all pre-processor statements here. Include conditional 104b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; compile variables also.] 105b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 106b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 107b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 108b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL FUNCTION DEFINITIONS 109b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; [List function prototypes here] 110b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 111b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 112b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 113b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL VARIABLE DEFINITIONS 114b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; [Variable declaration - defined here and used outside this module] 115b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 116b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 117b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 118b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 119b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 120b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: AMREncodeInit 121b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 122b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 123b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 124b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 125b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncStructure = pointer containing the pointer to a structure used by 126b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the encoder (void) 127b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pSidSyncStructure = pointer containing the pointer to a structure used for 128b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber SID synchronization (void) 129b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber dtx_enable = flag to turn off or turn on DTX (Flag) 130b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 131b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 132b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 133b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 134b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 135b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber init_status = 0, if initialization was successful; -1, otherwise (int) 136b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 137b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 138b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 139b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 140b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 141b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber speech_encoder_state = pointer to encoder frame structure 142b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Speech_Encode_FrameState) 143b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_state = pointer to SID sync structure (sid_syncState) 144b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 145b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 146b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 147b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 148b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function initializes the GSM AMR Encoder library by calling 149b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber GSMInitEncode and sid_sync_init. If initialization was successful, 150b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber init_status is set to zero, otherwise, it is set to -1. 151b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 152b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 153b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 154b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 155b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 156b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 157b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 158b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 159b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 160b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 161b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 162b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 163b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 164b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 165b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Initialize GSM AMR Encoder 166b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL GSMInitEncode(state_data = &pEncStructure, 167b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber dtx = dtx_enable, 168b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber id = char_id ) 169b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 170b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = enc_init_status) 171b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 172b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Initialize SID synchronization 173b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL sid_sync_init(state = &pSidSyncStructure) 174b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 175b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = sid_sync_init_status) 176b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 177b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF ((enc_init_status != 0) || (sid_sync_init != 0)) 178b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 179b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber init_status = -1 180b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 181b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 182b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 183b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFY(nothing) 184b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURN(init_status) 185b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 186b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 187b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 188b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 189b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 190b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 191b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 192b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 193b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 194b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 195b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 196b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 197b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 198b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 199b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 200b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 201b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 202b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 203b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 204b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 205b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 206b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 207b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 208b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 AMREncodeInit( 209b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void **pEncStructure, 210b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void **pSidSyncStructure, 211b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Flag dtx_enable) 212b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 213b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 enc_init_status = 0; 214b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 sid_sync_init_status = 0; 215b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 init_status = 0; 216b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 217b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Initialize GSM AMR Encoder */ 218b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifdef CONSOLE_ENCODER_REF 219b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Change to original ETS input types */ 220b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Speech_Encode_FrameState **speech_encode_frame = 221b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Speech_Encode_FrameState **)(pEncStructure); 222b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 223b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_syncState **sid_sync_state = (sid_syncState **)(pSidSyncStructure); 224b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 225b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use ETS version of sp_enc.c */ 226b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enc_init_status = Speech_Encode_Frame_init(speech_encode_frame, 227b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber dtx_enable, 228b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Word8*)"encoder"); 229b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 230b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Initialize SID synchronization */ 231b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync_init_status = sid_sync_init(sid_sync_state); 232b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 233b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#else 234b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use PV version of sp_enc.c */ 235b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enc_init_status = GSMInitEncode(pEncStructure, 236b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber dtx_enable, 237b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Word8*)"encoder"); 238b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 239b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Initialize SID synchronization */ 240b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync_init_status = sid_sync_init(pSidSyncStructure); 241b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 242b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 243b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif 244b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 245b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if ((enc_init_status != 0) || (sid_sync_init_status != 0)) 246b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 247b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber init_status = -1; 248b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 249b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 250b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return(init_status); 251b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 252b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 253b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 254b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************/ 255b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 256b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 257b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 258b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: AMREncodeReset 259b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 260b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 261b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 262b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 263b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncStructure = pointer to a structure used by the encoder (void) 264b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pSidSyncStructure = pointer to a structure used for SID synchronization 265b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (void) 266b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 267b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 268b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 269b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 270b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 271b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber reset_status = 0, if reset was successful; -1, otherwise (int) 272b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 273b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 274b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 275b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 276b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 277b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber speech_encoder_state = pointer to encoder frame structure 278b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Speech_Encode_FrameState) 279b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_state = pointer to SID sync structure (sid_syncState) 280b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 281b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 282b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 283b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 284b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function resets the state memory used by the Encoder and SID sync 285b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber function. If reset was successful, reset_status is set to zero, otherwise, 286b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber it is set to -1. 287b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 288b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 289b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 290b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 291b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 292b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 293b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 294b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 295b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 296b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 297b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 298b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 299b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 300b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 301b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Reset GSM AMR Encoder 302b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL Speech_Encode_Frame_reset(state_data = pEncStructure) 303b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 304b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = enc_reset_status) 305b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 306b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Reset SID synchronization 307b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL sid_sync_reset(state = pSidSyncStructure) 308b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 309b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = sid_sync_reset_status) 310b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 311b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF ((enc_reset_status != 0) || (sid_sync_reset_status != 0)) 312b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 313b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber reset_status = -1 314b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 315b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 316b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 317b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFY(nothing) 318b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURN(reset_status) 319b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 320b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 321b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 322b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 323b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 324b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 325b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 326b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 327b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 328b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 329b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 330b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 331b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 332b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 333b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 334b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 335b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 336b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 337b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 338b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 339b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 340b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 341b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 342b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 AMREncodeReset( 343b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void *pEncStructure, 344b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void *pSidSyncStructure) 345b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 346b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 enc_reset_status = 0; 347b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 sid_sync_reset_status = 0; 348b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 reset_status = 0; 349b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 350b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Reset GSM AMR Encoder */ 351b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enc_reset_status = Speech_Encode_Frame_reset(pEncStructure); 352b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 353b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 354b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Reset SID synchronization */ 355b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync_reset_status = sid_sync_reset(pSidSyncStructure); 356b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 357b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if ((enc_reset_status != 0) || (sid_sync_reset_status != 0)) 358b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 359b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber reset_status = -1; 360b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 361b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 362b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return(reset_status); 363b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 364b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 365b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 366b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************/ 367b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 368b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 369b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 370b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: AMREncodeExit 371b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 372b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 373b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 374b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 375b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncStructure = pointer containing the pointer to a structure used by 376b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the encoder (void) 377b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pSidSyncStructure = pointer containing the pointer to a structure used for 378b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber SID synchronization (void) 379b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 380b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 381b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 382b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 383b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 384b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 385b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 386b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 387b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 388b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 389b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 390b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber speech_encoder_state = pointer to encoder frame structure 391b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Speech_Encode_FrameState) 392b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_state = pointer to SID sync structure (sid_syncState) 393b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 394b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 395b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 396b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 397b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function frees up the state memory used by the Encoder and SID 398b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber synchronization function. 399b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 400b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 401b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 402b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 403b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 404b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 405b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 406b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 407b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 408b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 409b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 410b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 411b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 412b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 413b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Exit GSM AMR Encoder 414b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL GSMEncodeFrameExit(state_data = &pEncStructure) 415b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 416b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 417b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 418b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Exit SID synchronization 419b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL sid_sync_exit(state = &pSidSyncStructure) 420b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 421b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 422b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 423b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFY(nothing) 424b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURN(nothing) 425b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 426b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 427b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 428b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 429b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 430b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 431b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 432b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 433b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 434b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 435b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 436b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 437b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 438b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 439b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 440b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 441b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 442b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 443b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 444b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 445b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 446b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 447b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 448b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid AMREncodeExit( 449b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void **pEncStructure, 450b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void **pSidSyncStructure) 451b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 452b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Exit GSM AMR Encoder */ 453b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 454b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifdef CONSOLE_ENCODER_REF 455b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Change to original ETS input types */ 456b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Speech_Encode_FrameState ** speech_encode_frame = 457b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (Speech_Encode_FrameState **)(pEncStructure); 458b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 459b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_syncState ** sid_sync_state = (sid_syncState **)(pSidSyncStructure); 460b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 461b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use ETS version of sp_enc.c */ 462b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Speech_Encode_Frame_exit(speech_encode_frame); 463b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 464b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 465b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Exit SID synchronization */ 466b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync_exit(sid_sync_state); 467b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 468b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#else 469b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 470b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use PV version of sp_enc.c */ 471b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber GSMEncodeFrameExit(pEncStructure); 472b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 473b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Exit SID synchronization */ 474b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync_exit(pSidSyncStructure); 475b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 476b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif 477b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 478b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return; 479b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 480b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 481b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 482b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************/ 483b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 484b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 485b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 486b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: AMREncode 487b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 488b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 489b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 490b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 491b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncState = pointer to encoder state structure (void) 492b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pSidSyncState = pointer to SID sync state structure (void) 493b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode = codec mode (enum Mode) 494b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncInput = pointer to the input speech samples (Word16) 495b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncOutput = pointer to the encoded bit stream (unsigned char) 496b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber p3gpp_frame_type = pointer to the 3GPP frame type (enum Frame_Type_3GPP) 497b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber output_format = output format type (Word16); valid values are AMR_WMF, 498b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber AMR_IF2, and AMR_ETS 499b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 500b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 501b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncOutput buffer contains to the newly encoded bit stream 502b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber p3gpp_frame_type store contains the new 3GPP frame type 503b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 504b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 505b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = number of encoded bytes for a particular 506b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode or -1, if an error occurred (int) 507b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 508b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 509b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber WmfEncBytesPerFrame = table containing the number of encoder frame 510b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber data bytes per codec mode for WMF output 511b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber format (const int) 512b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber If2EncBytesPerFrame = table containing the number of encoder frame 513b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber data bytes per codec mode for IF2 output 514b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber format (const int) 515b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 516b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 517b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 518b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 519b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 520b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 521b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 522b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function is the top-level entry point to the GSM AMR Encoder library. 523b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 524b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber The following describes the encoding process for WMF or IF2 formatted output 525b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber data. This functions calls GSMEncodeFrame to encode one frame's worth of 526b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber input speech samples, and returns the newly encoded bit stream in the buffer 527b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pointed to by pEncOutput.Then the function sid_sync is called to determine 528b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the transmit frame type. If the transmit frame type is TX_SPEECH_GOOD or 529b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber TX_SID_FIRST or TX_SID_UPDATE, p3gpp_frame_type will be set to the encoder 530b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used mode. For SID frames, the SID type information and mode information are 531b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber added to the encoded parameter bitstream according to the SID frame format 532b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber described in [1]. If the transmit frame type is TX_NO_DATA, the store 533b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pointed to by p3gpp_frame_type will be set to NO_DATA. Then the output 534b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber format type (output_format) will be checked to determine the format of the 535b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber encoded data. 536b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 537b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber If output_format is AMR_TX_WMF, the function ets_to_wmf will be called to 538b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber convert from ETS format (1 bit/word, where 1 word = 16 bits, information in 539b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber least significant bit) to WMF (aka, non-IF2). The WMF format stores the data 540b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber in octets. The least significant 4 bits of the first octet contains the 3GPP 541b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frame type information and the most significant 4 bits are zeroed out. The 542b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber succeeding octets contain the packed encoded speech bits. The total number of 543b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber WMF bytes encoded is obtained from WmfEncBytesPerFrame table and returned via 544b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes. 545b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 546b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber If output_format is AMR_TX_IF2, the function if2_to_ets will be called to 547b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber convert from ETS format to IF2 [1]. The IF2 format stores the data in octets. 548b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber The least significant nibble of the first octet contains the 3GPP frame type 549b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber and the most significant nibble contains the first 4 encoded speech bits. The 550b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber suceeding octets contain the packed encoded speech bits. The total number of 551b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF2 bytes encoded is obtained from If2EncBytesPerFrame table and returned via 552b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes. 553b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 554b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber If output_format is AMR_TX_ETS, GSMFrameEncode is called to generate the 555b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber encoded speech parameters, then, sid_sync is called to determine the transmit 556b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frame type. If the transmit frame type is not TX_NO_DATA, then the transmit 557b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frame type information is saved in the first location of the ets_output_bfr, 558b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber followed by the encoded speech parameters. The codec mode information is 559b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber stored immediately after the MAX_SERIAL_SIZE encoded speech parameters. If 560b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the transmit frame type is TX_NO_DATA, the transmit frame type, encoded 561b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber speech parameters, and codec mode are stored in the same order as before 562b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber in ets_output_bfr. However, for the no data case, the codec mode is set to 563b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber -1. 564b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 565b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber After all the required information is generated, the 16-bit data generated 566b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber by the Encoder (in ets_output_bfr) is copied to the buffer pointed to by 567b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pEncOutput in the little endian configuration, i.e., least significant byte, 568b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber followed by most significant byte. The num_enc_bytes is set to 569b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 2*(MAX_SERIAL_SIZE+2). 570b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 571b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber If output_format is invalid, this function flags the error and sets 572b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes to -1. 573b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 574b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 575b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 576b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 577b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 578b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 579b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 580b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 581b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 582b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [1] "AMR Speech Codec Frame Structure", 3GPP TS 26.101 version 4.1.0 583b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Release 4, June 2001 584b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 585b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 586b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 587b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 588b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF ((output_format == AMR_TX_WMF) | (output_format == AMR_TX_IF2)) 589b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 590b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Encode one speech frame (20 ms) 591b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL GSMEncodeFrame( state_data = pEncState, 592b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode = mode, 593b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber new_speech = pEncInput, 594b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber serial = &ets_output_bfr[0], 595b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber usedMode = &usedMode ) 596b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 597b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = 0) 598b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 599b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Determine transmit frame type 600b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL sid_sync(st = pSidSyncState, 601b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode = usedMode 602b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber tx_frame_type = &tx_frame_type) 603b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 604b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 605b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 606b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF (tx_frame_type != TX_NO_DATA) 607b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 608b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // There is data to transmit 609b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = (enum Frame_Type_3GPP) usedMode 610b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 611b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Add SID type and mode info for SID frames 612b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF (*p3gpp_frame_type == AMR_SID) 613b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 614b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Add SID type to encoder output buffer 615b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF (tx_frame_type == TX_SID_FIRST) 616b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 617b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXTYPE_BIT_OFFSET] &= 0x7f 618b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 619b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSEIF (tx_frame_type == TX_SID_UPDATE ) 620b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 621b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXTYPE_BIT_OFFSET] |= 0x80 622b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 623b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 624b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 625b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Add mode information bits 626b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FOR i = 0 TO NUM_AMRSID_TXMODE_BITS-1 627b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 628b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXMODE_BIT_OFFSET+i] = (mode>>i)&&0x0001 629b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 630b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDFOR 631b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 632b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 633b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 634b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSE 635b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // There is no data to transmit 636b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = NO_DATA 637b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 638b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 639b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 640b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Determine the output format to use 641b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF (output_format == AMR_TX_WMF) 642b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 643b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Change output data format to WMF 644b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL ets_to_wmf( frame_type_3gpp = *p3gpp_frame_type, 645b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_input_ptr = &ets_output_bfr[0], 646b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber wmf_output_ptr = pEncOutput ) 647b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 648b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 649b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 650b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Set up the number of encoded WMF bytes 651b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = WmfEncBytesPerFrame[(int) *p3gpp_frame_type] 652b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 653b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSEIF (output_format == AMR_TX_IF2) 654b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 655b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Change output data format to IF2 656b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL ets_to_if2( frame_type_3gpp = *p3gpp_frame_type, 657b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_input_ptr = &ets_output_bfr[0], 658b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if2_output_ptr = pEncOutput ) 659b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 660b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 661b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 662b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Set up the number of encoded IF2 bytes 663b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = If2EncBytesPerFrame[(int) *p3gpp_frame_type] 664b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 665b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 666b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 667b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSEIF (output_format = AMR_TX_ETS) 668b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 669b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Encode one speech frame (20 ms) 670b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL GSMEncodeFrame( state_data = pEncState, 671b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode = mode, 672b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber new_speech = pEncInput, 673b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber serial = &ets_output_bfr[1], 674b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber usedMode = &usedMode ) 675b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 676b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(return_value = 0) 677b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 678b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Save used mode 679b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = (enum Frame_Type_3GPP) usedMode 680b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 681b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Determine transmit frame type 682b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CALL sid_sync(st = pSidSyncState, 683b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode = usedMode 684b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber tx_frame_type = &tx_frame_type) 685b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFYING(nothing) 686b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURNING(nothing) 687b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 688b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Put TX frame type in output buffer 689b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[0] = tx_frame_type 690b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 691b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Put mode information after the encoded speech parameters 692b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber IF (tx_frame_type != TX_NO_DATA) 693b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber THEN 694b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[MAX_SERIAL_SIZE+1] = mode 695b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 696b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSE 697b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[MAX_SERIAL_SIZE+1] = -1 698b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 699b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 700b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 701b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Copy output of encoder to pEncOutput buffer 702b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_ptr = (unsigned char *) &ets_output_bfr[0] 703b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 704b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Copy 16-bit data in 8-bit chunks using Little Endian configuration 705b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FOR i = 0 TO (2*(MAX_SERIAL_SIZE+6))-1 706b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 707b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *(pEncOutput+i) = *ets_output_ptr 708b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_ptr = ets_output_ptr + 1 709b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 710b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDFOR 711b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 712b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Set up number of encoded bytes 713b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = 2*(MAX_SERIAL_SIZE+6) 714b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 715b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ELSE 716b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber // Invalid output_format, set up error code 717b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = -1 718b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 719b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ENDIF 720b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 721b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODIFY (nothing) 722b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RETURN (num_enc_bytes) 723b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 724b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 725b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 726b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 727b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 728b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 729b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 730b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 731b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 732b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 733b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 734b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 735b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 736b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 737b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 738b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 739b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 740b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 741b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 742b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 743b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 744b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 745b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 746b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 AMREncode( 747b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void *pEncState, 748b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber void *pSidSyncState, 749b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enum Mode mode, 750b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 *pEncInput, 751b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber UWord8 *pEncOutput, 752b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enum Frame_Type_3GPP *p3gpp_frame_type, 753b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 output_format 754b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber) 755b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 756b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 ets_output_bfr[MAX_SERIAL_SIZE+2]; 757b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber UWord8 *ets_output_ptr; 758b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 num_enc_bytes = -1; 759b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 i; 760b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enum TXFrameType tx_frame_type; 761b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enum Mode usedMode = MR475; 762b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 763b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Encode WMF or IF2 frames */ 764b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if ((output_format == AMR_TX_WMF) | (output_format == AMR_TX_IF2)) 765b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 766b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Encode one speech frame (20 ms) */ 767b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 768b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifndef CONSOLE_ENCODER_REF 769b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 770b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use PV version of sp_enc.c */ 771b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber GSMEncodeFrame(pEncState, mode, pEncInput, ets_output_bfr, &usedMode); 772b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 773b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#else 774b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use ETS version of sp_enc.c */ 775b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Speech_Encode_Frame(pEncState, mode, pEncInput, ets_output_bfr, &usedMode); 776b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 777b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif 778b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 779b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Determine transmit frame type */ 780b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync(pSidSyncState, usedMode, &tx_frame_type); 781b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 782b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (tx_frame_type != TX_NO_DATA) 783b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 784b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* There is data to transmit */ 785b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = (enum Frame_Type_3GPP) usedMode; 786b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 787b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Add SID type and mode info for SID frames */ 788b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (*p3gpp_frame_type == AMR_SID) 789b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 790b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Add SID type to encoder output buffer */ 791b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (tx_frame_type == TX_SID_FIRST) 792b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 793b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXTYPE_BIT_OFFSET] &= 0x0000; 794b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 795b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else if (tx_frame_type == TX_SID_UPDATE) 796b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 797b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXTYPE_BIT_OFFSET] |= 0x0001; 798b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 799b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 800b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Add mode information bits */ 801b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber for (i = 0; i < NUM_AMRSID_TXMODE_BITS; i++) 802b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 803b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[AMRSID_TXMODE_BIT_OFFSET+i] = 804b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (mode >> i) & 0x0001; 805b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 806b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 807b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 808b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 809b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 810b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* This is no data to transmit */ 811b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = (enum Frame_Type_3GPP)AMR_NO_DATA; 812b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 813b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 814b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* At this point, output format is ETS */ 815b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Determine the output format to use */ 816b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (output_format == AMR_TX_WMF) 817b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 818b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Change output data format to WMF */ 819b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_to_wmf(*p3gpp_frame_type, ets_output_bfr, pEncOutput); 820b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 821b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Set up the number of encoded WMF bytes */ 822b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = WmfEncBytesPerFrame[(Word16) *p3gpp_frame_type]; 823b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 824b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 825b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else if (output_format == AMR_TX_IF2) 826b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 827b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Change output data format to IF2 */ 828b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_to_if2(*p3gpp_frame_type, ets_output_bfr, pEncOutput); 829b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 830b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Set up the number of encoded IF2 bytes */ 831b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = If2EncBytesPerFrame[(Word16) *p3gpp_frame_type]; 832b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 833b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 834b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 835b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 836b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Encode ETS frames */ 837b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else if (output_format == AMR_TX_ETS) 838b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 839b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Encode one speech frame (20 ms) */ 840b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 841b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifndef CONSOLE_ENCODER_REF 842b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 843b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use PV version of sp_enc.c */ 844b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber GSMEncodeFrame(pEncState, mode, pEncInput, &ets_output_bfr[1], &usedMode); 845b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 846b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#else 847b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Use ETS version of sp_enc.c */ 848b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Speech_Encode_Frame(pEncState, mode, pEncInput, &ets_output_bfr[1], &usedMode); 849b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 850b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif 851b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 852b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Save used mode */ 853b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *p3gpp_frame_type = (enum Frame_Type_3GPP) usedMode; 854b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 855b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Determine transmit frame type */ 856b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sid_sync(pSidSyncState, usedMode, &tx_frame_type); 857b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 858b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Put TX frame type in output buffer */ 859b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[0] = tx_frame_type; 860b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 861b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Put mode information after the encoded speech parameters */ 862b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (tx_frame_type != TX_NO_DATA) 863b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 864b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[1+MAX_SERIAL_SIZE] = (Word16) mode; 865b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 866b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 867b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 868b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_bfr[1+MAX_SERIAL_SIZE] = -1; 869b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 870b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 871b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Copy output of encoder to pEncOutput buffer */ 872b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_ptr = (UWord8 *) & ets_output_bfr[0]; 873b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 874b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Copy 16-bit data in 8-bit chunks */ 875b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* using Little Endian configuration */ 876b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber for (i = 0; i < 2*(MAX_SERIAL_SIZE + 2); i++) 877b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 878b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *(pEncOutput + i) = *ets_output_ptr; 879b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ets_output_ptr += 1; 880b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 881b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 882b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Set up the number of encoded bytes */ 883b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = 2 * (MAX_SERIAL_SIZE + 2); 884b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 885b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 886b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 887b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Invalid frame format */ 888b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 889b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 890b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Invalid output format, set up error code */ 891b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber num_enc_bytes = -1; 892b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 893b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 894b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return(num_enc_bytes); 895b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 896b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 897b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 898