ease debugging overhead
[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 #include <gst/audio/audio.h>
24
25 G_BEGIN_DECLS
26
27 struct _AudioBufferDescriptor
28 {
29         CompressedBufferDescriptor stCommon;
30         uint32_t uiRawDataOffset;
31         size_t   uiRawDataLength;
32         uint8_t uiDataUnitType;
33 };
34
35 struct _AudioFormatInfo {
36         gint bitrate;
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
47 #define GST_TYPE_DREAMAUDIOSOURCE \
48   (gst_dreamaudiosource_get_type())
49 #define GST_DREAMAUDIOSOURCE(obj) \
50   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSource))
51 #define GST_DREAMAUDIOSOURCE_CLASS(klass) \
52   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DREAMAUDIOSOURCE,GstDreamAudioSourceClass))
53 #define GST_IS_DREAMAUDIOSOURCE(obj) \
54   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DREAMAUDIOSOURCE))
55 #define GST_IS_DREAMAUDIOSOURCE_CLASS(klass) \
56   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DREAMAUDIOSOURCE))
57
58 typedef struct _GstDreamAudioSource        GstDreamAudioSource;
59 typedef struct _GstDreamAudioSourceClass   GstDreamAudioSourceClass;
60
61 typedef struct _AudioFormatInfo            AudioFormatInfo;
62 typedef struct _AudioBufferDescriptor      AudioBufferDescriptor;
63
64 // #define dump 1
65
66 struct _bufferdebug
67 {
68         GstDreamAudioSource *self;
69         GstBuffer *buffer;
70         GstClockTime buffer_pts;
71 };
72
73 struct _GstDreamAudioSource
74 {
75         GstPushSrc element;
76
77         EncoderInfo *encoder;
78
79         AudioFormatInfo audio_info;
80
81         unsigned int descriptors_available;
82         unsigned int descriptors_count;
83
84         int dumpfd;
85         goffset dumpsize;
86
87         GstElement *dreamvideosrc;
88         GstClockTime base_pts;
89
90         GMutex mutex;
91         int control_sock[2];
92
93         GList *buffers_list;
94 };
95
96 struct _GstDreamAudioSourceClass
97 {
98         GstPushSrcClass parent_class;
99         gint64 (*get_base_pts) (GstDreamAudioSource *self);
100 };
101
102 GType gst_dreamaudiosource_get_type (void);
103 gboolean gst_dreamaudiosource_plugin_init (GstPlugin * plugin);
104
105 G_END_DECLS
106
107 #endif /* __GST_DREAMAUDIOSOURCE_H__ */
108