summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2017-12-17 01:25:23 +0100
committerKevin Mitchell <kevmitch@gmail.com>2018-02-13 20:16:01 -0800
commit8f9785d128eef0eae656d32d664ae1a8bff0bb12 (patch)
tree61250cdc4cd0505492e245757450e1a672713640
parentf17246fec15963e7cc098cf7ba7263ad02877b99 (diff)
downloadmpv-8f9785d128eef0eae656d32d664ae1a8bff0bb12.tar.bz2
mpv-8f9785d128eef0eae656d32d664ae1a8bff0bb12.tar.xz
lua+js: Implement utils.getpid()
Usable for uniquely identifying mpv instances from subprocesses, controlling mpv with AppleScript, ... Adds a new mp_getpid() wrapper for cross-platform reasons.
-rw-r--r--DOCS/man/javascript.rst2
-rw-r--r--DOCS/man/lua.rst4
-rw-r--r--osdep/getpid.h29
-rw-r--r--player/javascript.c8
-rw-r--r--player/lua.c8
5 files changed, 51 insertions, 0 deletions
diff --git a/DOCS/man/javascript.rst b/DOCS/man/javascript.rst
index 2ebdb15896..cd553510eb 100644
--- a/DOCS/man/javascript.rst
+++ b/DOCS/man/javascript.rst
@@ -180,6 +180,8 @@ Otherwise, where the Lua APIs return ``nil`` on error, JS returns ``undefined``.
``mp.utils.subprocess_detached(t)``
+``mp.utils.getpid()`` (LE)
+
``mp.add_hook(type, priority, fn)``
Additional utilities
diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst
index 2e354c282f..53e6d1db21 100644
--- a/DOCS/man/lua.rst
+++ b/DOCS/man/lua.rst
@@ -682,6 +682,10 @@ strictly part of the guaranteed API.
The function returns ``nil``.
+``utils.getpid()``
+ Returns the process ID of the running mpv process. This can be used to identify
+ the calling mpv when launching (detached) subprocesses.
+
``utils.parse_json(str [, trail])``
Parses the given string argument as JSON, and returns it as a Lua table. On
error, returns ``nil, error``. (Currently, ``error`` is just a string
diff --git a/osdep/getpid.h b/osdep/getpid.h
new file mode 100644
index 0000000000..ace5e292b6
--- /dev/null
+++ b/osdep/getpid.h
@@ -0,0 +1,29 @@
+/*
+ * getpid wrapper
+ *
+ * This file is part of mpv.
+ *
+ * mpv 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.
+ *
+ * mpv 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 mpv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#ifdef _WIN32
+#include <windows.h>
+#define mp_getpid() GetCurrentProcessId()
+#else // POSIX
+#include <sys/types.h>
+#include <unistd.h>
+#define mp_getpid() getpid()
+#endif
diff --git a/player/javascript.c b/player/javascript.c
index 3de900bdb1..9afc5f10da 100644
--- a/player/javascript.c
+++ b/player/javascript.c
@@ -40,6 +40,7 @@
#include "osdep/subprocess.h"
#include "osdep/timer.h"
#include "osdep/threads.h"
+#include "osdep/getpid.h"
#include "stream/stream.h"
#include "sub/osd.h"
#include "core.h"
@@ -990,6 +991,12 @@ static void script_subprocess_detached(js_State *J, void *af)
af_subprocess_common(J, 1, af);
}
+// args: none
+static void script_getpid(js_State *J)
+{
+ js_pushnumber(J, mp_getpid());
+}
+
// args: prefixed file name, data (c-str)
static void script_write_file(js_State *J, void *af)
{
@@ -1296,6 +1303,7 @@ static const struct fn_entry utils_fns[] = {
AF_ENTRY(get_user_path, 1),
AF_ENTRY(subprocess, 1),
AF_ENTRY(subprocess_detached, 1),
+ FN_ENTRY(getpid, 0),
FN_ENTRY(read_file, 2),
AF_ENTRY(write_file, 2),
diff --git a/player/lua.c b/player/lua.c
index d928fdfa46..778830976c 100644
--- a/player/lua.c
+++ b/player/lua.c
@@ -44,6 +44,7 @@
#include "osdep/subprocess.h"
#include "osdep/timer.h"
#include "osdep/threads.h"
+#include "osdep/getpid.h"
#include "stream/stream.h"
#include "sub/osd.h"
#include "core.h"
@@ -1252,6 +1253,12 @@ static int script_subprocess_detached(lua_State *L)
return 1;
}
+static int script_getpid(lua_State *L)
+{
+ lua_pushnumber(L, mp_getpid());
+ return 1;
+}
+
static int script_parse_json(lua_State *L)
{
mp_lua_optarg(L, 2);
@@ -1338,6 +1345,7 @@ static const struct fn_entry utils_fns[] = {
FN_ENTRY(join_path),
FN_ENTRY(subprocess),
FN_ENTRY(subprocess_detached),
+ FN_ENTRY(getpid),
FN_ENTRY(parse_json),
FN_ENTRY(format_json),
{0}