added set_pipeline_state to C API, improved participant-left handler
This commit is contained in:
parent
b593ca6697
commit
e5d10c6da0
|
@ -72,4 +72,8 @@ void gstmeet_conference_on_participant(struct Context *context,
|
||||||
GstBin *(*f)(struct Participant, void *),
|
GstBin *(*f)(struct Participant, void *),
|
||||||
void *callback_context);
|
void *callback_context);
|
||||||
|
|
||||||
|
bool gstmeet_conference_set_pipeline_state(struct Context *context,
|
||||||
|
JitsiConference *conference,
|
||||||
|
GstState state);
|
||||||
|
|
||||||
#endif /* gstmeet_h */
|
#endif /* gstmeet_h */
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use glib::{ffi::GMainContext, translate::{from_glib_full, ToGlibPtr}};
|
use glib::{ffi::GMainContext, translate::{from_glib, from_glib_full, ToGlibPtr}};
|
||||||
pub use lib_gst_meet::{init_tracing, JitsiConference, JitsiConnection, MediaType};
|
pub use lib_gst_meet::{init_tracing, JitsiConference, JitsiConnection, MediaType};
|
||||||
use lib_gst_meet::JitsiConferenceConfig;
|
use lib_gst_meet::JitsiConferenceConfig;
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
@ -215,3 +215,16 @@ pub unsafe extern "C" fn gstmeet_conference_on_participant(
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn gstmeet_conference_set_pipeline_state(
|
||||||
|
context: *mut Context,
|
||||||
|
conference: *mut JitsiConference,
|
||||||
|
state: gstreamer::ffi::GstState,
|
||||||
|
) -> bool {
|
||||||
|
(*context)
|
||||||
|
.runtime
|
||||||
|
.block_on((*conference).set_pipeline_state(from_glib(state)))
|
||||||
|
.map_err(|e| eprintln!("lib-gst-meet: {:?}", e))
|
||||||
|
.is_ok()
|
||||||
|
}
|
|
@ -533,7 +533,16 @@ impl StanzaFilter for JitsiConference {
|
||||||
nick: item.nick,
|
nick: item.nick,
|
||||||
bin: None,
|
bin: None,
|
||||||
};
|
};
|
||||||
if locked_inner
|
if presence.type_ == presence::Type::Unavailable && locked_inner.participants.remove(&from.resource.clone()).is_some() {
|
||||||
|
debug!("participant left: {:?}", jid);
|
||||||
|
if let Some(f) = &locked_inner.on_participant_left {
|
||||||
|
debug!("calling on_participant_left with old participant");
|
||||||
|
if let Err(e) = f(participant).await {
|
||||||
|
warn!("on_participant_left failed: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if locked_inner
|
||||||
.participants
|
.participants
|
||||||
.insert(from.resource.clone(), participant.clone())
|
.insert(from.resource.clone(), participant.clone())
|
||||||
.is_none()
|
.is_none()
|
||||||
|
@ -558,16 +567,6 @@ impl StanzaFilter for JitsiConference {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if presence.type_ == presence::Type::Unavailable {
|
|
||||||
locked_inner.participants.remove(&from.resource.clone());
|
|
||||||
debug!("participant left: {:?}", jid);
|
|
||||||
if let Some(f) = &locked_inner.on_participant_left {
|
|
||||||
debug!("calling on_participant_left with old participant");
|
|
||||||
if let Err(e) = f(participant).await {
|
|
||||||
warn!("on_participant_left failed: {:?}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
with import <nixpkgs> {};
|
with import <nixpkgs> {};
|
||||||
|
let
|
||||||
|
gst-plugins-base = gst_all_1.gst-plugins-base.override {
|
||||||
|
enableCocoa = stdenv.isDarwin;
|
||||||
|
};
|
||||||
|
in
|
||||||
mkShell {
|
mkShell {
|
||||||
name = "gst-meet";
|
name = "gst-meet";
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
@ -6,7 +11,7 @@ mkShell {
|
||||||
glib
|
glib
|
||||||
glib-networking
|
glib-networking
|
||||||
gst_all_1.gstreamer
|
gst_all_1.gstreamer
|
||||||
gst_all_1.gst-plugins-base
|
gst-plugins-base
|
||||||
gst_all_1.gst-plugins-good
|
gst_all_1.gst-plugins-good
|
||||||
gst_all_1.gst-plugins-bad
|
gst_all_1.gst-plugins-bad
|
||||||
libnice
|
libnice
|
||||||
|
|
Loading…
Reference in New Issue