use calibrated timestamps (as suggested by slomo)
[gst-plugin-dreamsource.git] / src / gstdreamtssource.h
1 /*
2  * GStreamer dreamtssource
3  * Copyright 2015 Andreas Frisch <fraxinas@opendreambox.org>
4  *
5  * This program is licensed under the Creative Commons
6  * Attribution-NonCommercial-ShareAlike 3.0 Unported
7  * License. To view a copy of this license, visit
8  * http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to
9  * Creative Commons,559 Nathan Abbott Way,Stanford,California 94305,USA.
10  *
11  * Alternatively, this program may be distributed and executed on
12  * hardware which is licensed by Dream Property GmbH.
13  *
14  * This program is NOT free software. It is open source, you are allowed
15  * to modify it (if you keep the license), but it may not be commercially
16  * distributed other than under the conditions noted above.
17  */
18
19 #ifndef __GST_DREAMTSSOURCE_H__
20 #define __GST_DREAMTSSOURCE_H__
21
22 #include "gstdreamsource.h"
23
24 #include <sys/socket.h>
25 #include <arpa/inet.h>
26 #include <linux/dvb/dmx.h>
27 #include <linux/dvb/version.h>
28
29 #define MAX_PIDS 32
30 #define MAX_LINE_LENGTH 512
31
32 #define BSIZE                    32712
33
34 #if DVB_API_VERSION < 5
35 #define DMX_ADD_PID              _IO('o', 51)
36 #define DMX_REMOVE_PID           _IO('o', 52)
37
38 typedef enum {
39         DMX_TAP_TS = 0,
40         DMX_TAP_PES = DMX_PES_OTHER, /* for backward binary compat. */
41 } dmx_tap_type_t;
42 #endif
43
44 G_BEGIN_DECLS
45
46 #define GST_TYPE_DREAMTSSOURCE \
47   (gst_dreamtssource_get_type())
48 #define GST_DREAMTSSOURCE(obj) \
49   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMTSSOURCE,GstDreamTsSource))
50 #define GST_DREAMTSSOURCE_CLASS(klass) \
51   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMTSSOURCE,GstDreamTsSourceClass))
52 #define GST_IS_DREAMTSSOURCE(obj) \
53   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMTSSOURCE))
54 #define GST_IS_DREAMTSSOURCE_CLASS(klass) \
55   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMTSSOURCE))
56
57 typedef struct _GstDreamTsSource        GstDreamTsSource;
58 typedef struct _GstDreamTsSourceClass   GstDreamTsSourceClass;
59
60 struct _GstDreamTsSource
61 {
62         GstPushSrc element;
63         
64         gchar *service_ref;
65         GstClockTime base_pts;
66         
67         int active_pids[MAX_PIDS];
68         int upstream;
69         int upstream_state, upstream_response_code;
70         char *reason;
71         char response_line[MAX_LINE_LENGTH];
72         int response_p;
73         int demux_fd;
74
75         int control_sock[2];
76         GMutex mutex;
77 };
78
79 struct _GstDreamTsSourceClass
80 {
81         GstPushSrcClass parent_class;
82         gint64 (*get_base_pts) (GstDreamTsSource *self);
83 };
84
85 GType gst_dreamtssource_get_type (void);
86 gboolean gst_dreamtssource_plugin_init (GstPlugin * plugin);
87
88 G_END_DECLS
89
90 #endif /* __GST_DREAMTSSOURCE_H__ */
91