Sfoglia il codice sorgente

adjust file locations to be more portable

jp9000 12 anni fa
parent
commit
8847d11e8e

+ 0 - 0
build/bin/32bit/.gitignore


+ 0 - 0
build/bin/64bit/.gitignore


+ 0 - 0
build/draw.effect → build/data/test-input/draw.effect


+ 0 - 0
build/test.effect → build/data/test-input/test.effect


+ 0 - 0
build/data/effects/default.effect → build/libobs/default.effect


+ 11 - 9
build/makefile.am

@@ -1,11 +1,13 @@
-EXTRA_DIST = data
+if !OS_WIN
+obs_plugin_datadir = $(datadir)/obs-plugins
+obs_plugin_data_testdir = $(obs_plugin_datadir)/test-input
+data_libobsdir = $(datadir)/libobs
 
-# just be cheap and do a full recursive copy.
-install-data-local:
-	$(INSTALL) -d $(DESTDIR)$(datadir)/obsproject
-	$(INSTALL) -d $(DESTDIR)$(datadir)/obsproject/data
-	$(INSTALL) -d $(DESTDIR)$(datadir)/obsproject/data/effects
-	cp -R $(srcdir)/data/* $(DESTDIR)$(datadir)/obsproject/data
+obs_plugin_data_test_DATA = data/test-input/draw.effect \
+			    data/test-input/test.effect
+data_libobs_DATA = libobs/default.effect
 
-uninstall-local:
-	rm -rf $(DESTDIR)$(datadir)/obsproject
+#uninstall-local:
+#	rm -r $(DESTDIR)$(obs_plugin_datadir)
+#	rm -r $(DESTDIR)$(data_libobsdir)
+endif

+ 0 - 0
build/plugins/32bit/.gitignore


+ 0 - 0
build/plugins/64bit/.gitignore


+ 28 - 8
configure.ac

@@ -2,9 +2,10 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.67])
-AC_INIT([obs], [0.0.1], [[email protected]])
+AC_INIT([obs-studio], [0.0.1], [[email protected]])
 AC_CONFIG_SRCDIR([libobs/obs.c])
 AC_CONFIG_MACRO_DIR([m4])
+# AC_CONFIG_HEADERS([config.h])
 AC_CANONICAL_HOST
 
 LT_INIT
@@ -21,6 +22,21 @@ AX_CXX_COMPILE_STDCXX_11
 # AX_EXT
 AX_APPEND_FLAG(["-msse2"], [CPPFLAGS])
 
+# currently only x86 and x86_64 are supported architectures
+case $host in
+	i?86*)
+		AM_CONDITIONAL([ARCH_X86],    true)
+		AM_CONDITIONAL([ARCH_X86_64], false)
+		;;
+	amd64* | x86_64*)
+		AM_CONDITIONAL([ARCH_X86],    false)
+		AM_CONDITIONAL([ARCH_X86_64], true)
+		;;
+	*)
+		AC_MSG_ERROR([host architecture not currently supported])
+		;;
+esac
+
 case $host_os in
 	mingw*)
 		AM_CONDITIONAL([OS_WIN], true)
@@ -40,13 +56,17 @@ case $host_os in
 		;;
 esac
 
-PKG_CHECK_MODULES([ffmpeg],
-		  [libavcodec
-		   libavformat
-		   libavutil
-		   libswscale
-		   libswresample
-		   libavfilter])
+AC_CHECK_HEADER([libavcodec/avcodec.h])
+AC_CHECK_HEADER([libavformat/avformat.h])
+AC_CHECK_HEADER([libavutil/avutil.h])
+AC_CHECK_HEADER([libavutil/channel_layout.h])
+AC_CHECK_HEADER([libswscale/swscale.h])
+AC_CHECK_HEADER([libswresample/swresample.h])
+AC_CHECK_LIB([avcodec], [avcodec_find_encoder_by_name])
+AC_CHECK_LIB([avformat], [av_guess_format])
+AC_CHECK_LIB([avutil], [av_samples_alloc])
+AC_CHECK_LIB([swscale], [sws_scale])
+AC_CHECK_LIB([swresample], [swr_convert])
 
 # Checks for header files.
 AC_PATH_X

+ 12 - 2
libobs-opengl/makefile.am

@@ -1,7 +1,18 @@
 INCLUDES = -iquote$(top_srcdir)/libobs -isystem./glew/include
 AM_CFLAGS = -DGLEW_NO_GLU -DGLEW_STATIC
 
-lib_LTLIBRARIES = libobs-opengl.la
+if OS_WIN
+if ARCH_X86
+libobs_opengldir = ../build/bin/32bit
+else
+libobs_opengldir = ../build/bin/64bit
+endif
+else
+libobs_opengldir = $(libdir)
+endif
+
+libobs_opengl_LTLIBRARIES = libobs-opengl.la
+
 libobs_opengl_la_LDFLAGS = -no-undefined
 libobs_opengl_la_LIBADD = ../libobs/libobs.la
 if OS_WIN
@@ -19,7 +30,6 @@ libobs_opengl_la_SOURCES = gl-helpers.c \
 			   gl-vertexbuffer.c \
 			   gl-zstencil.c \
 			   glew/src/glew.c
-
 if OS_WIN
 libobs_opengl_la_SOURCES += gl-windows.c
 endif

+ 16 - 2
libobs/makefile.am

@@ -1,4 +1,14 @@
-lib_LTLIBRARIES = libobs.la
+if OS_WIN
+if ARCH_X86
+libobsdir = ../build/bin/32bit
+else
+libobsdir = ../build/bin/64bit
+endif
+else
+libobsdir = $(libdir)
+endif
+
+libobs_LTLIBRARIES = libobs.la
 libobs_la_LDFLAGS = -no-undefined --version-info 0:0:0
 
 if OS_WIN
@@ -45,5 +55,9 @@ libobs_la_SOURCES = obs.c \
 		    graphics/vec4.c
 
 if OS_WIN
-libobs_la_SOURCES += util/platform-windows.c
+libobs_la_SOURCES += util/platform-windows.c obs-windows.c
+endif
+
+if OS_NIX
+libobs_la_SOURCES += util/platform-nix.c obs-nix.c
 endif

+ 4 - 0
libobs/obs-module.c

@@ -76,12 +76,16 @@ complete:
 	dstr_free(&enum_name);
 }
 
+extern char *find_plugin(const char *plugin);
+
 int obs_load_module(const char *path)
 {
 	struct obs_module mod;
 	bool (*module_load)(void) = NULL;
+	char *plugin_path = find_plugin(path);
 
 	mod.module = os_dlopen(path);
+	bfree(plugin_path);
 	if (!mod.module)
 		return MODULE_FILENOTFOUND;
 

+ 51 - 0
libobs/obs-nix.c

@@ -0,0 +1,51 @@
+/******************************************************************************
+    Copyright (C) 2013 by Hugh Bailey <[email protected]>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#include <stdlib.h>
+
+#include "util/dstr.h"
+#include "obs.h"
+
+/*
+ *   /usr/local/lib/obs-plugins
+ *   /usr/lib/obs-plugins
+ */
+char *find_plugin(const char *plugin)
+{
+	/* TODO */
+	return NULL;
+}
+
+/*
+ *   /usr/local/share/libobs
+ *   /usr/share/libobs
+ */
+char *find_libobs_data_file(const char *file)
+{
+	/* TODO */
+	return NULL;
+}
+
+/*
+ *   /usr/local/share/obs-plugins
+ *   /usr/share/obs-plugins
+ */
+char *obs_find_plugin_file(const char *file)
+{
+	/* TODO */
+	return NULL;
+}

