error out on state change to ready if encoder device is unavailable
[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 };
37
38 #define ABDSIZE         sizeof(AudioBufferDescriptor)
39 #define ABUFSIZE        (1024*16)
40 #define AMMAPSIZE       (256*1024)
41
42 #define AENC_START        _IO('v', 128)
43 #define AENC_STOP         _IO('v', 129)
44 #define AENC_SET_BITRATE  _IOW('v', 130, unsigned int)
45 #define AENC_SET_SOURCE   _IOW('v', 140, unsigned int)
46 #define AENC_GET_STC      _IOR('v', 141, uint32_t)
47
48 typedef enum aenc_source {
49         GST_DREAMAUDIOSOURCE_INPUT_MODE_LIVE = 0,
50         GST_DREAMAUDIOSOURCE_INPUT_MODE_HDMI_IN,
51         GST_DREAMAUDIOSOURCE_INPUT_MODE_BACKGROUND
52 } GstDreamAudioSourceInputMode;
53
54 #define GST_TYPE_DREAMAUDIOSOURCE_INPUT_MODE (gst_dreamaudiosource_input_mode_get_type ())
55
56 #define GST_TYPE_DREAMAUDIOSOURCE \
57   (gst_dreamaudiosource_get_type())
58 #define GST_DREAMAUDIOSOURCE(obj) \
59   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSource))
60 #define GST_DREAMAUDIOSOURCE_CLASS(klass) \
61   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSourceClass))
62 #define GST_IS_DREAMAUDIOSOURCE(obj) \
63   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMAUDIOSOURCE))
64 #define GST_IS_DREAMAUDIOSOURCE_CLASS(klass) \
65   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMAUDIOSOURCE))
66
67 typedef struct _GstDreamAudioSource        GstDreamAudioSource;
68 typedef struct _GstDreamAudioSourceClass   GstDreamAudioSourceClass;
69
70 typedef struct _AudioFormatInfo            AudioFormatInfo;
71 typedef struct _AudioBufferDescriptor      AudioBufferDescriptor;
72
73 // #define dump 1
74 // #define PROVIDE_CLOCK
75
76 struct _bufferdebug
77 {
78         GstDreamAudioSource *self;
79         GstBuffer *buffer;
80         GstClockTime buffer_pts;
81 };
82
83 struct _GstDreamAudioSource
84 {
85         GstPushSrc element;
86
87         EncoderInfo *encoder;
88
89         GstDreamAudioSourceInputMode input_mode;
90
91         AudioFormatInfo audio_info;
92
93         unsigned int descriptors_available;
94         unsigned int descriptors_count;
95
96         int dumpfd;
97         goffset dumpsize;
98
99         GstElement *dreamvideosrc;
100         GstClockTime base_pts;
101
102         GMutex mutex;
103         int control_sock[2];
104
105         GList *buffers_list;
106
107         GstClock *encoder_clock;
108 };
109
110 struct _GstDreamAudioSourceClass
111 {
112         GstPushSrcClass parent_class;
113         gint64 (*get_base_pts) (GstDreamAudioSource *self);
114 };
115
116 GType gst_dreamaudiosource_get_type (void);
117 GType gst_dreamaudiosource_input_mode_get_type (void);
118 gboolean gst_dreamaudiosource_plugin_init (GstPlugin * plugin);
119
120 void gst_dreamaudiosource_set_input_mode (GstDreamAudioSource *self, GstDreamAudioSourceInputMode mode);
121 GstDreamAudioSourceInputMode gst_dreamaudiosource_get_input_mode (GstDreamAudioSource *self);
122
123 G_END_DECLS
124
125 #endif /* __GST_DREAMAUDIOSOURCE_H__ */
126