Update for functions returning bool in most remaining workspaces

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/issues/179
This commit is contained in:
François Laignel 2019-02-04 15:56:17 +01:00
parent 37b717c020
commit 211e476592
14 changed files with 204 additions and 36 deletions

View file

@ -152,6 +152,10 @@ status = "generate"
[object.function.return] [object.function.return]
nullable = false nullable = false
[[object.function]]
name = "set_window"
[object.function.return]
bool_return_is_error = "Failed to set window"
[[object]] [[object]]
name = "GstGL.GLDisplay" name = "GstGL.GLDisplay"
@ -217,6 +221,11 @@ status = "generate"
# callback # callback
ignore = true ignore = true
[[object.function]]
name = "set_render_rectangle"
[object.function.return]
bool_return_is_error = "Failed to set the specified region"
[[object.function]] [[object.function]]
name = "set_resize_callback" name = "set_resize_callback"
# callback # callback
@ -242,6 +251,11 @@ name = "GstGL.GLColorConvert"
status = "generate" status = "generate"
final_type = true final_type = true
[[object.function]]
name = "set_caps"
[object.function.return]
bool_return_is_error = "Failed to set caps"
[[object.function]] [[object.function]]
name = "decide_allocation" name = "decide_allocation"
# correct mutability # correct mutability
@ -272,11 +286,26 @@ name = "GstGL.GLSLStage"
status = "generate" status = "generate"
final_type = true final_type = true
[[object.function]]
name = "set_strings"
[object.function.return]
bool_return_is_error = "Failed to attach stage to set strings"
[[object]] [[object]]
name = "GstGL.GLShader" name = "GstGL.GLShader"
status = "generate" status = "generate"
final_type = true final_type = true
[[object.function]]
name = "attach"
[object.function.return]
bool_return_is_error = "Failed to attach stage to shader"
[[object.function]]
name = "attach_unlocked"
[object.function.return]
bool_return_is_error = "Failed to attach stage to shader"
[[object.function]] [[object.function]]
name = "set_uniform_matrix_2fv" name = "set_uniform_matrix_2fv"
# array with size # array with size
@ -327,6 +356,11 @@ name = "GstGL.GLUpload"
status = "generate" status = "generate"
final_type = true final_type = true
[[object.function]]
name = "set_caps"
[object.function.return]
bool_return_is_error = "Failed to set caps"
[[object.function]] [[object.function]]
name = "perform_with_buffer" name = "perform_with_buffer"
# Result<Buffer, GLUploadReturn> # Result<Buffer, GLUploadReturn>
@ -347,6 +381,11 @@ name = "GstGL.GLViewConvert"
status = "generate" status = "generate"
final_type = true final_type = true
[[object.function]]
name = "set_caps"
[object.function.return]
bool_return_is_error = "Failed to set caps"
[[object.function]] [[object.function]]
name = "fixate_caps" name = "fixate_caps"
# correct reference ownership # correct reference ownership

View file

@ -110,6 +110,16 @@ status = "generate"
name = "attach" name = "attach"
ignore = true ignore = true
[[object.function]]
name = "io_func"
[object.function.return]
bool_return_is_error = "Failed to connect the source"
[[object.function]]
name = "transfer_connection"
[object.function.return]
bool_return_is_error = "Failed to transfer to the connection"
[[object]] [[object]]
name = "GstRtspServer.RTSPClient" name = "GstRtspServer.RTSPClient"
status = "generate" status = "generate"
@ -160,6 +170,21 @@ status = "generate"
[object.function.return] [object.function.return]
bool_return_is_error = "Failed to leave bin" bool_return_is_error = "Failed to leave bin"
[[object.function]]
name = "set_blocked"
[object.function.return]
bool_return_is_error = "Failed to block/unblock the dataflow"
[[object.function]]
name = "unblock_linked"
[object.function.return]
bool_return_is_error = "Failed to unblock the dataflow"
[[object.function]]
name = "update_crypto"
[object.function.return]
bool_return_is_error = "Failed to update crypto"
[[object]] [[object]]
name = "GstRtspServer.RTSPAddress" name = "GstRtspServer.RTSPAddress"
status = "generate" status = "generate"
@ -258,6 +283,16 @@ status = "generate"
name="GstRtspServer.RTSPAuth" name="GstRtspServer.RTSPAuth"
status="generate" status="generate"
[[object.function]]
name = "check"
[object.function.return]
bool_return_is_error = "Check failed"
[[object.function]]
name = "connect_accept_certificate"
# Use Result<(), LoggableError>
ignore = true
[[object.function]] [[object.function]]
name = "make_basic" name = "make_basic"
[object.function.return] [object.function.return]

View file

@ -45,9 +45,12 @@ impl TestClock {
} }
} }
pub fn crank(&self) -> bool { pub fn crank(&self) -> Result<(), glib::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_test_clock_crank(self.to_glib_none().0)) glib_result_from_gboolean!(
ffi::gst_test_clock_crank(self.to_glib_none().0),
"Failed to crank"
)
} }
} }

View file

@ -4,6 +4,7 @@
use GLContext; use GLContext;
use ffi; use ffi;
use glib;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst; use gst;
@ -24,9 +25,9 @@ impl GLColorConvert {
} }
} }
pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> bool { pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_color_convert_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_gl_color_convert_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0), "Failed to set caps")
} }
} }

View file

@ -93,7 +93,7 @@ pub trait GLContextExt: 'static {
fn set_shared_with<P: IsA<GLContext>>(&self, share: &P); fn set_shared_with<P: IsA<GLContext>>(&self, share: &P);
fn set_window<P: IsA<GLWindow>>(&self, window: &P) -> bool; fn set_window<P: IsA<GLWindow>>(&self, window: &P) -> Result<(), glib::error::BoolError>;
fn supports_glsl_profile_version(&self, version: GLSLVersion, profile: GLSLProfile) -> bool; fn supports_glsl_profile_version(&self, version: GLSLVersion, profile: GLSLProfile) -> bool;
@ -220,9 +220,9 @@ impl<O: IsA<GLContext>> GLContextExt for O {
} }
} }
fn set_window<P: IsA<GLWindow>>(&self, window: &P) -> bool { fn set_window<P: IsA<GLWindow>>(&self, window: &P) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_context_set_window(self.as_ref().to_glib_none().0, window.as_ref().to_glib_full())) glib_result_from_gboolean!(ffi::gst_gl_context_set_window(self.as_ref().to_glib_none().0, window.as_ref().to_glib_full()), "Failed to set window")
} }
} }

View file

@ -6,6 +6,7 @@ use Error;
use GLContext; use GLContext;
use GLSLStage; use GLSLStage;
use ffi; use ffi;
use glib;
use glib::StaticType; use glib::StaticType;
use glib::Value; use glib::Value;
use glib::object::IsA; use glib::object::IsA;
@ -53,15 +54,15 @@ impl GLShader {
// unsafe { TODO: call ffi::gst_gl_shader_new_with_stages() } // unsafe { TODO: call ffi::gst_gl_shader_new_with_stages() }
//} //}
pub fn attach(&self, stage: &GLSLStage) -> bool { pub fn attach(&self, stage: &GLSLStage) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_shader_attach(self.to_glib_none().0, stage.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_gl_shader_attach(self.to_glib_none().0, stage.to_glib_none().0), "Failed to attach stage to shader")
} }
} }
pub fn attach_unlocked(&self, stage: &GLSLStage) -> bool { pub fn attach_unlocked(&self, stage: &GLSLStage) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_shader_attach_unlocked(self.to_glib_none().0, stage.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_gl_shader_attach_unlocked(self.to_glib_none().0, stage.to_glib_none().0), "Failed to attach stage to shader")
} }
} }

View file

@ -4,6 +4,7 @@
use GLContext; use GLContext;
use ffi; use ffi;
use glib;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst; use gst;
@ -34,9 +35,9 @@ impl GLUpload {
} }
} }
pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> bool { pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_upload_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_gl_upload_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0), "Failed to set caps")
} }
} }

View file

