mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
omxvideoenc: Release the video codec stream lock before acquiring an input buffer
Otherwise the srcpad task might block on this lock and no buffers ever become available again.
This commit is contained in:
parent
b45197c0d7
commit
fb5d700ec9
1 changed files with 15 additions and 2 deletions
|
@ -1474,6 +1474,11 @@ gst_omx_video_enc_finish (GstBaseVideoEncoder * encoder)
|
|||
return TRUE;
|
||||
self->eos = TRUE;
|
||||
|
||||
/* Make sure to release the base class stream lock, otherwise
|
||||
* _loop() can't call _finish_frame() and we might block forever
|
||||
* because no input buffers are released */
|
||||
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self);
|
||||
|
||||
/* Send an EOS buffer to the component and let the base
|
||||
* class drop the EOS event. We will send it later when
|
||||
* the EOS buffer arrives on the output port. */
|
||||
|
@ -1483,6 +1488,8 @@ gst_omx_video_enc_finish (GstBaseVideoEncoder * encoder)
|
|||
gst_omx_port_release_buffer (self->in_port, buf);
|
||||
}
|
||||
|
||||
GST_BASE_VIDEO_CODEC_STREAM_LOCK (self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1502,14 +1509,20 @@ gst_omx_video_enc_drain (GstOMXVideoEnc * self)
|
|||
if (self->eos)
|
||||
return GST_FLOW_OK;
|
||||
|
||||
/* Make sure to release the base class stream lock, otherwise
|
||||
* _loop() can't call _finish_frame() and we might block forever
|
||||
* because no input buffers are released */
|
||||
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self);
|
||||
|
||||
/* Send an EOS buffer to the component and let the base
|
||||
* class drop the EOS event. We will send it later when
|
||||
* the EOS buffer arrives on the output port. */
|
||||
acq_ret = gst_omx_port_acquire_buffer (self->in_port, &buf);
|
||||
if (acq_ret != GST_OMX_ACQUIRE_BUFFER_OK)
|
||||
if (acq_ret != GST_OMX_ACQUIRE_BUFFER_OK) {
|
||||
GST_BASE_VIDEO_CODEC_STREAM_LOCK (self);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self);
|
||||
g_mutex_lock (self->drain_lock);
|
||||
self->draining = TRUE;
|
||||
buf->omx_buf->nFlags |= OMX_BUFFERFLAG_EOS;
|
||||
|
|
Loading…
Reference in a new issue