forked from mirrors/gstreamer-rs
gstreamer-video/video_info: Change functions from returning Option to Result
Partial work for: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/216
This commit is contained in:
parent
c563fb6f44
commit
3e3c5205db
2 changed files with 18 additions and 14 deletions
|
@ -499,7 +499,7 @@ impl App {
|
|||
|
||||
let _info = sample
|
||||
.get_caps()
|
||||
.and_then(|caps| gst_video::VideoInfo::from_caps(caps))
|
||||
.and_then(|caps| gst_video::VideoInfo::from_caps(caps).ok())
|
||||
.ok_or_else(|| {
|
||||
gst_element_error!(
|
||||
appsink,
|
||||
|
@ -652,7 +652,7 @@ fn main_loop(mut app: App) -> Result<glutin::WindowedContext<glutin::PossiblyCur
|
|||
let buffer = sample.get_buffer_owned().unwrap();
|
||||
let info = sample
|
||||
.get_caps()
|
||||
.and_then(|caps| gst_video::VideoInfo::from_caps(caps))
|
||||
.and_then(|caps| gst_video::VideoInfo::from_caps(caps).ok())
|
||||
.unwrap();
|
||||
|
||||
{
|
||||
|
|
|
@ -263,7 +263,7 @@ pub struct VideoInfoBuilder<'a> {
|
|||
}
|
||||
|
||||
impl<'a> VideoInfoBuilder<'a> {
|
||||
pub fn build(self) -> Option<VideoInfo> {
|
||||
pub fn build(self) -> Result<VideoInfo, glib::error::BoolError> {
|
||||
unsafe {
|
||||
let mut info = mem::MaybeUninit::uninit();
|
||||
|
||||
|
@ -306,13 +306,13 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
};
|
||||
|
||||
if !res {
|
||||
return None;
|
||||
return Err(glib_bool_error!("Failed to build VideoInfo"));
|
||||
}
|
||||
|
||||
let mut info = info.assume_init();
|
||||
|
||||
if info.finfo.is_null() || info.width <= 0 || info.height <= 0 {
|
||||
return None;
|
||||
return Err(glib_bool_error!("Failed to build VideoInfo"));
|
||||
}
|
||||
|
||||
if let Some(flags) = self.flags {
|
||||
|
@ -347,7 +347,7 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
|
||||
if let Some(offset) = self.offset {
|
||||
if offset.len() != ((*info.finfo).n_planes as usize) {
|
||||
return None;
|
||||
return Err(glib_bool_error!("Failed to build VideoInfo"));
|
||||
}
|
||||
|
||||
let n_planes = (*info.finfo).n_planes as usize;
|
||||
|
@ -356,7 +356,7 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
|
||||
if let Some(stride) = self.stride {
|
||||
if stride.len() != ((*info.finfo).n_planes as usize) {
|
||||
return None;
|
||||
return Err(glib_bool_error!("Failed to build VideoInfo"));
|
||||
}
|
||||
|
||||
let n_planes = (*info.finfo).n_planes as usize;
|
||||
|
@ -381,7 +381,7 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
Some(VideoInfo(info))
|
||||
Ok(VideoInfo(info))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -526,7 +526,7 @@ impl VideoInfo {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn from_caps(caps: &gst::CapsRef) -> Option<Self> {
|
||||
pub fn from_caps(caps: &gst::CapsRef) -> Result<Self, glib::error::BoolError> {
|
||||
skip_assert_initialized!();
|
||||
|
||||
unsafe {
|
||||
|
@ -535,18 +535,22 @@ impl VideoInfo {
|
|||
info.as_mut_ptr(),
|
||||
caps.as_ptr(),
|
||||
)) {
|
||||
Some(VideoInfo(info.assume_init()))
|
||||
Ok(VideoInfo(info.assume_init()))
|
||||
} else {
|
||||
None
|
||||
Err(glib_bool_error!("Failed to create VideoInfo from caps"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_caps(&self) -> Option<gst::Caps> {
|
||||
pub fn to_caps(&self) -> Result<gst::Caps, glib::error::BoolError> {
|
||||
unsafe {
|
||||
from_glib_full(gst_video_sys::gst_video_info_to_caps(
|
||||
let result = from_glib_full(gst_video_sys::gst_video_info_to_caps(
|
||||
&self.0 as *const _ as *mut _,
|
||||
))
|
||||
));
|
||||
match result {
|
||||
Some(c) => Ok(c),
|
||||
None => Err(glib_bool_error!("Failed to create caps from VideoInfo")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue