summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gst-libs/gst/audio/audio.h152
-rw-r--r--gst/filter/gstfilter.c12
-rw-r--r--gst/mixmatrix/mixmatrix.c6
-rw-r--r--gst/passthrough/gstpassthrough.c48
-rw-r--r--gst/passthrough/gstpassthrough.h22
-rw-r--r--gst/qtdemux/qtdemux.c8
-rw-r--r--gst/speed/gstspeed.c28
-rw-r--r--gst/speed/gstspeed.h26
8 files changed, 144 insertions, 158 deletions
diff --git a/gst-libs/gst/audio/audio.h b/gst-libs/gst/audio/audio.h
index a737e468..c22052f5 100644
--- a/gst-libs/gst/audio/audio.h
+++ b/gst-libs/gst/audio/audio.h
@@ -22,78 +22,97 @@
#include <gst/audio/audioclock.h>
+G_BEGIN_DECLS
+
/* For people that are looking at this source: the purpose of these defines is
* to make GstCaps a bit easier, in that you don't have to know all of the
* properties that need to be defined. you can just use these macros. currently
* (8/01) the only plugins that use these are the passthrough, speed, volume,
- * adder, and [de]interleave plugins.
- * These are for convenience only, and do not specify the 'limits' of
- * GStreamer. you might also use these definitions as a
+ * adder, and [de]interleave plugins. These are for convenience only, and do not
+ * specify the 'limits' of GStreamer. you might also use these definitions as a
* base for making your own caps, if need be.
*
- * For example, to make a source pad that can output mono streams of either
- * float or int:
-
- template = gst_pad_template_new
- ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- gst_caps_append(gst_caps_new ("sink_int", "audio/raw",
- GST_AUDIO_INT_PAD_TEMPLATE_PROPS),
- gst_caps_new ("sink_float", "audio/raw",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS)),
- NULL);
-
- srcpad = gst_pad_new_from_template(template,"src");
-
- * Andy Wingo, 18 August 2001
+ * For example, to make a source pad that can output streams of either mono
+ * float or any channel int:
+ *
+ * template = gst_pad_template_new
+ * ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+ * gst_caps_append(gst_caps_new ("sink_int", "audio/x-raw-int",
+ * GST_AUDIO_INT_PAD_TEMPLATE_PROPS),
+ * gst_caps_new ("sink_float", "audio/x-raw-float",
+ * GST_AUDIO_FLOAT_PAD_TEMPLATE_PROPS)),
+ * NULL);
+ *
+ * sinkpad = gst_pad_new_from_template(template, "sink");
+ *
+ * Andy Wingo, 18 August 2001
* Thomas, 6 September 2002 */
-/* a few useful defines for arbitrary limits */
-#define GST_AUDIO_MIN_RATE 4000
-#define GST_AUDIO_MAX_RATE 96000
-#define GST_AUDIO_DEF_RATE 44100
+#define GST_AUDIO_DEF_RATE 44100
#define GST_AUDIO_INT_PAD_TEMPLATE_PROPS \
- gst_props_new (\
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),\
- "signed", GST_PROPS_LIST (\
- GST_PROPS_BOOLEAN (TRUE),\
- GST_PROPS_BOOLEAN (FALSE)\
- ),\
- "width", GST_PROPS_LIST (GST_PROPS_INT (8), \
- GST_PROPS_INT (16)), \
- "depth", GST_PROPS_LIST (GST_PROPS_INT (8), \
- GST_PROPS_INT (16)),\
- "rate", GST_PROPS_INT_RANGE (GST_AUDIO_MIN_RATE, \
- GST_AUDIO_MAX_RATE),\
- "channels", GST_PROPS_INT_RANGE (1, G_MAXINT),\
- NULL)
+ gst_props_new (\
+ "rate", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "channels", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "endianness", GST_PROPS_LIST (\
+ GST_PROPS_INT (G_LITTLE_ENDIAN),\
+ GST_PROPS_INT (G_BIG_ENDIAN)\
+ ),\
+ "width", GST_PROPS_LIST (\
+ GST_PROPS_INT (8),\
+ GST_PROPS_INT (16),\
+ GST_PROPS_INT (32)\
+ ),\
+ "depth", GST_PROPS_INT_RANGE (1, 32),\
+ "signed", GST_PROPS_LIST (\
+ GST_PROPS_BOOLEAN (TRUE),\
+ GST_PROPS_BOOLEAN (FALSE)\
+ ),\
+ NULL)
#define GST_AUDIO_INT_MONO_PAD_TEMPLATE_PROPS \
- gst_props_new (\
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),\
- "signed", GST_PROPS_LIST (\
- GST_PROPS_BOOLEAN (TRUE),\
- GST_PROPS_BOOLEAN (FALSE)\
- ),\
- "width", GST_PROPS_LIST (GST_PROPS_INT (8), \
- GST_PROPS_INT (16)),\
- "depth", GST_PROPS_LIST (GST_PROPS_INT (8), \
- GST_PROPS_INT (16)),\
- "rate", GST_PROPS_INT_RANGE (GST_AUDIO_MIN_RATE, \
- GST_AUDIO_MAX_RATE),\
- "channels", GST_PROPS_INT (1),\
- NULL)
-
-#define GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS \
- gst_props_new (\
- "depth", GST_PROPS_INT (32),\
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),\
- "intercept", GST_PROPS_FLOAT (0.0),\
- "slope", GST_PROPS_FLOAT (1.0),\
- "rate", GST_PROPS_INT_RANGE (GST_AUDIO_MIN_RATE, \
- GST_AUDIO_MAX_RATE),\
- "channels", GST_PROPS_INT (1),\
- NULL)
+ gst_props_new (\
+ "rate", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "channels", GST_PROPS_INT (1),\
+ "endianness", GST_PROPS_LIST (\
+ GST_PROPS_INT (G_LITTLE_ENDIAN),\
+ GST_PROPS_INT (G_BIG_ENDIAN)\
+ ),\
+ "width", GST_PROPS_LIST (\
+ GST_PROPS_INT (8),\
+ GST_PROPS_INT (16),\
+ GST_PROPS_INT (32)\
+ ),\
+ "depth", GST_PROPS_INT_RANGE (1, 32),\
+ "signed", GST_PROPS_LIST (\
+ GST_PROPS_BOOLEAN (TRUE),\
+ GST_PROPS_BOOLEAN (FALSE)\
+ ),\
+ NULL)
+
+#define GST_AUDIO_FLOAT_PAD_TEMPLATE_PROPS \
+ gst_props_new (\
+ "rate", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "channels", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "endianness", GST_PROPS_LIST (\
+ GST_PROPS_INT (G_LITTLE_ENDIAN),\
+ GST_PROPS_INT (G_BIG_ENDIAN)\
+ ),\
+ "width", GST_PROPS_LIST (\
+ GST_PROPS_INT (32),\
+ GST_PROPS_INT (64)\
+ ),\
+ "buffer-frames", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ NULL)
+
+#define GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS \
+ gst_props_new (\
+ "rate", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ "channels", GST_PROPS_INT (1),\
+ "endianness", GST_PROPS_INT (G_BYTE_ORDER),\
+ "width", GST_PROPS_INT (32),\
+ "buffer-frames", GST_PROPS_INT_RANGE (1, G_MAXINT),\
+ NULL)
/*
* this library defines and implements some helper functions for audio
@@ -101,21 +120,22 @@
*/
/* get byte size of audio frame (based on caps of pad */
-int gst_audio_frame_byte_size (GstPad* pad);
+int gst_audio_frame_byte_size (GstPad* pad);
/* get length in frames of buffer */
-long gst_audio_frame_length (GstPad* pad, GstBuffer* buf);
+long gst_audio_frame_length (GstPad* pad, GstBuffer* buf);
/* get frame rate based on caps */
-long gst_audio_frame_rate (GstPad *pad);
+long gst_audio_frame_rate (GstPad *pad);
/* calculate length in seconds of audio buffer buf based on caps of pad */
-double gst_audio_length (GstPad* pad, GstBuffer* buf);
+double gst_audio_length (GstPad* pad, GstBuffer* buf);
/* calculate highest possible sample value based on capabilities of pad */
-long gst_audio_highest_sample_value (GstPad* pad);
+long gst_audio_highest_sample_value (GstPad* pad);
/* check if the buffer size is a whole multiple of the frame size */
-gboolean gst_audio_is_buffer_framed (GstPad* pad, GstBuffer* buf);
+gboolean gst_audio_is_buffer_framed (GstPad* pad, GstBuffer* buf);
+G_END_DECLS
diff --git a/gst/filter/gstfilter.c b/gst/filter/gstfilter.c
index f031bb6e..c5e6ccba 100644
--- a/gst/filter/gstfilter.c
+++ b/gst/filter/gstfilter.c
@@ -38,38 +38,38 @@ static struct _elements_entry _elements[] = {
{ NULL, 0 },
};
-GstPadTemplate*
+GstPadTemplate*
gst_filter_src_factory (void)
{
static GstPadTemplate *templ = NULL;
if (!templ) {
- templ = GST_PAD_TEMPLATE_NEW (
+ templ = GST_PAD_TEMPLATE_NEW (
"src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
gst_caps_new (
"filter_src",
"audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS
)
);
}
return templ;
}
-GstPadTemplate*
+GstPadTemplate*
gst_filter_sink_factory (void)
{
static GstPadTemplate *templ = NULL;
if (!templ) {
- templ = GST_PAD_TEMPLATE_NEW (
+ templ = GST_PAD_TEMPLATE_NEW (
"sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
gst_caps_new (
"filter_src",
"audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS
)
);
}
diff --git a/gst/mixmatrix/mixmatrix.c b/gst/mixmatrix/mixmatrix.c
index bd16c3c5..822d1429 100644
--- a/gst/mixmatrix/mixmatrix.c
+++ b/gst/mixmatrix/mixmatrix.c
@@ -49,7 +49,7 @@ struct _GstMixMatrixClass {
/* elementfactory information */
static GstElementDetails mixmatrix_details = {
"Mixing Matrix",
- "Filter/Audio/Mixing",
+ "Filter/Audio",
"LGPL",
"Mix N audio channels together into M channels",
VERSION,
@@ -79,7 +79,7 @@ GST_PAD_TEMPLATE_FACTORY (mixmatrix_sink_factory,
gst_caps_new (
"float_src",
"audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS
)
);
@@ -90,7 +90,7 @@ GST_PAD_TEMPLATE_FACTORY (mixmatrix_src_factory,
gst_caps_new (
"float_sink",
"audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS
)
);
diff --git a/gst/passthrough/gstpassthrough.c b/gst/passthrough/gstpassthrough.c
index fca1e941..eb3e8cbb 100644
--- a/gst/passthrough/gstpassthrough.c
+++ b/gst/passthrough/gstpassthrough.c
@@ -53,21 +53,21 @@ enum {
ARG_SILENT
};
-static GstPadTemplate*
-passthrough_sink_factory (void)
-{
- static GstPadTemplate *template = NULL;
-
- if (! template) {
- template = gst_pad_template_new
+static GstPadTemplate*
+passthrough_sink_factory (void)
+{
+ static GstPadTemplate *template = NULL;
+
+ if (! template) {
+ template = gst_pad_template_new
("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
gst_caps_append (gst_caps_new ("sink_int", "audio/x-raw-int",
GST_AUDIO_INT_PAD_TEMPLATE_PROPS),
gst_caps_new ("sink_float", "audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS)),
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS)),
NULL);
- }
- return template;
+ }
+ return template;
}
static GstPadTemplate*
@@ -79,7 +79,7 @@ passthrough_src_factory (void)
template = gst_pad_template_new
("src", GST_PAD_SRC, GST_PAD_ALWAYS,
gst_caps_append (gst_caps_new ("src_float", "audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS),
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS),
gst_caps_new ("src_int", "audio/x-raw-float",
GST_AUDIO_INT_PAD_TEMPLATE_PROPS)),
NULL);
@@ -126,35 +126,29 @@ passthrough_connect_sink (GstPad *pad, GstCaps *caps)
g_return_val_if_fail (GST_IS_PASSTHROUGH (filter), GST_PAD_LINK_REFUSED);
mimetype = gst_caps_get_mime(caps);
-
+
gst_caps_get_int (caps, "rate", &filter->rate);
gst_caps_get_int (caps, "channels", &filter->channels);
-
+ gst_caps_get_int (caps, "width", &filter->width);
+ gst_caps_get_int (caps, "endianness", &filter->endianness);
+
if (strcmp (mimetype, "audio/x-raw-int") == 0) {
- filter->format = GST_PASSTHROUGH_FORMAT_INT;
- gst_caps_get_int (caps, "width", &filter->width);
+ filter->format = GST_PASSTHROUGH_FORMAT_INT;
+
gst_caps_get_int (caps, "depth", &filter->depth);
- gst_caps_get_int (caps, "law", &filter->law);
- gst_caps_get_int (caps, "endianness", &filter->endianness);
gst_caps_get_boolean (caps, "signed", &filter->is_signed);
if (! filter->silent) {
- g_print ("Passthrough : channels %d, rate %d\n",
- filter->channels, filter->rate);
+ g_print ("Passthrough : channels %d, rate %d\n", filter->channels, filter->rate);
g_print ("Passthrough : format int, bit width %d, endianness %d, signed %s\n",
filter->width, filter->endianness, filter->is_signed ? "yes" : "no");
}
} else if (strcmp (mimetype, "audio/x-raw-float") == 0) {
- filter->format = GST_PASSTHROUGH_FORMAT_FLOAT;
- gst_caps_get_string (caps, "layout", &filter->layout);
- gst_caps_get_float (caps, "intercept", &filter->intercept);
- gst_caps_get_float (caps, "slope", &filter->slope);
+ filter->format = GST_PASSTHROUGH_FORMAT_FLOAT;
if (! filter->silent) {
- g_print ("Passthrough : channels %d, rate %d\n",
- filter->channels, filter->rate);
- g_print ("Passthrough : format float, layout %s, intercept %f, slope %f\n",
- filter->layout, filter->intercept, filter->slope);
+ g_print ("Passthrough : channels %d, rate %d\n", filter->channels, filter->rate);
+ g_print ("Passthrough : format float, width %d\n", filter->width);
}
}
diff --git a/gst/passthrough/gstpassthrough.h b/gst/passthrough/gstpassthrough.h
index 74c4cf68..bcd09f9a 100644
--- a/gst/passthrough/gstpassthrough.h
+++ b/gst/passthrough/gstpassthrough.h
@@ -59,26 +59,18 @@ struct _GstPassthrough {
GstBufferPool *bufpool;
gboolean silent;
-
- /* the next three are valid for both int and float */
-
+
+ /* the next are valid for both int and float */
GstPassthroughFormat format;
- guint rate;
+ guint rate;
guint channels;
-
- /* the next five are valid only for format==GST_PASSTHROUGH_FORMAT_INT */
-
guint width;
- guint depth;
guint endianness;
- guint law;
+
+ /* the next are valid only for format==GST_PASSTHROUGH_FORMAT_INT */
+ guint depth;
gboolean is_signed;
-
- /* the next three are valid only for format==GST_PASSTHROUGH_FORMAT_FLOAT */
-
- const gchar *layout;
- gfloat slope;
- gfloat intercept;
+
};
struct _GstPassthroughClass {
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 4852db93..3358db33 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -1673,18 +1673,14 @@ static GstCaps *qtdemux_audio_caps(GstQTDemux *qtdemux, guint32 fourcc)
"channels",GST_PROPS_INT_RANGE(1,G_MAXINT));
case GST_MAKE_FOURCC('f','l','6','4'):
return GST_CAPS_NEW("fl64_caps","audio/x-raw-float",
- "depth",GST_PROPS_INT (64),
+ "width",GST_PROPS_INT (64),
"endianness",GST_PROPS_INT (G_BIG_ENDIAN),
- "intercept",GST_PROPS_FLOAT (0.0),
- "slope",GST_PROPS_FLOAT (1.0),
"rate",GST_PROPS_INT_RANGE(1,G_MAXINT),
"channels",GST_PROPS_INT_RANGE(1,G_MAXINT));
case GST_MAKE_FOURCC('f','l','3','2'):
return GST_CAPS_NEW("fl32_caps","audio/x-raw-float",
- "depth",GST_PROPS_INT (32),
+ "width",GST_PROPS_INT (32),
"endianness",GST_PROPS_INT (G_BIG_ENDIAN),
- "intercept",GST_PROPS_FLOAT (0.0),
- "slope",GST_PROPS_FLOAT (1.0),
"rate",GST_PROPS_INT_RANGE(1,G_MAXINT),
"channels",GST_PROPS_INT_RANGE(1,G_MAXINT));
case GST_MAKE_FOURCC('i','n','2','4'):
diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c
index de91f3ca..07dad78c 100644
--- a/gst/speed/gstspeed.c
+++ b/gst/speed/gstspeed.c
@@ -68,7 +68,7 @@ speed_sink_factory (void)
gst_caps_append(gst_caps_new ("sink_int", "audio/x-raw-int",
GST_AUDIO_INT_MONO_PAD_TEMPLATE_PROPS),
gst_caps_new ("sink_float", "audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS)),
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS)),
NULL);
}
return template;
@@ -83,7 +83,7 @@ speed_src_factory (void)
template = gst_pad_template_new
("src", GST_PAD_SRC, GST_PAD_ALWAYS,
gst_caps_append (gst_caps_new ("src_float", "audio/x-raw-float",
- GST_AUDIO_FLOAT_MONO_PAD_TEMPLATE_PROPS),
+ GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_PROPS),
gst_caps_new ("src_int", "audio/x-raw-int",
GST_AUDIO_INT_MONO_PAD_TEMPLATE_PROPS)),
NULL);
@@ -142,36 +142,32 @@ speed_parse_caps (GstSpeed *filter, GstCaps *caps)
g_return_val_if_fail(filter!=NULL,-1);
g_return_val_if_fail(caps!=NULL,-1);
-
+
mimetype = gst_caps_get_mime (caps);
-
+
gst_caps_get_int (caps, "rate", &filter->rate);
gst_caps_get_int (caps, "channels", &filter->channels);
-
+ gst_caps_get_int (caps, "width", &filter->width);
+ gst_caps_get_int (caps, "endianness", &filter->endianness);
+
if (strcmp(mimetype, "audio/x-raw-int")==0) {
- filter->format = GST_SPEED_FORMAT_INT;
- gst_caps_get_int (caps, "width", &filter->width);
+ filter->format = GST_SPEED_FORMAT_INT;
gst_caps_get_int (caps, "depth", &filter->depth);
- gst_caps_get_int (caps, "law", &filter->law);
- gst_caps_get_int (caps, "endianness", &filter->endianness);
gst_caps_get_boolean (caps, "signed", &filter->is_signed);
if (!filter->silent) {
- g_print ("Speed : channels %d, rate %d\n",
+ g_print ("Speed : channels %d, rate %d\n",
filter->channels, filter->rate);
g_print ("Speed : format int, bit width %d, endianness %d, signed %s\n",
filter->width, filter->endianness, filter->is_signed ? "yes" : "no");
}
} else if (strcmp(mimetype, "audio/x-raw-float")==0) {
- filter->format = GST_SPEED_FORMAT_FLOAT;
- gst_caps_get_float (caps, "intercept", &filter->intercept);
- gst_caps_get_float (caps, "slope", &filter->slope);
+ filter->format = GST_SPEED_FORMAT_FLOAT;
if (!filter->silent) {
- g_print ("Speed : channels %d, rate %d\n",
+ g_print ("Speed : channels %d, rate %d\n",
filter->channels, filter->rate);
- g_print ("Speed : format float, intercept %f, slope %f\n",
- filter->intercept, filter->slope);
+ g_print ("Speed : format float, width %d\n", filter->width);
}
} else {
return FALSE;
diff --git a/gst/speed/gstspeed.h b/gst/speed/gstspeed.h
index 73fc783e..d56c0756 100644
--- a/gst/speed/gstspeed.h
+++ b/gst/speed/gstspeed.h
@@ -58,35 +58,23 @@ struct _GstSpeed {
GstPad *sinkpad, *srcpad;
GstBufferPool *sinkpool, *srcpool;
-
+
gboolean silent;
-
gfloat speed;
-
- /* the next three are valid for both int and float */
-
+
+ /* the next are valid for both int and float */
GstSpeedFormat format;
-
guint rate;
-
guint channels;
-
- /* the next five are valid only for format==GST_SPEED_FORMAT_INT */
-
guint width;
-
- guint depth;
-
guint endianness;
-
- guint law;
-
+
+ /* the next are valid only for format==GST_SPEED_FORMAT_INT */
+ guint depth;
gboolean is_signed;
-
+
/* the next three are valid only for format==GST_SPEED_FORMAT_FLOAT */
-
gfloat slope;
-
gfloat intercept;
};