media_streamer_test: Free the data field of packet after receiving the data by pull API 26/256326/1
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 29 Mar 2021 11:32:03 +0000 (20:32 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 1 Apr 2021 07:07:39 +0000 (16:07 +0900)
It is fixed to free the text data after being used.
"__" prefix are added to callback function names regarding
custom nodes.

[Version] 0.1.136
[Issue type] Test application

Change-Id: I8f975a96447058ea53ce9001f3e55e8f642d5564
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-streamer.spec
test/media_streamer_test.c

index bc5b87ebc69e48b6ca65cb249a2cec92bfad5b63..8c28c9a260fdf2804c56faf53ce4972718b920ec 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.135
+Version:    0.1.136
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 3e90b92cffbd650b8d2389e4fd1e8bae8898cdea..fdc19f030be6a6e5c929572223b41dfc76ff7b47 100644 (file)
@@ -148,6 +148,8 @@ typedef enum {
 #define DEFAULT_SEGMENT_PATH "/tmp/segment%05d.ts"
 #define DEFAULT_PLAYLIST_PATH "/tmp/playlist.m3u8"
 
+#define MAX_PUSH_PACKET_COUNT 100
+
 #define ENTER g_print("%s:%d>%s\n",__FILE__, __LINE__, __FUNCTION__);
 
 /*---------------------------------------------------------------------------
@@ -1542,54 +1544,54 @@ static void _create_adaptive_playing_manual(void)
        media_streamer_node_link(audio_dec, "src", audio_sink, "sink");
 }
 
-
-/* Application source callback */
-static void buffer_status_cb(media_streamer_node_h node, media_streamer_custom_buffer_status_e status, void *user_data)
+static void __buffer_status_cb(media_streamer_node_h node, media_streamer_custom_buffer_status_e status, void *user_data)
 {
-
        static int count = 0;
 
-       /* Try send only 10 packets */
-       if (status == MEDIA_STREAMER_CUSTOM_BUFFER_UNDERRUN && count < 10) {
-               g_print("Buffer status cb got underflow\n");
+       if (count >= MAX_PUSH_PACKET_COUNT) {
+               g_print("count is %d, call media_streamer_node_push_packet() with NULL\n", count);
+               media_streamer_node_push_packet(node, NULL);
+               return;
+       }
+
+       if (status == MEDIA_STREAMER_CUSTOM_BUFFER_UNDERRUN) {
+               g_print("%s(), underflow\n", __func__);
 
-               char *test = g_strdup_printf("[%d]This is buffer_status_cb test!", count);
+               char *test = g_strdup_printf("This is __buffer_status_cb test_%d", ++count);
                guint64 size = strlen(test);
 
                media_packet_h packet;
-               media_packet_create_from_external_memory(vfmt_encoded, (void *)test, size, NULL, NULL, &packet);
+               media_packet_create_from_external_memory(vfmt_encoded, (void *)test, size + 1, NULL, NULL, &packet);
                media_streamer_node_push_packet(node, packet);
-               count++;
 
                media_packet_destroy(packet);
-               g_free(test);
        } else {
-               media_streamer_node_push_packet(node, NULL);
-               g_print("Buffer status cb got overflow\n");
+               g_print("%s(), overflow\n", __func__);
        }
 }
 
-/* Application sink callbacks */
-static void new_buffer_cb(media_streamer_node_h node, void *user_data)
+static void __data_ready_cb(media_streamer_node_h node, void *user_data)
 {
        char *received_data = NULL;
        media_packet_h packet;
 
        media_streamer_node_pull_packet(node, &packet);
        media_packet_get_buffer_data_ptr(packet, (void **)&received_data);
-       g_print("Received new packet from appsink with data [%s]\n", received_data);
+       g_print("received data[%s]\n", received_data);
+
+       g_free(received_data);
 
        media_packet_destroy(packet);
 }
 
-static void eos_cb(media_streamer_node_h node, void *user_data)
+static void __eos_cb(media_streamer_node_h node, void *user_data)
 {
-       g_print("Got EOS cb from appsink\n");
+       g_print("%s() is called\n", __func__);
 }
 
 static void _create_custom_nodes(void)
 {
-       g_print("\n _create_custom_nodes \n");
+       g_print("\n %s \n", __func__);
 
        media_streamer_node_h app_src = NULL;
        media_streamer_node_create_src(MEDIA_STREAMER_NODE_SRC_TYPE_CUSTOM, &app_src);
@@ -1604,9 +1606,9 @@ static void _create_custom_nodes(void)
 
        media_streamer_node_link(app_src, "src", app_sink, "sink");
 
-       media_streamer_src_set_buffer_status_cb(app_src, buffer_status_cb, NULL);
-       media_streamer_sink_set_data_ready_cb(app_sink, new_buffer_cb, NULL);
-       media_streamer_sink_set_eos_cb(app_sink, eos_cb, NULL);
+       media_streamer_src_set_buffer_status_cb(app_src, __buffer_status_cb, NULL);
+       media_streamer_sink_set_data_ready_cb(app_sink, __data_ready_cb, NULL);
+       media_streamer_sink_set_eos_cb(app_sink, __eos_cb, NULL);
 }
 
 /***************************************************************/