+ 52 - 0
libobs/obs-windows.c

@@ -0,0 +1,52 @@
+/******************************************************************************
+    Copyright (C) 2013 by Hugh Bailey <[email protected]>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+******************************************************************************/
+
+#include "util/platform.h"
+#include "util/dstr.h"
+#include "obs.h"
+#include "obs-data.h"
+
+/* on windows, plugin files are located in [base directory]/plugins/[bit] */
+char *find_plugin(const char *plugin)
+{
+	struct dstr path;
+#ifdef _WIN64
+	dstr_init_copy(&path, "../../plugins/64bit/");
+#else
+	dstr_init_copy(&path, "../../plugins/32bit/");
+#endif
+	dstr_cat(&path, plugin);
+	return path.array;
+}
+
+/* on windows, points to [base directory]/libobs */
+char *find_libobs_data_file(const char *file)
+{
+	struct dstr path;
+	dstr_init_copy(&path, "../../libobs/");
+	dstr_cat(&path, file);
+	return path.array;
+}
+
+/* on windows, data files should always be in [base directory]/data */
+char *obs_find_plugin_file(const char *file)
+{
+	struct dstr path;
+	dstr_init_copy(&path, "../../data/");
+	dstr_cat(&path, file);
+	return path.array;
+}

+ 6 - 2
libobs/obs.c

