From 16e687522859ea988665ffc219f863ff5420d63e Mon Sep 17 00:00:00 2001 From: modeco80 Date: Tue, 6 Aug 2024 21:44:41 -0400 Subject: [PATCH] Make getting AV info lazy Some cores (Dolphin) don't initalize AV info, or use resources that are not allocated yet, until after a game is loaded. --- crates/retro_frontend/src/frontend.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/crates/retro_frontend/src/frontend.rs b/crates/retro_frontend/src/frontend.rs index 55f7782..b0bbe60 100644 --- a/crates/retro_frontend/src/frontend.rs +++ b/crates/retro_frontend/src/frontend.rs @@ -327,13 +327,6 @@ impl Frontend { ); info!("Core {} loaded", path.as_ref().display()); - - // Get AV info - // Like core API, we have to MaybeUninit again. - let mut av_info: MaybeUninit = MaybeUninit::uninit(); - (core_api_ref.retro_get_system_av_info)(av_info.as_mut_ptr()); - - self.av_info = Some(av_info.assume_init()); } Ok(()) @@ -436,7 +429,17 @@ impl Frontend { if let Some(av) = self.av_info.as_ref() { Ok(av.clone()) } else { - Err(Error::NoAvInfo) + // Get AV info + // Like core API, we have to MaybeUninit again. + let mut av_info: MaybeUninit = MaybeUninit::uninit(); + unsafe { + let core_api = self.core_api.as_ref().unwrap(); + (core_api.retro_get_system_av_info)(av_info.as_mut_ptr()); + + self.av_info = Some(av_info.assume_init()); + } + + Ok(self.av_info.as_ref().unwrap().clone()) } }