1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Use of this source code is governed by a BSD-style license 5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * that can be found in the LICENSE file in the root of the source 6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * tree. An additional intellectual property rights grant can be found 7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in the file PATENTS. All contributing project authors may 8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * be found in the AUTHORS file in the root of the source tree. 9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * entropy_coding.h 13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * This header file contains all of the functions used to arithmetically 15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * encode the iSAC bistream 16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_ 20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_ 21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "structs.h" 23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode complex spectrum (return number of bytes in stream) */ 25a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecodeSpec(Bitstr_dec *streamdata, 26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *frQ7, 27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *fiQ7, 28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 AvgPitchGain_Q12); 29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* encode complex spectrum */ 31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeSpec(const WebRtc_Word16 *fr, 32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 *fi, 33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata, 34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 AvgPitchGain_Q12); 35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize LPC Coef */ 38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeLpcCoef(Bitstr_dec *streamdata, 39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 *LPCCoefQ17, 40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 *gain_lo_hiQ17, 41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *outmodel); 42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeLpc(WebRtc_Word32 *gain_lo_hiQ17, 44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *LPCCoef_loQ15, 45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *LPCCoef_hiQ15, 46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec *streamdata, 47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *outmodel); 48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code LPC Coef */ 50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeLpc(WebRtc_Word32 *gain_lo_hiQ17, 51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *LPCCoef_loQ15, 52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *LPCCoef_hiQ15, 53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *model, 54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 *sizeQ11, 55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata, 56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISAC_SaveEncData_t* encData, 57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin transcode_obj *transcodeParam); 58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EstCodeLpcGain(WebRtc_Word32 *gain_lo_hiQ17, 60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata, 61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISAC_SaveEncData_t* encData); 62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize RC */ 63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeRcCoef(Bitstr_dec *streamdata, 64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *RCQ15); 65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code RC */ 67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeRcCoef(WebRtc_Word16 *RCQ15, 68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata); 69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 70a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize squared Gain */ 71a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeGain2(Bitstr_dec *streamdata, 72a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 *Gain2); 73a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 74a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code squared Gain (input is squared gain) */ 75a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeGain2(WebRtc_Word32 *gain2, 76a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata); 77a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 78a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodePitchGain(WebRtc_Word16 *PitchGains_Q12, 79a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata, 80a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISAC_SaveEncData_t* encData); 81a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 82a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodePitchLag(WebRtc_Word16 *PitchLagQ7, 83a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *PitchGain_Q12, 84a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata, 85a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISAC_SaveEncData_t* encData); 86a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 87a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodePitchGain(Bitstr_dec *streamdata, 88a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *PitchGain_Q12); 89a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 90a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodePitchLag(Bitstr_dec *streamdata, 91a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *PitchGain_Q12, 92a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *PitchLagQ7); 93a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 94a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeFrameLen(Bitstr_dec *streamdata, 95a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *framelength); 96a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 97a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 98a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeFrameLen(WebRtc_Word16 framelength, 99a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata); 100a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 101a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeSendBandwidth(Bitstr_dec *streamdata, 102a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *BWno); 103a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 104a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 105a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeReceiveBandwidth(WebRtc_Word16 *BWno, 106a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamdata); 107a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 108a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_TranscodeLpcCoef(WebRtc_Word32 *tmpcoeffs_gQ6, 109a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *index_gQQ); 110a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 111a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_ */ 112