omxvideodec: Only flush the component ports after we passed input to them

This commit is contained in:
Sebastian Dröge 2011-07-14 07:58:41 +02:00
parent 252624c7cc
commit 961445aa1b
2 changed files with 15 additions and 7 deletions

View file

@ -233,6 +233,7 @@ gst_omx_video_dec_open (GstOMXVideoDec * self)
self->component =
gst_omx_component_new (GST_OBJECT_CAST (self), klass->core_name,
klass->component_name, klass->component_role);
self->started = FALSE;
if (!self->component)
return FALSE;
@ -780,6 +781,7 @@ gst_omx_video_dec_reset (GstBaseVideoDecoder * decoder)
GST_BASE_VIDEO_CODEC (self)->frames = NULL;
GST_OBJECT_UNLOCK (self);
if (self->started) {
gst_omx_port_set_flushing (self->in_port, TRUE);
gst_omx_port_set_flushing (self->out_port, TRUE);
@ -789,6 +791,7 @@ gst_omx_video_dec_reset (GstBaseVideoDecoder * decoder)
gst_omx_port_set_flushing (self->in_port, FALSE);
gst_omx_port_set_flushing (self->out_port, FALSE);
}
/* Start the srcpad loop again */
gst_pad_start_task (GST_BASE_VIDEO_CODEC_SRC_PAD (self),
@ -853,6 +856,7 @@ gst_omx_video_dec_handle_frame (GstBaseVideoDecoder * decoder,
memcpy (buf->omx_buf->pBuffer + buf->omx_buf->nOffset,
GST_BUFFER_DATA (codec_data), GST_BUFFER_SIZE (codec_data));
self->started = TRUE;
gst_omx_port_release_buffer (self->in_port, buf);
gst_buffer_replace (&self->codec_data, NULL);
/* Acquire new buffer for the actual frame */
@ -909,6 +913,7 @@ gst_omx_video_dec_handle_frame (GstBaseVideoDecoder * decoder,
*/
offset += buf->omx_buf->nFilledLen;
self->started = TRUE;
gst_omx_port_release_buffer (self->in_port, buf);
}

View file

@ -55,6 +55,9 @@ struct _GstOMXVideoDec
/* < private > */
GstBuffer *codec_data;
/* TRUE if the component is configured and saw
* the first buffer */
gboolean started;
};
struct _GstOMXVideoDecClass