aboutsummaryrefslogtreecommitdiff
path: root/plugins/rtp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/rtp')
-rw-r--r--plugins/rtp/CMakeLists.txt6
-rw-r--r--plugins/rtp/src/device.vala30
-rw-r--r--plugins/rtp/src/plugin.vala4
3 files changed, 30 insertions, 10 deletions
diff --git a/plugins/rtp/CMakeLists.txt b/plugins/rtp/CMakeLists.txt
index c6888459..0925ff0c 100644
--- a/plugins/rtp/CMakeLists.txt
+++ b/plugins/rtp/CMakeLists.txt
@@ -9,6 +9,10 @@ find_packages(RTP_PACKAGES REQUIRED
GstApp
)
+if(Gst_VERSION VERSION_GREATER "1.16")
+ set(RTP_DEFINITIONS GST_1_16)
+endif()
+
vala_precompile(RTP_VALA_C
SOURCES
src/codec_util.vala
@@ -25,6 +29,8 @@ CUSTOM_VAPIS
${CMAKE_BINARY_DIR}/exports/qlite.vapi
PACKAGES
${RTP_PACKAGES}
+DEFINITIONS
+ ${RTP_DEFINITIONS}
OPTIONS
--vapidir=${CMAKE_CURRENT_SOURCE_DIR}/vapi
)
diff --git a/plugins/rtp/src/device.vala b/plugins/rtp/src/device.vala
index 20762f77..3c9a38d2 100644
--- a/plugins/rtp/src/device.vala
+++ b/plugins/rtp/src/device.vala
@@ -130,11 +130,13 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
filter.@set("caps", get_best_caps());
pipe.add(filter);
element.link(filter);
- if (media == "audio") {
+ if (media == "audio" && plugin.echoprobe != null) {
dsp = Gst.ElementFactory.make("webrtcdsp", @"$id-dsp");
- dsp.@set("probe", plugin.echoprobe.name);
- pipe.add(dsp);
- filter.link(dsp);
+ if (dsp != null) {
+ dsp.@set("probe", plugin.echoprobe.name);
+ pipe.add(dsp);
+ filter.link(dsp);
+ }
}
tee = Gst.ElementFactory.make("tee", @"$id-tee");
tee.@set("allow-not-linked", true);
@@ -149,15 +151,19 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
filter = Gst.ElementFactory.make("capsfilter", @"$id-caps-filter");
filter.@set("caps", get_best_caps());
pipe.add(filter);
- filter.link(plugin.echoprobe);
- plugin.echoprobe.link(element);
+ if (plugin.echoprobe != null) {
+ filter.link(plugin.echoprobe);
+ plugin.echoprobe.link(element);
+ } else {
+ filter.link(element);
+ }
}
plugin.unpause();
}
private void destroy() {
if (mixer != null) {
- if (is_sink && media == "audio") {
+ if (is_sink && media == "audio" && plugin.echoprobe != null) {
plugin.echoprobe.unlink(mixer);
}
int linked_sink_pads = 0;
@@ -177,11 +183,17 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
if (filter != null) {
filter.set_locked_state(true);
filter.set_state(Gst.State.NULL);
- filter.unlink(plugin.echoprobe);
+ if (plugin.echoprobe != null) {
+ filter.unlink(plugin.echoprobe);
+ } else {
+ filter.unlink(element);
+ }
pipe.remove(filter);
filter = null;
}
- plugin.echoprobe.unlink(element);
+ if (plugin.echoprobe != null) {
+ plugin.echoprobe.unlink(element);
+ }
}
element.set_locked_state(true);
element.set_state(Gst.State.NULL);
diff --git a/plugins/rtp/src/plugin.vala b/plugins/rtp/src/plugin.vala
index 62e0d411..40ad1e0f 100644
--- a/plugins/rtp/src/plugin.vala
+++ b/plugins/rtp/src/plugin.vala
@@ -70,7 +70,7 @@ public class Dino.Plugins.Rtp.Plugin : RootInterface, VideoCallPlugin, Object {
// Audio echo probe
echoprobe = Gst.ElementFactory.make("webrtcechoprobe", "echo-probe");
- pipe.add(echoprobe);
+ if (echoprobe != null) pipe.add(echoprobe);
// Pipeline
pipe.auto_flush_bus = true;
@@ -178,6 +178,7 @@ public class Dino.Plugins.Rtp.Plugin : RootInterface, VideoCallPlugin, Object {
if (devices.any_match((it) => it.matches(device))) return Source.CONTINUE;
devices.add(new Device(this, device));
break;
+#if GST_1_16
case Gst.MessageType.DEVICE_CHANGED:
message.parse_device_changed(out device, out old_device);
if (device.properties.has_name("pipewire-proplist") && device.device_class.has_prefix("Audio/")) return Source.CONTINUE;
@@ -185,6 +186,7 @@ public class Dino.Plugins.Rtp.Plugin : RootInterface, VideoCallPlugin, Object {
old = devices.first_match((it) => it.matches(old_device));
if (old != null) old.update(device);
break;
+#endif
case Gst.MessageType.DEVICE_REMOVED:
message.parse_device_removed(out device);
if (device.properties.has_name("pipewire-proplist") && device.device_class.has_prefix("Audio/")) return Source.CONTINUE;