@ -5,6 +5,7 @@
use GLContext; use GLContext;
use GLStereoDownmix; use GLStereoDownmix;
use ffi; use ffi;
use glib;
use glib::StaticType; use glib::StaticType;
use glib::Value; use glib::Value;
use glib::object::IsA; use glib::object::IsA;
@ -47,9 +48,9 @@ impl GLViewConvert {
} }
} }
pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> bool { pub fn set_caps(&self, in_caps: &gst::Caps, out_caps: &gst::Caps) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_view_convert_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_gl_view_convert_set_caps(self.to_glib_none().0, in_caps.to_glib_none().0, out_caps.to_glib_none().0), "Failed to set caps")
} }
} }

View file

@ -5,6 +5,7 @@
use GLContext; use GLContext;
use GLDisplay; use GLDisplay;
use ffi; use ffi;
use glib;
use glib::GString; use glib::GString;
use glib::object::Cast; use glib::object::Cast;
use glib::object::IsA; use glib::object::IsA;
@ -63,7 +64,7 @@ pub trait GLWindowExt: 'static {
fn set_preferred_size(&self, width: i32, height: i32); fn set_preferred_size(&self, width: i32, height: i32);
fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> bool; fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> Result<(), glib::error::BoolError>;
fn show(&self); fn show(&self);
@ -142,9 +143,9 @@ impl<O: IsA<GLWindow>> GLWindowExt for O {
} }
} }
fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> bool { fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_gl_window_set_render_rectangle(self.as_ref().to_glib_none().0, x, y, width, height)) glib_result_from_gboolean!(ffi::gst_gl_window_set_render_rectangle(self.as_ref().to_glib_none().0, x, y, width, height), "Failed to set the specified region")
} }
} }

View file

@ -7,6 +7,7 @@ use GLContext;
use GLSLProfile; use GLSLProfile;
use GLSLVersion; use GLSLVersion;
use ffi; use ffi;
use glib;
use glib::GString; use glib::GString;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
@ -90,10 +91,10 @@ impl GLSLStage {
} }
} }
pub fn set_strings(&self, version: GLSLVersion, profile: GLSLProfile, str: &[&str]) -> bool { pub fn set_strings(&self, version: GLSLVersion, profile: GLSLProfile, str: &[&str]) -> Result<(), glib::error::BoolError> {
let n_strings = str.len() as i32; let n_strings = str.len() as i32;
unsafe { unsafe {
from_glib(ffi::gst_glsl_stage_set_strings(self.to_glib_none().0, version.to_glib(), profile.to_glib(), n_strings, str.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_glsl_stage_set_strings(self.to_glib_none().0, version.to_glib(), profile.to_glib(), n_strings, str.to_glib_none().0), "Failed to attach stage to set strings")
} }
} }
} }

View file

@ -6,6 +6,7 @@ use RTSPToken;
use ffi; use ffi;
use gio; use gio;
use gio_ffi; use gio_ffi;
use glib;
use glib::GString; use glib::GString;
use glib::object::Cast; use glib::object::Cast;
use glib::object::IsA; use glib::object::IsA;
@ -34,10 +35,10 @@ impl RTSPAuth {
} }
} }
pub fn check(check: &str) -> bool { pub fn check(check: &str) -> Result<(), glib::error::BoolError> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { unsafe {
from_glib(ffi::gst_rtsp_auth_check(check.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_rtsp_auth_check(check.to_glib_none().0), "Check failed")
} }
} }

View file

