GStreamer compat

This commit is contained in:
Marvin W 2021-04-11 12:31:03 +02:00
parent 5e11986838
commit 6ebdec1d78
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A
3 changed files with 30 additions and 10 deletions

View file

@ -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
)

View file

@ -130,12 +130,14 @@ 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");
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);
pipe.add(tee);
@ -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);
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,12 +183,18 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
if (filter != null) {
filter.set_locked_state(true);
filter.set_state(Gst.State.NULL);
if (plugin.echoprobe != null) {
filter.unlink(plugin.echoprobe);
} else {
filter.unlink(element);
}
pipe.remove(filter);
filter = null;
}
if (plugin.echoprobe != null) {
plugin.echoprobe.unlink(element);
}
}
element.set_locked_state(true);
element.set_state(Gst.State.NULL);
if (filter != null) element.unlink(filter);

View file

@ -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;