summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2009-08-31 17:33:32 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-08-31 18:48:03 +0200
commit25caf9f743256e602ee0f7ad216ff51d892c7de3 (patch)
tree36a0b94e2ea5911c8d5cdd5fa310dbad8a1f2462
parent4ef773164ac14d4ba93d976fac7ff6c98a5be90b (diff)
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.
-rw-r--r--ext/timidity/gstwildmidi.c10
-rw-r--r--ext/timidity/gstwildmidi.h49
2 files changed, 31 insertions, 28 deletions
diff --git a/ext/timidity/gstwildmidi.c b/ext/timidity/gstwildmidi.c
index 90ec529ec..bdfce5d7e 100644
--- a/ext/timidity/gstwildmidi.c
+++ b/ext/timidity/gstwildmidi.c
@@ -652,6 +652,7 @@ gst_wildmidi_loop (GstPad * sinkpad)
652 GstWildmidi *wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad)); 652 GstWildmidi *wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad));
653 GstBuffer *out; 653 GstBuffer *out;
654 GstFlowReturn ret; 654 GstFlowReturn ret;
655 GstCaps *outcaps;
655 656
656 if (wildmidi->mididata_size == 0) { 657 if (wildmidi->mididata_size == 0) {
657 if (!gst_wildmidi_get_upstream_size (wildmidi, &wildmidi->mididata_size)) { 658 if (!gst_wildmidi_get_upstream_size (wildmidi, &wildmidi->mididata_size)) {
@@ -724,6 +725,10 @@ gst_wildmidi_loop (GstPad * sinkpad)
724 info = WildMidi_GetInfo (wildmidi->song); 725 info = WildMidi_GetInfo (wildmidi->song);
725 wildmidi->o_len = info->approx_total_samples; 726 wildmidi->o_len = info->approx_total_samples;
726 727
728 outcaps = gst_caps_copy (gst_pad_get_pad_template_caps (wildmidi->srcpad));
729 gst_pad_set_caps (wildmidi->srcpad, outcaps);
730 gst_caps_unref (outcaps);
731
727 gst_segment_set_newsegment (wildmidi->o_segment, FALSE, 1.0, 732 gst_segment_set_newsegment (wildmidi->o_segment, FALSE, 1.0,
728 GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0); 733 GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0);
729 734
@@ -787,7 +792,7 @@ gst_wildmidi_loop (GstPad * sinkpad)
787 wildmidi->o_seek = FALSE; 792 wildmidi->o_seek = FALSE;
788 } 793 }
789 794
790 gst_buffer_set_caps (out, wildmidi->out_caps); 795 gst_buffer_set_caps (out, GST_PAD_CAPS (wildmidi->srcpad));
791 ret = gst_pad_push (wildmidi->srcpad, out); 796 ret = gst_pad_push (wildmidi->srcpad, out);
792 797
793 if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) 798 if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED)
@@ -819,8 +824,6 @@ gst_wildmidi_change_state (GstElement * element, GstStateChange transition)
819 824
820 switch (transition) { 825 switch (transition) {
821 case GST_STATE_CHANGE_NULL_TO_READY: 826 case GST_STATE_CHANGE_NULL_TO_READY:
822 wildmidi->out_caps =
823 gst_caps_copy (gst_pad_get_pad_template_caps (wildmidi->srcpad));
824 wildmidi->mididata = NULL; 827 wildmidi->mididata = NULL;
825 break; 828 break;
826 case GST_STATE_CHANGE_READY_TO_PAUSED: 829 case GST_STATE_CHANGE_READY_TO_PAUSED:
@@ -846,7 +849,6 @@ gst_wildmidi_change_state (GstElement * element, GstStateChange transition)
846 wildmidi->mididata = NULL; 849 wildmidi->mididata = NULL;
847 break; 850 break;
848 case GST_STATE_CHANGE_READY_TO_NULL: 851 case GST_STATE_CHANGE_READY_TO_NULL:
849 gst_caps_unref (wildmidi->out_caps);
850 break; 852 break;
851 default: 853 default:
852 break; 854 break;
diff --git a/ext/timidity/gstwildmidi.h b/ext/timidity/gstwildmidi.h
index 37815ea60..84802f735 100644
--- a/ext/timidity/gstwildmidi.h
+++ b/ext/timidity/gstwildmidi.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * gstwildmidi - wildmidi plugin for gstreamer 2 * gstwildmidi - wildmidi plugin for gstreamer
3 * 3 *
4 * Copyright 2007 Wouter Paesen <wouter@blue-gate.be> 4 * Copyright 2007 Wouter Paesen <wouter@blue-gate.be>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
19 * Boston, MA 02111-1307, USA. 19 * Boston, MA 02111-1307, USA.
20 * 20 *
21 * Wrapper element for libtimidity. This element works in pull 21 * Wrapper element for libtimidity. This element works in pull
22 * based mode because that's essentially how libwildmidi works. 22 * based mode because that's essentially how libwildmidi works.
23 * We create a libwildmidi stream that operates on the srcpad. 23 * We create a libwildmidi stream that operates on the srcpad.
24 * The sinkpad is in pull mode. 24 * The sinkpad is in pull mode.
25 */ 25 */
26 26
@@ -32,6 +32,7 @@
32#include <wildmidi_lib.h> 32#include <wildmidi_lib.h>
33 33
34G_BEGIN_DECLS 34G_BEGIN_DECLS
35
35#define GST_TYPE_WILDMIDI \ 36#define GST_TYPE_WILDMIDI \
36 (gst_wildmidi_get_type()) 37 (gst_wildmidi_get_type())
37#define GST_WILDMIDI(obj) \ 38#define GST_WILDMIDI(obj) \
@@ -42,39 +43,38 @@ G_BEGIN_DECLS
42 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WILDMIDI)) 43 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WILDMIDI))
43#define GST_IS_WILDMIDI_CLASS(klass) \ 44#define GST_IS_WILDMIDI_CLASS(klass) \
44 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WILDMIDI)) 45 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WILDMIDI))
46
45typedef struct _GstWildmidi GstWildmidi; 47typedef struct _GstWildmidi GstWildmidi;
46typedef struct _GstWildmidiClass GstWildmidiClass; 48typedef struct _GstWildmidiClass GstWildmidiClass;
47 49
48struct _GstWildmidi 50struct _GstWildmidi
49{ 51{
50 GstElement element; 52 GstElement element;
51 53
52 GstPad *sinkpad, *srcpad; 54 GstPad *sinkpad, *srcpad;
53 55
54 /* input stream properties */ 56 /* input stream properties */
55 gint64 mididata_size, mididata_offset; 57 gint64 mididata_size, mididata_offset;
56 gchar *mididata; 58 gchar *mididata;
57 gboolean mididata_filled; 59 gboolean mididata_filled;
58 60
59 midi *song; 61 midi *song;
60 62
61 /* output data */ 63 /* output data */
62 gboolean o_new_segment, o_segment_changed, o_seek; 64 gboolean o_new_segment, o_segment_changed, o_seek;
63 GstSegment o_segment[1]; 65 GstSegment o_segment[1];
64 gint64 o_len; 66 gint64 o_len;
65 67
66 /* format of the stream */ 68 /* format of the stream */
67 gint64 bytes_per_frame; 69 gint64 bytes_per_frame;
68 GstClockTime time_per_frame; 70 GstClockTime time_per_frame;
69 71
70 /* options */ 72 /* options */
71 gboolean accurate_seek; 73 gboolean accurate_seek;
72 74
73 /* wildmidi settings */ 75 /* wildmidi settings */
74 gboolean high_quality; 76 gboolean high_quality;
75 gboolean linear_volume; 77 gboolean linear_volume;
76
77 GstCaps *out_caps;
78}; 78};
79 79
80struct _GstWildmidiClass 80struct _GstWildmidiClass
@@ -85,4 +85,5 @@ struct _GstWildmidiClass
85GType gst_wildmidi_get_type (void); 85GType gst_wildmidi_get_type (void);
86 86
87G_END_DECLS 87G_END_DECLS
88
88#endif /* __GST_WILDMIDI_H__ */ 89#endif /* __GST_WILDMIDI_H__ */