@ -38,10 +38,10 @@ impl RTSPServer {
} }
} }
pub fn io_func<P: IsA<gio::Socket>, Q: IsA<RTSPServer>>(socket: &P, condition: glib::IOCondition, server: &Q) -> bool { pub fn io_func<P: IsA<gio::Socket>, Q: IsA<RTSPServer>>(socket: &P, condition: glib::IOCondition, server: &Q) -> Result<(), glib::error::BoolError> {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
from_glib(ffi::gst_rtsp_server_io_func(socket.as_ref().to_glib_none().0, condition.to_glib(), server.as_ref().to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_rtsp_server_io_func(socket.as_ref().to_glib_none().0, condition.to_glib(), server.as_ref().to_glib_none().0), "Failed to connect the source")
} }
} }
} }
@ -94,7 +94,7 @@ pub trait RTSPServerExt: 'static {
fn set_thread_pool<'a, P: IsA<RTSPThreadPool> + 'a, Q: Into<Option<&'a P>>>(&self, pool: Q); fn set_thread_pool<'a, P: IsA<RTSPThreadPool> + 'a, Q: Into<Option<&'a P>>>(&self, pool: Q);
fn transfer_connection<'a, P: IsA<gio::Socket>, Q: Into<Option<&'a str>>>(&self, socket: &P, ip: &str, port: i32, initial_buffer: Q) -> bool; fn transfer_connection<'a, P: IsA<gio::Socket>, Q: Into<Option<&'a str>>>(&self, socket: &P, ip: &str, port: i32, initial_buffer: Q) -> Result<(), glib::error::BoolError>;
fn connect_client_connected<F: Fn(&Self, &RTSPClient) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId; fn connect_client_connected<F: Fn(&Self, &RTSPClient) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId;
@ -228,10 +228,10 @@ impl<O: IsA<RTSPServer>> RTSPServerExt for O {
} }
} }
fn transfer_connection<'a, P: IsA<gio::Socket>, Q: Into<Option<&'a str>>>(&self, socket: &P, ip: &str, port: i32, initial_buffer: Q) -> bool { fn transfer_connection<'a, P: IsA<gio::Socket>, Q: Into<Option<&'a str>>>(&self, socket: &P, ip: &str, port: i32, initial_buffer: Q) -> Result<(), glib::error::BoolError> {
let initial_buffer = initial_buffer.into(); let initial_buffer = initial_buffer.into();
unsafe { unsafe {
from_glib(ffi::gst_rtsp_server_transfer_connection(self.as_ref().to_glib_none().0, socket.as_ref().to_glib_full(), ip.to_glib_none().0, port, initial_buffer.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_rtsp_server_transfer_connection(self.as_ref().to_glib_none().0, socket.as_ref().to_glib_full(), ip.to_glib_none().0, port, initial_buffer.to_glib_none().0), "Failed to transfer to the connection")
} }
} }

View file

@ -136,7 +136,7 @@ pub trait RTSPStreamExt: 'static {
fn set_address_pool<'a, P: IsA<RTSPAddressPool> + 'a, Q: Into<Option<&'a P>>>(&self, pool: Q); fn set_address_pool<'a, P: IsA<RTSPAddressPool> + 'a, Q: Into<Option<&'a P>>>(&self, pool: Q);
fn set_blocked(&self, blocked: bool) -> bool; fn set_blocked(&self, blocked: bool) -> Result<(), glib::error::BoolError>;
fn set_buffer_size(&self, size: u32); fn set_buffer_size(&self, size: u32);
@ -166,9 +166,9 @@ pub trait RTSPStreamExt: 'static {
//fn transport_filter(&self, func: /*Unimplemented*/Fn(&RTSPStream, &RTSPStreamTransport) -> /*Ignored*/RTSPFilterResult, user_data: /*Unimplemented*/Option<Fundamental: Pointer>) -> Vec<RTSPStreamTransport>; //fn transport_filter(&self, func: /*Unimplemented*/Fn(&RTSPStream, &RTSPStreamTransport) -> /*Ignored*/RTSPFilterResult, user_data: /*Unimplemented*/Option<Fundamental: Pointer>) -> Vec<RTSPStreamTransport>;
fn unblock_linked(&self) -> bool; fn unblock_linked(&self) -> Result<(), glib::error::BoolError>;
fn update_crypto<'a, P: Into<Option<&'a gst::Caps>>>(&self, ssrc: u32, crypto: P) -> bool; fn update_crypto<'a, P: Into<Option<&'a gst::Caps>>>(&self, ssrc: u32, crypto: P) -> Result<(), glib::error::BoolError>;
fn connect_new_rtcp_encoder<F: Fn(&Self, &gst::Element) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId; fn connect_new_rtcp_encoder<F: Fn(&Self, &gst::Element) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId;
@ -453,9 +453,9 @@ impl<O: IsA<RTSPStream>> RTSPStreamExt for O {
} }
} }
fn set_blocked(&self, blocked: bool) -> bool { fn set_blocked(&self, blocked: bool) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_rtsp_stream_set_blocked(self.as_ref().to_glib_none().0, blocked.to_glib())) glib_result_from_gboolean!(ffi::gst_rtsp_stream_set_blocked(self.as_ref().to_glib_none().0, blocked.to_glib()), "Failed to block/unblock the dataflow")
} }
} }
@ -543,16 +543,16 @@ impl<O: IsA<RTSPStream>> RTSPStreamExt for O {
// unsafe { TODO: call ffi::gst_rtsp_stream_transport_filter() } // unsafe { TODO: call ffi::gst_rtsp_stream_transport_filter() }
//} //}
fn unblock_linked(&self) -> bool { fn unblock_linked(&self) -> Result<(), glib::error::BoolError> {
unsafe { unsafe {
from_glib(ffi::gst_rtsp_stream_unblock_linked(self.as_ref().to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_rtsp_stream_unblock_linked(self.as_ref().to_glib_none().0), "Failed to unblock the dataflow")
} }
} }
fn update_crypto<'a, P: Into<Option<&'a gst::Caps>>>(&self, ssrc: u32, crypto: P) -> bool { fn update_crypto<'a, P: Into<Option<&'a gst::Caps>>>(&self, ssrc: u32, crypto: P) -> Result<(), glib::error::BoolError> {
let crypto = crypto.into(); let crypto = crypto.into();
unsafe { unsafe {
from_glib(ffi::gst_rtsp_stream_update_crypto(self.as_ref().to_glib_none().0, ssrc, crypto.to_glib_none().0)) glib_result_from_gboolean!(ffi::gst_rtsp_stream_update_crypto(self.as_ref().to_glib_none().0, ssrc, crypto.to_glib_none().0), "Failed to update crypto")
} }
} }

View file

@ -1,11 +1,33 @@
use ffi; use ffi;
use glib::object::Cast;
use glib::object::IsA; use glib::object::IsA;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*; use glib::translate::*;
use std::boxed::Box as Box_;
use std::mem::transmute;
use RTSPAuth; use RTSPAuth;
use RTSPToken; use RTSPToken;
pub trait RTSPAuthExtManual: 'static { pub trait RTSPAuthExtManual: 'static {
fn set_default_token<'a, P: Into<Option<&'a mut RTSPToken>>>(&self, token: P); fn set_default_token<'a, P: Into<Option<&'a mut RTSPToken>>>(&self, token: P);
fn connect_accept_certificate<
F: Fn(
&Self,
&gio::TlsConnection,
&gio::TlsCertificate,
gio::TlsCertificateFlags,
) -> Result<(), gst::LoggableError>
+ Send
+ Sync
+ 'static,
>(
&self,
f: F,
) -> SignalHandlerId;
} }
impl<O: IsA<RTSPAuth>> RTSPAuthExtManual for O { impl<O: IsA<RTSPAuth>> RTSPAuthExtManual for O {
@ -18,4 +40,66 @@ impl<O: IsA<RTSPAuth>> RTSPAuthExtManual for O {
); );
} }
} }
fn connect_accept_certificate<
F: Fn(
&Self,
&gio::TlsConnection,
&gio::TlsCertificate,
gio::TlsCertificateFlags,
) -> Result<(), gst::LoggableError>
+ Send
+ Sync
+ 'static,
>(
&self,
f: F,
) -> SignalHandlerId {
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"accept-certificate\0".as_ptr() as *const _,
Some(transmute(accept_certificate_trampoline::<Self, F> as usize)),
Box_::into_raw(f),
)
}
}
}
unsafe extern "C" fn accept_certificate_trampoline<
P,
F: Fn(
&P,
&gio::TlsConnection,
&gio::TlsCertificate,
gio::TlsCertificateFlags,
) -> Result<(), gst::LoggableError>
+ Send
+ Sync
+ 'static,
>(
this: *mut ffi::GstRTSPAuth,
connection: *mut gio_ffi::GTlsConnection,
peer_cert: *mut gio_ffi::GTlsCertificate,
errors: gio_ffi::GTlsCertificateFlags,
f: glib_ffi::gpointer,
) -> glib_ffi::gboolean
where
P: IsA<RTSPAuth>,
{
let f: &F = transmute(f);
match f(
&RTSPAuth::from_glib_borrow(this).unsafe_cast(),
&from_glib_borrow(connection),
&from_glib_borrow(peer_cert),
from_glib(errors),
) {
Ok(()) => true,
Err(err) => {
err.log();
false
}
}
.to_glib()
} }