1/* vim: set filetype=c: */ 2 3% instance-members 4 GstPad *srcpad; 5% prototypes 6 7static GstCaps* gst_replace_src_getcaps (GstPad *pad); 8static gboolean gst_replace_src_setcaps (GstPad *pad, GstCaps *caps); 9static gboolean gst_replace_src_acceptcaps (GstPad *pad, GstCaps *caps); 10static void gst_replace_src_fixatecaps (GstPad *pad, GstCaps *caps); 11static gboolean gst_replace_src_activate (GstPad *pad); 12static gboolean gst_replace_src_activatepush (GstPad *pad, gboolean active); 13static gboolean gst_replace_src_activatepull (GstPad *pad, gboolean active); 14static GstPadLinkReturn gst_replace_src_link (GstPad *pad, GstPad *peer); 15static void gst_replace_src_unlink (GstPad *pad); 16static GstFlowReturn gst_replace_src_getrange (GstPad *pad, guint64 offset, guint length, 17 GstBuffer **buffer); 18static gboolean gst_replace_src_event (GstPad *pad, GstEvent *event); 19static gboolean gst_replace_src_query (GstPad *pad, GstQuery *query); 20static GstIterator * gst_replace_src_iterintlink (GstPad *pad); 21 22% pad-template 23static GstStaticPadTemplate gst_replace_src_template = 24GST_STATIC_PAD_TEMPLATE ("src", 25 GST_PAD_SRC, 26 GST_PAD_ALWAYS, 27 GST_STATIC_CAPS ("application/unknown") 28 ); 29 30% base-init 31 gst_element_class_add_static_pad_template (element_class, 32 &gst_replace_src_template); 33% instance-init 34 35 replace->srcpad = gst_pad_new_from_static_template (&gst_replace_src_template 36 , 37 "src"); 38 gst_pad_set_getcaps_function (replace->srcpad, 39 GST_DEBUG_FUNCPTR(gst_replace_src_getcaps)); 40 gst_pad_set_setcaps_function (replace->srcpad, 41 GST_DEBUG_FUNCPTR(gst_replace_src_setcaps)); 42 gst_pad_set_acceptcaps_function (replace->srcpad, 43 GST_DEBUG_FUNCPTR(gst_replace_src_acceptcaps)); 44 gst_pad_set_fixatecaps_function (replace->srcpad, 45 GST_DEBUG_FUNCPTR(gst_replace_src_fixatecaps)); 46 gst_pad_set_activate_function (replace->srcpad, 47 GST_DEBUG_FUNCPTR(gst_replace_src_activate)); 48 gst_pad_set_activatepush_function (replace->srcpad, 49 GST_DEBUG_FUNCPTR(gst_replace_src_activatepush)); 50 gst_pad_set_activatepull_function (replace->srcpad, 51 GST_DEBUG_FUNCPTR(gst_replace_src_activatepull)); 52 gst_pad_set_link_function (replace->srcpad, 53 GST_DEBUG_FUNCPTR(gst_replace_src_link)); 54 gst_pad_set_unlink_function (replace->srcpad, 55 GST_DEBUG_FUNCPTR(gst_replace_src_unlink)); 56 gst_pad_set_getrange_function (replace->srcpad, 57 GST_DEBUG_FUNCPTR(gst_replace_src_getrange)); 58 gst_pad_set_event_function (replace->srcpad, 59 GST_DEBUG_FUNCPTR(gst_replace_src_event)); 60 gst_pad_set_query_function (replace->srcpad, 61 GST_DEBUG_FUNCPTR(gst_replace_src_query)); 62 gst_pad_set_iterate_internal_links_function (replace->srcpad, 63 GST_DEBUG_FUNCPTR(gst_replace_src_iterintlink)); 64 gst_element_add_pad (GST_ELEMENT(replace), replace->srcpad); 65 66 67% methods 68 69static GstCaps* 70gst_replace_src_getcaps (GstPad *pad) 71{ 72 GstReplace *replace; 73 GstCaps *caps; 74 75 replace = GST_REPLACE (gst_pad_get_parent (pad)); 76 77 GST_DEBUG_OBJECT(replace, "getcaps"); 78 79 caps = gst_pad_get_pad_template_caps (pad); 80 81 gst_object_unref (replace); 82 return caps; 83} 84 85static gboolean 86gst_replace_src_setcaps (GstPad *pad, GstCaps *caps) 87{ 88 GstReplace *replace; 89 90 replace = GST_REPLACE (gst_pad_get_parent (pad)); 91 92 GST_DEBUG_OBJECT(replace, "setcaps"); 93 94 95 gst_object_unref (replace); 96 return TRUE; 97} 98 99static gboolean 100gst_replace_src_acceptcaps (GstPad *pad, GstCaps *caps) 101{ 102 GstReplace *replace; 103 104 replace = GST_REPLACE (gst_pad_get_parent (pad)); 105 106 GST_DEBUG_OBJECT(replace, "acceptcaps"); 107 108 109 gst_object_unref (replace); 110 return TRUE; 111} 112 113static void 114gst_replace_src_fixatecaps (GstPad *pad, GstCaps *caps) 115{ 116 GstReplace *replace; 117 118 replace = GST_REPLACE (gst_pad_get_parent (pad)); 119 120 GST_DEBUG_OBJECT(replace, "fixatecaps"); 121 122 123 gst_object_unref (replace); 124} 125 126static gboolean 127gst_replace_src_activate (GstPad *pad) 128{ 129 GstReplace *replace; 130 gboolean ret; 131 132 replace = GST_REPLACE (gst_pad_get_parent (pad)); 133 134 GST_DEBUG_OBJECT(replace, "activate"); 135 136 if (gst_pad_check_pull_range (pad)) { 137 GST_DEBUG_OBJECT (pad, "activating pull"); 138 ret = gst_pad_activate_pull (pad, TRUE); 139 } else { 140 GST_DEBUG_OBJECT (pad, "activating push"); 141 ret = gst_pad_activate_push (pad, TRUE); 142 } 143 144 gst_object_unref (replace); 145 return ret; 146} 147 148static gboolean 149gst_replace_src_activatepush (GstPad *pad, gboolean active) 150{ 151 GstReplace *replace; 152 153 replace = GST_REPLACE (gst_pad_get_parent (pad)); 154 155 GST_DEBUG_OBJECT(replace, "activatepush"); 156 157 158 gst_object_unref (replace); 159 return TRUE; 160} 161 162static gboolean 163gst_replace_src_activatepull (GstPad *pad, gboolean active) 164{ 165 GstReplace *replace; 166 167 replace = GST_REPLACE (gst_pad_get_parent (pad)); 168 169 GST_DEBUG_OBJECT(replace, "activatepull"); 170 171 172 gst_object_unref (replace); 173 return TRUE; 174} 175 176static GstPadLinkReturn 177gst_replace_src_link (GstPad *pad, GstPad *peer) 178{ 179 GstReplace *replace; 180 181 replace = GST_REPLACE (gst_pad_get_parent (pad)); 182 183 GST_DEBUG_OBJECT(replace, "link"); 184 185 186 gst_object_unref (replace); 187 return GST_PAD_LINK_OK; 188} 189 190static void 191gst_replace_src_unlink (GstPad *pad) 192{ 193 GstReplace *replace; 194 195 replace = GST_REPLACE (gst_pad_get_parent (pad)); 196 197 GST_DEBUG_OBJECT(replace, "unlink"); 198 199 200 gst_object_unref (replace); 201} 202 203static GstFlowReturn 204gst_replace_src_getrange (GstPad *pad, guint64 offset, guint length, 205 GstBuffer **buffer) 206{ 207 GstReplace *replace; 208 209 replace = GST_REPLACE (gst_pad_get_parent (pad)); 210 211 GST_DEBUG_OBJECT(replace, "getrange"); 212 213 214 gst_object_unref (replace); 215 return GST_FLOW_OK; 216} 217 218static gboolean 219gst_replace_src_event (GstPad *pad, GstEvent *event) 220{ 221 gboolean res; 222 GstReplace *replace; 223 224 replace = GST_REPLACE (gst_pad_get_parent (pad)); 225 226 GST_DEBUG_OBJECT(replace, "event"); 227 228 switch (GST_EVENT_TYPE (event)) { 229 default: 230 res = gst_pad_event_default (pad, event); 231 break; 232 } 233 234 gst_object_unref (replace); 235 return res; 236} 237 238static gboolean 239gst_replace_src_query (GstPad *pad, GstQuery *query) 240{ 241 gboolean res; 242 GstReplace *replace; 243 244 replace = GST_REPLACE (gst_pad_get_parent (pad)); 245 246 GST_DEBUG_OBJECT(replace, "query"); 247 248 switch (GST_QUERY_TYPE(query)) { 249 default: 250 res = gst_pad_query_default (pad, query); 251 break; 252 } 253 254 gst_object_unref (replace); 255 return res; 256} 257 258static GstIterator * 259gst_replace_src_iterintlink (GstPad *pad) 260{ 261 GstReplace *replace; 262 GstIterator *iter; 263 264 replace = GST_REPLACE (gst_pad_get_parent (pad)); 265 266 GST_DEBUG_OBJECT(replace, "iterintlink"); 267 268 iter = gst_pad_iterate_internal_links_default (pad); 269 270 gst_object_unref (replace); 271 return iter; 272} 273 274% end 275 276