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