From ccc5df332e498cf69da819e688308130a697d5c6 Mon Sep 17 00:00:00 2001 From: alexlapa Date: Tue, 27 Aug 2024 17:59:50 +0300 Subject: [PATCH] corrections --- Cargo.lock | 12 +++---- Cargo.toml | 4 +-- src/platform/wasm/codec_capability.rs | 47 +++++++++++++-------------- src/platform/wasm/mod.rs | 3 ++ 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad008560..ad75cda7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -691,9 +691,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" [[package]] name = "byteorder" @@ -2858,9 +2858,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ "bitflags", "errno", @@ -2915,9 +2915,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "aws-lc-rs", "ring", diff --git a/Cargo.toml b/Cargo.toml index 4414ee2b..00580675 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ crate-type = ["cdylib", "rlib", "staticlib"] lto = "fat" [features] -default = ["console_error_panic_hook"] +default = ["console_error_panic_hook", "talc"] dart-codegen = ["medea-macro/dart-codegen"] mockable = ["mockall"] @@ -71,7 +71,7 @@ send_wrapper = "0.6" backoff = { version = "0.4", features = ["wasm-bindgen"] } console_error_panic_hook = { version = "0.1", optional = true } js-sys = "0.3" -talc = { version = "4.4", default-features = false, features = ["lock_api"] } +talc = { version = "4.4", default-features = false, features = ["lock_api"], optional = true } wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" wasm-logger = "0.2" diff --git a/src/platform/wasm/codec_capability.rs b/src/platform/wasm/codec_capability.rs index 2cb56949..18f1d9b3 100644 --- a/src/platform/wasm/codec_capability.rs +++ b/src/platform/wasm/codec_capability.rs @@ -2,9 +2,7 @@ //! //! [RTCRtpCodecCapability]: https://w3.org/TR/webrtc#dom-rtcrtpcodeccapability -use js_sys::{Array, JsString, Reflect}; -use wasm_bindgen::JsValue; -use web_sys::RtcRtpSender; +use web_sys::{RtcRtpCodecCapability, RtcRtpSender}; use crate::{ media::MediaKind, platform::codec_capability::CodecCapabilityError as Error, @@ -14,7 +12,7 @@ use crate::{ /// /// [RTCRtpCodecCapability]: https://w3.org/TR/webrtc#dom-rtcrtpcodeccapability #[derive(Clone, Debug)] -pub struct CodecCapability(JsValue); +pub struct CodecCapability(RtcRtpCodecCapability); impl CodecCapability { /// Returns available [RTCRtpSender]'s [`CodecCapability`]s. @@ -29,34 +27,35 @@ impl CodecCapability { pub async fn get_sender_codec_capabilities( kind: MediaKind, ) -> Result, Error> { - // TODO: This Reflect usage is refactored out in #180. - let codecs = RtcRtpSender::get_capabilities(&kind.to_string()) - .and_then(|capabs| { - Reflect::get(&capabs, &JsString::from("codecs")).ok() - }) - .ok_or(Error::FailedToGetCapabilities)?; - - Ok(Array::from(&codecs).iter().map(Self).collect()) + let mut result = Vec::new(); + + let Some(caps) = RtcRtpSender::get_capabilities(&kind.to_string()) + else { + return Err(Error::FailedToGetCapabilities); + }; + + for codec in caps.get_codecs().values() { + let Ok(codec) = codec else { + continue; + }; + result.push(Self(RtcRtpCodecCapability::from(codec))); + } + + Ok(result) } /// Returns [MIME media type][2] of this [`CodecCapability`]. /// - /// # Errors - /// - /// With [`Error::FailedToGetMimeType`] if fails to retrieve codec's - /// [MIME media type][2]. - /// /// [2]: https://w3.org/TR/webrtc#dom-rtcrtpcodeccapability-mimetype - pub fn mime_type(&self) -> Result { - Reflect::get(&self.0, &JsString::from("mimeType")) - .ok() - .and_then(|a| a.as_string()) - .ok_or(Error::FailedToGetMimeType) + #[must_use] + pub fn mime_type(&self) -> String { + self.0.get_mime_type() } - /// Returns the underlying [`JsValue`] of this [`CodecCapability`]. + /// Returns the underlying [`RtcRtpCodecCapability`] of this + /// [`CodecCapability`]. #[must_use] - pub const fn handle(&self) -> &JsValue { + pub const fn handle(&self) -> &RtcRtpCodecCapability { &self.0 } } diff --git a/src/platform/wasm/mod.rs b/src/platform/wasm/mod.rs index ced9fa27..90fe5c04 100644 --- a/src/platform/wasm/mod.rs +++ b/src/platform/wasm/mod.rs @@ -38,6 +38,9 @@ pub use self::{ /// Unimplemented on WASM targets. pub type MediaDisplayInfo = (); +#[cfg(feature = "talc")] +/// When the `talc` feature is enabled, use `talc` as the global +/// allocator. /// SAFETY: The runtime environment must be single-threaded WASM. #[global_allocator] static ALLOCATOR: talc::TalckWasm = unsafe { talc::TalckWasm::new_global() };