/**
* @brief Removes media streamer node from nodes table.
*/
-void ms_node_remove_from_table(void *data);
+int ms_node_remove_from_table(GHashTable *nodes_table, media_streamer_node_s *node);
/**
* @brief Reads node parameters from user's bundle object.
gboolean ms_node_resources_acquire_iter(const GValue *item, GValue *ret, gpointer user_data);
gboolean ms_node_resources_release_iter(const GValue *item, GValue *ret, gpointer user_data);
gboolean ms_node_dpm_policy_check_iter(const GValue *item, GValue *ret, gpointer user_data);
+void ms_node_remove_from_table_cb(void *data);
GstElement *ms_webrtc_node_get_webrtcbin(media_streamer_node_s *webrtc_node);
#ifdef __cplusplus
Name: capi-media-streamer
Summary: A Media Streamer API
-Version: 0.1.84
+Version: 0.1.85
Release: 0
Group: Multimedia/API
License: Apache-2.0
g_mutex_lock(&ms_streamer->mutex_lock);
- if (g_hash_table_remove(ms_streamer->nodes_table, (gpointer) ms_node->name)) {
- ms_info("Node [%s] removed from Media Streamer", ms_node->name);
- } else {
- ms_error("Error: Node [%s] remove failed", ms_node->name);
- ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION;
- }
+ ret = ms_node_remove_from_table(ms_streamer->nodes_table, ms_node);
g_mutex_unlock(&ms_streamer->mutex_lock);
return MEDIA_STREAMER_ERROR_NONE;
}
-void ms_node_remove_from_table(void *data)
+int ms_node_remove_from_table(GHashTable *nodes_table, media_streamer_node_s *node)
+{
+ ms_retvm_if(nodes_table == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "nodes_table is NULL");
+ ms_retvm_if(node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
+
+ /* Removal element of this node from bin will be performed
+ * in the callback - ms_node_remove_from_table_cb(). */
+ if (!g_hash_table_remove(nodes_table, (gpointer) node->name)) {
+ ms_error("Failed to remove node [%s] from table", node->name);
+ return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+ }
+
+ return MEDIA_STREAMER_ERROR_NONE;
+}
+
+void ms_node_remove_from_table_cb(void *data)
{
media_streamer_node_s *node = (media_streamer_node_s *) data;
ms_bin_remove_element(node->gst_element);
ms_info("Node [%s] removed from Media Streamer", node->name);
} else {
- ms_error("Error: Node [%s] remove failed", node->name);
+ ms_error("Failed to unlink element of node [%s]", node->name);
}
ms_debug_fleave();
-
}
static gboolean __ms_src_need_typefind(GstPad *src_pad)
ms_load_ini_settings(&ms_streamer->ini);
- ms_streamer->nodes_table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, ms_node_remove_from_table);
+ ms_streamer->nodes_table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, ms_node_remove_from_table_cb);
ms_retvm_if(ms_streamer->nodes_table == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "Error creating hash table");
ret = ms_pipeline_create(ms_streamer);