omxvideoenc: Fix deadlock between srcpad stream lock and ::reset()
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 7 Nov 2011 10:05:29 +0000 (11:05 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 7 Nov 2011 10:05:29 +0000 (11:05 +0100)
omx/gstomxvideoenc.c

index 61eaf93..c7dd5ef 100644 (file)
@@ -758,6 +758,16 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self)
   GST_DEBUG_OBJECT (self, "Handling buffer: 0x%08x %lu", buf->omx_buf->nFlags,
       buf->omx_buf->nTimeStamp);
 
+  /* This prevents a deadlock between the srcpad stream
+   * lock and the videocodec stream lock, if ::reset()
+   * is called at the wrong time
+   */
+  if (gst_omx_port_is_flushing (self->out_port)) {
+    GST_DEBUG_OBJECT (self, "Flushing");
+    gst_omx_port_release_buffer (self->out_port, buf);
+    goto flushing;
+  }
+
   frame = _find_nearest_frame (self, buf);
   if ((buf->omx_buf->nFlags & OMX_BUFFERFLAG_CODECCONFIG)
       && buf->omx_buf->nFilledLen > 0) {