VideoPlayer error handler

This commit is contained in:
Vladimir Romashchenko 2024-08-05 18:44:14 -04:00
parent be21d2a19b
commit 3b24aa6b3c
No known key found for this signature in database
GPG key ID: E5B7EA4A9E1D48F4

View file

@ -16,6 +16,7 @@ where
video: &'a Video,
on_end_of_stream: Option<Message>,
on_new_frame: Option<Message>,
on_error: Option<Box<dyn Fn(&glib::Error) -> Message + 'a>>,
_phantom: PhantomData<(Theme, Renderer)>,
}
@ -29,6 +30,7 @@ where
video,
on_end_of_stream: None,
on_new_frame: None,
on_error: None,
_phantom: Default::default(),
}
}
@ -48,6 +50,16 @@ where
..self
}
}
pub fn on_error<F>(self, on_error: F) -> Self
where
F: 'a + Fn(&glib::Error) -> Message,
{
VideoPlayer {
on_error: Some(Box::new(on_error)),
..self
}
}
}
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
@ -134,7 +146,13 @@ where
for msg in inner.bus.iter() {
match msg.view() {
gst::MessageView::Error(err) => panic!("{:#?}", err),
gst::MessageView::Error(err) => {
if let Some(ref on_error) = self.on_error {
shell.publish(on_error(&err.error()))
} else {
panic!("{:#?}", err)
};
}
gst::MessageView::Eos(_eos) => {
if let Some(on_end_of_stream) = self.on_end_of_stream.clone() {
shell.publish(on_end_of_stream);