source: mediastreamer2/include/mediastreamer2/msqueue.h @ 1300:40d61ae32f60

Last change on this file since 1300:40d61ae32f60 was 1300:40d61ae32f60, checked in by Simon Morlat <simon.morlat@…>, 2 years ago

update vs build, export all api

File size: 3.8 KB
Line 
1/*
2mediastreamer2 library - modular sound and video processing and streaming
3Copyright (C) 2006  Simon MORLAT (simon.morlat@linphone.org)
4
5This program is free software; you can redistribute it and/or
6modify it under the terms of the GNU General Public License
7as published by the Free Software Foundation; either version 2
8of the License, or (at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, 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#include "mediastreamer2/mscommon.h"
24
25/* for the moment these are stupid queues limited to one element*/
26
27typedef struct _MSCPoint{
28        struct _MSFilter *filter;
29        int pin;
30} MSCPoint;
31
32typedef struct _MSQueue
33{
34        queue_t q;
35        MSCPoint prev;
36        MSCPoint next;
37}MSQueue;
38
39
40MSQueue * ms_queue_new(struct _MSFilter *f1, int pin1, struct _MSFilter *f2, int pin2 );
41
42static inline mblk_t *ms_queue_get(MSQueue *q){
43        return getq(&q->q);
44}
45
46static inline void ms_queue_put(MSQueue *q, mblk_t *m){
47        putq(&q->q,m);
48        return;
49}
50
51static inline mblk_t * ms_queue_peek_last(MSQueue *q){
52        return qlast(&q->q);
53}
54
55static inline void ms_queue_remove(MSQueue *q, mblk_t *m){
56        remq(&q->q,m);
57}
58
59static inline bool_t ms_queue_empty(MSQueue *q){
60        return qempty(&q->q);
61}
62
63#ifdef __cplusplus
64extern "C"
65{
66#endif
67
68/*yes these functions need to be public for plugins to work*/
69
70/*init a queue on stack*/
71MS2_PUBLIC void ms_queue_init(MSQueue *q);
72
73MS2_PUBLIC void ms_queue_flush(MSQueue *q);
74
75MS2_PUBLIC void ms_queue_destroy(MSQueue *q);
76
77
78
79#define mblk_set_timestamp_info(m,ts) (m)->reserved1=(ts);
80#define mblk_get_timestamp_info(m)    ((m)->reserved1)
81#define mblk_set_marker_info(m,bit)   (m)->reserved2=((m)->reserved2|bit)
82#define mblk_get_marker_info(m)       ((m)->reserved2&0x1)
83#define mblk_set_rate(m,bits)         (m)->reserved2=((m)->reserved2|(bits)<<1)
84#define mblk_get_rate(m)              (((m)->reserved2>>1)&0x3)
85#define mblk_set_payload_type(m,bits) (m)->reserved2=((m)->reserved2|(bits<<3))
86#define mblk_get_payload_type(m)      (((m)->reserved2>>3)&0x7F)
87#define mblk_set_precious_flag(m,bit)    (m)->reserved2=(m)->reserved2|((bit & 0x1)<<10) /*use to prevent mirroring*/
88#define mblk_get_precious_flag(m)    (((m)->reserved2)>>10 & 0x1)
89#define mblk_set_video_orientation(m,o)         do{\
90        if (o==MS_VIDEO_LANDSCAPE) (m)->reserved2=(m)->reserved2 & ~(1<<11); \
91        else (m)->reserved2|=(1<<11); \
92}while(0)
93#define mblk_get_video_orientation(m)  (((m)->reserved2 & (1<<11)) ? MS_VIDEO_PORTRAIT : MS_VIDEO_LANDSCAPE)
94
95struct _MSBufferizer{
96        queue_t q;
97        int size;
98};
99
100typedef struct _MSBufferizer MSBufferizer;
101
102/*allocates and initialize */
103MS2_PUBLIC MSBufferizer * ms_bufferizer_new(void);
104
105/*initialize in memory */
106void ms_bufferizer_init(MSBufferizer *obj);
107
108MS2_PUBLIC void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m);
109
110/* put every mblk_t from q, into the bufferizer */
111MS2_PUBLIC void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);
112
113MS2_PUBLIC int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen);
114
115/* returns the number of bytes available in the bufferizer*/
116static inline int ms_bufferizer_get_avail(MSBufferizer *obj){
117        return obj->size;
118}
119
120MS2_PUBLIC void ms_bufferizer_skip_bytes(MSBufferizer *obj, int bytes);
121
122/* purge all data pending in the bufferizer */
123MS2_PUBLIC void ms_bufferizer_flush(MSBufferizer *obj);
124
125void ms_bufferizer_uninit(MSBufferizer *obj);
126
127MS2_PUBLIC void ms_bufferizer_destroy(MSBufferizer *obj);
128
129#ifdef __cplusplus
130}
131#endif
132
133#endif
Note: See TracBrowser for help on using the repository browser.