Commit 421b81db authored by Thomas Guillem's avatar Thomas Guillem

contribs: use libplacebo on Windows

parent 64e17c52
From 185f0ee9dc6ca6b46a43c669d98b5b63020a04e5 Mon Sep 17 00:00:00 2001
From 2f3ec424ca2dcfdd1abe5f1774c35aea1c9b0088 Mon Sep 17 00:00:00 2001
From: Thomas Guillem <thomas@gllm.fr>
Date: Mon, 30 Oct 2017 14:32:03 +0100
Subject: [PATCH] build: use a Makefile
Subject: [PATCH 1/2] build: use a Makefile
Only needed for VLC 3.0
---
......@@ -13,7 +13,7 @@ Only needed for VLC 3.0
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..36e7f26
index 0000000..13f661b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,38 @@
......
From 5fa4c39b3d5d93e7a5eaf16a813d8af80f59f254 Mon Sep 17 00:00:00 2001
From: Thomas Guillem <thomas@gllm.fr>
Date: Mon, 13 Nov 2017 15:00:04 +0100
Subject: [PATCH 2/2] build: fix win32 build
- Remove pthread (disable TA_MEMORY_DEBUGGING and always init/deinit).
- Remove msvcr100.dll dependency. This dell is not avaible on old Windows
versions. Don't set locale on Windows, this doesn't seem to have any
consequences with VLC on windows (tested with US/FR locales).
---
Makefile | 9 ++++++++-
src/context.c | 12 ++++++++++++
src/osdep/printf_useloc_win.c | 18 ++++++------------
src/ta/ta.c | 4 ++++
4 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/Makefile b/Makefile
index 13f661b..0d29744 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,13 @@
SRCS := colorspace.c common.c context.c dispatch.c filters.c ra.c shaders.c \
shaders/colorspace.c shaders/sampling.c spirv.c bstr/bstr.c siphash.c \
- ta/ta.c ta/ta_utils.c ta/talloc.c osdep/printf_useloc_posix.c
+ ta/ta.c ta/ta_utils.c ta/talloc.c
+
+ifdef HAVE_WIN32
+SRCS += osdep/printf_useloc_win.c
+else
+SRCS += osdep/printf_useloc_posix.c
+lpthread_libs = $(shell $(LD) -lpthread && echo "-lpthread" || echo "")
+endif
OBJS = $(patsubst %.c, $(OBJDIR)src/%.o, $(SRCS))
diff --git a/src/context.c b/src/context.c
index a325fb8..caaed3f 100644
--- a/src/context.c
+++ b/src/context.c
@@ -17,13 +17,17 @@
#include <stdio.h>
#include <locale.h>
+#ifdef _WIN32
#include <pthread.h>
+#endif
#include "common.h"
#include "context.h"
+#ifndef _WIN32
static pthread_mutex_t pl_ctx_mutex = PTHREAD_MUTEX_INITIALIZER;
static int pl_ctx_refcount;
+#endif
static void global_init(void)
{
@@ -59,11 +63,15 @@ struct pl_context *pl_context_create(int api_ver,
abort();
}
+#ifdef _WIN32
+ global_init();
+#else
// Do global initialization only when refcount is 0
pthread_mutex_lock(&pl_ctx_mutex);
if (pl_ctx_refcount++ == 0)
global_init();
pthread_mutex_unlock(&pl_ctx_mutex);
+#endif
struct pl_context *ctx = talloc_zero(NULL, struct pl_context);
ctx->params = *PL_DEF(params, &pl_context_default_params);
@@ -77,10 +85,14 @@ void pl_context_destroy(struct pl_context **ctx)
TA_FREEP(ctx);
// Do global uninitialization only when refcount reaches 0
+#ifdef _WIN32
+ global_uninit();
+#else
pthread_mutex_lock(&pl_ctx_mutex);
if (--pl_ctx_refcount == 0)
global_uninit();
pthread_mutex_unlock(&pl_ctx_mutex);
+#endif
}
static FILE *default_stream(void *stream, enum pl_log_level level)
diff --git a/src/osdep/printf_useloc_win.c b/src/osdep/printf_useloc_win.c
index 0c4c3be..fc56f90 100644
--- a/src/osdep/printf_useloc_win.c
+++ b/src/osdep/printf_useloc_win.c
@@ -16,43 +16,37 @@
*/
#include <stdlib.h>
-#include <locale.h>
#include "osdep/printf.h"
-
-static _locale_t cloc;
+#include <locale.h>
+#include <windows.h>
void printf_c_init()
{
- cloc = _create_locale(LC_ALL, "C");
- if (!cloc)
- abort();
}
void printf_c_uninit()
{
- _free_locale(cloc);
- cloc = (_locale_t) 0;
}
int vprintf_c(const char *format, va_list ap)
{
- return _vprintf_l(format, cloc, ap);
+ return vprintf(format, ap);
}
int vfprintf_c(FILE *stream, const char *format, va_list ap)
{
- return _vfprintf_l(stream, format, cloc, ap);
+ return vfprintf(stream, format, ap);
}
int vsprintf_c(char *str, const char *format, va_list ap)
{
- return _vsprintf_l(str, format, cloc, ap);
+ return vsprintf(str, format, ap);
}
int vsnprintf_c(char *str, size_t size, const char *format, va_list ap)
{
- return _vsnprintf_l(str, size, format, cloc, ap);
+ return vsnprintf(str, size, format, ap);
}
#define WRAP(fn, ...) \
diff --git a/src/ta/ta.c b/src/ta/ta.c
index c6f8116..dec9cb7 100644
--- a/src/ta/ta.c
+++ b/src/ta/ta.c
@@ -29,6 +29,10 @@
#define TA_MEMORY_DEBUGGING
#endif
+#ifdef _WIN32
+#undef TA_MEMORY_DEBUGGING
+#endif
+
struct ta_header {
size_t size; // size of the user allocation
struct ta_header *prev; // ring list containing siblings
--
2.11.0
......@@ -4,12 +4,14 @@ PLACEBO_VERSION := 0.1.2
PLACEBO_URL := https://github.com/haasn/libplacebo/archive/v$(PLACEBO_VERSION).tar.gz
PLACEBO_ARCHIVE = libplacebo-$(PLACEBO_VERSION).tar.gz
ifndef HAVE_WIN32
ifdef HAVE_WIN32
LIBPLACEBO_WIN32 = HAVE_WIN32=1
endif
PKGS += libplacebo
ifeq ($(call need_pkg,"libplacebo"),)
PKGS_FOUND += libplacebo
endif
endif
PLACEBOCONF := --prefix="$(PREFIX)" \
--libdir lib \
......@@ -23,6 +25,9 @@ $(TARBALLS)/$(PLACEBO_ARCHIVE):
libplacebo: $(PLACEBO_ARCHIVE) .sum-libplacebo
$(UNPACK)
$(APPLY) $(SRC)/libplacebo/0001-build-use-a-Makefile.patch
ifdef HAVE_WIN32
$(APPLY) $(SRC)/libplacebo/0002-build-fix-win32-build.patch
endif
$(MOVE)
.libplacebo: libplacebo
......@@ -30,5 +35,5 @@ libplacebo: $(PLACEBO_ARCHIVE) .sum-libplacebo
# we don't want to depend on meson/ninja for VLC 3.0
#cd $< && $(HOSTVARS) meson $(PLACEBOCONF) build
#cd $< && cd build && ninja install
cd $< && $(HOSTVARS_PIC) PREFIX=$(PREFIX) make install
cd $< && $(HOSTVARS_PIC) PREFIX=$(PREFIX) $(LIBPLACEBO_WIN32) make install
touch $@
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment