gstreamer-video: Update manual code to 2018 edition

This commit is contained in:
Sebastian Dröge 2020-11-22 11:53:17 +02:00
parent 4bd7f7af1a
commit d31badf9ac
25 changed files with 1266 additions and 1447 deletions

View file

@ -11,19 +11,16 @@ homepage = "https://gstreamer.freedesktop.org"
documentation = "https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer_video/" documentation = "https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer_video/"
keywords = ["gstreamer", "multimedia", "audio", "video", "gnome"] keywords = ["gstreamer", "multimedia", "audio", "video", "gnome"]
build = "build.rs" build = "build.rs"
edition = "2018"
[dependencies] [dependencies]
bitflags = "1.0" bitflags = "1.0"
libc = "0.2" libc = "0.2"
cfg-if = "1.0" cfg-if = "1.0"
glib-sys = { git = "https://github.com/gtk-rs/gtk-rs" } ffi = { package = "gstreamer-video-sys", path = "../gstreamer-video/sys", features = ["v1_8"] }
gobject-sys = { git = "https://github.com/gtk-rs/gtk-rs" }
gstreamer-sys = { path = "../gstreamer/sys", features = ["v1_8"] }
gstreamer-base-sys = { path = "../gstreamer-base/sys", features = ["v1_8"] }
gstreamer-video-sys = { path = "../gstreamer-video/sys", features = ["v1_8"] }
glib = { git = "https://github.com/gtk-rs/gtk-rs" } glib = { git = "https://github.com/gtk-rs/gtk-rs" }
gstreamer = { path = "../gstreamer" } gst = { package = "gstreamer", path = "../gstreamer" }
gstreamer-base = { path = "../gstreamer-base" } gst-base = { package = "gstreamer-base", path = "../gstreamer-base" }
once_cell = "1.0" once_cell = "1.0"
futures-channel = "0.3" futures-channel = "0.3"
futures-util = "0.3" futures-util = "0.3"
@ -36,14 +33,14 @@ itertools = "0.9"
[features] [features]
default = [] default = []
v1_10 = ["gstreamer/v1_10", "gstreamer-base/v1_10", "gstreamer-video-sys/v1_10"] v1_10 = ["gst/v1_10", "gst-base/v1_10", "ffi/v1_10"]
v1_12 = ["gstreamer/v1_12", "gstreamer-base/v1_12", "gstreamer-video-sys/v1_12", "v1_10"] v1_12 = ["gst/v1_12", "gst-base/v1_12", "ffi/v1_12", "v1_10"]
v1_14 = ["gstreamer/v1_14", "gstreamer-base/v1_14", "gstreamer-video-sys/v1_14", "v1_12"] v1_14 = ["gst/v1_14", "gst-base/v1_14", "ffi/v1_14", "v1_12"]
v1_16 = ["gstreamer/v1_16", "gstreamer-base/v1_16", "gstreamer-video-sys/v1_16", "v1_14"] v1_16 = ["gst/v1_16", "gst-base/v1_16", "ffi/v1_16", "v1_14"]
v1_18 = ["gstreamer/v1_18", "gstreamer-base/v1_18", "gstreamer-video-sys/v1_18", "v1_16"] v1_18 = ["gst/v1_18", "gst-base/v1_18", "ffi/v1_18", "v1_16"]
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"] embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"] purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
dox = ["v1_18", "gstreamer-video-sys/dox", "glib/dox", "gstreamer/dox", "gstreamer-base/dox"] dox = ["v1_18", "ffi/dox", "glib/dox", "gst/dox", "gst-base/dox"]
[package.metadata.docs.rs] [package.metadata.docs.rs]
features = ["dox", "embed-lgpl-docs"] features = ["dox", "embed-lgpl-docs"]

View file

