set_property! macro

This commit is contained in:
Martin Kavík 2022-04-01 23:10:07 +02:00
parent f10380f60a
commit 8d5a098307

View file

@ -59,45 +59,32 @@ impl PartialUi for Player {
fn create_shareable_mpv(window_handle: HWND) -> Arc<Mpv> {
let mpv = Mpv::with_initializer(|initializer| {
macro_rules! set_property {
($name:literal, $value:expr) => {
initializer
.set_property("wid", window_handle as i64)
.expect("failed setting wid");
.set_property($name, $value)
.expect(concat!("failed to set ", $name));
};
}
set_property!("wid", window_handle as i64);
// initializer.set_property("vo", "gpu").expect("unable to set vo");
// win, opengl: works but least performancy, 10-15% CPU
// winvk, vulkan: works as good as d3d11
// d3d11, d1d11: works great
// dxinterop, auto: works, slightly more cpu use than d3d11
// default (auto) seems to be d3d11 (vo/gpu/d3d11)
initializer
.set_property("gpu-context", "angle")
.expect("failed setting gpu-contex");
initializer
.set_property("gpu-api", "auto")
.expect("failed setting gpu-api");
initializer
.set_property("title", "Stremio")
.expect("failed setting title");
initializer
.set_property("terminal", "yes")
.expect("failed setting terminal");
initializer
.set_property("msg-level", "all=no,cplayer=debug")
.expect("failed setting msg-level");
initializer
.set_property("quiet", "yes")
.expect("failed setting quiet");
initializer
.set_property("hwdec", "auto")
.expect("failed setting hwdec");
set_property!("gpu-context", "angle");
set_property!("gpu-api", "auto");
set_property!("title", "Stremio");
set_property!("terminal", "yes");
set_property!("msg-level", "all=no,cplayer=debug");
set_property!("quiet", "yes");
set_property!("hwdec", "auto");
// FIXME: very often the audio track isn't selected when using "aid" = "auto"
initializer
.set_property("aid", 1)
.expect("failed setting aid");
set_property!("aid", "1");
Ok(())
})
.expect("cannot build MPV");
Arc::new(mpv)
});
Arc::new(mpv.expect("cannot build MPV"))
}
fn create_event_thread(
@ -111,6 +98,8 @@ fn create_event_thread(
.disable_deprecated_events()
.expect("failed to disable deprecated MPV events");
// -- Event handler loop --
loop {
for ObserveProperty { name, format } in observe_property_receiver.drain() {
event_context
@ -131,21 +120,17 @@ fn create_event_thread(
// even if you don't do anything with the events, it is still necessary to empty the event loop
let player_response = match event {
Event::PropertyChange { name, change, .. } => {
PlayerResponse(
Event::PropertyChange { name, change, .. } => PlayerResponse(
"mpv-prop-change",
PlayerEvent::PropChange(PlayerProprChange::from_name_value(
name.to_string(),
change,
)),
)
}
Event::EndFile(reason) => {
PlayerResponse(
),
Event::EndFile(reason) => PlayerResponse(
"mpv-event-ended",
PlayerEvent::End(PlayerEnded::from_end_reason(reason)),
)
}
),
Event::Shutdown => {
break;
}