omxvideoenc: Improve debugging of EOS and draining

This commit is contained in:
Sebastian Dröge 2011-11-10 14:54:17 +01:00
parent b36db47cba
commit abd399ecbc

View file

@ -1469,8 +1469,10 @@ gst_omx_video_enc_finish (GstBaseVideoEncoder * encoder)
GST_DEBUG_OBJECT (self, "Sending EOS to the component"); GST_DEBUG_OBJECT (self, "Sending EOS to the component");
/* Don't send EOS buffer twice, this doesn't work */ /* Don't send EOS buffer twice, this doesn't work */
if (self->eos) if (self->eos) {
GST_DEBUG_OBJECT (self, "Component is already EOS");
return TRUE; return TRUE;
}
self->eos = TRUE; self->eos = TRUE;
/* Make sure to release the base class stream lock, otherwise /* Make sure to release the base class stream lock, otherwise
@ -1485,6 +1487,9 @@ gst_omx_video_enc_finish (GstBaseVideoEncoder * encoder)
if (acq_ret == GST_OMX_ACQUIRE_BUFFER_OK) { if (acq_ret == GST_OMX_ACQUIRE_BUFFER_OK) {
buf->omx_buf->nFlags |= OMX_BUFFERFLAG_EOS; buf->omx_buf->nFlags |= OMX_BUFFERFLAG_EOS;
gst_omx_port_release_buffer (self->in_port, buf); gst_omx_port_release_buffer (self->in_port, buf);
GST_DEBUG_OBJECT (self, "Sent EOS to the component");
} else {
GST_ERROR_OBJECT (self, "Failed to acquire buffer for EOS: %d", acq_ret);
} }
GST_BASE_VIDEO_CODEC_STREAM_LOCK (self); GST_BASE_VIDEO_CODEC_STREAM_LOCK (self);
@ -1500,13 +1505,17 @@ gst_omx_video_enc_drain (GstOMXVideoEnc * self)
GST_DEBUG_OBJECT (self, "Draining component"); GST_DEBUG_OBJECT (self, "Draining component");
if (!self->started) if (!self->started) {
GST_DEBUG_OBJECT (self, "Component not started yet");
return GST_FLOW_OK; return GST_FLOW_OK;
}
self->started = FALSE; self->started = FALSE;
/* Don't send EOS buffer twice, this doesn't work */ /* Don't send EOS buffer twice, this doesn't work */
if (self->eos) if (self->eos) {
GST_DEBUG_OBJECT (self, "Component is EOS already");
return GST_FLOW_OK; return GST_FLOW_OK;
}
/* Make sure to release the base class stream lock, otherwise /* Make sure to release the base class stream lock, otherwise
* _loop() can't call _finish_frame() and we might block forever * _loop() can't call _finish_frame() and we might block forever
@ -1519,6 +1528,8 @@ gst_omx_video_enc_drain (GstOMXVideoEnc * self)
acq_ret = gst_omx_port_acquire_buffer (self->in_port, &buf); 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); GST_BASE_VIDEO_CODEC_STREAM_LOCK (self);
GST_ERROR_OBJECT (self, "Failed to acquire buffer for draining: %d",
acq_ret);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }