Commit 43fa8e78 authored by Julian Scheel's avatar Julian Scheel Committed by Jean-Baptiste Kempf

mmal/deinterlace: Simplify flushing

It is not required to disable mmal ports before flushing them.
Signed-off-by: default avatarJulian Scheel <julian@jusst.de>
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 47c81c46
...@@ -456,44 +456,40 @@ static picture_t *deinterlace(filter_t *filter, picture_t *picture) ...@@ -456,44 +456,40 @@ static picture_t *deinterlace(filter_t *filter, picture_t *picture)
buffer->length = sys->input->buffer_size; buffer->length = sys->input->buffer_size;
buffer->data = picture->p[0].p_pixels; buffer->data = picture->p[0].p_pixels;
vlc_mutex_lock(&sys->buffer_cond_mutex);
status = mmal_port_send_buffer(sys->input, buffer); status = mmal_port_send_buffer(sys->input, buffer);
if (status != MMAL_SUCCESS) { if (status != MMAL_SUCCESS) {
msg_Err(filter, "Failed to send buffer to input port (status=%"PRIx32" %s)", msg_Err(filter, "Failed to send buffer to input port (status=%"PRIx32" %s)",
status, mmal_status_to_string(status)); status, mmal_status_to_string(status));
} else {
sys->input_in_transit++;
vlc_cond_signal(&sys->buffer_cond);
} }
sys->input_in_transit++; vlc_mutex_unlock(&sys->buffer_cond_mutex);
out: out:
vlc_mutex_unlock(&sys->mutex);
return ret; return ret;
} }
static void flush(filter_t *filter) static void flush(filter_t *filter)
{ {
filter_sys_t *sys = filter->p_sys; filter_sys_t *sys = filter->p_sys;
MMAL_STATUS_T status;
mmal_port_disable(sys->output); if (!sys->input_in_transit && !sys->output_in_transit)
mmal_port_disable(sys->input); return;
msg_Dbg(filter, "flush: Disable port (%d, %d in transit)",
sys->input_in_transit, sys->output_in_transit);
mmal_port_flush(sys->output); mmal_port_flush(sys->output);
mmal_port_flush(sys->input); mmal_port_flush(sys->input);
status = mmal_port_enable(sys->input, input_port_cb);
if (status != MMAL_SUCCESS) {
msg_Err(filter, "Failed to enable input port %s (status=%"PRIx32" %s)",
sys->input->name, status, mmal_status_to_string(status));
return;
}
status = mmal_port_enable(sys->output, output_port_cb);
if (status != MMAL_SUCCESS) {
msg_Err(filter, "Failed to enable output port %s (status=%"PRIx32" %s)",
sys->output->name, status, mmal_status_to_string(status));
}
msg_Dbg(filter, "flush: wait for all buffers to be returned"); msg_Dbg(filter, "flush: wait for all buffers to be returned");
vlc_mutex_lock(&sys->mutex); vlc_mutex_lock(&sys->mutex);
while (sys->input_in_transit || sys->output_in_transit) while (sys->input_in_transit || sys->output_in_transit)
vlc_cond_wait(&sys->buffer_cond, &sys->mutex); vlc_cond_wait(&sys->buffer_cond, &sys->mutex);
vlc_mutex_unlock(&sys->mutex); vlc_mutex_unlock(&sys->mutex);
msg_Dbg(filter, "flush: done");
} }
static void control_port_cb(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer) static void control_port_cb(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment