}
case GST_EVENT_SEGMENT:
{
+ GstAudioMixerPad *pad = GST_AUDIO_MIXER_PAD (aggpad);
const GstSegment *segment;
+
gst_event_parse_segment (event, &segment);
if (segment->rate != agg->segment.rate) {
GST_ERROR_OBJECT (aggpad,
res = FALSE;
gst_event_unref (event);
event = NULL;
+ } else {
+ /* Ideally, this should only be set when the new segment causes running
+ * times to change, and hence needs discont calculation in fill_buffer */
+ pad->new_segment = TRUE;
}
break;
}
if (GST_BUFFER_IS_DISCONT (inbuf)
|| GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_RESYNC)
- || pad->next_offset == -1) {
+ || pad->new_segment || pad->next_offset == -1) {
discont = TRUE;
+ pad->new_segment = FALSE;
} else {
guint64 diff, max_sample_diff;
/* Last time we noticed a discont */
GstClockTime discont_time;
+
+ /* A new unhandled segment event has been received */
+ gboolean new_segment;
};
struct _GstAudioMixerPadClass {