#![allow(non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::guard::*;
use crate::mf::{ffi, privs::*};
use crate::ole::privs::*;
use crate::prelude::*;
#[must_use]
pub fn MFCreateAsyncResult(
object: Option<&impl ole_IUnknown>,
callback: &IMFAsyncCallback,
state: Option<&impl ole_IUnknown>,
) -> HrResult<IMFAsyncResult> {
let mut queried = unsafe { IMFAsyncResult::null() };
HrRet(unsafe {
ffi::MFCreateAsyncResult(
object.map_or(std::ptr::null_mut(), |o| o.ptr()),
callback.ptr(),
state.map_or(std::ptr::null_mut(), |s| s.ptr()),
queried.as_mut(),
)
})
.to_hrresult()
.map(|_| queried)
}
#[must_use]
pub fn MFCreateMediaSession(
configuration: Option<&impl mf_IMFAttributes>,
) -> HrResult<IMFMediaSession> {
let mut queried = unsafe { IMFMediaSession::null() };
HrRet(unsafe {
ffi::MFCreateMediaSession(
configuration.map_or(std::ptr::null_mut(), |c| c.ptr()),
queried.as_mut(),
)
})
.to_hrresult()
.map(|_| queried)
}
#[must_use]
pub fn MFCreateMFByteStreamOnStream(stream: &impl ole_IStream) -> HrResult<IMFByteStream> {
let mut queried = unsafe { IMFByteStream::null() };
HrRet(unsafe { ffi::MFCreateMFByteStreamOnStream(stream.ptr(), queried.as_mut()) })
.to_hrresult()
.map(|_| queried)
}
#[must_use]
pub fn MFCreateSourceResolver() -> HrResult<IMFSourceResolver> {
let mut queried = unsafe { IMFSourceResolver::null() };
HrRet(unsafe { ffi::MFCreateSourceResolver(queried.as_mut()) })
.to_hrresult()
.map(|_| queried)
}
#[must_use]
pub fn MFCreateTopology() -> HrResult<IMFTopology> {
let mut queried = unsafe { IMFTopology::null() };
HrRet(unsafe { ffi::MFCreateTopology(queried.as_mut()) })
.to_hrresult()
.map(|_| queried)
}
#[must_use]
pub fn MFCreateTopologyNode(node_type: co::MF_TOPOLOGY) -> HrResult<IMFTopologyNode> {
let mut queried = unsafe { IMFTopologyNode::null() };
HrRet(unsafe { ffi::MFCreateTopologyNode(node_type.raw(), queried.as_mut()) })
.to_hrresult()
.map(|_| queried)
}
pub fn MFStartup(flags: co::MFSTARTUP) -> HrResult<MFShutdownGuard> {
unsafe {
HrRet(ffi::MFStartup(MF_VERSION, flags.raw()))
.to_hrresult()
.map(|_| MFShutdownGuard::new())
}
}