b0411ac3876cac21cd3e94cc39e75b1917a81e82
[asterisk/asterisk.git] / scx_jitterbuf.h
1 /*
2  * scx_jitterbuf: jitterbuffering algorithm
3  *
4  * Copyright (C) 2005, Attractel OOD
5  *
6  * Contributors:
7  * Slav Klenov <slav@securax.org>
8  *
9  * Copyright on this file is disclaimed to Digium for inclusion in Asterisk
10  *
11  * See http://www.asterisk.org for more information about
12  * the Asterisk project. Please do not directly contact
13  * any of the maintainers of this project for assistance;
14  * the project provides a web site, mailing lists and IRC
15  * channels for your use.
16  *
17  * This program is free software, distributed under the terms of
18  * the GNU General Public License Version 2. See the LICENSE file
19  * at the top of the source tree.
20  */
21
22 /*! \file 
23  * 
24  * \brief Jitterbuffering algorithm.
25  * 
26  */
27
28 #ifndef _SCX_JITTERBUF_H_
29 #define _SCX_JITTERBUF_H_
30
31 #if defined(__cplusplus) || defined(c_plusplus)
32 extern "C" {
33 #endif
34
35
36 /* return codes */
37 enum {
38         SCX_JB_OK,
39         SCX_JB_DROP,
40         SCX_JB_INTERP,
41         SCX_JB_NOFRAME
42 };
43
44
45 /* defaults */
46 #define SCX_JB_SIZE_DEFAULT 200
47 #define SCX_JB_RESYNCH_THRESHOLD_DEFAULT 1000
48
49
50 /* jb configuration properties */
51 struct scx_jb_conf
52 {
53         long jbsize;
54         long resync_threshold;
55 };
56
57
58 struct scx_jb_frame
59 {
60         void *data;
61         long ts;
62         long ms;
63         long delivery;
64         struct scx_jb_frame *next;
65         struct scx_jb_frame *prev;
66 };
67
68
69 struct scx_jb;
70
71
72 /* jb interface */
73
74 struct scx_jb * scx_jb_new(struct scx_jb_conf *conf);
75
76 void scx_jb_destroy(struct scx_jb *jb);
77
78 int scx_jb_put_first(struct scx_jb *jb, void *data, long ms, long ts, long now);
79
80 int scx_jb_put(struct scx_jb *jb, void *data, long ms, long ts, long now);
81
82 int scx_jb_get(struct scx_jb *jb, struct scx_jb_frame *frame, long now, long interpl);
83
84 long scx_jb_next(struct scx_jb *jb);
85
86 int scx_jb_remove(struct scx_jb *jb, struct scx_jb_frame *frameout);
87
88 void scx_jb_set_force_resynch(struct scx_jb *jb);
89
90
91 #if defined(__cplusplus) || defined(c_plusplus)
92 }
93 #endif
94
95 #endif /* _SCX_JITTERBUF_H_ */