media_streamer_test: Free the data field of packet after receiving the data by pull API 12/256112/2
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 29 Mar 2021 11:32:03 +0000 (20:32 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 31 Mar 2021 00:37:17 +0000 (09:37 +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.137
[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 8c28c9a260fdf2804c56faf53ce4972718b920ec..2171d83ca94af58dfede13c830fb2272401f603f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.136
+Version:    0.1.137
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index baf0aeace813fdd074a8f8b814477184ddfb693e..debec685280cd81e029ac2e1c57721f20cac008e 100644 (file)
@@ -150,6 +150,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__);
 
 /*---------------------------------------------------------------------------
@@ -1619,54 +1621,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);
@@ -1681,9 +1683,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);
 }
 
 /***************************************************************/