aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2021-03-23 15:09:06 +0100
committerMarvin W <git@larma.de>2021-03-23 15:11:00 +0100
commitb01f6f9ef7c0e8b0a15149426a47a238a5f6f1ce (patch)
treec5802a0446fed13a0b006eed9aa564968089afad
parentc8a37c02462f3eef2c6d26fbfbe2079da1b7a34f (diff)
downloaddino-b01f6f9ef7c0e8b0a15149426a47a238a5f6f1ce.tar.gz
dino-b01f6f9ef7c0e8b0a15149426a47a238a5f6f1ce.zip
Resample audio data for common 48k sample rate
-rw-r--r--plugins/rtp/src/codec_util.vala10
-rw-r--r--plugins/rtp/src/device.vala16
2 files changed, 16 insertions, 10 deletions
diff --git a/plugins/rtp/src/codec_util.vala b/plugins/rtp/src/codec_util.vala
index e419b5ad..6bd465c1 100644
--- a/plugins/rtp/src/codec_util.vala
+++ b/plugins/rtp/src/codec_util.vala
@@ -202,7 +202,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
string decode = element_name ?? get_decode_element_name(media, codec);
if (depay == null || decode == null) return null;
string decode_prefix = get_decode_prefix(media, codec, decode) ?? "";
- return @"$depay name=$base_name-rtp-depay ! $decode_prefix$decode name=$base_name-decode ! $(media)convert name=$base_name-convert";
+ string resample = media == "audio" ? @" ! audioresample name=$base_name-resample" : "";
+ return @"$depay name=$base_name-rtp-depay ! $decode_prefix$decode name=$base_name-decode ! $(media)convert name=$base_name-convert$resample";
}
public Gst.Element? get_decode_bin(string media, JingleRtp.PayloadType payload_type, string? name = null) {
@@ -224,11 +225,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
if (pay == null || encode == null) return null;
string encode_prefix = get_encode_prefix(media, codec, encode) ?? "";
string encode_suffix = get_encode_suffix(media, codec, encode) ?? "";
- if (media == "audio") {
- return @"audioconvert name=$base_name-convert ! audioresample name=$base_name-resample ! $encode_prefix$encode$encode_suffix ! $pay pt=$pt name=$base_name-rtp-pay";
- } else {
- return @"$(media)convert name=$base_name-convert ! $encode_prefix$encode$encode_suffix ! $pay pt=$pt name=$base_name-rtp-pay";
- }
+ string resample = media == "audio" ? @" ! audioresample name=$base_name-resample" : "";
+ return @"$(media)convert name=$base_name-convert$resample ! $encode_prefix$encode$encode_suffix ! $pay pt=$pt name=$base_name-rtp-pay";
}
public Gst.Element? get_encode_bin(string media, JingleRtp.PayloadType payload_type, string? name = null) {
diff --git a/plugins/rtp/src/device.vala b/plugins/rtp/src/device.vala
index 570c6667..20762f77 100644
--- a/plugins/rtp/src/device.vala
+++ b/plugins/rtp/src/device.vala
@@ -59,7 +59,7 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
if (element == null) create();
links++;
if (mixer != null) return mixer;
- if (is_sink && media == "audio") return plugin.echoprobe;
+ if (is_sink && media == "audio") return filter;
return element;
}
@@ -146,9 +146,10 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
element.@set("sync", false);
}
if (is_sink && media == "audio") {
-// mixer = Gst.ElementFactory.make("audiomixer", @"$id-mixer");
-// pipe.add(mixer);
-// mixer.link(plugin.echoprobe);
+ 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);
}
plugin.unpause();
@@ -173,6 +174,13 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
pipe.remove(mixer);
mixer = null;
} else if (is_sink && media == "audio") {
+ if (filter != null) {
+ filter.set_locked_state(true);
+ filter.set_state(Gst.State.NULL);
+ filter.unlink(plugin.echoprobe);
+ pipe.remove(filter);
+ filter = null;
+ }
plugin.echoprobe.unlink(element);
}
element.set_locked_state(true);