aboutsummaryrefslogtreecommitdiff
path: root/plugins/rtp
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2021-04-17 14:50:31 +0200
committerfiaxh <git@lightrise.org>2021-04-29 16:13:25 +0200
commit5d85b6cdb0165d863aadd25d9a73707b8f5cc83e (patch)
treea8e2dd368eaadd6a565a009c9e06cb3160fe16c7 /plugins/rtp
parent3880628de4785db4c0a03a79a0c486507fe9b1a8 (diff)
downloaddino-5d85b6cdb0165d863aadd25d9a73707b8f5cc83e.tar.gz
dino-5d85b6cdb0165d863aadd25d9a73707b8f5cc83e.zip
Handle non-existant call support
Diffstat (limited to 'plugins/rtp')
-rw-r--r--plugins/rtp/src/codec_util.vala1
-rw-r--r--plugins/rtp/src/module.vala6
-rw-r--r--plugins/rtp/src/plugin.vala16
3 files changed, 20 insertions, 3 deletions
diff --git a/plugins/rtp/src/codec_util.vala b/plugins/rtp/src/codec_util.vala
index 7537c11d..6a2438f1 100644
--- a/plugins/rtp/src/codec_util.vala
+++ b/plugins/rtp/src/codec_util.vala
@@ -225,6 +225,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
}
public string? get_encode_element_name(string media, string? codec) {
+ if (!is_element_supported(get_pay_element_name(media, codec))) return null;
foreach (string candidate in get_encode_candidates(media, codec)) {
if (is_element_supported(candidate)) return candidate;
}
diff --git a/plugins/rtp/src/module.vala b/plugins/rtp/src/module.vala
index 52cc1880..13a21cd8 100644
--- a/plugins/rtp/src/module.vala
+++ b/plugins/rtp/src/module.vala
@@ -64,13 +64,13 @@ public class Dino.Plugins.Rtp.Module : JingleRtp.Module {
}
private async bool is_payload_supported(string media, JingleRtp.PayloadType payload_type) {
- string codec = CodecUtil.get_codec_from_payload(media, payload_type);
+ string? codec = CodecUtil.get_codec_from_payload(media, payload_type);
if (codec == null) return false;
if (unsupported_codecs.contains(codec)) return false;
if (supported_codecs.contains(codec)) return true;
- string encode_element = codec_util.get_encode_element_name(media, codec);
- string decode_element = codec_util.get_decode_element_name(media, codec);
+ string? encode_element = codec_util.get_encode_element_name(media, codec);
+ string? decode_element = codec_util.get_decode_element_name(media, codec);
if (encode_element == null || decode_element == null) {
debug("No suitable encoder or decoder found for %s", codec);
unsupported_codecs.add(codec);
diff --git a/plugins/rtp/src/plugin.vala b/plugins/rtp/src/plugin.vala
index f0ad7db2..d43588b4 100644
--- a/plugins/rtp/src/plugin.vala
+++ b/plugins/rtp/src/plugin.vala
@@ -278,6 +278,22 @@ public class Dino.Plugins.Rtp.Plugin : RootInterface, VideoCallPlugin, Object {
Gst.deinit();
}
+ public bool supports(string media) {
+ if (rtpbin == null) return false;
+
+ if (media == "audio") {
+ if (get_devices("audio", false).is_empty) return false;
+ if (get_devices("audio", true).is_empty) return false;
+ }
+
+ if (media == "video") {
+ if (Gst.ElementFactory.make("gtksink", null) == null) return false;
+ if (get_devices("video", false).is_empty) return false;
+ }
+
+ return true;
+ }
+
public VideoCallWidget? create_widget(WidgetType type) {
if (type == WidgetType.GTK) {
return new VideoWidget(this);