summaryrefslogtreecommitdiffstats
path: root/gst/avi
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2002-01-13 22:27:25 +0000
committerWim Taymans <wim.taymans@gmail.com>2002-01-13 22:27:25 +0000
commit97454065ce4921877100d0f829d4638438424dfe (patch)
treeb7fba2905e195b55f136e65332777fb96fee3d65 /gst/avi
parent1ea946d2d26998d7056d233548d88b57322ffdcf (diff)
Bring the plugins in sync with the new core capsnego system.
Original commit message from CVS: Bring the plugins in sync with the new core capsnego system. Added some features, enhancements...
Diffstat (limited to 'gst/avi')
-rw-r--r--gst/avi/audiocodecs.c22
-rw-r--r--gst/avi/gstavidecoder.c4
-rw-r--r--gst/avi/gstavidemux.c32
-rw-r--r--gst/avi/gstavimux.c9
-rw-r--r--gst/avi/gstavitypes.c15
5 files changed, 42 insertions, 40 deletions
diff --git a/gst/avi/audiocodecs.c b/gst/avi/audiocodecs.c
index 9415055c..3414ab7f 100644
--- a/gst/avi/audiocodecs.c
+++ b/gst/avi/audiocodecs.c
@@ -50,19 +50,19 @@ GstPad *gst_avi_decoder_get_audio_srcpad(GstAviDecoder *avi_decoder, guint pad_n
switch (strf->format) {
case GST_RIFF_WAVE_FORMAT_PCM:
newpad = gst_pad_new("audio_00", GST_PAD_SRC);
- gst_pad_set_caps (newpad, gst_caps_new (
+ gst_pad_try_set_caps (newpad,
+ GST_CAPS_NEW (
"avidecoder_caps",
"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 ((gint)strf->size),
- "depth", GST_PROPS_INT ((gint)strf->size),
- "rate", GST_PROPS_INT ((gint)strf->rate),
- "channels", GST_PROPS_INT ((gint)strf->channels),
- NULL)));
+ "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 ((gint)strf->size),
+ "depth", GST_PROPS_INT ((gint)strf->size),
+ "rate", GST_PROPS_INT ((gint)strf->rate),
+ "channels", GST_PROPS_INT ((gint)strf->channels)
+ ));
avi_decoder->audio_pad[pad_nr] = newpad;
return newpad;
diff --git a/gst/avi/gstavidecoder.c b/gst/avi/gstavidecoder.c
index 85024139..b91473e6 100644
--- a/gst/avi/gstavidecoder.c
+++ b/gst/avi/gstavidecoder.c
@@ -245,10 +245,6 @@ gst_avi_decoder_new_pad (GstElement *element, GstPad *pad, GstAviDecoder *avi_de
}
if (!new_element && (media_type == AVI_TYPE_VIDEO)) {
- gst_pad_disconnect (pad, gst_element_get_pad (type, "sink"));
-
- new_element = gst_elementfactory_make ("windec", "decoder");
-
padname = "src";
}
else if (!new_element && (media_type == AVI_TYPE_AUDIO)) {
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 6c5888ed..1be29e1b 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -300,10 +300,10 @@ gst_avi_demux_strf_vids (GstAviDemux *avi_demux)
GST_PADTEMPLATE_GET (src_video_templ), g_strdup_printf ("video_%02d",
avi_demux->num_video_pads));
- gst_pad_set_caps (srcpad, gst_caps_new (
+ gst_pad_try_set_caps (srcpad,
+ GST_CAPS_NEW (
"avidec_video_src",
"video/avi",
- gst_props_new (
"format", GST_PROPS_STRING ("strf_vids"),
"size", GST_PROPS_INT (GUINT32_FROM_LE (strf->size)),
"width", GST_PROPS_INT (GUINT32_FROM_LE (strf->width)),
@@ -315,8 +315,8 @@ gst_avi_demux_strf_vids (GstAviDemux *avi_demux)
"xpels_meter", GST_PROPS_INT (GUINT32_FROM_LE (strf->xpels_meter)),
"ypels_meter", GST_PROPS_INT (GUINT32_FROM_LE (strf->ypels_meter)),
"num_colors", GST_PROPS_INT (GUINT32_FROM_LE (strf->num_colors)),
- "imp_colors", GST_PROPS_INT (GUINT32_FROM_LE (strf->imp_colors)),
- NULL)));
+ "imp_colors", GST_PROPS_INT (GUINT32_FROM_LE (strf->imp_colors))
+ ));
avi_demux->video_pad[avi_demux->num_video_pads++] = srcpad;
gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad);
@@ -343,18 +343,18 @@ gst_avi_demux_strf_auds (GstAviDemux *avi_demux)
GST_PADTEMPLATE_GET (src_audio_templ), g_strdup_printf ("audio_%02d",
avi_demux->num_audio_pads));
- gst_pad_set_caps (srcpad, gst_caps_new (
+ gst_pad_try_set_caps (srcpad,
+ GST_CAPS_NEW (
"avidec_audio_src",
"video/avi",
- gst_props_new (
"format", GST_PROPS_STRING ("strf_auds"),
"fmt", GST_PROPS_INT (GUINT16_FROM_LE (strf->format)),
"channels", GST_PROPS_INT (GUINT16_FROM_LE (strf->channels)),
"rate", GST_PROPS_INT (GUINT32_FROM_LE (strf->rate)),
"av_bps", GST_PROPS_INT (GUINT32_FROM_LE (strf->av_bps)),
"blockalign", GST_PROPS_INT (GUINT16_FROM_LE (strf->blockalign)),
- "size", GST_PROPS_INT (GUINT16_FROM_LE (strf->size)),
- NULL)));
+ "size", GST_PROPS_INT (GUINT16_FROM_LE (strf->size))
+ ));
avi_demux->audio_pad[avi_demux->num_audio_pads++] = srcpad;
gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad);
@@ -383,10 +383,10 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux)
GST_PADTEMPLATE_GET (src_video_templ), g_strdup_printf ("video_%02d",
avi_demux->num_video_pads));
- gst_pad_set_caps (srcpad, gst_caps_new (
+ gst_pad_try_set_caps (srcpad,
+ GST_CAPS_NEW (
"avidec_iav_src",
"video/avi",
- gst_props_new (
"format", GST_PROPS_STRING ("strf_iavs"),
"DVAAuxSrc", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVAAuxSrc)),
"DVAAuxCtl", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVAAuxCtl)),
@@ -395,8 +395,8 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux)
"DVVAuxSrc", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVVAuxSrc)),
"DVVAuxCtl", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVVAuxCtl)),
"DVReserved1", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVReserved1)),
- "DVReserved2", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVReserved2)),
- NULL)));
+ "DVReserved2", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVReserved2))
+ ));
avi_demux->video_pad[avi_demux->num_video_pads++] = srcpad;
gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad);
@@ -460,14 +460,14 @@ gst_avidemux_forall_pads (GstAviDemux *avi_demux, GFunc func, gpointer user_data
for(i=0; i<GST_AVI_DEMUX_MAX_AUDIO_PADS; i++) {
pad = avi_demux->audio_pad[i];
- if (pad && GST_PAD_CONNECTED (pad)) {
+ if (pad && GST_PAD_IS_CONNECTED (pad)) {
(*func) (pad, user_data);
}
}
for(i=0; i<GST_AVI_DEMUX_MAX_VIDEO_PADS; i++) {
pad = avi_demux->video_pad[i];
- if (pad && GST_PAD_CONNECTED (pad)) {
+ if (pad && GST_PAD_IS_CONNECTED (pad)) {
(*func) (pad, user_data);
}
}
@@ -595,7 +595,7 @@ gst_avidemux_process_chunk (GstAviDemux *avi_demux, guint64 filepos,
GST_DEBUG (0,"gst_avi_demux_chain: tag found %08x size %08x\n",
chunkid, *chunksize);
- if (GST_PAD_CONNECTED (avi_demux->video_pad[0])) {
+ if (GST_PAD_IS_CONNECTED (avi_demux->video_pad[0])) {
GstBuffer *buf;
if (*chunksize) {
@@ -626,7 +626,7 @@ gst_avidemux_process_chunk (GstAviDemux *avi_demux, guint64 filepos,
GST_DEBUG (0,"gst_avi_demux_chain: tag found %08x size %08x\n",
chunkid, *chunksize);
- if (GST_PAD_CONNECTED (avi_demux->audio_pad[0])) {
+ if (GST_PAD_IS_CONNECTED (avi_demux->audio_pad[0])) {
GstBuffer *buf;
if (*chunksize) {
diff --git a/gst/avi/gstavimux.c b/gst/avi/gstavimux.c
index c7e81019..540e2a7b 100644
--- a/gst/avi/gstavimux.c
+++ b/gst/avi/gstavimux.c
@@ -152,8 +152,8 @@ gst_avimux_init (GstAviMux *avimux)
avimux->aviheader = g_malloc0 (sizeof (gst_riff_avih));
}
-static void
-gst_avimux_newcaps (GstPad *pad, GstCaps *caps)
+static GstPadConnectReturn
+gst_avimux_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstAviMux *avimux;
const gchar* format = gst_caps_get_string (caps, "format");
@@ -161,7 +161,7 @@ gst_avimux_newcaps (GstPad *pad, GstCaps *caps)
avimux = GST_AVIMUX (gst_pad_get_parent (pad));
- GST_DEBUG (0, "avimux: newcaps triggered on %s (%d), %s\n", gst_pad_get_name (pad),
+ GST_DEBUG (0, "avimux: sinkconnect triggered on %s (%d), %s\n", gst_pad_get_name (pad),
padnum, format);
if (!strncmp (format, "strf_vids", 9)) {
@@ -184,6 +184,7 @@ gst_avimux_newcaps (GstPad *pad, GstCaps *caps)
else if (!strncmp (format, "strf_auds", 9)) {
}
+ return GST_PAD_CONNECT_OK;
}
static GstPad*
@@ -228,7 +229,7 @@ gst_avimux_request_new_pad (GstElement *element,
}
gst_pad_set_chain_function (newpad, gst_avimux_chain);
- gst_pad_set_newcaps_function (newpad, gst_avimux_newcaps);
+ gst_pad_set_connect_function (newpad, gst_avimux_sinkconnect);
gst_element_add_pad (element, newpad);
return newpad;
diff --git a/gst/avi/gstavitypes.c b/gst/avi/gstavitypes.c
index b43f2a0c..e0862130 100644
--- a/gst/avi/gstavitypes.c
+++ b/gst/avi/gstavitypes.c
@@ -170,8 +170,8 @@ gst_avi_types_class_init (GstAviTypesClass *klass)
gobject_class->get_property = gst_avi_types_get_property;
}
-static void
-gst_avi_types_newcaps (GstPad *pad, GstCaps *caps)
+static GstPadConnectReturn
+gst_avi_types_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstAviTypes *avi_types;
const gchar *format;
@@ -196,6 +196,9 @@ gst_avi_types_newcaps (GstPad *pad, GstCaps *caps)
"format", GST_PROPS_STRING ("NTSC"),
NULL));
default:
+ /* else we simply don't convert, and hope there is a native decoder
+ * available */
+ newcaps = caps;
break;
}
}
@@ -243,9 +246,11 @@ gst_avi_types_newcaps (GstPad *pad, GstCaps *caps)
}
if (newcaps) {
- gst_pad_set_caps (avi_types->srcpad, newcaps);
+ gst_pad_try_set_caps (avi_types->srcpad, newcaps);
avi_types->type_found = TRUE;
+ return GST_PAD_CONNECT_OK;
}
+ return GST_PAD_CONNECT_REFUSED;
}
static void
@@ -254,7 +259,7 @@ gst_avi_types_init (GstAviTypes *avi_types)
avi_types->sinkpad = gst_pad_new_from_template (
GST_PADTEMPLATE_GET (sink_templ), "sink");
gst_element_add_pad (GST_ELEMENT (avi_types), avi_types->sinkpad);
- gst_pad_set_newcaps_function (avi_types->sinkpad, gst_avi_types_newcaps);
+ gst_pad_set_connect_function (avi_types->sinkpad, gst_avi_types_sinkconnect);
gst_pad_set_chain_function (avi_types->sinkpad, gst_avi_types_chain);
avi_types->srcpad = gst_pad_new_from_template (
@@ -271,7 +276,7 @@ gst_avi_types_chain (GstPad *pad, GstBuffer *buffer)
avi_types = GST_AVI_TYPES (gst_pad_get_parent (pad));
- if (GST_PAD_CONNECTED (avi_types->srcpad))
+ if (GST_PAD_IS_CONNECTED (avi_types->srcpad))
gst_pad_push (avi_types->srcpad, buffer);
else
gst_buffer_unref (buffer);