From 4b24ca18238e38fab75d7e6358d05448a57a6316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 11 Aug 2017 15:03:16 +0300 Subject: [PATCH] Add VideoOverlay bindings --- Gir_GstVideo.toml | 13 +++++ gstreamer-video/src/auto/mod.rs | 5 ++ gstreamer-video/src/auto/video_overlay.rs | 62 +++++++++++++++++++++++ gstreamer-video/src/lib.rs | 3 ++ gstreamer-video/src/video_overlay.rs | 23 +++++++++ 5 files changed, 106 insertions(+) create mode 100644 gstreamer-video/src/auto/video_overlay.rs create mode 100644 gstreamer-video/src/video_overlay.rs diff --git a/Gir_GstVideo.toml b/Gir_GstVideo.toml index 0de6e23b9..bd38290c7 100644 --- a/Gir_GstVideo.toml +++ b/Gir_GstVideo.toml @@ -45,3 +45,16 @@ name = "Gst.Caps" status = "manual" ref_mode = "ref" +[[object]] +name = "GstVideo.VideoOverlay" +status = "generate" + + [[object.function]] + name = "set_render_rectangle" + [object.function.return] + bool_return_is_error = "Failed to set render rectangle" + + [[object.function]] + name = "prepare_window_handle" + # to be called by subclasses + ignore = true diff --git a/gstreamer-video/src/auto/mod.rs b/gstreamer-video/src/auto/mod.rs index 2800773a3..6fe1a0487 100644 --- a/gstreamer-video/src/auto/mod.rs +++ b/gstreamer-video/src/auto/mod.rs @@ -1,6 +1,10 @@ // This file was generated by gir (cf27827) from gir-files (???) // DO NOT EDIT +mod video_overlay; +pub use self::video_overlay::VideoOverlay; +pub use self::video_overlay::VideoOverlayExt; + mod enums; pub use self::enums::VideoColorMatrix; pub use self::enums::VideoColorPrimaries; @@ -57,4 +61,5 @@ pub use self::flags::VIDEO_MULTIVIEW_FLAGS_MIXED_MONO; #[doc(hidden)] pub mod traits { + pub use super::VideoOverlayExt; } diff --git a/gstreamer-video/src/auto/video_overlay.rs b/gstreamer-video/src/auto/video_overlay.rs new file mode 100644 index 000000000..4a12d7437 --- /dev/null +++ b/gstreamer-video/src/auto/video_overlay.rs @@ -0,0 +1,62 @@ +// This file was generated by gir (cf27827) from gir-files (???) +// DO NOT EDIT + +use ffi; +use glib; +use glib::object::IsA; +use glib::translate::*; +use glib_ffi; +use gobject_ffi; +use std::mem; +use std::ptr; + +glib_wrapper! { + pub struct VideoOverlay(Object); + + match fn { + get_type => || ffi::gst_video_overlay_get_type(), + } +} + +unsafe impl Send for VideoOverlay {} +unsafe impl Sync for VideoOverlay {} + +pub trait VideoOverlayExt { + fn expose(&self); + + //fn got_window_handle(&self, handle: /*Unimplemented*/Fundamental: UIntPtr); + + fn handle_events(&self, handle_events: bool); + + fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> Result<(), glib::error::BoolError>; + + //fn set_window_handle(&self, handle: /*Unimplemented*/Fundamental: UIntPtr); +} + +impl> VideoOverlayExt for O { + fn expose(&self) { + unsafe { + ffi::gst_video_overlay_expose(self.to_glib_none().0); + } + } + + //fn got_window_handle(&self, handle: /*Unimplemented*/Fundamental: UIntPtr) { + // unsafe { TODO: call ffi::gst_video_overlay_got_window_handle() } + //} + + fn handle_events(&self, handle_events: bool) { + unsafe { + ffi::gst_video_overlay_handle_events(self.to_glib_none().0, handle_events.to_glib()); + } + } + + fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) -> Result<(), glib::error::BoolError> { + unsafe { + glib::error::BoolError::from_glib(ffi::gst_video_overlay_set_render_rectangle(self.to_glib_none().0, x, y, width, height), "Failed to set render rectangle") + } + } + + //fn set_window_handle(&self, handle: /*Unimplemented*/Fundamental: UIntPtr) { + // unsafe { TODO: call ffi::gst_video_overlay_set_window_handle() } + //} +} diff --git a/gstreamer-video/src/lib.rs b/gstreamer-video/src/lib.rs index 8c7d86681..3521f6d4c 100644 --- a/gstreamer-video/src/lib.rs +++ b/gstreamer-video/src/lib.rs @@ -15,6 +15,7 @@ extern crate gobject_sys as gobject_ffi; extern crate gstreamer_sys as gst_ffi; extern crate gstreamer_video_sys as ffi; extern crate gstreamer as gst; +#[macro_use] extern crate glib; macro_rules! skip_assert_initialized { @@ -40,3 +41,5 @@ mod video_info; pub use video_info::*; mod video_frame; pub use video_frame::VideoFrame; +mod video_overlay; +pub use video_overlay::VideoOverlayExtManual; diff --git a/gstreamer-video/src/video_overlay.rs b/gstreamer-video/src/video_overlay.rs new file mode 100644 index 000000000..fb1035a69 --- /dev/null +++ b/gstreamer-video/src/video_overlay.rs @@ -0,0 +1,23 @@ +// Copyright (C) 2017 Sebastian Dröge +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use ffi; +use VideoOverlay; +use libc::uintptr_t; + +use glib::IsA; + +pub trait VideoOverlayExtManual { + unsafe fn set_window_handle(&self, handle: uintptr_t); +} + +impl> VideoOverlayExtManual for O { + unsafe fn set_window_handle(&self, handle: uintptr_t) { + ffi::gst_video_overlay_set_window_handle(self.to_glib_none().0, handle) + } +}