]> sjero.net Git - linphone/blob - linphone/mediastreamer2/include/mediastreamer2/msqueue.h
remote ortp and add it as a submodule instead.
[linphone] / linphone / mediastreamer2 / include / mediastreamer2 / msqueue.h
1 /*
2 mediastreamer2 library - modular sound and video processing and streaming
3 Copyright (C) 2006  Simon MORLAT (simon.morlat@linphone.org)
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 */
19 #ifndef MSQUEUE_H
20 #define MSQUEUE_H
21
22 #include "ortp/str_utils.h"
23
24 /* for the moment these are stupid queues limited to one element*/
25
26 typedef struct _MSCPoint{
27         struct _MSFilter *filter;
28         int pin;
29 } MSCPoint;
30
31 typedef struct _MSQueue
32 {
33         queue_t q;
34         MSCPoint prev;
35         MSCPoint next;
36 }MSQueue;
37
38
39 MSQueue * ms_queue_new(struct _MSFilter *f1, int pin1, struct _MSFilter *f2, int pin2 );
40
41 static inline mblk_t *ms_queue_get(MSQueue *q){
42         return getq(&q->q);
43 }
44
45 static inline void ms_queue_put(MSQueue *q, mblk_t *m){
46         putq(&q->q,m);
47         return;
48 }
49
50 static inline mblk_t * ms_queue_peek_last(MSQueue *q){
51         return qlast(&q->q);
52 }
53
54 static inline bool_t ms_queue_empty(MSQueue *q){
55         return qempty(&q->q);
56 }
57
58 #ifdef __cplusplus
59 extern "C"
60 {
61 #endif
62
63 /*init a queue on stack*/
64 void ms_queue_init(MSQueue *q);
65
66 void ms_queue_flush(MSQueue *q);
67
68 void ms_queue_destroy(MSQueue *q);
69
70 #define mblk_set_timestamp_info(m,ts) (m)->reserved1=(ts);
71 #define mblk_get_timestamp_info(m)    ((m)->reserved1)
72 #define mblk_set_marker_info(m,bit)   (m)->reserved2=((m)->reserved2|bit)
73 #define mblk_get_marker_info(m)       ((m)->reserved2&0x1)
74 #define mblk_set_rate(m,bits)         (m)->reserved2=((m)->reserved2|(bits)<<1)
75 #define mblk_get_rate(m)              (((m)->reserved2>>1)&0x3)
76 #define mblk_set_payload_type(m,bits) (m)->reserved2=((m)->reserved2|(bits<<3))
77 #define mblk_get_payload_type(m)      (((m)->reserved2>>3)&0x7F)
78 #define mblk_set_precious_flag(m,bit)    (m)->reserved2=(m)->reserved2|((bit & 0x1)<<10) /*use to prevent mirroring*/
79 #define mblk_get_precious_flag(m)    (((m)->reserved2)>>10 & 0x1)
80
81 struct _MSBufferizer{
82         queue_t q;
83         int size;
84 };
85
86 typedef struct _MSBufferizer MSBufferizer;
87
88 /*allocates and initialize */
89 MSBufferizer * ms_bufferizer_new(void);
90
91 /*initialize in memory */
92 void ms_bufferizer_init(MSBufferizer *obj);
93
94 void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m);
95
96 /* put every mblk_t from q, into the bufferizer */
97 void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);
98
99 int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen);
100
101 /* returns the number of bytes available in the bufferizer*/
102 static inline int ms_bufferizer_get_avail(MSBufferizer *obj){
103         return obj->size;
104 }
105
106 /* purge all data pending in the bufferizer */
107 void ms_bufferizer_flush(MSBufferizer *obj);
108
109 void ms_bufferizer_uninit(MSBufferizer *obj);
110
111 void ms_bufferizer_destroy(MSBufferizer *obj);
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #endif