@@ -21,6 +21,8 @@
 
 struct obs_data *obs = NULL;
 
+extern char *find_libobs_data_file(const char *file);
+
 static bool obs_init_graphics(const char *graphics_module,
 		struct gs_init_data *graphics_data, struct video_info *vi)
 {
@@ -46,8 +48,10 @@ static bool obs_init_graphics(const char *graphics_module,
 	}
 
 	if (success) {
-		obs->default_effect = gs_create_effect_from_file(
-				"data/effects/default.effect", NULL);
+		char *filename = find_libobs_data_file("default.effect");
+		obs->default_effect = gs_create_effect_from_file( filename,
+				NULL);
+		bfree(filename);
 		if (!obs->default_effect)
 			success = false;
 	}

+ 8 - 0
libobs/obs.h

@@ -184,6 +184,14 @@ EXPORT media_t obs_media(void);
 EXPORT void         obs_set_primary_source(obs_source_t source);
 EXPORT obs_source_t obs_get_primary_source(void);
 
+/**
+ * Returns the location of a plugin data file.
+ *
+ *   file: Name of file to locate.  For example, "myplugin/mydata.data"
+ *   returns: Output string, or NULL if not found.  Use bfree to free string.
+ */
+EXPORT char *obs_find_plugin_file(const char *file);
+
 
 /* ------------------------------------------------------------------------- */
 /* Display context */

+ 73 - 0
libobs/util/platform-nix.c

@@ -0,0 +1,73 @@
+/******************************************************************************
+  Copyright (c) 2013 by Hugh Bailey <[email protected]>
+
+  This software is provided 'as-is', without any express or implied
+  warranty. In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+     1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+
+     2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+
+     3. This notice may not be removed or altered from any source
+     distribution.
+******************************************************************************/
+
+#include <stdlib.h>
+
+#include "dstr.h"
+#include "platform.h"
+
+void *os_dlopen(const char *path)
+{
+	/* TODO */
+	return NULL;
+}
+
+void *os_dlsym(void *module, const char *func)
+{
+	/* TODO */
+	return NULL;
+}
+
+void os_dlclose(void *module)
+{
+	/* TODO */
+}
+
+void os_sleepto_ns(uint64_t time_target)
+{
+	/* TODO */
+}
+
+void os_sleep_ms(uint32_t duration)
+{
+	/* TODO */
+}
+
+uint64_t os_gettime_ns(void)
+{
+	/* TODO */
+	return 0;
+}
+
+uint64_t os_gettime_ms(void)
+{
+	/* TODO */
+	return 0;
+}
+
+/* should return $HOME/ */
+char *os_get_home_path(void)
+{
+	/* TODO */
+	return NULL;
+}

+ 26 - 2
libobs/util/platform-windows.c

@@ -22,9 +22,12 @@
 ******************************************************************************/
 
 #include <windows.h>
+#include <shellapi.h>
+#include <shlobj.h>
+
 #include "base.h"
 #include "platform.h"
-#include "bmem.h"
+#include "dstr.h"
 
 #include "../../deps/w32-pthreads/pthread.h"
 
@@ -68,7 +71,16 @@ void *os_dlopen(const char *path)
 
 void *os_dlsym(void *module, const char *func)
 {
-	return (void*)GetProcAddress(module, func);
+	struct dstr dll_name;
+	void *handle;
+
+	dstr_init_copy(&dll_name, module);
+	dstr_cat(&dll_name, ".dll");
+
+	handle = (void*)GetProcAddress(module, func);
+
+	dstr_free(&dll_name);
+	return handle;
 }
 
 void os_dlclose(void *module)
@@ -136,6 +148,18 @@ uint64_t os_gettime_ms(void)
 	return time_val;
 }
 
