Use Suffix Extensions in Makefiles (doc, src/{arm,dht,integration,statistics}) for...
[oweals/gnunet.git] / src / conversation / gnunet_gst_test.c
1 /*
2   This file is part of GNUnet.
3   Copyright (C) 2016 GNUnet e.V.
4
5   GNUnet is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published
7   by the Free Software Foundation; either version 3, or (at your
8   option) any later version.
9
10   GNUnet is distributed in the hope that it will be useful, but
11   WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with GNUnet; see the file COPYING.  If not, write to the
17   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18   Boston, MA 02110-1301, USA.
19 */
20 /**
21  * @file conversation/gnunet_gst_test.c
22  * @brief FIXME
23  * @author Hark
24  */
25
26 #include "gnunet_gst_def.h"
27 #include "gnunet_gst.h"
28
29 int
30 main (int argc, char *argv[])
31 {
32   struct GNUNET_gstData *gst;
33   // GstBus *bus;
34   GstElement *gnunetsrc, *gnunetsink, *source, *sink, *encoder, *decoder;
35
36
37
38   // audio_message = GNUNET_malloc (UINT16_MAX);
39   //audio_message->header.type = htons (GNUNET_MESSAGE_TYPE_CONVERSATION_AUDIO);
40
41
42   //GstPipeline *pipeline;
43
44   gst = (GNUNET_gstData*)malloc(sizeof(struct GNUNET_gstData));
45
46   //gst->audio_message.header.type = htons (GNUNET_MESSAGE_TYPE_CONVERSATION_AUDIO);
47
48
49   gg_load_configuration(gst);
50 /*
51   gst->audiobackend = JACK;
52   gst->dropsilence = TRUE;
53   gst->usertp = FALSE;
54   */
55   /* Initialize GStreamer */
56   gst_init (&argc, &argv);
57
58   gst->pipeline = GST_PIPELINE(gst_pipeline_new ("gnunet-media-helper"));
59
60 #ifdef IS_SPEAKER
61   int type = SPEAKER;
62   printf("this is the speaker \n");
63 #endif
64 #ifdef IS_MIC
65   int type = MICROPHONE;
66   printf("this is the microphone \n");
67
68 #endif
69   if ( type == SPEAKER)
70   {
71
72     gnunetsrc = GST_ELEMENT(get_app(gst, SOURCE));
73
74     sink = GST_ELEMENT(get_audiobin(gst, SINK));
75     decoder = GST_ELEMENT(get_coder(gst, DECODER));
76     gst_bin_add_many( GST_BIN(gst->pipeline), gnunetsrc, decoder, sink, NULL);
77     gst_element_link_many( gnunetsrc, decoder, sink , NULL);
78
79   }
80   if ( type == MICROPHONE ) {
81
82     source = GST_ELEMENT(get_audiobin(gst, SOURCE));
83
84     encoder = GST_ELEMENT(get_coder(gst, ENCODER));
85
86     gnunetsink = GST_ELEMENT(get_app(gst, SINK));
87
88     gst_bin_add_many( GST_BIN(gst->pipeline), source, encoder, gnunetsink, NULL);
89     gst_element_link_many( source, encoder, gnunetsink , NULL);
90
91
92   }
93   /*
94   gst_bin_add_many( GST_BIN(gst->pipeline), appsource, appsink, source, encoder, decoder, sink, NULL);
95   gst_element_link_many( source, encoder, decoder, sink , NULL);
96 */
97   pl_graph(gst->pipeline);
98   /* Start playing */
99   gst_element_set_state (GST_ELEMENT(gst->pipeline), GST_STATE_PLAYING);
100
101   //pl_graph(gst->pipeline);
102
103   /* Wait until error or EOS */
104   //bus = gst_element_get_bus (GST_ELEMENT(gst->pipeline));
105   //bus_watch_id = gst_bus_add_watch (bus, gnunet_gst_bus_call, pipeline);
106
107   gg_setup_gst_bus(gst);
108 // g_print ("Running...\n");
109
110
111   // start pushing buffers
112  if ( type == MICROPHONE )
113  {
114
115
116     GMainLoop *loop;
117     loop = g_main_loop_new (NULL, FALSE);
118
119      g_main_loop_run (loop);
120
121 /*
122    while ( 1 )
123      {
124          GstFlowReturn flow;
125          flow = on_appsink_new_sample (gst->appsink, gst);
126     }
127 */
128     }
129  if ( type == SPEAKER )
130  {
131    while ( 1 )
132    {
133 //      printf("read.. \n");
134       gnunet_read(gst);
135    }
136  }
137   g_print ("Returned, stopping playback\n");
138
139   // gst_object_unref (bus);
140   gst_element_set_state (GST_ELEMENT(gst->pipeline), GST_STATE_NULL);
141   gst_object_unref (gst->pipeline);
142
143   return 0;
144 }