/
main.cpp
113 lines (89 loc) · 2.92 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#define DEBUG_LEVEL 3
#include <gst/gst.h>
#include <unistd.h>
#include <signal.h>
#include "Gear.h"
#include "Engine.h"
#include <stdlib.h>
bool stop = false;
void interrupt(int sig) {
stop = true;
exit(0);
}
void delayMillis(unsigned long millis) {
while (millis--)
usleep(1000);
}
int main(int argc, char** argv) {
signal(SIGINT, interrupt);
signal(SIGTERM, interrupt);
gst_init(&argc, &argv);
Engine& engine = Engine::instance();
NOTICE("== Creating one source and one sink");
GstElement* source = gst_element_factory_make("audiotestsrc", NULL);
GstElement* sink1 = gst_element_factory_make("autoaudiosink", NULL);
Gear* sourceGear = new Gear(source);
Gear* sinkGear1 = new Gear(sink1);
engine.addGear(sourceGear);
engine.addGear(sinkGear1);
AbstractPlug* out = sourceGear->getOutput("src");
AbstractPlug* in1 = sinkGear1->getInput("sink");
out->connect(in1);
// gst_object_unref (GST_OBJECT (sourceOut));
// gst_object_unref (GST_OBJECT (sinkIn));
// NOTICE("-- Quick connect/disconnect (no playback)");
// for (int i=0; i<100; i++)
// {
// out->disconnect(in1);
// out->connect(in1);
// }
//
// NOTICE("-- Starting playback");
// engine.play();
//
// NOTICE("-- Quick connect/disconnect");
// for (int i=0; i<100; i++)
// {
// out->disconnect(in1);
// out->connect(in1);
// }
//
// NOTICE("-- Audible connect/disconnect");
//
// // Marchera pas. Pour arranger il faut checker ceci:
// // http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dynamic-pipelines.html
// for (int i=0; i<10; i++)
// {
// delayMillis(500);
// out->disconnect(in1);
// delayMillis(500);
// out->connect(in1);
// }
//
// engine.pause();
NOTICE("== Creating one extra sink (testing split)");
// engine.pause();
delayMillis(1000);
// Gear* aconvert = new Gear( gst_element_factory_make("audioconvert", NULL) );
// engine.addGear(aconvert);
Gear* monoscope = new Gear( gst_element_factory_make("monoscope", NULL) );
engine.addGear(monoscope);
// Gear* vconvert = new Gear( gst_element_factory_make("videoconvert", NULL) );
// engine.addGear(vconvert);
Gear* sinkGear2 = new Gear( gst_element_factory_make("ximagesink", NULL) );
engine.addGear(sinkGear2);
// out->connect(aconvert->getInput("sink"));
// aconvert->getOutput("src")->connect(monoscope->getInput("sink"));
// monoscope->getOutput("src")->connect(vconvert->getInput("sink"));
// vconvert->getOutput("src")->connect(sinkGear2->getInput("sink"));
// vconvert->getOutput("src")->connect(sinkGear2->getInput("sink"));
// out->disconnect(in1);
out->connect(monoscope->getInput("sink"));
monoscope->getOutput("src")->connect(sinkGear2->getInput("sink"));
NOTICE("-- Starting playback");
GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(engine.pipeline()), GST_DEBUG_GRAPH_SHOW_ALL, "after_all_copied");
engine.play();
while (!stop) { delayMillis(1000); }
engine.pause();
return 0;
}