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 * arith_routins.h 13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Functions for arithmetic coding. 15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ARITH_ROUTINS_H_ 19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ARITH_ROUTINS_H_ 20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "structs.h" 22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_EncLogisticMulti2(...) 26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Arithmetic coding of spectrum. 28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - dataQ7 : data vector in Q7 32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - envQ8 : side info vector defining the width of the pdf 33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in Q8 34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - lenData : data vector length 35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : 0 if ok, 37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * <0 otherwise. 38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncLogisticMulti2( 40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamData, 41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *dataQ7, 42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 *env, 43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 lenData); 44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_EncTerminate(...) 48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Final call to the arithmetic coder for an encoder call. This function 50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * terminates and return byte stream. 51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : number of bytes in the stream 56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 57a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_EncTerminate(Bitstr_enc *streamData); 58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_DecLogisticMulti2(...) 62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Arithmetic decoding of spectrum. 64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - envQ8 : side info vector defining the width of the pdf 68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in Q8 69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - lenData : data vector length 70a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 71a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input/Output: 72a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - dataQ7 : input: dither vector, output: data vector, in Q7 73a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 74a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : number of bytes in the stream so far 75a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * <0 if error detected 76a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 77a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecLogisticMulti2( 78a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *data, 79a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec *streamData, 80a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word32 *env, 81a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 lenData); 82a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 83a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 84a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 85a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_EncHistMulti(...) 86a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 87a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Encode the histogram interval 88a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 89a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 90a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 91a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - data : data vector 92a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - cdf : array of cdf arrays 93a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - lenData : data vector length 94a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 95a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : 0 if ok 96a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * <0 if error detected 97a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 98a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncHistMulti( 99a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc *streamData, 100a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 *data, 101a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 **cdf, 102a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 lenData); 103a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 104a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 105a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 106a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_DecHistBisectMulti(...) 107a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 108a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Function to decode more symbols from the arithmetic bytestream, using 109a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * method of bisection. 110a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * C df tables should be of size 2^k-1 (which corresponds to an 111a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * alphabet size of 2^k-2) 112a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 113a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 114a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 115a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - cdf : array of cdf arrays 116a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - cdfSize : array of cdf table sizes+1 (power of two: 2^k) 117a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - lenData : data vector length 118a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 119a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Output: 120a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - data : data vector 121a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 122a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : number of bytes in the stream 123a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * <0 if error detected 124a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 125a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecHistBisectMulti( 126a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *data, 127a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec *streamData, 128a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 **cdf, 129a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 *cdfSize, 130a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 lenData); 131a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 132a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 133a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/**************************************************************************** 134a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * WebRtcIsacfix_DecHistOneStepMulti(...) 135a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 136a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Function to decode more symbols from the arithmetic bytestream, taking 137a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * single step up or down at a time. 138a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * cdf tables can be of arbitrary size, but large tables may take a lot of 139a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * iterations. 140a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 141a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Input: 142a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - streamData : in-/output struct containing bitstream 143a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - cdf : array of cdf arrays 144a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - initIndex : vector of initial cdf table search entries 145a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - lenData : data vector length 146a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 147a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Output: 148a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * - data : data vector 149a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 150a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Return value : number of bytes in original stream 151a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * <0 if error detected 152a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 153a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecHistOneStepMulti( 154a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *data, 155a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec *streamData, 156a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 **cdf, 157a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_UWord16 *initIndex, 158a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin const WebRtc_Word16 lenData); 159a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 160a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ARITH_ROUTINS_H_ */ 161