Resample audio data for common 48k sample rate

This commit is contained in:
Marvin W 2021-03-23 15:09:06 +01:00
parent c8a37c0246
commit b01f6f9ef7
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A
2 changed files with 16 additions and 10 deletions

View file

@ -202,7 +202,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
string decode = element_name ?? get_decode_element_name(media, codec); string decode = element_name ?? get_decode_element_name(media, codec);
if (depay == null || decode == null) return null; if (depay == null || decode == null) return null;
string decode_prefix = get_decode_prefix(media, codec, decode) ?? ""; 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) { 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; if (pay == null || encode == null) return null;
string encode_prefix = get_encode_prefix(media, codec, encode) ?? ""; string encode_prefix = get_encode_prefix(media, codec, encode) ?? "";
string encode_suffix = get_encode_suffix(media, codec, encode) ?? ""; string encode_suffix = get_encode_suffix(media, codec, encode) ?? "";
if (media == "audio") { string resample = media == "audio" ? @" ! audioresample name=$base_name-resample" : "";
return @"audioconvert name=$base_name-convert ! audioresample name=$base_name-resample ! $encode_prefix$encode$encode_suffix ! $pay pt=$pt name=$base_name-rtp-pay"; return @"$(media)convert name=$base_name-convert$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";
}
} }
public Gst.Element? get_encode_bin(string media, JingleRtp.PayloadType payload_type, string? name = null) { public Gst.Element? get_encode_bin(string media, JingleRtp.PayloadType payload_type, string? name = null) {

View file

@ -59,7 +59,7 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
if (element == null) create(); if (element == null) create();
links++; links++;
if (mixer != null) return mixer; if (mixer != null) return mixer;
if (is_sink && media == "audio") return plugin.echoprobe; if (is_sink && media == "audio") return filter;
return element; return element;
} }
@ -146,9 +146,10 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
element.@set("sync", false); element.@set("sync", false);
} }
if (is_sink && media == "audio") { if (is_sink && media == "audio") {
// mixer = Gst.ElementFactory.make("audiomixer", @"$id-mixer"); filter = Gst.ElementFactory.make("capsfilter", @"$id-caps-filter");
// pipe.add(mixer); filter.@set("caps", get_best_caps());
// mixer.link(plugin.echoprobe); pipe.add(filter);
filter.link(plugin.echoprobe);
plugin.echoprobe.link(element); plugin.echoprobe.link(element);
} }
plugin.unpause(); plugin.unpause();
@ -173,6 +174,13 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Object {
pipe.remove(mixer); pipe.remove(mixer);
mixer = null; mixer = null;
} else if (is_sink && media == "audio") { } 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); plugin.echoprobe.unlink(element);
} }
element.set_locked_state(true); element.set_locked_state(true);