#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__);
/*---------------------------------------------------------------------------
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);
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);
}
/***************************************************************/