Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/VLC/src/rust/vlcrs-core/src/plugin/   (VLC Media Plyer ©)  Datei vom 23.9.2026 mit Größe 9 kB image not shown  

Quelle  mod.rs   Sprache: Rust

 

pub mod sys;

use crate::object::Object;

pub const VLC_COPYRIGHT_VIDEOLAN: &str = r#"
\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x74\x68
\x65\x20\x56\x69\x64\x65\x6f\x4c\x41\x4e\x20\x56\x4c\x43\x20\x6d
\x65\x64\x69\x61\x20\x70\x6c\x61\x79\x65\x72\x20\x64\x65\x76\x65
\x6c\x6f\x70\x65\x72\x73"#;

pub const VLC_LICENSE_LGPL_2_1_PLUS: &str = r#"
\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74
\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20
\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72
\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73
\x65\x2c\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x6f"#;

#[allow(non_camel_case_types)]
#[allow(unused)]
extern "C" {
    pub type module_t;
    pub type vlc_param;
}

#[allow(non_camel_case_types)]
#[repr(u32)]
pub enum ConfigModule {
    HINT_CATEGORY = 0x02,
    SUBCATEGORY = 0x07,
    SECTION = 0x08,
    ITEM_FLOAT = 1 << 5,
    ITEM_INTEGER = 2 << 5,
    ITEM_RGB = ConfigModule::ITEM_INTEGER as u32 | 0x01,
    ITEM_BOOL = 3 << 5,
    ITEM_STRING = 4 << 5,
    ITEM_PASSWORD = ConfigModule::ITEM_STRING as u32 | 0x01,
    ITEM_KEY = ConfigModule::ITEM_STRING as u32 | 0x02,
    ITEM_MODULE = ConfigModule::ITEM_STRING as u32 | 0x04,
    ITEM_MODULE_CAT = ConfigModule::ITEM_STRING as u32 | 0x05,
    ITEM_MODULE_LIST = ConfigModule::ITEM_STRING as u32 | 0x06,
    ITEM_MODULE_LIST_CAT = ConfigModule::ITEM_STRING as u32 | 0x07,
    ITEM_LOADFILE = ConfigModule::ITEM_STRING as u32 | 0x0C,
    ITEM_SAVEFILE = ConfigModule::ITEM_STRING as u32 | 0x0D,
    ITEM_DIRECTORY = ConfigModule::ITEM_STRING as u32 | 0x0E,
    ITEM_FONT = ConfigModule::ITEM_STRING as u32 | 0x0F,
}

#[allow(non_camel_case_types)]
#[repr(i32)]
pub enum ConfigCategory {
    HIDDEN = -1,
    UNKNOWN = 0,
    INTERFACE = 1,
    AUDIO = 2,
    VIDEO = 3,
    INPUT = 4,
    SOUT = 5,
    ADVANCED = 6,
    PLAYLIST = 7,
}

#[allow(non_camel_case_types)]
#[repr(i32)]
pub enum ConfigSubcategory {
    HIDDEN = -1,
    UNKNOWN = 0,

    INTERFACE_GENERAL = 101,
    INTERFACE_MAIN = 102,
    INTERFACE_CONTROL = 103,
    INTERFACE_HOTKEYS = 104,

    AUDIO_GENERAL = 201,
    AUDIO_AOUT = 202,
    AUDIO_AFILTER = 203,
    AUDIO_VISUAL = 204,
    AUDIO_RESAMPLER = 206,

    VIDEO_GENERAL = 301,
    VIDEO_VOUT = 302,
    VIDEO_VFILTER = 303,
    VIDEO_SUBPIC = 305,
    VIDEO_SPLITTER = 306,

    INPUT_GENERAL = 401,
    INPUT_ACCESS = 402,
    INPUT_DEMUX = 403,
    INPUT_VCODEC = 404,
    INPUT_ACODEC = 405,
    INPUT_SCODEC = 406,
    INPUT_STREAM_FILTER = 407,

    SOUT_GENERAL = 501,
    SOUT_STREAM = 502,
    SOUT_MUX = 503,
    SOUT_ACO = 504,
    SOUT_PACKETIZER = 505,
    SOUT_VOD = 507,
    SOUT_RENDERER = 508,

    ADVANCED_MISC = 602,
    ADVANCED_NETWORK = 603,

    PLAYLIST_GENERAL = 701,
    PLAYLIST_SD = 702,
    PLAYLIST_EXPORT = 703,
}

#[derive(Debug, PartialEq, PartialOrd)]
#[allow(non_camel_case_types)]
#[repr(i32)]
pub enum ModuleProperties {
    MODULE_CREATE,
    CONFIG_CREATE,

    MODULE_CPU_REQUIREMENT = 0x100,
    MODULE_SHORTCUT,
    MODULE_CAPABILITY,
    MODULE_SCORE,
    MODULE_CB_OPEN,
    MODULE_CB_CLOSE,
    MODULE_NO_UNLOAD,
    MODULE_NAME,
    MODULE_SHORTNAME,
    MODULE_DESCRIPTION,
    MODULE_HELP,
    MODULE_TEXTDOMAIN,
    MODULE_HELP_HTML,

    CONFIG_NAME = 0x1000,
    CONFIG_VALUE,
    CONFIG_RANGE,
    CONFIG_ADVANCED_RESERVED,
    CONFIG_VOLATILE,
    CONFIG_PERSISTENT_OBSOLETE,
    CONFIG_PRIVATE,
    CONFIG_REMOVED,
    CONFIG_CAPABILITY,
    CONFIG_SHORTCUT,
    CONFIG_OLDNAME_OBSOLETE,
    CONFIG_SAFE,
    CONFIG_DESC,
    CONFIG_LIST_OBSOLETE,
    CONFIG_ADD_ACTION_OBSOLETE,
    CONFIG_LIST,
    CONFIG_LIST_CB_OBSOLETE,
}

impl TryFrom<i32> for ModuleProperties {
    type Error = ();

    fn try_from(opcode: i32) -> Result<Self, Self::Error> {
        let prop = match opcode {
            x if x == ModuleProperties::MODULE_CREATE as i32 => ModuleProperties::MODULE_CREATE,
            x if x == ModuleProperties::CONFIG_CREATE as i32 => ModuleProperties::CONFIG_CREATE,

            x if x == ModuleProperties::MODULE_CPU_REQUIREMENT as i32 => {
                ModuleProperties::MODULE_CPU_REQUIREMENT
            }
            x if x == ModuleProperties::MODULE_SHORTCUT as i32 => ModuleProperties::MODULE_SHORTCUT,
            x if x == ModuleProperties::MODULE_CAPABILITY as i32 => {
                ModuleProperties::MODULE_CAPABILITY
            }
            x if x == ModuleProperties::MODULE_SCORE as i32 => ModuleProperties::MODULE_SCORE,
            x if x == ModuleProperties::MODULE_CB_OPEN as i32 => ModuleProperties::MODULE_CB_OPEN,
            x if x == ModuleProperties::MODULE_CB_CLOSE as i32 => ModuleProperties::MODULE_CB_CLOSE,
            x if x == ModuleProperties::MODULE_NO_UNLOAD as i32 => {
                ModuleProperties::MODULE_NO_UNLOAD
            }
            x if x == ModuleProperties::MODULE_NAME as i32 => ModuleProperties::MODULE_NAME,
            x if x == ModuleProperties::MODULE_SHORTNAME as i32 => {
                ModuleProperties::MODULE_SHORTNAME
            }
            x if x == ModuleProperties::MODULE_DESCRIPTION as i32 => {
                ModuleProperties::MODULE_DESCRIPTION
            }
            x if x == ModuleProperties::MODULE_HELP as i32 => ModuleProperties::MODULE_HELP,
            x if x == ModuleProperties::MODULE_TEXTDOMAIN as i32 => {
                ModuleProperties::MODULE_TEXTDOMAIN
            }
            x if x == ModuleProperties::MODULE_HELP_HTML as i32 => {
                ModuleProperties::MODULE_HELP_HTML
            }

            x if x == ModuleProperties::CONFIG_NAME as i32 => ModuleProperties::CONFIG_NAME,
            x if x == ModuleProperties::CONFIG_VALUE as i32 => ModuleProperties::CONFIG_VALUE,
            x if x == ModuleProperties::CONFIG_RANGE as i32 => ModuleProperties::CONFIG_RANGE,
            x if x == ModuleProperties::CONFIG_ADVANCED_RESERVED as i32 => {
                ModuleProperties::CONFIG_ADVANCED_RESERVED
            }
            x if x == ModuleProperties::CONFIG_VOLATILE as i32 => ModuleProperties::CONFIG_VOLATILE,
            x if x == ModuleProperties::CONFIG_PERSISTENT_OBSOLETE as i32 => {
                ModuleProperties::CONFIG_PERSISTENT_OBSOLETE
            }
            x if x == ModuleProperties::CONFIG_PRIVATE as i32 => ModuleProperties::CONFIG_PRIVATE,
            x if x == ModuleProperties::CONFIG_REMOVED as i32 => ModuleProperties::CONFIG_REMOVED,
            x if x == ModuleProperties::CONFIG_CAPABILITY as i32 => {
                ModuleProperties::CONFIG_CAPABILITY
            }
            x if x == ModuleProperties::CONFIG_SHORTCUT as i32 => ModuleProperties::CONFIG_SHORTCUT,
            x if x == ModuleProperties::CONFIG_OLDNAME_OBSOLETE as i32 => {
                ModuleProperties::CONFIG_OLDNAME_OBSOLETE
            }
            x if x == ModuleProperties::CONFIG_SAFE as i32 => ModuleProperties::CONFIG_SAFE,
            x if x == ModuleProperties::CONFIG_DESC as i32 => ModuleProperties::CONFIG_DESC,
            x if x == ModuleProperties::CONFIG_LIST_OBSOLETE as i32 => {
                ModuleProperties::CONFIG_LIST_OBSOLETE
            }
            x if x == ModuleProperties::CONFIG_ADD_ACTION_OBSOLETE as i32 => {
                ModuleProperties::CONFIG_ADD_ACTION_OBSOLETE
            }
            x if x == ModuleProperties::CONFIG_LIST as i32 => ModuleProperties::CONFIG_LIST,
            x if x == ModuleProperties::CONFIG_LIST_CB_OBSOLETE as i32 => {
                ModuleProperties::CONFIG_LIST_CB_OBSOLETE
            }
            _ => return Err(()),
        };
        Ok(prop)
    }
}

use std::ffi::c_int;
#[allow(non_camel_case_types)]
pub type vlc_activate = unsafe extern "C" fn(*mut Object) -> c_int;
#[allow(non_camel_case_types)]
pub type vlc_deactivate = unsafe extern "C" fn(*mut Object);

///
/// Exposes the activation and deactivation functions for modules.
///
/// Capabilities for modules are traits implementing a Loader type
/// implementing the ModuleProtocol trait to provide the activation
/// and deactivation functions for the module.
///
/// * `T`: Type implementing the final capability trait
/// * `Activate`: Type for the activation function
/// * `Deactivate`: Type for the deactivation function
///
/// ```no_run
/// use vlcrs_core::plugin::ModuleProtocol;
///
/// /* New trait bringing support for new capabilities in modules. */
///
/// type ActivateFunction = unsafe extern "C" fn();
/// type DeactivateFunction = unsafe extern "C" fn();
/// trait NewCapabilityTrait {
///     /* Mandatory type definition for capability traits */
///
///     /* Example capability interface, can be anything and can add
///      * as many function as required. */
///     fn open(&self);
/// }
///
/// /* Implement a function to load modules implementing NewCapabilityTrait. */
/// unsafe extern "C" fn activate_new_capability<ModuleType: NewCapabilityTrait>() {
///     /* Do anything needed to initialize the module, for instance initializing
///      * a ModuleType object and call the open() function on it. */
/// }
///
/// /* Implement a module loader for this new capability trait. */
/// struct NewCapabilityLoader;
/// impl<ModuleType> ModuleProtocol<ModuleType>
/// for NewCapabilityLoader
/// where ModuleType : NewCapabilityTrait {
///     type Activate = ActivateFunction;
///     type Deactivate = DeactivateFunction;
///
///     fn activate_function() -> ActivateFunction { activate_new_capability::<ModuleType> }
///     fn deactivate_function() -> Option<DeactivateFunction> { None }
/// }
/// ```
pub trait ModuleProtocol<ModuleType: ?Sized> {
    type Activate;
    type Deactivate = *mut ();
    fn activate_function() -> Self::Activate;
    fn deactivate_function() -> Option<Self::Deactivate> {
        None
    }
}

Messung
CHZG
879710094

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.