mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2025-02-02 04:12:25 +00:00
rtsp_server: RTSPServer::attach() is fallible
If we don't handle the case of RTSPServer::attach() failing, we end up with a panic. Unfortunately, we don't get any details from the underlying call so we've to live with a generic error. :(
This commit is contained in:
parent
280433ebc1
commit
7a014e4024
4 changed files with 18 additions and 7 deletions
|
@ -130,7 +130,7 @@ fn main_loop() -> Result<(), Error> {
|
||||||
// interested in them. In this example, we only do have one, so we can
|
// interested in them. In this example, we only do have one, so we can
|
||||||
// leave the context parameter empty, it will automatically select
|
// leave the context parameter empty, it will automatically select
|
||||||
// the default one.
|
// the default one.
|
||||||
let id = server.attach(None);
|
let id = server.attach(None)?;
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"Stream ready at rtsps://127.0.0.1:{}/test",
|
"Stream ready at rtsps://127.0.0.1:{}/test",
|
||||||
|
|
|
@ -58,7 +58,7 @@ fn main_loop() -> Result<(), Error> {
|
||||||
// interested in them. In this example, we only do have one, so we can
|
// interested in them. In this example, we only do have one, so we can
|
||||||
// leave the context parameter empty, it will automatically select
|
// leave the context parameter empty, it will automatically select
|
||||||
// the default one.
|
// the default one.
|
||||||
let id = server.attach(None);
|
let id = server.attach(None)?;
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"Stream ready at rtsp://127.0.0.1:{}/test",
|
"Stream ready at rtsp://127.0.0.1:{}/test",
|
||||||
|
|
|
@ -66,7 +66,7 @@ fn main_loop() -> Result<(), Error> {
|
||||||
// interested in them. In this example, we only do have one, so we can
|
// interested in them. In this example, we only do have one, so we can
|
||||||
// leave the context parameter empty, it will automatically select
|
// leave the context parameter empty, it will automatically select
|
||||||
// the default one.
|
// the default one.
|
||||||
let id = server.attach(None);
|
let id = server.attach(None)?;
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"Stream ready at rtsp://127.0.0.1:{}/test",
|
"Stream ready at rtsp://127.0.0.1:{}/test",
|
||||||
|
|
|
@ -6,16 +6,27 @@ use glib::source::SourceId;
|
||||||
use glib::translate::*;
|
use glib::translate::*;
|
||||||
|
|
||||||
pub trait RTSPServerExtManual: 'static {
|
pub trait RTSPServerExtManual: 'static {
|
||||||
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId;
|
fn attach(
|
||||||
|
&self,
|
||||||
|
context: Option<&glib::MainContext>,
|
||||||
|
) -> Result<SourceId, glib::error::BoolError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<O: IsA<RTSPServer>> RTSPServerExtManual for O {
|
impl<O: IsA<RTSPServer>> RTSPServerExtManual for O {
|
||||||
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId {
|
fn attach(
|
||||||
|
&self,
|
||||||
|
context: Option<&glib::MainContext>,
|
||||||
|
) -> Result<SourceId, glib::error::BoolError> {
|
||||||
unsafe {
|
unsafe {
|
||||||
from_glib(ffi::gst_rtsp_server_attach(
|
match ffi::gst_rtsp_server_attach(
|
||||||
self.as_ref().to_glib_none().0,
|
self.as_ref().to_glib_none().0,
|
||||||
context.to_glib_none().0,
|
context.to_glib_none().0,
|
||||||
))
|
) {
|
||||||
|
0 => Err(glib::bool_error!(
|
||||||
|
"Failed to attach main context to RTSP server"
|
||||||
|
)),
|
||||||
|
id => Ok(from_glib(id)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue