mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
examples/seeking/seek.c: Update seek example.
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
This commit is contained in:
parent
9df508faaa
commit
ee8ed3a89d
16 changed files with 178 additions and 85 deletions
39
ChangeLog
39
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):
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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;
|
||||
GstFormat format, tformat;
|
||||
gdouble rate;
|
||||
GstEvent *real_seek;
|
||||
GstSeekFlags flags;
|
||||
GstSeekType cur_type, stop_type;
|
||||
gint64 cur, stop;
|
||||
gint64 tcur, tstop;
|
||||
|
||||
/* 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);
|
||||
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);
|
||||
|
||||
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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue