[vlc-devel] [PATCH] inhibit: add UIKit-based inhibiter
Alexandre Janniaux
ajanni at videolabs.io
Wed Apr 14 12:13:53 UTC 2021
The inhibiter code is taken from VLCKit inhibiter's handling, and is
meant to replace this handling.
---
modules/misc/Makefile.am | 12 ++++-
modules/misc/inhibit/uikit-inhibit.m | 73 ++++++++++++++++++++++++++++
2 files changed, 84 insertions(+), 1 deletion(-)
create mode 100644 modules/misc/inhibit/uikit-inhibit.m
diff --git a/modules/misc/Makefile.am b/modules/misc/Makefile.am
index bc3252ab22..ef024f3a20 100644
--- a/modules/misc/Makefile.am
+++ b/modules/misc/Makefile.am
@@ -52,6 +52,17 @@ libiokit_inhibit_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,-framework,CoreFoundation
misc_LTLIBRARIES += libiokit_inhibit_plugin.la
endif
+libuikit_inhibit_plugin_la_SOURCES = misc/inhibit/uikit-inhibit.m
+libuikit_inhibit_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,-framework,UIKit,-framework,Foundation
+libuikit_inhibit_plugin_la_OBJCFLAGS = $(AM_OBJCFLAGS) -fobjc-arc
+if HAVE_IOS
+misc_LTLIBRARIES += libuikit_inhibit_plugin.la
+endif
+
+if HAVE_TVOS
+misc_LTLIBRARIES += libuikit_inhibit_plugin.la
+endif
+
libxdg_screensaver_plugin_la_SOURCES = misc/inhibit/xdg.c
if HAVE_XCB
if !HAVE_WIN32
@@ -129,4 +140,3 @@ libmedialibrary_plugin_la_LIBADD = $(MEDIALIBRARY_LIBS)
libmedialibrary_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(miscdir)'
EXTRA_LTLIBRARIES += libmedialibrary_plugin.la
misc_LTLIBRARIES += $(LTLIBmedialibrary)
-
diff --git a/modules/misc/inhibit/uikit-inhibit.m b/modules/misc/inhibit/uikit-inhibit.m
new file mode 100644
index 0000000000..06c95077b5
--- /dev/null
+++ b/modules/misc/inhibit/uikit-inhibit.m
@@ -0,0 +1,73 @@
+/*****************************************************************************
+ * Copyright © 2021 Videolabs
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+/**
+ * \file uikit-inhibit.m
+ * \brief iOS display and idle sleep inhibitor using UIKit
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
+#include <vlc_inhibit.h>
+#include <vlc_vout_window.h>
+
+#include <UIKit/UIKit.h>
+
+static void UpdateInhibit(vlc_inhibit_t *ih, unsigned mask)
+{
+ [UIApplication sharedApplication].idleTimerDisabled =
+ (mask & VLC_INHIBIT_DISPLAY) == VLC_INHIBIT_DISPLAY;
+}
+
+static int OpenInhibit(vlc_object_t *obj)
+{
+ vlc_inhibit_t *ih = (vlc_inhibit_t *)obj;
+ vout_window_t *wnd = vlc_inhibit_GetWindow(ih);
+ if (wnd->type != VOUT_WINDOW_TYPE_NSOBJECT)
+ return VLC_EGENERIC;
+
+ UIView * view = (__bridge UIView*)wnd->handle.nsobject;
+
+ if (unlikely(![view respondsToSelector:@selector(isKindOfClass:)]))
+ return VLC_EGENERIC;
+
+ if (![view isKindOfClass:[UIView class]])
+ return VLC_EGENERIC;
+
+ ih->inhibit = UpdateInhibit;
+ return VLC_SUCCESS;
+}
+
+static void CloseInhibit(vlc_object_t *obj)
+{
+ vlc_inhibit_t *ih = (vlc_inhibit_t*)obj;
+ [UIApplication sharedApplication].idleTimerDisabled = NO;
+}
+
+vlc_module_begin()
+ set_shortname(N_("iOS sleep inhibition"))
+ set_description(N_("iSO screen sleep inhibition"))
+ set_category(CAT_ADVANCED)
+ set_subcategory(SUBCAT_ADVANCED_MISC)
+ set_capability("inhibit", 10)
+ set_callbacks(OpenInhibit, CloseInhibit)
+vlc_module_end()
--
2.31.1
More information about the vlc-devel
mailing list