+/* returns %appdata% on windows */
+char *os_get_home_path(void)
+{
+	char *out;
+	wchar_t path_utf16[MAX_PATH];
+	SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT,
+			path_utf16);
+
+	os_wcs_to_utf8(path_utf16, 0, &out);
+	return out;
+}
+
 #ifdef PTW32_STATIC_LIB
 
 BOOL WINAPI DllMain(HINSTANCE hinst_dll, DWORD reason, LPVOID reserved)

+ 2 - 0
libobs/util/platform.h

@@ -70,6 +70,8 @@ EXPORT void os_sleep_ms(uint32_t duration);
 EXPORT uint64_t os_gettime_ns(void);
 EXPORT uint64_t os_gettime_ms(void);
 
+EXPORT char *os_get_home_path(void);
+
 #ifdef _MSC_VER
 EXPORT int fseeko(FILE *stream, off_t offset, int whence);
 EXPORT off_t ftello(FILE *stream);

+ 12 - 3
test/test-input/makefile.am

@@ -1,12 +1,21 @@
 INCLUDES = -iquote$(top_srcdir)/libobs
-lib_LTLIBRARIES = libtest-input.la
 
-libtest_input_la_LDFLAGS = -no-undefined
+if OS_WIN
+if ARCH_X86
+libtestdir = ../../build/plugins/32bit
+else
+libtestdir = ../../build/plugins/64bit
+endif
+else
+libtestdir = $(libdir)/obs-plugins
+endif
 
+pkglib_LTLIBRARIES = libtest-input.la
+
+libtest_input_la_LDFLAGS = -no-undefined
 if OS_WIN
 libtest_input_la_LDFLAGS += -avoid-version
 endif
-
 libtest_input_la_LIBADD = $(top_srcdir)/libobs/libobs.la
 libtest_input_la_SOURCES = test-filter.c \
 			   test-input.c \

+ 5 - 1
test/test-input/test-filter.c

