mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-01 17:31:10 +00:00
omx: Add a method to send message
This commit is contained in:
parent
2d913c6773
commit
8c3bd103ff
1 changed files with 27 additions and 54 deletions
81
omx/gstomx.c
81
omx/gstomx.c
|
@ -354,6 +354,17 @@ gst_omx_component_handle_messages (GstOMXComponent * comp)
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
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
|
static OMX_ERRORTYPE
|
||||||
EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData)
|
OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData)
|
||||||
|
@ -377,10 +388,7 @@ EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
GST_DEBUG_OBJECT (comp->parent, "State change to %d finished",
|
GST_DEBUG_OBJECT (comp->parent, "State change to %d finished",
|
||||||
msg->content.state_set.state);
|
msg->content.state_set.state);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OMX_CommandFlush:{
|
case OMX_CommandFlush:{
|
||||||
|
@ -391,10 +399,7 @@ EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
GST_DEBUG_OBJECT (comp->parent, "Port %u flushed",
|
GST_DEBUG_OBJECT (comp->parent, "Port %u flushed",
|
||||||
msg->content.flush.port);
|
msg->content.flush.port);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OMX_CommandPortEnable:
|
case OMX_CommandPortEnable:
|
||||||
|
@ -408,10 +413,7 @@ EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
msg->content.port_enable.port,
|
msg->content.port_enable.port,
|
||||||
(msg->content.port_enable.enable ? "enabled" : "disabled"));
|
(msg->content.port_enable.enable ? "enabled" : "disabled"));
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -435,10 +437,7 @@ EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
gst_omx_error_to_string (msg->content.error.error),
|
gst_omx_error_to_string (msg->content.error.error),
|
||||||
msg->content.error.error);
|
msg->content.error.error);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OMX_EventPortSettingsChanged:
|
case OMX_EventPortSettingsChanged:
|
||||||
|
@ -465,11 +464,7 @@ EventHandler (OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
|
||||||
GST_DEBUG_OBJECT (comp->parent, "Settings changed (port index: %d)",
|
GST_DEBUG_OBJECT (comp->parent, "Settings changed (port index: %d)",
|
||||||
msg->content.port_settings_changed.port);
|
msg->content.port_settings_changed.port);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OMX_EventPortFormatDetected:
|
case OMX_EventPortFormatDetected:
|
||||||
|
@ -509,10 +504,7 @@ EmptyBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
|
||||||
GST_DEBUG_OBJECT (comp->parent, "Port %u emptied buffer %p (%p)",
|
GST_DEBUG_OBJECT (comp->parent, "Port %u emptied buffer %p (%p)",
|
||||||
buf->port->index, buf, buf->omx_buf->pBuffer);
|
buf->port->index, buf, buf->omx_buf->pBuffer);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
|
|
||||||
return OMX_ErrorNone;
|
return OMX_ErrorNone;
|
||||||
}
|
}
|
||||||
|
@ -545,10 +537,7 @@ FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
|
||||||
GST_DEBUG_OBJECT (comp->parent, "Port %u filled buffer %p (%p)",
|
GST_DEBUG_OBJECT (comp->parent, "Port %u filled buffer %p (%p)",
|
||||||
buf->port->index, buf, buf->omx_buf->pBuffer);
|
buf->port->index, buf, buf->omx_buf->pBuffer);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, msg);
|
||||||
g_queue_push_tail (&comp->messages, msg);
|
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
|
|
||||||
return OMX_ErrorNone;
|
return OMX_ErrorNone;
|
||||||
}
|
}
|
||||||
|
@ -705,9 +694,7 @@ gst_omx_component_set_state (GstOMXComponent * comp, OMX_STATETYPE state)
|
||||||
g_list_free (comp->pending_reconfigure_outports);
|
g_list_free (comp->pending_reconfigure_outports);
|
||||||
comp->pending_reconfigure_outports = NULL;
|
comp->pending_reconfigure_outports = NULL;
|
||||||
/* Notify all inports that are still waiting */
|
/* Notify all inports that are still waiting */
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = OMX_SendCommand (comp->handle, OMX_CommandStateSet, state, NULL);
|
err = OMX_SendCommand (comp->handle, OMX_CommandStateSet, state, NULL);
|
||||||
|
@ -925,9 +912,7 @@ gst_omx_component_set_last_error (GstOMXComponent * comp, OMX_ERRORTYPE err)
|
||||||
comp->last_error = err;
|
comp->last_error = err;
|
||||||
g_mutex_unlock (&comp->lock);
|
g_mutex_unlock (&comp->lock);
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: Uses comp->lock and comp->messages_lock */
|
/* NOTE: Uses comp->lock and comp->messages_lock */
|
||||||
|
@ -1249,9 +1234,7 @@ gst_omx_port_release_buffer (GstOMXPort * port, GstOMXBuffer * buf)
|
||||||
GST_ERROR_OBJECT (comp->parent, "Component is in error state: %s (0x%08x)",
|
GST_ERROR_OBJECT (comp->parent, "Component is in error state: %s (0x%08x)",
|
||||||
gst_omx_error_to_string (err), err);
|
gst_omx_error_to_string (err), err);
|
||||||
g_queue_push_tail (&port->pending_buffers, buf);
|
g_queue_push_tail (&port->pending_buffers, buf);
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1259,9 +1242,7 @@ gst_omx_port_release_buffer (GstOMXPort * port, GstOMXBuffer * buf)
|
||||||
GST_DEBUG_OBJECT (comp->parent, "Port %u is flushing, not releasing buffer",
|
GST_DEBUG_OBJECT (comp->parent, "Port %u is flushing, not releasing buffer",
|
||||||
port->index);
|
port->index);
|
||||||
g_queue_push_tail (&port->pending_buffers, buf);
|
g_queue_push_tail (&port->pending_buffers, buf);
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1334,9 +1315,7 @@ gst_omx_port_set_flushing (GstOMXPort * port, gboolean flush)
|
||||||
gboolean signalled;
|
gboolean signalled;
|
||||||
OMX_ERRORTYPE last_error;
|
OMX_ERRORTYPE last_error;
|
||||||
|
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
|
|
||||||
/* Now flush the port */
|
/* Now flush the port */
|
||||||
port->flushed = FALSE;
|
port->flushed = FALSE;
|
||||||
|
@ -1977,11 +1956,8 @@ gst_omx_port_reconfigure (GstOMXPort * port)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!comp->pending_reconfigure_outports) {
|
if (!comp->pending_reconfigure_outports)
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
@ -2040,11 +2016,8 @@ gst_omx_port_manual_reconfigure (GstOMXPort * port, gboolean start)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!comp->pending_reconfigure_outports) {
|
if (!comp->pending_reconfigure_outports)
|
||||||
g_mutex_lock (&comp->messages_lock);
|
gst_omx_component_send_message (comp, NULL);
|
||||||
g_cond_broadcast (&comp->messages_cond);
|
|
||||||
g_mutex_unlock (&comp->messages_lock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue