GStreamer compat
This commit is contained in:
parent
5e11986838
commit
6ebdec1d78
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue