From 595dd27ede9d060d90517219e8750515c8c5e136 Mon Sep 17 00:00:00 2001 From: Alexey Chernov Date: Mon, 25 Nov 2013 20:49:50 +0400 Subject: [PATCH] videoencoder: Release STREAM_LOCK during gst_pad_push() Release STREAM_LOCK before calling gst_pad_push() and take it back afterward so that upstream isn't blocked while output buffer is being pushed downstream. https://bugzilla.gnome.org/show_bug.cgi?id=715192 --- gst-libs/gst/video/gstvideoencoder.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index dc5998974f..400be26ef6 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -2297,7 +2297,9 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, discont = FALSE; } + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); gst_pad_push (encoder->srcpad, gst_buffer_ref (tmpbuf)); + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); } priv->new_headers = FALSE; } @@ -2335,8 +2337,11 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, gst_video_encoder_release_frame (encoder, frame); frame = NULL; - if (ret == GST_FLOW_OK) + if (ret == GST_FLOW_OK) { + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); ret = gst_pad_push (encoder->srcpad, buffer); + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); + } done: /* handed out */