summaryrefslogtreecommitdiff
path: root/omx/gstomxaudiodec.h
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-05-10 23:12:54 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-07-02 09:21:00 +0200
commit0c3b3ef3d091fdd67a16c0dc2dcddb5f564ee3e4 (patch)
treed0644ee15498dfa44e262e204a3123d1b5a5925d /omx/gstomxaudiodec.h
parent3d94d3e44d7576a43c8755b2f7b5cf35eb83e8a6 (diff)
downloadgst-omx-0c3b3ef3d091fdd67a16c0dc2dcddb5f564ee3e4.tar.gz
omx: Add audio decoder base class and a subclass for MP3
Diffstat (limited to 'omx/gstomxaudiodec.h')
-rw-r--r--omx/gstomxaudiodec.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/omx/gstomxaudiodec.h b/omx/gstomxaudiodec.h
new file mode 100644
index 0000000..e7d5a26
--- /dev/null
+++ b/omx/gstomxaudiodec.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2014, Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __GST_OMX_AUDIO_DEC_H__
+#define __GST_OMX_AUDIO_DEC_H__
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include "gstomx.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_OMX_AUDIO_DEC \
+ (gst_omx_audio_dec_get_type())
+#define GST_OMX_AUDIO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OMX_AUDIO_DEC,GstOMXAudioDec))
+#define GST_OMX_AUDIO_DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OMX_AUDIO_DEC,GstOMXAudioDecClass))
+#define GST_OMX_AUDIO_DEC_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_OMX_AUDIO_DEC,GstOMXAudioDecClass))
+#define GST_IS_OMX_AUDIO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OMX_AUDIO_DEC))
+#define GST_IS_OMX_AUDIO_DEC_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OMX_AUDIO_DEC))
+
+typedef struct _GstOMXAudioDec GstOMXAudioDec;
+typedef struct _GstOMXAudioDecClass GstOMXAudioDecClass;
+
+struct _GstOMXAudioDec
+{
+ GstAudioDecoder parent;
+
+ /* < protected > */
+ GstOMXComponent *dec;
+ GstOMXPort *dec_in_port, *dec_out_port;
+
+ GstBufferPool *in_port_pool, *out_port_pool;
+
+ /* < private > */
+ GstAudioInfo info;
+ GstAudioChannelPosition position[OMX_AUDIO_MAXCHANNELS];
+ gint reorder_map[OMX_AUDIO_MAXCHANNELS];
+ gboolean needs_reorder;
+ GstBuffer *codec_data;
+ /* TRUE if the component is configured and saw
+ * the first buffer */
+ gboolean started;
+
+ GstClockTime last_upstream_ts;
+
+ /* Draining state */
+ GMutex drain_lock;
+ GCond drain_cond;
+ /* TRUE if EOS buffers shouldn't be forwarded */
+ gboolean draining;
+
+ /* TRUE if upstream is EOS */
+ gboolean eos;
+
+ GstFlowReturn downstream_flow_ret;
+};
+
+struct _GstOMXAudioDecClass
+{
+ GstAudioDecoderClass parent_class;
+
+ GstOMXClassData cdata;
+
+ gboolean (*is_format_change) (GstOMXAudioDec * self, GstOMXPort * port, GstCaps * caps);
+ gboolean (*set_format) (GstOMXAudioDec * self, GstOMXPort * port, GstCaps * caps);
+ gint (*get_samples_per_frame) (GstOMXAudioDec * self, GstOMXPort * port);
+};
+
+GType gst_omx_audio_dec_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_OMX_AUDIO_DEC_H__ */