examples/seeking/seek.c: Update seek example.
authorWim Taymans <wim.taymans@gmail.com>
Wed, 27 Jul 2005 18:34:29 +0000 (18:34 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 27 Jul 2005 18:34:29 +0000 (18:34 +0000)
Original commit message from CVS:
* examples/seeking/seek.c: (setup_dynamic_link),
(make_dv_pipeline), (make_vorbis_theora_pipeline), (query_rates),
(query_positions_elems), (query_positions_pads), (do_seek):
Update seek example.

* ext/ogg/gstoggdemux.c: (gst_ogg_pad_event),
(gst_ogg_pad_typefind), (gst_ogg_demux_chain_elem_pad),
(gst_ogg_demux_queue_data), (gst_ogg_demux_chain_peer),
(gst_ogg_pad_submit_packet), (gst_ogg_pad_submit_page),
(gst_ogg_demux_handle_event),
(gst_ogg_demux_deactivate_current_chain),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_collect_chain_info), (gst_ogg_demux_collect_info),
(gst_ogg_demux_chain), (gst_ogg_demux_send_event),
(gst_ogg_demux_loop):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_collected):
* ext/theora/theoradec.c: (theora_dec_src_event),
(theora_dec_src_getcaps), (theora_dec_sink_event),
(theora_dec_push), (theora_dec_chain):
* ext/vorbis/Makefile.am:
* ext/vorbis/vorbisdec.c: (vorbis_dec_src_event),
(vorbis_dec_sink_event), (vorbis_dec_push),
(vorbis_handle_data_packet):
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_sink_event),
(gst_vorbisenc_chain):
* gst/playback/gststreaminfo.c: (cb_probe):
* gst/subparse/gstsubparse.c: (gst_subparse_src_event):
* gst/videorate/gstvideorate.c: (gst_videorate_event):
* gst/videoscale/gstvideoscale.c:
(gst_videoscale_handle_src_event):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_event):
* sys/ximage/ximagesink.c: (gst_ximagesink_show_frame),
(gst_ximagesink_navigation_send_event):
* sys/xvimage/xvimagesink.c:
(gst_xvimagesink_navigation_send_event):
Various event updates and cleanups

16 files changed:
ChangeLog
examples/seeking/seek.c
ext/ogg/gstoggdemux.c
ext/ogg/gstoggmux.c
ext/theora/theoradec.c
ext/vorbis/Makefile.am
ext/vorbis/vorbisdec.c
ext/vorbis/vorbisenc.c
gst/playback/gststreaminfo.c
gst/subparse/gstsubparse.c
gst/videorate/gstvideorate.c
gst/videoscale/gstvideoscale.c
gst/videotestsrc/gstvideotestsrc.c
sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c
tests/examples/seek/seek.c

index 0527eaf..051ca3e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+2005-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * examples/seeking/seek.c: (setup_dynamic_link),
+       (make_dv_pipeline), (make_vorbis_theora_pipeline), (query_rates),
+       (query_positions_elems), (query_positions_pads), (do_seek):
+       Update seek example.
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_event),
+       (gst_ogg_pad_typefind), (gst_ogg_demux_chain_elem_pad),
+       (gst_ogg_demux_queue_data), (gst_ogg_demux_chain_peer),
+       (gst_ogg_pad_submit_packet), (gst_ogg_pad_submit_page),
+       (gst_ogg_demux_handle_event),
+       (gst_ogg_demux_deactivate_current_chain),
+       (gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
+       (gst_ogg_demux_collect_chain_info), (gst_ogg_demux_collect_info),
+       (gst_ogg_demux_chain), (gst_ogg_demux_send_event),
+       (gst_ogg_demux_loop):
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_collected):
+       * ext/theora/theoradec.c: (theora_dec_src_event),
+       (theora_dec_src_getcaps), (theora_dec_sink_event),
+       (theora_dec_push), (theora_dec_chain):
+       * ext/vorbis/Makefile.am:
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_event),
+       (vorbis_dec_sink_event), (vorbis_dec_push),
+       (vorbis_handle_data_packet):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sink_event),
+       (gst_vorbisenc_chain):
+       * gst/playback/gststreaminfo.c: (cb_probe):
+       * gst/subparse/gstsubparse.c: (gst_subparse_src_event):
+       * gst/videorate/gstvideorate.c: (gst_videorate_event):
+       * gst/videoscale/gstvideoscale.c:
+       (gst_videoscale_handle_src_event):
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_event):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_show_frame),
+       (gst_ximagesink_navigation_send_event):
+       * sys/xvimage/xvimagesink.c:
+       (gst_xvimagesink_navigation_send_event):
+       Various event updates and cleanups
+
 2005-07-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
 
        * gst/videoscale/gstvideoscale.c: (gst_videoscale_prepare_images):
index 7de7ae1..5bd6ed6 100644 (file)
@@ -86,7 +86,7 @@ setup_dynamic_link (GstElement * element, const gchar * padname,
   connect->target = target;
   connect->bin = bin;
 
-  g_signal_connect (G_OBJECT (element), "new_pad", G_CALLBACK (dynamic_link),
+  g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
       connect);
 }
 
@@ -158,7 +158,6 @@ make_dv_pipeline (const gchar * location)
   rate_pads = g_list_prepend (rate_pads, seekable);
 
   seekable = gst_element_get_pad (decoder, "audio");
-  seekable_pads = g_list_prepend (seekable_pads, seekable);
   rate_pads = g_list_prepend (rate_pads, seekable);
   rate_pads = g_list_prepend (rate_pads, gst_element_get_pad (decoder, "sink"));
 
@@ -976,9 +975,11 @@ do_seek (GtkWidget * widget)
 
       g_print ("seek to %" GST_TIME_FORMAT " on pad %s:%s\n",
           GST_TIME_ARGS (real), GST_DEBUG_PAD_NAME (seekable));
-      s_event =
-          gst_event_new_seek (GST_FORMAT_TIME | GST_SEEK_METHOD_SET |
-          GST_SEEK_FLAG_FLUSH, real);
+
+
+      s_event = gst_event_new_seek (1.0,
+          GST_FORMAT_TIME,
+          GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_NONE, 0);
 
       res = gst_pad_send_event (seekable, s_event);
 
@@ -993,9 +994,9 @@ do_seek (GtkWidget * widget)
       g_print ("seek to %" GST_TIME_FORMAT " on element %s\n",
           GST_TIME_ARGS (real), GST_ELEMENT_NAME (seekable));
 
-      s_event =
-          gst_event_new_seek (GST_FORMAT_TIME | GST_SEEK_METHOD_SET |
-          GST_SEEK_FLAG_FLUSH, real);
+      s_event = gst_event_new_seek (1.0,
+          GST_FORMAT_TIME,
+          GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_NONE, 0);
 
       res = gst_element_send_event (seekable, s_event);
 
index a505618..d026bfb 100644 (file)
@@ -389,6 +389,10 @@ gst_ogg_pad_event (GstPad * pad, GstEvent * event)
     {
       gboolean running;
       gboolean flush;
+      GstFormat format;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
 
       /* can't seek if we are not seekable, FIXME could pass the
        * seek query upstream after converting it to bytes using
@@ -398,17 +402,19 @@ gst_ogg_pad_event (GstPad * pad, GstEvent * event)
         GST_DEBUG ("seek on non seekable stream");
         goto done_unref;
       }
+      gst_event_parse_seek (event, NULL, &format, &flags,
+          &cur_type, &cur, &stop_type, &stop);
+
       /* we can only seek on time */
-      if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_TIME) {
+      if (format != GST_FORMAT_TIME) {
         res = FALSE;
         GST_DEBUG ("can only seek on TIME");
         goto done_unref;
       }
-      ogg->segment_start = GST_EVENT_SEEK_OFFSET (event);
-      ogg->segment_stop = GST_EVENT_SEEK_ENDOFFSET (event);
-      ogg->segment_play =
-          !!(GST_EVENT_SEEK_TYPE (event) & GST_SEEK_FLAG_SEGMENT_LOOP);
-      flush = !!(GST_EVENT_SEEK_TYPE (event) & GST_SEEK_FLAG_FLUSH);
+      ogg->segment_start = cur;
+      ogg->segment_stop = stop;
+      ogg->segment_play = !!(flags & GST_SEEK_FLAG_SEGMENT);
+      flush = !!(flags & GST_SEEK_FLAG_FLUSH);
       gst_event_unref (event);
 
       GST_DEBUG ("segment positions set to %" GST_TIME_FORMAT "-%"
@@ -774,9 +780,9 @@ gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
         GstEvent *event;
 
         /* create the discont event we are going to send out */
-        event = gst_event_new_discontinuous (1.0,
+        event = gst_event_new_newsegment (1.0,
             GST_FORMAT_TIME, (gint64) chain->start_time - chain->begin_time,
-            (gint64) chain->last_time - chain->begin_time, NULL);
+            (gint64) chain->last_time - chain->begin_time, (gint64) 0);
 
         gst_ogg_demux_activate_chain (ogg, chain, event);
 
@@ -1082,8 +1088,8 @@ gst_ogg_demux_handle_event (GstPad * pad, GstEvent * event)
   GstOggDemux *ogg = GST_OGG_DEMUX (GST_PAD_PARENT (pad));
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_DISCONTINUOUS:
-      GST_DEBUG_OBJECT (ogg, "got a discont event");
+    case GST_EVENT_NEWSEGMENT:
+      GST_DEBUG_OBJECT (ogg, "got a new segment event");
       ogg_sync_reset (&ogg->sync);
       gst_event_unref (event);
       break;
@@ -1266,7 +1272,7 @@ gst_ogg_demux_deactivate_current_chain (GstOggDemux * ogg)
   for (i = 0; i < chain->streams->len; i++) {
     GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
 
-    gst_pad_push_event (GST_PAD (pad), gst_event_new (GST_EVENT_EOS));
+    gst_pad_push_event (GST_PAD (pad), gst_event_new_eos ());
     gst_element_remove_pad (GST_ELEMENT (ogg), GST_PAD (pad));
   }
   /* if we cannot seek back to the chain, we can destroy the chain 
@@ -1361,7 +1367,7 @@ gst_ogg_demux_perform_seek (GstOggDemux * ogg, gboolean flush)
   if (flush) {
     gint i;
 
-    gst_pad_push_event (ogg->sinkpad, gst_event_new_flush (FALSE));
+    gst_pad_push_event (ogg->sinkpad, gst_event_new_flush_start ());
 
     GST_CHAIN_LOCK (ogg);
     for (i = 0; i < ogg->chains->len; i++) {
@@ -1371,7 +1377,7 @@ gst_ogg_demux_perform_seek (GstOggDemux * ogg, gboolean flush)
       for (j = 0; j < chain->streams->len; j++) {
         GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, j);
 
-        gst_pad_push_event (GST_PAD (pad), gst_event_new_flush (FALSE));
+        gst_pad_push_event (GST_PAD (pad), gst_event_new_flush_start ());
       }
     }
     GST_CHAIN_UNLOCK (ogg);
@@ -1386,7 +1392,7 @@ gst_ogg_demux_perform_seek (GstOggDemux * ogg, gboolean flush)
 
   /* we need to stop flushing on the srcpad as we're going to use it
    * next. We can do this as we have the STREAM lock now. */
-  gst_pad_push_event (ogg->sinkpad, gst_event_new_flush (TRUE));
+  gst_pad_push_event (ogg->sinkpad, gst_event_new_flush_stop ());
 
   {
     gint i;
@@ -1543,12 +1549,12 @@ gst_ogg_demux_perform_seek (GstOggDemux * ogg, gboolean flush)
 
     /* we have to send the flush to the old chain, not the new one */
     if (flush)
-      gst_ogg_demux_send_event (ogg, gst_event_new_flush (TRUE));
+      gst_ogg_demux_send_event (ogg, gst_event_new_flush_stop ());
 
     /* create the discont event we are going to send out */
-    event = gst_event_new_discontinuous (1.0,
+    event = gst_event_new_newsegment (1.0,
         GST_FORMAT_TIME, (gint64) ogg->segment_start,
-        (gint64) ogg->segment_stop, NULL);
+        (gint64) ogg->segment_stop, 0);
 
     if (chain != ogg->current_chain) {
       /* switch to different chain, send discont on new chain */
@@ -2177,7 +2183,7 @@ gst_ogg_demux_loop (GstOggPad * pad)
       gst_element_post_message (GST_ELEMENT (ogg),
           gst_message_new_segment_done (GST_OBJECT (ogg), ogg->total_time));
     } else {
-      gst_ogg_demux_send_event (ogg, gst_event_new (GST_EVENT_EOS));
+      gst_ogg_demux_send_event (ogg, gst_event_new_eos ());
     }
     goto pause;
   }
@@ -2207,7 +2213,7 @@ pause:
     GST_LOG_OBJECT (ogg, "pausing task, reason %d", ret);
     gst_pad_pause_task (ogg->sinkpad);
     if (GST_FLOW_IS_FATAL (ret)) {
-      gst_ogg_demux_send_event (ogg, gst_event_new (GST_EVENT_EOS));
+      gst_ogg_demux_send_event (ogg, gst_event_new_eos ());
       GST_ELEMENT_ERROR (ogg, STREAM, STOPPED,
           ("stream stopped, reason %d", ret),
           ("stream stopped, reason %d", ret));
index 1d7d065..d158f5e 100644 (file)
@@ -935,7 +935,7 @@ gst_ogg_mux_collected (GstCollectPads * pads, GstOggMux * ogg_mux)
       ogg_mux->next_ts = GST_BUFFER_TIMESTAMP (ogg_mux->pulling->buffer);
     } else {
       /* no pad to pull on, send EOS */
-      gst_pad_push_event (ogg_mux->srcpad, gst_event_new (GST_EVENT_EOS));
+      gst_pad_push_event (ogg_mux->srcpad, gst_event_new_eos ());
       return GST_FLOW_WRONG_STATE;
     }
   }
index d5d30c1..9591f0e 100644 (file)
@@ -523,14 +523,21 @@ theora_dec_src_event (GstPad * pad, GstEvent * event)
 {
   gboolean res = TRUE;
   GstTheoraDec *dec;
-  GstFormat format;
 
   dec = GST_THEORA_DEC (GST_PAD_PARENT (pad));
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEEK:{
-      gint64 value;
+      GstFormat format, tformat;
+      gdouble rate;
       GstEvent *real_seek;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
+      gint64 tcur, tstop;
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
 
       /* we have to ask our peer to seek to time here as we know
        * nothing about how to generate a granulepos from the src
@@ -538,17 +545,17 @@ theora_dec_src_event (GstPad * pad, GstEvent * event)
        * 
        * First bring the requested format to time 
        */
-      format = GST_FORMAT_TIME;
-      if (!(res = theora_dec_src_convert (pad, GST_EVENT_SEEK_FORMAT (event),
-                  GST_EVENT_SEEK_OFFSET (event), &format, &value)))
+      tformat = GST_FORMAT_TIME;
+      if (!(res = theora_dec_src_convert (pad, format, cur, &tformat, &tcur)))
+        goto error;
+      if (!(res = theora_dec_src_convert (pad, format, stop, &tformat, &tstop)))
         goto error;
 
       /* then seek with time on the peer */
-      real_seek = gst_event_new_seek (
-          (GST_EVENT_SEEK_TYPE (event) & ~GST_SEEK_FORMAT_MASK) |
-          format, value);
+      real_seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+          flags, cur_type, tcur, stop_type, tstop);
 
-      res = gst_pad_send_event (GST_PAD_PEER (dec->sinkpad), real_seek);
+      res = gst_pad_push_event (dec->sinkpad, real_seek);
 
       gst_event_unref (event);
       break;
@@ -594,7 +601,7 @@ theora_dec_sink_event (GstPad * pad, GstEvent * event)
       ret = gst_pad_push_event (dec->srcpad, event);
       GST_STREAM_UNLOCK (pad);
       break;
-    case GST_EVENT_DISCONTINUOUS:
+    case GST_EVENT_NEWSEGMENT:
       GST_STREAM_LOCK (pad);
       dec->need_keyframe = TRUE;
       dec->granulepos = -1;
index a31ad5e..f6e505e 100644 (file)
@@ -3,11 +3,13 @@ plugin_LTLIBRARIES = libgstvorbis.la
 libgstvorbis_la_SOURCES = vorbis.c \
        vorbisdec.c vorbisenc.c vorbisparse.c
 libgstvorbis_la_CFLAGS = $(GST_CFLAGS) $(VORBIS_CFLAGS) 
+
 ## AM_PATH_VORBIS also sets VORBISENC_LIBS
 libgstvorbis_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstvorbis_la_LIBADD = \
        $(top_builddir)/gst-libs/gst/tag/libgsttagedit-@GST_MAJORMINOR@.la \
        $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+       $(top_builddir)/gst-libs/gst/oggmapper/libgstoggmapper-@GST_MAJORMINOR@.la \
        $(GST_LIBS) \
        $(VORBIS_LIBS) $(VORBISENC_LIBS)
 
index 66eb4f8..e5821e9 100644 (file)
@@ -341,19 +341,35 @@ vorbis_dec_src_event (GstPad * pad, GstEvent * event)
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEEK:{
-      gint64 value;
-      GstFormat my_format = GST_FORMAT_TIME;
-
-      /* convert to time */
-      res = vorbis_dec_convert (pad, GST_EVENT_SEEK_FORMAT (event),
-          GST_EVENT_SEEK_OFFSET (event), &my_format, &value);
-      if (res) {
-        GstEvent *real_seek = gst_event_new_seek (
-            (GST_EVENT_SEEK_TYPE (event) & ~GST_SEEK_FORMAT_MASK) |
-            GST_FORMAT_TIME, value);
-
-        res = gst_pad_send_event (GST_PAD_PEER (dec->sinkpad), real_seek);
-      }
+      GstFormat format, tformat;
+      gdouble rate;
+      GstEvent *real_seek;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
+      gint64 tcur, tstop;
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
+
+      /* we have to ask our peer to seek to time here as we know
+       * nothing about how to generate a granulepos from the src
+       * formats or anything.
+       *
+       * First bring the requested format to time
+       */
+      tformat = GST_FORMAT_TIME;
+      if (!(res = vorbis_dec_convert (pad, format, cur, &tformat, &tcur)))
+        goto error;
+      if (!(res = vorbis_dec_convert (pad, format, stop, &tformat, &tstop)))
+        goto error;
+
+      /* then seek with time on the peer */
+      real_seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+          flags, cur_type, tcur, stop_type, tstop);
+
+      res = gst_pad_send_event (GST_PAD_PEER (dec->sinkpad), real_seek);
+
       gst_event_unref (event);
       break;
     }
@@ -363,6 +379,10 @@ vorbis_dec_src_event (GstPad * pad, GstEvent * event)
   }
 
   return res;
+
+error:
+  gst_event_unref (event);
+  return res;
 }
 
 static gboolean
@@ -380,7 +400,7 @@ vorbis_dec_sink_event (GstPad * pad, GstEvent * event)
       ret = gst_pad_push_event (dec->srcpad, event);
       GST_STREAM_UNLOCK (pad);
       break;
-    case GST_EVENT_DISCONTINUOUS:
+    case GST_EVENT_NEWSEGMENT:
       GST_STREAM_LOCK (pad);
       dec->granulepos = -1;
 #ifdef HAVE_VORBIS_SYNTHESIS_RESTART
index 471a82f..76b5ab4 100644 (file)
@@ -838,7 +838,10 @@ gst_vorbisenc_sink_event (GstPad * pad, GstEvent * event)
       break;
     case GST_EVENT_TAG:
       if (vorbisenc->tags) {
-        gst_tag_list_insert (vorbisenc->tags, gst_event_tag_get_list (event),
+        GstTagList *list;
+
+        gst_event_parse_tag (event, &list);
+        gst_tag_list_insert (vorbisenc->tags, list,
             gst_tag_setter_get_merge_mode (GST_TAG_SETTER (vorbisenc)));
       } else {
         g_assert_not_reached ();
@@ -959,7 +962,7 @@ gst_vorbisenc_chain (GstPad * pad, GstBuffer * buffer)
     vorbis_block_clear (&vorbisenc->vb);
     vorbis_dsp_clear (&vorbisenc->vd);
     vorbis_info_clear (&vorbisenc->vi);
-    gst_pad_push_event (vorbisenc->srcpad, gst_event_new (GST_EVENT_EOS));
+    gst_pad_push_event (vorbisenc->srcpad, gst_event_new_eos ());
     //gst_element_set_eos (GST_ELEMENT (vorbisenc));
   }
   return GST_FLOW_OK;
index f3db83d..23fe015 100644 (file)
@@ -179,7 +179,9 @@ cb_probe (GstPad * pad, GstEvent * e, gpointer user_data)
 
   if (GST_EVENT_TYPE (e) == GST_EVENT_TAG) {
     gchar *codec;               //, *lang;
-    GstTagList *list = gst_event_tag_get_list (e);
+    GstTagList *list;
+
+    gst_event_parse_tag (e, &list);
 
     if (gst_tag_list_get_string (list, GST_TAG_VIDEO_CODEC, &codec)) {
       g_free (info->codec);
index 241166a..a295914 100644 (file)
@@ -172,13 +172,18 @@ static gboolean
 gst_subparse_src_event (GstPad * pad, GstEvent * event)
 {
   GstSubparse *self = GST_SUBPARSE (gst_pad_get_parent (pad));
+  GstFormat format;
+  GstSeekType type;
 
 #define grvif(x,y) g_return_val_if_fail (x, y)
 
-  /* we guaranteed these with the eventmask */
   grvif (GST_EVENT_TYPE (event) == GST_EVENT_SEEK, FALSE);
-  grvif (GST_EVENT_SEEK_FORMAT (event) == GST_FORMAT_TIME, FALSE);
-  grvif (GST_EVENT_SEEK_METHOD (event) == GST_SEEK_METHOD_SET, FALSE);
+
+  gst_event_parse_seek (event, NULL, &format, NULL, &type, NULL, NULL, NULL);
+
+  /* we guaranteed these with the eventmask */
+  grvif (format == GST_FORMAT_TIME, FALSE);
+  grvif (type == GST_SEEK_TYPE_SET, FALSE);
 
   gst_event_unref (event);
 
@@ -190,6 +195,8 @@ gst_subparse_src_event (GstPad * pad, GstEvent * event)
 
   GST_STREAM_UNLOCK (self->sinkpad);
 
+  gst_object_unref (self);
+
   return TRUE;
 }
 
index 94d6c36..42f1174 100644 (file)
@@ -380,15 +380,18 @@ gst_videorate_event (GstPad * pad, GstEvent * event)
     goto done;
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_DISCONTINUOUS:
+    case GST_EVENT_NEWSEGMENT:
     {
-      gint64 start, end;
+      gint64 start, stop;
+      GstFormat format;
 
       GST_STREAM_LOCK (pad);
 
-      if (!(gst_event_discont_get_value (event, GST_FORMAT_TIME, &start, &end)))
+      gst_event_parse_newsegment (event, NULL, &format, &start, &stop, NULL);
+
+      if (format != GST_FORMAT_TIME) {
         GST_WARNING ("Got discont but doesn't have GST_FORMAT_TIME value");
-      else {
+      else {
         gst_videorate_blank_data (videorate);
         videorate->first_ts = start;
       }
index 5a77cb0..a08e556 100644 (file)
@@ -603,7 +603,8 @@ gst_videoscale_handle_src_event (GstPad * pad, GstEvent * event)
     case GST_EVENT_NAVIGATION:
       event =
           GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
-      structure = event->event_data.structure.structure;
+
+      structure = (GstStructure *) gst_event_get_structure (event);
       if (gst_structure_get_double (structure, "pointer_x", &a)) {
         gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE,
             a * videoscale->from_width / videoscale->to_width, NULL);
index 10d183c..e29e763 100644 (file)
@@ -340,24 +340,27 @@ gst_videotestsrc_event (GstBaseSrc * bsrc, GstEvent * event)
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEEK:
     {
-      switch (GST_EVENT_SEEK_FORMAT (event)) {
+      GstFormat format;
+      GstSeekType cur_type, stop_type;
+      GstSeekFlags flags;
+      gint64 cur, stop;
+
+      gst_event_parse_seek (event, NULL, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
+
+      switch (format) {
         case GST_FORMAT_TIME:
-          new_n_frames =
-              GST_EVENT_SEEK_OFFSET (event) * (double) videotestsrc->rate /
-              GST_SECOND;
+          new_n_frames = cur * (double) videotestsrc->rate / GST_SECOND;
           videotestsrc->segment_start_frame = new_n_frames;
           videotestsrc->segment_end_frame =
-              GST_EVENT_SEEK_ENDOFFSET (event) * (double) videotestsrc->rate /
-              GST_SECOND;
-          videotestsrc->segment =
-              GST_EVENT_SEEK_TYPE (event) & GST_SEEK_FLAG_SEGMENT_LOOP;
+              stop * (double) videotestsrc->rate / GST_SECOND;
+          videotestsrc->segment = flags & GST_SEEK_FLAG_SEGMENT;
           break;
         case GST_FORMAT_DEFAULT:
-          new_n_frames = GST_EVENT_SEEK_OFFSET (event);
+          new_n_frames = cur;
           videotestsrc->segment_start_frame = new_n_frames;
-          videotestsrc->segment_end_frame = GST_EVENT_SEEK_ENDOFFSET (event);
-          videotestsrc->segment =
-              GST_EVENT_SEEK_TYPE (event) & GST_SEEK_FLAG_SEGMENT_LOOP;
+          videotestsrc->segment_end_frame = stop;
+          videotestsrc->segment = flags & GST_SEEK_FLAG_SEGMENT;
           break;
         default:
           res = FALSE;
index 80b4b36..ba31d18 100644 (file)
@@ -1447,8 +1447,7 @@ gst_ximagesink_navigation_send_event (GstNavigation * navigation,
   GstXImageSink *ximagesink = GST_XIMAGESINK (navigation);
   GstEvent *event;
 
-  event = gst_event_new (GST_EVENT_NAVIGATION);
-  event->event_data.structure.structure = structure;
+  event = gst_event_new_custom (GST_EVENT_NAVIGATION, structure);
 
   g_mutex_lock (ximagesink->nav_lock);
   ximagesink->pend_nav_events =
index e441d01..66c7c64 100644 (file)
@@ -1702,8 +1702,7 @@ gst_xvimagesink_navigation_send_event (GstNavigation * navigation,
   GstEvent *event;
   double x, y;
 
-  event = gst_event_new (GST_EVENT_NAVIGATION);
-  event->event_data.structure.structure = structure;
+  event = gst_event_new_custom (GST_EVENT_NAVIGATION, structure);
 
   /* Converting pointer coordinates to the non scaled geometry */
   if (gst_structure_get_double (structure, "pointer_x", &x)) {
index 7de7ae1..5bd6ed6 100644 (file)
@@ -86,7 +86,7 @@ setup_dynamic_link (GstElement * element, const gchar * padname,
   connect->target = target;
   connect->bin = bin;
 
-  g_signal_connect (G_OBJECT (element), "new_pad", G_CALLBACK (dynamic_link),
+  g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
       connect);
 }
 
@@ -158,7 +158,6 @@ make_dv_pipeline (const gchar * location)
   rate_pads = g_list_prepend (rate_pads, seekable);
 
   seekable = gst_element_get_pad (decoder, "audio");
-  seekable_pads = g_list_prepend (seekable_pads, seekable);
   rate_pads = g_list_prepend (rate_pads, seekable);
   rate_pads = g_list_prepend (rate_pads, gst_element_get_pad (decoder, "sink"));
 
@@ -976,9 +975,11 @@ do_seek (GtkWidget * widget)
 
       g_print ("seek to %" GST_TIME_FORMAT " on pad %s:%s\n",
           GST_TIME_ARGS (real), GST_DEBUG_PAD_NAME (seekable));
-      s_event =
-          gst_event_new_seek (GST_FORMAT_TIME | GST_SEEK_METHOD_SET |
-          GST_SEEK_FLAG_FLUSH, real);
+
+
+      s_event = gst_event_new_seek (1.0,
+          GST_FORMAT_TIME,
+          GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_NONE, 0);
 
       res = gst_pad_send_event (seekable, s_event);
 
@@ -993,9 +994,9 @@ do_seek (GtkWidget * widget)
       g_print ("seek to %" GST_TIME_FORMAT " on element %s\n",
           GST_TIME_ARGS (real), GST_ELEMENT_NAME (seekable));
 
-      s_event =
-          gst_event_new_seek (GST_FORMAT_TIME | GST_SEEK_METHOD_SET |
-          GST_SEEK_FLAG_FLUSH, real);
+      s_event = gst_event_new_seek (1.0,
+          GST_FORMAT_TIME,
+          GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_NONE, 0);
 
       res = gst_element_send_event (seekable, s_event);