1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
use libc::{c_void, c_char, c_int, c_uint, int64_t, size_t}; use super::super::avutil::{AVClass, AVPixelFormat, AVSampleFormat, AVOption, AVDictionary, AVRational}; use super::super::avcodec::{AVCodecID}; use super::super::avformat::{AVFormatContext, AVInputFormat, AVOutputFormat}; #[derive(Debug)] #[repr(C)] pub struct AVDeviceRect { pub x: c_int, pub y: c_int, pub width: c_int, pub height: c_int, } #[derive(Eq, PartialEq, Copy, Clone, Debug)] #[repr(C)] pub enum AVAppToDevMessageType { AV_APP_TO_DEV_NONE = MKBETAG!(b'N', b'O', b'N', b'E'), AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG!(b'G', b'E', b'O', b'M'), AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG!(b'R', b'E', b'P', b'A'), AV_APP_TO_DEV_PAUSE = MKBETAG!(b'P', b'A', b'U', b' '), AV_APP_TO_DEV_PLAY = MKBETAG!(b'P', b'L', b'A', b'Y'), AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG!(b'P', b'A', b'U', b'T'), AV_APP_TO_DEV_SET_VOLUME = MKBETAG!(b'S', b'V', b'O', b'L'), AV_APP_TO_DEV_MUTE = MKBETAG!(b' ', b'M', b'U', b'T'), AV_APP_TO_DEV_UNMUTE = MKBETAG!(b'U', b'M', b'U', b'T'), AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG!(b'T', b'M', b'U', b'T'), AV_APP_TO_DEV_GET_VOLUME = MKBETAG!(b'G', b'V', b'O', b'L'), AV_APP_TO_DEV_GET_MUTE = MKBETAG!(b'G', b'M', b'U', b'T'), } #[derive(Eq, PartialEq, Copy, Clone, Debug)] #[repr(C)] pub enum AVDevToAppMessageType { AV_DEV_TO_APP_NONE = MKBETAG!(b'N', b'O', b'N', b'E'), AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG!(b'B', b'C', b'R', b'E'), AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG!(b'B', b'P', b'R', b'E'), AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG!(b'B', b'D', b'I', b'S'), AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG!(b'B', b'D', b'E', b'S'), AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG!(b'B', b'O', b'F', b'L'), AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG!(b'B', b'U', b'F', b'L'), AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG!(b'B', b'R', b'D', b' '), AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG!(b'B', b'W', b'R', b' '), AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG!(b'C', b'M', b'U', b'T'), AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG!(b'C', b'V', b'O', b'L'), } #[derive(Debug)] #[repr(C)] pub struct AVDeviceCapabilitiesQuery { pub av_class: *const AVClass, pub device_context: *const AVFormatContext, pub codec: AVCodecID, pub sample_format: AVSampleFormat, pub pixel_format: AVPixelFormat, pub sample_rate: c_int, pub channels: c_int, pub channel_layout: int64_t, pub window_width: c_int, pub window_height: c_int, pub frame_width: c_int, pub frame_height: c_int, pub fps: AVRational, } #[derive(Debug)] #[repr(C)] pub struct AVDeviceInfo { pub device_name: *mut c_char, pub device_description: *mut c_char, } #[derive(Debug)] #[repr(C)] pub struct AVDeviceInfoList { pub devices: *mut *mut AVDeviceInfo, pub nb_devices: c_int, pub default_device: c_int, } extern { pub static av_device_capabilities: *const AVOption; pub fn avdevice_version() -> c_uint; pub fn avdevice_configuration() -> *const c_char; pub fn avdevice_license() -> *const c_char; pub fn avdevice_register_all(); pub fn av_input_audio_device_next(d: *mut AVInputFormat) -> *mut AVInputFormat; pub fn av_input_video_device_next(d: *mut AVInputFormat) -> *mut AVInputFormat; pub fn av_output_audio_device_next(d: *mut AVOutputFormat) -> *mut AVOutputFormat; pub fn av_output_video_device_next(d: *mut AVOutputFormat) -> *mut AVOutputFormat; pub fn avdevice_app_to_dev_control_message(s: *const AVFormatContext, kind: AVAppToDevMessageType, data: *mut c_void, data_size: size_t) -> c_int; pub fn avdevice_dev_to_app_control_message(s: *const AVFormatContext, kind: AVDevToAppMessageType, data: *mut c_void, data_size: size_t) -> c_int; pub fn avdevice_capabilities_create(caps: *mut *mut AVDeviceCapabilitiesQuery, s: *const AVFormatContext, device_options: *mut *mut AVDictionary) -> c_int; pub fn avdevice_capabilities_free(caps: *mut *mut AVDeviceCapabilitiesQuery, s: *const AVFormatContext); pub fn avdevice_list_devices(s: *const AVFormatContext, device_list: *mut *mut AVDeviceInfoList) -> c_int; pub fn avdevice_free_list_devices(device_list: *mut *mut AVDeviceInfoList); pub fn avdevice_list_input_sources(device: *mut AVInputFormat, device_name: *const c_char, device_options: *mut AVDictionary, device_list: *mut *mut AVDeviceInfoList) -> c_int; pub fn avdevice_list_output_sinks(device: *mut AVOutputFormat, device_name: *const c_char, device_options: *mut AVDictionary, device_list: *mut *mut AVDeviceInfoList) -> c_int; }