omxaudioenc: Always flush the ports and make sure no processing is happening in ...
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 10 Nov 2011 14:03:05 +0000 (15:03 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 10 Nov 2011 14:03:05 +0000 (15:03 +0100)
This fixes a race condition that happened when seeking
very often in a short period of time.

omx/gstomxaudioenc.c

index ca045a8..557d5ef 100644 (file)
@@ -806,19 +806,17 @@ gst_omx_audio_enc_flush (GstBaseAudioEncoder * 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->out_port, TRUE);
+  gst_omx_port_set_flushing (self->in_port, TRUE);
+  gst_omx_port_set_flushing (self->out_port, TRUE);
 
-    /* Wait until the srcpad loop is finished */
-    GST_PAD_STREAM_LOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self));
-    GST_PAD_STREAM_UNLOCK (GST_BASE_AUDIO_ENCODER_SRC_PAD (self));
+  /* Wait until the srcpad loop is finished */
+  GST_PAD_STREAM_LOCK (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->out_port, FALSE);
-  }
+  gst_omx_port_set_flushing (self->in_port, FALSE);
+  gst_omx_port_set_flushing (self->out_port, FALSE);
 
   /* Start the srcpad loop again */
   self->downstream_flow_ret = GST_FLOW_OK;