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