wildmidi: set caps on pad

Set the caps on the pad and use those caps instead of keeping a separate caps
pointer around.
Fix some whitespace.
This commit is contained in:
Wim Taymans 2009-08-31 17:33:32 +02:00
parent 4ef773164a
commit 25caf9f743
2 changed files with 31 additions and 28 deletions

View file

@ -652,6 +652,7 @@ gst_wildmidi_loop (GstPad * sinkpad)
GstWildmidi *wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad)); GstWildmidi *wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad));
GstBuffer *out; GstBuffer *out;
GstFlowReturn ret; GstFlowReturn ret;
GstCaps *outcaps;
if (wildmidi->mididata_size == 0) { if (wildmidi->mididata_size == 0) {
if (!gst_wildmidi_get_upstream_size (wildmidi, &wildmidi->mididata_size)) { if (!gst_wildmidi_get_upstream_size (wildmidi, &wildmidi->mididata_size)) {
@ -724,6 +725,10 @@ gst_wildmidi_loop (GstPad * sinkpad)
info = WildMidi_GetInfo (wildmidi->song); info = WildMidi_GetInfo (wildmidi->song);
wildmidi->o_len = info->approx_total_samples; wildmidi->o_len = info->approx_total_samples;
outcaps = gst_caps_copy (gst_pad_get_pad_template_caps (wildmidi->srcpad));
gst_pad_set_caps (wildmidi->srcpad, outcaps);
gst_caps_unref (outcaps);
gst_segment_set_newsegment (wildmidi->o_segment, FALSE, 1.0, gst_segment_set_newsegment (wildmidi->o_segment, FALSE, 1.0,
GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0); GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0);
@ -787,7 +792,7 @@ gst_wildmidi_loop (GstPad * sinkpad)
wildmidi->o_seek = FALSE; wildmidi->o_seek = FALSE;
} }
gst_buffer_set_caps (out, wildmidi->out_caps); gst_buffer_set_caps (out, GST_PAD_CAPS (wildmidi->srcpad));
ret = gst_pad_push (wildmidi->srcpad, out); ret = gst_pad_push (wildmidi->srcpad, out);
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED)
@ -819,8 +824,6 @@ gst_wildmidi_change_state (GstElement * element, GstStateChange transition)
switch (transition) { switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY: case GST_STATE_CHANGE_NULL_TO_READY:
wildmidi->out_caps =
gst_caps_copy (gst_pad_get_pad_template_caps (wildmidi->srcpad));
wildmidi->mididata = NULL; wildmidi->mididata = NULL;
break; break;
case GST_STATE_CHANGE_READY_TO_PAUSED: case GST_STATE_CHANGE_READY_TO_PAUSED:
@ -846,7 +849,6 @@ gst_wildmidi_change_state (GstElement * element, GstStateChange transition)
wildmidi->mididata = NULL; wildmidi->mididata = NULL;
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
gst_caps_unref (wildmidi->out_caps);
break; break;
default: default:
break; break;

View file

@ -1,6 +1,6 @@
/* /*
* gstwildmidi - wildmidi plugin for gstreamer * gstwildmidi - wildmidi plugin for gstreamer
* *
* Copyright 2007 Wouter Paesen <wouter@blue-gate.be> * Copyright 2007 Wouter Paesen <wouter@blue-gate.be>
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -19,8 +19,8 @@
* Boston, MA 02111-1307, USA. * Boston, MA 02111-1307, USA.
* *
* Wrapper element for libtimidity. This element works in pull * Wrapper element for libtimidity. This element works in pull
* based mode because that's essentially how libwildmidi works. * based mode because that's essentially how libwildmidi works.
* We create a libwildmidi stream that operates on the srcpad. * We create a libwildmidi stream that operates on the srcpad.
* The sinkpad is in pull mode. * The sinkpad is in pull mode.
*/ */
@ -32,6 +32,7 @@
#include <wildmidi_lib.h> #include <wildmidi_lib.h>
G_BEGIN_DECLS G_BEGIN_DECLS
#define GST_TYPE_WILDMIDI \ #define GST_TYPE_WILDMIDI \
(gst_wildmidi_get_type()) (gst_wildmidi_get_type())
#define GST_WILDMIDI(obj) \ #define GST_WILDMIDI(obj) \
@ -42,39 +43,38 @@ G_BEGIN_DECLS
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WILDMIDI)) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WILDMIDI))
#define GST_IS_WILDMIDI_CLASS(klass) \ #define GST_IS_WILDMIDI_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WILDMIDI)) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WILDMIDI))
typedef struct _GstWildmidi GstWildmidi; typedef struct _GstWildmidi GstWildmidi;
typedef struct _GstWildmidiClass GstWildmidiClass; typedef struct _GstWildmidiClass GstWildmidiClass;
struct _GstWildmidi struct _GstWildmidi
{ {
GstElement element; GstElement element;
GstPad *sinkpad, *srcpad; GstPad *sinkpad, *srcpad;
/* input stream properties */ /* input stream properties */
gint64 mididata_size, mididata_offset; gint64 mididata_size, mididata_offset;
gchar *mididata; gchar *mididata;
gboolean mididata_filled; gboolean mididata_filled;
midi *song; midi *song;
/* output data */ /* output data */
gboolean o_new_segment, o_segment_changed, o_seek; gboolean o_new_segment, o_segment_changed, o_seek;
GstSegment o_segment[1]; GstSegment o_segment[1];
gint64 o_len; gint64 o_len;
/* format of the stream */ /* format of the stream */
gint64 bytes_per_frame; gint64 bytes_per_frame;
GstClockTime time_per_frame; GstClockTime time_per_frame;
/* options */ /* options */
gboolean accurate_seek; gboolean accurate_seek;
/* wildmidi settings */ /* wildmidi settings */
gboolean high_quality; gboolean high_quality;
gboolean linear_volume; gboolean linear_volume;
GstCaps *out_caps;
}; };
struct _GstWildmidiClass struct _GstWildmidiClass
@ -85,4 +85,5 @@ struct _GstWildmidiClass
GType gst_wildmidi_get_type (void); GType gst_wildmidi_get_type (void);
G_END_DECLS G_END_DECLS
#endif /* __GST_WILDMIDI_H__ */ #endif /* __GST_WILDMIDI_H__ */