mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-20 11:00:16 +00:00
mad: port to new API
Port to new segment API. Eat Caps events. No need to set caps on buffers.
This commit is contained in:
parent
fedbdec0ed
commit
62758d8ff1
1 changed files with 20 additions and 20 deletions
|
@ -624,7 +624,7 @@ index_seek (GstMad * mad, GstPad * pad, GstEvent * event)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (format == GST_FORMAT_TIME) {
|
if (format == GST_FORMAT_TIME) {
|
||||||
gst_segment_set_seek (&mad->segment, rate, format, flags, cur_type,
|
gst_segment_do_seek (&mad->segment, rate, format, flags, cur_type,
|
||||||
cur, stop_type, stop, NULL);
|
cur, stop_type, stop, NULL);
|
||||||
} else {
|
} else {
|
||||||
gst_segment_init (&mad->segment, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&mad->segment, GST_FORMAT_UNDEFINED);
|
||||||
|
@ -707,7 +707,7 @@ normal_seek (GstMad * mad, GstPad * pad, GstEvent * event)
|
||||||
time_stop = stop;
|
time_stop = stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_segment_set_seek (&mad->segment, rate, GST_FORMAT_TIME, flags, cur_type,
|
gst_segment_do_seek (&mad->segment, rate, GST_FORMAT_TIME, flags, cur_type,
|
||||||
time_cur, stop_type, time_stop, NULL);
|
time_cur, stop_type, time_stop, NULL);
|
||||||
|
|
||||||
GST_DEBUG ("seek to time %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
|
GST_DEBUG ("seek to time %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
|
||||||
|
@ -952,27 +952,23 @@ gst_mad_sink_event (GstPad * pad, GstEvent * event)
|
||||||
GST_DEBUG ("handling %s event", GST_EVENT_TYPE_NAME (event));
|
GST_DEBUG ("handling %s event", GST_EVENT_TYPE_NAME (event));
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_NEWSEGMENT:{
|
case GST_EVENT_SEGMENT:
|
||||||
GstFormat format;
|
{
|
||||||
gboolean update;
|
GstSegment segment;
|
||||||
gdouble rate, applied_rate;
|
|
||||||
gint64 start, stop, pos;
|
|
||||||
|
|
||||||
gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
|
gst_event_copy_segment (event, &segment);
|
||||||
&format, &start, &stop, &pos);
|
|
||||||
|
|
||||||
if (format == GST_FORMAT_TIME) {
|
if (segment.format == GST_FORMAT_TIME) {
|
||||||
/* FIXME: is this really correct? */
|
/* FIXME: is this really correct? */
|
||||||
mad->tempsize = 0;
|
mad->tempsize = 0;
|
||||||
result = gst_pad_push_event (mad->srcpad, event);
|
result = gst_pad_push_event (mad->srcpad, event);
|
||||||
/* we don't need to restart when we get here */
|
/* we don't need to restart when we get here */
|
||||||
mad->restart = FALSE;
|
mad->restart = FALSE;
|
||||||
mad->framed = TRUE;
|
mad->framed = TRUE;
|
||||||
gst_segment_set_newsegment_full (&mad->segment, update, rate,
|
gst_segment_copy_into (&segment, &mad->segment);
|
||||||
applied_rate, GST_FORMAT_TIME, start, stop, pos);
|
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG ("dropping newsegment event in format %s",
|
GST_DEBUG ("dropping segment event in format %s",
|
||||||
gst_format_get_name (format));
|
gst_format_get_name (segment.format));
|
||||||
/* on restart the chain function will generate a new
|
/* on restart the chain function will generate a new
|
||||||
* newsegment event, so we can just drop this one */
|
* newsegment event, so we can just drop this one */
|
||||||
mad->restart = TRUE;
|
mad->restart = TRUE;
|
||||||
|
@ -1000,6 +996,11 @@ gst_mad_sink_event (GstPad * pad, GstEvent * event)
|
||||||
case GST_EVENT_FLUSH_START:
|
case GST_EVENT_FLUSH_START:
|
||||||
result = gst_pad_event_default (pad, event);
|
result = gst_pad_event_default (pad, event);
|
||||||
break;
|
break;
|
||||||
|
case GST_EVENT_CAPS:
|
||||||
|
GST_DEBUG ("dropping caps event");
|
||||||
|
gst_event_unref (event);
|
||||||
|
result = TRUE;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (mad->restart) {
|
if (mad->restart) {
|
||||||
/* Cache all other events if we still have to send a NEWSEGMENT */
|
/* Cache all other events if we still have to send a NEWSEGMENT */
|
||||||
|
@ -1691,12 +1692,12 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
GST_DEBUG ("Sending NEWSEGMENT event, start=%" GST_TIME_FORMAT,
|
GST_DEBUG ("Sending NEWSEGMENT event, start=%" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (start));
|
GST_TIME_ARGS (start));
|
||||||
|
|
||||||
gst_segment_set_newsegment (&mad->segment, FALSE, 1.0,
|
mad->segment.start = start;
|
||||||
GST_FORMAT_TIME, start, GST_CLOCK_TIME_NONE, start);
|
mad->segment.stop = GST_CLOCK_TIME_NONE;
|
||||||
|
mad->segment.time = start;
|
||||||
|
|
||||||
gst_pad_push_event (mad->srcpad,
|
gst_pad_push_event (mad->srcpad,
|
||||||
gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME,
|
gst_event_new_segment (&mad->segment));
|
||||||
start, GST_CLOCK_TIME_NONE, start));
|
|
||||||
mad->need_newsegment = FALSE;
|
mad->need_newsegment = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1712,7 +1713,6 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
|
|
||||||
/* will attach the caps to the buffer */
|
/* will attach the caps to the buffer */
|
||||||
outbuffer = gst_buffer_new_and_alloc (nsamples * mad->channels * 4);
|
outbuffer = gst_buffer_new_and_alloc (nsamples * mad->channels * 4);
|
||||||
gst_buffer_set_caps (outbuffer, GST_PAD_CAPS (mad->srcpad));
|
|
||||||
|
|
||||||
mad_synth_frame (&mad->synth, &mad->frame);
|
mad_synth_frame (&mad->synth, &mad->frame);
|
||||||
left_ch = mad->synth.pcm.samples[0];
|
left_ch = mad->synth.pcm.samples[0];
|
||||||
|
@ -1761,7 +1761,7 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
mad->discont = FALSE;
|
mad->discont = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mad->segment.last_stop = GST_BUFFER_TIMESTAMP (outbuffer);
|
mad->segment.position = GST_BUFFER_TIMESTAMP (outbuffer);
|
||||||
if (mad->segment.rate > 0.0) {
|
if (mad->segment.rate > 0.0) {
|
||||||
result = gst_pad_push (mad->srcpad, outbuffer);
|
result = gst_pad_push (mad->srcpad, outbuffer);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue