Skip to main content

screen_record/linux/
mod.rs

1use std::path::Path;
2
3use crate::cli::{AudioMode, ContainerFormat, ImageFormat};
4use crate::error::CliError;
5use crate::types::{ShareableContent, WindowInfo};
6
7#[doc(hidden)]
8pub mod audio;
9#[doc(hidden)]
10pub mod ffmpeg;
11#[doc(hidden)]
12pub mod portal;
13pub mod preflight;
14#[cfg(target_os = "linux")]
15pub(crate) mod x11;
16
17pub fn shareable_content() -> Result<ShareableContent, CliError> {
18    x11::fetch_shareable_content()
19}
20
21pub fn screenshot_window(
22    window: &WindowInfo,
23    path: &Path,
24    format: ImageFormat,
25) -> Result<(), CliError> {
26    preflight::preflight()?;
27    ffmpeg::screenshot_window(window, path, format)
28}
29
30pub fn record_window(
31    window: &WindowInfo,
32    duration: u64,
33    audio: AudioMode,
34    path: &Path,
35    format: ContainerFormat,
36) -> Result<(), CliError> {
37    preflight::preflight()?;
38    ffmpeg::record_window(window, duration, audio, path, format)
39}
40
41pub fn record_display(
42    display_id: u32,
43    duration: u64,
44    audio: AudioMode,
45    path: &Path,
46    format: ContainerFormat,
47) -> Result<(), CliError> {
48    preflight::preflight()?;
49    ffmpeg::record_display(display_id, duration, audio, path, format)
50}
51
52pub fn record_main_display(
53    duration: u64,
54    audio: AudioMode,
55    path: &Path,
56    format: ContainerFormat,
57) -> Result<(), CliError> {
58    preflight::preflight()?;
59    ffmpeg::record_main_display(duration, audio, path, format)
60}
61
62pub fn screenshot_portal(path: &Path, format: ImageFormat) -> Result<(), CliError> {
63    preflight::preflight()?;
64    let capture = portal::acquire_capture()?;
65    ffmpeg::screenshot_portal(&capture, path, format)
66}
67
68pub fn record_portal(duration: u64, path: &Path, format: ContainerFormat) -> Result<(), CliError> {
69    preflight::preflight()?;
70    let capture = portal::acquire_capture()?;
71    ffmpeg::record_portal(&capture, duration, path, format)
72}