@ -7,7 +7,6 @@
// except according to those terms. // except according to those terms.
use gst::CapsFeatures; use gst::CapsFeatures;
use gst_video_sys;
use std::ffi::CStr; use std::ffi::CStr;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
@ -15,7 +14,7 @@ use once_cell::sync::Lazy;
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
pub static CAPS_FEATURE_FORMAT_INTERLACED: Lazy<&'static str> = Lazy::new(|| unsafe { pub static CAPS_FEATURE_FORMAT_INTERLACED: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_CAPS_FEATURE_FORMAT_INTERLACED) CStr::from_ptr(ffi::GST_CAPS_FEATURE_FORMAT_INTERLACED)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
@ -26,7 +25,7 @@ pub static CAPS_FEATURES_FORMAT_INTERLACED: Lazy<CapsFeatures> =
pub static CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META: Lazy<&'static str> = pub static CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META: Lazy<&'static str> =
Lazy::new(|| unsafe { Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META) CStr::from_ptr(ffi::GST_CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
@ -35,7 +34,7 @@ pub static CAPS_FEATURES_META_GST_VIDEO_AFFINE_TRANSFORMATION_META: Lazy<CapsFea
pub static CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META: Lazy<&'static str> = pub static CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META: Lazy<&'static str> =
Lazy::new(|| unsafe { Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META) CStr::from_ptr(ffi::GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
@ -43,7 +42,7 @@ pub static CAPS_FEATURES_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META: Lazy<CapsFeature
Lazy::new(|| CapsFeatures::new(&[*CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META])); Lazy::new(|| CapsFeatures::new(&[*CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META]));
pub static CAPS_FEATURE_META_GST_VIDEO_META: Lazy<&'static str> = Lazy::new(|| unsafe { pub static CAPS_FEATURE_META_GST_VIDEO_META: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_CAPS_FEATURE_META_GST_VIDEO_META) CStr::from_ptr(ffi::GST_CAPS_FEATURE_META_GST_VIDEO_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
@ -52,7 +51,7 @@ pub static CAPS_FEATURES_META_GST_VIDEO_META: Lazy<CapsFeatures> =
pub static CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION: Lazy<&'static str> = pub static CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION: Lazy<&'static str> =
Lazy::new(|| unsafe { Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION) CStr::from_ptr(ffi::GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)
.to_str() .to_str()
.unwrap() .unwrap()
}); });

View file

@ -6,14 +6,8 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib_sys;
use gst_sys;
use gst_video_sys;
use glib;
use glib::translate::{from_glib, from_glib_full, ToGlib, ToGlibPtr}; use glib::translate::{from_glib, from_glib_full, ToGlib, ToGlibPtr};
use glib::ToSendValue; use glib::ToSendValue;
use gst;
use std::i32; use std::i32;
use std::mem; use std::mem;
@ -27,7 +21,7 @@ pub fn convert_sample(
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let mut error = ptr::null_mut(); let mut error = ptr::null_mut();
let ret = gst_video_sys::gst_video_convert_sample( let ret = ffi::gst_video_convert_sample(
sample.to_glib_none().0, sample.to_glib_none().0,
caps.to_glib_none().0, caps.to_glib_none().0,
timeout.to_glib(), timeout.to_glib(),
@ -78,9 +72,9 @@ unsafe fn convert_sample_async_unsafe<F>(
F: FnOnce(Result<gst::Sample, glib::Error>) + 'static, F: FnOnce(Result<gst::Sample, glib::Error>) + 'static,
{ {
unsafe extern "C" fn convert_sample_async_trampoline<F>( unsafe extern "C" fn convert_sample_async_trampoline<F>(
sample: *mut gst_sys::GstSample, sample: *mut gst::ffi::GstSample,
error: *mut glib_sys::GError, error: *mut glib::ffi::GError,
user_data: glib_sys::gpointer, user_data: glib::ffi::gpointer,
) where ) where
F: FnOnce(Result<gst::Sample, glib::Error>) + 'static, F: FnOnce(Result<gst::Sample, glib::Error>) + 'static,
{ {
@ -93,7 +87,7 @@ unsafe fn convert_sample_async_unsafe<F>(
callback(Err(from_glib_full(error))) callback(Err(from_glib_full(error)))
} }
} }
unsafe extern "C" fn convert_sample_async_free<F>(user_data: glib_sys::gpointer) unsafe extern "C" fn convert_sample_async_free<F>(user_data: glib::ffi::gpointer)
where where
F: FnOnce(Result<gst::Sample, glib::Error>) + 'static, F: FnOnce(Result<gst::Sample, glib::Error>) + 'static,
{ {
@ -102,12 +96,12 @@ unsafe fn convert_sample_async_unsafe<F>(
let user_data: Box<Option<F>> = Box::new(Some(func)); let user_data: Box<Option<F>> = Box::new(Some(func));
gst_video_sys::gst_video_convert_sample_async( ffi::gst_video_convert_sample_async(
sample.to_glib_none().0, sample.to_glib_none().0,
caps.to_glib_none().0, caps.to_glib_none().0,
timeout.to_glib(), timeout.to_glib(),
Some(convert_sample_async_trampoline::<F>), Some(convert_sample_async_trampoline::<F>),
Box::into_raw(user_data) as glib_sys::gpointer, Box::into_raw(user_data) as glib::ffi::gpointer,
Some(convert_sample_async_free::<F>), Some(convert_sample_async_free::<F>),
); );
} }
@ -155,7 +149,7 @@ pub fn calculate_display_ratio(
let mut dar_n = mem::MaybeUninit::uninit(); let mut dar_n = mem::MaybeUninit::uninit();
let mut dar_d = mem::MaybeUninit::uninit(); let mut dar_d = mem::MaybeUninit::uninit();
let res: bool = from_glib(gst_video_sys::gst_video_calculate_display_ratio( let res: bool = from_glib(ffi::gst_video_calculate_display_ratio(
dar_n.as_mut_ptr(), dar_n.as_mut_ptr(),
dar_d.as_mut_ptr(), dar_d.as_mut_ptr(),
video_width, video_width,
@ -182,7 +176,7 @@ pub fn guess_framerate(duration: gst::ClockTime) -> Option<gst::Fraction> {
unsafe { unsafe {
let mut dest_n = mem::MaybeUninit::uninit(); let mut dest_n = mem::MaybeUninit::uninit();
let mut dest_d = mem::MaybeUninit::uninit(); let mut dest_d = mem::MaybeUninit::uninit();
let res: bool = from_glib(gst_video_sys::gst_video_guess_framerate( let res: bool = from_glib(ffi::gst_video_guess_framerate(
duration.to_glib(), duration.to_glib(),
dest_n.as_mut_ptr(), dest_n.as_mut_ptr(),
dest_d.as_mut_ptr(), dest_d.as_mut_ptr(),
@ -198,14 +192,16 @@ pub fn guess_framerate(duration: gst::ClockTime) -> Option<gst::Fraction> {
} }
} }
pub fn video_make_raw_caps(formats: &[::VideoFormat]) -> gst::caps::Builder<gst::caps::NoFeature> { pub fn video_make_raw_caps(
formats: &[crate::VideoFormat],
) -> gst::caps::Builder<gst::caps::NoFeature> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
let formats: Vec<glib::SendValue> = formats let formats: Vec<glib::SendValue> = formats
.iter() .iter()
.map(|f| match f { .map(|f| match f {
::VideoFormat::Encoded => panic!("Invalid encoded format"), crate::VideoFormat::Encoded => panic!("Invalid encoded format"),
::VideoFormat::Unknown => panic!("Invalid unknown format"), crate::VideoFormat::Unknown => panic!("Invalid unknown format"),
_ => f.to_string().to_send_value(), _ => f.to_string().to_send_value(),
}) })
.collect(); .collect();
@ -223,8 +219,6 @@ pub fn video_make_raw_caps(formats: &[::VideoFormat]) -> gst::caps::Builder<gst:
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use glib;
use gst;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
#[test] #[test]
@ -245,7 +239,7 @@ mod tests {
p[3] = 255; p[3] = 255;
} }
} }
let in_caps = ::VideoInfo::builder(::VideoFormat::Rgba, 320, 240) let in_caps = crate::VideoInfo::builder(crate::VideoFormat::Rgba, 320, 240)
.build() .build()
.unwrap() .unwrap()
.to_caps() .to_caps()
@ -255,7 +249,7 @@ mod tests {
.caps(&in_caps) .caps(&in_caps)
.build(); .build();
let out_caps = ::VideoInfo::builder(::VideoFormat::Abgr, 320, 240) let out_caps = crate::VideoInfo::builder(crate::VideoFormat::Abgr, 320, 240)
.build() .build()
.unwrap() .unwrap()
.to_caps() .to_caps()
@ -290,26 +284,26 @@ mod tests {
fn video_caps() { fn video_caps() {
gst::init().unwrap(); gst::init().unwrap();
let caps = video_make_raw_caps(&[::VideoFormat::Nv12, ::VideoFormat::Nv16]).build(); let caps =
video_make_raw_caps(&[crate::VideoFormat::Nv12, crate::VideoFormat::Nv16]).build();
assert_eq!(caps.to_string(), "video/x-raw, format=(string){ NV12, NV16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]"); assert_eq!(caps.to_string(), "video/x-raw, format=(string){ NV12, NV16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]");
#[cfg(feature = "v1_18")] #[cfg(feature = "v1_18")]
{ {
/* video_make_raw_caps() is a re-implementation so ensure it returns the same caps as the C API */ /* video_make_raw_caps() is a re-implementation so ensure it returns the same caps as the C API */
let c_caps = unsafe { let c_caps = unsafe {
let formats: Vec<gst_video_sys::GstVideoFormat> = let formats: Vec<ffi::GstVideoFormat> =
[::VideoFormat::Nv12, ::VideoFormat::Nv16] [crate::VideoFormat::Nv12, crate::VideoFormat::Nv16]
.iter() .iter()
.map(|f| f.to_glib()) .map(|f| f.to_glib())
.collect(); .collect();
let caps = let caps = ffi::gst_video_make_raw_caps(formats.as_ptr(), formats.len() as u32);
gst_video_sys::gst_video_make_raw_caps(formats.as_ptr(), formats.len() as u32);
from_glib_full(caps) from_glib_full(caps)
}; };
assert_eq!(caps, c_caps); assert_eq!(caps, c_caps);
} }
let caps = video_make_raw_caps(&[::VideoFormat::Nv12, ::VideoFormat::Nv16]) let caps = video_make_raw_caps(&[crate::VideoFormat::Nv12, crate::VideoFormat::Nv16])
.field("width", &800) .field("width", &800)
.field("height", &600) .field("height", &600)
.field("framerate", &gst::Fraction::new(30, 1)) .field("framerate", &gst::Fraction::new(30, 1))
@ -321,13 +315,13 @@ mod tests {
#[should_panic(expected = "Invalid encoded format")] #[should_panic(expected = "Invalid encoded format")]
fn video_caps_encoded() { fn video_caps_encoded() {
gst::init().unwrap(); gst::init().unwrap();
video_make_raw_caps(&[::VideoFormat::Encoded]); video_make_raw_caps(&[crate::VideoFormat::Encoded]);
} }
#[test] #[test]
#[should_panic(expected = "Invalid unknown format")] #[should_panic(expected = "Invalid unknown format")]
fn video_caps_unknown() { fn video_caps_unknown() {
gst::init().unwrap(); gst::init().unwrap();
video_make_raw_caps(&[::VideoFormat::Unknown]); video_make_raw_caps(&[crate::VideoFormat::Unknown]);
} }
} }

View file

@ -8,33 +8,11 @@
#![cfg_attr(feature = "dox", feature(doc_cfg))] #![cfg_attr(feature = "dox", feature(doc_cfg))]
#[macro_use] pub use ffi;
extern crate bitflags;
extern crate libc;
extern crate once_cell;
#[macro_use]
extern crate cfg_if;
#[macro_use]
extern crate glib;
extern crate glib_sys;
extern crate gobject_sys;
#[macro_use]
extern crate gstreamer as gst;
extern crate futures_channel;
extern crate futures_util;
extern crate gstreamer_base as gst_base;
extern crate gstreamer_base_sys as gst_base_sys;
extern crate gstreamer_sys as gst_sys;
extern crate gstreamer_video_sys as gst_video_sys;
#[cfg(test)]
extern crate itertools;
macro_rules! assert_initialized_main_thread { macro_rules! assert_initialized_main_thread {
() => { () => {
if unsafe { ::gst_sys::gst_is_initialized() } != ::glib_sys::GTRUE { if unsafe { gst::ffi::gst_is_initialized() } != glib::ffi::GTRUE {
panic!("GStreamer has not been initialized. Call `gst::init` first."); panic!("GStreamer has not been initialized. Call `gst::init` first.");
} }
}; };
@ -49,13 +27,13 @@ macro_rules! skip_assert_initialized {
#[allow(clippy::match_same_arms)] #[allow(clippy::match_same_arms)]
#[allow(unused_imports)] #[allow(unused_imports)]
mod auto; mod auto;
pub use auto::*; pub use crate::auto::*;
mod caps_features; mod caps_features;
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
pub use caps_features::{CAPS_FEATURES_FORMAT_INTERLACED, CAPS_FEATURE_FORMAT_INTERLACED}; pub use crate::caps_features::{CAPS_FEATURES_FORMAT_INTERLACED, CAPS_FEATURE_FORMAT_INTERLACED};
pub use caps_features::{ pub use crate::caps_features::{
CAPS_FEATURES_META_GST_VIDEO_AFFINE_TRANSFORMATION_META, CAPS_FEATURES_META_GST_VIDEO_AFFINE_TRANSFORMATION_META,
CAPS_FEATURES_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, CAPS_FEATURES_META_GST_VIDEO_META, CAPS_FEATURES_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, CAPS_FEATURES_META_GST_VIDEO_META,
CAPS_FEATURES_META_GST_VIDEO_OVERLAY_COMPOSITION, CAPS_FEATURES_META_GST_VIDEO_OVERLAY_COMPOSITION,
@ -64,33 +42,35 @@ pub use caps_features::{
CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION,
}; };
mod video_format; mod video_format;
pub use video_format::*; pub use crate::video_format::*;
mod video_format_info; mod video_format_info;
pub use video_format_info::*; pub use crate::video_format_info::*;
mod video_info; mod video_info;
pub use video_info::*; pub use crate::video_info::*;
pub mod video_frame; pub mod video_frame;
pub use video_frame::{VideoBufferExt, VideoFrame, VideoFrameRef}; pub use crate::video_frame::{VideoBufferExt, VideoFrame, VideoFrameRef};
mod video_overlay; mod video_overlay;
pub use video_overlay::{is_video_overlay_prepare_window_handle_message, VideoOverlayExtManual}; pub use crate::video_overlay::{
is_video_overlay_prepare_window_handle_message, VideoOverlayExtManual,
};
pub mod video_event; pub mod video_event;
pub use video_event::{ pub use crate::video_event::{
DownstreamForceKeyUnitEvent, ForceKeyUnitEvent, StillFrameEvent, UpstreamForceKeyUnitEvent, DownstreamForceKeyUnitEvent, ForceKeyUnitEvent, StillFrameEvent, UpstreamForceKeyUnitEvent,
}; };
mod functions; mod functions;
pub use functions::*; pub use crate::functions::*;
mod video_rectangle; mod video_rectangle;
pub use video_rectangle::*; pub use crate::video_rectangle::*;
mod video_overlay_composition; mod video_overlay_composition;
pub use video_overlay_composition::*; pub use crate::video_overlay_composition::*;
pub mod video_meta; pub mod video_meta;
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
pub use video_meta::VideoCaptionMeta; pub use crate::video_meta::VideoCaptionMeta;
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub use video_meta::{VideoAFDMeta, VideoBarMeta}; pub use crate::video_meta::{VideoAFDMeta, VideoBarMeta};
pub use video_meta::{ pub use crate::video_meta::{
VideoAffineTransformationMeta, VideoCropMeta, VideoMeta, VideoOverlayCompositionMeta, VideoAffineTransformationMeta, VideoCropMeta, VideoMeta, VideoOverlayCompositionMeta,
VideoRegionOfInterestMeta, VideoRegionOfInterestMeta,
}; };
@ -99,30 +79,30 @@ pub use video_meta::{
mod video_time_code; mod video_time_code;
#[cfg(any(feature = "v1_10", feature = "dox"))] #[cfg(any(feature = "v1_10", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_10")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_10")))]
pub use video_time_code::{ValidVideoTimeCode, VideoTimeCode, VideoTimeCodeMeta}; pub use crate::video_time_code::{ValidVideoTimeCode, VideoTimeCode, VideoTimeCodeMeta};
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
mod video_time_code_interval; mod video_time_code_interval;
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
pub use video_time_code_interval::VideoTimeCodeInterval; pub use crate::video_time_code_interval::VideoTimeCodeInterval;
mod video_buffer_pool; mod video_buffer_pool;
pub use video_buffer_pool::{ pub use crate::video_buffer_pool::{
VideoAlignment, VideoBufferPoolConfig, BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META, VideoAlignment, VideoBufferPoolConfig, BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META,
BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META, BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META,
BUFFER_POOL_OPTION_VIDEO_META, BUFFER_POOL_OPTION_VIDEO_META,
}; };
pub mod video_converter; pub mod video_converter;
pub use video_converter::{VideoConverter, VideoConverterConfig}; pub use crate::video_converter::{VideoConverter, VideoConverterConfig};
mod video_codec_frame; mod video_codec_frame;
mod video_decoder; mod video_decoder;
pub use video_decoder::VideoDecoderExtManual; pub use crate::video_decoder::VideoDecoderExtManual;
mod video_encoder; mod video_encoder;
pub use video_codec_frame::VideoCodecFrame; pub use crate::video_codec_frame::VideoCodecFrame;
pub use video_encoder::VideoEncoderExtManual; pub use crate::video_encoder::VideoEncoderExtManual;
pub mod video_codec_state; pub mod video_codec_state;
pub use video_codec_state::{VideoCodecState, VideoCodecStateContext}; pub use crate::video_codec_state::{VideoCodecState, VideoCodecStateContext};
mod utils; mod utils;
pub const VIDEO_ENCODER_FLOW_NEED_DATA: gst::FlowSuccess = gst::FlowSuccess::CustomSuccess; pub const VIDEO_ENCODER_FLOW_NEED_DATA: gst::FlowSuccess = gst::FlowSuccess::CustomSuccess;
@ -134,13 +114,13 @@ pub mod prelude {
pub use glib::prelude::*; pub use glib::prelude::*;
pub use gst::prelude::*; pub use gst::prelude::*;
pub use auto::traits::*; pub use crate::auto::traits::*;
pub use video_buffer_pool::VideoBufferPoolConfig; pub use crate::video_buffer_pool::VideoBufferPoolConfig;
pub use video_decoder::VideoDecoderExtManual; pub use crate::video_decoder::VideoDecoderExtManual;
pub use video_encoder::VideoEncoderExtManual; pub use crate::video_encoder::VideoEncoderExtManual;
pub use video_format::VideoFormatIteratorExt; pub use crate::video_format::VideoFormatIteratorExt;
pub use video_frame::VideoBufferExt; pub use crate::video_frame::VideoBufferExt;
pub use video_overlay::VideoOverlayExtManual; pub use crate::video_overlay::VideoOverlayExtManual;
} }
pub mod subclass; pub mod subclass;

View file

@ -7,22 +7,16 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib_sys;
use gst_sys;
use gst_video_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use gst;
use gst::subclass::prelude::*; use gst::subclass::prelude::*;
use gst_base;
use crate::prelude::*; use crate::prelude::*;
use video_codec_state::{Readable, VideoCodecState}; use crate::video_codec_state::{Readable, VideoCodecState};
use VideoCodecFrame; use crate::VideoCodecFrame;
use VideoDecoder; use crate::VideoDecoder;
pub trait VideoDecoderImpl: VideoDecoderImplExt + ElementImpl { pub trait VideoDecoderImpl: VideoDecoderImplExt + ElementImpl {
fn open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
@ -184,8 +178,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.open .open
.map(|f| { .map(|f| {
@ -196,7 +189,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `open` failed"] ["Parent function `open` failed"]
)) ))
@ -209,8 +202,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_close(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_close(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.close .close
.map(|f| { .map(|f| {
@ -221,7 +213,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `close` failed"] ["Parent function `close` failed"]
)) ))
@ -234,8 +226,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_start(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_start(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.start .start
.map(|f| { .map(|f| {
@ -246,7 +237,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `start` failed"] ["Parent function `start` failed"]
)) ))
@ -259,8 +250,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_stop(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_stop(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.stop .stop
.map(|f| { .map(|f| {
@ -271,7 +261,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `stop` failed"] ["Parent function `stop` failed"]
)) ))
@ -284,8 +274,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_finish(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> { fn parent_finish(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.finish .finish
.map(|f| { .map(|f| {
@ -302,8 +291,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_drain(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> { fn parent_drain(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.drain .drain
.map(|f| { .map(|f| {
@ -324,12 +312,11 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.set_format .set_format
.map(|f| { .map(|f| {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f( f(
element.unsafe_cast_ref::<VideoDecoder>().to_glib_none().0, element.unsafe_cast_ref::<VideoDecoder>().to_glib_none().0,
state.as_mut_ptr() state.as_mut_ptr()
@ -351,8 +338,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.parse .parse
.map(|f| { .map(|f| {
@ -375,8 +361,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.handle_frame .handle_frame
.map(|f| { .map(|f| {
@ -393,8 +378,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_flush(&self, element: &Self::Type) -> bool { fn parent_flush(&self, element: &Self::Type) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.flush .flush
.map(|f| { .map(|f| {
@ -410,12 +394,11 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_negotiate(&self, element: &Self::Type) -> Result<(), gst::LoggableError> { fn parent_negotiate(&self, element: &Self::Type) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.negotiate .negotiate
.map(|f| { .map(|f| {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f(element.unsafe_cast_ref::<VideoDecoder>().to_glib_none().0), f(element.unsafe_cast_ref::<VideoDecoder>().to_glib_none().0),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `negotiate` failed" "Parent function `negotiate` failed"
@ -428,8 +411,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_get_caps(&self, element: &Self::Type, filter: Option<&gst::Caps>) -> gst::Caps { fn parent_get_caps(&self, element: &Self::Type, filter: Option<&gst::Caps>) -> gst::Caps {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.getcaps .getcaps
.map(|f| { .map(|f| {
@ -449,8 +431,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_sink_event(&self, element: &Self::Type, event: gst::Event) -> bool { fn parent_sink_event(&self, element: &Self::Type, event: gst::Event) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
let f = (*parent_class) let f = (*parent_class)
.sink_event .sink_event
.expect("Missing parent function `sink_event`"); .expect("Missing parent function `sink_event`");
@ -464,8 +445,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_sink_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool { fn parent_sink_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
let f = (*parent_class) let f = (*parent_class)
.sink_query .sink_query
.expect("Missing parent function `sink_query`"); .expect("Missing parent function `sink_query`");
@ -479,8 +459,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_src_event(&self, element: &Self::Type, event: gst::Event) -> bool { fn parent_src_event(&self, element: &Self::Type, event: gst::Event) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
let f = (*parent_class) let f = (*parent_class)
.src_event .src_event
.expect("Missing parent function `src_event`"); .expect("Missing parent function `src_event`");
@ -494,8 +473,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
fn parent_src_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool { fn parent_src_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
let f = (*parent_class) let f = (*parent_class)
.src_query .src_query
.expect("Missing parent function `src_query`"); .expect("Missing parent function `src_query`");
@ -513,8 +491,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
) -> Result<(), gst::ErrorMessage> { ) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.propose_allocation .propose_allocation
.map(|f| { .map(|f| {
@ -524,7 +501,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
)) { )) {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `propose_allocation` failed"] ["Parent function `propose_allocation` failed"]
)) ))
@ -541,8 +518,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
) -> Result<(), gst::ErrorMessage> { ) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoDecoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoDecoderClass;
(*parent_class) (*parent_class)
.decide_allocation .decide_allocation
.map(|f| { .map(|f| {
@ -552,7 +528,7 @@ impl<T: VideoDecoderImpl> VideoDecoderImplExt for T {
)) { )) {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `decide_allocation` failed"] ["Parent function `decide_allocation` failed"]
)) ))
@ -592,8 +568,8 @@ where
} }
unsafe extern "C" fn video_decoder_open<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_open<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -601,7 +577,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.open(wrap.unsafe_cast_ref()) { match imp.open(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -614,8 +590,8 @@ where
} }
unsafe extern "C" fn video_decoder_close<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_close<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -623,7 +599,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.close(wrap.unsafe_cast_ref()) { match imp.close(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -636,8 +612,8 @@ where
} }
unsafe extern "C" fn video_decoder_start<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_start<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -645,7 +621,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.start(wrap.unsafe_cast_ref()) { match imp.start(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -658,8 +634,8 @@ where
} }
unsafe extern "C" fn video_decoder_stop<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_stop<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -667,7 +643,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.stop(wrap.unsafe_cast_ref()) { match imp.stop(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -680,8 +656,8 @@ where
} }
unsafe extern "C" fn video_decoder_finish<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_finish<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -689,15 +665,15 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.finish(wrap.unsafe_cast_ref()).into() imp.finish(wrap.unsafe_cast_ref()).into()
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_drain<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_drain<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -705,26 +681,26 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.drain(wrap.unsafe_cast_ref()).into() imp.drain(wrap.unsafe_cast_ref()).into()
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_set_format<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_set_format<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
state: *mut gst_video_sys::GstVideoCodecState, state: *mut ffi::GstVideoCodecState,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_video_sys::gst_video_codec_state_ref(state); ffi::gst_video_codec_state_ref(state);
let wrap_state = VideoCodecState::<Readable>::new(state); let wrap_state = VideoCodecState::<Readable>::new(state);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.set_format(wrap.unsafe_cast_ref(), &wrap_state) { match imp.set_format(wrap.unsafe_cast_ref(), &wrap_state) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -737,23 +713,23 @@ where
} }
unsafe extern "C" fn video_decoder_parse<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_parse<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
frame: *mut gst_video_sys::GstVideoCodecFrame, frame: *mut ffi::GstVideoCodecFrame,
adapter: *mut gst_base_sys::GstAdapter, adapter: *mut gst_base::ffi::GstAdapter,
at_eos: glib_sys::gboolean, at_eos: glib::ffi::gboolean,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_video_sys::gst_video_codec_frame_ref(frame); ffi::gst_video_codec_frame_ref(frame);
let wrap_frame = VideoCodecFrame::new(frame, &*wrap); let wrap_frame = VideoCodecFrame::new(frame, &*wrap);
let wrap_adapter: Borrowed<gst_base::Adapter> = from_glib_borrow(adapter); let wrap_adapter: Borrowed<gst_base::Adapter> = from_glib_borrow(adapter);
let at_eos: bool = from_glib(at_eos); let at_eos: bool = from_glib(at_eos);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.parse(wrap.unsafe_cast_ref(), &wrap_frame, &wrap_adapter, at_eos) imp.parse(wrap.unsafe_cast_ref(), &wrap_frame, &wrap_adapter, at_eos)
.into() .into()
}) })
@ -761,9 +737,9 @@ where
} }
unsafe extern "C" fn video_decoder_handle_frame<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_handle_frame<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
frame: *mut gst_video_sys::GstVideoCodecFrame, frame: *mut ffi::GstVideoCodecFrame,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -772,15 +748,15 @@ where
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
let wrap_frame = VideoCodecFrame::new(frame, &*wrap); let wrap_frame = VideoCodecFrame::new(frame, &*wrap);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.handle_frame(wrap.unsafe_cast_ref(), wrap_frame).into() imp.handle_frame(wrap.unsafe_cast_ref(), wrap_frame).into()
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_flush<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_flush<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -788,15 +764,15 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
VideoDecoderImpl::flush(imp, wrap.unsafe_cast_ref()) VideoDecoderImpl::flush(imp, wrap.unsafe_cast_ref())
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_negotiate<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_negotiate<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -804,7 +780,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.negotiate(wrap.unsafe_cast_ref()) { match imp.negotiate(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -817,9 +793,9 @@ where
} }
unsafe extern "C" fn video_decoder_getcaps<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_getcaps<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
filter: *mut gst_sys::GstCaps, filter: *mut gst::ffi::GstCaps,
) -> *mut gst_sys::GstCaps ) -> *mut gst::ffi::GstCaps
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -827,7 +803,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::Caps::new_empty(), { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::Caps::new_empty(), {
VideoDecoderImpl::get_caps( VideoDecoderImpl::get_caps(
imp, imp,
wrap.unsafe_cast_ref(), wrap.unsafe_cast_ref(),
@ -840,9 +816,9 @@ where
} }
unsafe extern "C" fn video_decoder_sink_event<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_sink_event<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
event: *mut gst_sys::GstEvent, event: *mut gst::ffi::GstEvent,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -850,16 +826,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.sink_event(wrap.unsafe_cast_ref(), from_glib_full(event)) imp.sink_event(wrap.unsafe_cast_ref(), from_glib_full(event))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_sink_query<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_sink_query<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -867,16 +843,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.sink_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query)) imp.sink_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_src_event<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_src_event<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
event: *mut gst_sys::GstEvent, event: *mut gst::ffi::GstEvent,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -884,16 +860,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.src_event(wrap.unsafe_cast_ref(), from_glib_full(event)) imp.src_event(wrap.unsafe_cast_ref(), from_glib_full(event))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_src_query<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_src_query<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -901,16 +877,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.src_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query)) imp.src_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_decoder_propose_allocation<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_propose_allocation<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -919,7 +895,7 @@ where
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
let query = gst::QueryRef::from_mut_ptr(query); let query = gst::QueryRef::from_mut_ptr(query);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.propose_allocation(wrap.unsafe_cast_ref(), query) { match imp.propose_allocation(wrap.unsafe_cast_ref(), query) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -932,9 +908,9 @@ where
} }
unsafe extern "C" fn video_decoder_decide_allocation<T: VideoDecoderImpl>( unsafe extern "C" fn video_decoder_decide_allocation<T: VideoDecoderImpl>(
ptr: *mut gst_video_sys::GstVideoDecoder, ptr: *mut ffi::GstVideoDecoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -943,7 +919,7 @@ where
let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoDecoder> = from_glib_borrow(ptr);
let query = gst::QueryRef::from_mut_ptr(query); let query = gst::QueryRef::from_mut_ptr(query);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.decide_allocation(wrap.unsafe_cast_ref(), query) { match imp.decide_allocation(wrap.unsafe_cast_ref(), query) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {

View file

@ -7,21 +7,16 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib_sys;
use gst_sys;
use gst_video_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use gst;
use gst::subclass::prelude::*; use gst::subclass::prelude::*;
use crate::prelude::*; use crate::prelude::*;
use video_codec_state::{Readable, VideoCodecState}; use crate::video_codec_state::{Readable, VideoCodecState};
use VideoCodecFrame; use crate::VideoCodecFrame;
use VideoEncoder; use crate::VideoEncoder;
pub trait VideoEncoderImpl: VideoEncoderImplExt + ElementImpl { pub trait VideoEncoderImpl: VideoEncoderImplExt + ElementImpl {
fn open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
@ -159,8 +154,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_open(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.open .open
.map(|f| { .map(|f| {
@ -171,7 +165,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `open` failed"] ["Parent function `open` failed"]
)) ))
@ -184,8 +178,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_close(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_close(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.close .close
.map(|f| { .map(|f| {
@ -196,7 +189,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `close` failed"] ["Parent function `close` failed"]
)) ))
@ -209,8 +202,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_start(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_start(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.start .start
.map(|f| { .map(|f| {
@ -221,7 +213,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `start` failed"] ["Parent function `start` failed"]
)) ))
@ -234,8 +226,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_stop(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> { fn parent_stop(&self, element: &Self::Type) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.stop .stop
.map(|f| { .map(|f| {
@ -246,7 +237,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
{ {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `stop` failed"] ["Parent function `stop` failed"]
)) ))
@ -259,8 +250,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_finish(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> { fn parent_finish(&self, element: &Self::Type) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.finish .finish
.map(|f| { .map(|f| {
@ -281,12 +271,11 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.set_format .set_format
.map(|f| { .map(|f| {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f( f(
element.unsafe_cast_ref::<VideoEncoder>().to_glib_none().0, element.unsafe_cast_ref::<VideoEncoder>().to_glib_none().0,
state.as_mut_ptr() state.as_mut_ptr()
@ -306,8 +295,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.handle_frame .handle_frame
.map(|f| { .map(|f| {
@ -324,8 +312,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_flush(&self, element: &Self::Type) -> bool { fn parent_flush(&self, element: &Self::Type) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.flush .flush
.map(|f| { .map(|f| {
@ -341,12 +328,11 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_negotiate(&self, element: &Self::Type) -> Result<(), gst::LoggableError> { fn parent_negotiate(&self, element: &Self::Type) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.negotiate .negotiate
.map(|f| { .map(|f| {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f(element.unsafe_cast_ref::<VideoEncoder>().to_glib_none().0), f(element.unsafe_cast_ref::<VideoEncoder>().to_glib_none().0),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `negotiate` failed" "Parent function `negotiate` failed"
@ -359,8 +345,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_get_caps(&self, element: &Self::Type, filter: Option<&gst::Caps>) -> gst::Caps { fn parent_get_caps(&self, element: &Self::Type, filter: Option<&gst::Caps>) -> gst::Caps {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.getcaps .getcaps
.map(|f| { .map(|f| {
@ -380,8 +365,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_sink_event(&self, element: &Self::Type, event: gst::Event) -> bool { fn parent_sink_event(&self, element: &Self::Type, event: gst::Event) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
let f = (*parent_class) let f = (*parent_class)
.sink_event .sink_event
.expect("Missing parent function `sink_event`"); .expect("Missing parent function `sink_event`");
@ -395,8 +379,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_sink_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool { fn parent_sink_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
let f = (*parent_class) let f = (*parent_class)
.sink_query .sink_query
.expect("Missing parent function `sink_query`"); .expect("Missing parent function `sink_query`");
@ -410,8 +393,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_src_event(&self, element: &Self::Type, event: gst::Event) -> bool { fn parent_src_event(&self, element: &Self::Type, event: gst::Event) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
let f = (*parent_class) let f = (*parent_class)
.src_event .src_event
.expect("Missing parent function `src_event`"); .expect("Missing parent function `src_event`");
@ -425,8 +407,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
fn parent_src_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool { fn parent_src_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
let f = (*parent_class) let f = (*parent_class)
.src_query .src_query
.expect("Missing parent function `src_query`"); .expect("Missing parent function `src_query`");
@ -444,8 +425,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
) -> Result<(), gst::ErrorMessage> { ) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.propose_allocation .propose_allocation
.map(|f| { .map(|f| {
@ -455,7 +435,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
)) { )) {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `propose_allocation` failed"] ["Parent function `propose_allocation` failed"]
)) ))
@ -472,8 +452,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
) -> Result<(), gst::ErrorMessage> { ) -> Result<(), gst::ErrorMessage> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoEncoderClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoEncoderClass;
(*parent_class) (*parent_class)
.decide_allocation .decide_allocation
.map(|f| { .map(|f| {
@ -483,7 +462,7 @@ impl<T: VideoEncoderImpl> VideoEncoderImplExt for T {
)) { )) {
Ok(()) Ok(())
} else { } else {
Err(gst_error_msg!( Err(gst::gst_error_msg!(
gst::CoreError::StateChange, gst::CoreError::StateChange,
["Parent function `decide_allocation` failed"] ["Parent function `decide_allocation` failed"]
)) ))
@ -521,8 +500,8 @@ where
} }
unsafe extern "C" fn video_encoder_open<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_open<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -530,7 +509,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.open(wrap.unsafe_cast_ref()) { match imp.open(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -543,8 +522,8 @@ where
} }
unsafe extern "C" fn video_encoder_close<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_close<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -552,7 +531,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.close(wrap.unsafe_cast_ref()) { match imp.close(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -565,8 +544,8 @@ where
} }
unsafe extern "C" fn video_encoder_start<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_start<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -574,7 +553,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.start(wrap.unsafe_cast_ref()) { match imp.start(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -587,8 +566,8 @@ where
} }
unsafe extern "C" fn video_encoder_stop<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_stop<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -596,7 +575,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.stop(wrap.unsafe_cast_ref()) { match imp.stop(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -609,8 +588,8 @@ where
} }
unsafe extern "C" fn video_encoder_finish<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_finish<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -618,26 +597,26 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.finish(wrap.unsafe_cast_ref()).into() imp.finish(wrap.unsafe_cast_ref()).into()
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_set_format<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_set_format<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
state: *mut gst_video_sys::GstVideoCodecState, state: *mut ffi::GstVideoCodecState,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_video_sys::gst_video_codec_state_ref(state); ffi::gst_video_codec_state_ref(state);
let wrap_state = VideoCodecState::<Readable>::new(state); let wrap_state = VideoCodecState::<Readable>::new(state);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.set_format(wrap.unsafe_cast_ref(), &wrap_state) { match imp.set_format(wrap.unsafe_cast_ref(), &wrap_state) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -650,9 +629,9 @@ where
} }
unsafe extern "C" fn video_encoder_handle_frame<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_handle_frame<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
frame: *mut gst_video_sys::GstVideoCodecFrame, frame: *mut ffi::GstVideoCodecFrame,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -661,15 +640,15 @@ where
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
let wrap_frame = VideoCodecFrame::new(frame, &*wrap); let wrap_frame = VideoCodecFrame::new(frame, &*wrap);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.handle_frame(wrap.unsafe_cast_ref(), wrap_frame).into() imp.handle_frame(wrap.unsafe_cast_ref(), wrap_frame).into()
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_flush<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_flush<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -677,15 +656,15 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
VideoEncoderImpl::flush(imp, wrap.unsafe_cast_ref()) VideoEncoderImpl::flush(imp, wrap.unsafe_cast_ref())
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_negotiate<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_negotiate<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -693,7 +672,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.negotiate(wrap.unsafe_cast_ref()) { match imp.negotiate(wrap.unsafe_cast_ref()) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -706,9 +685,9 @@ where
} }
unsafe extern "C" fn video_encoder_getcaps<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_getcaps<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
filter: *mut gst_sys::GstCaps, filter: *mut gst::ffi::GstCaps,
) -> *mut gst_sys::GstCaps ) -> *mut gst::ffi::GstCaps
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -716,7 +695,7 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::Caps::new_empty(), { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::Caps::new_empty(), {
VideoEncoderImpl::get_caps( VideoEncoderImpl::get_caps(
imp, imp,
wrap.unsafe_cast_ref(), wrap.unsafe_cast_ref(),
@ -729,9 +708,9 @@ where
} }
unsafe extern "C" fn video_encoder_sink_event<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_sink_event<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
event: *mut gst_sys::GstEvent, event: *mut gst::ffi::GstEvent,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -739,16 +718,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.sink_event(wrap.unsafe_cast_ref(), from_glib_full(event)) imp.sink_event(wrap.unsafe_cast_ref(), from_glib_full(event))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_sink_query<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_sink_query<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -756,16 +735,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.sink_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query)) imp.sink_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_src_event<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_src_event<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
event: *mut gst_sys::GstEvent, event: *mut gst::ffi::GstEvent,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -773,16 +752,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.src_event(wrap.unsafe_cast_ref(), from_glib_full(event)) imp.src_event(wrap.unsafe_cast_ref(), from_glib_full(event))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_src_query<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_src_query<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -790,16 +769,16 @@ where
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
imp.src_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query)) imp.src_query(wrap.unsafe_cast_ref(), gst::QueryRef::from_mut_ptr(query))
}) })
.to_glib() .to_glib()
} }
unsafe extern "C" fn video_encoder_propose_allocation<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_propose_allocation<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -808,7 +787,7 @@ where
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
let query = gst::QueryRef::from_mut_ptr(query); let query = gst::QueryRef::from_mut_ptr(query);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.propose_allocation(wrap.unsafe_cast_ref(), query) { match imp.propose_allocation(wrap.unsafe_cast_ref(), query) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {
@ -821,9 +800,9 @@ where
} }
unsafe extern "C" fn video_encoder_decide_allocation<T: VideoEncoderImpl>( unsafe extern "C" fn video_encoder_decide_allocation<T: VideoEncoderImpl>(
ptr: *mut gst_video_sys::GstVideoEncoder, ptr: *mut ffi::GstVideoEncoder,
query: *mut gst_sys::GstQuery, query: *mut gst::ffi::GstQuery,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -832,7 +811,7 @@ where
let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr); let wrap: Borrowed<VideoEncoder> = from_glib_borrow(ptr);
let query = gst::QueryRef::from_mut_ptr(query); let query = gst::QueryRef::from_mut_ptr(query);
gst_panic_to_error!(&wrap, &instance.panicked(), false, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), false, {
match imp.decide_allocation(wrap.unsafe_cast_ref(), query) { match imp.decide_allocation(wrap.unsafe_cast_ref(), query) {
Ok(()) => true, Ok(()) => true,
Err(err) => { Err(err) => {

View file

@ -6,18 +6,14 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_sys;
use gst_video_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use gst;
use gst::subclass::prelude::*; use gst::subclass::prelude::*;
use gst_base::subclass::prelude::*; use gst_base::subclass::prelude::*;
use VideoSink; use crate::VideoSink;
pub trait VideoSinkImpl: VideoSinkImplExt + BaseSinkImpl + ElementImpl { pub trait VideoSinkImpl: VideoSinkImplExt + BaseSinkImpl + ElementImpl {
fn show_frame( fn show_frame(
@ -45,8 +41,7 @@ impl<T: VideoSinkImpl> VideoSinkImplExt for T {
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstVideoSinkClass;
data.as_ref().get_parent_class() as *mut gst_video_sys::GstVideoSinkClass;
(*parent_class) (*parent_class)
.show_frame .show_frame
.map(|f| { .map(|f| {
@ -73,9 +68,9 @@ where
} }
unsafe extern "C" fn video_sink_show_frame<T: VideoSinkImpl>( unsafe extern "C" fn video_sink_show_frame<T: VideoSinkImpl>(
ptr: *mut gst_video_sys::GstVideoSink, ptr: *mut ffi::GstVideoSink,
buffer: *mut gst_sys::GstBuffer, buffer: *mut gst::ffi::GstBuffer,
) -> gst_sys::GstFlowReturn ) -> gst::ffi::GstFlowReturn
where where
T::Instance: PanicPoison, T::Instance: PanicPoison,
{ {
@ -84,7 +79,7 @@ where
let wrap: Borrowed<VideoSink> = from_glib_borrow(ptr); let wrap: Borrowed<VideoSink> = from_glib_borrow(ptr);
let buffer = from_glib_borrow(buffer); let buffer = from_glib_borrow(buffer);
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, { gst::gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
imp.show_frame(wrap.unsafe_cast_ref(), &buffer).into() imp.show_frame(wrap.unsafe_cast_ref(), &buffer).into()
}) })
.to_glib() .to_glib()

View file

@ -7,6 +7,6 @@
// except according to those terms. // except according to those terms.
pub trait HasStreamLock { pub trait HasStreamLock {
fn get_stream_lock(&self) -> *mut glib_sys::GRecMutex; fn get_stream_lock(&self) -> *mut glib::ffi::GRecMutex;
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement; fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement;
} }

View file

@ -16,29 +16,29 @@ use once_cell::sync::Lazy;
pub static BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META: Lazy<&'static str> = pub static BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META: Lazy<&'static str> =
Lazy::new(|| unsafe { Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META) CStr::from_ptr(ffi::GST_BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static BUFFER_POOL_OPTION_VIDEO_ALIGNMENT: Lazy<&'static str> = Lazy::new(|| unsafe { pub static BUFFER_POOL_OPTION_VIDEO_ALIGNMENT: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT) CStr::from_ptr(ffi::GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META: Lazy<&'static str> = pub static BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META: Lazy<&'static str> =
Lazy::new(|| unsafe { Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META) CStr::from_ptr(ffi::GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static BUFFER_POOL_OPTION_VIDEO_META: Lazy<&'static str> = Lazy::new(|| unsafe { pub static BUFFER_POOL_OPTION_VIDEO_META: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_video_sys::GST_BUFFER_POOL_OPTION_VIDEO_META) CStr::from_ptr(ffi::GST_BUFFER_POOL_OPTION_VIDEO_META)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct VideoAlignment(pub(crate) gst_video_sys::GstVideoAlignment); pub struct VideoAlignment(pub(crate) ffi::GstVideoAlignment);
impl VideoAlignment { impl VideoAlignment {
pub fn get_padding_top(&self) -> u32 { pub fn get_padding_top(&self) -> u32 {
@ -53,7 +53,7 @@ impl VideoAlignment {
pub fn get_padding_right(&self) -> u32 { pub fn get_padding_right(&self) -> u32 {
self.0.padding_right self.0.padding_right
} }
pub fn get_stride_align(&self) -> &[u32; gst_video_sys::GST_VIDEO_MAX_PLANES as usize] { pub fn get_stride_align(&self) -> &[u32; ffi::GST_VIDEO_MAX_PLANES as usize] {
&self.0.stride_align &self.0.stride_align
} }
@ -62,12 +62,12 @@ impl VideoAlignment {
padding_bottom: u32, padding_bottom: u32,
padding_left: u32, padding_left: u32,
padding_right: u32, padding_right: u32,
stride_align: &[u32; gst_video_sys::GST_VIDEO_MAX_PLANES as usize], stride_align: &[u32; ffi::GST_VIDEO_MAX_PLANES as usize],
) -> Self { ) -> Self {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
let videoalignment = unsafe { let videoalignment = unsafe {
let mut videoalignment: gst_video_sys::GstVideoAlignment = mem::zeroed(); let mut videoalignment: ffi::GstVideoAlignment = mem::zeroed();
videoalignment.padding_top = padding_top; videoalignment.padding_top = padding_top;
videoalignment.padding_bottom = padding_bottom; videoalignment.padding_bottom = padding_bottom;
@ -92,7 +92,7 @@ impl VideoBufferPoolConfig for gst::BufferPoolConfig {
fn get_video_alignment(&self) -> Option<VideoAlignment> { fn get_video_alignment(&self) -> Option<VideoAlignment> {
unsafe { unsafe {
let mut alignment = mem::MaybeUninit::zeroed(); let mut alignment = mem::MaybeUninit::zeroed();
let ret = from_glib(gst_video_sys::gst_buffer_pool_config_get_video_alignment( let ret = from_glib(ffi::gst_buffer_pool_config_get_video_alignment(
self.as_ref().as_mut_ptr(), self.as_ref().as_mut_ptr(),
alignment.as_mut_ptr(), alignment.as_mut_ptr(),
)); ));
@ -106,7 +106,7 @@ impl VideoBufferPoolConfig for gst::BufferPoolConfig {
fn set_video_alignment(&mut self, align: &VideoAlignment) { fn set_video_alignment(&mut self, align: &VideoAlignment) {
unsafe { unsafe {
gst_video_sys::gst_buffer_pool_config_set_video_alignment( ffi::gst_buffer_pool_config_set_video_alignment(
self.as_mut().as_mut_ptr(), self.as_mut().as_mut_ptr(),
&align.0 as *const _ as *mut _, &align.0 as *const _ as *mut _,
) )

View file

@ -7,34 +7,28 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use crate::utils::HasStreamLock;
use crate::VideoCodecFrameFlags;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_video_sys;
use std::fmt; use std::fmt;
use std::mem; use std::mem;
use utils::HasStreamLock;
use VideoCodecFrameFlags;
pub struct VideoCodecFrame<'a> { pub struct VideoCodecFrame<'a> {
frame: *mut gst_video_sys::GstVideoCodecFrame, frame: *mut ffi::GstVideoCodecFrame,
/* GstVideoCodecFrame API isn't safe so protect the frame using the /* GstVideoCodecFrame API isn't safe so protect the frame using the
* element (decoder or encoder) stream lock */ * element (decoder or encoder) stream lock */
element: &'a dyn HasStreamLock, element: &'a dyn HasStreamLock,
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ::glib::translate::ToGlibPtr<'a, *mut gst_video_sys::GstVideoCodecFrame> impl<'a> ::glib::translate::ToGlibPtr<'a, *mut ffi::GstVideoCodecFrame> for VideoCodecFrame<'a> {
for VideoCodecFrame<'a>
{
type Storage = &'a Self; type Storage = &'a Self;
fn to_glib_none( fn to_glib_none(&'a self) -> ::glib::translate::Stash<'a, *mut ffi::GstVideoCodecFrame, Self> {
&'a self,
) -> ::glib::translate::Stash<'a, *mut gst_video_sys::GstVideoCodecFrame, Self> {
Stash(self.frame, self) Stash(self.frame, self)
} }
fn to_glib_full(&self) -> *mut gst_video_sys::GstVideoCodecFrame { fn to_glib_full(&self) -> *mut ffi::GstVideoCodecFrame {
unimplemented!() unimplemented!()
} }
} }
@ -65,12 +59,12 @@ impl<'a> fmt::Debug for VideoCodecFrame<'a> {
impl<'a> VideoCodecFrame<'a> { impl<'a> VideoCodecFrame<'a> {
// Take ownership of @frame // Take ownership of @frame
pub(crate) unsafe fn new<T: HasStreamLock>( pub(crate) unsafe fn new<T: HasStreamLock>(
frame: *mut gst_video_sys::GstVideoCodecFrame, frame: *mut ffi::GstVideoCodecFrame,
element: &'a T, element: &'a T,
) -> Self { ) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
let stream_lock = element.get_stream_lock(); let stream_lock = element.get_stream_lock();
glib_sys::g_rec_mutex_lock(stream_lock); glib::ffi::g_rec_mutex_lock(stream_lock);
Self { frame, element } Self { frame, element }
} }
@ -161,8 +155,8 @@ impl<'a> VideoCodecFrame<'a> {
if ptr.is_null() { if ptr.is_null() {
None None
} else { } else {
let writable: bool = from_glib(gst_sys::gst_mini_object_is_writable( let writable: bool = from_glib(gst::ffi::gst_mini_object_is_writable(
ptr as *const gst_sys::GstMiniObject, ptr as *const gst::ffi::GstMiniObject,
)); ));
assert!(writable); assert!(writable);
@ -176,12 +170,12 @@ impl<'a> VideoCodecFrame<'a> {
let prev = (*self.to_glib_none().0).output_buffer; let prev = (*self.to_glib_none().0).output_buffer;
if !prev.is_null() { if !prev.is_null() {
gst_sys::gst_mini_object_unref(prev as *mut gst_sys::GstMiniObject); gst::ffi::gst_mini_object_unref(prev as *mut gst::ffi::GstMiniObject);
} }
let ptr = output_buffer.into_ptr(); let ptr = output_buffer.into_ptr();
let writable: bool = from_glib(gst_sys::gst_mini_object_is_writable( let writable: bool = from_glib(gst::ffi::gst_mini_object_is_writable(
ptr as *const gst_sys::GstMiniObject, ptr as *const gst::ffi::GstMiniObject,
)); ));
assert!(writable); assert!(writable);
@ -194,9 +188,9 @@ impl<'a> VideoCodecFrame<'a> {
} }
#[doc(hidden)] #[doc(hidden)]
pub unsafe fn into_ptr(self) -> *mut gst_video_sys::GstVideoCodecFrame { pub unsafe fn into_ptr(self) -> *mut ffi::GstVideoCodecFrame {
let stream_lock = self.element.get_stream_lock(); let stream_lock = self.element.get_stream_lock();
glib_sys::g_rec_mutex_unlock(stream_lock); glib::ffi::g_rec_mutex_unlock(stream_lock);
let s = mem::ManuallyDrop::new(self); let s = mem::ManuallyDrop::new(self);
s.to_glib_none().0 s.to_glib_none().0
@ -207,9 +201,9 @@ impl<'a> Drop for VideoCodecFrame<'a> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
let stream_lock = self.element.get_stream_lock(); let stream_lock = self.element.get_stream_lock();
glib_sys::g_rec_mutex_unlock(stream_lock); glib::ffi::g_rec_mutex_unlock(stream_lock);
gst_video_sys::gst_video_codec_frame_unref(self.frame); ffi::gst_video_codec_frame_unref(self.frame);
} }
} }
} }

View file

@ -7,21 +7,17 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use crate::utils::HasStreamLock;
use glib::translate::*; use glib::translate::*;
use gst_sys;
use gst_video_sys;
use std::fmt; use std::fmt;
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ptr; use std::ptr;
use utils::HasStreamLock;
use gst; use crate::video_info::VideoInfo;
use video_info::VideoInfo;
pub trait VideoCodecStateContext<'a> { pub trait VideoCodecStateContext<'a> {
fn get_element(&self) -> Option<&'a dyn HasStreamLock>; fn get_element(&self) -> Option<&'a dyn HasStreamLock>;
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement; fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement;
} }
pub struct InNegotiation<'a> { pub struct InNegotiation<'a> {
@ -36,7 +32,7 @@ impl<'a> VideoCodecStateContext<'a> for InNegotiation<'a> {
Some(self.element) Some(self.element)
} }
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement { fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement {
self.element.get_element_as_ptr() self.element.get_element_as_ptr()
} }
} }
@ -46,13 +42,13 @@ impl<'a> VideoCodecStateContext<'a> for Readable {
None None
} }
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement { fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement {
ptr::null() ptr::null()
} }
} }
pub struct VideoCodecState<'a, T: VideoCodecStateContext<'a>> { pub struct VideoCodecState<'a, T: VideoCodecStateContext<'a>> {
state: *mut gst_video_sys::GstVideoCodecState, state: *mut ffi::GstVideoCodecState,
pub(crate) context: T, pub(crate) context: T,
phantom: PhantomData<&'a T>, phantom: PhantomData<&'a T>,
} }
@ -70,7 +66,7 @@ impl<'a, T: VideoCodecStateContext<'a>> fmt::Debug for VideoCodecState<'a, T> {
impl<'a> VideoCodecState<'a, Readable> { impl<'a> VideoCodecState<'a, Readable> {
// Take ownership of @state // Take ownership of @state
pub(crate) unsafe fn new(state: *mut gst_video_sys::GstVideoCodecState) -> Self { pub(crate) unsafe fn new(state: *mut ffi::GstVideoCodecState) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
Self { Self {
state, state,
@ -83,12 +79,12 @@ impl<'a> VideoCodecState<'a, Readable> {
impl<'a> VideoCodecState<'a, InNegotiation<'a>> { impl<'a> VideoCodecState<'a, InNegotiation<'a>> {
// Take ownership of @state // Take ownership of @state
pub(crate) unsafe fn new<T: HasStreamLock>( pub(crate) unsafe fn new<T: HasStreamLock>(
state: *mut gst_video_sys::GstVideoCodecState, state: *mut ffi::GstVideoCodecState,
element: &'a T, element: &'a T,
) -> Self { ) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
let stream_lock = element.get_stream_lock(); let stream_lock = element.get_stream_lock();
glib_sys::g_rec_mutex_lock(stream_lock); glib::ffi::g_rec_mutex_lock(stream_lock);
Self { Self {
state, state,
context: InNegotiation { element }, context: InNegotiation { element },
@ -141,7 +137,7 @@ impl<'a, T: VideoCodecStateContext<'a>> VideoCodecState<'a, T> {
} }
} }
#[doc(hidden)] #[doc(hidden)]
pub fn as_mut_ptr(&self) -> *mut gst_video_sys::GstVideoCodecState { pub fn as_mut_ptr(&self) -> *mut ffi::GstVideoCodecState {
self.state self.state
} }
} }
@ -151,9 +147,9 @@ impl<'a, T: VideoCodecStateContext<'a>> Drop for VideoCodecState<'a, T> {
unsafe { unsafe {
if let Some(element) = self.context.get_element() { if let Some(element) = self.context.get_element() {
let stream_lock = element.get_stream_lock(); let stream_lock = element.get_stream_lock();
glib_sys::g_rec_mutex_unlock(stream_lock); glib::ffi::g_rec_mutex_unlock(stream_lock);
} }
gst_video_sys::gst_video_codec_state_unref(self.state); ffi::gst_video_codec_state_unref(self.state);
} }
} }
} }
@ -170,12 +166,12 @@ impl<'a> VideoCodecState<'a, InNegotiation<'a>> {
let prev = (*self.as_mut_ptr()).caps; let prev = (*self.as_mut_ptr()).caps;
if !prev.is_null() { if !prev.is_null() {
gst_sys::gst_mini_object_unref(prev as *mut gst_sys::GstMiniObject) gst::ffi::gst_mini_object_unref(prev as *mut gst::ffi::GstMiniObject)
} }
ptr::write( ptr::write(
&mut (*self.as_mut_ptr()).caps, &mut (*self.as_mut_ptr()).caps,
gst_sys::gst_mini_object_ref(caps.as_mut_ptr() as *mut _) as *mut _, gst::ffi::gst_mini_object_ref(caps.as_mut_ptr() as *mut _) as *mut _,
); );
} }
} }
@ -185,12 +181,12 @@ impl<'a> VideoCodecState<'a, InNegotiation<'a>> {
let prev = (*self.as_mut_ptr()).codec_data; let prev = (*self.as_mut_ptr()).codec_data;
if !prev.is_null() { if !prev.is_null() {
gst_sys::gst_mini_object_unref(prev as *mut gst_sys::GstMiniObject) gst::ffi::gst_mini_object_unref(prev as *mut gst::ffi::GstMiniObject)
} }
ptr::write( ptr::write(
&mut (*self.as_mut_ptr()).codec_data, &mut (*self.as_mut_ptr()).codec_data,
gst_sys::gst_mini_object_ref(codec_data.as_mut_ptr() as *mut _) as *mut _, gst::ffi::gst_mini_object_ref(codec_data.as_mut_ptr() as *mut _) as *mut _,
); );
} }
} }
@ -200,12 +196,12 @@ impl<'a> VideoCodecState<'a, InNegotiation<'a>> {
let prev = (*self.as_mut_ptr()).allocation_caps; let prev = (*self.as_mut_ptr()).allocation_caps;
if !prev.is_null() { if !prev.is_null() {
gst_sys::gst_mini_object_unref(prev as *mut gst_sys::GstMiniObject) gst::ffi::gst_mini_object_unref(prev as *mut gst::ffi::GstMiniObject)
} }
ptr::write( ptr::write(
&mut (*self.as_mut_ptr()).allocation_caps, &mut (*self.as_mut_ptr()).allocation_caps,
gst_sys::gst_mini_object_ref(allocation_caps.as_mut_ptr() as *mut _) as *mut _, gst::ffi::gst_mini_object_ref(allocation_caps.as_mut_ptr() as *mut _) as *mut _,
); );
} }
} }
@ -214,7 +210,7 @@ impl<'a> VideoCodecState<'a, InNegotiation<'a>> {
impl<'a> Clone for VideoCodecState<'a, Readable> { impl<'a> Clone for VideoCodecState<'a, Readable> {
fn clone(&self) -> Self { fn clone(&self) -> Self {
unsafe { unsafe {
let state = gst_video_sys::gst_video_codec_state_ref(self.state); let state = ffi::gst_video_codec_state_ref(self.state);
Self::new(state) Self::new(state)
} }
} }

View file

@ -6,23 +6,19 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_video_sys;
use glib;
use glib::translate::ToGlibPtr; use glib::translate::ToGlibPtr;
use gst;
use std::convert; use std::convert;
use std::ops; use std::ops;
use std::ptr; use std::ptr;
#[derive(Debug)] #[derive(Debug)]
pub struct VideoConverter(ptr::NonNull<gst_video_sys::GstVideoConverter>); pub struct VideoConverter(ptr::NonNull<ffi::GstVideoConverter>);
impl Drop for VideoConverter { impl Drop for VideoConverter {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
gst_video_sys::gst_video_converter_free(self.0.as_ptr()); ffi::gst_video_converter_free(self.0.as_ptr());
} }
} }
} }
@ -32,27 +28,27 @@ unsafe impl Sync for VideoConverter {}
impl VideoConverter { impl VideoConverter {
pub fn new( pub fn new(
in_info: &::VideoInfo, in_info: &crate::VideoInfo,
out_info: &::VideoInfo, out_info: &crate::VideoInfo,
config: Option<VideoConverterConfig>, config: Option<VideoConverterConfig>,
) -> Result<Self, glib::BoolError> { ) -> Result<Self, glib::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
if in_info.fps() != out_info.fps() { if in_info.fps() != out_info.fps() {
return Err(glib_bool_error!("Can't do framerate conversion")); return Err(glib::glib_bool_error!("Can't do framerate conversion"));
} }
if in_info.interlace_mode() != out_info.interlace_mode() { if in_info.interlace_mode() != out_info.interlace_mode() {
return Err(glib_bool_error!("Can't do interlacing conversion")); return Err(glib::glib_bool_error!("Can't do interlacing conversion"));
} }
unsafe { unsafe {
let ptr = gst_video_sys::gst_video_converter_new( let ptr = ffi::gst_video_converter_new(
in_info.to_glib_none().0 as *mut _, in_info.to_glib_none().0 as *mut _,
out_info.to_glib_none().0 as *mut _, out_info.to_glib_none().0 as *mut _,
config.map(|s| s.0.into_ptr()).unwrap_or(ptr::null_mut()), config.map(|s| s.0.into_ptr()).unwrap_or(ptr::null_mut()),
); );
if ptr.is_null() { if ptr.is_null() {
Err(glib_bool_error!("Failed to create video converter")) Err(glib::glib_bool_error!("Failed to create video converter"))
} else { } else {
Ok(VideoConverter(ptr::NonNull::new_unchecked(ptr))) Ok(VideoConverter(ptr::NonNull::new_unchecked(ptr)))
} }
@ -62,7 +58,7 @@ impl VideoConverter {
pub fn get_config(&self) -> VideoConverterConfig { pub fn get_config(&self) -> VideoConverterConfig {
unsafe { unsafe {
VideoConverterConfig( VideoConverterConfig(
gst::StructureRef::from_glib_borrow(gst_video_sys::gst_video_converter_get_config( gst::StructureRef::from_glib_borrow(ffi::gst_video_converter_get_config(
self.0.as_ptr(), self.0.as_ptr(),
)) ))
.to_owned(), .to_owned(),
@ -72,35 +68,27 @@ impl VideoConverter {
pub fn set_config(&mut self, config: VideoConverterConfig) { pub fn set_config(&mut self, config: VideoConverterConfig) {
unsafe { unsafe {
gst_video_sys::gst_video_converter_set_config(self.0.as_ptr(), config.0.into_ptr()); ffi::gst_video_converter_set_config(self.0.as_ptr(), config.0.into_ptr());
} }
} }
pub fn frame<T>( pub fn frame<T>(
&self, &self,
src: &::VideoFrame<T>, src: &crate::VideoFrame<T>,
dest: &mut ::VideoFrame<::video_frame::Writable>, dest: &mut crate::VideoFrame<crate::video_frame::Writable>,
) { ) {
unsafe { unsafe {
gst_video_sys::gst_video_converter_frame( ffi::gst_video_converter_frame(self.0.as_ptr(), src.as_ptr(), dest.as_mut_ptr());
self.0.as_ptr(),
src.as_ptr(),
dest.as_mut_ptr(),
);
} }
} }
pub fn frame_ref<T>( pub fn frame_ref<T>(
&self, &self,
src: &::VideoFrameRef<T>, src: &crate::VideoFrameRef<T>,
dest: &mut ::VideoFrameRef<&mut gst::BufferRef>, dest: &mut crate::VideoFrameRef<&mut gst::BufferRef>,
) { ) {
unsafe { unsafe {
gst_video_sys::gst_video_converter_frame( ffi::gst_video_converter_frame(self.0.as_ptr(), src.as_ptr(), dest.as_mut_ptr());
self.0.as_ptr(),
src.as_ptr(),
dest.as_mut_ptr(),
);
} }
} }
} }
@ -148,7 +136,9 @@ impl convert::TryFrom<gst::Structure> for VideoConverterConfig {
if v.get_name() == "GstVideoConverter" { if v.get_name() == "GstVideoConverter" {
Ok(VideoConverterConfig(v)) Ok(VideoConverterConfig(v))
} else { } else {
Err(glib_bool_error!("Structure is no VideoConverterConfig")) Err(glib::glib_bool_error!(
"Structure is no VideoConverterConfig"
))
} }
} }
} }
@ -174,26 +164,26 @@ impl VideoConverterConfig {
VideoConverterConfig(gst::Structure::new_empty("GstVideoConverter")) VideoConverterConfig(gst::Structure::new_empty("GstVideoConverter"))
} }
pub fn set_resampler_method(&mut self, v: ::VideoResamplerMethod) { pub fn set_resampler_method(&mut self, v: crate::VideoResamplerMethod) {
self.0.set("GstVideoConverter.resampler-method", &v); self.0.set("GstVideoConverter.resampler-method", &v);
} }
pub fn get_resampler_method(&self) -> ::VideoResamplerMethod { pub fn get_resampler_method(&self) -> crate::VideoResamplerMethod {
self.0 self.0
.get_optional("GstVideoConverter.resampler-method") .get_optional("GstVideoConverter.resampler-method")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoResamplerMethod::Cubic) .unwrap_or(crate::VideoResamplerMethod::Cubic)
} }
pub fn set_chroma_resampler_method(&mut self, v: ::VideoResamplerMethod) { pub fn set_chroma_resampler_method(&mut self, v: crate::VideoResamplerMethod) {
self.0.set("GstVideoConverter.chroma-resampler-method", &v); self.0.set("GstVideoConverter.chroma-resampler-method", &v);
} }
pub fn get_chroma_resampler_method(&self) -> ::VideoResamplerMethod { pub fn get_chroma_resampler_method(&self) -> crate::VideoResamplerMethod {
self.0 self.0
.get_optional("GstVideoConverter.chroma-resampler-method") .get_optional("GstVideoConverter.chroma-resampler-method")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoResamplerMethod::Linear) .unwrap_or(crate::VideoResamplerMethod::Linear)
} }
pub fn set_resampler_taps(&mut self, v: u32) { pub fn set_resampler_taps(&mut self, v: u32) {
@ -207,15 +197,15 @@ impl VideoConverterConfig {
.unwrap_or(0) .unwrap_or(0)
} }
pub fn set_dither_method(&mut self, v: ::VideoDitherMethod) { pub fn set_dither_method(&mut self, v: crate::VideoDitherMethod) {
self.0.set("GstVideoConverter.dither-method", &v); self.0.set("GstVideoConverter.dither-method", &v);
} }
pub fn get_dither_method(&self) -> ::VideoDitherMethod { pub fn get_dither_method(&self) -> crate::VideoDitherMethod {
self.0 self.0
.get_optional("GstVideoConverter.dither-method") .get_optional("GstVideoConverter.dither-method")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoDitherMethod::Bayer) .unwrap_or(crate::VideoDitherMethod::Bayer)
} }
pub fn set_dither_quantization(&mut self, v: u32) { pub fn set_dither_quantization(&mut self, v: u32) {
@ -351,15 +341,15 @@ impl VideoConverterConfig {
.unwrap_or(1.0) .unwrap_or(1.0)
} }
pub fn set_alpha_mode(&mut self, v: ::VideoAlphaMode) { pub fn set_alpha_mode(&mut self, v: crate::VideoAlphaMode) {
self.0.set("GstVideoConverter.alpha-mode", &v); self.0.set("GstVideoConverter.alpha-mode", &v);
} }
pub fn get_alpha_mode(&self) -> ::VideoAlphaMode { pub fn get_alpha_mode(&self) -> crate::VideoAlphaMode {
self.0 self.0
.get_optional("GstVideoConverter.alpha-mode") .get_optional("GstVideoConverter.alpha-mode")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoAlphaMode::Copy) .unwrap_or(crate::VideoAlphaMode::Copy)
} }
pub fn set_border_argb(&mut self, v: u32) { pub fn set_border_argb(&mut self, v: u32) {
@ -373,48 +363,48 @@ impl VideoConverterConfig {
.unwrap_or(0xff_00_00_00) .unwrap_or(0xff_00_00_00)
} }
pub fn set_chroma_mode(&mut self, v: ::VideoChromaMode) { pub fn set_chroma_mode(&mut self, v: crate::VideoChromaMode) {
self.0.set("GstVideoConverter.chroma-mode", &v); self.0.set("GstVideoConverter.chroma-mode", &v);
} }
pub fn get_chroma_mode(&self) -> ::VideoChromaMode { pub fn get_chroma_mode(&self) -> crate::VideoChromaMode {
self.0 self.0
.get_optional("GstVideoConverter.chroma-mode") .get_optional("GstVideoConverter.chroma-mode")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoChromaMode::Full) .unwrap_or(crate::VideoChromaMode::Full)
} }
pub fn set_matrix_mode(&mut self, v: ::VideoMatrixMode) { pub fn set_matrix_mode(&mut self, v: crate::VideoMatrixMode) {
self.0.set("GstVideoConverter.matrix-mode", &v); self.0.set("GstVideoConverter.matrix-mode", &v);
} }
pub fn get_matrix_mode(&self) -> ::VideoMatrixMode { pub fn get_matrix_mode(&self) -> crate::VideoMatrixMode {
self.0 self.0
.get_optional("GstVideoConverter.matrix-mode") .get_optional("GstVideoConverter.matrix-mode")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoMatrixMode::Full) .unwrap_or(crate::VideoMatrixMode::Full)
} }
pub fn set_gamma_mode(&mut self, v: ::VideoGammaMode) { pub fn set_gamma_mode(&mut self, v: crate::VideoGammaMode) {
self.0.set("GstVideoConverter.gamma-mode", &v); self.0.set("GstVideoConverter.gamma-mode", &v);
} }
pub fn get_gamma_mode(&self) -> ::VideoGammaMode { pub fn get_gamma_mode(&self) -> crate::VideoGammaMode {
self.0 self.0
.get_optional("GstVideoConverter.gamma-mode") .get_optional("GstVideoConverter.gamma-mode")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoGammaMode::None) .unwrap_or(crate::VideoGammaMode::None)
} }
pub fn set_primaries_mode(&mut self, v: ::VideoPrimariesMode) { pub fn set_primaries_mode(&mut self, v: crate::VideoPrimariesMode) {
self.0.set("GstVideoConverter.primaries-mode", &v); self.0.set("GstVideoConverter.primaries-mode", &v);
} }
pub fn get_primaries_mode(&self) -> ::VideoPrimariesMode { pub fn get_primaries_mode(&self) -> crate::VideoPrimariesMode {
self.0 self.0
.get_optional("GstVideoConverter.primaries-mode") .get_optional("GstVideoConverter.primaries-mode")
.expect("Wrong type") .expect("Wrong type")
.unwrap_or(::VideoPrimariesMode::None) .unwrap_or(crate::VideoPrimariesMode::None)
} }
pub fn set_threads(&mut self, v: u32) { pub fn set_threads(&mut self, v: u32) {

View file

@ -7,33 +7,31 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib::object::IsA; use crate::utils::HasStreamLock;
use glib::translate::*; use crate::video_codec_state::{InNegotiation, Readable, VideoCodecState, VideoCodecStateContext};
use gst; use crate::VideoCodecFrame;
use gst_video_sys; use crate::VideoDecoder;
use std::mem; use crate::VideoFormat;
use std::ptr;
use utils::HasStreamLock;
use video_codec_state::{InNegotiation, Readable, VideoCodecState, VideoCodecStateContext};
use VideoCodecFrame;
use VideoDecoder;
use VideoFormat;
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
use VideoInterlaceMode; use crate::VideoInterlaceMode;
use glib::object::IsA;
use glib::translate::*;
use std::mem;
use std::ptr;
extern "C" { extern "C" {
fn _gst_video_decoder_error( fn _gst_video_decoder_error(
dec: *mut gst_video_sys::GstVideoDecoder, dec: *mut ffi::GstVideoDecoder,
weight: i32, weight: i32,
domain: glib_sys::GQuark, domain: glib::ffi::GQuark,
code: i32, code: i32,
txt: *mut libc::c_char, txt: *mut libc::c_char,
debug: *mut libc::c_char, debug: *mut libc::c_char,
file: *const libc::c_char, file: *const libc::c_char,
function: *const libc::c_char, function: *const libc::c_char,
line: i32, line: i32,
) -> gst_sys::GstFlowReturn; ) -> gst::ffi::GstFlowReturn;
} }
pub trait VideoDecoderExtManual: 'static { pub trait VideoDecoderExtManual: 'static {
@ -106,13 +104,11 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
let params_ptr = params.to_glib_none().0 as *mut _; let params_ptr = params.to_glib_none().0 as *mut _;
from_glib( from_glib(ffi::gst_video_decoder_allocate_output_frame_with_params(
gst_video_sys::gst_video_decoder_allocate_output_frame_with_params(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.to_glib_none().0, frame.to_glib_none().0,
params_ptr, params_ptr,
), ))
)
}; };
ret.into_result() ret.into_result()
} }
@ -121,7 +117,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
unsafe { unsafe {
let mut allocator = ptr::null_mut(); let mut allocator = ptr::null_mut();
let mut params = mem::zeroed(); let mut params = mem::zeroed();
gst_video_sys::gst_video_decoder_get_allocator( ffi::gst_video_decoder_get_allocator(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
&mut allocator, &mut allocator,
&mut params, &mut params,
@ -132,7 +128,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn have_frame(&self) -> Result<gst::FlowSuccess, gst::FlowError> { fn have_frame(&self) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_decoder_have_frame( from_glib(ffi::gst_video_decoder_have_frame(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
)) ))
}; };
@ -141,7 +137,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn finish_frame(&self, frame: VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> { fn finish_frame(&self, frame: VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_decoder_finish_frame( from_glib(ffi::gst_video_decoder_finish_frame(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.into_ptr(), frame.into_ptr(),
)) ))
@ -151,16 +147,13 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn release_frame(&self, frame: VideoCodecFrame) { fn release_frame(&self, frame: VideoCodecFrame) {
unsafe { unsafe {
gst_video_sys::gst_video_decoder_release_frame( ffi::gst_video_decoder_release_frame(self.as_ref().to_glib_none().0, frame.into_ptr())
self.as_ref().to_glib_none().0,
frame.into_ptr(),
)
} }
} }
fn drop_frame(&self, frame: VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> { fn drop_frame(&self, frame: VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_decoder_drop_frame( from_glib(ffi::gst_video_decoder_drop_frame(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.into_ptr(), frame.into_ptr(),
)) ))
@ -169,11 +162,11 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
} }
fn get_latency(&self) -> (gst::ClockTime, gst::ClockTime) { fn get_latency(&self) -> (gst::ClockTime, gst::ClockTime) {
let mut min_latency = gst_sys::GST_CLOCK_TIME_NONE; let mut min_latency = gst::ffi::GST_CLOCK_TIME_NONE;
let mut max_latency = gst_sys::GST_CLOCK_TIME_NONE; let mut max_latency = gst::ffi::GST_CLOCK_TIME_NONE;
unsafe { unsafe {
gst_video_sys::gst_video_decoder_get_latency( ffi::gst_video_decoder_get_latency(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
&mut min_latency, &mut min_latency,
&mut max_latency, &mut max_latency,
@ -185,7 +178,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) { fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) {
unsafe { unsafe {
gst_video_sys::gst_video_decoder_set_latency( ffi::gst_video_decoder_set_latency(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
min_latency.to_glib(), min_latency.to_glib(),
max_latency.to_glib(), max_latency.to_glib(),
@ -195,7 +188,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn get_frame(&self, frame_number: i32) -> Option<VideoCodecFrame> { fn get_frame(&self, frame_number: i32) -> Option<VideoCodecFrame> {
let frame = unsafe { let frame = unsafe {
gst_video_sys::gst_video_decoder_get_frame(self.as_ref().to_glib_none().0, frame_number) ffi::gst_video_decoder_get_frame(self.as_ref().to_glib_none().0, frame_number)
}; };
if frame.is_null() { if frame.is_null() {
@ -207,9 +200,8 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
fn get_frames(&self) -> Vec<VideoCodecFrame> { fn get_frames(&self) -> Vec<VideoCodecFrame> {
unsafe { unsafe {
let frames = let frames = ffi::gst_video_decoder_get_frames(self.as_ref().to_glib_none().0);
gst_video_sys::gst_video_decoder_get_frames(self.as_ref().to_glib_none().0); let mut iter: *const glib::ffi::GList = frames;
let mut iter: *const glib_sys::GList = frames;
let mut vec = Vec::new(); let mut vec = Vec::new();
while !iter.is_null() { while !iter.is_null() {
@ -220,15 +212,14 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
iter = (*iter).next; iter = (*iter).next;
} }
glib_sys::g_list_free(frames); glib::ffi::g_list_free(frames);
vec vec
} }
} }
fn get_oldest_frame(&self) -> Option<VideoCodecFrame> { fn get_oldest_frame(&self) -> Option<VideoCodecFrame> {
let frame = unsafe { let frame =
gst_video_sys::gst_video_decoder_get_oldest_frame(self.as_ref().to_glib_none().0) unsafe { ffi::gst_video_decoder_get_oldest_frame(self.as_ref().to_glib_none().0) };
};
if frame.is_null() { if frame.is_null() {
None None
@ -238,9 +229,8 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
} }
fn get_output_state(&self) -> Option<VideoCodecState<'static, Readable>> { fn get_output_state(&self) -> Option<VideoCodecState<'static, Readable>> {
let state = unsafe { let state =
gst_video_sys::gst_video_decoder_get_output_state(self.as_ref().to_glib_none().0) unsafe { ffi::gst_video_decoder_get_output_state(self.as_ref().to_glib_none().0) };
};
if state.is_null() { if state.is_null() {
None None
@ -261,7 +251,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
Some(reference) => reference.as_mut_ptr(), Some(reference) => reference.as_mut_ptr(),
None => ptr::null_mut(), None => ptr::null_mut(),
}; };
gst_video_sys::gst_video_decoder_set_output_state( ffi::gst_video_decoder_set_output_state(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
fmt.to_glib(), fmt.to_glib(),
width, width,
@ -292,7 +282,7 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
Some(reference) => reference.as_mut_ptr(), Some(reference) => reference.as_mut_ptr(),
None => ptr::null_mut(), None => ptr::null_mut(),
}; };
gst_video_sys::gst_video_decoder_set_interlaced_output_state( ffi::gst_video_decoder_set_interlaced_output_state(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
fmt.to_glib(), fmt.to_glib(),
mode.to_glib(), mode.to_glib(),
@ -314,11 +304,11 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
output_state: VideoCodecState<'a, InNegotiation<'a>>, output_state: VideoCodecState<'a, InNegotiation<'a>>,
) -> Result<(), gst::FlowError> { ) -> Result<(), gst::FlowError> {
// Consume output_state so user won't be able to modify it anymore // Consume output_state so user won't be able to modify it anymore
let self_ptr = self.to_glib_none().0 as *const gst_sys::GstElement; let self_ptr = self.to_glib_none().0 as *const gst::ffi::GstElement;
assert_eq!(output_state.context.get_element_as_ptr(), self_ptr); assert_eq!(output_state.context.get_element_as_ptr(), self_ptr);
let ret = unsafe { let ret = unsafe {
from_glib(gst_video_sys::gst_video_decoder_negotiate( from_glib(ffi::gst_video_decoder_negotiate(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
)) ))
}; };
@ -356,14 +346,14 @@ impl<O: IsA<VideoDecoder>> VideoDecoderExtManual for O {
} }
impl HasStreamLock for VideoDecoder { impl HasStreamLock for VideoDecoder {
fn get_stream_lock(&self) -> *mut glib_sys::GRecMutex { fn get_stream_lock(&self) -> *mut glib::ffi::GRecMutex {
let decoder_sys: *const gstreamer_video_sys::GstVideoDecoder = self.to_glib_none().0; let decoder_sys: *const ffi::GstVideoDecoder = self.to_glib_none().0;
unsafe { &(*decoder_sys).stream_lock as *const _ as usize as *mut _ } unsafe { &(*decoder_sys).stream_lock as *const _ as usize as *mut _ }
} }
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement { fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement {
let decoder_sys: *const gstreamer_video_sys::GstVideoDecoder = self.to_glib_none().0; let decoder_sys: *const ffi::GstVideoDecoder = self.to_glib_none().0;
decoder_sys as *const gst_sys::GstElement decoder_sys as *const gst::ffi::GstElement
} }
} }

View file

@ -8,16 +8,14 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use crate::utils::HasStreamLock;
use crate::video_codec_state::{InNegotiation, Readable, VideoCodecState, VideoCodecStateContext};
use crate::VideoCodecFrame;
use crate::VideoEncoder;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_video_sys;
use std::mem; use std::mem;
use std::ptr; use std::ptr;
use utils::HasStreamLock;
use video_codec_state::{InNegotiation, Readable, VideoCodecState, VideoCodecStateContext};
use VideoCodecFrame;
use VideoEncoder;
pub trait VideoEncoderExtManual: 'static { pub trait VideoEncoderExtManual: 'static {
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
@ -68,7 +66,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
size: usize, size: usize,
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_encoder_allocate_output_frame( from_glib(ffi::gst_video_encoder_allocate_output_frame(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.to_glib_none().0, frame.to_glib_none().0,
size, size,
@ -81,7 +79,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
unsafe { unsafe {
let mut allocator = ptr::null_mut(); let mut allocator = ptr::null_mut();
let mut params = mem::zeroed(); let mut params = mem::zeroed();
gst_video_sys::gst_video_encoder_get_allocator( ffi::gst_video_encoder_get_allocator(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
&mut allocator, &mut allocator,
&mut params, &mut params,
@ -95,7 +93,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
frame: Option<VideoCodecFrame>, frame: Option<VideoCodecFrame>,
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_encoder_finish_frame( from_glib(ffi::gst_video_encoder_finish_frame(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.map(|f| f.into_ptr()).unwrap_or(ptr::null_mut()), frame.map(|f| f.into_ptr()).unwrap_or(ptr::null_mut()),
)) ))
@ -107,7 +105,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
fn finish_subframe(&self, frame: &VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> { fn finish_subframe(&self, frame: &VideoCodecFrame) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_video_sys::gst_video_encoder_finish_subframe( from_glib(ffi::gst_video_encoder_finish_subframe(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
frame.to_glib_none().0, frame.to_glib_none().0,
)) ))
@ -116,11 +114,11 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
} }
fn get_latency(&self) -> (gst::ClockTime, gst::ClockTime) { fn get_latency(&self) -> (gst::ClockTime, gst::ClockTime) {
let mut min_latency = gst_sys::GST_CLOCK_TIME_NONE; let mut min_latency = gst::ffi::GST_CLOCK_TIME_NONE;
let mut max_latency = gst_sys::GST_CLOCK_TIME_NONE; let mut max_latency = gst::ffi::GST_CLOCK_TIME_NONE;
unsafe { unsafe {
gst_video_sys::gst_video_encoder_get_latency( ffi::gst_video_encoder_get_latency(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
&mut min_latency, &mut min_latency,
&mut max_latency, &mut max_latency,
@ -132,7 +130,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) { fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) {
unsafe { unsafe {
gst_video_sys::gst_video_encoder_set_latency( ffi::gst_video_encoder_set_latency(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
min_latency.to_glib(), min_latency.to_glib(),
max_latency.to_glib(), max_latency.to_glib(),
@ -142,7 +140,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
fn get_frame(&self, frame_number: i32) -> Option<VideoCodecFrame> { fn get_frame(&self, frame_number: i32) -> Option<VideoCodecFrame> {
let frame = unsafe { let frame = unsafe {
gst_video_sys::gst_video_encoder_get_frame(self.as_ref().to_glib_none().0, frame_number) ffi::gst_video_encoder_get_frame(self.as_ref().to_glib_none().0, frame_number)
}; };
if frame.is_null() { if frame.is_null() {
@ -154,9 +152,8 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
fn get_frames(&self) -> Vec<VideoCodecFrame> { fn get_frames(&self) -> Vec<VideoCodecFrame> {
unsafe { unsafe {
let frames = let frames = ffi::gst_video_encoder_get_frames(self.as_ref().to_glib_none().0);
gst_video_sys::gst_video_encoder_get_frames(self.as_ref().to_glib_none().0); let mut iter: *const glib::ffi::GList = frames;
let mut iter: *const glib_sys::GList = frames;
let mut vec = Vec::new(); let mut vec = Vec::new();
while !iter.is_null() { while !iter.is_null() {
@ -167,15 +164,14 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
iter = (*iter).next; iter = (*iter).next;
} }
glib_sys::g_list_free(frames); glib::ffi::g_list_free(frames);
vec vec
} }
} }
fn get_oldest_frame(&self) -> Option<VideoCodecFrame> { fn get_oldest_frame(&self) -> Option<VideoCodecFrame> {
let frame = unsafe { let frame =
gst_video_sys::gst_video_encoder_get_oldest_frame(self.as_ref().to_glib_none().0) unsafe { ffi::gst_video_encoder_get_oldest_frame(self.as_ref().to_glib_none().0) };
};
if frame.is_null() { if frame.is_null() {
None None
@ -185,9 +181,8 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
} }
fn get_output_state(&self) -> Option<VideoCodecState<'static, Readable>> { fn get_output_state(&self) -> Option<VideoCodecState<'static, Readable>> {
let state = unsafe { let state =
gst_video_sys::gst_video_encoder_get_output_state(self.as_ref().to_glib_none().0) unsafe { ffi::gst_video_encoder_get_output_state(self.as_ref().to_glib_none().0) };
};
if state.is_null() { if state.is_null() {
None None
@ -206,7 +201,7 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
Some(reference) => reference.as_mut_ptr(), Some(reference) => reference.as_mut_ptr(),
None => ptr::null_mut(), None => ptr::null_mut(),
}; };
gst_video_sys::gst_video_encoder_set_output_state( ffi::gst_video_encoder_set_output_state(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
caps.into_ptr(), caps.into_ptr(),
reference, reference,
@ -225,11 +220,11 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
output_state: VideoCodecState<'a, InNegotiation<'a>>, output_state: VideoCodecState<'a, InNegotiation<'a>>,
) -> Result<(), gst::FlowError> { ) -> Result<(), gst::FlowError> {
// Consume output_state so user won't be able to modify it anymore // Consume output_state so user won't be able to modify it anymore
let self_ptr = self.to_glib_none().0 as *const gst_sys::GstElement; let self_ptr = self.to_glib_none().0 as *const gst::ffi::GstElement;
assert_eq!(output_state.context.get_element_as_ptr(), self_ptr); assert_eq!(output_state.context.get_element_as_ptr(), self_ptr);
let ret = unsafe { let ret = unsafe {
from_glib(gst_video_sys::gst_video_encoder_negotiate( from_glib(ffi::gst_video_encoder_negotiate(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
)) ))
}; };
@ -242,13 +237,13 @@ impl<O: IsA<VideoEncoder>> VideoEncoderExtManual for O {
} }
impl HasStreamLock for VideoEncoder { impl HasStreamLock for VideoEncoder {
fn get_stream_lock(&self) -> *mut glib_sys::GRecMutex { fn get_stream_lock(&self) -> *mut glib::ffi::GRecMutex {
let encoder_sys: *const gstreamer_video_sys::GstVideoEncoder = self.to_glib_none().0; let encoder_sys: *const ffi::GstVideoEncoder = self.to_glib_none().0;
unsafe { &(*encoder_sys).stream_lock as *const _ as usize as *mut _ } unsafe { &(*encoder_sys).stream_lock as *const _ as usize as *mut _ }
} }
fn get_element_as_ptr(&self) -> *const gst_sys::GstElement { fn get_element_as_ptr(&self) -> *const gst::ffi::GstElement {
let encoder_sys: *const gstreamer_video_sys::GstVideoEncoder = self.to_glib_none().0; let encoder_sys: *const ffi::GstVideoEncoder = self.to_glib_none().0;
encoder_sys as *const gst_sys::GstElement encoder_sys as *const gst::ffi::GstElement
} }
} }

View file

@ -6,12 +6,8 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_sys;
use gst_video_sys;
use glib::translate::{from_glib, from_glib_full, ToGlib}; use glib::translate::{from_glib, from_glib_full, ToGlib};
use glib::ToSendValue; use glib::ToSendValue;
use gst;
use std::mem; use std::mem;
// FIXME: Copy from gstreamer/src/event.rs // FIXME: Copy from gstreamer/src/event.rs
@ -48,16 +44,16 @@ macro_rules! event_builder_generic_impl {
unsafe { unsafe {
let event = $new_fn(&mut self); let event = $new_fn(&mut self);
if let Some(seqnum) = self.seqnum { if let Some(seqnum) = self.seqnum {
gst_sys::gst_event_set_seqnum(event, seqnum.to_glib()); gst::ffi::gst_event_set_seqnum(event, seqnum.to_glib());
} }
if let Some(running_time_offset) = self.running_time_offset { if let Some(running_time_offset) = self.running_time_offset {
gst_sys::gst_event_set_running_time_offset(event, running_time_offset); gst::ffi::gst_event_set_running_time_offset(event, running_time_offset);
} }
{ {
let s = gst::StructureRef::from_glib_borrow_mut( let s = gst::StructureRef::from_glib_borrow_mut(
gst_sys::gst_event_writable_structure(event), gst::ffi::gst_event_writable_structure(event),
); );
for (k, v) in self.other_fields { for (k, v) in self.other_fields {
@ -127,7 +123,7 @@ impl<'a> DownstreamForceKeyUnitEventBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
gst_video_sys::gst_video_event_new_downstream_force_key_unit( ffi::gst_video_event_new_downstream_force_key_unit(
s.timestamp.to_glib(), s.timestamp.to_glib(),
s.stream_time.to_glib(), s.stream_time.to_glib(),
s.running_time.to_glib(), s.running_time.to_glib(),
@ -162,16 +158,14 @@ impl DownstreamForceKeyUnitEvent {
let mut all_headers = mem::MaybeUninit::uninit(); let mut all_headers = mem::MaybeUninit::uninit();
let mut count = mem::MaybeUninit::uninit(); let mut count = mem::MaybeUninit::uninit();
let res: bool = from_glib( let res: bool = from_glib(ffi::gst_video_event_parse_downstream_force_key_unit(
gst_video_sys::gst_video_event_parse_downstream_force_key_unit(
event.as_mut_ptr(), event.as_mut_ptr(),
timestamp.as_mut_ptr(), timestamp.as_mut_ptr(),
stream_time.as_mut_ptr(), stream_time.as_mut_ptr(),
running_time.as_mut_ptr(), running_time.as_mut_ptr(),
all_headers.as_mut_ptr(), all_headers.as_mut_ptr(),
count.as_mut_ptr(), count.as_mut_ptr(),
), ));
);
if res { if res {
Ok(DownstreamForceKeyUnitEvent { Ok(DownstreamForceKeyUnitEvent {
timestamp: from_glib(timestamp.assume_init()), timestamp: from_glib(timestamp.assume_init()),
@ -181,7 +175,7 @@ impl DownstreamForceKeyUnitEvent {
count: count.assume_init(), count: count.assume_init(),
}) })
} else { } else {
Err(glib_bool_error!("Failed to parse GstEvent")) Err(glib::glib_bool_error!("Failed to parse GstEvent"))
} }
} }
} }
@ -228,7 +222,7 @@ impl<'a> UpstreamForceKeyUnitEventBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
gst_video_sys::gst_video_event_new_upstream_force_key_unit( ffi::gst_video_event_new_upstream_force_key_unit(
s.running_time.to_glib(), s.running_time.to_glib(),
s.all_headers.to_glib(), s.all_headers.to_glib(),
s.count, s.count,
@ -257,14 +251,12 @@ impl UpstreamForceKeyUnitEvent {
let mut all_headers = mem::MaybeUninit::uninit(); let mut all_headers = mem::MaybeUninit::uninit();
let mut count = mem::MaybeUninit::uninit(); let mut count = mem::MaybeUninit::uninit();
let res: bool = from_glib( let res: bool = from_glib(ffi::gst_video_event_parse_upstream_force_key_unit(
gst_video_sys::gst_video_event_parse_upstream_force_key_unit(
event.as_mut_ptr(), event.as_mut_ptr(),
running_time.as_mut_ptr(), running_time.as_mut_ptr(),
all_headers.as_mut_ptr(), all_headers.as_mut_ptr(),
count.as_mut_ptr(), count.as_mut_ptr(),
), ));
);
if res { if res {
Ok(UpstreamForceKeyUnitEvent { Ok(UpstreamForceKeyUnitEvent {
running_time: from_glib(running_time.assume_init()), running_time: from_glib(running_time.assume_init()),
@ -272,7 +264,7 @@ impl UpstreamForceKeyUnitEvent {
count: count.assume_init(), count: count.assume_init(),
}) })
} else { } else {
Err(glib_bool_error!("Failed to parse GstEvent")) Err(glib::glib_bool_error!("Failed to parse GstEvent"))
} }
} }
} }
@ -287,11 +279,7 @@ pub enum ForceKeyUnitEvent {
impl ForceKeyUnitEvent { impl ForceKeyUnitEvent {
pub fn is(event: &gst::EventRef) -> bool { pub fn is(event: &gst::EventRef) -> bool {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe { from_glib(ffi::gst_video_event_is_force_key_unit(event.as_mut_ptr())) }
from_glib(gst_video_sys::gst_video_event_is_force_key_unit(
event.as_mut_ptr(),
))
}
} }
pub fn parse(event: &gst::EventRef) -> Result<ForceKeyUnitEvent, glib::error::BoolError> { pub fn parse(event: &gst::EventRef) -> Result<ForceKeyUnitEvent, glib::error::BoolError> {
@ -322,9 +310,9 @@ impl<'a> StillFrameEventBuilder<'a> {
} }
} }
event_builder_generic_impl!( event_builder_generic_impl!(|s: &mut Self| ffi::gst_video_event_new_still_frame(
|s: &mut Self| gst_video_sys::gst_video_event_new_still_frame(s.in_still.to_glib()) s.in_still.to_glib()
); ));
} }
#[derive(Clone, PartialEq, Eq, Debug)] #[derive(Clone, PartialEq, Eq, Debug)]
@ -343,7 +331,7 @@ impl StillFrameEvent {
unsafe { unsafe {
let mut in_still = mem::MaybeUninit::uninit(); let mut in_still = mem::MaybeUninit::uninit();
let res: bool = from_glib(gst_video_sys::gst_video_event_parse_still_frame( let res: bool = from_glib(ffi::gst_video_event_parse_still_frame(
event.as_mut_ptr(), event.as_mut_ptr(),
in_still.as_mut_ptr(), in_still.as_mut_ptr(),
)); ));
@ -352,7 +340,7 @@ impl StillFrameEvent {
in_still: from_glib(in_still.assume_init()), in_still: from_glib(in_still.assume_init()),
}) })
} else { } else {
Err(glib_bool_error!("Invalid still-frame event")) Err(glib::glib_bool_error!("Invalid still-frame event"))
} }
} }
} }

View file

@ -6,8 +6,6 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_video_sys;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::ffi::CStr; use std::ffi::CStr;
use std::fmt; use std::fmt;
@ -16,10 +14,10 @@ use std::str;
use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr}; use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr};
#[cfg(feature = "v1_18")] #[cfg(feature = "v1_18")]
pub static VIDEO_FORMATS_ALL: Lazy<Box<[::VideoFormat]>> = Lazy::new(|| unsafe { pub static VIDEO_FORMATS_ALL: Lazy<Box<[crate::VideoFormat]>> = Lazy::new(|| unsafe {
let mut len: u32 = 0; let mut len: u32 = 0;
let mut res = Vec::with_capacity(len as usize); let mut res = Vec::with_capacity(len as usize);
let formats = gst_video_sys::gst_video_formats_raw(&mut len); let formats = ffi::gst_video_formats_raw(&mut len);
for i in 0..len { for i in 0..len {
let format = formats.offset(i as isize); let format = formats.offset(i as isize);
res.push(from_glib(*format)); res.push(from_glib(*format));
@ -28,233 +26,233 @@ pub static VIDEO_FORMATS_ALL: Lazy<Box<[::VideoFormat]>> = Lazy::new(|| unsafe {
}); });
#[cfg(not(feature = "v1_18"))] #[cfg(not(feature = "v1_18"))]
pub static VIDEO_FORMATS_ALL: Lazy<Box<[::VideoFormat]>> = Lazy::new(|| { pub static VIDEO_FORMATS_ALL: Lazy<Box<[crate::VideoFormat]>> = Lazy::new(|| {
#[cfg(target_endian = "little")] #[cfg(target_endian = "little")]
{ {
Box::new([ Box::new([
::VideoFormat::Ayuv64, crate::VideoFormat::Ayuv64,
::VideoFormat::Argb64, crate::VideoFormat::Argb64,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra12le, crate::VideoFormat::Gbra12le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra12be, crate::VideoFormat::Gbra12be,
::VideoFormat::A44410le, crate::VideoFormat::A44410le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra10le, crate::VideoFormat::Gbra10le,
::VideoFormat::A44410be, crate::VideoFormat::A44410be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra10be, crate::VideoFormat::Gbra10be,
::VideoFormat::A42210le, crate::VideoFormat::A42210le,
::VideoFormat::A42210be, crate::VideoFormat::A42210be,
::VideoFormat::A42010le, crate::VideoFormat::A42010le,
::VideoFormat::A42010be, crate::VideoFormat::A42010be,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Bgr10a2Le, crate::VideoFormat::Bgr10a2Le,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Y410, crate::VideoFormat::Y410,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra, crate::VideoFormat::Gbra,
::VideoFormat::Abgr, crate::VideoFormat::Abgr,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Vuya, crate::VideoFormat::Vuya,
::VideoFormat::Bgra, crate::VideoFormat::Bgra,
::VideoFormat::Ayuv, crate::VideoFormat::Ayuv,
::VideoFormat::Argb, crate::VideoFormat::Argb,
::VideoFormat::Rgba, crate::VideoFormat::Rgba,
::VideoFormat::A420, crate::VideoFormat::A420,
::VideoFormat::V216, crate::VideoFormat::V216,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Y44412le, crate::VideoFormat::Y44412le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbr12le, crate::VideoFormat::Gbr12le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Y44412be, crate::VideoFormat::Y44412be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbr12be, crate::VideoFormat::Gbr12be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42212le, crate::VideoFormat::I42212le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42212be, crate::VideoFormat::I42212be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42012le, crate::VideoFormat::I42012le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42012be, crate::VideoFormat::I42012be,
::VideoFormat::Y44410le, crate::VideoFormat::Y44410le,
::VideoFormat::Gbr10le, crate::VideoFormat::Gbr10le,
::VideoFormat::Y44410be, crate::VideoFormat::Y44410be,
::VideoFormat::Gbr10be, crate::VideoFormat::Gbr10be,
::VideoFormat::R210, crate::VideoFormat::R210,
::VideoFormat::I42210le, crate::VideoFormat::I42210le,
::VideoFormat::I42210be, crate::VideoFormat::I42210be,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Nv1610le32, crate::VideoFormat::Nv1610le32,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Y210, crate::VideoFormat::Y210,
::VideoFormat::V210, crate::VideoFormat::V210,
::VideoFormat::Uyvp, crate::VideoFormat::Uyvp,
::VideoFormat::I42010le, crate::VideoFormat::I42010le,
::VideoFormat::I42010be, crate::VideoFormat::I42010be,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::P01010le, crate::VideoFormat::P01010le,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Nv1210le32, crate::VideoFormat::Nv1210le32,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Nv1210le40, crate::VideoFormat::Nv1210le40,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::P01010be, crate::VideoFormat::P01010be,
::VideoFormat::Y444, crate::VideoFormat::Y444,
::VideoFormat::Gbr, crate::VideoFormat::Gbr,
::VideoFormat::Nv24, crate::VideoFormat::Nv24,
::VideoFormat::Xbgr, crate::VideoFormat::Xbgr,
::VideoFormat::Bgrx, crate::VideoFormat::Bgrx,
::VideoFormat::Xrgb, crate::VideoFormat::Xrgb,
::VideoFormat::Rgbx, crate::VideoFormat::Rgbx,
::VideoFormat::Bgr, crate::VideoFormat::Bgr,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::Iyu2, crate::VideoFormat::Iyu2,
::VideoFormat::V308, crate::VideoFormat::V308,
::VideoFormat::Rgb, crate::VideoFormat::Rgb,
::VideoFormat::Y42b, crate::VideoFormat::Y42b,
::VideoFormat::Nv61, crate::VideoFormat::Nv61,
::VideoFormat::Nv16, crate::VideoFormat::Nv16,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Vyuy, crate::VideoFormat::Vyuy,
::VideoFormat::Uyvy, crate::VideoFormat::Uyvy,
::VideoFormat::Yvyu, crate::VideoFormat::Yvyu,
::VideoFormat::Yuy2, crate::VideoFormat::Yuy2,
::VideoFormat::I420, crate::VideoFormat::I420,
::VideoFormat::Yv12, crate::VideoFormat::Yv12,
::VideoFormat::Nv21, crate::VideoFormat::Nv21,
::VideoFormat::Nv12, crate::VideoFormat::Nv12,
::VideoFormat::Nv1264z32, crate::VideoFormat::Nv1264z32,
::VideoFormat::Y41b, crate::VideoFormat::Y41b,
::VideoFormat::Iyu1, crate::VideoFormat::Iyu1,
::VideoFormat::Yvu9, crate::VideoFormat::Yvu9,
::VideoFormat::Yuv9, crate::VideoFormat::Yuv9,
::VideoFormat::Rgb16, crate::VideoFormat::Rgb16,
::VideoFormat::Bgr16, crate::VideoFormat::Bgr16,
::VideoFormat::Rgb15, crate::VideoFormat::Rgb15,
::VideoFormat::Bgr15, crate::VideoFormat::Bgr15,
::VideoFormat::Rgb8p, crate::VideoFormat::Rgb8p,
::VideoFormat::Gray16Le, crate::VideoFormat::Gray16Le,
::VideoFormat::Gray16Be, crate::VideoFormat::Gray16Be,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Gray10Le32, crate::VideoFormat::Gray10Le32,
::VideoFormat::Gray8, crate::VideoFormat::Gray8,
]) ])
} }
#[cfg(target_endian = "big")] #[cfg(target_endian = "big")]
{ {
Box::new([ Box::new([
::VideoFormat::Ayuv64, crate::VideoFormat::Ayuv64,
::VideoFormat::Argb64, crate::VideoFormat::Argb64,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra12be, crate::VideoFormat::Gbra12be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra12le, crate::VideoFormat::Gbra12le,
::VideoFormat::A44410be, crate::VideoFormat::A44410be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra10be, crate::VideoFormat::Gbra10be,
::VideoFormat::A44410le, crate::VideoFormat::A44410le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra10le, crate::VideoFormat::Gbra10le,
::VideoFormat::A42210be, crate::VideoFormat::A42210be,
::VideoFormat::A42210le, crate::VideoFormat::A42210le,
::VideoFormat::A42010be, crate::VideoFormat::A42010be,
::VideoFormat::A42010le, crate::VideoFormat::A42010le,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Y410, crate::VideoFormat::Y410,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Bgr10a2Le, crate::VideoFormat::Bgr10a2Le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbra, crate::VideoFormat::Gbra,
::VideoFormat::Abgr, crate::VideoFormat::Abgr,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Vuya, crate::VideoFormat::Vuya,
::VideoFormat::Bgra, crate::VideoFormat::Bgra,
::VideoFormat::Ayuv, crate::VideoFormat::Ayuv,
::VideoFormat::Argb, crate::VideoFormat::Argb,
::VideoFormat::Rgba, crate::VideoFormat::Rgba,
::VideoFormat::A420, crate::VideoFormat::A420,
::VideoFormat::V216, crate::VideoFormat::V216,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Y44412be, crate::VideoFormat::Y44412be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbr12be, crate::VideoFormat::Gbr12be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Y44412le, crate::VideoFormat::Y44412le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Gbr12le, crate::VideoFormat::Gbr12le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42212be, crate::VideoFormat::I42212be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42212le, crate::VideoFormat::I42212le,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42012be, crate::VideoFormat::I42012be,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::I42012le, crate::VideoFormat::I42012le,
::VideoFormat::Y44410be, crate::VideoFormat::Y44410be,
::VideoFormat::Gbr10be, crate::VideoFormat::Gbr10be,
::VideoFormat::Y44410le, crate::VideoFormat::Y44410le,
::VideoFormat::Gbr10le, crate::VideoFormat::Gbr10le,
::VideoFormat::R210, crate::VideoFormat::R210,
::VideoFormat::I42210be, crate::VideoFormat::I42210be,
::VideoFormat::I42210le, crate::VideoFormat::I42210le,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Nv1610le32, crate::VideoFormat::Nv1610le32,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Y210, crate::VideoFormat::Y210,
::VideoFormat::V210, crate::VideoFormat::V210,
::VideoFormat::Uyvp, crate::VideoFormat::Uyvp,
::VideoFormat::I42010be, crate::VideoFormat::I42010be,
::VideoFormat::I42010le, crate::VideoFormat::I42010le,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::P01010be, crate::VideoFormat::P01010be,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::P01010le, crate::VideoFormat::P01010le,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Nv1210le32, crate::VideoFormat::Nv1210le32,
#[cfg(feature = "v1_16")] #[cfg(feature = "v1_16")]
::VideoFormat::Nv1210le40, crate::VideoFormat::Nv1210le40,
::VideoFormat::Y444, crate::VideoFormat::Y444,
::VideoFormat::Gbr, crate::VideoFormat::Gbr,
::VideoFormat::Nv24, crate::VideoFormat::Nv24,
::VideoFormat::Xbgr, crate::VideoFormat::Xbgr,
::VideoFormat::Bgrx, crate::VideoFormat::Bgrx,
::VideoFormat::Xrgb, crate::VideoFormat::Xrgb,
::VideoFormat::Rgbx, crate::VideoFormat::Rgbx,
::VideoFormat::Bgr, crate::VideoFormat::Bgr,
#[cfg(feature = "v1_10")] #[cfg(feature = "v1_10")]
::VideoFormat::Iyu2, crate::VideoFormat::Iyu2,
::VideoFormat::V308, crate::VideoFormat::V308,
::VideoFormat::Rgb, crate::VideoFormat::Rgb,
::VideoFormat::Y42b, crate::VideoFormat::Y42b,
::VideoFormat::Nv61, crate::VideoFormat::Nv61,
::VideoFormat::Nv16, crate::VideoFormat::Nv16,
#[cfg(feature = "v1_12")] #[cfg(feature = "v1_12")]
::VideoFormat::Vyuy, crate::VideoFormat::Vyuy,
::VideoFormat::Uyvy, crate::VideoFormat::Uyvy,
::VideoFormat::Yvyu, crate::VideoFormat::Yvyu,
::VideoFormat::Yuy2, crate::VideoFormat::Yuy2,
::VideoFormat::I420, crate::VideoFormat::I420,
::VideoFormat::Yv12, crate::VideoFormat::Yv12,
::VideoFormat::Nv21, crate::VideoFormat::Nv21,
::VideoFormat::Nv12, crate::VideoFormat::Nv12,
::VideoFormat::Nv1264z32, crate::VideoFormat::Nv1264z32,
::VideoFormat::Y41b, crate::VideoFormat::Y41b,
::VideoFormat::Iyu1, crate::VideoFormat::Iyu1,
::VideoFormat::Yvu9, crate::VideoFormat::Yvu9,
::VideoFormat::Yuv9, crate::VideoFormat::Yuv9,
::VideoFormat::Rgb16, crate::VideoFormat::Rgb16,
::VideoFormat::Bgr16, crate::VideoFormat::Bgr16,
::VideoFormat::Rgb15, crate::VideoFormat::Rgb15,
::VideoFormat::Bgr15, crate::VideoFormat::Bgr15,
::VideoFormat::Rgb8p, crate::VideoFormat::Rgb8p,
::VideoFormat::Gray16Be, crate::VideoFormat::Gray16Be,
::VideoFormat::Gray16Le, crate::VideoFormat::Gray16Le,
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
::VideoFormat::Gray10Le32, crate::VideoFormat::Gray10Le32,
::VideoFormat::Gray8, crate::VideoFormat::Gray8,
]) ])
} }
}); });
@ -290,26 +288,26 @@ impl ToGlib for VideoEndianness {
} }
} }
impl ::VideoFormat { impl crate::VideoFormat {
pub fn from_fourcc(fourcc: u32) -> ::VideoFormat { pub fn from_fourcc(fourcc: u32) -> crate::VideoFormat {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { from_glib(gst_video_sys::gst_video_format_from_fourcc(fourcc)) } unsafe { from_glib(ffi::gst_video_format_from_fourcc(fourcc)) }
} }
pub fn from_masks( pub fn from_masks(
depth: u32, depth: u32,
bpp: u32, bpp: u32,
endianness: ::VideoEndianness, endianness: crate::VideoEndianness,
red_mask: u32, red_mask: u32,
blue_mask: u32, blue_mask: u32,
green_mask: u32, green_mask: u32,
alpha_mask: u32, alpha_mask: u32,
) -> ::VideoFormat { ) -> crate::VideoFormat {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
from_glib(gst_video_sys::gst_video_format_from_masks( from_glib(ffi::gst_video_format_from_masks(
depth as i32, depth as i32,
bpp as i32, bpp as i32,
endianness.to_glib(), endianness.to_glib(),
@ -322,12 +320,12 @@ impl ::VideoFormat {
} }
pub fn to_str<'a>(self) -> &'a str { pub fn to_str<'a>(self) -> &'a str {
if self == ::VideoFormat::Unknown { if self == crate::VideoFormat::Unknown {
return "UNKNOWN"; return "UNKNOWN";
} }
unsafe { unsafe {
CStr::from_ptr(gst_video_sys::gst_video_format_to_string(self.to_glib())) CStr::from_ptr(ffi::gst_video_format_to_string(self.to_glib()))
.to_str() .to_str()
.unwrap() .unwrap()
} }
@ -338,19 +336,21 @@ impl ::VideoFormat {
} }
} }
impl str::FromStr for ::VideoFormat { impl str::FromStr for crate::VideoFormat {
type Err = glib::BoolError; type Err = glib::BoolError;
fn from_str(s: &str) -> Result<Self, glib::BoolError> { fn from_str(s: &str) -> Result<Self, glib::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let fmt = ::VideoFormat::from_glib(gst_video_sys::gst_video_format_from_string( let fmt = crate::VideoFormat::from_glib(ffi::gst_video_format_from_string(
s.to_glib_none().0, s.to_glib_none().0,
)); ));
if fmt == ::VideoFormat::Unknown { if fmt == crate::VideoFormat::Unknown {
Err(glib_bool_error!("Failed to parse video format from string")) Err(glib::glib_bool_error!(
"Failed to parse video format from string"
))
} else { } else {
Ok(fmt) Ok(fmt)
} }
@ -358,21 +358,22 @@ impl str::FromStr for ::VideoFormat {
} }
} }
impl fmt::Display for ::VideoFormat { impl fmt::Display for crate::VideoFormat {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str((*self).to_str()) f.write_str((*self).to_str())
} }
} }
impl PartialOrd for ::VideoFormat { impl PartialOrd for crate::VideoFormat {
fn partial_cmp(&self, other: &::VideoFormat) -> Option<std::cmp::Ordering> { fn partial_cmp(&self, other: &crate::VideoFormat) -> Option<std::cmp::Ordering> {
::VideoFormatInfo::from_format(*self).partial_cmp(&::VideoFormatInfo::from_format(*other)) crate::VideoFormatInfo::from_format(*self)
.partial_cmp(&crate::VideoFormatInfo::from_format(*other))
} }
} }
impl Ord for ::VideoFormat { impl Ord for crate::VideoFormat {
fn cmp(&self, other: &::VideoFormat) -> std::cmp::Ordering { fn cmp(&self, other: &crate::VideoFormat) -> std::cmp::Ordering {
::VideoFormatInfo::from_format(*self).cmp(&::VideoFormatInfo::from_format(*other)) crate::VideoFormatInfo::from_format(*self).cmp(&crate::VideoFormatInfo::from_format(*other))
} }
} }
@ -391,7 +392,7 @@ impl Default for VideoFormatIterator {
} }
impl Iterator for VideoFormatIterator { impl Iterator for VideoFormatIterator {
type Item = ::VideoFormat; type Item = crate::VideoFormat;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
if self.idx >= self.len { if self.idx >= self.len {
@ -433,12 +434,12 @@ pub trait VideoFormatIteratorExt {
impl<T> VideoFormatIteratorExt for T impl<T> VideoFormatIteratorExt for T
where where
T: Iterator<Item = ::VideoFormat>, T: Iterator<Item = crate::VideoFormat>,
{ {
fn into_video_caps(self) -> Option<gst::caps::Builder<gst::caps::NoFeature>> { fn into_video_caps(self) -> Option<gst::caps::Builder<gst::caps::NoFeature>> {
let formats: Vec<::VideoFormat> = self.collect(); let formats: Vec<crate::VideoFormat> = self.collect();
if !formats.is_empty() { if !formats.is_empty() {
Some(::functions::video_make_raw_caps(&formats)) Some(crate::functions::video_make_raw_caps(&formats))
} else { } else {
None None
} }
@ -451,12 +452,12 @@ pub trait VideoFormatIteratorExtRef {
impl<'a, T> VideoFormatIteratorExtRef for T impl<'a, T> VideoFormatIteratorExtRef for T
where where
T: Iterator<Item = &'a ::VideoFormat>, T: Iterator<Item = &'a crate::VideoFormat>,
{ {
fn into_video_caps(self) -> Option<gst::caps::Builder<gst::caps::NoFeature>> { fn into_video_caps(self) -> Option<gst::caps::Builder<gst::caps::NoFeature>> {
let formats: Vec<::VideoFormat> = self.copied().collect(); let formats: Vec<crate::VideoFormat> = self.copied().collect();
if !formats.is_empty() { if !formats.is_empty() {
Some(::functions::video_make_raw_caps(&formats)) Some(crate::functions::video_make_raw_caps(&formats))
} else { } else {
None None
} }
@ -465,13 +466,12 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use gst;
#[test] #[test]
fn test_display() { fn test_display() {
gst::init().unwrap(); gst::init().unwrap();
format!("{}", ::VideoFormat::Nv16); format!("{}", crate::VideoFormat::Nv16);
} }
#[test] #[test]
@ -479,13 +479,13 @@ mod tests {
use super::*; use super::*;
gst::init().unwrap(); gst::init().unwrap();
assert!(::VideoFormat::iter_raw().count() > 0); assert!(crate::VideoFormat::iter_raw().count() > 0);
assert_eq!( assert_eq!(
::VideoFormat::iter_raw().count(), crate::VideoFormat::iter_raw().count(),
::VideoFormat::iter_raw().len() crate::VideoFormat::iter_raw().len()
); );
let mut i = ::VideoFormat::iter_raw(); let mut i = crate::VideoFormat::iter_raw();
let mut count = 0; let mut count = 0;
loop { loop {
if i.next().is_none() { if i.next().is_none() {
@ -497,25 +497,25 @@ mod tests {
} }
count += 1; count += 1;
} }
assert_eq!(count, ::VideoFormat::iter_raw().len()); assert_eq!(count, crate::VideoFormat::iter_raw().len());
assert!(::VideoFormat::iter_raw().any(|f| f == ::VideoFormat::Nv12)); assert!(crate::VideoFormat::iter_raw().any(|f| f == crate::VideoFormat::Nv12));
assert!(::VideoFormat::iter_raw() assert!(crate::VideoFormat::iter_raw()
.find(|f| *f == ::VideoFormat::Encoded) .find(|f| *f == crate::VideoFormat::Encoded)
.is_none()); .is_none());
let caps = ::VideoFormat::iter_raw().into_video_caps(); let caps = crate::VideoFormat::iter_raw().into_video_caps();
assert!(caps.is_some()); assert!(caps.is_some());
let caps = ::VideoFormat::iter_raw() let caps = crate::VideoFormat::iter_raw()
.filter(|f| ::VideoFormatInfo::from_format(*f).is_gray()) .filter(|f| crate::VideoFormatInfo::from_format(*f).is_gray())
.into_video_caps(); .into_video_caps();
assert!(caps.is_some()); assert!(caps.is_some());
let caps = ::VideoFormat::iter_raw().skip(1000).into_video_caps(); let caps = crate::VideoFormat::iter_raw().skip(1000).into_video_caps();
assert!(caps.is_none()); assert!(caps.is_none());
let caps = [::VideoFormat::Nv12, ::VideoFormat::Nv16] let caps = [crate::VideoFormat::Nv12, crate::VideoFormat::Nv16]
.iter() .iter()
.into_video_caps() .into_video_caps()
.unwrap() .unwrap()
@ -531,16 +531,17 @@ mod tests {
gst::init().unwrap(); gst::init().unwrap();
assert!( assert!(
::VideoFormatInfo::from_format(::VideoFormat::Nv16) crate::VideoFormatInfo::from_format(crate::VideoFormat::Nv16)
> ::VideoFormatInfo::from_format(::VideoFormat::Nv12) > crate::VideoFormatInfo::from_format(crate::VideoFormat::Nv12)
); );
assert!(::VideoFormat::I420 > ::VideoFormat::Yv12); assert!(crate::VideoFormat::I420 > crate::VideoFormat::Yv12);
let sorted: Vec<::VideoFormat> = ::VideoFormat::iter_raw().sorted().rev().collect(); let sorted: Vec<crate::VideoFormat> =
crate::VideoFormat::iter_raw().sorted().rev().collect();
// FIXME: use is_sorted_by() once API is in stable // FIXME: use is_sorted_by() once API is in stable
assert_eq!( assert_eq!(
sorted, sorted,
::VideoFormat::iter_raw().collect::<Vec<::VideoFormat>>() crate::VideoFormat::iter_raw().collect::<Vec<crate::VideoFormat>>()
); );
} }
} }

View file

@ -6,31 +6,28 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_video_sys;
use std::cmp::Ordering; use std::cmp::Ordering;
use std::ffi::CStr; use std::ffi::CStr;
use std::fmt; use std::fmt;
use std::str; use std::str;
use glib;
use glib::translate::{from_glib, ToGlib}; use glib::translate::{from_glib, ToGlib};
pub struct VideoFormatInfo(&'static gst_video_sys::GstVideoFormatInfo); pub struct VideoFormatInfo(&'static ffi::GstVideoFormatInfo);
impl VideoFormatInfo { impl VideoFormatInfo {
pub fn from_format(format: ::VideoFormat) -> VideoFormatInfo { pub fn from_format(format: crate::VideoFormat) -> VideoFormatInfo {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let info = gst_video_sys::gst_video_format_get_info(format.to_glib()); let info = ffi::gst_video_format_get_info(format.to_glib());
assert!(!info.is_null()); assert!(!info.is_null());
VideoFormatInfo(&*info) VideoFormatInfo(&*info)
} }
} }
pub fn format(&self) -> ::VideoFormat { pub fn format(&self) -> crate::VideoFormat {
from_glib(self.0.format) from_glib(self.0.format)
} }
@ -42,7 +39,7 @@ impl VideoFormatInfo {
unsafe { CStr::from_ptr(self.0.description).to_str().unwrap() } unsafe { CStr::from_ptr(self.0.description).to_str().unwrap() }
} }
pub fn flags(&self) -> ::VideoFormatFlags { pub fn flags(&self) -> crate::VideoFormatFlags {
from_glib(self.0.flags) from_glib(self.0.flags)
} }
@ -86,7 +83,7 @@ impl VideoFormatInfo {
&self.0.h_sub[0..(self.0.n_components as usize)] &self.0.h_sub[0..(self.0.n_components as usize)]
} }
pub fn tile_mode(&self) -> ::VideoTileMode { pub fn tile_mode(&self) -> crate::VideoTileMode {
from_glib(self.0.tile_mode) from_glib(self.0.tile_mode)
} }
@ -98,7 +95,7 @@ impl VideoFormatInfo {
self.0.tile_hs self.0.tile_hs
} }
pub fn unpack_format(&self) -> ::VideoFormat { pub fn unpack_format(&self) -> crate::VideoFormat {
from_glib(self.0.unpack_format) from_glib(self.0.unpack_format)
} }
@ -107,35 +104,35 @@ impl VideoFormatInfo {
} }
pub fn has_alpha(&self) -> bool { pub fn has_alpha(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_ALPHA != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_ALPHA != 0
} }
pub fn has_palette(&self) -> bool { pub fn has_palette(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_PALETTE != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_PALETTE != 0
} }
pub fn is_complex(&self) -> bool { pub fn is_complex(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_COMPLEX != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_COMPLEX != 0
} }
pub fn is_gray(&self) -> bool { pub fn is_gray(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_GRAY != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_GRAY != 0
} }
pub fn is_le(&self) -> bool { pub fn is_le(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_LE != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_LE != 0
} }
pub fn is_rgb(&self) -> bool { pub fn is_rgb(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_RGB != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_RGB != 0
} }
pub fn is_tiled(&self) -> bool { pub fn is_tiled(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_TILED != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_TILED != 0
} }
pub fn is_yuv(&self) -> bool { pub fn is_yuv(&self) -> bool {
self.0.flags & gst_video_sys::GST_VIDEO_FORMAT_FLAG_YUV != 0 self.0.flags & ffi::GST_VIDEO_FORMAT_FLAG_YUV != 0
} }
pub fn scale_width(&self, component: u8, width: u32) -> u32 { pub fn scale_width(&self, component: u8, width: u32) -> u32 {
@ -149,7 +146,7 @@ impl VideoFormatInfo {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn unpack( pub fn unpack(
&self, &self,
flags: ::VideoPackFlags, flags: crate::VideoPackFlags,
dest: &mut [u8], dest: &mut [u8],
src: &[&[u8]], src: &[&[u8]],
stride: &[i32], stride: &[i32],
@ -203,8 +200,7 @@ impl VideoFormatInfo {
unsafe { unsafe {
use std::ptr; use std::ptr;
let mut src_ptr = let mut src_ptr = [ptr::null() as *const u8; ffi::GST_VIDEO_MAX_PLANES as usize];
[ptr::null() as *const u8; gst_video_sys::GST_VIDEO_MAX_PLANES as usize];
for plane in 0..(self.n_planes()) { for plane in 0..(self.n_planes()) {
src_ptr[plane as usize] = src[plane as usize].as_ptr(); src_ptr[plane as usize] = src[plane as usize].as_ptr();
} }
@ -225,12 +221,12 @@ impl VideoFormatInfo {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn pack( pub fn pack(
&self, &self,
flags: ::VideoPackFlags, flags: crate::VideoPackFlags,
src: &[u8], src: &[u8],
src_stride: i32, src_stride: i32,
dest: &mut [&mut [u8]], dest: &mut [&mut [u8]],
dest_stride: &[i32], dest_stride: &[i32],
chroma_site: ::VideoChromaSite, chroma_site: crate::VideoChromaSite,
y: i32, y: i32,
width: i32, width: i32,
) { ) {
@ -280,8 +276,7 @@ impl VideoFormatInfo {
unsafe { unsafe {
use std::ptr; use std::ptr;
let mut dest_ptr = let mut dest_ptr = [ptr::null_mut() as *mut u8; ffi::GST_VIDEO_MAX_PLANES as usize];
[ptr::null_mut() as *mut u8; gst_video_sys::GST_VIDEO_MAX_PLANES as usize];
for plane in 0..(self.n_planes()) { for plane in 0..(self.n_planes()) {
dest_ptr[plane as usize] = dest[plane as usize].as_mut_ptr(); dest_ptr[plane as usize] = dest[plane as usize].as_mut_ptr();
} }
@ -330,8 +325,8 @@ impl Ord for VideoFormatInfo {
.then_with(|| { .then_with(|| {
// Format using native endianess is considered as bigger // Format using native endianess is considered as bigger
match ( match (
self.flags().contains(::VideoFormatFlags::LE), self.flags().contains(crate::VideoFormatFlags::LE),
other.flags().contains(::VideoFormatFlags::LE), other.flags().contains(crate::VideoFormatFlags::LE),
) { ) {
(true, false) => { (true, false) => {
// a LE, b BE // a LE, b BE
@ -363,8 +358,8 @@ impl Ord for VideoFormatInfo {
.then_with(|| { .then_with(|| {
// Prefer non-complex formats // Prefer non-complex formats
match ( match (
self.flags().contains(::VideoFormatFlags::COMPLEX), self.flags().contains(crate::VideoFormatFlags::COMPLEX),
other.flags().contains(::VideoFormatFlags::COMPLEX), other.flags().contains(crate::VideoFormatFlags::COMPLEX),
) { ) {
(true, false) => Ordering::Less, (true, false) => Ordering::Less,
(false, true) => Ordering::Greater, (false, true) => Ordering::Greater,
@ -373,12 +368,12 @@ impl Ord for VideoFormatInfo {
}) })
.then_with(|| { .then_with(|| {
// tiebreaker: YUV > RGB // tiebreaker: YUV > RGB
if self.flags().contains(::VideoFormatFlags::RGB) if self.flags().contains(crate::VideoFormatFlags::RGB)
&& other.flags().contains(::VideoFormatFlags::YUV) && other.flags().contains(crate::VideoFormatFlags::YUV)
{ {
Ordering::Less Ordering::Less
} else if self.flags().contains(::VideoFormatFlags::YUV) } else if self.flags().contains(crate::VideoFormatFlags::YUV)
&& other.flags().contains(::VideoFormatFlags::RGB) && other.flags().contains(crate::VideoFormatFlags::RGB)
{ {
Ordering::Greater Ordering::Greater
} else { } else {
@ -389,8 +384,8 @@ impl Ord for VideoFormatInfo {
// Manual tiebreaker // Manual tiebreaker
match (self.format(), other.format()) { match (self.format(), other.format()) {
// I420 is more commonly used in GStreamer // I420 is more commonly used in GStreamer
(::VideoFormat::I420, ::VideoFormat::Yv12) => Ordering::Greater, (crate::VideoFormat::I420, crate::VideoFormat::Yv12) => Ordering::Greater,
(::VideoFormat::Yv12, ::VideoFormat::I420) => Ordering::Less, (crate::VideoFormat::Yv12, crate::VideoFormat::I420) => Ordering::Less,
_ => Ordering::Equal, _ => Ordering::Equal,
} }
}) })
@ -433,7 +428,7 @@ impl fmt::Display for VideoFormatInfo {
} }
} }
impl str::FromStr for ::VideoFormatInfo { impl str::FromStr for crate::VideoFormatInfo {
type Err = glib::BoolError; type Err = glib::BoolError;
fn from_str(s: &str) -> Result<Self, glib::BoolError> { fn from_str(s: &str) -> Result<Self, glib::BoolError> {
@ -443,8 +438,8 @@ impl str::FromStr for ::VideoFormatInfo {
} }
} }
impl From<::VideoFormat> for VideoFormatInfo { impl From<crate::VideoFormat> for VideoFormatInfo {
fn from(f: ::VideoFormat) -> Self { fn from(f: crate::VideoFormat) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
Self::from_format(f) Self::from_format(f)
} }
@ -452,30 +447,26 @@ impl From<::VideoFormat> for VideoFormatInfo {
#[doc(hidden)] #[doc(hidden)]
impl glib::translate::GlibPtrDefault for VideoFormatInfo { impl glib::translate::GlibPtrDefault for VideoFormatInfo {
type GlibType = *mut gst_video_sys::GstVideoFormatInfo; type GlibType = *mut ffi::GstVideoFormatInfo;
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> glib::translate::ToGlibPtr<'a, *const gst_video_sys::GstVideoFormatInfo> impl<'a> glib::translate::ToGlibPtr<'a, *const ffi::GstVideoFormatInfo> for VideoFormatInfo {
for VideoFormatInfo
{
type Storage = &'a VideoFormatInfo; type Storage = &'a VideoFormatInfo;
fn to_glib_none( fn to_glib_none(&'a self) -> glib::translate::Stash<'a, *const ffi::GstVideoFormatInfo, Self> {
&'a self,
) -> glib::translate::Stash<'a, *const gst_video_sys::GstVideoFormatInfo, Self> {
glib::translate::Stash(self.0, self) glib::translate::Stash(self.0, self)
} }
fn to_glib_full(&self) -> *const gst_video_sys::GstVideoFormatInfo { fn to_glib_full(&self) -> *const ffi::GstVideoFormatInfo {
unimplemented!() unimplemented!()
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl glib::translate::FromGlibPtrNone<*mut gst_video_sys::GstVideoFormatInfo> for VideoFormatInfo { impl glib::translate::FromGlibPtrNone<*mut ffi::GstVideoFormatInfo> for VideoFormatInfo {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *mut gst_video_sys::GstVideoFormatInfo) -> Self { unsafe fn from_glib_none(ptr: *mut ffi::GstVideoFormatInfo) -> Self {
VideoFormatInfo(&*ptr) VideoFormatInfo(&*ptr)
} }
} }
@ -483,13 +474,12 @@ impl glib::translate::FromGlibPtrNone<*mut gst_video_sys::GstVideoFormatInfo> fo
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use gst;
#[test] #[test]
fn test_get() { fn test_get() {
gst::init().unwrap(); gst::init().unwrap();
let info = VideoFormatInfo::from_format(::VideoFormat::I420); let info = VideoFormatInfo::from_format(crate::VideoFormat::I420);
assert_eq!(info.name(), "I420"); assert_eq!(info.name(), "I420");
let other_info = "I420".parse().unwrap(); let other_info = "I420".parse().unwrap();
@ -511,10 +501,10 @@ mod tests {
// One line of 320 pixel I420 // One line of 320 pixel I420
let output = &mut [&mut [0; 320][..], &mut [0; 160][..], &mut [0; 160][..]]; let output = &mut [&mut [0; 320][..], &mut [0; 160][..], &mut [0; 160][..]];
let info = VideoFormatInfo::from_format(::VideoFormat::I420); let info = VideoFormatInfo::from_format(crate::VideoFormat::I420);
assert_eq!(info.unpack_format(), ::VideoFormat::Ayuv); assert_eq!(info.unpack_format(), crate::VideoFormat::Ayuv);
info.unpack( info.unpack(
::VideoPackFlags::empty(), crate::VideoPackFlags::empty(),
intermediate, intermediate,
input, input,
&[320, 160, 160][..], &[320, 160, 160][..],
@ -528,12 +518,12 @@ mod tests {
} }
info.pack( info.pack(
::VideoPackFlags::empty(), crate::VideoPackFlags::empty(),
&intermediate[..(4 * 320)], &intermediate[..(4 * 320)],
4 * 320, 4 * 320,
output, output,
&[320, 160, 160][..], &[320, 160, 160][..],
::VideoChromaSite::NONE, crate::VideoChromaSite::NONE,
0, 0,
320, 320,
); );

View file

@ -6,12 +6,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_sys;
use gst_video_sys;
use glib;
use glib::translate::{from_glib, from_glib_none, Borrowed, ToGlibPtr}; use glib::translate::{from_glib, from_glib_none, Borrowed, ToGlibPtr};
use gst;
use std::fmt; use std::fmt;
use std::marker::PhantomData; use std::marker::PhantomData;
@ -24,9 +19,9 @@ pub enum Readable {}
pub enum Writable {} pub enum Writable {}
pub struct VideoFrame<T> { pub struct VideoFrame<T> {
frame: gst_video_sys::GstVideoFrame, frame: ffi::GstVideoFrame,
buffer: Option<gst::Buffer>, buffer: Option<gst::Buffer>,
info: ::VideoInfo, info: crate::VideoInfo,
phantom: PhantomData<T>, phantom: PhantomData<T>,
} }
@ -45,11 +40,11 @@ impl<T> fmt::Debug for VideoFrame<T> {
} }
impl<T> VideoFrame<T> { impl<T> VideoFrame<T> {
pub fn info(&self) -> &::VideoInfo { pub fn info(&self) -> &crate::VideoInfo {
&self.info &self.info
} }
pub fn flags(&self) -> ::VideoFrameFlags { pub fn flags(&self) -> crate::VideoFrameFlags {
from_glib(self.frame.flags) from_glib(self.frame.flags)
} }
@ -63,14 +58,11 @@ impl<T> VideoFrame<T> {
pub fn copy(&self, dest: &mut VideoFrame<Writable>) -> Result<(), glib::BoolError> { pub fn copy(&self, dest: &mut VideoFrame<Writable>) -> Result<(), glib::BoolError> {
unsafe { unsafe {
let res: bool = from_glib(gst_video_sys::gst_video_frame_copy( let res: bool = from_glib(ffi::gst_video_frame_copy(&mut dest.frame, &self.frame));
&mut dest.frame,
&self.frame,
));
if res { if res {
Ok(()) Ok(())
} else { } else {
Err(glib_bool_error!("Failed to copy video frame")) Err(glib::glib_bool_error!("Failed to copy video frame"))
} }
} }
} }
@ -83,7 +75,7 @@ impl<T> VideoFrame<T> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let res: bool = from_glib(gst_video_sys::gst_video_frame_copy_plane( let res: bool = from_glib(ffi::gst_video_frame_copy_plane(
&mut dest.frame, &mut dest.frame,
&self.frame, &self.frame,
plane, plane,
@ -91,16 +83,16 @@ impl<T> VideoFrame<T> {
if res { if res {
Ok(()) Ok(())
} else { } else {
Err(glib_bool_error!("Failed to copy video frame plane")) Err(glib::glib_bool_error!("Failed to copy video frame plane"))
} }
} }
} }
pub fn format(&self) -> ::VideoFormat { pub fn format(&self) -> crate::VideoFormat {
self.info().format() self.info().format()
} }
pub fn format_info(&self) -> ::VideoFormatInfo { pub fn format_info(&self) -> crate::VideoFormatInfo {
self.info().format_info() self.info().format_info()
} }
@ -117,19 +109,19 @@ impl<T> VideoFrame<T> {
} }
pub fn is_interlaced(&self) -> bool { pub fn is_interlaced(&self) -> bool {
self.flags().contains(::VideoFrameFlags::INTERLACED) self.flags().contains(crate::VideoFrameFlags::INTERLACED)
} }
pub fn is_tff(&self) -> bool { pub fn is_tff(&self) -> bool {
self.flags().contains(::VideoFrameFlags::TFF) self.flags().contains(crate::VideoFrameFlags::TFF)
} }
pub fn is_rff(&self) -> bool { pub fn is_rff(&self) -> bool {
self.flags().contains(::VideoFrameFlags::RFF) self.flags().contains(crate::VideoFrameFlags::RFF)
} }
pub fn is_onefield(&self) -> bool { pub fn is_onefield(&self) -> bool {
self.flags().contains(::VideoFrameFlags::ONEFIELD) self.flags().contains(crate::VideoFrameFlags::ONEFIELD)
} }
pub fn n_planes(&self) -> u32 { pub fn n_planes(&self) -> u32 {
@ -154,7 +146,9 @@ impl<T> VideoFrame<T> {
pub fn plane_data(&self, plane: u32) -> Result<&[u8], glib::BoolError> { pub fn plane_data(&self, plane: u32) -> Result<&[u8], glib::BoolError> {
if plane >= self.n_planes() { if plane >= self.n_planes() {
return Err(glib_bool_error!("Plane index higher than number of planes")); return Err(glib::glib_bool_error!(
"Plane index higher than number of planes"
));
} }
let format_info = self.format_info(); let format_info = self.format_info();
@ -182,8 +176,8 @@ impl<T> VideoFrame<T> {
} }
} }
pub unsafe fn from_glib_full(frame: gst_video_sys::GstVideoFrame) -> Self { pub unsafe fn from_glib_full(frame: ffi::GstVideoFrame) -> Self {
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
let buffer = gst::Buffer::from_glib_none(frame.buffer); let buffer = gst::Buffer::from_glib_none(frame.buffer);
VideoFrame { VideoFrame {
frame, frame,
@ -204,7 +198,7 @@ impl<T> VideoFrame<T> {
} }
} }
pub fn as_ptr(&self) -> *const gst_video_sys::GstVideoFrame { pub fn as_ptr(&self) -> *const ffi::GstVideoFrame {
&self.frame &self.frame
} }
} }
@ -212,7 +206,7 @@ impl<T> VideoFrame<T> {
impl<T> Drop for VideoFrame<T> { impl<T> Drop for VideoFrame<T> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
gst_video_sys::gst_video_frame_unmap(&mut self.frame); ffi::gst_video_frame_unmap(&mut self.frame);
} }
} }
} }
@ -220,7 +214,7 @@ impl<T> Drop for VideoFrame<T> {
impl VideoFrame<Readable> { impl VideoFrame<Readable> {
pub fn from_buffer_readable( pub fn from_buffer_readable(
buffer: gst::Buffer, buffer: gst::Buffer,
info: &::VideoInfo, info: &crate::VideoInfo,
) -> Result<VideoFrame<Readable>, gst::Buffer> { ) -> Result<VideoFrame<Readable>, gst::Buffer> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -228,18 +222,18 @@ impl VideoFrame<Readable> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map( let res: bool = from_glib(ffi::gst_video_frame_map(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.to_glib_none().0, buffer.to_glib_none().0,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst_sys::GST_MAP_READ, ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst::ffi::GST_MAP_READ,
)); ));
if !res { if !res {
Err(buffer) Err(buffer)
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrame { Ok(VideoFrame {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -253,7 +247,7 @@ impl VideoFrame<Readable> {
pub fn from_buffer_id_readable( pub fn from_buffer_id_readable(
buffer: gst::Buffer, buffer: gst::Buffer,
id: i32, id: i32,
info: &::VideoInfo, info: &crate::VideoInfo,
) -> Result<VideoFrame<Readable>, gst::Buffer> { ) -> Result<VideoFrame<Readable>, gst::Buffer> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -261,19 +255,19 @@ impl VideoFrame<Readable> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map_id( let res: bool = from_glib(ffi::gst_video_frame_map_id(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.to_glib_none().0, buffer.to_glib_none().0,
id, id,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst_sys::GST_MAP_READ, ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst::ffi::GST_MAP_READ,
)); ));
if !res { if !res {
Err(buffer) Err(buffer)
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrame { Ok(VideoFrame {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -292,7 +286,7 @@ impl VideoFrame<Readable> {
impl VideoFrame<Writable> { impl VideoFrame<Writable> {
pub fn from_buffer_writable( pub fn from_buffer_writable(
buffer: gst::Buffer, buffer: gst::Buffer,
info: &::VideoInfo, info: &crate::VideoInfo,
) -> Result<VideoFrame<Writable>, gst::Buffer> { ) -> Result<VideoFrame<Writable>, gst::Buffer> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -300,20 +294,20 @@ impl VideoFrame<Writable> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map( let res: bool = from_glib(ffi::gst_video_frame_map(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.to_glib_none().0, buffer.to_glib_none().0,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF
| gst_sys::GST_MAP_READ | gst::ffi::GST_MAP_READ
| gst_sys::GST_MAP_WRITE, | gst::ffi::GST_MAP_WRITE,
)); ));
if !res { if !res {
Err(buffer) Err(buffer)
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrame { Ok(VideoFrame {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -327,7 +321,7 @@ impl VideoFrame<Writable> {
pub fn from_buffer_id_writable( pub fn from_buffer_id_writable(
buffer: gst::Buffer, buffer: gst::Buffer,
id: i32, id: i32,
info: &::VideoInfo, info: &crate::VideoInfo,
) -> Result<VideoFrame<Writable>, gst::Buffer> { ) -> Result<VideoFrame<Writable>, gst::Buffer> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -335,21 +329,21 @@ impl VideoFrame<Writable> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map_id( let res: bool = from_glib(ffi::gst_video_frame_map_id(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.to_glib_none().0, buffer.to_glib_none().0,
id, id,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF
| gst_sys::GST_MAP_READ | gst::ffi::GST_MAP_READ
| gst_sys::GST_MAP_WRITE, | gst::ffi::GST_MAP_WRITE,
)); ));
if !res { if !res {
Err(buffer) Err(buffer)
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrame { Ok(VideoFrame {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -366,7 +360,9 @@ impl VideoFrame<Writable> {
pub fn plane_data_mut(&mut self, plane: u32) -> Result<&mut [u8], glib::BoolError> { pub fn plane_data_mut(&mut self, plane: u32) -> Result<&mut [u8], glib::BoolError> {
if plane >= self.n_planes() { if plane >= self.n_planes() {
return Err(glib_bool_error!("Plane index higher than number of planes")); return Err(glib::glib_bool_error!(
"Plane index higher than number of planes"
));
} }
let format_info = self.format_info(); let format_info = self.format_info();
@ -405,25 +401,25 @@ impl VideoFrame<Writable> {
} }
} }
pub fn as_mut_ptr(&mut self) -> *mut gst_video_sys::GstVideoFrame { pub fn as_mut_ptr(&mut self) -> *mut ffi::GstVideoFrame {
&mut self.frame &mut self.frame
} }
} }
#[derive(Debug)] #[derive(Debug)]
pub struct VideoFrameRef<T> { pub struct VideoFrameRef<T> {
frame: gst_video_sys::GstVideoFrame, frame: ffi::GstVideoFrame,
buffer: Option<T>, buffer: Option<T>,
info: ::VideoInfo, info: crate::VideoInfo,
unmap: bool, unmap: bool,
} }
impl<T> VideoFrameRef<T> { impl<T> VideoFrameRef<T> {
pub fn info(&self) -> &::VideoInfo { pub fn info(&self) -> &crate::VideoInfo {
&self.info &self.info
} }
pub fn flags(&self) -> ::VideoFrameFlags { pub fn flags(&self) -> crate::VideoFrameFlags {
from_glib(self.frame.flags) from_glib(self.frame.flags)
} }
@ -436,14 +432,11 @@ impl<T> VideoFrameRef<T> {
dest: &mut VideoFrameRef<&mut gst::BufferRef>, dest: &mut VideoFrameRef<&mut gst::BufferRef>,
) -> Result<(), glib::BoolError> { ) -> Result<(), glib::BoolError> {
unsafe { unsafe {
let res: bool = from_glib(gst_video_sys::gst_video_frame_copy( let res: bool = from_glib(ffi::gst_video_frame_copy(&mut dest.frame, &self.frame));
&mut dest.frame,
&self.frame,
));
if res { if res {
Ok(()) Ok(())
} else { } else {
Err(glib_bool_error!("Failed to copy video frame")) Err(glib::glib_bool_error!("Failed to copy video frame"))
} }
} }
} }
@ -456,7 +449,7 @@ impl<T> VideoFrameRef<T> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let res: bool = from_glib(gst_video_sys::gst_video_frame_copy_plane( let res: bool = from_glib(ffi::gst_video_frame_copy_plane(
&mut dest.frame, &mut dest.frame,
&self.frame, &self.frame,
plane, plane,
@ -464,16 +457,16 @@ impl<T> VideoFrameRef<T> {
if res { if res {
Ok(()) Ok(())
} else { } else {
Err(glib_bool_error!("Failed to copy video frame plane")) Err(glib::glib_bool_error!("Failed to copy video frame plane"))
} }
} }
} }
pub fn format(&self) -> ::VideoFormat { pub fn format(&self) -> crate::VideoFormat {
self.info().format() self.info().format()
} }
pub fn format_info(&self) -> ::VideoFormatInfo { pub fn format_info(&self) -> crate::VideoFormatInfo {
self.info().format_info() self.info().format_info()
} }
@ -490,19 +483,19 @@ impl<T> VideoFrameRef<T> {
} }
pub fn is_interlaced(&self) -> bool { pub fn is_interlaced(&self) -> bool {
self.flags().contains(::VideoFrameFlags::INTERLACED) self.flags().contains(crate::VideoFrameFlags::INTERLACED)
} }
pub fn is_tff(&self) -> bool { pub fn is_tff(&self) -> bool {
self.flags().contains(::VideoFrameFlags::TFF) self.flags().contains(crate::VideoFrameFlags::TFF)
} }
pub fn is_rff(&self) -> bool { pub fn is_rff(&self) -> bool {
self.flags().contains(::VideoFrameFlags::RFF) self.flags().contains(crate::VideoFrameFlags::RFF)
} }
pub fn is_onefield(&self) -> bool { pub fn is_onefield(&self) -> bool {
self.flags().contains(::VideoFrameFlags::ONEFIELD) self.flags().contains(crate::VideoFrameFlags::ONEFIELD)
} }
pub fn n_planes(&self) -> u32 { pub fn n_planes(&self) -> u32 {
@ -523,7 +516,9 @@ impl<T> VideoFrameRef<T> {
pub fn plane_data(&self, plane: u32) -> Result<&[u8], glib::BoolError> { pub fn plane_data(&self, plane: u32) -> Result<&[u8], glib::BoolError> {
if plane >= self.n_planes() { if plane >= self.n_planes() {
return Err(glib_bool_error!("Plane index higher than number of planes")); return Err(glib::glib_bool_error!(
"Plane index higher than number of planes"
));
} }
let format_info = self.format_info(); let format_info = self.format_info();
@ -551,17 +546,17 @@ impl<T> VideoFrameRef<T> {
} }
} }
pub fn as_ptr(&self) -> *const gst_video_sys::GstVideoFrame { pub fn as_ptr(&self) -> *const ffi::GstVideoFrame {
&self.frame &self.frame
} }
} }
impl<'a> VideoFrameRef<&'a gst::BufferRef> { impl<'a> VideoFrameRef<&'a gst::BufferRef> {
pub unsafe fn from_glib_borrow(frame: *const gst_video_sys::GstVideoFrame) -> Borrowed<Self> { pub unsafe fn from_glib_borrow(frame: *const ffi::GstVideoFrame) -> Borrowed<Self> {
assert!(!frame.is_null()); assert!(!frame.is_null());
let frame = ptr::read(frame); let frame = ptr::read(frame);
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
let buffer = gst::BufferRef::from_ptr(frame.buffer); let buffer = gst::BufferRef::from_ptr(frame.buffer);
Borrowed::new(VideoFrameRef { Borrowed::new(VideoFrameRef {
frame, frame,
@ -571,8 +566,8 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
}) })
} }
pub unsafe fn from_glib_full(frame: gst_video_sys::GstVideoFrame) -> Self { pub unsafe fn from_glib_full(frame: ffi::GstVideoFrame) -> Self {
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
let buffer = gst::BufferRef::from_ptr(frame.buffer); let buffer = gst::BufferRef::from_ptr(frame.buffer);
VideoFrameRef { VideoFrameRef {
frame, frame,
@ -584,7 +579,7 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
pub fn from_buffer_ref_readable<'b>( pub fn from_buffer_ref_readable<'b>(
buffer: &'a gst::BufferRef, buffer: &'a gst::BufferRef,
info: &'b ::VideoInfo, info: &'b crate::VideoInfo,
) -> Result<VideoFrameRef<&'a gst::BufferRef>, glib::BoolError> { ) -> Result<VideoFrameRef<&'a gst::BufferRef>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -592,18 +587,18 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map( let res: bool = from_glib(ffi::gst_video_frame_map(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst_sys::GST_MAP_READ, ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst::ffi::GST_MAP_READ,
)); ));
if !res { if !res {
Err(glib_bool_error!("Failed to map VideoFrame")) Err(glib::glib_bool_error!("Failed to map VideoFrame"))
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrameRef { Ok(VideoFrameRef {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -617,7 +612,7 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
pub fn from_buffer_ref_id_readable<'b>( pub fn from_buffer_ref_id_readable<'b>(
buffer: &'a gst::BufferRef, buffer: &'a gst::BufferRef,
id: i32, id: i32,
info: &'b ::VideoInfo, info: &'b crate::VideoInfo,
) -> Result<VideoFrameRef<&'a gst::BufferRef>, glib::BoolError> { ) -> Result<VideoFrameRef<&'a gst::BufferRef>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -625,19 +620,19 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map_id( let res: bool = from_glib(ffi::gst_video_frame_map_id(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
id, id,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst_sys::GST_MAP_READ, ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF | gst::ffi::GST_MAP_READ,
)); ));
if !res { if !res {
Err(glib_bool_error!("Failed to map VideoFrame")) Err(glib::glib_bool_error!("Failed to map VideoFrame"))
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrameRef { Ok(VideoFrameRef {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -654,11 +649,11 @@ impl<'a> VideoFrameRef<&'a gst::BufferRef> {
} }
impl<'a> VideoFrameRef<&'a mut gst::BufferRef> { impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
pub unsafe fn from_glib_borrow_mut(frame: *mut gst_video_sys::GstVideoFrame) -> Borrowed<Self> { pub unsafe fn from_glib_borrow_mut(frame: *mut ffi::GstVideoFrame) -> Borrowed<Self> {
assert!(!frame.is_null()); assert!(!frame.is_null());
let frame = ptr::read(frame); let frame = ptr::read(frame);
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
let buffer = gst::BufferRef::from_mut_ptr(frame.buffer); let buffer = gst::BufferRef::from_mut_ptr(frame.buffer);
Borrowed::new(VideoFrameRef { Borrowed::new(VideoFrameRef {
frame, frame,
@ -668,8 +663,8 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
}) })
} }
pub unsafe fn from_glib_full_mut(frame: gst_video_sys::GstVideoFrame) -> Self { pub unsafe fn from_glib_full_mut(frame: ffi::GstVideoFrame) -> Self {
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
let buffer = gst::BufferRef::from_mut_ptr(frame.buffer); let buffer = gst::BufferRef::from_mut_ptr(frame.buffer);
VideoFrameRef { VideoFrameRef {
frame, frame,
@ -681,7 +676,7 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
pub fn from_buffer_ref_writable<'b>( pub fn from_buffer_ref_writable<'b>(
buffer: &'a mut gst::BufferRef, buffer: &'a mut gst::BufferRef,
info: &'b ::VideoInfo, info: &'b crate::VideoInfo,
) -> Result<VideoFrameRef<&'a mut gst::BufferRef>, glib::BoolError> { ) -> Result<VideoFrameRef<&'a mut gst::BufferRef>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -689,20 +684,20 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map( let res: bool = from_glib(ffi::gst_video_frame_map(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF
| gst_sys::GST_MAP_READ | gst::ffi::GST_MAP_READ
| gst_sys::GST_MAP_WRITE, | gst::ffi::GST_MAP_WRITE,
)); ));
if !res { if !res {
Err(glib_bool_error!("Failed to map VideoFrame")) Err(glib::glib_bool_error!("Failed to map VideoFrame"))
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrameRef { Ok(VideoFrameRef {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -716,7 +711,7 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
pub fn from_buffer_ref_id_writable<'b>( pub fn from_buffer_ref_id_writable<'b>(
buffer: &'a mut gst::BufferRef, buffer: &'a mut gst::BufferRef,
id: i32, id: i32,
info: &'b ::VideoInfo, info: &'b crate::VideoInfo,
) -> Result<VideoFrameRef<&'a mut gst::BufferRef>, glib::BoolError> { ) -> Result<VideoFrameRef<&'a mut gst::BufferRef>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
@ -724,21 +719,21 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
unsafe { unsafe {
let mut frame = mem::MaybeUninit::zeroed(); let mut frame = mem::MaybeUninit::zeroed();
let res: bool = from_glib(gst_video_sys::gst_video_frame_map_id( let res: bool = from_glib(ffi::gst_video_frame_map_id(
frame.as_mut_ptr(), frame.as_mut_ptr(),
info.to_glib_none().0 as *mut _, info.to_glib_none().0 as *mut _,
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
id, id,
gst_video_sys::GST_VIDEO_FRAME_MAP_FLAG_NO_REF ffi::GST_VIDEO_FRAME_MAP_FLAG_NO_REF
| gst_sys::GST_MAP_READ | gst::ffi::GST_MAP_READ
| gst_sys::GST_MAP_WRITE, | gst::ffi::GST_MAP_WRITE,
)); ));
if !res { if !res {
Err(glib_bool_error!("Failed to map VideoFrame")) Err(glib::glib_bool_error!("Failed to map VideoFrame"))
} else { } else {
let frame = frame.assume_init(); let frame = frame.assume_init();
let info = ::VideoInfo(ptr::read(&frame.info)); let info = crate::VideoInfo(ptr::read(&frame.info));
Ok(VideoFrameRef { Ok(VideoFrameRef {
frame, frame,
buffer: Some(buffer), buffer: Some(buffer),
@ -755,7 +750,9 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
pub fn plane_data_mut(&mut self, plane: u32) -> Result<&mut [u8], glib::BoolError> { pub fn plane_data_mut(&mut self, plane: u32) -> Result<&mut [u8], glib::BoolError> {
if plane >= self.n_planes() { if plane >= self.n_planes() {
return Err(glib_bool_error!("Plane index higher than number of planes")); return Err(glib::glib_bool_error!(
"Plane index higher than number of planes"
));
} }
let format_info = self.format_info(); let format_info = self.format_info();
@ -783,7 +780,7 @@ impl<'a> VideoFrameRef<&'a mut gst::BufferRef> {
} }
} }
pub fn as_mut_ptr(&mut self) -> *mut gst_video_sys::GstVideoFrame { pub fn as_mut_ptr(&mut self) -> *mut ffi::GstVideoFrame {
&mut self.frame &mut self.frame
} }
} }
@ -806,34 +803,34 @@ impl<T> Drop for VideoFrameRef<T> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
if self.unmap { if self.unmap {
gst_video_sys::gst_video_frame_unmap(&mut self.frame); ffi::gst_video_frame_unmap(&mut self.frame);
} }
} }
} }
} }
pub trait VideoBufferExt { pub trait VideoBufferExt {
fn get_video_flags(&self) -> ::VideoBufferFlags; fn get_video_flags(&self) -> crate::VideoBufferFlags;
fn set_video_flags(&mut self, flags: ::VideoBufferFlags); fn set_video_flags(&mut self, flags: crate::VideoBufferFlags);
fn unset_video_flags(&mut self, flags: ::VideoBufferFlags); fn unset_video_flags(&mut self, flags: crate::VideoBufferFlags);
} }
impl VideoBufferExt for gst::BufferRef { impl VideoBufferExt for gst::BufferRef {
fn get_video_flags(&self) -> ::VideoBufferFlags { fn get_video_flags(&self) -> crate::VideoBufferFlags {
unsafe { unsafe {
let ptr = self.as_mut_ptr(); let ptr = self.as_mut_ptr();
::VideoBufferFlags::from_bits_truncate((*ptr).mini_object.flags) crate::VideoBufferFlags::from_bits_truncate((*ptr).mini_object.flags)
} }
} }
fn set_video_flags(&mut self, flags: ::VideoBufferFlags) { fn set_video_flags(&mut self, flags: crate::VideoBufferFlags) {
unsafe { unsafe {
let ptr = self.as_mut_ptr(); let ptr = self.as_mut_ptr();
(*ptr).mini_object.flags |= flags.bits(); (*ptr).mini_object.flags |= flags.bits();
} }
} }
fn unset_video_flags(&mut self, flags: ::VideoBufferFlags) { fn unset_video_flags(&mut self, flags: crate::VideoBufferFlags) {
unsafe { unsafe {
let ptr = self.as_mut_ptr(); let ptr = self.as_mut_ptr();
(*ptr).mini_object.flags &= !flags.bits(); (*ptr).mini_object.flags &= !flags.bits();
@ -844,13 +841,12 @@ impl VideoBufferExt for gst::BufferRef {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use gst;
#[test] #[test]
fn test_map_read() { fn test_map_read() {
gst::init().unwrap(); gst::init().unwrap();
let info = ::VideoInfo::builder(::VideoFormat::Gray8, 320, 240) let info = crate::VideoInfo::builder(crate::VideoFormat::Gray8, 320, 240)
.build() .build()
.unwrap(); .unwrap();
let buffer = gst::Buffer::with_size(info.size()).unwrap(); let buffer = gst::Buffer::with_size(info.size()).unwrap();
@ -880,7 +876,7 @@ mod tests {
fn test_map_write() { fn test_map_write() {
gst::init().unwrap(); gst::init().unwrap();
let info = ::VideoInfo::builder(::VideoFormat::Gray8, 320, 240) let info = crate::VideoInfo::builder(crate::VideoFormat::Gray8, 320, 240)
.build() .build()
.unwrap(); .unwrap();
let buffer = gst::Buffer::with_size(info.size()).unwrap(); let buffer = gst::Buffer::with_size(info.size()).unwrap();
@ -910,7 +906,7 @@ mod tests {
fn test_map_ref_read() { fn test_map_ref_read() {
gst::init().unwrap(); gst::init().unwrap();
let info = ::VideoInfo::builder(::VideoFormat::Gray8, 320, 240) let info = crate::VideoInfo::builder(crate::VideoFormat::Gray8, 320, 240)
.build() .build()
.unwrap(); .unwrap();
let buffer = gst::Buffer::with_size(info.size()).unwrap(); let buffer = gst::Buffer::with_size(info.size()).unwrap();
@ -926,7 +922,7 @@ mod tests {
fn test_map_ref_write() { fn test_map_ref_write() {
gst::init().unwrap(); gst::init().unwrap();
let info = ::VideoInfo::builder(::VideoFormat::Gray8, 320, 240) let info = crate::VideoInfo::builder(crate::VideoFormat::Gray8, 320, 240)
.build() .build()
.unwrap(); .unwrap();
let mut buffer = gst::Buffer::with_size(info.size()).unwrap(); let mut buffer = gst::Buffer::with_size(info.size()).unwrap();

View file

@ -6,16 +6,10 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib_sys;
use gobject_sys;
use gst_video_sys;
use glib;
use glib::translate::{ use glib::translate::{
from_glib, from_glib_full, from_glib_none, FromGlib, FromGlibPtrFull, FromGlibPtrNone, ToGlib, from_glib, from_glib_full, from_glib_none, FromGlib, FromGlibPtrFull, FromGlibPtrNone, ToGlib,
ToGlibPtr, ToGlibPtrMut, ToGlibPtr, ToGlibPtrMut,
}; };
use gst;
use gst::prelude::*; use gst::prelude::*;
use std::ffi::CStr; use std::ffi::CStr;
@ -24,7 +18,7 @@ use std::mem;
use std::ptr; use std::ptr;
use std::str; use std::str;
pub const VIDEO_MAX_PLANES: usize = gst_video_sys::GST_VIDEO_MAX_PLANES as usize; pub const VIDEO_MAX_PLANES: usize = ffi::GST_VIDEO_MAX_PLANES as usize;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)] #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum VideoColorRange { pub enum VideoColorRange {
@ -37,21 +31,21 @@ pub enum VideoColorRange {
#[doc(hidden)] #[doc(hidden)]
impl ToGlib for VideoColorRange { impl ToGlib for VideoColorRange {
type GlibType = gst_video_sys::GstVideoColorRange; type GlibType = ffi::GstVideoColorRange;
fn to_glib(&self) -> gst_video_sys::GstVideoColorRange { fn to_glib(&self) -> ffi::GstVideoColorRange {
match *self { match *self {
VideoColorRange::Unknown => gst_video_sys::GST_VIDEO_COLOR_RANGE_UNKNOWN, VideoColorRange::Unknown => ffi::GST_VIDEO_COLOR_RANGE_UNKNOWN,
VideoColorRange::Range0255 => gst_video_sys::GST_VIDEO_COLOR_RANGE_0_255, VideoColorRange::Range0255 => ffi::GST_VIDEO_COLOR_RANGE_0_255,
VideoColorRange::Range16235 => gst_video_sys::GST_VIDEO_COLOR_RANGE_16_235, VideoColorRange::Range16235 => ffi::GST_VIDEO_COLOR_RANGE_16_235,
VideoColorRange::__Unknown(value) => value, VideoColorRange::__Unknown(value) => value,
} }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlib<gst_video_sys::GstVideoColorRange> for VideoColorRange { impl FromGlib<ffi::GstVideoColorRange> for VideoColorRange {
fn from_glib(value: gst_video_sys::GstVideoColorRange) -> Self { fn from_glib(value: ffi::GstVideoColorRange) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
match value as i32 { match value as i32 {
0 => VideoColorRange::Unknown, 0 => VideoColorRange::Unknown,
@ -64,7 +58,7 @@ impl FromGlib<gst_video_sys::GstVideoColorRange> for VideoColorRange {
impl glib::StaticType for VideoColorRange { impl glib::StaticType for VideoColorRange {
fn static_type() -> glib::Type { fn static_type() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_color_range_get_type()) } unsafe { from_glib(ffi::gst_video_color_range_get_type()) }
} }
} }
@ -76,29 +70,29 @@ impl<'a> glib::value::FromValueOptional<'a> for VideoColorRange {
impl<'a> glib::value::FromValue<'a> for VideoColorRange { impl<'a> glib::value::FromValue<'a> for VideoColorRange {
unsafe fn from_value(value: &glib::value::Value) -> Self { unsafe fn from_value(value: &glib::value::Value) -> Self {
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0)) from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
} }
} }
impl glib::value::SetValue for VideoColorRange { impl glib::value::SetValue for VideoColorRange {
unsafe fn set_value(value: &mut glib::value::Value, this: &Self) { unsafe fn set_value(value: &mut glib::value::Value, this: &Self) {
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib() as i32) glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib() as i32)
} }
} }
pub struct VideoColorimetry(gst_video_sys::GstVideoColorimetry); pub struct VideoColorimetry(ffi::GstVideoColorimetry);
impl VideoColorimetry { impl VideoColorimetry {
pub fn new( pub fn new(
range: VideoColorRange, range: VideoColorRange,
matrix: ::VideoColorMatrix, matrix: crate::VideoColorMatrix,
transfer: ::VideoTransferFunction, transfer: crate::VideoTransferFunction,
primaries: ::VideoColorPrimaries, primaries: crate::VideoColorPrimaries,
) -> Self { ) -> Self {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
let colorimetry = unsafe { let colorimetry = unsafe {
let mut colorimetry: gst_video_sys::GstVideoColorimetry = mem::zeroed(); let mut colorimetry: ffi::GstVideoColorimetry = mem::zeroed();
colorimetry.range = range.to_glib(); colorimetry.range = range.to_glib();
colorimetry.matrix = matrix.to_glib(); colorimetry.matrix = matrix.to_glib();
@ -111,19 +105,19 @@ impl VideoColorimetry {
VideoColorimetry(colorimetry) VideoColorimetry(colorimetry)
} }
pub fn range(&self) -> ::VideoColorRange { pub fn range(&self) -> crate::VideoColorRange {
from_glib(self.0.range) from_glib(self.0.range)
} }
pub fn matrix(&self) -> ::VideoColorMatrix { pub fn matrix(&self) -> crate::VideoColorMatrix {
from_glib(self.0.matrix) from_glib(self.0.matrix)
} }
pub fn transfer(&self) -> ::VideoTransferFunction { pub fn transfer(&self) -> crate::VideoTransferFunction {
from_glib(self.0.transfer) from_glib(self.0.transfer)
} }
pub fn primaries(&self) -> ::VideoColorPrimaries { pub fn primaries(&self) -> crate::VideoColorPrimaries {
from_glib(self.0.primaries) from_glib(self.0.primaries)
} }
} }
@ -136,17 +130,13 @@ impl Clone for VideoColorimetry {
impl PartialEq for VideoColorimetry { impl PartialEq for VideoColorimetry {
fn eq(&self, other: &Self) -> bool { fn eq(&self, other: &Self) -> bool {
unsafe { unsafe { from_glib(ffi::gst_video_colorimetry_is_equal(&self.0, &other.0)) }
from_glib(gst_video_sys::gst_video_colorimetry_is_equal(
&self.0, &other.0,
))
}
} }
} }
impl Eq for VideoColorimetry {} impl Eq for VideoColorimetry {}
impl str::FromStr for ::VideoColorimetry { impl str::FromStr for crate::VideoColorimetry {
type Err = glib::error::BoolError; type Err = glib::error::BoolError;
fn from_str(s: &str) -> Result<Self, glib::error::BoolError> { fn from_str(s: &str) -> Result<Self, glib::error::BoolError> {
@ -154,20 +144,20 @@ impl str::FromStr for ::VideoColorimetry {
unsafe { unsafe {
let mut colorimetry = mem::MaybeUninit::zeroed(); let mut colorimetry = mem::MaybeUninit::zeroed();
let valid: bool = from_glib(gst_video_sys::gst_video_colorimetry_from_string( let valid: bool = from_glib(ffi::gst_video_colorimetry_from_string(
colorimetry.as_mut_ptr(), colorimetry.as_mut_ptr(),
s.to_glib_none().0, s.to_glib_none().0,
)); ));
if valid { if valid {
Ok(VideoColorimetry(colorimetry.assume_init())) Ok(VideoColorimetry(colorimetry.assume_init()))
} else { } else {
Err(glib_bool_error!("Invalid colorimetry info")) Err(glib::glib_bool_error!("Invalid colorimetry info"))
} }
} }
} }
} }
impl fmt::Debug for ::VideoColorimetry { impl fmt::Debug for crate::VideoColorimetry {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.debug_struct("VideoColorimetry") f.debug_struct("VideoColorimetry")
.field("range", &self.0.range) .field("range", &self.0.range)
@ -178,27 +168,24 @@ impl fmt::Debug for ::VideoColorimetry {
} }
} }
impl fmt::Display for ::VideoColorimetry { impl fmt::Display for crate::VideoColorimetry {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
let s = unsafe { let s =
glib::GString::from_glib_full(gst_video_sys::gst_video_colorimetry_to_string(&self.0)) unsafe { glib::GString::from_glib_full(ffi::gst_video_colorimetry_to_string(&self.0)) };
};
f.write_str(&s) f.write_str(&s)
} }
} }
impl str::FromStr for ::VideoChromaSite { impl str::FromStr for crate::VideoChromaSite {
type Err = glib::error::BoolError; type Err = glib::error::BoolError;
fn from_str(s: &str) -> Result<Self, glib::error::BoolError> { fn from_str(s: &str) -> Result<Self, glib::error::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let chroma_site = from_glib(gst_video_sys::gst_video_chroma_from_string( let chroma_site = from_glib(ffi::gst_video_chroma_from_string(s.to_glib_none().0));
s.to_glib_none().0, if chroma_site == crate::VideoChromaSite::empty() {
)); Err(glib::glib_bool_error!("Invalid chroma site"))
if chroma_site == ::VideoChromaSite::empty() {
Err(glib_bool_error!("Invalid chroma site"))
} else { } else {
Ok(chroma_site) Ok(chroma_site)
} }
@ -206,25 +193,27 @@ impl str::FromStr for ::VideoChromaSite {
} }
} }
impl fmt::Display for ::VideoChromaSite { impl fmt::Display for crate::VideoChromaSite {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
let s = unsafe { let s = unsafe {
glib::GString::from_glib_full(gst_video_sys::gst_video_chroma_to_string(self.to_glib())) glib::GString::from_glib_full(ffi::gst_video_chroma_to_string(self.to_glib()))
}; };
f.write_str(&s) f.write_str(&s)
} }
} }
impl ::VideoTransferFunction { impl crate::VideoTransferFunction {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn from_iso(iso: u32) -> Result<::VideoTransferFunction, glib::BoolError> { pub fn from_iso(iso: u32) -> Result<crate::VideoTransferFunction, glib::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let value = from_glib(gst_video_sys::gst_video_transfer_function_from_iso(iso)); let value = from_glib(ffi::gst_video_transfer_function_from_iso(iso));
match value { match value {
::VideoTransferFunction::__Unknown(_) => Err(glib_bool_error!("Invalid ISO value")), crate::VideoTransferFunction::__Unknown(_) => {
Err(glib::glib_bool_error!("Invalid ISO value"))
}
_ => Ok(value), _ => Ok(value),
} }
} }
@ -233,7 +222,7 @@ impl ::VideoTransferFunction {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn to_iso(&self) -> u32 { pub fn to_iso(&self) -> u32 {
unsafe { gst_video_sys::gst_video_transfer_function_to_iso(self.to_glib()) } unsafe { ffi::gst_video_transfer_function_to_iso(self.to_glib()) }
} }
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
@ -241,11 +230,11 @@ impl ::VideoTransferFunction {
pub fn is_equivalent( pub fn is_equivalent(
&self, &self,
from_bpp: u32, from_bpp: u32,
to_func: ::VideoTransferFunction, to_func: crate::VideoTransferFunction,
to_bpp: u32, to_bpp: u32,
) -> bool { ) -> bool {
unsafe { unsafe {
from_glib(gst_video_sys::gst_video_transfer_function_is_equivalent( from_glib(ffi::gst_video_transfer_function_is_equivalent(
self.to_glib(), self.to_glib(),
from_bpp, from_bpp,
to_func.to_glib(), to_func.to_glib(),
@ -255,16 +244,18 @@ impl ::VideoTransferFunction {
} }
} }
impl ::VideoColorMatrix { impl crate::VideoColorMatrix {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn from_iso(iso: u32) -> Result<::VideoColorMatrix, glib::BoolError> { pub fn from_iso(iso: u32) -> Result<crate::VideoColorMatrix, glib::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let value = from_glib(gst_video_sys::gst_video_color_matrix_from_iso(iso)); let value = from_glib(ffi::gst_video_color_matrix_from_iso(iso));
match value { match value {
::VideoColorMatrix::__Unknown(_) => Err(glib_bool_error!("Invalid ISO value")), crate::VideoColorMatrix::__Unknown(_) => {
Err(glib::glib_bool_error!("Invalid ISO value"))
}
_ => Ok(value), _ => Ok(value),
} }
} }
@ -273,20 +264,22 @@ impl ::VideoColorMatrix {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn to_iso(&self) -> u32 { pub fn to_iso(&self) -> u32 {
unsafe { gst_video_sys::gst_video_color_matrix_to_iso(self.to_glib()) } unsafe { ffi::gst_video_color_matrix_to_iso(self.to_glib()) }
} }
} }
impl ::VideoColorPrimaries { impl crate::VideoColorPrimaries {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn from_iso(iso: u32) -> Result<::VideoColorPrimaries, glib::BoolError> { pub fn from_iso(iso: u32) -> Result<crate::VideoColorPrimaries, glib::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let value = from_glib(gst_video_sys::gst_video_color_primaries_from_iso(iso)); let value = from_glib(ffi::gst_video_color_primaries_from_iso(iso));
match value { match value {
::VideoColorPrimaries::__Unknown(_) => Err(glib_bool_error!("Invalid ISO value")), crate::VideoColorPrimaries::__Unknown(_) => {
Err(glib::glib_bool_error!("Invalid ISO value"))
}
_ => Ok(value), _ => Ok(value),
} }
} }
@ -295,34 +288,36 @@ impl ::VideoColorPrimaries {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
pub fn to_iso(&self) -> u32 { pub fn to_iso(&self) -> u32 {
unsafe { gst_video_sys::gst_video_color_primaries_to_iso(self.to_glib()) } unsafe { ffi::gst_video_color_primaries_to_iso(self.to_glib()) }
} }
} }
impl From<::VideoMultiviewFramePacking> for ::VideoMultiviewMode { impl From<crate::VideoMultiviewFramePacking> for crate::VideoMultiviewMode {
fn from(v: ::VideoMultiviewFramePacking) -> Self { fn from(v: crate::VideoMultiviewFramePacking) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
from_glib(v.to_glib()) from_glib(v.to_glib())
} }
} }
impl std::convert::TryFrom<::VideoMultiviewMode> for ::VideoMultiviewFramePacking { impl std::convert::TryFrom<crate::VideoMultiviewMode> for crate::VideoMultiviewFramePacking {
type Error = glib::BoolError; type Error = glib::BoolError;
fn try_from(v: ::VideoMultiviewMode) -> Result<::VideoMultiviewFramePacking, glib::BoolError> { fn try_from(
v: crate::VideoMultiviewMode,
) -> Result<crate::VideoMultiviewFramePacking, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
let v2 = from_glib(v.to_glib()); let v2 = from_glib(v.to_glib());
if let ::VideoMultiviewFramePacking::__Unknown(_) = v2 { if let crate::VideoMultiviewFramePacking::__Unknown(_) = v2 {
Err(glib_bool_error!("Invalid frame packing mode")) Err(glib::glib_bool_error!("Invalid frame packing mode"))
} else { } else {
Ok(v2) Ok(v2)
} }
} }
} }
pub struct VideoInfo(pub(crate) gst_video_sys::GstVideoInfo); pub struct VideoInfo(pub(crate) ffi::GstVideoInfo);
impl fmt::Debug for VideoInfo { impl fmt::Debug for VideoInfo {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
@ -354,24 +349,24 @@ impl fmt::Debug for VideoInfo {
#[derive(Debug)] #[derive(Debug)]
pub struct VideoInfoBuilder<'a> { pub struct VideoInfoBuilder<'a> {
format: ::VideoFormat, format: crate::VideoFormat,
width: u32, width: u32,
height: u32, height: u32,
interlace_mode: Option<::VideoInterlaceMode>, interlace_mode: Option<crate::VideoInterlaceMode>,
flags: Option<::VideoFlags>, flags: Option<crate::VideoFlags>,
size: Option<usize>, size: Option<usize>,
views: Option<u32>, views: Option<u32>,
chroma_site: Option<::VideoChromaSite>, chroma_site: Option<crate::VideoChromaSite>,
colorimetry: Option<&'a ::VideoColorimetry>, colorimetry: Option<&'a crate::VideoColorimetry>,
par: Option<gst::Fraction>, par: Option<gst::Fraction>,
fps: Option<gst::Fraction>, fps: Option<gst::Fraction>,
offset: Option<&'a [usize]>, offset: Option<&'a [usize]>,
stride: Option<&'a [i32]>, stride: Option<&'a [i32]>,
multiview_mode: Option<::VideoMultiviewMode>, multiview_mode: Option<crate::VideoMultiviewMode>,
multiview_flags: Option<::VideoMultiviewFlags>, multiview_flags: Option<crate::VideoMultiviewFlags>,
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
field_order: Option<::VideoFieldOrder>, field_order: Option<crate::VideoFieldOrder>,
} }
impl<'a> VideoInfoBuilder<'a> { impl<'a> VideoInfoBuilder<'a> {
@ -379,11 +374,11 @@ impl<'a> VideoInfoBuilder<'a> {
unsafe { unsafe {
let mut info = mem::MaybeUninit::uninit(); let mut info = mem::MaybeUninit::uninit();
cfg_if! { cfg_if::cfg_if! {
if #[cfg(feature = "v1_16")] { if #[cfg(feature = "v1_16")] {
let res: bool = { let res: bool = {
from_glib(if let Some(interlace_mode) = self.interlace_mode { from_glib(if let Some(interlace_mode) = self.interlace_mode {
gst_video_sys::gst_video_info_set_interlaced_format( ffi::gst_video_info_set_interlaced_format(
info.as_mut_ptr(), info.as_mut_ptr(),
self.format.to_glib(), self.format.to_glib(),
interlace_mode.to_glib(), interlace_mode.to_glib(),
@ -391,7 +386,7 @@ impl<'a> VideoInfoBuilder<'a> {
self.height, self.height,
) )
} else { } else {
gst_video_sys::gst_video_info_set_format( ffi::gst_video_info_set_format(
info.as_mut_ptr(), info.as_mut_ptr(),
self.format.to_glib(), self.format.to_glib(),
self.width, self.width,
@ -401,7 +396,7 @@ impl<'a> VideoInfoBuilder<'a> {
}; };
} else if #[cfg(feature = "v1_12")] { } else if #[cfg(feature = "v1_12")] {
let res: bool = { let res: bool = {
let res = from_glib(gst_video_sys::gst_video_info_set_format( let res = from_glib(ffi::gst_video_info_set_format(
info.as_mut_ptr(), info.as_mut_ptr(),
self.format.to_glib(), self.format.to_glib(),
self.width, self.width,
@ -422,7 +417,7 @@ impl<'a> VideoInfoBuilder<'a> {
// The bool return value is new with 1.11.1, see // The bool return value is new with 1.11.1, see
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0 // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0
let res = if gst::version() < (1, 11, 1, 0) { let res = if gst::version() < (1, 11, 1, 0) {
gst_video_sys::gst_video_info_set_format( ffi::gst_video_info_set_format(
info.as_mut_ptr(), info.as_mut_ptr(),
self.format.to_glib(), self.format.to_glib(),
self.width, self.width,
@ -431,7 +426,7 @@ impl<'a> VideoInfoBuilder<'a> {
true true
} else { } else {
from_glib(gst_video_sys::gst_video_info_set_format( from_glib(ffi::gst_video_info_set_format(
info.as_mut_ptr(), info.as_mut_ptr(),
self.format.to_glib(), self.format.to_glib(),
self.width, self.width,
@ -452,13 +447,13 @@ impl<'a> VideoInfoBuilder<'a> {
} }
if !res { if !res {
return Err(glib_bool_error!("Failed to build VideoInfo")); return Err(glib::glib_bool_error!("Failed to build VideoInfo"));
} }
let mut info = info.assume_init(); let mut info = info.assume_init();
if info.finfo.is_null() || info.width <= 0 || info.height <= 0 { if info.finfo.is_null() || info.width <= 0 || info.height <= 0 {
return Err(glib_bool_error!("Failed to build VideoInfo")); return Err(glib::glib_bool_error!("Failed to build VideoInfo"));
} }
if let Some(flags) = self.flags { if let Some(flags) = self.flags {
@ -493,7 +488,7 @@ impl<'a> VideoInfoBuilder<'a> {
if let Some(offset) = self.offset { if let Some(offset) = self.offset {
if offset.len() != ((*info.finfo).n_planes as usize) { if offset.len() != ((*info.finfo).n_planes as usize) {
return Err(glib_bool_error!("Failed to build VideoInfo")); return Err(glib::glib_bool_error!("Failed to build VideoInfo"));
} }
let n_planes = (*info.finfo).n_planes as usize; let n_planes = (*info.finfo).n_planes as usize;
@ -502,7 +497,7 @@ impl<'a> VideoInfoBuilder<'a> {
if let Some(stride) = self.stride { if let Some(stride) = self.stride {
if stride.len() != ((*info.finfo).n_planes as usize) { if stride.len() != ((*info.finfo).n_planes as usize) {
return Err(glib_bool_error!("Failed to build VideoInfo")); return Err(glib::glib_bool_error!("Failed to build VideoInfo"));
} }
let n_planes = (*info.finfo).n_planes as usize; let n_planes = (*info.finfo).n_planes as usize;
@ -529,14 +524,14 @@ impl<'a> VideoInfoBuilder<'a> {
} }
} }
pub fn interlace_mode(self, interlace_mode: ::VideoInterlaceMode) -> VideoInfoBuilder<'a> { pub fn interlace_mode(self, interlace_mode: crate::VideoInterlaceMode) -> VideoInfoBuilder<'a> {
Self { Self {
interlace_mode: Some(interlace_mode), interlace_mode: Some(interlace_mode),
..self ..self
} }
} }
pub fn flags(self, flags: ::VideoFlags) -> Self { pub fn flags(self, flags: crate::VideoFlags) -> Self {
Self { Self {
flags: Some(flags), flags: Some(flags),
..self ..self
@ -557,14 +552,14 @@ impl<'a> VideoInfoBuilder<'a> {
} }
} }
pub fn chroma_site(self, chroma_site: ::VideoChromaSite) -> Self { pub fn chroma_site(self, chroma_site: crate::VideoChromaSite) -> Self {
Self { Self {
chroma_site: Some(chroma_site), chroma_site: Some(chroma_site),
..self ..self
} }
} }
pub fn colorimetry(self, colorimetry: &'a ::VideoColorimetry) -> VideoInfoBuilder<'a> { pub fn colorimetry(self, colorimetry: &'a crate::VideoColorimetry) -> VideoInfoBuilder<'a> {
Self { Self {
colorimetry: Some(colorimetry), colorimetry: Some(colorimetry),
..self ..self
@ -599,14 +594,14 @@ impl<'a> VideoInfoBuilder<'a> {
} }
} }
pub fn multiview_mode(self, multiview_mode: ::VideoMultiviewMode) -> Self { pub fn multiview_mode(self, multiview_mode: crate::VideoMultiviewMode) -> Self {
Self { Self {
multiview_mode: Some(multiview_mode), multiview_mode: Some(multiview_mode),
..self ..self
} }
} }
pub fn multiview_flags(self, multiview_flags: ::VideoMultiviewFlags) -> Self { pub fn multiview_flags(self, multiview_flags: crate::VideoMultiviewFlags) -> Self {
Self { Self {
multiview_flags: Some(multiview_flags), multiview_flags: Some(multiview_flags),
..self ..self
@ -615,7 +610,7 @@ impl<'a> VideoInfoBuilder<'a> {
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
pub fn field_order(self, field_order: ::VideoFieldOrder) -> Self { pub fn field_order(self, field_order: crate::VideoFieldOrder) -> Self {
Self { Self {
field_order: Some(field_order), field_order: Some(field_order),
..self ..self
@ -624,10 +619,14 @@ impl<'a> VideoInfoBuilder<'a> {
} }
impl VideoInfo { impl VideoInfo {
pub fn builder<'a>(format: ::VideoFormat, width: u32, height: u32) -> VideoInfoBuilder<'a> { pub fn builder<'a>(
format: crate::VideoFormat,
width: u32,
height: u32,
) -> VideoInfoBuilder<'a> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
cfg_if! { cfg_if::cfg_if! {
if #[cfg(any(feature = "v1_12", feature = "dox"))] { if #[cfg(any(feature = "v1_12", feature = "dox"))] {
VideoInfoBuilder { VideoInfoBuilder {
format, format,
@ -678,39 +677,41 @@ impl VideoInfo {
unsafe { unsafe {
let mut info = mem::MaybeUninit::uninit(); let mut info = mem::MaybeUninit::uninit();
if from_glib(gst_video_sys::gst_video_info_from_caps( if from_glib(ffi::gst_video_info_from_caps(
info.as_mut_ptr(), info.as_mut_ptr(),
caps.as_ptr(), caps.as_ptr(),
)) { )) {
Ok(VideoInfo(info.assume_init())) Ok(VideoInfo(info.assume_init()))
} else { } else {
Err(glib_bool_error!("Failed to create VideoInfo from caps")) Err(glib::glib_bool_error!(
"Failed to create VideoInfo from caps"
))
} }
} }
} }
pub fn to_caps(&self) -> Result<gst::Caps, glib::error::BoolError> { pub fn to_caps(&self) -> Result<gst::Caps, glib::error::BoolError> {
unsafe { unsafe {
let result = from_glib_full(gst_video_sys::gst_video_info_to_caps( let result = from_glib_full(ffi::gst_video_info_to_caps(&self.0 as *const _ as *mut _));
&self.0 as *const _ as *mut _,
));
match result { match result {
Some(c) => Ok(c), Some(c) => Ok(c),
None => Err(glib_bool_error!("Failed to create caps from VideoInfo")), None => Err(glib::glib_bool_error!(
"Failed to create caps from VideoInfo"
)),
} }
} }
} }
pub fn format(&self) -> ::VideoFormat { pub fn format(&self) -> crate::VideoFormat {
if self.0.finfo.is_null() { if self.0.finfo.is_null() {
return ::VideoFormat::Unknown; return crate::VideoFormat::Unknown;
} }
unsafe { from_glib((*self.0.finfo).format) } unsafe { from_glib((*self.0.finfo).format) }
} }
pub fn format_info(&self) -> ::VideoFormatInfo { pub fn format_info(&self) -> crate::VideoFormatInfo {
::VideoFormatInfo::from_format(self.format()) crate::VideoFormatInfo::from_format(self.format())
} }
pub fn width(&self) -> u32 { pub fn width(&self) -> u32 {
@ -724,18 +725,18 @@ impl VideoInfo {
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
pub fn field_height(&self) -> u32 { pub fn field_height(&self) -> u32 {
if self.0.interlace_mode == gst_video_sys::GST_VIDEO_INTERLACE_MODE_ALTERNATE { if self.0.interlace_mode == ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE {
(self.0.height as u32 + 1) / 2 (self.0.height as u32 + 1) / 2
} else { } else {
self.0.height as u32 self.0.height as u32
} }
} }
pub fn interlace_mode(&self) -> ::VideoInterlaceMode { pub fn interlace_mode(&self) -> crate::VideoInterlaceMode {
from_glib(self.0.interlace_mode) from_glib(self.0.interlace_mode)
} }
pub fn flags(&self) -> ::VideoFlags { pub fn flags(&self) -> crate::VideoFlags {
from_glib(self.0.flags) from_glib(self.0.flags)
} }
@ -747,7 +748,7 @@ impl VideoInfo {
self.0.views as u32 self.0.views as u32
} }
pub fn chroma_site(&self) -> ::VideoChromaSite { pub fn chroma_site(&self) -> crate::VideoChromaSite {
from_glib(self.0.chroma_site) from_glib(self.0.chroma_site)
} }
@ -771,14 +772,14 @@ impl VideoInfo {
&self.0.stride[0..(self.format_info().n_planes() as usize)] &self.0.stride[0..(self.format_info().n_planes() as usize)]
} }
pub fn multiview_mode(&self) -> ::VideoMultiviewMode { pub fn multiview_mode(&self) -> crate::VideoMultiviewMode {
unsafe { unsafe {
let ptr = &self.0.ABI._gst_reserved as *const _ as *const i32; let ptr = &self.0.ABI._gst_reserved as *const _ as *const i32;
from_glib(ptr::read(ptr.offset(0))) from_glib(ptr::read(ptr.offset(0)))
} }
} }
pub fn multiview_flags(&self) -> ::VideoMultiviewFlags { pub fn multiview_flags(&self) -> crate::VideoMultiviewFlags {
unsafe { unsafe {
let ptr = &self.0.ABI._gst_reserved as *const _ as *const u32; let ptr = &self.0.ABI._gst_reserved as *const _ as *const u32;
from_glib(ptr::read(ptr.offset(1))) from_glib(ptr::read(ptr.offset(1)))
@ -787,7 +788,7 @@ impl VideoInfo {
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
pub fn field_order(&self) -> ::VideoFieldOrder { pub fn field_order(&self) -> crate::VideoFieldOrder {
unsafe { unsafe {
let ptr = &self.0.ABI._gst_reserved as *const _ as *const i32; let ptr = &self.0.ABI._gst_reserved as *const _ as *const i32;
from_glib(ptr::read(ptr.offset(2))) from_glib(ptr::read(ptr.offset(2)))
@ -811,7 +812,7 @@ impl VideoInfo {
} }
pub fn is_interlaced(&self) -> bool { pub fn is_interlaced(&self) -> bool {
self.interlace_mode() != ::VideoInterlaceMode::Progressive self.interlace_mode() != crate::VideoInterlaceMode::Progressive
} }
pub fn n_planes(&self) -> u32 { pub fn n_planes(&self) -> u32 {
@ -831,7 +832,7 @@ impl VideoInfo {
let src_val = src_val.into(); let src_val = src_val.into();
unsafe { unsafe {
let mut dest_val = mem::MaybeUninit::uninit(); let mut dest_val = mem::MaybeUninit::uninit();
if from_glib(gst_video_sys::gst_video_info_convert( if from_glib(ffi::gst_video_info_convert(
&self.0 as *const _ as *mut _, &self.0 as *const _ as *mut _,
src_val.get_format().to_glib(), src_val.get_format().to_glib(),
src_val.to_raw_value(), src_val.to_raw_value(),
@ -855,7 +856,7 @@ impl VideoInfo {
let src_val = src_val.into(); let src_val = src_val.into();
unsafe { unsafe {
let mut dest_val = mem::MaybeUninit::uninit(); let mut dest_val = mem::MaybeUninit::uninit();
if from_glib(gst_video_sys::gst_video_info_convert( if from_glib(ffi::gst_video_info_convert(
&self.0 as *const _ as *mut _, &self.0 as *const _ as *mut _,
src_val.get_format().to_glib(), src_val.get_format().to_glib(),
src_val.to_raw_value(), src_val.to_raw_value(),
@ -872,11 +873,11 @@ impl VideoInfo {
} }
} }
pub fn align(&mut self, align: &mut ::VideoAlignment) -> bool { pub fn align(&mut self, align: &mut crate::VideoAlignment) -> bool {
cfg_if! { cfg_if::cfg_if! {
if #[cfg(feature = "v1_12")] { if #[cfg(feature = "v1_12")] {
unsafe { unsafe {
from_glib(gst_video_sys::gst_video_info_align( from_glib(ffi::gst_video_info_align(
&mut self.0, &mut self.0,
&mut align.0, &mut align.0,
)) ))
@ -886,11 +887,11 @@ impl VideoInfo {
// The bool return value is new with 1.11.1, see // The bool return value is new with 1.11.1, see
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0 // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0
if gst::version() < (1, 11, 1, 0) { if gst::version() < (1, 11, 1, 0) {
gst_video_sys::gst_video_info_align(&mut self.0, &mut align.0); ffi::gst_video_info_align(&mut self.0, &mut align.0);
true true
} else { } else {
from_glib(gst_video_sys::gst_video_info_align( from_glib(ffi::gst_video_info_align(
&mut self.0, &mut self.0,
&mut align.0, &mut align.0,
)) ))
@ -909,7 +910,7 @@ impl Clone for VideoInfo {
impl PartialEq for VideoInfo { impl PartialEq for VideoInfo {
fn eq(&self, other: &Self) -> bool { fn eq(&self, other: &Self) -> bool {
unsafe { from_glib(gst_video_sys::gst_video_info_is_equal(&self.0, &other.0)) } unsafe { from_glib(ffi::gst_video_info_is_equal(&self.0, &other.0)) }
} }
} }
@ -920,25 +921,26 @@ unsafe impl Sync for VideoInfo {}
impl glib::types::StaticType for VideoInfo { impl glib::types::StaticType for VideoInfo {
fn static_type() -> glib::types::Type { fn static_type() -> glib::types::Type {
unsafe { glib::translate::from_glib(gst_video_sys::gst_video_info_get_type()) } unsafe { glib::translate::from_glib(ffi::gst_video_info_get_type()) }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> glib::value::FromValueOptional<'a> for VideoInfo { impl<'a> glib::value::FromValueOptional<'a> for VideoInfo {
unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> { unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> {
Option::<VideoInfo>::from_glib_none(gobject_sys::g_value_get_boxed(value.to_glib_none().0) Option::<VideoInfo>::from_glib_none(glib::gobject_ffi::g_value_get_boxed(
as *mut gst_video_sys::GstVideoInfo) value.to_glib_none().0,
) as *mut ffi::GstVideoInfo)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl glib::value::SetValue for VideoInfo { impl glib::value::SetValue for VideoInfo {
unsafe fn set_value(value: &mut glib::Value, this: &Self) { unsafe fn set_value(value: &mut glib::Value, this: &Self) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
glib::translate::ToGlibPtr::<*const gst_video_sys::GstVideoInfo>::to_glib_none(this).0 glib::translate::ToGlibPtr::<*const ffi::GstVideoInfo>::to_glib_none(this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }
@ -946,10 +948,10 @@ impl glib::value::SetValue for VideoInfo {
#[doc(hidden)] #[doc(hidden)]
impl glib::value::SetValueOptional for VideoInfo { impl glib::value::SetValueOptional for VideoInfo {
unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) { unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
glib::translate::ToGlibPtr::<*const gst_video_sys::GstVideoInfo>::to_glib_none(&this).0 glib::translate::ToGlibPtr::<*const ffi::GstVideoInfo>::to_glib_none(&this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }
@ -963,50 +965,46 @@ impl glib::translate::Uninitialized for VideoInfo {
#[doc(hidden)] #[doc(hidden)]
impl glib::translate::GlibPtrDefault for VideoInfo { impl glib::translate::GlibPtrDefault for VideoInfo {
type GlibType = *mut gst_video_sys::GstVideoInfo; type GlibType = *mut ffi::GstVideoInfo;
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> glib::translate::ToGlibPtr<'a, *const gst_video_sys::GstVideoInfo> for VideoInfo { impl<'a> glib::translate::ToGlibPtr<'a, *const ffi::GstVideoInfo> for VideoInfo {
type Storage = &'a VideoInfo; type Storage = &'a VideoInfo;
fn to_glib_none( fn to_glib_none(&'a self) -> glib::translate::Stash<'a, *const ffi::GstVideoInfo, Self> {
&'a self,
) -> glib::translate::Stash<'a, *const gst_video_sys::GstVideoInfo, Self> {
glib::translate::Stash(&self.0, self) glib::translate::Stash(&self.0, self)
} }
fn to_glib_full(&self) -> *const gst_video_sys::GstVideoInfo { fn to_glib_full(&self) -> *const ffi::GstVideoInfo {
unimplemented!() unimplemented!()
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl glib::translate::FromGlibPtrNone<*mut gst_video_sys::GstVideoInfo> for VideoInfo { impl glib::translate::FromGlibPtrNone<*mut ffi::GstVideoInfo> for VideoInfo {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *mut gst_video_sys::GstVideoInfo) -> Self { unsafe fn from_glib_none(ptr: *mut ffi::GstVideoInfo) -> Self {
VideoInfo(ptr::read(ptr)) VideoInfo(ptr::read(ptr))
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl glib::translate::FromGlibPtrFull<*mut gst_video_sys::GstVideoInfo> for VideoInfo { impl glib::translate::FromGlibPtrFull<*mut ffi::GstVideoInfo> for VideoInfo {
#[inline] #[inline]
unsafe fn from_glib_full(ptr: *mut gst_video_sys::GstVideoInfo) -> Self { unsafe fn from_glib_full(ptr: *mut ffi::GstVideoInfo) -> Self {
let info = from_glib_none(ptr); let info = from_glib_none(ptr);
glib_sys::g_free(ptr as *mut _); glib::ffi::g_free(ptr as *mut _);
info info
} }
} }
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
impl ::VideoFieldOrder { impl crate::VideoFieldOrder {
pub fn to_str<'a>(self) -> &'a str { pub fn to_str<'a>(self) -> &'a str {
unsafe { unsafe {
CStr::from_ptr(gst_video_sys::gst_video_field_order_to_string( CStr::from_ptr(ffi::gst_video_field_order_to_string(self.to_glib()))
self.to_glib(),
))
.to_str() .to_str()
.unwrap() .unwrap()
} }
@ -1015,14 +1013,14 @@ impl ::VideoFieldOrder {
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
impl str::FromStr for ::VideoFieldOrder { impl str::FromStr for crate::VideoFieldOrder {
type Err = glib::error::BoolError; type Err = glib::error::BoolError;
fn from_str(s: &str) -> Result<Self, glib::error::BoolError> { fn from_str(s: &str) -> Result<Self, glib::error::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
Ok(from_glib(gst_video_sys::gst_video_field_order_from_string( Ok(from_glib(ffi::gst_video_field_order_from_string(
s.to_glib_none().0, s.to_glib_none().0,
))) )))
} }
@ -1031,39 +1029,37 @@ impl str::FromStr for ::VideoFieldOrder {
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
impl fmt::Display for ::VideoFieldOrder { impl fmt::Display for crate::VideoFieldOrder {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str((*self).to_str()) f.write_str((*self).to_str())
} }
} }
impl ::VideoInterlaceMode { impl crate::VideoInterlaceMode {
pub fn to_str<'a>(self) -> &'a str { pub fn to_str<'a>(self) -> &'a str {
unsafe { unsafe {
CStr::from_ptr(gst_video_sys::gst_video_interlace_mode_to_string( CStr::from_ptr(ffi::gst_video_interlace_mode_to_string(self.to_glib()))
self.to_glib(),
))
.to_str() .to_str()
.unwrap() .unwrap()
} }
} }
} }
impl str::FromStr for ::VideoInterlaceMode { impl str::FromStr for crate::VideoInterlaceMode {
type Err = glib::error::BoolError; type Err = glib::error::BoolError;
fn from_str(s: &str) -> Result<Self, glib::error::BoolError> { fn from_str(s: &str) -> Result<Self, glib::error::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
Ok(from_glib( Ok(from_glib(ffi::gst_video_interlace_mode_from_string(
gst_video_sys::gst_video_interlace_mode_from_string(s.to_glib_none().0), s.to_glib_none().0,
)) )))
} }
} }
} }
impl fmt::Display for ::VideoInterlaceMode { impl fmt::Display for crate::VideoInterlaceMode {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str((*self).to_str()) f.write_str((*self).to_str())
} }
@ -1072,40 +1068,39 @@ impl fmt::Display for ::VideoInterlaceMode {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use gst;
#[test] #[test]
fn test_new() { fn test_new() {
gst::init().unwrap(); gst::init().unwrap();
let info = VideoInfo::builder(::VideoFormat::I420, 320, 240) let info = VideoInfo::builder(crate::VideoFormat::I420, 320, 240)
.build() .build()
.unwrap(); .unwrap();
assert_eq!(info.format(), ::VideoFormat::I420); assert_eq!(info.format(), crate::VideoFormat::I420);
assert_eq!(info.width(), 320); assert_eq!(info.width(), 320);
assert_eq!(info.height(), 240); assert_eq!(info.height(), 240);
assert_eq!(info.size(), 320 * 240 + 2 * 160 * 120); assert_eq!(info.size(), 320 * 240 + 2 * 160 * 120);
assert_eq!(info.multiview_mode(), ::VideoMultiviewMode::None); assert_eq!(info.multiview_mode(), crate::VideoMultiviewMode::None);
assert_eq!(&info.offset(), &[0, 320 * 240, 320 * 240 + 160 * 120]); assert_eq!(&info.offset(), &[0, 320 * 240, 320 * 240 + 160 * 120]);
assert_eq!(&info.stride(), &[320, 160, 160]); assert_eq!(&info.stride(), &[320, 160, 160]);
let offsets = [0, 640 * 240 + 16, 640 * 240 + 16 + 320 * 120 + 16]; let offsets = [0, 640 * 240 + 16, 640 * 240 + 16 + 320 * 120 + 16];
let strides = [640, 320, 320]; let strides = [640, 320, 320];
let info = VideoInfo::builder(::VideoFormat::I420, 320, 240) let info = VideoInfo::builder(crate::VideoFormat::I420, 320, 240)
.offset(&offsets) .offset(&offsets)
.stride(&strides) .stride(&strides)
.size(640 * 240 + 16 + 320 * 120 + 16 + 320 * 120 + 16) .size(640 * 240 + 16 + 320 * 120 + 16 + 320 * 120 + 16)
.multiview_mode(::VideoMultiviewMode::SideBySide) .multiview_mode(crate::VideoMultiviewMode::SideBySide)
.build() .build()
.unwrap(); .unwrap();
assert_eq!(info.format(), ::VideoFormat::I420); assert_eq!(info.format(), crate::VideoFormat::I420);
assert_eq!(info.width(), 320); assert_eq!(info.width(), 320);
assert_eq!(info.height(), 240); assert_eq!(info.height(), 240);
assert_eq!( assert_eq!(
info.size(), info.size(),
640 * 240 + 16 + 320 * 120 + 16 + 320 * 120 + 16 640 * 240 + 16 + 320 * 120 + 16 + 320 * 120 + 16
); );
assert_eq!(info.multiview_mode(), ::VideoMultiviewMode::SideBySide); assert_eq!(info.multiview_mode(), crate::VideoMultiviewMode::SideBySide);
assert_eq!( assert_eq!(
&info.offset(), &info.offset(),
&[0, 640 * 240 + 16, 640 * 240 + 16 + 320 * 120 + 16] &[0, 640 * 240 + 16, 640 * 240 + 16 + 320 * 120 + 16]
@ -1131,12 +1126,15 @@ mod tests {
], ],
); );
let info = VideoInfo::from_caps(&caps).unwrap(); let info = VideoInfo::from_caps(&caps).unwrap();
assert_eq!(info.format(), ::VideoFormat::I420); assert_eq!(info.format(), crate::VideoFormat::I420);
assert_eq!(info.width(), 320); assert_eq!(info.width(), 320);
assert_eq!(info.height(), 240); assert_eq!(info.height(), 240);
assert_eq!(info.fps(), gst::Fraction::new(30, 1)); assert_eq!(info.fps(), gst::Fraction::new(30, 1));
assert_eq!(info.interlace_mode(), ::VideoInterlaceMode::Progressive); assert_eq!(
assert_eq!(info.chroma_site(), ::VideoChromaSite::MPEG2); info.interlace_mode(),
crate::VideoInterlaceMode::Progressive
);
assert_eq!(info.chroma_site(), crate::VideoChromaSite::MPEG2);
assert_eq!(info.colorimetry(), "bt709".parse().unwrap()); assert_eq!(info.colorimetry(), "bt709".parse().unwrap());
let caps2 = info.to_caps().unwrap(); let caps2 = info.to_caps().unwrap();
@ -1152,14 +1150,14 @@ mod tests {
fn test_video_align() { fn test_video_align() {
gst::init().unwrap(); gst::init().unwrap();
let mut info = ::VideoInfo::builder(::VideoFormat::Nv16, 1920, 1080) let mut info = crate::VideoInfo::builder(crate::VideoFormat::Nv16, 1920, 1080)
.build() .build()
.expect("Failed to create VideoInfo"); .expect("Failed to create VideoInfo");
assert_eq!(info.stride(), [1920, 1920]); assert_eq!(info.stride(), [1920, 1920]);
assert_eq!(info.offset(), [0, 2_073_600]); assert_eq!(info.offset(), [0, 2_073_600]);
let mut align = ::VideoAlignment::new(0, 0, 0, 8, &[0; VIDEO_MAX_PLANES]); let mut align = crate::VideoAlignment::new(0, 0, 0, 8, &[0; VIDEO_MAX_PLANES]);
assert!(info.align(&mut align)); assert!(info.align(&mut align));
assert_eq!(info.stride(), [1928, 1928]); assert_eq!(info.stride(), [1928, 1928]);
@ -1174,8 +1172,8 @@ mod tests {
gst::init().unwrap(); gst::init().unwrap();
format!("{}", ::VideoColorimetry::from_str("sRGB").unwrap()); format!("{}", crate::VideoColorimetry::from_str("sRGB").unwrap());
format!("{}", ::VideoFieldOrder::TopFieldFirst); format!("{}", crate::VideoFieldOrder::TopFieldFirst);
format!("{}", ::VideoInterlaceMode::Progressive); format!("{}", crate::VideoInterlaceMode::Progressive);
} }
} }

View file

@ -9,15 +9,11 @@
use std::fmt; use std::fmt;
use std::ptr; use std::ptr;
use glib;
use glib::translate::{from_glib, from_glib_none, FromGlib, ToGlib, ToGlibPtr}; use glib::translate::{from_glib, from_glib_none, FromGlib, ToGlib, ToGlibPtr};
use gst;
use gst::prelude::*; use gst::prelude::*;
use gst_sys;
use gst_video_sys;
#[repr(transparent)] #[repr(transparent)]
pub struct VideoMeta(gst_video_sys::GstVideoMeta); pub struct VideoMeta(ffi::GstVideoMeta);
unsafe impl Send for VideoMeta {} unsafe impl Send for VideoMeta {}
unsafe impl Sync for VideoMeta {} unsafe impl Sync for VideoMeta {}
@ -25,25 +21,28 @@ unsafe impl Sync for VideoMeta {}
impl VideoMeta { impl VideoMeta {
pub fn add( pub fn add(
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,
flags: ::VideoFrameFlags, flags: crate::VideoFrameFlags,
format: ::VideoFormat, format: crate::VideoFormat,
width: u32, width: u32,
height: u32, height: u32,
) -> Result<gst::MetaRefMut<Self, gst::meta::Standalone>, glib::BoolError> { ) -> Result<gst::MetaRefMut<Self, gst::meta::Standalone>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
if format == ::VideoFormat::Unknown || format == ::VideoFormat::Encoded { if format == crate::VideoFormat::Unknown || format == crate::VideoFormat::Encoded {
return Err(glib_bool_error!("Unsupported video format {}", format)); return Err(glib::glib_bool_error!(
"Unsupported video format {}",
format
));
} }
let info = ::VideoInfo::builder(format, width, height).build()?; let info = crate::VideoInfo::builder(format, width, height).build()?;
if !info.is_valid() { if !info.is_valid() {
return Err(glib_bool_error!("Invalid video info")); return Err(glib::glib_bool_error!("Invalid video info"));
} }
if buffer.get_size() < info.size() { if buffer.get_size() < info.size() {
return Err(glib_bool_error!( return Err(glib::glib_bool_error!(
"Buffer smaller than required frame size ({} < {})", "Buffer smaller than required frame size ({} < {})",
buffer.get_size(), buffer.get_size(),
info.size() info.size()
@ -51,7 +50,7 @@ impl VideoMeta {
} }
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_meta( let meta = ffi::gst_buffer_add_video_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
flags.to_glib(), flags.to_glib(),
format.to_glib(), format.to_glib(),
@ -60,7 +59,7 @@ impl VideoMeta {
); );
if meta.is_null() { if meta.is_null() {
return Err(glib_bool_error!("Failed to add video meta")); return Err(glib::glib_bool_error!("Failed to add video meta"));
} }
Ok(Self::from_mut_ptr(buffer, meta)) Ok(Self::from_mut_ptr(buffer, meta))
@ -69,8 +68,8 @@ impl VideoMeta {
pub fn add_full<'a>( pub fn add_full<'a>(
buffer: &'a mut gst::BufferRef, buffer: &'a mut gst::BufferRef,
flags: ::VideoFrameFlags, flags: crate::VideoFrameFlags,
format: ::VideoFormat, format: crate::VideoFormat,
width: u32, width: u32,
height: u32, height: u32,
offset: &[usize], offset: &[usize],
@ -78,22 +77,25 @@ impl VideoMeta {
) -> Result<gst::MetaRefMut<'a, Self, gst::meta::Standalone>, glib::BoolError> { ) -> Result<gst::MetaRefMut<'a, Self, gst::meta::Standalone>, glib::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
if format == ::VideoFormat::Unknown || format == ::VideoFormat::Encoded { if format == crate::VideoFormat::Unknown || format == crate::VideoFormat::Encoded {
return Err(glib_bool_error!("Unsupported video format {}", format)); return Err(glib::glib_bool_error!(
"Unsupported video format {}",
format
));
} }
let n_planes = offset.len() as u32; let n_planes = offset.len() as u32;
let info = ::VideoInfo::builder(format, width, height) let info = crate::VideoInfo::builder(format, width, height)
.offset(offset) .offset(offset)
.stride(stride) .stride(stride)
.build()?; .build()?;
if !info.is_valid() { if !info.is_valid() {
return Err(glib_bool_error!("Invalid video info")); return Err(glib::glib_bool_error!("Invalid video info"));
} }
if buffer.get_size() < info.size() { if buffer.get_size() < info.size() {
return Err(glib_bool_error!( return Err(glib::glib_bool_error!(
"Buffer smaller than required frame size ({} < {})", "Buffer smaller than required frame size ({} < {})",
buffer.get_size(), buffer.get_size(),
info.size() info.size()
@ -101,7 +103,7 @@ impl VideoMeta {
} }
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_meta_full( let meta = ffi::gst_buffer_add_video_meta_full(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
flags.to_glib(), flags.to_glib(),
format.to_glib(), format.to_glib(),
@ -113,18 +115,18 @@ impl VideoMeta {
); );
if meta.is_null() { if meta.is_null() {
return Err(glib_bool_error!("Failed to add video meta")); return Err(glib::glib_bool_error!("Failed to add video meta"));
} }
Ok(Self::from_mut_ptr(buffer, meta)) Ok(Self::from_mut_ptr(buffer, meta))
} }
} }
pub fn get_flags(&self) -> ::VideoFrameFlags { pub fn get_flags(&self) -> crate::VideoFrameFlags {
from_glib(self.0.flags) from_glib(self.0.flags)
} }
pub fn get_format(&self) -> ::VideoFormat { pub fn get_format(&self) -> crate::VideoFormat {
from_glib(self.0.format) from_glib(self.0.format)
} }
@ -154,10 +156,10 @@ impl VideoMeta {
} }
unsafe impl MetaAPI for VideoMeta { unsafe impl MetaAPI for VideoMeta {
type GstType = gst_video_sys::GstVideoMeta; type GstType = ffi::GstVideoMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_meta_api_get_type()) }
} }
} }
@ -177,7 +179,7 @@ impl fmt::Debug for VideoMeta {
} }
#[repr(transparent)] #[repr(transparent)]
pub struct VideoCropMeta(gst_video_sys::GstVideoCropMeta); pub struct VideoCropMeta(ffi::GstVideoCropMeta);
unsafe impl Send for VideoCropMeta {} unsafe impl Send for VideoCropMeta {}
unsafe impl Sync for VideoCropMeta {} unsafe impl Sync for VideoCropMeta {}
@ -189,11 +191,11 @@ impl VideoCropMeta {
) -> gst::MetaRefMut<Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_sys::gst_buffer_add_meta( let meta = gst::ffi::gst_buffer_add_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
gst_video_sys::gst_video_crop_meta_get_info(), ffi::gst_video_crop_meta_get_info(),
ptr::null_mut(), ptr::null_mut(),
) as *mut gst_video_sys::GstVideoCropMeta; ) as *mut ffi::GstVideoCropMeta;
{ {
let meta = &mut *meta; let meta = &mut *meta;
@ -220,10 +222,10 @@ impl VideoCropMeta {
} }
unsafe impl MetaAPI for VideoCropMeta { unsafe impl MetaAPI for VideoCropMeta {
type GstType = gst_video_sys::GstVideoCropMeta; type GstType = ffi::GstVideoCropMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_crop_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_crop_meta_api_get_type()) }
} }
} }
@ -236,7 +238,7 @@ impl fmt::Debug for VideoCropMeta {
} }
#[repr(transparent)] #[repr(transparent)]
pub struct VideoRegionOfInterestMeta(gst_video_sys::GstVideoRegionOfInterestMeta); pub struct VideoRegionOfInterestMeta(ffi::GstVideoRegionOfInterestMeta);
unsafe impl Send for VideoRegionOfInterestMeta {} unsafe impl Send for VideoRegionOfInterestMeta {}
unsafe impl Sync for VideoRegionOfInterestMeta {} unsafe impl Sync for VideoRegionOfInterestMeta {}
@ -249,7 +251,7 @@ impl VideoRegionOfInterestMeta {
) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_region_of_interest_meta( let meta = ffi::gst_buffer_add_video_region_of_interest_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
roi_type.to_glib_none().0, roi_type.to_glib_none().0,
rect.0, rect.0,
@ -309,7 +311,7 @@ impl VideoRegionOfInterestMeta {
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
pub fn add_param(&mut self, s: gst::Structure) { pub fn add_param(&mut self, s: gst::Structure) {
unsafe { unsafe {
gst_video_sys::gst_video_region_of_interest_meta_add_param(&mut self.0, s.into_ptr()); ffi::gst_video_region_of_interest_meta_add_param(&mut self.0, s.into_ptr());
} }
} }
} }
@ -317,7 +319,7 @@ impl VideoRegionOfInterestMeta {
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
pub struct ParamsIter<'a> { pub struct ParamsIter<'a> {
_meta: &'a VideoRegionOfInterestMeta, _meta: &'a VideoRegionOfInterestMeta,
list: *const glib_sys::GList, list: *const glib::ffi::GList,
} }
#[cfg(feature = "v1_14")] #[cfg(feature = "v1_14")]
@ -334,7 +336,7 @@ impl<'a> Iterator for ParamsIter<'a> {
assert!(!data.is_null()); assert!(!data.is_null());
self.list = (*self.list).next; self.list = (*self.list).next;
let s = gst::StructureRef::from_glib_borrow(data as *const gst_sys::GstStructure); let s = gst::StructureRef::from_glib_borrow(data as *const gst::ffi::GstStructure);
Some(s) Some(s)
} }
@ -342,10 +344,10 @@ impl<'a> Iterator for ParamsIter<'a> {
} }
unsafe impl MetaAPI for VideoRegionOfInterestMeta { unsafe impl MetaAPI for VideoRegionOfInterestMeta {
type GstType = gst_video_sys::GstVideoRegionOfInterestMeta; type GstType = ffi::GstVideoRegionOfInterestMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_region_of_interest_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_region_of_interest_meta_api_get_type()) }
} }
} }
@ -368,7 +370,7 @@ impl fmt::Debug for VideoRegionOfInterestMeta {
} }
#[repr(transparent)] #[repr(transparent)]
pub struct VideoAffineTransformationMeta(gst_video_sys::GstVideoAffineTransformationMeta); pub struct VideoAffineTransformationMeta(ffi::GstVideoAffineTransformationMeta);
unsafe impl Send for VideoAffineTransformationMeta {} unsafe impl Send for VideoAffineTransformationMeta {}
unsafe impl Sync for VideoAffineTransformationMeta {} unsafe impl Sync for VideoAffineTransformationMeta {}
@ -380,11 +382,11 @@ impl VideoAffineTransformationMeta {
) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_sys::gst_buffer_add_meta( let meta = gst::ffi::gst_buffer_add_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
gst_video_sys::gst_video_affine_transformation_meta_get_info(), ffi::gst_video_affine_transformation_meta_get_info(),
ptr::null_mut(), ptr::null_mut(),
) as *mut gst_video_sys::GstVideoAffineTransformationMeta; ) as *mut ffi::GstVideoAffineTransformationMeta;
if let Some(matrix) = matrix { if let Some(matrix) = matrix {
let meta = &mut *meta; let meta = &mut *meta;
@ -405,16 +407,16 @@ impl VideoAffineTransformationMeta {
pub fn apply_matrix(&mut self, matrix: &[f32; 16]) { pub fn apply_matrix(&mut self, matrix: &[f32; 16]) {
unsafe { unsafe {
gst_video_sys::gst_video_affine_transformation_meta_apply_matrix(&mut self.0, matrix); ffi::gst_video_affine_transformation_meta_apply_matrix(&mut self.0, matrix);
} }
} }
} }
unsafe impl MetaAPI for VideoAffineTransformationMeta { unsafe impl MetaAPI for VideoAffineTransformationMeta {
type GstType = gst_video_sys::GstVideoAffineTransformationMeta; type GstType = ffi::GstVideoAffineTransformationMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_affine_transformation_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_affine_transformation_meta_api_get_type()) }
} }
} }
@ -427,7 +429,7 @@ impl fmt::Debug for VideoAffineTransformationMeta {
} }
#[repr(transparent)] #[repr(transparent)]
pub struct VideoOverlayCompositionMeta(gst_video_sys::GstVideoOverlayCompositionMeta); pub struct VideoOverlayCompositionMeta(ffi::GstVideoOverlayCompositionMeta);
unsafe impl Send for VideoOverlayCompositionMeta {} unsafe impl Send for VideoOverlayCompositionMeta {}
unsafe impl Sync for VideoOverlayCompositionMeta {} unsafe impl Sync for VideoOverlayCompositionMeta {}
@ -435,11 +437,11 @@ unsafe impl Sync for VideoOverlayCompositionMeta {}
impl VideoOverlayCompositionMeta { impl VideoOverlayCompositionMeta {
pub fn add<'a>( pub fn add<'a>(
buffer: &'a mut gst::BufferRef, buffer: &'a mut gst::BufferRef,
overlay: &::VideoOverlayComposition, overlay: &crate::VideoOverlayComposition,
) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_overlay_composition_meta( let meta = ffi::gst_buffer_add_video_overlay_composition_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
overlay.as_mut_ptr(), overlay.as_mut_ptr(),
); );
@ -448,28 +450,29 @@ impl VideoOverlayCompositionMeta {
} }
} }
pub fn get_overlay(&self) -> &::VideoOverlayCompositionRef { pub fn get_overlay(&self) -> &crate::VideoOverlayCompositionRef {
unsafe { ::VideoOverlayCompositionRef::from_ptr(self.0.overlay) } unsafe { crate::VideoOverlayCompositionRef::from_ptr(self.0.overlay) }
} }
pub fn get_overlay_owned(&self) -> ::VideoOverlayComposition { pub fn get_overlay_owned(&self) -> crate::VideoOverlayComposition {
unsafe { from_glib_none(self.get_overlay().as_ptr()) } unsafe { from_glib_none(self.get_overlay().as_ptr()) }
} }
pub fn set_overlay(&mut self, overlay: &::VideoOverlayComposition) { pub fn set_overlay(&mut self, overlay: &crate::VideoOverlayComposition) {
#![allow(clippy::cast_ptr_alignment)] #![allow(clippy::cast_ptr_alignment)]
unsafe { unsafe {
gst_sys::gst_mini_object_unref(self.0.overlay as *mut _); gst::ffi::gst_mini_object_unref(self.0.overlay as *mut _);
self.0.overlay = gst_sys::gst_mini_object_ref(overlay.as_mut_ptr() as *mut _) as *mut _; self.0.overlay =
gst::ffi::gst_mini_object_ref(overlay.as_mut_ptr() as *mut _) as *mut _;
} }
} }
} }
unsafe impl MetaAPI for VideoOverlayCompositionMeta { unsafe impl MetaAPI for VideoOverlayCompositionMeta {
type GstType = gst_video_sys::GstVideoOverlayCompositionMeta; type GstType = ffi::GstVideoOverlayCompositionMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_overlay_composition_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_overlay_composition_meta_api_get_type()) }
} }
} }
@ -484,7 +487,7 @@ impl fmt::Debug for VideoOverlayCompositionMeta {
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
#[repr(transparent)] #[repr(transparent)]
pub struct VideoCaptionMeta(gst_video_sys::GstVideoCaptionMeta); pub struct VideoCaptionMeta(ffi::GstVideoCaptionMeta);
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
@ -498,13 +501,13 @@ unsafe impl Sync for VideoCaptionMeta {}
impl VideoCaptionMeta { impl VideoCaptionMeta {
pub fn add<'a>( pub fn add<'a>(
buffer: &'a mut gst::BufferRef, buffer: &'a mut gst::BufferRef,
caption_type: ::VideoCaptionType, caption_type: crate::VideoCaptionType,
data: &[u8], data: &[u8],
) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
assert!(!data.is_empty()); assert!(!data.is_empty());
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_caption_meta( let meta = ffi::gst_buffer_add_video_caption_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
caption_type.to_glib(), caption_type.to_glib(),
data.as_ptr(), data.as_ptr(),
@ -515,7 +518,7 @@ impl VideoCaptionMeta {
} }
} }
pub fn get_caption_type(&self) -> ::VideoCaptionType { pub fn get_caption_type(&self) -> crate::VideoCaptionType {
from_glib(self.0.caption_type) from_glib(self.0.caption_type)
} }
@ -531,10 +534,10 @@ impl VideoCaptionMeta {
#[cfg(any(feature = "v1_16", feature = "dox"))] #[cfg(any(feature = "v1_16", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_16")))]
unsafe impl MetaAPI for VideoCaptionMeta { unsafe impl MetaAPI for VideoCaptionMeta {
type GstType = gst_video_sys::GstVideoCaptionMeta; type GstType = ffi::GstVideoCaptionMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_caption_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_caption_meta_api_get_type()) }
} }
} }
@ -552,7 +555,7 @@ impl fmt::Debug for VideoCaptionMeta {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
#[repr(transparent)] #[repr(transparent)]
pub struct VideoAFDMeta(gst_video_sys::GstVideoAFDMeta); pub struct VideoAFDMeta(ffi::GstVideoAFDMeta);
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
@ -567,13 +570,13 @@ impl VideoAFDMeta {
pub fn add( pub fn add(
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,
field: u8, field: u8,
spec: ::VideoAFDSpec, spec: crate::VideoAFDSpec,
afd: ::VideoAFDValue, afd: crate::VideoAFDValue,
) -> gst::MetaRefMut<Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_afd_meta( let meta = ffi::gst_buffer_add_video_afd_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
field, field,
spec.to_glib(), spec.to_glib(),
@ -588,11 +591,11 @@ impl VideoAFDMeta {
self.0.field self.0.field
} }
pub fn get_spec(&self) -> ::VideoAFDSpec { pub fn get_spec(&self) -> crate::VideoAFDSpec {
from_glib(self.0.spec) from_glib(self.0.spec)
} }
pub fn get_afd(&self) -> ::VideoAFDValue { pub fn get_afd(&self) -> crate::VideoAFDValue {
from_glib(self.0.afd) from_glib(self.0.afd)
} }
} }
@ -600,10 +603,10 @@ impl VideoAFDMeta {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
unsafe impl MetaAPI for VideoAFDMeta { unsafe impl MetaAPI for VideoAFDMeta {
type GstType = gst_video_sys::GstVideoAFDMeta; type GstType = ffi::GstVideoAFDMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_afd_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_afd_meta_api_get_type()) }
} }
} }
@ -622,7 +625,7 @@ impl fmt::Debug for VideoAFDMeta {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
#[repr(transparent)] #[repr(transparent)]
pub struct VideoBarMeta(gst_video_sys::GstVideoBarMeta); pub struct VideoBarMeta(ffi::GstVideoBarMeta);
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
@ -644,7 +647,7 @@ impl VideoBarMeta {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_bar_meta( let meta = ffi::gst_buffer_add_video_bar_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
field, field,
is_letterbox.to_glib(), is_letterbox.to_glib(),
@ -676,10 +679,10 @@ impl VideoBarMeta {
#[cfg(any(feature = "v1_18", feature = "dox"))] #[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
unsafe impl MetaAPI for VideoBarMeta { unsafe impl MetaAPI for VideoBarMeta {
type GstType = gst_video_sys::GstVideoBarMeta; type GstType = ffi::GstVideoBarMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_bar_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_bar_meta_api_get_type()) }
} }
} }
@ -708,15 +711,15 @@ mod tests {
{ {
let meta = VideoMeta::add( let meta = VideoMeta::add(
buffer.get_mut().unwrap(), buffer.get_mut().unwrap(),
::VideoFrameFlags::empty(), crate::VideoFrameFlags::empty(),
::VideoFormat::Argb, crate::VideoFormat::Argb,
320, 320,
240, 240,
) )
.unwrap(); .unwrap();
assert_eq!(meta.get_id(), 0); assert_eq!(meta.get_id(), 0);
assert_eq!(meta.get_flags(), ::VideoFrameFlags::empty()); assert_eq!(meta.get_flags(), crate::VideoFrameFlags::empty());
assert_eq!(meta.get_format(), ::VideoFormat::Argb); assert_eq!(meta.get_format(), crate::VideoFormat::Argb);
assert_eq!(meta.get_width(), 320); assert_eq!(meta.get_width(), 320);
assert_eq!(meta.get_height(), 240); assert_eq!(meta.get_height(), 240);
assert_eq!(meta.get_n_planes(), 1); assert_eq!(meta.get_n_planes(), 1);
@ -727,8 +730,8 @@ mod tests {
{ {
let meta = buffer.get_meta::<VideoMeta>().unwrap(); let meta = buffer.get_meta::<VideoMeta>().unwrap();
assert_eq!(meta.get_id(), 0); assert_eq!(meta.get_id(), 0);
assert_eq!(meta.get_flags(), ::VideoFrameFlags::empty()); assert_eq!(meta.get_flags(), crate::VideoFrameFlags::empty());
assert_eq!(meta.get_format(), ::VideoFormat::Argb); assert_eq!(meta.get_format(), crate::VideoFormat::Argb);
assert_eq!(meta.get_width(), 320); assert_eq!(meta.get_width(), 320);
assert_eq!(meta.get_height(), 240); assert_eq!(meta.get_height(), 240);
assert_eq!(meta.get_n_planes(), 1); assert_eq!(meta.get_n_planes(), 1);
@ -745,8 +748,8 @@ mod tests {
{ {
let meta = VideoMeta::add_full( let meta = VideoMeta::add_full(
buffer.get_mut().unwrap(), buffer.get_mut().unwrap(),
::VideoFrameFlags::empty(), crate::VideoFrameFlags::empty(),
::VideoFormat::Argb, crate::VideoFormat::Argb,
320, 320,
240, 240,
&[0], &[0],
@ -754,8 +757,8 @@ mod tests {
) )
.unwrap(); .unwrap();
assert_eq!(meta.get_id(), 0); assert_eq!(meta.get_id(), 0);
assert_eq!(meta.get_flags(), ::VideoFrameFlags::empty()); assert_eq!(meta.get_flags(), crate::VideoFrameFlags::empty());
assert_eq!(meta.get_format(), ::VideoFormat::Argb); assert_eq!(meta.get_format(), crate::VideoFormat::Argb);
assert_eq!(meta.get_width(), 320); assert_eq!(meta.get_width(), 320);
assert_eq!(meta.get_height(), 240); assert_eq!(meta.get_height(), 240);
assert_eq!(meta.get_n_planes(), 1); assert_eq!(meta.get_n_planes(), 1);
@ -766,8 +769,8 @@ mod tests {
{ {
let meta = buffer.get_meta::<VideoMeta>().unwrap(); let meta = buffer.get_meta::<VideoMeta>().unwrap();
assert_eq!(meta.get_id(), 0); assert_eq!(meta.get_id(), 0);
assert_eq!(meta.get_flags(), ::VideoFrameFlags::empty()); assert_eq!(meta.get_flags(), crate::VideoFrameFlags::empty());
assert_eq!(meta.get_format(), ::VideoFormat::Argb); assert_eq!(meta.get_format(), crate::VideoFormat::Argb);
assert_eq!(meta.get_width(), 320); assert_eq!(meta.get_width(), 320);
assert_eq!(meta.get_height(), 240); assert_eq!(meta.get_height(), 240);
assert_eq!(meta.get_n_planes(), 1); assert_eq!(meta.get_n_planes(), 1);

View file

@ -6,11 +6,9 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use crate::VideoOverlay;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_video_sys;
use libc::uintptr_t; use libc::uintptr_t;
use VideoOverlay;
use glib::IsA; use glib::IsA;
@ -21,19 +19,19 @@ pub trait VideoOverlayExtManual: 'static {
impl<O: IsA<VideoOverlay>> VideoOverlayExtManual for O { impl<O: IsA<VideoOverlay>> VideoOverlayExtManual for O {
unsafe fn set_window_handle(&self, handle: uintptr_t) { unsafe fn set_window_handle(&self, handle: uintptr_t) {
gst_video_sys::gst_video_overlay_set_window_handle(self.as_ref().to_glib_none().0, handle) ffi::gst_video_overlay_set_window_handle(self.as_ref().to_glib_none().0, handle)
} }
unsafe fn got_window_handle(&self, handle: uintptr_t) { unsafe fn got_window_handle(&self, handle: uintptr_t) {
gst_video_sys::gst_video_overlay_got_window_handle(self.as_ref().to_glib_none().0, handle) ffi::gst_video_overlay_got_window_handle(self.as_ref().to_glib_none().0, handle)
} }
} }
pub fn is_video_overlay_prepare_window_handle_message(msg: &gst::MessageRef) -> bool { pub fn is_video_overlay_prepare_window_handle_message(msg: &gst::MessageRef) -> bool {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
from_glib( from_glib(ffi::gst_is_video_overlay_prepare_window_handle_message(
gst_video_sys::gst_is_video_overlay_prepare_window_handle_message(msg.as_mut_ptr()), msg.as_mut_ptr(),
) ))
} }
} }

View file

@ -9,17 +9,13 @@
use std::fmt; use std::fmt;
use std::mem; use std::mem;
use gst;
use gst_video_sys;
use glib;
use glib::translate::{from_glib, from_glib_full, from_glib_none, ToGlib, ToGlibPtr}; use glib::translate::{from_glib, from_glib_full, from_glib_none, ToGlib, ToGlibPtr};
gst_define_mini_object_wrapper!( gst::gst_define_mini_object_wrapper!(
VideoOverlayRectangle, VideoOverlayRectangle,
VideoOverlayRectangleRef, VideoOverlayRectangleRef,
gst_video_sys::GstVideoOverlayRectangle, ffi::GstVideoOverlayRectangle,
|| gst_video_sys::gst_video_overlay_rectangle_get_type() || ffi::gst_video_overlay_rectangle_get_type()
); );
impl fmt::Debug for VideoOverlayRectangle { impl fmt::Debug for VideoOverlayRectangle {
@ -45,12 +41,12 @@ impl VideoOverlayRectangle {
render_y: i32, render_y: i32,
render_width: u32, render_width: u32,
render_height: u32, render_height: u32,
flags: ::VideoOverlayFormatFlags, flags: crate::VideoOverlayFormatFlags,
) -> Self { ) -> Self {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
assert!(buffer.get_meta::<::VideoMeta>().is_some()); assert!(buffer.get_meta::<crate::VideoMeta>().is_some());
unsafe { unsafe {
from_glib_full(gst_video_sys::gst_video_overlay_rectangle_new_raw( from_glib_full(ffi::gst_video_overlay_rectangle_new_raw(
buffer.to_glib_none().0, buffer.to_glib_none().0,
render_x, render_x,
render_y, render_y,
@ -63,26 +59,24 @@ impl VideoOverlayRectangle {
} }
impl VideoOverlayRectangleRef { impl VideoOverlayRectangleRef {
pub fn get_flags(&self) -> ::VideoOverlayFormatFlags { pub fn get_flags(&self) -> crate::VideoOverlayFormatFlags {
unsafe { unsafe {
from_glib(gst_video_sys::gst_video_overlay_rectangle_get_flags( from_glib(ffi::gst_video_overlay_rectangle_get_flags(
self.as_mut_ptr(), self.as_mut_ptr(),
)) ))
} }
} }
pub fn get_global_alpha(&self) -> f32 { pub fn get_global_alpha(&self) -> f32 {
unsafe { gst_video_sys::gst_video_overlay_rectangle_get_global_alpha(self.as_mut_ptr()) } unsafe { ffi::gst_video_overlay_rectangle_get_global_alpha(self.as_mut_ptr()) }
} }
pub fn set_global_alpha(&mut self, alpha: f32) { pub fn set_global_alpha(&mut self, alpha: f32) {
unsafe { unsafe { ffi::gst_video_overlay_rectangle_set_global_alpha(self.as_mut_ptr(), alpha) }
gst_video_sys::gst_video_overlay_rectangle_set_global_alpha(self.as_mut_ptr(), alpha)
}
} }
pub fn get_seqnum(&self) -> u32 { pub fn get_seqnum(&self) -> u32 {
unsafe { gst_video_sys::gst_video_overlay_rectangle_get_seqnum(self.as_mut_ptr()) } unsafe { ffi::gst_video_overlay_rectangle_get_seqnum(self.as_mut_ptr()) }
} }
pub fn get_render_rectangle(&self) -> (i32, i32, u32, u32) { pub fn get_render_rectangle(&self) -> (i32, i32, u32, u32) {
@ -92,7 +86,7 @@ impl VideoOverlayRectangleRef {
let mut render_width = mem::MaybeUninit::uninit(); let mut render_width = mem::MaybeUninit::uninit();
let mut render_height = mem::MaybeUninit::uninit(); let mut render_height = mem::MaybeUninit::uninit();
gst_video_sys::gst_video_overlay_rectangle_get_render_rectangle( ffi::gst_video_overlay_rectangle_get_render_rectangle(
self.as_mut_ptr(), self.as_mut_ptr(),
render_x.as_mut_ptr(), render_x.as_mut_ptr(),
render_y.as_mut_ptr(), render_y.as_mut_ptr(),
@ -117,7 +111,7 @@ impl VideoOverlayRectangleRef {
render_height: u32, render_height: u32,
) { ) {
unsafe { unsafe {
gst_video_sys::gst_video_overlay_rectangle_set_render_rectangle( ffi::gst_video_overlay_rectangle_set_render_rectangle(
self.as_mut_ptr(), self.as_mut_ptr(),
render_x, render_x,
render_y, render_y,
@ -127,60 +121,54 @@ impl VideoOverlayRectangleRef {
} }
} }
pub fn get_pixels_unscaled_raw(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer { pub fn get_pixels_unscaled_raw(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe { unsafe {
from_glib_none( from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_unscaled_raw(
gst_video_sys::gst_video_overlay_rectangle_get_pixels_unscaled_raw(
self.as_mut_ptr(),
flags.to_glib(),
),
)
}
}
pub fn get_pixels_unscaled_ayuv(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(
gst_video_sys::gst_video_overlay_rectangle_get_pixels_unscaled_ayuv(
self.as_mut_ptr(),
flags.to_glib(),
),
)
}
}
pub fn get_pixels_unscaled_argb(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(
gst_video_sys::gst_video_overlay_rectangle_get_pixels_unscaled_argb(
self.as_mut_ptr(),
flags.to_glib(),
),
)
}
}
pub fn get_pixels_raw(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(gst_video_sys::gst_video_overlay_rectangle_get_pixels_raw(
self.as_mut_ptr(), self.as_mut_ptr(),
flags.to_glib(), flags.to_glib(),
)) ))
} }
} }
pub fn get_pixels_ayuv(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer { pub fn get_pixels_unscaled_ayuv(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe { unsafe {
from_glib_none(gst_video_sys::gst_video_overlay_rectangle_get_pixels_ayuv( from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_unscaled_ayuv(
self.as_mut_ptr(), self.as_mut_ptr(),
flags.to_glib(), flags.to_glib(),
)) ))
} }
} }
pub fn get_pixels_argb(&self, flags: ::VideoOverlayFormatFlags) -> gst::Buffer { pub fn get_pixels_unscaled_argb(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe { unsafe {
from_glib_none(gst_video_sys::gst_video_overlay_rectangle_get_pixels_argb( from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_unscaled_argb(
self.as_mut_ptr(),
flags.to_glib(),
))
}
}
pub fn get_pixels_raw(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_raw(
self.as_mut_ptr(),
flags.to_glib(),
))
}
}
pub fn get_pixels_ayuv(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_ayuv(
self.as_mut_ptr(),
flags.to_glib(),
))
}
}
pub fn get_pixels_argb(&self, flags: crate::VideoOverlayFormatFlags) -> gst::Buffer {
unsafe {
from_glib_none(ffi::gst_video_overlay_rectangle_get_pixels_argb(
self.as_mut_ptr(), self.as_mut_ptr(),
flags.to_glib(), flags.to_glib(),
)) ))
@ -188,11 +176,11 @@ impl VideoOverlayRectangleRef {
} }
} }
gst_define_mini_object_wrapper!( gst::gst_define_mini_object_wrapper!(
VideoOverlayComposition, VideoOverlayComposition,
VideoOverlayCompositionRef, VideoOverlayCompositionRef,
gst_video_sys::GstVideoOverlayComposition, ffi::GstVideoOverlayComposition,
|| gst_video_sys::gst_video_overlay_composition_get_type() || ffi::gst_video_overlay_composition_get_type()
); );
impl fmt::Debug for VideoOverlayComposition { impl fmt::Debug for VideoOverlayComposition {
@ -216,16 +204,19 @@ impl VideoOverlayComposition {
let mut iter = rects.into_iter(); let mut iter = rects.into_iter();
let first = match iter.next() { let first = match iter.next() {
None => return Err(glib_bool_error!("Failed to create VideoOverlayComposition")), None => {
return Err(glib::glib_bool_error!(
"Failed to create VideoOverlayComposition"
))
}
Some(first) => first, Some(first) => first,
}; };
let composition = Self::from_glib_full( let composition =
gst_video_sys::gst_video_overlay_composition_new(first.as_mut_ptr()), Self::from_glib_full(ffi::gst_video_overlay_composition_new(first.as_mut_ptr()));
);
for rect in iter { for rect in iter {
gst_video_sys::gst_video_overlay_composition_add_rectangle( ffi::gst_video_overlay_composition_add_rectangle(
composition.as_mut_ptr(), composition.as_mut_ptr(),
rect.as_mut_ptr(), rect.as_mut_ptr(),
); );
@ -238,39 +229,36 @@ impl VideoOverlayComposition {
impl VideoOverlayCompositionRef { impl VideoOverlayCompositionRef {
pub fn n_rectangles(&self) -> u32 { pub fn n_rectangles(&self) -> u32 {
unsafe { gst_video_sys::gst_video_overlay_composition_n_rectangles(self.as_mut_ptr()) } unsafe { ffi::gst_video_overlay_composition_n_rectangles(self.as_mut_ptr()) }
} }
pub fn get_rectangle(&self, idx: u32) -> Result<VideoOverlayRectangle, glib::error::BoolError> { pub fn get_rectangle(&self, idx: u32) -> Result<VideoOverlayRectangle, glib::error::BoolError> {
if idx >= self.n_rectangles() { if idx >= self.n_rectangles() {
return Err(glib_bool_error!("Invalid index")); return Err(glib::glib_bool_error!("Invalid index"));
} }
unsafe { unsafe {
match from_glib_none(gst_video_sys::gst_video_overlay_composition_get_rectangle( match from_glib_none(ffi::gst_video_overlay_composition_get_rectangle(
self.as_mut_ptr(), self.as_mut_ptr(),
idx, idx,
)) { )) {
Some(r) => Ok(r), Some(r) => Ok(r),
None => Err(glib_bool_error!("Failed to get rectangle")), None => Err(glib::glib_bool_error!("Failed to get rectangle")),
} }
} }
} }
pub fn get_seqnum(&self) -> u32 { pub fn get_seqnum(&self) -> u32 {
unsafe { gst_video_sys::gst_video_overlay_composition_get_seqnum(self.as_mut_ptr()) } unsafe { ffi::gst_video_overlay_composition_get_seqnum(self.as_mut_ptr()) }
} }
pub fn blend( pub fn blend(
&self, &self,
frame: &mut ::VideoFrameRef<&mut gst::BufferRef>, frame: &mut crate::VideoFrameRef<&mut gst::BufferRef>,
) -> Result<(), glib::BoolError> { ) -> Result<(), glib::BoolError> {
unsafe { unsafe {
glib_result_from_gboolean!( glib::glib_result_from_gboolean!(
gst_video_sys::gst_video_overlay_composition_blend( ffi::gst_video_overlay_composition_blend(self.as_mut_ptr(), frame.as_mut_ptr()),
self.as_mut_ptr(),
frame.as_mut_ptr()
),
"Failed to blend overlay composition", "Failed to blend overlay composition",
) )
} }

View file

@ -7,7 +7,6 @@
// except according to those terms. // except according to those terms.
use glib::translate::ToGlib; use glib::translate::ToGlib;
use gst_video_sys;
#[derive(Clone, Debug, Eq, PartialEq, Hash)] #[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub struct VideoRectangle { pub struct VideoRectangle {
@ -30,26 +29,26 @@ pub fn center_video_rectangle(
scale: bool, scale: bool,
) -> VideoRectangle { ) -> VideoRectangle {
skip_assert_initialized!(); skip_assert_initialized!();
let mut result = gst_video_sys::GstVideoRectangle { let mut result = ffi::GstVideoRectangle {
x: 0, x: 0,
y: 0, y: 0,
w: 0, w: 0,
h: 0, h: 0,
}; };
let src_rect = gst_video_sys::GstVideoRectangle { let src_rect = ffi::GstVideoRectangle {
x: src.x, x: src.x,
y: src.y, y: src.y,
w: src.w, w: src.w,
h: src.h, h: src.h,
}; };
let dst_rect = gst_video_sys::GstVideoRectangle { let dst_rect = ffi::GstVideoRectangle {
x: dst.x, x: dst.x,
y: dst.y, y: dst.y,
w: dst.w, w: dst.w,
h: dst.h, h: dst.h,
}; };
unsafe { unsafe {
gst_video_sys::gst_video_sink_center_rect(src_rect, dst_rect, &mut result, scale.to_glib()); ffi::gst_video_sink_center_rect(src_rect, dst_rect, &mut result, scale.to_glib());
} }
VideoRectangle::new(result.x, result.y, result.w, result.h) VideoRectangle::new(result.x, result.y, result.w, result.h)
} }

View file

@ -6,15 +6,10 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib;
use glib::prelude::*; use glib::prelude::*;
use glib::translate::*; use glib::translate::*;
use glib::value; use glib::value;
use glib_sys;
use gobject_sys;
use gst;
use gst::prelude::*; use gst::prelude::*;
use gst_video_sys;
use std::cmp; use std::cmp;
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use std::fmt; use std::fmt;
@ -24,20 +19,20 @@ use std::ptr;
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
use std::str; use std::str;
use VideoTimeCodeFlags; use crate::VideoTimeCodeFlags;
#[cfg(any(feature = "v1_12", feature = "dox"))] #[cfg(any(feature = "v1_12", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_12")))]
use VideoTimeCodeInterval; use crate::VideoTimeCodeInterval;
pub struct VideoTimeCode(gst_video_sys::GstVideoTimeCode); pub struct VideoTimeCode(ffi::GstVideoTimeCode);
pub struct ValidVideoTimeCode(gst_video_sys::GstVideoTimeCode); pub struct ValidVideoTimeCode(ffi::GstVideoTimeCode);
impl VideoTimeCode { impl VideoTimeCode {
pub fn new_empty() -> VideoTimeCode { pub fn new_empty() -> VideoTimeCode {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let mut v = mem::MaybeUninit::zeroed(); let mut v = mem::MaybeUninit::zeroed();
gst_video_sys::gst_video_time_code_clear(v.as_mut_ptr()); ffi::gst_video_time_code_clear(v.as_mut_ptr());
VideoTimeCode(v.assume_init()) VideoTimeCode(v.assume_init())
} }
} }
@ -56,7 +51,7 @@ impl VideoTimeCode {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let mut v = mem::MaybeUninit::zeroed(); let mut v = mem::MaybeUninit::zeroed();
gst_video_sys::gst_video_time_code_init( ffi::gst_video_time_code_init(
v.as_mut_ptr(), v.as_mut_ptr(),
*fps.numer() as u32, *fps.numer() as u32,
*fps.denom() as u32, *fps.denom() as u32,
@ -85,7 +80,7 @@ impl VideoTimeCode {
assert!(*fps.denom() > 0); assert!(*fps.denom() > 0);
unsafe { unsafe {
let mut v = mem::MaybeUninit::zeroed(); let mut v = mem::MaybeUninit::zeroed();
let res = gst_video_sys::gst_video_time_code_init_from_date_time_full( let res = ffi::gst_video_time_code_init_from_date_time_full(
v.as_mut_ptr(), v.as_mut_ptr(),
*fps.numer() as u32, *fps.numer() as u32,
*fps.denom() as u32, *fps.denom() as u32,
@ -94,8 +89,8 @@ impl VideoTimeCode {
field_count, field_count,
); );
if res == glib_sys::GFALSE { if res == glib::ffi::GFALSE {
Err(glib_bool_error!("Failed to init video time code")) Err(glib::glib_bool_error!("Failed to init video time code"))
} else { } else {
Ok(VideoTimeCode(v.assume_init())) Ok(VideoTimeCode(v.assume_init()))
} }
@ -103,11 +98,7 @@ impl VideoTimeCode {
} }
pub fn is_valid(&self) -> bool { pub fn is_valid(&self) -> bool {
unsafe { unsafe { from_glib(ffi::gst_video_time_code_is_valid(self.to_glib_none().0)) }
from_glib(gst_video_sys::gst_video_time_code_is_valid(
self.to_glib_none().0,
))
}
} }
pub fn set_fps(&mut self, fps: gst::Fraction) { pub fn set_fps(&mut self, fps: gst::Fraction) {
@ -181,7 +172,9 @@ impl ValidVideoTimeCode {
); );
match tc.try_into() { match tc.try_into() {
Ok(v) => Ok(v), Ok(v) => Ok(v),
Err(_) => Err(glib_bool_error!("Failed to create new ValidVideoTimeCode")), Err(_) => Err(glib::glib_bool_error!(
"Failed to create new ValidVideoTimeCode"
)),
} }
} }
@ -200,7 +193,7 @@ impl ValidVideoTimeCode {
pub fn add_frames(&mut self, frames: i64) { pub fn add_frames(&mut self, frames: i64) {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
gst_video_sys::gst_video_time_code_add_frames(self.to_glib_none_mut().0, frames); ffi::gst_video_time_code_add_frames(self.to_glib_none_mut().0, frames);
} }
} }
@ -211,43 +204,39 @@ impl ValidVideoTimeCode {
tc_inter: &VideoTimeCodeInterval, tc_inter: &VideoTimeCodeInterval,
) -> Result<ValidVideoTimeCode, glib::error::BoolError> { ) -> Result<ValidVideoTimeCode, glib::error::BoolError> {
unsafe { unsafe {
match from_glib_full(gst_video_sys::gst_video_time_code_add_interval( match from_glib_full(ffi::gst_video_time_code_add_interval(
self.to_glib_none().0, self.to_glib_none().0,
tc_inter.to_glib_none().0, tc_inter.to_glib_none().0,
)) { )) {
Some(i) => Ok(i), Some(i) => Ok(i),
None => Err(glib_bool_error!("Failed to add interval")), None => Err(glib::glib_bool_error!("Failed to add interval")),
} }
} }
} }
fn compare(&self, tc2: &ValidVideoTimeCode) -> i32 { fn compare(&self, tc2: &ValidVideoTimeCode) -> i32 {
unsafe { unsafe { ffi::gst_video_time_code_compare(self.to_glib_none().0, tc2.to_glib_none().0) }
gst_video_sys::gst_video_time_code_compare(self.to_glib_none().0, tc2.to_glib_none().0)
}
} }
pub fn frames_since_daily_jam(&self) -> u64 { pub fn frames_since_daily_jam(&self) -> u64 {
unsafe { gst_video_sys::gst_video_time_code_frames_since_daily_jam(self.to_glib_none().0) } unsafe { ffi::gst_video_time_code_frames_since_daily_jam(self.to_glib_none().0) }
} }
pub fn increment_frame(&mut self) { pub fn increment_frame(&mut self) {
unsafe { unsafe {
gst_video_sys::gst_video_time_code_increment_frame(self.to_glib_none_mut().0); ffi::gst_video_time_code_increment_frame(self.to_glib_none_mut().0);
} }
} }
pub fn nsec_since_daily_jam(&self) -> u64 { pub fn nsec_since_daily_jam(&self) -> u64 {
unsafe { gst_video_sys::gst_video_time_code_nsec_since_daily_jam(self.to_glib_none().0) } unsafe { ffi::gst_video_time_code_nsec_since_daily_jam(self.to_glib_none().0) }
} }
pub fn to_date_time(&self) -> Result<glib::DateTime, glib::error::BoolError> { pub fn to_date_time(&self) -> Result<glib::DateTime, glib::error::BoolError> {
unsafe { unsafe {
match from_glib_full(gst_video_sys::gst_video_time_code_to_date_time( match from_glib_full(ffi::gst_video_time_code_to_date_time(self.to_glib_none().0)) {
self.to_glib_none().0,
)) {
Some(d) => Ok(d), Some(d) => Ok(d),
None => Err(glib_bool_error!( None => Err(glib::glib_bool_error!(
"Failed to convert VideoTimeCode to date time" "Failed to convert VideoTimeCode to date time"
)), )),
} }
@ -293,7 +282,7 @@ macro_rules! generic_impl {
pub fn set_latest_daily_jam(&mut self, latest_daily_jam: Option<&glib::DateTime>) { pub fn set_latest_daily_jam(&mut self, latest_daily_jam: Option<&glib::DateTime>) {
unsafe { unsafe {
if !self.0.config.latest_daily_jam.is_null() { if !self.0.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_unref(self.0.config.latest_daily_jam); glib::ffi::g_date_time_unref(self.0.config.latest_daily_jam);
} }
self.0.config.latest_daily_jam = latest_daily_jam.to_glib_full() self.0.config.latest_daily_jam = latest_daily_jam.to_glib_full()
@ -306,7 +295,7 @@ macro_rules! generic_impl {
unsafe { unsafe {
let v = self.0; let v = self.0;
if !v.config.latest_daily_jam.is_null() { if !v.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_ref(v.config.latest_daily_jam); glib::ffi::g_date_time_ref(v.config.latest_daily_jam);
} }
$name(v) $name(v)
@ -318,7 +307,7 @@ macro_rules! generic_impl {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
if !self.0.config.latest_daily_jam.is_null() { if !self.0.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_unref(self.0.config.latest_daily_jam); glib::ffi::g_date_time_unref(self.0.config.latest_daily_jam);
} }
} }
} }
@ -343,7 +332,7 @@ macro_rules! generic_impl {
#[inline] #[inline]
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let s = unsafe { let s = unsafe {
glib::GString::from_glib_full(gst_video_sys::gst_video_time_code_to_string( glib::GString::from_glib_full(ffi::gst_video_time_code_to_string(
self.to_glib_none().0, self.to_glib_none().0,
)) ))
}; };
@ -356,45 +345,43 @@ macro_rules! generic_impl {
#[doc(hidden)] #[doc(hidden)]
impl GlibPtrDefault for $name { impl GlibPtrDefault for $name {
type GlibType = *mut gst_video_sys::GstVideoTimeCode; type GlibType = *mut ffi::GstVideoTimeCode;
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ToGlibPtr<'a, *const gst_video_sys::GstVideoTimeCode> for $name { impl<'a> ToGlibPtr<'a, *const ffi::GstVideoTimeCode> for $name {
type Storage = &'a Self; type Storage = &'a Self;
#[inline] #[inline]
fn to_glib_none(&'a self) -> Stash<'a, *const gst_video_sys::GstVideoTimeCode, Self> { fn to_glib_none(&'a self) -> Stash<'a, *const ffi::GstVideoTimeCode, Self> {
Stash(&self.0 as *const _, self) Stash(&self.0 as *const _, self)
} }
#[inline] #[inline]
fn to_glib_full(&self) -> *const gst_video_sys::GstVideoTimeCode { fn to_glib_full(&self) -> *const ffi::GstVideoTimeCode {
unsafe { gst_video_sys::gst_video_time_code_copy(&self.0 as *const _) } unsafe { ffi::gst_video_time_code_copy(&self.0 as *const _) }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ToGlibPtrMut<'a, *mut gst_video_sys::GstVideoTimeCode> for $name { impl<'a> ToGlibPtrMut<'a, *mut ffi::GstVideoTimeCode> for $name {
type Storage = &'a mut Self; type Storage = &'a mut Self;
#[inline] #[inline]
fn to_glib_none_mut( fn to_glib_none_mut(&'a mut self) -> StashMut<'a, *mut ffi::GstVideoTimeCode, Self> {
&'a mut self,
) -> StashMut<'a, *mut gst_video_sys::GstVideoTimeCode, Self> {
let ptr = &mut self.0 as *mut _; let ptr = &mut self.0 as *mut _;
StashMut(ptr, self) StashMut(ptr, self)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrNone<*mut gst_video_sys::GstVideoTimeCode> for $name { impl FromGlibPtrNone<*mut ffi::GstVideoTimeCode> for $name {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *mut gst_video_sys::GstVideoTimeCode) -> Self { unsafe fn from_glib_none(ptr: *mut ffi::GstVideoTimeCode) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
let v = ptr::read(ptr); let v = ptr::read(ptr);
if !v.config.latest_daily_jam.is_null() { if !v.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_ref(v.config.latest_daily_jam); glib::ffi::g_date_time_ref(v.config.latest_daily_jam);
} }
$name(v) $name(v)
@ -402,13 +389,13 @@ macro_rules! generic_impl {
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrNone<*const gst_video_sys::GstVideoTimeCode> for $name { impl FromGlibPtrNone<*const ffi::GstVideoTimeCode> for $name {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *const gst_video_sys::GstVideoTimeCode) -> Self { unsafe fn from_glib_none(ptr: *const ffi::GstVideoTimeCode) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
let v = ptr::read(ptr); let v = ptr::read(ptr);
if !v.config.latest_daily_jam.is_null() { if !v.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_ref(v.config.latest_daily_jam); glib::ffi::g_date_time_ref(v.config.latest_daily_jam);
} }
$name(v) $name(v)
@ -416,26 +403,24 @@ macro_rules! generic_impl {
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrFull<*mut gst_video_sys::GstVideoTimeCode> for $name { impl FromGlibPtrFull<*mut ffi::GstVideoTimeCode> for $name {
#[inline] #[inline]
unsafe fn from_glib_full(ptr: *mut gst_video_sys::GstVideoTimeCode) -> Self { unsafe fn from_glib_full(ptr: *mut ffi::GstVideoTimeCode) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
let v = ptr::read(ptr); let v = ptr::read(ptr);
if !v.config.latest_daily_jam.is_null() { if !v.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_ref(v.config.latest_daily_jam); glib::ffi::g_date_time_ref(v.config.latest_daily_jam);
} }
gst_video_sys::gst_video_time_code_free(ptr); ffi::gst_video_time_code_free(ptr);
$name(v) $name(v)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrBorrow<*mut gst_video_sys::GstVideoTimeCode> for $name { impl FromGlibPtrBorrow<*mut ffi::GstVideoTimeCode> for $name {
#[inline] #[inline]
unsafe fn from_glib_borrow( unsafe fn from_glib_borrow(ptr: *mut ffi::GstVideoTimeCode) -> Borrowed<Self> {
ptr: *mut gst_video_sys::GstVideoTimeCode,
) -> Borrowed<Self> {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
let v = ptr::read(ptr); let v = ptr::read(ptr);
@ -445,26 +430,26 @@ macro_rules! generic_impl {
impl StaticType for $name { impl StaticType for $name {
fn static_type() -> glib::Type { fn static_type() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_time_code_get_type()) } unsafe { from_glib(ffi::gst_video_time_code_get_type()) }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> value::FromValueOptional<'a> for $name { impl<'a> value::FromValueOptional<'a> for $name {
unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> { unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> {
Option::<$name>::from_glib_none(gobject_sys::g_value_get_boxed( Option::<$name>::from_glib_none(glib::gobject_ffi::g_value_get_boxed(
value.to_glib_none().0, value.to_glib_none().0,
) as *mut gst_video_sys::GstVideoTimeCode) ) as *mut ffi::GstVideoTimeCode)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl value::SetValue for $name { impl value::SetValue for $name {
unsafe fn set_value(value: &mut glib::Value, this: &Self) { unsafe fn set_value(value: &mut glib::Value, this: &Self) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
ToGlibPtr::<*const gst_video_sys::GstVideoTimeCode>::to_glib_none(this).0 ToGlibPtr::<*const ffi::GstVideoTimeCode>::to_glib_none(this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }
@ -472,10 +457,10 @@ macro_rules! generic_impl {
#[doc(hidden)] #[doc(hidden)]
impl value::SetValueOptional for $name { impl value::SetValueOptional for $name {
unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) { unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
ToGlibPtr::<*const gst_video_sys::GstVideoTimeCode>::to_glib_none(&this).0 ToGlibPtr::<*const ffi::GstVideoTimeCode>::to_glib_none(&this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }
@ -493,10 +478,10 @@ impl str::FromStr for VideoTimeCode {
fn from_str(s: &str) -> Result<Self, glib::error::BoolError> { fn from_str(s: &str) -> Result<Self, glib::error::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
Option::<VideoTimeCode>::from_glib_full( Option::<VideoTimeCode>::from_glib_full(ffi::gst_video_time_code_new_from_string(
gst_video_sys::gst_video_time_code_new_from_string(s.to_glib_none().0), s.to_glib_none().0,
) ))
.ok_or_else(|| glib_bool_error!("Failed to create VideoTimeCode from string")) .ok_or_else(|| glib::glib_bool_error!("Failed to create VideoTimeCode from string"))
} }
} }
} }
@ -532,7 +517,7 @@ impl From<ValidVideoTimeCode> for VideoTimeCode {
} }
#[repr(transparent)] #[repr(transparent)]
pub struct VideoTimeCodeMeta(gst_video_sys::GstVideoTimeCodeMeta); pub struct VideoTimeCodeMeta(ffi::GstVideoTimeCodeMeta);
unsafe impl Send for VideoTimeCodeMeta {} unsafe impl Send for VideoTimeCodeMeta {}
unsafe impl Sync for VideoTimeCodeMeta {} unsafe impl Sync for VideoTimeCodeMeta {}
@ -544,7 +529,7 @@ impl VideoTimeCodeMeta {
) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> { ) -> gst::MetaRefMut<'a, Self, gst::meta::Standalone> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let meta = gst_video_sys::gst_buffer_add_video_time_code_meta( let meta = ffi::gst_buffer_add_video_time_code_meta(
buffer.as_mut_ptr(), buffer.as_mut_ptr(),
tc.to_glib_none().0 as *mut _, tc.to_glib_none().0 as *mut _,
); );
@ -560,20 +545,20 @@ impl VideoTimeCodeMeta {
pub fn set_tc(&mut self, tc: ValidVideoTimeCode) { pub fn set_tc(&mut self, tc: ValidVideoTimeCode) {
#![allow(clippy::cast_ptr_alignment)] #![allow(clippy::cast_ptr_alignment)]
unsafe { unsafe {
gst_video_sys::gst_video_time_code_clear(&mut self.0.tc); ffi::gst_video_time_code_clear(&mut self.0.tc);
self.0.tc = tc.0; self.0.tc = tc.0;
if !self.0.tc.config.latest_daily_jam.is_null() { if !self.0.tc.config.latest_daily_jam.is_null() {
glib_sys::g_date_time_ref(self.0.tc.config.latest_daily_jam); glib::ffi::g_date_time_ref(self.0.tc.config.latest_daily_jam);
} }
} }
} }
} }
unsafe impl MetaAPI for VideoTimeCodeMeta { unsafe impl MetaAPI for VideoTimeCodeMeta {
type GstType = gst_video_sys::GstVideoTimeCodeMeta; type GstType = ffi::GstVideoTimeCodeMeta;
fn get_meta_api() -> glib::Type { fn get_meta_api() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_time_code_meta_api_get_type()) } unsafe { from_glib(ffi::gst_video_time_code_meta_api_get_type()) }
} }
} }

View file

@ -6,13 +6,9 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use glib;
use glib::prelude::*; use glib::prelude::*;
use glib::translate::*; use glib::translate::*;
use glib::value; use glib::value;
use glib_sys;
use gobject_sys;
use gst_video_sys;
use std::cmp; use std::cmp;
use std::fmt; use std::fmt;
use std::mem; use std::mem;
@ -20,20 +16,14 @@ use std::ptr;
use std::str; use std::str;
#[derive(Clone)] #[derive(Clone)]
pub struct VideoTimeCodeInterval(gst_video_sys::GstVideoTimeCodeInterval); pub struct VideoTimeCodeInterval(ffi::GstVideoTimeCodeInterval);
impl VideoTimeCodeInterval { impl VideoTimeCodeInterval {
pub fn new(hours: u32, minutes: u32, seconds: u32, frames: u32) -> Self { pub fn new(hours: u32, minutes: u32, seconds: u32, frames: u32) -> Self {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
let mut v = mem::MaybeUninit::zeroed(); let mut v = mem::MaybeUninit::zeroed();
gst_video_sys::gst_video_time_code_interval_init( ffi::gst_video_time_code_interval_init(v.as_mut_ptr(), hours, minutes, seconds, frames);
v.as_mut_ptr(),
hours,
minutes,
seconds,
frames,
);
VideoTimeCodeInterval(v.assume_init()) VideoTimeCodeInterval(v.assume_init())
} }
} }
@ -134,82 +124,80 @@ impl str::FromStr for VideoTimeCodeInterval {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
Option::<VideoTimeCodeInterval>::from_glib_full( Option::<VideoTimeCodeInterval>::from_glib_full(
gst_video_sys::gst_video_time_code_interval_new_from_string(s.to_glib_none().0), ffi::gst_video_time_code_interval_new_from_string(s.to_glib_none().0),
) )
.ok_or_else(|| glib_bool_error!("Failed to create VideoTimeCodeInterval from string")) .ok_or_else(|| {
glib::glib_bool_error!("Failed to create VideoTimeCodeInterval from string")
})
} }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl GlibPtrDefault for VideoTimeCodeInterval { impl GlibPtrDefault for VideoTimeCodeInterval {
type GlibType = *mut gst_video_sys::GstVideoTimeCodeInterval; type GlibType = *mut ffi::GstVideoTimeCodeInterval;
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ToGlibPtr<'a, *const gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl<'a> ToGlibPtr<'a, *const ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
type Storage = &'a Self; type Storage = &'a Self;
#[inline] #[inline]
fn to_glib_none(&'a self) -> Stash<'a, *const gst_video_sys::GstVideoTimeCodeInterval, Self> { fn to_glib_none(&'a self) -> Stash<'a, *const ffi::GstVideoTimeCodeInterval, Self> {
Stash(&self.0 as *const _, self) Stash(&self.0 as *const _, self)
} }
#[inline] #[inline]
fn to_glib_full(&self) -> *const gst_video_sys::GstVideoTimeCodeInterval { fn to_glib_full(&self) -> *const ffi::GstVideoTimeCodeInterval {
unsafe { gst_video_sys::gst_video_time_code_interval_copy(&self.0 as *const _) } unsafe { ffi::gst_video_time_code_interval_copy(&self.0 as *const _) }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ToGlibPtrMut<'a, *mut gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl<'a> ToGlibPtrMut<'a, *mut ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
type Storage = &'a mut Self; type Storage = &'a mut Self;
#[inline] #[inline]
fn to_glib_none_mut( fn to_glib_none_mut(&'a mut self) -> StashMut<'a, *mut ffi::GstVideoTimeCodeInterval, Self> {
&'a mut self,
) -> StashMut<'a, *mut gst_video_sys::GstVideoTimeCodeInterval, Self> {
let ptr = &mut self.0 as *mut _; let ptr = &mut self.0 as *mut _;
StashMut(ptr, self) StashMut(ptr, self)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrNone<*mut gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl FromGlibPtrNone<*mut ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *mut gst_video_sys::GstVideoTimeCodeInterval) -> Self { unsafe fn from_glib_none(ptr: *mut ffi::GstVideoTimeCodeInterval) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
VideoTimeCodeInterval(ptr::read(ptr)) VideoTimeCodeInterval(ptr::read(ptr))
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrNone<*const gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl FromGlibPtrNone<*const ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
#[inline] #[inline]
unsafe fn from_glib_none(ptr: *const gst_video_sys::GstVideoTimeCodeInterval) -> Self { unsafe fn from_glib_none(ptr: *const ffi::GstVideoTimeCodeInterval) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
VideoTimeCodeInterval(ptr::read(ptr)) VideoTimeCodeInterval(ptr::read(ptr))
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrFull<*mut gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl FromGlibPtrFull<*mut ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
#[inline] #[inline]
unsafe fn from_glib_full(ptr: *mut gst_video_sys::GstVideoTimeCodeInterval) -> Self { unsafe fn from_glib_full(ptr: *mut ffi::GstVideoTimeCodeInterval) -> Self {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
let res = VideoTimeCodeInterval(ptr::read(ptr)); let res = VideoTimeCodeInterval(ptr::read(ptr));
gst_video_sys::gst_video_time_code_interval_free(ptr); ffi::gst_video_time_code_interval_free(ptr);
res res
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrBorrow<*mut gst_video_sys::GstVideoTimeCodeInterval> for VideoTimeCodeInterval { impl FromGlibPtrBorrow<*mut ffi::GstVideoTimeCodeInterval> for VideoTimeCodeInterval {
#[inline] #[inline]
unsafe fn from_glib_borrow( unsafe fn from_glib_borrow(ptr: *mut ffi::GstVideoTimeCodeInterval) -> Borrowed<Self> {
ptr: *mut gst_video_sys::GstVideoTimeCodeInterval,
) -> Borrowed<Self> {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
Borrowed::new(VideoTimeCodeInterval(ptr::read(ptr))) Borrowed::new(VideoTimeCodeInterval(ptr::read(ptr)))
} }
@ -217,27 +205,27 @@ impl FromGlibPtrBorrow<*mut gst_video_sys::GstVideoTimeCodeInterval> for VideoTi
impl StaticType for VideoTimeCodeInterval { impl StaticType for VideoTimeCodeInterval {
fn static_type() -> glib::Type { fn static_type() -> glib::Type {
unsafe { from_glib(gst_video_sys::gst_video_time_code_interval_get_type()) } unsafe { from_glib(ffi::gst_video_time_code_interval_get_type()) }
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> value::FromValueOptional<'a> for VideoTimeCodeInterval { impl<'a> value::FromValueOptional<'a> for VideoTimeCodeInterval {
unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> { unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> {
Option::<VideoTimeCodeInterval>::from_glib_full(gobject_sys::g_value_dup_boxed( Option::<VideoTimeCodeInterval>::from_glib_full(glib::gobject_ffi::g_value_dup_boxed(
value.to_glib_none().0, value.to_glib_none().0,
) )
as *mut gst_video_sys::GstVideoTimeCodeInterval) as *mut ffi::GstVideoTimeCodeInterval)
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl value::SetValue for VideoTimeCodeInterval { impl value::SetValue for VideoTimeCodeInterval {
unsafe fn set_value(value: &mut glib::Value, this: &Self) { unsafe fn set_value(value: &mut glib::Value, this: &Self) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
ToGlibPtr::<*const gst_video_sys::GstVideoTimeCodeInterval>::to_glib_none(this).0 ToGlibPtr::<*const ffi::GstVideoTimeCodeInterval>::to_glib_none(this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }
@ -245,10 +233,10 @@ impl value::SetValue for VideoTimeCodeInterval {
#[doc(hidden)] #[doc(hidden)]
impl value::SetValueOptional for VideoTimeCodeInterval { impl value::SetValueOptional for VideoTimeCodeInterval {
unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) { unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) {
gobject_sys::g_value_set_boxed( glib::gobject_ffi::g_value_set_boxed(
value.to_glib_none_mut().0, value.to_glib_none_mut().0,
ToGlibPtr::<*const gst_video_sys::GstVideoTimeCodeInterval>::to_glib_none(&this).0 ToGlibPtr::<*const ffi::GstVideoTimeCodeInterval>::to_glib_none(&this).0
as glib_sys::gpointer, as glib::ffi::gpointer,
) )
} }
} }