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