Merge remote-tracking branch 'origin/master' into 0.11
[platform/upstream/gst-plugins-good.git] / gst / wavparse / gstwavparse.h
index dad8e62..82838e4 100644 (file)
@@ -1,5 +1,6 @@
 /* GStreamer
  * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2006> Nokia Corporation, Stefan Kost <stefan.kost@nokia.com>.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #define __GST_WAVPARSE_H__
 
 
-#include <config.h>
 #include <gst/gst.h>
-#include <gst/riff/riff.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+#include "gst/riff/riff-ids.h"
+#include "gst/riff/riff-read.h"
+#include <gst/base/gstadapter.h>
 
+G_BEGIN_DECLS
 
 #define GST_TYPE_WAVPARSE \
   (gst_wavparse_get_type())
 #define GST_WAVPARSE(obj) \
   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_WAVPARSE,GstWavParse))
 #define GST_WAVPARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_WAVPARSE,GstWavParse))
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_WAVPARSE,GstWavParseClass))
 #define GST_IS_WAVPARSE(obj) \
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WAVPARSE))
-#define GST_IS_WAVPARSE_CLASS(obj) \
+#define GST_IS_WAVPARSE_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WAVPARSE))
 
-
-#define GST_WAVPARSE_UNKNOWN   0       /* initialized state */
-#define GST_WAVPARSE_CHUNK_FMT 1       /* searching for fmt */
-#define GST_WAVPARSE_CHUNK_DATA        2       /* searching for data */
-#define GST_WAVPARSE_DATA      3       /* in data region */
-#define GST_WAVPARSE_OTHER     4       /* in unknown region */
+typedef enum {
+  GST_WAVPARSE_START,
+  GST_WAVPARSE_HEADER,
+  GST_WAVPARSE_DATA
+} GstWavParseState;
 
 typedef struct _GstWavParse GstWavParse;
 typedef struct _GstWavParseClass GstWavParseClass;
 
+/**
+ * GstWavParse:
+ *
+ * Opaque data structure.
+ */
 struct _GstWavParse {
-  GstElement element;
+  GstElement parent;
 
   /* pads */
   GstPad *sinkpad,*srcpad;
 
-  /* WAVE decoding state */
-  gint state;
-
-  /* RIFF decoding state */
-  GstRiff *riff;
-  gulong riff_nextlikely;
+  /* for delayed source pad creation for when
+   * we have the first chunk of data and know
+   * the format for sure */
+  GstCaps     *caps;
+  GstTagList  *tags;
+  GstEvent    *start_segment;
 
-  /* expected length of audio */
-  gulong size;
+  /* WAVE decoding state */
+  GstWavParseState state;
+  gboolean abort_buffering;
 
   /* format of audio, see defines below */
   gint format;
 
   /* useful audio data */
-  gint bps;
-  gint rate;
-  gint channels;
-  gint width;
-
-  gint64 offset;
-  gint64 datastart;
-  gboolean need_discont;
-
-  GstBuffer *buf;
+  guint16 depth;
+  guint32 rate;
+  guint16 channels;
+  guint16 blockalign;
+  guint16 width;
+  guint32 av_bps;
+  guint32 fact;
+
+  /* real bps used or 0 when no bitrate is known */
+  guint32 bps;
+  gboolean vbr;
+
+  guint bytes_per_sample;
+  guint max_buf_size;
+
+  /* position in data part */
+  guint64      offset;
+  guint64      end_offset;
+  guint64      dataleft;
+  /* offset/length of data part */
+  guint64      datastart;
+  guint64      datasize;
+  /* duration in time */
+  guint64      duration;
+
+  /* pending seek */
+  GstEvent *seek_event;
+
+  /* For streaming */
+  GstAdapter *adapter;
+  gboolean got_fmt;
+  gboolean streaming;
+
+  /* configured segment, start/stop expressed in time or bytes */
+  GstSegment segment;
+
+  /* for late pad configuration */
+  gboolean first;
+  /* discont after seek */
+  gboolean discont;
+
+  gboolean ignore_length;
 };
 
 struct _GstWavParseClass {
@@ -91,50 +126,6 @@ struct _GstWavParseClass {
 
 GType gst_wavparse_get_type(void);
 
-typedef struct _GstWavParseFormat GstWavParseFormat;
-
-struct _GstWavParseFormat {
-  gint16 wFormatTag;
-  guint16 wChannels;
-  guint32 dwSamplesPerSec;
-  guint32 dwAvgBytesPerSec;
-  guint16 wBlockAlign;
-  guint16 wBitsPerSample;
-};
-
-/**** from public Microsoft RIFF docs ******/
-#define GST_RIFF_WAVE_FORMAT_UNKNOWN        (0x0000)
-#define GST_RIFF_WAVE_FORMAT_PCM            (0x0001)
-#define GST_RIFF_WAVE_FORMAT_ADPCM          (0x0002)
-#define GST_RIFF_WAVE_FORMAT_IBM_CVSD       (0x0005)
-#define GST_RIFF_WAVE_FORMAT_ALAW           (0x0006)
-#define GST_RIFF_WAVE_FORMAT_MULAW          (0x0007)
-#define GST_RIFF_WAVE_FORMAT_OKI_ADPCM      (0x0010)
-#define GST_RIFF_WAVE_FORMAT_DVI_ADPCM      (0x0011)
-#define GST_RIFF_WAVE_FORMAT_DIGISTD        (0x0015)
-#define GST_RIFF_WAVE_FORMAT_DIGIFIX        (0x0016)
-#define GST_RIFF_WAVE_FORMAT_YAMAHA_ADPCM   (0x0020)
-#define GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH (0x0022)
-#define GST_RIFF_WAVE_FORMAT_GSM610         (0x0031)
-#define GST_RIFF_WAVE_FORMAT_MSN            (0x0032)
-#define GST_RIFF_WAVE_FORMAT_MPEGL12        (0x0050)
-#define GST_RIFF_WAVE_FORMAT_MPEGL3         (0x0055)
-#define GST_RIFF_IBM_FORMAT_MULAW           (0x0101)
-#define GST_RIFF_IBM_FORMAT_ALAW            (0x0102)
-#define GST_RIFF_IBM_FORMAT_ADPCM           (0x0103)
-#define GST_RIFF_WAVE_FORMAT_DIVX_WMAV1     (0x0160)
-#define GST_RIFF_WAVE_FORMAT_DIVX_WMAV2     (0x0161)
-#define GST_RIFF_WAVE_FORMAT_WMAV9          (0x0162)
-#define GST_RIFF_WAVE_FORMAT_VORBIS1        (0x674f)
-#define GST_RIFF_WAVE_FORMAT_VORBIS2        (0x6750)
-#define GST_RIFF_WAVE_FORMAT_VORBIS3        (0x6751)
-#define GST_RIFF_WAVE_FORMAT_VORBIS1PLUS    (0x676f)
-#define GST_RIFF_WAVE_FORMAT_VORBIS2PLUS    (0x6770)
-#define GST_RIFF_WAVE_FORMAT_VORBIS3PLUS    (0x6771)
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
+G_END_DECLS
 
 #endif /* __GST_WAVPARSE_H__ */