return MEDIA_STREAMER_ERROR_NONE;
}
+int media_streamer_node_set_decoded_ready_cb(media_streamer_node_h node, media_streamer_node_decoded_ready_cb callback, void *user_data)
+{
+ media_streamer_node_s *ms_node = (media_streamer_node_s *) node;
+
+ ms_debug_fenter();
+
+ ms_retvm_if(ms_node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
+ ms_retvm_if(callback == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "callback is NULL");
+
+ if (ms_node->type == MEDIA_STREAMER_NODE_TYPE_WEBRTC) {
+ media_streamer_webrtc_callbacks_s **_callbacks = (media_streamer_webrtc_callbacks_s **)&(ms_node->callbacks_structure);
+
+ if (!*_callbacks) {
+ *_callbacks = (media_streamer_webrtc_callbacks_s *) calloc(1, sizeof(media_streamer_webrtc_callbacks_s));
+ ms_retvm_if(*_callbacks == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "Error allocation memory");
+ }
+ (*_callbacks)->decoded_ready_cb.callback = callback;
+ (*_callbacks)->decoded_ready_cb.user_data = user_data;
+ } else {
+ /* It can be accepted other types in the future. */
+ ms_error("Not supported node type[%d]", ms_node->type);
+ return MEDIA_STREAMER_ERROR_INVALID_PARAMETER;
+ }
+
+ ms_debug_fleave();
+
+ return MEDIA_STREAMER_ERROR_NONE;
+}
+
+int media_streamer_node_unset_decoded_ready_cb(media_streamer_node_h node)
+{
+ media_streamer_node_s *ms_node = (media_streamer_node_s *) node;
+
+ ms_debug_fenter();
+
+ ms_retvm_if(ms_node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
+
+ if (ms_node->type == MEDIA_STREAMER_NODE_TYPE_WEBRTC) {
+ media_streamer_webrtc_callbacks_s **_callbacks = (media_streamer_webrtc_callbacks_s **)&(ms_node->callbacks_structure);
+
+ ms_retvm_if(*_callbacks == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "callbacks is NULL");
+ ms_retvm_if((*_callbacks)->decoded_ready_cb.callback == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER,
+ "decoded_ready_cb.callback is NULL");
+
+ (*_callbacks)->decoded_ready_cb.callback = NULL;
+ (*_callbacks)->decoded_ready_cb.user_data = NULL;
+
+ if (!(*_callbacks)->message_cb.callback) {
+ free(ms_node->callbacks_structure);
+ ms_node->callbacks_structure = NULL;
+ }
+ } else {
+ /* It can be accepted other types in the future. */
+ ms_error("Not supported node type[%d]", ms_node->type);
+ return MEDIA_STREAMER_ERROR_INVALID_PARAMETER;
+ }
+
+ ms_debug_fleave();
+
+ return MEDIA_STREAMER_ERROR_NONE;
+}
+
int media_streamer_webrtc_node_set_message_cb(media_streamer_node_h webrtc, media_streamer_webrtc_message_cb callback, void *user_data)
{
media_streamer_node_s *ms_node = (media_streamer_node_s *) webrtc;
+ media_streamer_webrtc_callbacks_s **_callbacks;
ms_retvm_if(ms_node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
+ ms_retvm_if(callback == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "callback is NULL");
ms_retvm_if(ms_node->type != MEDIA_STREAMER_NODE_TYPE_WEBRTC, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is not for WebRTC");
ms_debug_fenter();
- ms_node->user_cb.callback = callback;
- ms_node->user_cb.user_data = user_data;
+ _callbacks = (media_streamer_webrtc_callbacks_s **)&(ms_node->callbacks_structure);
+ if (!*_callbacks) {
+ *_callbacks = (media_streamer_webrtc_callbacks_s *) calloc(1, sizeof(media_streamer_webrtc_callbacks_s));
+ ms_retvm_if(*_callbacks == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "Error allocation memory");
+ }
+
+ (*_callbacks)->message_cb.callback = callback;
+ (*_callbacks)->message_cb.user_data = user_data;
ms_debug_fleave();
int media_streamer_webrtc_node_unset_message_cb(media_streamer_node_h webrtc)
{
media_streamer_node_s *ms_node = (media_streamer_node_s *) webrtc;
+ media_streamer_webrtc_callbacks_s **_callbacks;
+
+ ms_debug_fenter();
ms_retvm_if(ms_node == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
ms_retvm_if(ms_node->type != MEDIA_STREAMER_NODE_TYPE_WEBRTC, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is not for WebRTC");
- ms_debug_fenter();
+ _callbacks = (media_streamer_webrtc_callbacks_s **)&(ms_node->callbacks_structure);
+
+ ms_retvm_if(*_callbacks == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "callbacks is NULL");
+ ms_retvm_if((*_callbacks)->message_cb.callback == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "message_cb.callback is NULL");
- ms_node->user_cb.callback = NULL;
- ms_node->user_cb.user_data = NULL;
+ (*_callbacks)->message_cb.callback = NULL;
+ (*_callbacks)->message_cb.user_data = NULL;
+
+ if (!(*_callbacks)->decoded_ready_cb.callback) {
+ free(ms_node->callbacks_structure);
+ ms_node->callbacks_structure = NULL;
+ }
ms_debug_fleave();
return MEDIA_STREAMER_ERROR_NONE;
-}
\ No newline at end of file
+}