fixed profile setting
[gst-plugin-dreamsource.git] / src / gstdreamaudiosource.h
1 /*
2  * GStreamer dreamaudiosource
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_DREAMAUDIOSOURCE_H__
20 #define __GST_DREAMAUDIOSOURCE_H__
21
22 #include "gstdreamsource.h"
23
24 G_BEGIN_DECLS
25
26 struct _AudioBufferDescriptor
27 {
28         CompressedBufferDescriptor stCommon;
29         uint32_t uiRawDataOffset;
30         size_t   uiRawDataLength;
31         uint8_t  uiDataUnitType;
32 };
33
34 struct _AudioFormatInfo {
35         gint bitrate;
36         gint samplerate;
37 };
38
39 #define ABDSIZE         sizeof(AudioBufferDescriptor)
40 #define ABUFSIZE        (1024*16)
41 #define AMMAPSIZE       (256*1024)
42
43 #define AENC_START        _IO('v', 128)
44 #define AENC_STOP         _IO('v', 129)
45 #define AENC_SET_BITRATE  _IOW('v', 130, unsigned int)
46 #define AENC_SET_SOURCE   _IOW('v', 140, unsigned int)
47 #define AENC_GET_STC      _IOR('v', 141, uint32_t)
48
49 typedef enum aenc_source {
50         GST_DREAMAUDIOSOURCE_INPUT_MODE_LIVE = 0,
51         GST_DREAMAUDIOSOURCE_INPUT_MODE_HDMI_IN,
52         GST_DREAMAUDIOSOURCE_INPUT_MODE_BACKGROUND
53 } GstDreamAudioSourceInputMode;
54
55 #define GST_TYPE_DREAMAUDIOSOURCE_INPUT_MODE (gst_dreamaudiosource_input_mode_get_type ())
56
57 #define GST_TYPE_DREAMAUDIOSOURCE \
58   (gst_dreamaudiosource_get_type())
59 #define GST_DREAMAUDIOSOURCE(obj) \
60   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSource))
61 #define GST_DREAMAUDIOSOURCE_CLASS(klass) \
62   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSourceClass))
63 #define GST_IS_DREAMAUDIOSOURCE(obj) \
64   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMAUDIOSOURCE))
65 #define GST_IS_DREAMAUDIOSOURCE_CLASS(klass) \
66   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMAUDIOSOURCE))
67
68 typedef struct _GstDreamAudioSource        GstDreamAudioSource;
69 typedef struct _GstDreamAudioSourceClass   GstDreamAudioSourceClass;
70
71 typedef struct _AudioFormatInfo            AudioFormatInfo;
72 typedef struct _AudioBufferDescriptor      AudioBufferDescriptor;
73
74 // #define dump 1
75 #define PROVIDE_CLOCK
76
77 struct _buffer_memorytracker
78 {
79         GstDreamAudioSource *self;
80         GstBuffer *buffer;
81         guint uiOffset;
82         guint uiLength;
83 };
84
85 struct _GstDreamAudioSource
86 {
87         GstPushSrc element;
88
89         EncoderInfo *encoder;
90
91         GstDreamAudioSourceInputMode input_mode;
92
93         AudioFormatInfo audio_info;
94
95         unsigned int descriptors_available;
96         unsigned int descriptors_count;
97
98         int dumpfd;
99         goffset dumpsize;
100
101         GstElement *dreamvideosrc;
102         gint64 dts_offset;
103
104         GMutex mutex;
105         GCond cond;
106         int control_sock[2];
107
108         gboolean flushing;
109
110         GThread *readthread;
111         GQueue current_frames;
112         guint buffer_size;
113         GList *memtrack_list;
114
115         GstClock *encoder_clock;
116         GstClockTime last_ts;
117 };
118
119 struct _GstDreamAudioSourceClass
120 {
121         GstPushSrcClass parent_class;
122         /* signals */
123         void (*signal_lost)  (GstDreamAudioSource *self);
124         /* actions */
125         gint64 (*get_dts_offset) (GstDreamAudioSource *self);
126 };
127
128 GType gst_dreamaudiosource_get_type (void);
129 GType gst_dreamaudiosource_input_mode_get_type (void);
130 gboolean gst_dreamaudiosource_plugin_init (GstPlugin * plugin);
131
132 void gst_dreamaudiosource_set_input_mode (GstDreamAudioSource *self, GstDreamAudioSourceInputMode mode);
133 GstDreamAudioSourceInputMode gst_dreamaudiosource_get_input_mode (GstDreamAudioSource *self);
134
135 G_END_DECLS
136
137 #endif /* __GST_DREAMAUDIOSOURCE_H__ */
138