}
/* The appsink has received a buffer */
-static void __ms_sink_new_buffer_cb(GstElement *sink, gpointer *data)
+static GstFlowReturn __ms_sink_new_sample_cb(GstElement *sink, gpointer *data)
{
- media_streamer_node_s *ms_sink = (media_streamer_node_s *) data;
- media_streamer_sink_callbacks_s *sink_callbacks = NULL;
- media_streamer_sink_data_ready_cb data_ready_cb = NULL;
+ media_streamer_node_s *ms_sink = (media_streamer_node_s *)data;
+ media_streamer_sink_callbacks_s *sink_callbacks;
+ media_streamer_sink_data_ready_cb data_ready_cb;
- ms_debug_fenter();
+ ms_retvm_if(ms_sink == NULL, GST_FLOW_ERROR, "data is NULL");
- ms_retm_if(ms_sink == NULL, "data is NULL");
+ if (!ms_sink->callbacks_structure) {
+ ms_debug("callbacks_structure is NULL");
+ return GST_FLOW_OK;
+ }
- if (ms_sink->callbacks_structure != NULL) {
- sink_callbacks = (media_streamer_sink_callbacks_s *) ms_sink->callbacks_structure;
- data_ready_cb = (media_streamer_sink_data_ready_cb) sink_callbacks->data_ready_cb.callback;
+ sink_callbacks = (media_streamer_sink_callbacks_s *)ms_sink->callbacks_structure;
+ data_ready_cb = (media_streamer_sink_data_ready_cb)sink_callbacks->data_ready_cb.callback;
- if (data_ready_cb)
- data_ready_cb((media_streamer_node_h) ms_sink, sink_callbacks->data_ready_cb.user_data);
+ if (data_ready_cb) {
+ ms_debug("=====> invoke data ready callback(%p)", data_ready_cb);
+ data_ready_cb((media_streamer_node_h)ms_sink, sink_callbacks->data_ready_cb.user_data);
+ ms_debug("<===== end of the callback");
+ } else {
+ ms_debug("data ready callback is NULL");
}
- ms_debug_fleave();
+ return GST_FLOW_OK;
}
//LCOV_EXCL_START
node->gst_element = ms_element_create(plugin_name, NULL);
if (node->gst_element) {
g_object_set(G_OBJECT(node->gst_element), "emit-signals", TRUE, NULL);
- ms_signal_create(&node->sig_list, node->gst_element, "new-sample", G_CALLBACK(__ms_sink_new_buffer_cb), node);
+ ms_signal_create(&node->sig_list, node->gst_element, "new-sample", G_CALLBACK(__ms_sink_new_sample_cb), node);
ms_signal_create(&node->sig_list, node->gst_element, "eos", G_CALLBACK(sink_eos), node);
}
break;