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:
Wim Taymans 2011-06-02 18:43:28 +02:00
parent fedbdec0ed
commit 62758d8ff1

View file

@ -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 {