summaryrefslogtreecommitdiffstats
path: root/ext/mikmod
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-07-06 20:49:52 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-07-06 20:49:52 +0000
commit292fec2a0bd1f221a46ad69c5100995d04c01057 (patch)
tree658db299e0e03b2454ff840730569d79539e67c4 /ext/mikmod
parenta8183e9a3fa87cf4247c7df16207f440ea4069c0 (diff)
New mimetypes gone into effect today - this commit changes all old mimetypes over to the new mimetypes spec as descri...
Original commit message from CVS: New mimetypes gone into effect today - this commit changes all old mimetypes over to the new mimetypes spec as described in the previous commit's document. Note: some plugins will break, some pipelines will break, expect HEAD to be broken or at least not 100% working for a few days, but don't forget to report bugs
Diffstat (limited to 'ext/mikmod')
-rw-r--r--ext/mikmod/gstmikmod.c164
1 files changed, 66 insertions, 98 deletions
diff --git a/ext/mikmod/gstmikmod.c b/ext/mikmod/gstmikmod.c
index 40bf3f81..6ef507c2 100644
--- a/ext/mikmod/gstmikmod.c
+++ b/ext/mikmod/gstmikmod.c
@@ -52,15 +52,12 @@ enum {
ARG_REVERB,
ARG_SNDFXVOLUME,
ARG_VOLUME,
- ARG_MIXFREQ,
ARG_INTERP,
ARG_REVERSE,
ARG_SURROUND,
- ARG_16BIT,
ARG_HQMIXER,
ARG_SOFT_MUSIC,
- ARG_SOFT_SNDFX,
- ARG_STEREO
+ ARG_SOFT_SNDFX
};
@@ -74,33 +71,11 @@ mikmod_src_factory (void)
"src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- gst_caps_new ( /* use16bit = TRUE */
- "mikmod_src",
- "audio/raw",
- gst_props_new (
- "format", GST_PROPS_STRING ("int"),
- "law", GST_PROPS_INT (0),
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),
- "signed", GST_PROPS_BOOLEAN (TRUE),
- "width", GST_PROPS_INT (16),
- "depth", GST_PROPS_INT (16),
- "rate", GST_PROPS_INT_RANGE (8000, 48000),
- "channels", GST_PROPS_INT_RANGE (1, 2),
- NULL)),
- gst_caps_new ( /* use16bit = FALSE */
+ gst_caps_new (
"mikmod_src",
- "audio/raw",
- gst_props_new (
- "format", GST_PROPS_STRING ("int"),
- "law", GST_PROPS_INT (0),
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),
- "signed", GST_PROPS_BOOLEAN (FALSE),
- "width", GST_PROPS_INT (8),
- "depth", GST_PROPS_INT (8),
- "rate", GST_PROPS_INT_RANGE (8000, 48000),
- "channels", GST_PROPS_INT_RANGE (1, 2),
- NULL)),
- NULL);
+ "audio/x-raw-int",
+ GST_AUDIO_INT_PAD_TEMPLATE_PROPS
+ ), NULL);
}
return template;
}
@@ -118,7 +93,7 @@ mikmod_sink_factory (void)
GST_PAD_ALWAYS,
gst_caps_new (
"mikmod_sink",
- "audio/mod",
+ "audio/x-mod",
NULL),NULL
);
}
@@ -130,6 +105,7 @@ static void gst_mikmod_class_init (GstMikModClass *klass);
static void gst_mikmod_init (GstMikMod *filter);
static void gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamSpec *pspec );
static void gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *pspec );
+static GstPadLinkReturn gst_mikmod_srclink (GstPad *pad, GstCaps *caps);
static void gst_mikmod_loop (GstElement *element);
static gboolean gst_mikmod_setup (GstMikMod *mikmod);
static GstElementStateReturn gst_mikmod_change_state (GstElement *element);
@@ -138,25 +114,6 @@ static GstElementStateReturn gst_mikmod_change_state (GstElement *element);
static GstElementClass *parent_class = NULL;
-#define GST_TYPE_MIKMOD_MIXFREQ (gst_mikmod_mixfreq_get_type())
-
-static GType
-gst_mikmod_mixfreq_get_type (void)
-{
- static GType mikmod_mixfreq_type = 0;
- static GEnumValue mikmod_mixfreq[] = {
- { 0, "8000", "8000 Hz" },
- { 1, "11025", "11025 Hz" },
- { 2, "22100", "22100 Hz" },
- { 3, "44100", "44100 Hz" },
- { 0, NULL, NULL },
- };
- if (! mikmod_mixfreq_type ) {
- mikmod_mixfreq_type = g_enum_register_static ("GstMikmodmixfreq", mikmod_mixfreq);
- }
- return mikmod_mixfreq_type;
-}
-
GType
gst_mikmod_get_type(void) {
static GType mikmod_type = 0;
@@ -211,9 +168,7 @@ gst_mikmod_class_init (GstMikModClass *klass)
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VOLUME,
g_param_spec_int("volume", "volume", "volume",
0, 128, 96, G_PARAM_READWRITE ));
- g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MIXFREQ,
- g_param_spec_enum("mixfreq", "mixfreq", "mixfreq",
- GST_TYPE_MIKMOD_MIXFREQ, 3,G_PARAM_READWRITE ));
+
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_INTERP,
g_param_spec_boolean("interp", "interp", "interp",
FALSE, G_PARAM_READWRITE ));
@@ -223,9 +178,6 @@ gst_mikmod_class_init (GstMikModClass *klass)
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SURROUND,
g_param_spec_boolean("surround", "surround", "surround",
TRUE, G_PARAM_READWRITE ));
- g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_16BIT,
- g_param_spec_boolean("use16bit", "use16bit", "use16bit",
- TRUE, G_PARAM_READWRITE ));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HQMIXER,
g_param_spec_boolean("hqmixer", "hqmixer", "hqmixer",
FALSE, G_PARAM_READWRITE ));
@@ -235,9 +187,6 @@ gst_mikmod_class_init (GstMikModClass *klass)
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SOFT_SNDFX,
g_param_spec_boolean("soft_sndfx", "soft_sndfx", "soft_sndfx",
TRUE, G_PARAM_READWRITE ));
- g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_STEREO,
- g_param_spec_boolean("stereo", "stereo", "stereo",
- TRUE, G_PARAM_READWRITE ));
gobject_class->set_property = gst_mikmod_set_property;
@@ -255,6 +204,7 @@ gst_mikmod_init (GstMikMod *filter)
gst_element_add_pad(GST_ELEMENT(filter),filter->sinkpad);
gst_element_add_pad(GST_ELEMENT(filter),filter->srcpad);
+ gst_pad_set_link_function (filter->srcpad, gst_mikmod_srclink);
gst_element_set_loop_function (GST_ELEMENT (filter), gst_mikmod_loop);
@@ -276,12 +226,62 @@ gst_mikmod_init (GstMikMod *filter)
}
+static GstPadLinkReturn
+gst_mikmod_negotiate (GstMikMod *mikmod)
+{
+ gint width, sign;
+
+ if ( mikmod->_16bit ) {
+ width = 16;
+ sign = TRUE;
+ } else {
+ width = 8;
+ sign = FALSE;
+ }
+
+ return gst_pad_try_set_caps (mikmod->srcpad,
+ GST_CAPS_NEW (
+ "mikmod_src",
+ "audio/x-raw-int",
+ "endianness", GST_PROPS_INT (G_BYTE_ORDER),
+ "signed", GST_PROPS_BOOLEAN (sign),
+ "width", GST_PROPS_INT (width),
+ "depth", GST_PROPS_INT (width),
+ "rate", GST_PROPS_INT (mikmod->mixfreq),
+ "channels", GST_PROPS_INT (mikmod->stereo ? 2 : 1)));
+}
+
+
+static GstPadLinkReturn
+gst_mikmod_srclink (GstPad *pad, GstCaps *caps)
+{
+ GstMikMod *filter;
+
+ filter = GST_MIKMOD (gst_pad_get_parent (pad));
+
+ if (gst_caps_has_property_typed (caps, "depth", GST_PROPS_INT_TYPE)) {
+ gint depth;
+ gst_caps_get_int (caps, "depth", &depth);
+ filter->_16bit = (depth == 16);
+ }
+ if (gst_caps_has_property_typed (caps, "channels", GST_PROPS_INT_TYPE)) {
+ gint channels;
+ gst_caps_get_int (caps, "channels", &channels);
+ filter->stereo = (channels == 2);
+ }
+ if (gst_caps_has_property_typed (caps, "rate", GST_PROPS_INT_TYPE)) {
+ gst_caps_get_int (caps, "rate", &filter->mixfreq);
+ }
+
+ return gst_mikmod_negotiate(filter);
+}
+
+
static void
gst_mikmod_loop (GstElement *element)
{
GstMikMod *mikmod;
GstBuffer *buffer_in;
- gint width, sign;
g_return_if_fail (element != NULL);
g_return_if_fail (GST_IS_MIKMOD (element));
@@ -308,14 +308,13 @@ gst_mikmod_loop (GstElement *element)
}
}
- if ( mikmod->_16bit ) {
- width = 16;
- sign = TRUE;
- } else {
- width = 8;
- sign = FALSE;
+ if (!GST_PAD_CAPS (mikmod->srcpad)) {
+ if (gst_mikmod_negotiate (mikmod) <= 0) {
+ gst_element_error (GST_ELEMENT (mikmod),
+ "Failed to negotiate with next element in mikmod");
+ return;
+ }
}
-
gst_mikmod_setup( mikmod );
MikMod_RegisterDriver(&drv_gst);
@@ -330,19 +329,6 @@ gst_mikmod_loop (GstElement *element)
if ( ! Player_Active() )
Player_Start(module);
- gst_pad_try_set_caps (mikmod->srcpad,
- GST_CAPS_NEW (
- "mikmod_src",
- "audio/raw",
- "format", GST_PROPS_STRING ("int"),
- "law", GST_PROPS_INT (0),
- "endianness", GST_PROPS_INT (G_BYTE_ORDER),
- "signed", GST_PROPS_BOOLEAN (sign),
- "width", GST_PROPS_INT (width),
- "depth", GST_PROPS_INT (width),
- "rate", GST_PROPS_INT (mikmod->mixfreq),
- "channels", GST_PROPS_INT (2)));
-
do {
if ( Player_Active() ) {
@@ -482,9 +468,6 @@ gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamS
case ARG_VOLUME:
filter->volume = g_value_get_int (value);
break;
- case ARG_MIXFREQ:
- filter->mixfreq = g_value_get_enum (value);
- break;
case ARG_INTERP:
filter->interp = g_value_get_boolean (value);
break;
@@ -494,9 +477,6 @@ gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamS
case ARG_SURROUND:
filter->surround = g_value_get_boolean (value);
break;
- case ARG_16BIT:
- filter->_16bit = g_value_get_boolean (value);
- break;
case ARG_HQMIXER:
filter->hqmixer = g_value_get_boolean (value);
break;
@@ -506,9 +486,6 @@ gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamS
case ARG_SOFT_SNDFX:
filter->soft_sndfx = g_value_get_boolean (value);
break;
- case ARG_STEREO:
- filter->stereo = g_value_get_boolean (value);
- break;
default:
break;
}
@@ -539,9 +516,6 @@ gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *p
case ARG_VOLUME:
g_value_set_int (value, filter->volume);
break;
- case ARG_MIXFREQ:
- g_value_set_enum (value, filter->mixfreq);
- break;
case ARG_INTERP:
g_value_set_boolean (value, filter->interp);
break;
@@ -551,9 +525,6 @@ gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *p
case ARG_SURROUND:
g_value_set_boolean (value, filter->surround);
break;
- case ARG_16BIT:
- g_value_set_boolean (value, filter->_16bit);
- break;
case ARG_HQMIXER:
g_value_set_boolean (value, filter->hqmixer);
break;
@@ -563,9 +534,6 @@ gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *p
case ARG_SOFT_SNDFX:
g_value_set_boolean (value, filter->soft_sndfx);
break;
- case ARG_STEREO:
- g_value_set_boolean (value, filter->stereo);
- break;
default:
break;
}