gstreamer_gl/auto/
gl_display.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::{ffi, GLContext, GLDisplayType, GLWindow, GLAPI};
7use glib::{
8    object::ObjectType as _,
9    prelude::*,
10    signal::{connect_raw, SignalHandlerId},
11    translate::*,
12};
13use std::boxed::Box as Box_;
14
15glib::wrapper! {
16    #[doc(alias = "GstGLDisplay")]
17    pub struct GLDisplay(Object<ffi::GstGLDisplay, ffi::GstGLDisplayClass>) @extends gst::Object;
18
19    match fn {
20        type_ => || ffi::gst_gl_display_get_type(),
21    }
22}
23
24impl GLDisplay {
25    pub const NONE: Option<&'static GLDisplay> = None;
26
27    #[doc(alias = "gst_gl_display_new")]
28    pub fn new() -> GLDisplay {
29        assert_initialized_main_thread!();
30        unsafe { from_glib_full(ffi::gst_gl_display_new()) }
31    }
32
33    #[cfg(feature = "v1_20")]
34    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
35    #[doc(alias = "gst_gl_display_new_with_type")]
36    #[doc(alias = "new_with_type")]
37    pub fn with_type(type_: GLDisplayType) -> Option<GLDisplay> {
38        assert_initialized_main_thread!();
39        unsafe { from_glib_full(ffi::gst_gl_display_new_with_type(type_.into_glib())) }
40    }
41}
42
43impl Default for GLDisplay {
44    fn default() -> Self {
45        Self::new()
46    }
47}
48
49unsafe impl Send for GLDisplay {}
50unsafe impl Sync for GLDisplay {}
51
52pub trait GLDisplayExt: IsA<GLDisplay> + 'static {
53    #[doc(alias = "gst_gl_display_create_window")]
54    fn create_window(&self) -> Result<GLWindow, glib::BoolError> {
55        unsafe {
56            Option::<_>::from_glib_full(ffi::gst_gl_display_create_window(
57                self.as_ref().to_glib_none().0,
58            ))
59            .ok_or_else(|| glib::bool_error!("Failed to create window"))
60        }
61    }
62
63    #[doc(alias = "gst_gl_display_filter_gl_api")]
64    fn filter_gl_api(&self, gl_api: GLAPI) {
65        unsafe {
66            ffi::gst_gl_display_filter_gl_api(self.as_ref().to_glib_none().0, gl_api.into_glib());
67        }
68    }
69
70    #[doc(alias = "gst_gl_display_get_gl_api")]
71    #[doc(alias = "get_gl_api")]
72    fn gl_api(&self) -> GLAPI {
73        unsafe {
74            from_glib(ffi::gst_gl_display_get_gl_api(
75                self.as_ref().to_glib_none().0,
76            ))
77        }
78    }
79
80    #[doc(alias = "gst_gl_display_get_gl_api_unlocked")]
81    #[doc(alias = "get_gl_api_unlocked")]
82    fn gl_api_unlocked(&self) -> GLAPI {
83        unsafe {
84            from_glib(ffi::gst_gl_display_get_gl_api_unlocked(
85                self.as_ref().to_glib_none().0,
86            ))
87        }
88    }
89
90    #[doc(alias = "gst_gl_display_get_handle_type")]
91    #[doc(alias = "get_handle_type")]
92    fn handle_type(&self) -> GLDisplayType {
93        unsafe {
94            from_glib(ffi::gst_gl_display_get_handle_type(
95                self.as_ref().to_glib_none().0,
96            ))
97        }
98    }
99
100    #[doc(alias = "gst_gl_display_remove_window")]
101    fn remove_window(&self, window: &impl IsA<GLWindow>) -> Result<(), glib::error::BoolError> {
102        unsafe {
103            glib::result_from_gboolean!(
104                ffi::gst_gl_display_remove_window(
105                    self.as_ref().to_glib_none().0,
106                    window.as_ref().to_glib_none().0
107                ),
108                "Failed to remove window"
109            )
110        }
111    }
112
113    //#[cfg(feature = "v1_18")]
114    //#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
115    //#[doc(alias = "gst_gl_display_retrieve_window")]
116    //fn retrieve_window(&self, data: /*Unimplemented*/Option<Basic: Pointer>, compare_func: /*Unimplemented*/FnMut(/*Unimplemented*/Option<Basic: Pointer>) -> i32) -> Option<GLWindow> {
117    //    unsafe { TODO: call ffi:gst_gl_display_retrieve_window() }
118    //}
119
120    #[doc(alias = "create-context")]
121    fn connect_create_context<
122        F: Fn(&Self, &GLContext) -> Option<GLContext> + Send + Sync + 'static,
123    >(
124        &self,
125        f: F,
126    ) -> SignalHandlerId {
127        unsafe extern "C" fn create_context_trampoline<
128            P: IsA<GLDisplay>,
129            F: Fn(&P, &GLContext) -> Option<GLContext> + Send + Sync + 'static,
130        >(
131            this: *mut ffi::GstGLDisplay,
132            context: *mut ffi::GstGLContext,
133            f: glib::ffi::gpointer,
134        ) -> *mut ffi::GstGLContext {
135            let f: &F = &*(f as *const F);
136            f(
137                GLDisplay::from_glib_borrow(this).unsafe_cast_ref(),
138                &from_glib_borrow(context),
139            )
140            .to_glib_full()
141        }
142        unsafe {
143            let f: Box_<F> = Box_::new(f);
144            connect_raw(
145                self.as_ptr() as *mut _,
146                c"create-context".as_ptr() as *const _,
147                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
148                    create_context_trampoline::<Self, F> as *const (),
149                )),
150                Box_::into_raw(f),
151            )
152        }
153    }
154}
155
156impl<O: IsA<GLDisplay>> GLDisplayExt for O {}