fix default caps initialization/fixation
[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 Multimedia 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 par_n;     /* pixel-aspect-ratio numerator */
69         gint par_d;     /* pixel-aspect-ratio demnominator */
70         gint fps_n;     /* framerate numerator */
71         gint fps_d;     /* framerate demnominator */
72
73         gint bitrate;
74 };
75
76 #define VBDSIZE         sizeof(VideoBufferDescriptor)
77 #define VBUFSIZE        (1024*16)
78 #define VMMAPSIZE       (1024*1024*6)
79
80 #define GST_TYPE_DREAMVIDEOSOURCE \
81   (gst_dreamvideosource_get_type())
82 #define GST_DREAMVIDEOSOURCE(obj) \
83   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMVIDEOSOURCE,GstDreamVideoSource))
84 #define GST_DREAMVIDEOSOURCE_CLASS(klass) \
85   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMVIDEOSOURCE,GstDreamVideoSourceClass))
86 #define GST_IS_DREAMVIDEOSOURCE(obj) \
87   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMVIDEOSOURCE))
88 #define GST_IS_DREAMVIDEOSOURCE_CLASS(klass) \
89   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMVIDEOSOURCE))
90
91 typedef struct _GstDreamVideoSource        GstDreamVideoSource;
92 typedef struct _GstDreamVideoSourceClass   GstDreamVideoSourceClass;
93
94 typedef struct _VideoFormatInfo            VideoFormatInfo;
95 typedef struct _VideoBufferDescriptor      VideoBufferDescriptor;
96
97 // #define dump 1
98
99 struct _GstDreamVideoSource
100 {
101         GstPushSrc element;
102
103         EncoderInfo *encoder;
104
105         VideoFormatInfo video_info;
106         GstCaps *current_caps;
107
108         unsigned int descriptors_available;
109         unsigned int descriptors_count;
110
111         int dumpfd;
112         
113         GstElement *dreamaudiosrc;
114         GstClockTime base_pts;
115         
116         GMutex mutex;
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