[gst-cvs] CVS: gstreamer/gst gstevent.c,1.1.2.3,1.1.2.4 gstevent.h,1.2.4.5,1.2.4.6 gstpad.c,1.104.2.2,1.104.2.3 gstpad.h,1.62.4.2,1.62.4.3

Wim Taymans wtay at users.sourceforge.net
Sat Oct 6 07:42:05 PDT 2001


Update of /cvsroot/gstreamer/gstreamer/gst
In directory usw-pr-cvs1:/tmp/cvs-serv12031

Modified Files:
      Tag: BRANCH-EVENTS1
	gstevent.c gstevent.h gstpad.c gstpad.h 
Log Message:
Added code for sending an event to a pad.
Added code to handle the event in fakesrc and fakesink.



Index: gstevent.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/Attic/gstevent.c,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -d -r1.1.2.3 -r1.1.2.4
--- gstevent.c	2001/09/28 23:00:12	1.1.2.3
+++ gstevent.c	2001/10/06 14:41:20	1.1.2.4
@@ -80,3 +80,17 @@
   g_mem_chunk_free (_gst_event_chunk, event);
   g_mutex_unlock (_gst_event_chunk_lock);
 }
+
+/* seek stuff */
+GstEvent*       
+gst_event_new_seek (GstSeekType type, guint64 offset, gboolean flush)
+{
+  GstEvent *event;
+
+  event = gst_event_new (GST_EVENT_SEEK);
+  GST_EVENT_SEEK_TYPE (event) = type;
+  GST_EVENT_SEEK_OFFSET (event) = offset;
+  GST_EVENT_SEEK_FLUSH (event) = flush;
+
+  return event;
+}

Index: gstevent.h
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstevent.h,v
retrieving revision 1.2.4.5
retrieving revision 1.2.4.6
diff -u -d -r1.2.4.5 -r1.2.4.6
--- gstevent.h	2001/09/28 23:00:12	1.2.4.5
+++ gstevent.h	2001/10/06 14:41:20	1.2.4.6
@@ -46,20 +46,47 @@
 #define GST_EVENT(event)	((GstEvent*)(event))
 #define GST_IS_EVENT(event)	(GST_DATA_TYPE(event) == GST_TYPE_EVENT)
 
-#define GST_EVENT_TYPE(event)	(GST_EVENT(event)->type)
+#define GST_EVENT_TYPE(event)		(GST_EVENT(event)->type)
+#define GST_EVENT_TIMESTAMP(event)	(GST_EVENT(event)->timstamp)
+
+/* seek events */
+typedef enum {
+  GST_SEEK_ANY,
+  GST_SEEK_TIMEOFFSET,
+  GST_SEEK_BYTEOFFSET
+} GstSeekType;
+
+#define GST_EVENT_SEEK_TYPE(event)	(GST_EVENT(event)->event_data.seek.type)
+#define GST_EVENT_SEEK_OFFSET(event)	(GST_EVENT(event)->event_data.seek.offset)
+#define GST_EVENT_SEEK_FLUSH(event)	(GST_EVENT(event)->event_data.seek.flush)
 
 typedef struct _GstEvent GstEvent;
 
 struct _GstEvent {
   GstData data;
 
-  GstEventType type;
+  GstEventType  type;
+  guint64	timestamp;
+
+  union {
+    struct {
+      GstSeekType type;
+      guint64     offset;
+      gboolean	  flush;
+    } seek;
+  } event_data;
 };
 
 void 		_gst_event_initialize 	(void);
 	
 GstEvent*	gst_event_new	        (GstEventType type);
 void		gst_event_free 		(GstEvent* event);
+
+/* seek events */
+GstEvent*	gst_event_new_seek	(GstSeekType type, guint64 offset, gboolean flush);
+
+/* flush events */
+#define		gst_event_new_flush()	gst_event_new(GST_EVENT_FLUSH)
 
 #ifdef __cplusplus
 }

Index: gstpad.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstpad.c,v
retrieving revision 1.104.2.2
retrieving revision 1.104.2.3
diff -u -d -r1.104.2.2 -r1.104.2.3
--- gstpad.c	2001/09/30 22:01:14	1.104.2.2
+++ gstpad.c	2001/10/06 14:41:20	1.104.2.3
@@ -1939,14 +1939,36 @@
   GST_DEBUG(GST_CAT_EVENT, "have event %d on pad %s:%s\n",(gint)event,GST_DEBUG_PAD_NAME(pad));
 
   peer = GST_RPAD_PEER(pad);
-  if (GST_RPAD_EVENTFUNC(peer))
-    handled = GST_RPAD_EVENTFUNC(peer) (peer, event, timestamp, data);
+  if (GST_RPAD_EVENTFUNC(peer)) {
+    //handled = GST_RPAD_EVENTFUNC(peer) (peer, event, timestamp, data);
+  }
   else {
     GST_DEBUG(GST_CAT_EVENT, "there's no event function for peer %s:%s\n",GST_DEBUG_PAD_NAME(peer));
   }
 
   if (!handled) {
     GST_DEBUG(GST_CAT_EVENT, "would proceed with default behavior here\n");
-    gst_pad_event_default(peer,event, timestamp, data);
+    //gst_pad_event_default(peer,event, timestamp, data);
+  }
+}
+
+gboolean
+gst_pad_send_event (GstPad *pad, GstEvent *event)
+{
+  gboolean handled = FALSE;
+
+  GST_DEBUG (GST_CAT_EVENT, "have event %d on pad %s:%s\n",
+		  GST_EVENT_TYPE (event), GST_DEBUG_PAD_NAME (pad));
+
+  if (GST_RPAD_EVENTFUNC (pad))
+    handled = GST_RPAD_EVENTFUNC (pad) (pad, event);
+  else {
+    GST_DEBUG(GST_CAT_EVENT, "there's no event function for pad %s:%s\n", GST_DEBUG_PAD_NAME (pad));
   }
+
+  if (!handled) {
+    GST_DEBUG(GST_CAT_EVENT, "would proceed with default behavior here\n");
+    //gst_pad_event_default (pad, event);
+  }
 }
+

Index: gstpad.h
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstpad.h,v
retrieving revision 1.62.4.2
retrieving revision 1.62.4.3
diff -u -d -r1.62.4.2 -r1.62.4.3
--- gstpad.h	2001/10/01 19:41:03	1.62.4.2
+++ gstpad.h	2001/10/06 14:41:20	1.62.4.3
@@ -130,7 +130,7 @@
  * buf is the buffer being passed */
 typedef void 		(*GstPadChainFunction) 		(GstPad *pad,GstBuffer *buf);
 typedef GstBuffer*	(*GstPadGetFunction) 		(GstPad *pad);
-typedef gboolean	(*GstPadEventFunction)		(GstPad *pad, GstEventType event, gint64 timestamp, guint32 data);
+typedef gboolean	(*GstPadEventFunction)		(GstPad *pad, GstEvent *event);
 
 typedef GstBuffer*	(*GstPadGetRegionFunction) 	(GstPad *pad, GstRegionType type, guint64 offset, guint64 len);
 typedef GstBuffer*	(*GstPadPullRegionFunction) 	(GstPad *pad, GstRegionType type, guint64 offset, guint64 len);
@@ -412,6 +412,7 @@
 }G_STMT_END
 #endif
 
+gboolean		gst_pad_send_event		(GstPad *pad, GstEvent *event);
 
 GstBuffer*		gst_pad_peek			(GstPad *pad);
 GstPad*			gst_pad_select			(GList *padlist);





More information about the Gstreamer-commits mailing list