1use crate::{ffi, Object, TaskPool, TaskState};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10 #[doc(alias = "GstTask")]
11 pub struct Task(Object<ffi::GstTask, ffi::GstTaskClass>) @extends Object;
12
13 match fn {
14 type_ => || ffi::gst_task_get_type(),
15 }
16}
17
18impl Task {
19 pub const NONE: Option<&'static Task> = None;
20
21 #[doc(alias = "gst_task_cleanup_all")]
22 pub fn cleanup_all() {
23 assert_initialized_main_thread!();
24 unsafe {
25 ffi::gst_task_cleanup_all();
26 }
27 }
28}
29
30unsafe impl Send for Task {}
31unsafe impl Sync for Task {}
32
33pub trait TaskExt: IsA<Task> + 'static {
34 #[doc(alias = "gst_task_get_pool")]
35 #[doc(alias = "get_pool")]
36 fn pool(&self) -> TaskPool {
37 unsafe { from_glib_full(ffi::gst_task_get_pool(self.as_ref().to_glib_none().0)) }
38 }
39
40 #[doc(alias = "gst_task_get_state")]
41 #[doc(alias = "get_state")]
42 fn state(&self) -> TaskState {
43 unsafe { from_glib(ffi::gst_task_get_state(self.as_ref().to_glib_none().0)) }
44 }
45
46 #[doc(alias = "gst_task_join")]
47 fn join(&self) -> Result<(), glib::error::BoolError> {
48 unsafe {
49 glib::result_from_gboolean!(
50 ffi::gst_task_join(self.as_ref().to_glib_none().0),
51 "Failed to join task"
52 )
53 }
54 }
55
56 #[doc(alias = "gst_task_pause")]
57 fn pause(&self) -> Result<(), glib::error::BoolError> {
58 unsafe {
59 glib::result_from_gboolean!(
60 ffi::gst_task_pause(self.as_ref().to_glib_none().0),
61 "Failed to pause task"
62 )
63 }
64 }
65
66 #[cfg(feature = "v1_18")]
67 #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
68 #[doc(alias = "gst_task_resume")]
69 fn resume(&self) -> Result<(), glib::error::BoolError> {
70 unsafe {
71 glib::result_from_gboolean!(
72 ffi::gst_task_resume(self.as_ref().to_glib_none().0),
73 "Failed to resume task"
74 )
75 }
76 }
77
78 #[doc(alias = "gst_task_set_pool")]
79 fn set_pool(&self, pool: &impl IsA<TaskPool>) {
80 unsafe {
81 ffi::gst_task_set_pool(
82 self.as_ref().to_glib_none().0,
83 pool.as_ref().to_glib_none().0,
84 );
85 }
86 }
87
88 #[doc(alias = "gst_task_set_state")]
89 fn set_state(&self, state: TaskState) -> Result<(), glib::error::BoolError> {
90 unsafe {
91 glib::result_from_gboolean!(
92 ffi::gst_task_set_state(self.as_ref().to_glib_none().0, state.into_glib()),
93 "Failed to set task state"
94 )
95 }
96 }
97
98 #[doc(alias = "gst_task_start")]
99 fn start(&self) -> Result<(), glib::error::BoolError> {
100 unsafe {
101 glib::result_from_gboolean!(
102 ffi::gst_task_start(self.as_ref().to_glib_none().0),
103 "Failed to start task"
104 )
105 }
106 }
107
108 #[doc(alias = "gst_task_stop")]
109 fn stop(&self) -> Result<(), glib::error::BoolError> {
110 unsafe {
111 glib::result_from_gboolean!(
112 ffi::gst_task_stop(self.as_ref().to_glib_none().0),
113 "Failed to stop task"
114 )
115 }
116 }
117}
118
119impl<O: IsA<Task>> TaskExt for O {}