omxaudioenc: Always flush the ports and make sure no processing is happening in ::flush

This fixes a race condition that happened when seeking
very often in a short period of time.
This commit is contained in:
Sebastian Dröge 2011-11-10 15:03:05 +01:00
parent fbe171ee2c
commit b62ffe1ada

View file

@ -806,19 +806,17 @@ gst_omx_audio_enc_flush (GstBaseAudioEncoder * encoder)
GST_DEBUG_OBJECT (self, "Resetting encoder"); GST_DEBUG_OBJECT (self, "Resetting encoder");
if (self->started) { gst_omx_audio_enc_drain (self);
gst_omx_audio_enc_drain (self);
gst_omx_port_set_flushing (self->in_port, TRUE); gst_omx_port_set_flushing (self->in_port, TRUE);
gst_omx_port_set_flushing (self->out_port, TRUE); gst_omx_port_set_flushing (self->out_port, TRUE);
/* Wait until the srcpad loop is finished */ /* Wait until the srcpad loop is finished */
GST_PAD_STREAM_LOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self)); GST_PAD_STREAM_LOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self));
GST_PAD_STREAM_UNLOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self)); GST_PAD_STREAM_UNLOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self));
gst_omx_port_set_flushing (self->in_port, FALSE); gst_omx_port_set_flushing (self->in_port, FALSE);
gst_omx_port_set_flushing (self->out_port, FALSE); gst_omx_port_set_flushing (self->out_port, FALSE);
}
/* Start the srcpad loop again */ /* Start the srcpad loop again */
self->downstream_flow_ret = GST_FLOW_OK; self->downstream_flow_ret = GST_FLOW_OK;