Starting (still incomplete) average bit-rate (ABR) implementation
[speexdsp.git] / libspeex / speex_callbacks.h
1 /* Copyright (C) 2002 Jean-Marc Valin*/
2 /**
3   @file speex_callbacks.h
4   @brief Describes callback handling and in-band signalling
5 */
6 /*
7    Redistribution and use in source and binary forms, with or without
8    modification, are permitted provided that the following conditions
9    are met:
10    
11    - Redistributions of source code must retain the above copyright
12    notice, this list of conditions and the following disclaimer.
13    
14    - Redistributions in binary form must reproduce the above copyright
15    notice, this list of conditions and the following disclaimer in the
16    documentation and/or other materials provided with the distribution.
17    
18    - Neither the name of the Xiph.org Foundation nor the names of its
19    contributors may be used to endorse or promote products derived from
20    this software without specific prior written permission.
21    
22    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
26    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
34 */
35
36 #ifndef SPEEX_CALLBACKS_H
37 #define SPEEX_CALLBACKS_H
38
39 #include "speex.h"
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #define SPEEX_MAX_CALLBACKS 16
46
47 /* Describes all the in-band requests */
48
49 /*These are 1-bit requests*/
50 #define SPEEX_INBAND_ENH_REQUEST         0
51 #define SPEEX_INBAND_VBR_REQUEST         1
52
53 /*These are 4-bit requests*/
54 #define SPEEX_INBAND_MODE_REQUEST        2
55 #define SPEEX_INBAND_LOW_MODE_REQUEST    3
56 #define SPEEX_INBAND_HIGH_MODE_REQUEST   4
57 #define SPEEX_INBAND_VBR_QUALITY_REQUEST 5
58 #define SPEEX_INBAND_ACKNOWLEDGE_REQUEST 6
59
60 /*These are 8-bit requests*/
61 /** Send a character in-band */
62 #define SPEEX_INBAND_CHAR                8
63 #define SPEEX_INBAND_STEREO              9
64
65 /*These are 16-bit requests*/
66 #define SPEEX_INBAND_MAX_BITRATE         10
67
68 /*These are 32-bit requests*/
69 #define SPEEX_INBAND_ACKNOWLEDGE         12
70
71 /** Callback function type */
72 typedef int (*speex_callback_func)(SpeexBits *bits, void *state, void *data);
73
74 typedef struct SpeexCallback {
75    int callback_id;
76    speex_callback_func func;
77    void *data;
78 } SpeexCallback;
79
80 int speex_inband_handler(SpeexBits *bits, SpeexCallback *callback_list, void *state);
81
82 int speex_std_mode_request_handler(SpeexBits *bits, void *state, void *data);
83
84 int speex_std_high_mode_request_handler(SpeexBits *bits, void *state, void *data);
85
86 int speex_std_char_handler(SpeexBits *bits, void *state, void *data);
87
88
89 int speex_default_user_handler(SpeexBits *bits, void *state, void *data);
90
91 #ifdef __cplusplus
92 }
93 #endif
94
95
96 #endif