@@ -3,12 +3,16 @@
 struct test_filter *test_create(const char *settings, obs_source_t source)
 {
 	struct test_filter *tf = bmalloc(sizeof(struct test_filter));
+	char *effect_file;
 	memset(tf, 0, sizeof(struct test_filter));
 
 	gs_entercontext(obs_graphics());
 
+	effect_file = obs_find_plugin_file("test-input/test.effect");
+
 	tf->source = source;
-	tf->whatever = gs_create_effect_from_file("test.effect", NULL);
+	tf->whatever = gs_create_effect_from_file(effect_file, NULL);
+	bfree(effect_file);
 	if (!tf->whatever) {
 		test_destroy(tf);
 		return NULL;

+ 5 - 1
test/test-input/test-random.c

@@ -5,6 +5,7 @@ struct random_tex *random_create(const char *settings, obs_source_t source)
 {
 	struct random_tex *rt = bmalloc(sizeof(struct random_tex));
 	uint32_t *pixels = bmalloc(20*20*4);
+	char *effect_file;
 	size_t x, y;
 
 	memset(rt, 0, sizeof(struct random_tex));
@@ -31,7 +32,10 @@ struct random_tex *random_create(const char *settings, obs_source_t source)
 		return NULL;
 	}
 
-	rt->whatever = gs_create_effect_from_file("draw.effect", NULL);
+	effect_file = obs_find_plugin_file("test-input/draw.effect");
+	rt->whatever = gs_create_effect_from_file(effect_file, NULL);
+	bfree(effect_file);
+
 	if (!rt->whatever) {
 		random_destroy(rt);
 		return NULL;

+ 3 - 1
test/win/makefile.am

@@ -1,6 +1,8 @@
 INCLUDES = -iquote$(top_srcdir)/libobs
 AM_CPPFLAGS = -DUNICODE -D_UNICODE
-bin_PROGRAMS = test
+
+builddir = ../../build
+build_PROGRAMS = test
 test_LDADD = $(top_srcdir)/libobs/libobs.la
 test_LDFLAGS = -mwindows
 test_SOURCES = test.cpp

+ 2 - 2
test/win/test.cpp

@@ -84,7 +84,7 @@ static void CreateOBS(HWND hwnd)
 	gsid.num_backbuffers = 2;
 	gsid.format          = GS_RGBA;
 
-	if (!obs_startup("libobs-opengl.dll", &gsid, &vi, NULL))
+	if (!obs_startup("libobs-opengl", &gsid, &vi, NULL))
 		throw "Couldn't create OBS";
 }
 
@@ -146,7 +146,7 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
 
 		/* ------------------------------------------------------ */
 		/* load module */
-		if (obs_load_module("test-input.dll") != 0)
+		if (obs_load_module("test-input") != 0)
 			throw "Couldn't load module";
 
 		/* ------------------------------------------------------ */

+ 4 - 4
vs/2010/libobs-d3d11/libobs-d3d11.vcxproj

@@ -115,7 +115,7 @@
       <AdditionalDependencies>d3d11.lib;dxgi.lib;d3dcompiler.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -135,7 +135,7 @@
       <AdditionalDependencies>d3d11.lib;dxgi.lib;d3dcompiler.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -159,7 +159,7 @@
       <AdditionalDependencies>d3d11.lib;dxgi.lib;d3dcompiler.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -183,7 +183,7 @@
       <AdditionalDependencies>d3d11.lib;dxgi.lib;d3dcompiler.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 4 - 4
vs/2010/libobs-opengl/libobs-opengl.vcxproj

@@ -92,7 +92,7 @@
       <AdditionalDependencies>glew32sd.lib;opengl32.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -113,7 +113,7 @@
       <AdditionalDependencies>glew32sd.lib;opengl32.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -138,7 +138,7 @@
       <AdditionalDependencies>glew32s.lib;opengl32.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -163,7 +163,7 @@
       <AdditionalDependencies>glew32s.lib;opengl32.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>

+ 5 - 4
vs/2010/libobs/libobs.vcxproj

@@ -92,6 +92,7 @@
     <ClCompile Include="..\..\..\libobs\obs-scene.c" />
     <ClCompile Include="..\..\..\libobs\obs-source.c" />
     <ClCompile Include="..\..\..\libobs\obs-video.c" />
+    <ClCompile Include="..\..\..\libobs\obs-windows.c" />
     <ClCompile Include="..\..\..\libobs\obs.c" />
     <ClCompile Include="..\..\..\libobs\util\base.c" />
     <ClCompile Include="..\..\..\libobs\util\bmem.c" />
@@ -187,7 +188,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -208,7 +209,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -233,7 +234,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -258,7 +259,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 3 - 0
vs/2010/libobs/libobs.vcxproj.filters

@@ -302,5 +302,8 @@
     <ClCompile Include="..\..\..\libobs\media-io\audio-resampler-ffmpeg.c">
       <Filter>media-io\Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\libobs\obs-windows.c">
+      <Filter>libobs\Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 4 - 4
vs/2010/test-input/test-input.vcxproj

@@ -101,7 +101,7 @@
       <AdditionalDependencies>libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/plugins/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -121,7 +121,7 @@
       <AdditionalDependencies>libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/plugins/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -145,7 +145,7 @@
       <AdditionalDependencies>libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/plugins/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -169,7 +169,7 @@
       <AdditionalDependencies>libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/plugins/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 4 - 4
vs/2010/wintest/wintest.vcxproj

@@ -94,7 +94,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -114,7 +114,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -138,7 +138,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/32bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -162,7 +162,7 @@
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/$(TargetName)$(TargetExt)"</Command>
+      <Command>copy "$(OutDir)$(TargetName)$(TargetExt)" "../../../build/bin/64bit/$(TargetName)$(TargetExt)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />