g_mutex_unlock (&comp->messages_lock);
}
+/* NOTE: comp->messages_lock will be used */
+static void
+gst_omx_component_send_message (GstOMXComponent * comp, GstOMXMessage * msg)
+{
+ g_mutex_lock (&comp->messages_lock);
+ if (msg)
+ g_queue_push_tail (&comp->messages, msg);
+ g_cond_broadcast (&comp->messages_cond);
+ g_mutex_unlock (&comp->messages_lock);
+}
+
static OMX_ERRORTYPE
EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData)
GST_DEBUG_OBJECT (comp->parent, "State change to %d finished",
msg->content.state_set.state);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
break;
}
case OMX_CommandFlush:{
GST_DEBUG_OBJECT (comp->parent, "Port %u flushed",
msg->content.flush.port);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
break;
}
case OMX_CommandPortEnable:
msg->content.port_enable.port,
(msg->content.port_enable.enable ? "enabled" : "disabled"));
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
break;
}
default:
gst_omx_error_to_string (msg->content.error.error),
msg->content.error.error);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
break;
}
case OMX_EventPortSettingsChanged:
GST_DEBUG_OBJECT (comp->parent, "Settings changed (port index: %d)",
msg->content.port_settings_changed.port);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
-
+ gst_omx_component_send_message (comp, msg);
break;
}
case OMX_EventPortFormatDetected:
GST_DEBUG_OBJECT (comp->parent, "Port %u emptied buffer %p (%p)",
buf->port->index, buf, buf->omx_buf->pBuffer);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
return OMX_ErrorNone;
}
GST_DEBUG_OBJECT (comp->parent, "Port %u filled buffer %p (%p)",
buf->port->index, buf, buf->omx_buf->pBuffer);
- g_mutex_lock (&comp->messages_lock);
- g_queue_push_tail (&comp->messages, msg);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, msg);
return OMX_ErrorNone;
}
g_list_free (comp->pending_reconfigure_outports);
comp->pending_reconfigure_outports = NULL;
/* Notify all inports that are still waiting */
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, NULL);
}
err = OMX_SendCommand (comp->handle, OMX_CommandStateSet, state, NULL);
comp->last_error = err;
g_mutex_unlock (&comp->lock);
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, NULL);
}
/* NOTE: Uses comp->lock and comp->messages_lock */
GST_ERROR_OBJECT (comp->parent, "Component is in error state: %s (0x%08x)",
gst_omx_error_to_string (err), err);
g_queue_push_tail (&port->pending_buffers, buf);
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_lock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, NULL);
goto done;
}
GST_DEBUG_OBJECT (comp->parent, "Port %u is flushing, not releasing buffer",
port->index);
g_queue_push_tail (&port->pending_buffers, buf);
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, NULL);
goto done;
}
gboolean signalled;
OMX_ERRORTYPE last_error;
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
+ gst_omx_component_send_message (comp, NULL);
/* Now flush the port */
port->flushed = FALSE;
break;
}
}
- if (!comp->pending_reconfigure_outports) {
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
- }
+ if (!comp->pending_reconfigure_outports)
+ gst_omx_component_send_message (comp, NULL);
}
done:
break;
}
}
- if (!comp->pending_reconfigure_outports) {
- g_mutex_lock (&comp->messages_lock);
- g_cond_broadcast (&comp->messages_cond);
- g_mutex_unlock (&comp->messages_lock);
- }
+ if (!comp->pending_reconfigure_outports)
+ gst_omx_component_send_message (comp, NULL);
}
}