- Implemented seekmasks, query types and formats in various plugins
authorWim Taymans <wim.taymans@gmail.com>
Wed, 24 Jul 2002 21:08:43 +0000 (21:08 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 24 Jul 2002 21:08:43 +0000 (21:08 +0000)
Original commit message from CVS:
- Implemented seekmasks, query types and formats in various plugins
- use GST_PAD_IS_USABLE if possible

gst/elements/gstfakesrc.c
gst/elements/gstfilesink.c
gst/elements/gstfilesrc.c
gst/elements/gsttee.c
plugins/elements/gstfakesrc.c
plugins/elements/gstfilesink.c
plugins/elements/gstfilesrc.c
plugins/elements/gsttee.c

index 0e5bb7d..2752433 100644 (file)
@@ -338,6 +338,18 @@ gst_fakesrc_event_handler (GstPad *pad, GstEvent *event)
   return TRUE;
 }
 
+static const GstEventMask*
+gst_fakesrc_get_event_mask (GstPad *pad)
+{
+  static const GstEventMask gst_fakesrc_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { 0, }
+  };
+
+  return gst_fakesrc_event_mask;
+}
+
 static void
 gst_fakesrc_update_functions (GstFakeSrc *src)
 {
@@ -362,6 +374,7 @@ gst_fakesrc_update_functions (GstFakeSrc *src)
     }
 
     gst_pad_set_event_function (pad, gst_fakesrc_event_handler);
+    gst_pad_set_event_mask_function (pad, gst_fakesrc_get_event_mask);
     pads = g_list_next (pads);
   }
 }
@@ -412,7 +425,7 @@ gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, G
         if (src->sizetype != FAKESRC_SIZETYPE_FIXED)
           g_object_set (src, "sizetype", FAKESRC_SIZETYPE_FIXED, NULL);
         
-        if (!src->pool)
+        if (!src->pool) 
           src->pool = gst_buffer_pool_get_default (src->sizemax, 10);
       } else {
         if (src->pool) {
index d147f45..3a08cd0 100644 (file)
@@ -121,6 +121,23 @@ gst_filesink_class_init (GstFileSinkClass *klass)
   gstelement_class->change_state = gst_filesink_change_state;
 }
 
+static const GstEventMask*
+gst_filesink_get_event_mask (GstPad *pad)
+{
+  static GstEventMask gst_filesink_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_METHOD_CUR |
+                      GST_SEEK_METHOD_SET |
+                      GST_SEEK_METHOD_END |
+                      GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { GST_EVENT_DISCONTINUOUS, 0 },
+    { GST_EVENT_NEW_MEDIA, 0 },
+    { 0, }
+  };
+
+  return gst_filesink_event_mask;
+}
+
 static void 
 gst_filesink_init (GstFileSink *filesink) 
 {
@@ -132,6 +149,7 @@ gst_filesink_init (GstFileSink *filesink)
 
   GST_FLAG_SET (GST_ELEMENT(filesink), GST_ELEMENT_EVENT_AWARE);
   gst_pad_set_event_function(pad, gst_filesink_handle_event);
+  gst_pad_set_event_mask_function(pad, gst_filesink_get_event_mask);
 
   filesink->filename = NULL;
   filesink->file = NULL;
index f22741f..da725b6 100644 (file)
@@ -98,7 +98,6 @@ enum {
   ARG_TOUCH,
 };
 
-
 static void            gst_filesrc_class_init          (GstFileSrcClass *klass);
 static void            gst_filesrc_init                (GstFileSrc *filesrc);
 static void            gst_filesrc_dispose             (GObject *object);
@@ -109,6 +108,7 @@ static void         gst_filesrc_get_property        (GObject *object, guint prop_id,
                                                         GValue *value, GParamSpec *pspec);
 
 static GstBuffer *     gst_filesrc_get                 (GstPad *pad);
+static const GstFormat* gst_filesrc_get_formats        (GstPad *pad);
 static gboolean        gst_filesrc_srcpad_event        (GstPad *pad, GstEvent *event);
 static gboolean        gst_filesrc_srcpad_query        (GstPad *pad, GstPadQueryType type,
                                                         GstSeekType *format, gint64 *value);
@@ -182,13 +182,44 @@ gst_filesrc_bufcmp (gconstpointer a, gconstpointer b)
   else return 0;
 }
 
+static const GstEventMask*
+gst_filesrc_get_event_mask (GstPad *pad)
+{
+  static GstEventMask gst_filesrc_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_METHOD_CUR | 
+                     GST_SEEK_METHOD_SET | 
+                     GST_SEEK_METHOD_END | 
+                     GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { GST_EVENT_SIZE, 0 },
+    { 0, }
+  };
+
+  return gst_filesrc_event_mask;
+}
+
+static const GstPadQueryType*
+gst_filesrc_get_query_types (GstPad *pad)
+{
+  static GstPadQueryType gst_filesrc_query_types[] = {
+    GST_PAD_QUERY_TOTAL,
+    GST_PAD_QUERY_POSITION,
+    0
+  };
+
+  return gst_filesrc_query_types;
+}
+
 static void
 gst_filesrc_init (GstFileSrc *src)
 {
   src->srcpad = gst_pad_new ("src", GST_PAD_SRC);
   gst_pad_set_get_function (src->srcpad, gst_filesrc_get);
   gst_pad_set_event_function (src->srcpad, gst_filesrc_srcpad_event);
+  gst_pad_set_event_mask_function (src->srcpad, gst_filesrc_get_event_mask);
   gst_pad_set_query_function (src->srcpad, gst_filesrc_srcpad_query);
+  gst_pad_set_query_type_function (src->srcpad, gst_filesrc_get_query_types);
+  gst_pad_set_formats_function (src->srcpad, gst_filesrc_get_formats);
   gst_element_add_pad (GST_ELEMENT (src), src->srcpad);
 
   src->pagesize = getpagesize();
@@ -681,6 +712,17 @@ gst_filesrc_change_state (GstElement *element)
   return GST_STATE_SUCCESS;
 }
 
+static const GstFormat*
+gst_filesrc_get_formats (GstPad *pad)
+{
+  static const GstFormat gst_filesrc_formats[] = {
+    GST_FORMAT_BYTES,
+    0
+  };
+
+  return gst_filesrc_formats;
+}
+
 static gboolean
 gst_filesrc_srcpad_query (GstPad *pad, GstPadQueryType type,
                          GstFormat *format, gint64 *value)
index e9c37dc..d886206 100644 (file)
@@ -137,7 +137,7 @@ gst_tee_sinkconnect (GstPad *pad, GstCaps *caps)
     GstPad *outpad = GST_PAD (pads->data);
     pads = g_list_next (pads);
                     
-    if (GST_PAD_DIRECTION (outpad) != GST_PAD_SRC || !GST_PAD_IS_CONNECTED (outpad))
+    if (GST_PAD_DIRECTION (outpad) != GST_PAD_SRC || !GST_PAD_IS_USABLE (outpad))
       continue;
 
     if (!(gst_pad_try_set_caps (outpad, caps))) {
@@ -304,7 +304,7 @@ gst_tee_chain (GstPad *pad, GstBuffer *buf)
       g_object_notify (G_OBJECT (tee), "last_message");
     }
 
-    if (GST_PAD_IS_CONNECTED (outpad))
+    if (GST_PAD_IS_USABLE (outpad))
       gst_pad_push (outpad, buf);
     else
       gst_buffer_unref (buf);
index 0e5bb7d..2752433 100644 (file)
@@ -338,6 +338,18 @@ gst_fakesrc_event_handler (GstPad *pad, GstEvent *event)
   return TRUE;
 }
 
+static const GstEventMask*
+gst_fakesrc_get_event_mask (GstPad *pad)
+{
+  static const GstEventMask gst_fakesrc_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { 0, }
+  };
+
+  return gst_fakesrc_event_mask;
+}
+
 static void
 gst_fakesrc_update_functions (GstFakeSrc *src)
 {
@@ -362,6 +374,7 @@ gst_fakesrc_update_functions (GstFakeSrc *src)
     }
 
     gst_pad_set_event_function (pad, gst_fakesrc_event_handler);
+    gst_pad_set_event_mask_function (pad, gst_fakesrc_get_event_mask);
     pads = g_list_next (pads);
   }
 }
@@ -412,7 +425,7 @@ gst_fakesrc_set_property (GObject *object, guint prop_id, const GValue *value, G
         if (src->sizetype != FAKESRC_SIZETYPE_FIXED)
           g_object_set (src, "sizetype", FAKESRC_SIZETYPE_FIXED, NULL);
         
-        if (!src->pool)
+        if (!src->pool) 
           src->pool = gst_buffer_pool_get_default (src->sizemax, 10);
       } else {
         if (src->pool) {
index d147f45..3a08cd0 100644 (file)
@@ -121,6 +121,23 @@ gst_filesink_class_init (GstFileSinkClass *klass)
   gstelement_class->change_state = gst_filesink_change_state;
 }
 
+static const GstEventMask*
+gst_filesink_get_event_mask (GstPad *pad)
+{
+  static GstEventMask gst_filesink_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_METHOD_CUR |
+                      GST_SEEK_METHOD_SET |
+                      GST_SEEK_METHOD_END |
+                      GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { GST_EVENT_DISCONTINUOUS, 0 },
+    { GST_EVENT_NEW_MEDIA, 0 },
+    { 0, }
+  };
+
+  return gst_filesink_event_mask;
+}
+
 static void 
 gst_filesink_init (GstFileSink *filesink) 
 {
@@ -132,6 +149,7 @@ gst_filesink_init (GstFileSink *filesink)
 
   GST_FLAG_SET (GST_ELEMENT(filesink), GST_ELEMENT_EVENT_AWARE);
   gst_pad_set_event_function(pad, gst_filesink_handle_event);
+  gst_pad_set_event_mask_function(pad, gst_filesink_get_event_mask);
 
   filesink->filename = NULL;
   filesink->file = NULL;
index f22741f..da725b6 100644 (file)
@@ -98,7 +98,6 @@ enum {
   ARG_TOUCH,
 };
 
-
 static void            gst_filesrc_class_init          (GstFileSrcClass *klass);
 static void            gst_filesrc_init                (GstFileSrc *filesrc);
 static void            gst_filesrc_dispose             (GObject *object);
@@ -109,6 +108,7 @@ static void         gst_filesrc_get_property        (GObject *object, guint prop_id,
                                                         GValue *value, GParamSpec *pspec);
 
 static GstBuffer *     gst_filesrc_get                 (GstPad *pad);
+static const GstFormat* gst_filesrc_get_formats        (GstPad *pad);
 static gboolean        gst_filesrc_srcpad_event        (GstPad *pad, GstEvent *event);
 static gboolean        gst_filesrc_srcpad_query        (GstPad *pad, GstPadQueryType type,
                                                         GstSeekType *format, gint64 *value);
@@ -182,13 +182,44 @@ gst_filesrc_bufcmp (gconstpointer a, gconstpointer b)
   else return 0;
 }
 
+static const GstEventMask*
+gst_filesrc_get_event_mask (GstPad *pad)
+{
+  static GstEventMask gst_filesrc_event_mask[] = {
+    { GST_EVENT_SEEK, GST_SEEK_METHOD_CUR | 
+                     GST_SEEK_METHOD_SET | 
+                     GST_SEEK_METHOD_END | 
+                     GST_SEEK_FLAG_FLUSH },
+    { GST_EVENT_FLUSH, 0 },
+    { GST_EVENT_SIZE, 0 },
+    { 0, }
+  };
+
+  return gst_filesrc_event_mask;
+}
+
+static const GstPadQueryType*
+gst_filesrc_get_query_types (GstPad *pad)
+{
+  static GstPadQueryType gst_filesrc_query_types[] = {
+    GST_PAD_QUERY_TOTAL,
+    GST_PAD_QUERY_POSITION,
+    0
+  };
+
+  return gst_filesrc_query_types;
+}
+
 static void
 gst_filesrc_init (GstFileSrc *src)
 {
   src->srcpad = gst_pad_new ("src", GST_PAD_SRC);
   gst_pad_set_get_function (src->srcpad, gst_filesrc_get);
   gst_pad_set_event_function (src->srcpad, gst_filesrc_srcpad_event);
+  gst_pad_set_event_mask_function (src->srcpad, gst_filesrc_get_event_mask);
   gst_pad_set_query_function (src->srcpad, gst_filesrc_srcpad_query);
+  gst_pad_set_query_type_function (src->srcpad, gst_filesrc_get_query_types);
+  gst_pad_set_formats_function (src->srcpad, gst_filesrc_get_formats);
   gst_element_add_pad (GST_ELEMENT (src), src->srcpad);
 
   src->pagesize = getpagesize();
@@ -681,6 +712,17 @@ gst_filesrc_change_state (GstElement *element)
   return GST_STATE_SUCCESS;
 }
 
+static const GstFormat*
+gst_filesrc_get_formats (GstPad *pad)
+{
+  static const GstFormat gst_filesrc_formats[] = {
+    GST_FORMAT_BYTES,
+    0
+  };
+
+  return gst_filesrc_formats;
+}
+
 static gboolean
 gst_filesrc_srcpad_query (GstPad *pad, GstPadQueryType type,
                          GstFormat *format, gint64 *value)
index e9c37dc..d886206 100644 (file)
@@ -137,7 +137,7 @@ gst_tee_sinkconnect (GstPad *pad, GstCaps *caps)
     GstPad *outpad = GST_PAD (pads->data);
     pads = g_list_next (pads);
                     
-    if (GST_PAD_DIRECTION (outpad) != GST_PAD_SRC || !GST_PAD_IS_CONNECTED (outpad))
+    if (GST_PAD_DIRECTION (outpad) != GST_PAD_SRC || !GST_PAD_IS_USABLE (outpad))
       continue;
 
     if (!(gst_pad_try_set_caps (outpad, caps))) {
@@ -304,7 +304,7 @@ gst_tee_chain (GstPad *pad, GstBuffer *buf)
       g_object_notify (G_OBJECT (tee), "last_message");
     }
 
-    if (GST_PAD_IS_CONNECTED (outpad))
+    if (GST_PAD_IS_USABLE (outpad))
       gst_pad_push (outpad, buf);
     else
       gst_buffer_unref (buf);