forked from mirrors/gstreamer-rs
video/video-info: Don't use bool return of gst_video_info_set_format()/align() when running with GStreamer < 1.11.1
The bool return value was added in 1.11.1 and using the return value with older versions gives a random value that might be true or false, and then causes spurious errors. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/236#note_399872
This commit is contained in:
parent
2f88dc6576
commit
a2a1a87c46
1 changed files with 48 additions and 2 deletions
|
@ -267,7 +267,38 @@ impl<'a> VideoInfoBuilder<'a> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut info = mem::MaybeUninit::uninit();
|
let mut info = mem::MaybeUninit::uninit();
|
||||||
|
|
||||||
#[cfg(not(feature = "v1_16"))]
|
#[cfg(not(feature = "v1_12"))]
|
||||||
|
let res: bool = {
|
||||||
|
// The bool return value is new with 1.11.1, see
|
||||||
|
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0
|
||||||
|
let res = if gst::version() < (1, 11, 1, 0) {
|
||||||
|
gst_video_sys::gst_video_info_set_format(
|
||||||
|
info.as_mut_ptr(),
|
||||||
|
self.format.to_glib(),
|
||||||
|
self.width,
|
||||||
|
self.height,
|
||||||
|
);
|
||||||
|
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
from_glib(gst_video_sys::gst_video_info_set_format(
|
||||||
|
info.as_mut_ptr(),
|
||||||
|
self.format.to_glib(),
|
||||||
|
self.width,
|
||||||
|
self.height,
|
||||||
|
))
|
||||||
|
};
|
||||||
|
|
||||||
|
if res {
|
||||||
|
if let Some(interlace_mode) = self.interlace_mode {
|
||||||
|
let info = info.as_mut_ptr();
|
||||||
|
(*info).interlace_mode = interlace_mode.to_glib();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res
|
||||||
|
};
|
||||||
|
#[cfg(all(feature = "v1_12", not(feature = "v1_16")))]
|
||||||
let res: bool = {
|
let res: bool = {
|
||||||
let res = from_glib(gst_video_sys::gst_video_info_set_format(
|
let res = from_glib(gst_video_sys::gst_video_info_set_format(
|
||||||
info.as_mut_ptr(),
|
info.as_mut_ptr(),
|
||||||
|
@ -710,8 +741,23 @@ impl VideoInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_12", feature = "dox"))]
|
|
||||||
pub fn align(&mut self, align: &mut ::VideoAlignment) -> bool {
|
pub fn align(&mut self, align: &mut ::VideoAlignment) -> bool {
|
||||||
|
#[cfg(not(feature = "v1_12"))]
|
||||||
|
unsafe {
|
||||||
|
// The bool return value is new with 1.11.1, see
|
||||||
|
// https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/17cdd369e6f2f73329d27dfceb50011f40f1ceb0
|
||||||
|
if gst::version() < (1, 11, 1, 0) {
|
||||||
|
gst_video_sys::gst_video_info_align(&mut self.0, &mut align.0);
|
||||||
|
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
from_glib(gst_video_sys::gst_video_info_align(
|
||||||
|
&mut self.0,
|
||||||
|
&mut align.0,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[cfg(feature = "v1_12")]
|
||||||
unsafe {
|
unsafe {
|
||||||
from_glib(gst_video_sys::gst_video_info_align(
|
from_glib(gst_video_sys::gst_video_info_align(
|
||||||
&mut self.0,
|
&mut self.0,
|
||||||
|
|
Loading…
Reference in a new issue