|
@@ -188,11 +188,15 @@ bool PlayerComponent::componentInitialize()
|
|
|
|
|
|
|
|
|
|
|
|
- mpv::qt::command(m_mpv, QStringList() << "hook-add" << "on_load" << "1" << "0");
|
|
|
-
|
|
|
|
|
|
|
|
|
+#if MPV_CLIENT_API_VERSION < MPV_MAKE_VERSION(1, 100)
|
|
|
+ mpv::qt::command(m_mpv, QStringList() << "hook-add" << "on_load" << "1" << "0");
|
|
|
mpv::qt::command(m_mpv, QStringList() << "hook-add" << "on_preloaded" << "2" << "0");
|
|
|
+#else
|
|
|
+ mpv_hook_add(m_mpv, 1, "on_load", 0);
|
|
|
+ mpv_hook_add(m_mpv, 2, "on_preloaded", 0);
|
|
|
+#endif
|
|
|
|
|
|
updateAudioDeviceList();
|
|
|
setAudioConfiguration();
|
|
@@ -648,6 +652,51 @@ void PlayerComponent::handleMpvEvent(mpv_event *event)
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
+#if MPV_CLIENT_API_VERSION >= MPV_MAKE_VERSION(1, 100)
|
|
|
+ case MPV_EVENT_HOOK:
|
|
|
+ {
|
|
|
+ mpv_event_hook *hook = (mpv_event_hook *)event->data;
|
|
|
+ uint64_t id = hook->id;
|
|
|
+
|
|
|
+ if (!strcmp(hook->name, "on_load"))
|
|
|
+ {
|
|
|
+
|
|
|
+ auto resume = [=] {
|
|
|
+ QLOG_INFO() << "checking codecs";
|
|
|
+ startCodecsLoading([=] {
|
|
|
+ QLOG_INFO() << "resuming loading";
|
|
|
+ mpv_hook_continue(m_mpv, id);
|
|
|
+ });
|
|
|
+ };
|
|
|
+ if (switchDisplayFrameRate())
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ int pause = SettingsComponent::Get().value(SETTINGS_SECTION_VIDEO, "refreshrate.delay").toInt() * 1000;
|
|
|
+ QLOG_INFO() << "waiting" << pause << "msec after rate switch before loading";
|
|
|
+ QTimer::singleShot(pause, resume);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ resume();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!strcmp(hook->name, "on_preloaded"))
|
|
|
+ {
|
|
|
+ reselectStream(m_currentSubtitleStream, MediaType::Subtitle);
|
|
|
+ reselectStream(m_currentAudioStream, MediaType::Audio);
|
|
|
+ startCodecsLoading([=] {
|
|
|
+ mpv_hook_continue(m_mpv, id);
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
default:;
|
|
|
}
|
|
|
}
|