nvenc: Don't release stream lock on GstVideoEncoder::stop()
authorSeungha Yang <seungha.yang@navercorp.com>
Mon, 25 Mar 2019 13:24:17 +0000 (22:24 +0900)
committerSeungha Yang <seungha.yang@navercorp.com>
Mon, 25 Mar 2019 13:26:35 +0000 (22:26 +0900)
baseclass didn't take the stream lock during stop. It's valid only for
GstVideoEncoder::finish()

Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/912

sys/nvenc/gstnvbaseenc.c

index 4749c477a650cbb3118146f6e57569d897ddee12..f4b03cdd450663cffa02bf6d61ebeebca20f69dd 100644 (file)
@@ -911,10 +911,15 @@ gst_nv_base_enc_stop_bitstream_thread (GstNvBaseEnc * nvenc, gboolean force)
     g_async_queue_push (nvenc->bitstream_queue, SHUTDOWN_COOKIE);
   }
 
-  /* temporary unlock, so other thread can find and push frame */
-  GST_VIDEO_ENCODER_STREAM_UNLOCK (nvenc);
+  if (!force) {
+    /* temporary unlock during finish, so other thread can find and push frame */
+    GST_VIDEO_ENCODER_STREAM_UNLOCK (nvenc);
+  }
+
   g_thread_join (nvenc->bitstream_thread);
-  GST_VIDEO_ENCODER_STREAM_LOCK (nvenc);
+
+  if (!force)
+    GST_VIDEO_ENCODER_STREAM_LOCK (nvenc);
 
   nvenc->bitstream_thread = NULL;
   return TRUE;