pub use self::vpxcodec::*; cfg_if! { if #[cfg(quartz)] { mod quartz; pub use self::quartz::*; } else if #[cfg(x11)] { cfg_if! { if #[cfg(feature="wayland")] { mod linux; mod wayland; mod x11; pub use self::linux::*; pub use self::x11::Frame; pub use self::wayland::set_map_err; } else { mod x11; pub use self::x11::*; } } } else if #[cfg(dxgi)] { mod dxgi; pub use self::dxgi::*; } else if #[cfg(target_os = "android")] { mod android; pub use self::android::*; }else { //TODO: Fallback implementation. } } pub mod codec; mod convert; #[cfg(feature = "hwcodec")] pub mod hwcodec; #[cfg(feature = "mediacodec")] pub mod mediacodec; pub mod vpxcodec; pub use self::convert::*; pub const STRIDE_ALIGN: usize = 64; // commonly used in libvpx vpx_img_alloc caller pub const HW_STRIDE_ALIGN: usize = 0; // recommended by av_frame_get_buffer pub mod record; mod vpx; #[inline] pub fn would_block_if_equal(old: &mut Vec, b: &[u8]) -> std::io::Result<()> { // does this really help? if b == &old[..] { return Err(std::io::ErrorKind::WouldBlock.into()); } old.resize(b.len(), 0); old.copy_from_slice(b); Ok(()) } pub trait TraitCapturer { fn set_use_yuv(&mut self, use_yuv: bool); fn frame<'a>(&'a mut self, timeout: std::time::Duration) -> std::io::Result>; #[cfg(windows)] fn is_gdi(&self) -> bool; #[cfg(windows)] fn set_gdi(&mut self) -> bool; } #[cfg(x11)] #[inline] pub fn is_x11() -> bool { "x11" == hbb_common::platform::linux::get_display_server() } #[cfg(x11)] #[inline] pub fn is_cursor_embeded() -> bool { if is_x11() { x11::IS_CURSOR_EMBEDED } else { wayland::IS_CURSOR_EMBEDED } } #[cfg(not(x11))] #[inline] pub fn is_cursor_embeded() -> bool { false }