ease debugging overhead
[gst-plugin-dreamsource.git] / src / gstdreamvideosource.h
1 /*
2  * GStreamer dreamvideosource
3  * Copyright 2014-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_DREAMVIDEOSOURCE_H__
20 #define __GST_DREAMVIDEOSOURCE_H__
21
22 #include "gstdreamsource.h"
23 #include <gst/video/video.h>
24
25 G_BEGIN_DECLS
26
27 /* VIDEO field validity flags */
28 #define VBD_FLAG_DTS_VALID                 0x00000001
29 /* VIDEO indicator flags */
30 #define VBD_FLAG_RAP                       0x00010000
31 /* indicates a video data unit (NALU, EBDU, etc) starts at the beginning of
32    this descriptor  - if this is set, then the uiDataUnitID field is valid also */
33 #define VBD_FLAG_DATA_UNIT_START           0x00020000
34 #define VBD_FLAG_EXTENDED                  0x80000000
35
36 #define VENC_START        _IO('v', 128)
37 #define VENC_STOP         _IO('v', 129)
38 #define VENC_SET_BITRATE  _IOW('v', 130, unsigned int)
39 #define VENC_SET_RESOLUTION _IOW('v', 131, unsigned int)
40 #define VENC_SET_FRAMERATE  _IOW('v', 132, unsigned int)
41
42 enum venc_framerate {
43         rate_custom = 0,
44         rate_25,
45         rate_30,
46         rate_50,
47         rate_60,
48 };
49
50 enum venc_videoformat {
51         fmt_custom = 0,
52         fmt_720x576,
53         fmt_1280x720,
54         fmt_1920x1080,
55 };
56 struct _VideoBufferDescriptor
57 {
58         CompressedBufferDescriptor stCommon;
59         uint32_t uiVideoFlags;
60         uint64_t uiDTS;         /* 33-bit DTS value (in 90 Kh or 27Mhz?) */
61         uint8_t uiDataUnitType;
62 };
63
64 struct _VideoFormatInfo {
65         gint width;
66         gint height;
67
68         gint fps_n;     /* framerate numerator */
69         gint fps_d;     /* framerate demnominator */
70
71         gint bitrate;
72 };
73
74 #define VBDSIZE         sizeof(VideoBufferDescriptor)
75 #define VBUFSIZE        (1024*16)
76 #define VMMAPSIZE       (1024*1024*6)
77
78 #define GST_TYPE_DREAMVIDEOSOURCE \
79   (gst_dreamvideosource_get_type())
80 #define GST_DREAMVIDEOSOURCE(obj) \
81   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMVIDEOSOURCE,GstDreamVideoSource))
82 #define GST_DREAMVIDEOSOURCE_CLASS(klass) \
83   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMVIDEOSOURCE,GstDreamVideoSourceClass))
84 #define GST_IS_DREAMVIDEOSOURCE(obj) \
85   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMVIDEOSOURCE))
86 #define GST_IS_DREAMVIDEOSOURCE_CLASS(klass) \
87   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMVIDEOSOURCE))
88
89 typedef struct _GstDreamVideoSource        GstDreamVideoSource;
90 typedef struct _GstDreamVideoSourceClass   GstDreamVideoSourceClass;
91
92 typedef struct _VideoFormatInfo            VideoFormatInfo;
93 typedef struct _VideoBufferDescriptor      VideoBufferDescriptor;
94
95 // #define dump 1
96
97 struct _GstDreamVideoSource
98 {
99         GstPushSrc element;
100
101         EncoderInfo *encoder;
102
103         VideoFormatInfo video_info;
104         GstCaps *current_caps;
105
106         unsigned int descriptors_available;
107         unsigned int descriptors_count;
108
109         int dumpfd;
110
111         GstElement *dreamaudiosrc;
112         GstClockTime base_pts;
113
114         GMutex mutex;
115
116         int buffers_in_use;
117 };
118
119 struct _GstDreamVideoSourceClass
120 {
121         GstPushSrcClass parent_class;
122         gint64 (*get_base_pts) (GstDreamVideoSource *self);
123 };
124
125 GType gst_dreamvideosource_get_type (void);
126 gboolean gst_dreamvideosource_plugin_init (GstPlugin * plugin);
127
128 G_END_DECLS
129
130 #endif /* __GST_DREAMVIDEOSOURCE_H__ */
131