Refactor unsafe blocks

This commit is contained in:
Daniel Vilar 2018-09-12 09:44:46 +02:00
parent 1aaf429f9e
commit c92d63ee88
3 changed files with 108 additions and 107 deletions

View file

@ -73,7 +73,6 @@ lazy_static! {
static mut id_receiver: i8 = 0; static mut id_receiver: i8 = 0;
fn connect_ndi(cat: gst::DebugCategory , element: &BaseSrc, ip: String, stream_name: String) -> i8{ fn connect_ndi(cat: gst::DebugCategory , element: &BaseSrc, ip: String, stream_name: String) -> i8{
unsafe {
gst_debug!(cat, obj: element, "Starting NDI connection..."); gst_debug!(cat, obj: element, "Starting NDI connection...");
let mut receivers = hashmap_receivers.lock().unwrap(); let mut receivers = hashmap_receivers.lock().unwrap();
@ -106,6 +105,7 @@ fn connect_ndi(cat: gst::DebugCategory , element: &BaseSrc, ip: String, stream
} }
} }
unsafe {
if !NDIlib_initialize() { if !NDIlib_initialize() {
gst_element_error!(element, gst::CoreError::Negotiation, ["Cannot run NDI: NDIlib_initialize error"]); gst_element_error!(element, gst::CoreError::Negotiation, ["Cannot run NDI: NDIlib_initialize error"]);
@ -217,7 +217,6 @@ fn connect_ndi(cat: gst::DebugCategory , element: &BaseSrc, ip: String, stream
fn stop_ndi(cat: gst::DebugCategory , element: &BaseSrc, id: i8) -> bool{ fn stop_ndi(cat: gst::DebugCategory , element: &BaseSrc, id: i8) -> bool{
gst_debug!(cat, obj: element, "Closing NDI connection..."); gst_debug!(cat, obj: element, "Closing NDI connection...");
unsafe{
let mut receivers = hashmap_receivers.lock().unwrap(); let mut receivers = hashmap_receivers.lock().unwrap();
{ {
let val = receivers.get_mut(&id).unwrap(); let val = receivers.get_mut(&id).unwrap();
@ -233,15 +232,16 @@ fn stop_ndi(cat: gst::DebugCategory , element: &BaseSrc, id: i8) -> bool{
let recv = &val.ndi_instance; let recv = &val.ndi_instance;
let pNDI_recv = recv.recv; let pNDI_recv = recv.recv;
unsafe{
NDIlib_recv_destroy(pNDI_recv); NDIlib_recv_destroy(pNDI_recv);
// ndi_struct.recv = None; // ndi_struct.recv = None;
NDIlib_destroy(); NDIlib_destroy();
} }
}
receivers.remove(&id); receivers.remove(&id);
gst_debug!(cat, obj: element, "Closed NDI connection"); gst_debug!(cat, obj: element, "Closed NDI connection");
return true; return true;
} }
}
// Static plugin metdata that is directly stored in the plugin shared object and read by GStreamer // Static plugin metdata that is directly stored in the plugin shared object and read by GStreamer
// upon loading. // upon loading.

View file

@ -348,7 +348,6 @@ impl NdiAudioSrc {
fn fixate(&self, element: &BaseSrc, caps: gst::Caps) -> gst::Caps { fn fixate(&self, element: &BaseSrc, caps: gst::Caps) -> gst::Caps {
//We need to set the correct caps resolution and framerate //We need to set the correct caps resolution and framerate
unsafe{
let receivers = hashmap_receivers.lock().unwrap(); let receivers = hashmap_receivers.lock().unwrap();
let settings = self.settings.lock().unwrap(); let settings = self.settings.lock().unwrap();
@ -361,9 +360,10 @@ impl NdiAudioSrc {
let mut frame_type: NDIlib_frame_type_e = NDIlib_frame_type_e::NDIlib_frame_type_none; let mut frame_type: NDIlib_frame_type_e = NDIlib_frame_type_e::NDIlib_frame_type_none;
while frame_type != NDIlib_frame_type_e::NDIlib_frame_type_audio{ while frame_type != NDIlib_frame_type_e::NDIlib_frame_type_audio{
unsafe{
frame_type = NDIlib_recv_capture_v2(pNDI_recv, ptr::null(), &audio_frame, ptr::null(), 1000); frame_type = NDIlib_recv_capture_v2(pNDI_recv, ptr::null(), &audio_frame, ptr::null(), 1000);
} }
}
let mut caps = gst::Caps::truncate(caps); let mut caps = gst::Caps::truncate(caps);
{ {
let caps = caps.make_mut(); let caps = caps.make_mut();
@ -376,7 +376,7 @@ impl NdiAudioSrc {
// Let BaseSrc fixate anything else for us. We could've alternatively have // Let BaseSrc fixate anything else for us. We could've alternatively have
// called Caps::fixate() here // called Caps::fixate() here
element.parent_fixate(caps) element.parent_fixate(caps)
} // }
} }
//Creates the audio buffers //Creates the audio buffers
@ -401,7 +401,6 @@ impl NdiAudioSrc {
} }
Some(ref info) => info.clone(), Some(ref info) => info.clone(),
}; };
unsafe{
let receivers = hashmap_receivers.lock().unwrap(); let receivers = hashmap_receivers.lock().unwrap();
let recv = &receivers.get(&_settings.id_receiver).unwrap().ndi_instance; let recv = &receivers.get(&_settings.id_receiver).unwrap().ndi_instance;
@ -410,6 +409,7 @@ impl NdiAudioSrc {
let pts: u64; let pts: u64;
let audio_frame: NDIlib_audio_frame_v2_t = Default::default(); let audio_frame: NDIlib_audio_frame_v2_t = Default::default();
unsafe{
let time = ndi_struct.initial_timestamp; let time = ndi_struct.initial_timestamp;
let mut skip_frame = true; let mut skip_frame = true;

View file

@ -364,7 +364,6 @@ impl NdiVideoSrc {
fn fixate(&self, element: &BaseSrc, caps: gst::Caps) -> gst::Caps { fn fixate(&self, element: &BaseSrc, caps: gst::Caps) -> gst::Caps {
//We need to set the correct caps resolution and framerate //We need to set the correct caps resolution and framerate
unsafe{
let receivers = hashmap_receivers.lock().unwrap(); let receivers = hashmap_receivers.lock().unwrap();
let settings = self.settings.lock().unwrap(); let settings = self.settings.lock().unwrap();
@ -376,8 +375,10 @@ impl NdiVideoSrc {
let mut frame_type: NDIlib_frame_type_e = NDIlib_frame_type_e::NDIlib_frame_type_none; let mut frame_type: NDIlib_frame_type_e = NDIlib_frame_type_e::NDIlib_frame_type_none;
while frame_type != NDIlib_frame_type_e::NDIlib_frame_type_video{ while frame_type != NDIlib_frame_type_e::NDIlib_frame_type_video{
unsafe{
frame_type = NDIlib_recv_capture_v2(pNDI_recv, &video_frame, ptr::null(), ptr::null(), 1000); frame_type = NDIlib_recv_capture_v2(pNDI_recv, &video_frame, ptr::null(), ptr::null(), 1000);
} }
}
let mut caps = gst::Caps::truncate(caps); let mut caps = gst::Caps::truncate(caps);
{ {
@ -394,7 +395,6 @@ impl NdiVideoSrc {
let _ = element.post_message(&gst::Message::new_latency().src(Some(element)).build()); let _ = element.post_message(&gst::Message::new_latency().src(Some(element)).build());
element.parent_fixate(caps) element.parent_fixate(caps)
} }
}
//Creates the video buffers //Creates the video buffers
fn create( fn create(
@ -418,7 +418,7 @@ impl NdiVideoSrc {
} }
Some(ref info) => info.clone(), Some(ref info) => info.clone(),
}; };
unsafe{ // unsafe{
let receivers = hashmap_receivers.lock().unwrap(); let receivers = hashmap_receivers.lock().unwrap();
let recv = &receivers.get(&_settings.id_receiver).unwrap().ndi_instance; let recv = &receivers.get(&_settings.id_receiver).unwrap().ndi_instance;
@ -427,6 +427,7 @@ impl NdiVideoSrc {
let pts: u64; let pts: u64;
let video_frame: NDIlib_video_frame_v2_t = Default::default(); let video_frame: NDIlib_video_frame_v2_t = Default::default();
unsafe{
let time = ndi_struct.initial_timestamp; let time = ndi_struct.initial_timestamp;
let mut skip_frame = true; let mut skip_frame = true;