use std::sync::OnceLock;
use windows::Win32::Media::MediaFoundation::{MF_VERSION, MFSTARTUP_FULL, MFStartup};
use windows::Win32::System::Com::{COINIT_MULTITHREADED, CoInitializeEx};
use crate::{Error, Result};
pub fn ensure_started() -> Result<()> {
static STARTED: OnceLock<std::result::Result<(), String>> = OnceLock::new();
STARTED
.get_or_init(|| unsafe { MFStartup(MF_VERSION, MFSTARTUP_FULL) }.map_err(|e| e.to_string()))
.clone()
.map_err(|e| Error::Decode(format!("Media Foundation unavailable: {e}")))
}
pub fn com_init() {
let _ = unsafe { CoInitializeEx(None, COINIT_MULTITHREADED) };
}