• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Farsight Voice+Video library
3  *
4  *  Copyright 2006 Collabora Ltd,
5  *  Copyright 2006 Nokia Corporation
6  *   @author: Philippe Kalaf <philippe.kalaf@collabora.co.uk>.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  *
23  */
24 
25 #ifndef __GST_NET_SIM_H__
26 #define __GST_NET_SIM_H__
27 
28 #include <gst/gst.h>
29 
30 G_BEGIN_DECLS
31 
32 /* #define's don't like whitespacey bits */
33 #define GST_TYPE_NET_SIM \
34   (gst_net_sim_get_type())
35 #define GST_NET_SIM(obj) \
36   (G_TYPE_CHECK_INSTANCE_CAST((obj), \
37   GST_TYPE_NET_SIM,GstNetSim))
38 #define GST_NET_SIM_CLASS(klass) \
39   (G_TYPE_CHECK_CLASS_CAST((klass), \
40   GST_TYPE_NET_SIM,GstNetSimClass))
41 #define GST_IS_NET_SIM(obj) \
42   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_SIM))
43 #define GST_IS_NET_SIM_CLASS(obj) \
44   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_SIM))
45 
46 typedef struct _GstNetSim GstNetSim;
47 typedef struct _GstNetSimClass GstNetSimClass;
48 
49 typedef enum
50 {
51   DISTRIBUTION_UNIFORM,
52   DISTRIBUTION_NORMAL,
53   DISTRIBUTION_GAMMA
54 } GstNetSimDistribution;
55 
56 typedef struct
57 {
58   gboolean generate;
59   gdouble z0;
60   gdouble z1;
61 } NormalDistributionState;
62 
63 struct _GstNetSim
64 {
65   GstElement parent;
66 
67   GstPad *sinkpad;
68   GstPad *srcpad;
69 
70   GMutex loop_mutex;
71   GCond start_cond;
72   GMainLoop *main_loop;
73   gboolean running;
74   GRand *rand_seed;
75   gsize bucket_size;
76   GstClockTime prev_time;
77   NormalDistributionState delay_state;
78   gint64 last_ready_time;
79 
80   /* properties */
81   gint min_delay;
82   gint max_delay;
83   GstNetSimDistribution delay_distribution;
84   gfloat delay_probability;
85   gfloat drop_probability;
86   gfloat duplicate_probability;
87   guint drop_packets;
88   gint max_kbps;
89   gint max_bucket_size;
90   gboolean allow_reordering;
91 };
92 
93 struct _GstNetSimClass
94 {
95   GstElementClass parent_class;
96 };
97 
98 GType gst_net_sim_get_type (void);
99 GST_ELEMENT_REGISTER_DECLARE (netsim);
100 
101 G_END_DECLS
102 
103 #endif /* __GST_NET_SIM_H__ */
104