media_streamer_gst: Revise pull/push packet API 28/256328/1
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 30 Mar 2021 08:31:01 +0000 (17:31 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 1 Apr 2021 07:09:06 +0000 (16:09 +0900)
Logs are revised to clarify the situation.

[Version] 0.1.138
[Issue type] Refactoring

Change-Id: Iaa6e3750c8dce712e2905f51236cc9873b74eba4
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-streamer.spec
src/media_streamer.c
src/media_streamer_gst.c

index 2171d83ca94af58dfede13c830fb2272401f603f..32230894957223b60abd0f0ceb9c2e5542390bac 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.137
+Version:    0.1.138
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index e12de32400569931e02345990c5cd84789673523..9242feb6dd9cd67cbd4a88f9af91803a55ed1352 100644 (file)
@@ -703,8 +703,6 @@ int media_streamer_node_push_packet(media_streamer_node_h src, media_packet_h pa
        ms_retvm_if(ms_node->type != MEDIA_STREAMER_NODE_TYPE_SRC, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Node type must be Src type for pushing packets.");
        ms_retvm_if(ms_node->subtype != MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Source Node must be a custom type for pushing packets.");
 
-       ms_debug_fleave();
-
        return ms_element_push_packet(ms_node->gst_element, packet);
 }
 
@@ -720,8 +718,6 @@ int media_streamer_node_pull_packet(media_streamer_node_h sink, media_packet_h *
        ms_retvm_if(ms_node->type != MEDIA_STREAMER_NODE_TYPE_SINK, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Node type must be Sink type for pulling packets.");
        ms_retvm_if(ms_node->subtype != MEDIA_STREAMER_NODE_SINK_TYPE_CUSTOM, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Sink Node must be a custom type for pulling packets.");
 
-       ms_debug_fleave();
-
        return ms_element_pull_packet(ms_node->gst_element, packet);
 }
 
index ce77f603f3b6d0b48d534251b02d21f1c22f12af..214dd823dbb162651121d3b63580ed5ba6432dad 100644 (file)
@@ -2741,56 +2741,62 @@ int ms_element_push_packet(GstElement *src_element, media_packet_h packet)
        GstBuffer *buffer = NULL;
        GstFlowReturn gst_ret = GST_FLOW_OK;
        guchar *buffer_data = NULL;
+       GstMapInfo buff_info = GST_MAP_INFO_INIT;
+       guint64 pts = 0;
+       guint64 duration = 0;
+       guint64 size = 0;
 
-       ms_debug_fenter();
-
-       ms_retvm_if(src_element == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+       ms_retvm_if(src_element == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "src_element is NULL");
 
-       if (packet == NULL) {
-               g_signal_emit_by_name(G_OBJECT(src_element), "end-of-stream", &gst_ret, NULL);
-               return MEDIA_STREAMER_ERROR_NONE;
+       if (!packet) {
+               ms_debug("packet is NULL");
+               goto send_eos;
        }
 
        media_packet_get_buffer_data_ptr(packet, (void **)&buffer_data);
+       if (!buffer_data) {
+               ms_debug("buffer_data is NULL");
+               goto send_eos;
+       }
 
-       if (buffer_data != NULL) {
-               GstMapInfo buff_info = GST_MAP_INFO_INIT;
-               guint64 pts = 0;
-               guint64 duration = 0;
-               guint64 size = 0;
-
-               media_packet_get_buffer_size(packet, &size);
-
-               buffer = gst_buffer_new_and_alloc(size);
-               if (!buffer) {
-                       ms_error("Failed to allocate memory for push buffer");
-                       return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-               }
+       media_packet_get_buffer_size(packet, &size);
 
-               if (gst_buffer_map(buffer, &buff_info, GST_MAP_READWRITE)) {
-                       memcpy(buff_info.data, buffer_data, size);
-                       buff_info.size = size;
-                       gst_buffer_unmap(buffer, &buff_info);
-               }
+       buffer = gst_buffer_new_and_alloc(size);
+       if (!buffer) {
+               ms_error("failed to gst_buffer_new_and_alloc()");
+               return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+       }
 
-               media_packet_get_pts(packet, &pts);
-               GST_BUFFER_PTS(buffer) = pts;
+       if (gst_buffer_map(buffer, &buff_info, GST_MAP_READWRITE)) {
+               memcpy(buff_info.data, buffer_data, size);
+               buff_info.size = size;
+               gst_buffer_unmap(buffer, &buff_info);
+       }
 
-               media_packet_get_duration(packet, &duration);
-               GST_BUFFER_DURATION(buffer) = duration;
+       media_packet_get_pts(packet, &pts);
+       GST_BUFFER_PTS(buffer) = pts;
 
-               g_signal_emit_by_name(G_OBJECT(src_element), "push-buffer", buffer, &gst_ret, NULL);
-               gst_buffer_unref(buffer);
+       media_packet_get_duration(packet, &duration);
+       GST_BUFFER_DURATION(buffer) = duration;
 
-       } else {
-               g_signal_emit_by_name(G_OBJECT(src_element), "end-of-stream", &gst_ret, NULL);
+       g_signal_emit_by_name(G_OBJECT(src_element), "push-buffer", buffer, &gst_ret, NULL);
+       gst_buffer_unref(buffer);
+       if (gst_ret != GST_FLOW_OK) {
+               ms_error("failed to emit 'push-buffer' signal, gst_ret[%d]", gst_ret);
+               return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
        }
 
-       if (gst_ret != GST_FLOW_OK)
-               return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+       ms_debug("emit 'push-buffer' signal done");
+       return MEDIA_STREAMER_ERROR_NONE;
 
-       ms_debug_fleave();
+send_eos:
+       g_signal_emit_by_name(G_OBJECT(src_element), "end-of-stream", &gst_ret, NULL);
+       if (gst_ret != GST_FLOW_OK) {
+               ms_error("failed to emit 'end-of-stream' signal, gst_ret[%d]", gst_ret);
+               return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+       }
 
+       ms_debug("emit 'end-of-stream' signal done");
        return MEDIA_STREAMER_ERROR_NONE;
 }
 
@@ -2803,45 +2809,47 @@ int ms_element_pull_packet(GstElement *sink_element, media_packet_h *packet)
        GstMapInfo map = {0,};
        GstBuffer *buffer = NULL;
 
-       ms_debug_fenter();
-
-       ms_retvm_if(sink_element == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
-       ms_retvm_if(packet == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+       ms_retvm_if(sink_element == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "sink_element is NULL");
+       ms_retvm_if(packet == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "packet is NULL");
 
        /* Retrieve the buffer */
        g_signal_emit_by_name(sink_element, "pull-sample", &sample, NULL);
-       ms_retvm_if(sample == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "Pull sample failed!");
+       ms_retvm_if(sample == NULL, MEDIA_STREAMER_ERROR_INVALID_OPERATION, "'pull-sample' failed!");
 
        ret = ms_element_get_pad_fmt(sink_element, "sink", &fmt);
-       if (ret == MEDIA_STREAMER_ERROR_NONE) {
-               buffer = gst_sample_get_buffer(sample);
-               if (!buffer) {
-                       ms_error("Failed to get buffer from sample");
-                       media_format_unref(fmt);
-                       gst_sample_unref(sample);
-                       return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-               }
-               gst_buffer_map(buffer, &map, GST_MAP_READ);
+       if (ret != MEDIA_STREAMER_ERROR_NONE)
+               goto error;
 
-               buffer_res = (guint8 *) malloc(map.size * sizeof(guint8));
-               if (buffer_res != NULL) {
-                       memcpy(buffer_res, map.data, map.size);
+       buffer = gst_sample_get_buffer(sample);
+       if (!buffer) {
+               ms_error("failed to gst_sample_get_buffer()");
+               ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+               goto error;
+       }
 
-                       media_packet_create_from_external_memory(fmt, (void *)buffer_res, map.size, NULL, NULL, packet);
-                       media_packet_set_pts(*packet, GST_BUFFER_PTS(buffer));
-                       media_packet_set_dts(*packet, GST_BUFFER_DTS(buffer));
-                       media_packet_set_pts(*packet, GST_BUFFER_DURATION(buffer));
-               } else {
-                       ms_error("Error allocation memory for packet data");
-                       ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-               }
+       gst_buffer_map(buffer, &map, GST_MAP_READ);
+
+       buffer_res = (guint8 *)malloc(map.size * sizeof(guint8));
+       if (!buffer_res) {
+               ms_error("failed to malloc()");
                gst_buffer_unmap(buffer, &map);
+               ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+               goto error;
        }
 
-       media_format_unref(fmt);
-       gst_sample_unref(sample);
+       memcpy(buffer_res, map.data, map.size);
+       media_packet_create_from_external_memory(fmt, (void *)buffer_res, map.size, NULL, NULL, packet);
+       media_packet_set_pts(*packet, GST_BUFFER_PTS(buffer));
+       media_packet_set_dts(*packet, GST_BUFFER_DTS(buffer));
+       media_packet_set_pts(*packet, GST_BUFFER_DURATION(buffer));
+       gst_buffer_unmap(buffer, &map);
 
-       ms_debug_fleave();
+       ms_debug("sample[%p, buffer:%p] packet[%p]", sample, buffer, packet);
+
+error:
+       if (fmt)
+               media_format_unref(fmt);
+       gst_sample_unref(sample);
 
        return ret;
 }