Changes of Revision 7

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,12 @@
2
 -------------------------------------------------------------------
3
+Thu Feb 12 07:15:19 UTC 2015 - jimmy@boombatower.com
4
+
5
+- Update to 0.8.2 release.
6
+  https://github.com/jp9000/obs-studio/releases/tag/0.8.2
7
+  https://github.com/jp9000/obs-studio/releases/tag/0.8.1
8
+  https://github.com/jp9000/obs-studio/releases/tag/0.8.0
9
+
10
+-------------------------------------------------------------------
11
 Thu Jan 15 11:05:44 UTC 2015 - jimmy@boombatower.com
12
 
13
 - Update to 0.7.3 release.
14
obs-studio.spec Changed
34
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        0.7.3+git20150114.d54b3cc
4
+Version:        0.8.2+git20150211.6099c65
5
 Release:        0
6
 Summary:        A recording/broadcasting program
7
 
8
@@ -7,8 +7,6 @@
9
 License:        GPL-2.0
10
 URL:            https://obsproject.com/
11
 Source:         %{name}-%{version}.tar.xz
12
-# PATCH-FIX-OPENSUSE obs-studio-allow-OBS_VERSION-to-be-set.patch jimmy@boombatower.com -- Allow OBS_VERSION to be set to assist in packaging.
13
-Patch0:         obs-studio-allow-OBS_VERSION-to-be-set.patch
14
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-build
15
 
16
 BuildRequires:  cmake
17
@@ -41,7 +39,6 @@
18
 
19
 %prep
20
 %setup -q
21
-%patch0 -p1
22
 
23
 %build
24
 mkdir -p build && cd build
25
@@ -49,7 +46,7 @@
26
 cmake \
27
   -DUNIX_STRUCTURE=1 \
28
   -DCMAKE_INSTALL_PREFIX=/usr \
29
-  -DOBS_VERSION="%{version}" \
30
+  -DOBS_VERSION_OVERRIDE="%{version}" \
31
   ..
32
 
33
 %install
34
obs-studio-allow-OBS_VERSION-to-be-set.patch Deleted
47
 
1
@@ -1,45 +0,0 @@
2
-From 0245e3b43ed3c48871522cd7720b78673415ddb8 Mon Sep 17 00:00:00 2001
3
-From: Jimmy Berry <jimmy@boombatower.com>
4
-Date: Fri, 30 Jan 2015 14:04:54 -0600
5
-Subject: [PATCH] Allow OBS_VERSION to be set to assist in packaging.
6
-
7
----
8
- cmake/Modules/ObsCpack.cmake | 20 +++++++++++++-------
9
- 1 file changed, 13 insertions(+), 7 deletions(-)
10
-
11
-diff --git a/cmake/Modules/ObsCpack.cmake b/cmake/Modules/ObsCpack.cmake
12
-index cb5e85a..6de6019 100644
13
---- a/cmake/Modules/ObsCpack.cmake
14
-+++ b/cmake/Modules/ObsCpack.cmake
15
-@@ -14,15 +14,21 @@ set(CPACK_PACKAGE_VERSION_MINOR "0")
16
- set(CPACK_PACKAGE_VERSION_PATCH "1")
17
- set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
18
- 
19
--if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
20
--  execute_process(COMMAND git describe --always --tags --dirty=-modified
21
--      OUTPUT_VARIABLE OBS_VERSION
22
--      WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
23
--      OUTPUT_STRIP_TRAILING_WHITESPACE)
24
--else()
25
--  set(OBS_VERSION "${CPACK_PACKAGE_VERSION}")
26
-+if(NOT DEFINED OBS_VERSION)
27
-+  if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
28
-+      execute_process(COMMAND git describe --always --tags --dirty=-modified
29
-+          OUTPUT_VARIABLE OBS_VERSION
30
-+          WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
31
-+          OUTPUT_STRIP_TRAILING_WHITESPACE)
32
-+  endif()
33
-+
34
-+  # Fallback to static version when git is either not available or fails.
35
-+  if("${OBS_VERSION}" STREQUAL "")
36
-+      set(OBS_VERSION "${CPACK_PACKAGE_VERSION}")
37
-+  endif()
38
- endif()
39
- 
40
-+MESSAGE(STATUS "OBS_VERSION: ${OBS_VERSION}")
41
- 
42
- if(INSTALLER_RUN)
43
-   set(CPACK_PACKAGE_EXECUTABLES
44
--- 
45
-2.1.4
46
-
47
_service Changed
10
 
1
@@ -1,7 +1,7 @@
2
 <services>
3
   <service name="tar_scm" mode="disabled">
4
     <param name="versionformat">@PARENT_TAG@+git%cd.%h</param>
5
-    <param name="revision">refs/tags/0.7.3</param>
6
+    <param name="revision">refs/tags/0.8.2</param>
7
     <param name="url">git://github.com/jp9000/obs-studio.git</param>
8
     <param name="scm">git</param>
9
   </service>
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/mingw Deleted
2
 
1
-(directory)
2
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/mingw/dxgi.h Deleted
201
 
1
@@ -1,2713 +0,0 @@
2
-/*** Autogenerated by WIDL 1.5.25 from direct-x/include/dxgi.idl - Do not edit ***/
3
-
4
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
5
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
6
-#endif
7
-
8
-#include <rpc.h>
9
-#include <rpcndr.h>
10
-
11
-#ifndef COM_NO_WINDOWS_H
12
-#include <windows.h>
13
-#include <ole2.h>
14
-#endif
15
-
16
-#ifndef __dxgi_h__
17
-#define __dxgi_h__
18
-
19
-/* Forward declarations */
20
-
21
-#ifndef __IDXGIObject_FWD_DEFINED__
22
-#define __IDXGIObject_FWD_DEFINED__
23
-typedef interface IDXGIObject IDXGIObject;
24
-#endif
25
-
26
-#ifndef __IDXGIDeviceSubObject_FWD_DEFINED__
27
-#define __IDXGIDeviceSubObject_FWD_DEFINED__
28
-typedef interface IDXGIDeviceSubObject IDXGIDeviceSubObject;
29
-#endif
30
-
31
-#ifndef __IDXGIResource_FWD_DEFINED__
32
-#define __IDXGIResource_FWD_DEFINED__
33
-typedef interface IDXGIResource IDXGIResource;
34
-#endif
35
-
36
-#ifndef __IDXGIKeyedMutex_FWD_DEFINED__
37
-#define __IDXGIKeyedMutex_FWD_DEFINED__
38
-typedef interface IDXGIKeyedMutex IDXGIKeyedMutex;
39
-#endif
40
-
41
-#ifndef __IDXGISurface_FWD_DEFINED__
42
-#define __IDXGISurface_FWD_DEFINED__
43
-typedef interface IDXGISurface IDXGISurface;
44
-#endif
45
-
46
-#ifndef __IDXGISurface1_FWD_DEFINED__
47
-#define __IDXGISurface1_FWD_DEFINED__
48
-typedef interface IDXGISurface1 IDXGISurface1;
49
-#endif
50
-
51
-#ifndef __IDXGIOutput_FWD_DEFINED__
52
-#define __IDXGIOutput_FWD_DEFINED__
53
-typedef interface IDXGIOutput IDXGIOutput;
54
-#endif
55
-
56
-#ifndef __IDXGIAdapter_FWD_DEFINED__
57
-#define __IDXGIAdapter_FWD_DEFINED__
58
-typedef interface IDXGIAdapter IDXGIAdapter;
59
-#endif
60
-
61
-#ifndef __IDXGISwapChain_FWD_DEFINED__
62
-#define __IDXGISwapChain_FWD_DEFINED__
63
-typedef interface IDXGISwapChain IDXGISwapChain;
64
-#endif
65
-
66
-#ifndef __IDXGIFactory_FWD_DEFINED__
67
-#define __IDXGIFactory_FWD_DEFINED__
68
-typedef interface IDXGIFactory IDXGIFactory;
69
-#endif
70
-
71
-#ifndef __IDXGIDevice_FWD_DEFINED__
72
-#define __IDXGIDevice_FWD_DEFINED__
73
-typedef interface IDXGIDevice IDXGIDevice;
74
-#endif
75
-
76
-#ifndef __IDXGIAdapter1_FWD_DEFINED__
77
-#define __IDXGIAdapter1_FWD_DEFINED__
78
-typedef interface IDXGIAdapter1 IDXGIAdapter1;
79
-#endif
80
-
81
-#ifndef __IDXGIFactory1_FWD_DEFINED__
82
-#define __IDXGIFactory1_FWD_DEFINED__
83
-typedef interface IDXGIFactory1 IDXGIFactory1;
84
-#endif
85
-
86
-/* Headers for imported files */
87
-
88
-#include <oaidl.h>
89
-#include <ocidl.h>
90
-#include <dxgitype.h>
91
-
92
-#ifdef __cplusplus
93
-extern "C" {
94
-#endif
95
-
96
-#define _FACDXGI (0x87a)
97
-
98
-#define MAKE_DXGI_STATUS(x)                         MAKE_HRESULT(0, _FACDXGI, x)
99
-#define DXGI_STATUS_OCCLUDED                        MAKE_DXGI_STATUS(1)
100
-#define DXGI_STATUS_CLIPPED                         MAKE_DXGI_STATUS(2)
101
-#define DXGI_STATUS_NO_REDIRECTION                  MAKE_DXGI_STATUS(4)
102
-#define DXGI_STATUS_NO_DESKTOP_ACCESS               MAKE_DXGI_STATUS(5)
103
-#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE    MAKE_DXGI_STATUS(6)
104
-#define DXGI_STATUS_MODE_CHANGED                    MAKE_DXGI_STATUS(7)
105
-#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS         MAKE_DXGI_STATUS(8)
106
-#define MAKE_DXGI_HRESULT(x)                        MAKE_HRESULT(1, _FACDXGI, x)
107
-#define DXGI_ERROR_INVALID_CALL                     MAKE_DXGI_HRESULT(1)
108
-#define DXGI_ERROR_NOT_FOUND                        MAKE_DXGI_HRESULT(2)
109
-#define DXGI_ERROR_MORE_DATA                        MAKE_DXGI_HRESULT(3)
110
-#define DXGI_ERROR_UNSUPPORTED                      MAKE_DXGI_HRESULT(4)
111
-#define DXGI_ERROR_DEVICE_REMOVED                   MAKE_DXGI_HRESULT(5)
112
-#define DXGI_ERROR_DEVICE_HUNG                      MAKE_DXGI_HRESULT(6)
113
-#define DXGI_ERROR_DEVICE_RESET                     MAKE_DXGI_HRESULT(7)
114
-#define DXGI_ERROR_WAS_STILL_DRAWING                MAKE_DXGI_HRESULT(10)
115
-#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT        MAKE_DXGI_HRESULT(11)
116
-#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE     MAKE_DXGI_HRESULT(12)
117
-#define DXGI_ERROR_DRIVER_INTERNAL_ERROR            MAKE_DXGI_HRESULT(32)
118
-#define DXGI_ERROR_NONEXCLUSIVE                     MAKE_DXGI_HRESULT(33)
119
-#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE          MAKE_DXGI_HRESULT(34)
120
-#if 0
121
-typedef HANDLE HMONITOR;
122
-typedef struct _LUID {
123
-    DWORD LowPart;
124
-    LONG HighPart;
125
-} LUID;
126
-typedef struct _LUID *PLUID;
127
-#endif
128
-typedef UINT DXGI_USAGE;
129
-#define DXGI_USAGE_SHADER_INPUT (0x10)
130
-
131
-#define DXGI_USAGE_RENDER_TARGET_OUTPUT (0x20)
132
-
133
-#define DXGI_USAGE_BACK_BUFFER (0x40)
134
-
135
-#define DXGI_USAGE_SHARED (0x80)
136
-
137
-#define DXGI_USAGE_READ_ONLY (0x100)
138
-
139
-#define DXGI_ENUM_MODES_INTERLACED (1)
140
-
141
-#define DXGI_ENUM_MODES_SCALING (2)
142
-
143
-typedef enum DXGI_SWAP_EFFECT {
144
-    DXGI_SWAP_EFFECT_DISCARD = 0,
145
-    DXGI_SWAP_EFFECT_SEQUENTIAL = 1
146
-} DXGI_SWAP_EFFECT;
147
-typedef enum DXGI_RESIDENCY {
148
-    DXGI_RESIDENCY_FULLY_RESIDENT = 1,
149
-    DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2,
150
-    DXGI_RESIDENCY_EVICTED_TO_DISK = 3
151
-} DXGI_RESIDENCY;
152
-typedef struct DXGI_SURFACE_DESC {
153
-    UINT Width;
154
-    UINT Height;
155
-    DXGI_FORMAT Format;
156
-    DXGI_SAMPLE_DESC SampleDesc;
157
-} DXGI_SURFACE_DESC;
158
-typedef struct DXGI_MAPPED_RECT {
159
-    INT Pitch;
160
-    BYTE *pBits;
161
-} DXGI_MAPPED_RECT;
162
-typedef struct DXGI_OUTPUT_DESC {
163
-    WCHAR DeviceName[32];
164
-    RECT DesktopCoordinates;
165
-    WINBOOL AttachedToDesktop;
166
-    DXGI_MODE_ROTATION Rotation;
167
-    HMONITOR Monitor;
168
-} DXGI_OUTPUT_DESC;
169
-typedef struct DXGI_FRAME_STATISTICS {
170
-    UINT PresentCount;
171
-    UINT PresentRefreshCount;
172
-    UINT SyncRefreshCount;
173
-    LARGE_INTEGER SyncQPCTime;
174
-    LARGE_INTEGER SyncGPUTime;
175
-} DXGI_FRAME_STATISTICS;
176
-typedef struct DXGI_ADAPTER_DESC {
177
-    WCHAR Description[128];
178
-    UINT VendorId;
179
-    UINT DeviceId;
180
-    UINT SubSysId;
181
-    UINT Revision;
182
-    SIZE_T DedicatedVideoMemory;
183
-    SIZE_T DedicatedSystemMemory;
184
-    SIZE_T SharedSystemMemory;
185
-    LUID AdapterLuid;
186
-} DXGI_ADAPTER_DESC;
187
-typedef enum DXGI_SWAP_CHAIN_FLAG {
188
-    DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1,
189
-    DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2,
190
-    DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4
191
-} DXGI_SWAP_CHAIN_FLAG;
192
-typedef struct DXGI_SWAP_CHAIN_DESC {
193
-    DXGI_MODE_DESC BufferDesc;
194
-    DXGI_SAMPLE_DESC SampleDesc;
195
-    DXGI_USAGE BufferUsage;
196
-    UINT BufferCount;
197
-    HWND OutputWindow;
198
-    WINBOOL Windowed;
199
-    DXGI_SWAP_EFFECT SwapEffect;
200
-    UINT Flags;
201
obs-studio-0.8.2+git20150211.6099c65.tar.xz/.mailmap Added
7
 
1
@@ -0,0 +1,5 @@
2
+Jim <obs.jim@gmail.com>
3
+Zachary Lund <admin@computerquip.com>
4
+Benjamin Klettbach <b.klettbach@gmail.com>
5
+BtbN <btbn@btbn.de>
6
+John Bradley <jrb@turrettech.com>
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/CMakeLists.txt Changed
21
 
1
@@ -26,7 +26,7 @@
2
 
3
 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
4
    set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-field-initializers ${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
5
-   set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-field-initializers ${CMAKE_C_FLAGS} -std=gnu99 -fno-strict-aliasing")
6
+   set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-braces -Wno-missing-field-initializers ${CMAKE_C_FLAGS} -std=gnu99 -fno-strict-aliasing")
7
 
8
    option(USE_LIBC++ "Use libc++ instead of libstdc++" ${APPLE})
9
    if(USE_LIBC++)
10
@@ -57,6 +57,10 @@
11
        set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
12
    endif()
13
 else()
14
+   if(MINGW)
15
+       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WIN32_WINNT=0x0600 -DWINVER=0x0600")
16
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0600 -DWINVER=0x0600")
17
+   endif()
18
    set(CMAKE_C_FLAGS_DEBUG "-DDEBUG=1 -D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
19
    set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG=1 -D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
20
 endif()
21
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/INSTALL -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/INSTALL Changed
16
 
1
@@ -100,12 +100,12 @@
2
     This will create a .dmg file with an app bundle inside.
3
 
4
 
5
-Linux (Ubuntu 14.04 installation)
6
+Linux (Ubuntu 14.04/14.10 installation)
7
   - FFmpeg is required.  If you do not have the FFmpeg installed (if you're not
8
     sure, then you probably don't have it), you can get it with the following
9
     commands:
10
 
11
-        sudo add-apt-repository ppa:jon-severinsson/ffmpeg
12
+        sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
13
         sudo apt-get update && sudo apt-get install ffmpeg
14
 
15
   - Then you can install OBS with the following commands:
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/cmake/Modules/CopyMSVCBins.cmake Changed
12
 
1
@@ -41,6 +41,10 @@
2
    "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/zlib*.dll"
3
    "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libbz2*.dll"
4
    "${FFMPEG_avcodec_INCLUDE_DIR}/bin/zlib*.dll"
5
+   "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/libopus*.dll"
6
+   "${FFMPEG_avcodec_INCLUDE_DIR}/../bin/opus*.dll"
7
+   "${FFMPEG_avcodec_INCLUDE_DIR}/bin/libopus*.dll"
8
+   "${FFMPEG_avcodec_INCLUDE_DIR}/bin/opus*.dll"
9
    "${FFMPEG_avutil_INCLUDE_DIR}/bin${_bin_suffix}/avutil-*.dll"
10
    "${FFMPEG_avcodec_INCLUDE_DIR}/bin${_bin_suffix}/avcodec-*.dll"
11
    "${FFMPEG_avformat_INCLUDE_DIR}/bin${_bin_suffix}/avformat-*.dll"
12
obs-studio-0.8.2+git20150211.6099c65.tar.xz/cmake/Modules/FindJack.cmake Added
84
 
1
@@ -0,0 +1,82 @@
2
+# - Try to find jack-2.6
3
+# Once done this will define
4
+#
5
+#  JACK_FOUND - system has jack
6
+#  JACK_INCLUDE_DIRS - the jack include directory
7
+#  JACK_LIBRARIES - Link these to use jack
8
+#  JACK_DEFINITIONS - Compiler switches required for using jack
9
+#
10
+#  Copyright (c) 2008 Andreas Schneider <mail@cynapses.org>
11
+#  Modified for other libraries by Lasse Kärkkäinen <tronic>
12
+#
13
+#  Redistribution and use is allowed according to the terms of the New
14
+#  BSD license.
15
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
16
+#
17
+
18
+if (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
19
+  # in cache already
20
+  set(JACK_FOUND TRUE)
21
+else (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
22
+  # use pkg-config to get the directories and then use these values
23
+  # in the FIND_PATH() and FIND_LIBRARY() calls
24
+  if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
25
+    include(UsePkgConfig)
26
+    pkgconfig(jack _JACK_INCLUDEDIR _JACK_LIBDIR _JACK_LDFLAGS _JACK_CFLAGS)
27
+  else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
28
+    find_package(PkgConfig)
29
+    if (PKG_CONFIG_FOUND)
30
+      pkg_check_modules(_JACK jack)
31
+    endif (PKG_CONFIG_FOUND)
32
+  endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
33
+  find_path(JACK_INCLUDE_DIR
34
+    NAMES
35
+      jack/jack.h
36
+    PATHS
37
+      ${_JACK_INCLUDEDIR}
38
+      /usr/include
39
+      /usr/local/include
40
+      /opt/local/include
41
+      /sw/include
42
+  )
43
+
44
+  find_library(JACK_LIBRARY
45
+    NAMES
46
+      jack
47
+    PATHS
48
+      ${_JACK_LIBDIR}
49
+      /usr/lib
50
+      /usr/local/lib
51
+      /opt/local/lib
52
+      /sw/lib
53
+  )
54
+
55
+  if (JACK_LIBRARY AND JACK_INCLUDE_DIR)
56
+    set(JACK_FOUND TRUE)
57
+
58
+    set(JACK_INCLUDE_DIRS
59
+      ${JACK_INCLUDE_DIR}
60
+    )
61
+
62
+    set(JACK_LIBRARIES
63
+      ${JACK_LIBRARIES}
64
+      ${JACK_LIBRARY}
65
+    )
66
+
67
+  endif (JACK_LIBRARY AND JACK_INCLUDE_DIR)
68
+
69
+  if (JACK_FOUND)
70
+    if (NOT JACK_FIND_QUIETLY)
71
+      message(STATUS "Found jack: ${JACK_LIBRARY}")
72
+    endif (NOT JACK_FIND_QUIETLY)
73
+  else (JACK_FOUND)
74
+    if (JACK_FIND_REQUIRED)
75
+      message(FATAL_ERROR "Could not find JACK")
76
+    endif (JACK_FIND_REQUIRED)
77
+  endif (JACK_FOUND)
78
+
79
+  # show the JACK_INCLUDE_DIRS and JACK_LIBRARIES variables only in the advanced view
80
+  mark_as_advanced(JACK_INCLUDE_DIRS JACK_LIBRARIES)
81
+
82
+endif (JACK_LIBRARIES AND JACK_INCLUDE_DIRS)
83
+
84
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/cmake/Modules/ObsCpack.cmake -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/cmake/Modules/ObsCpack.cmake Changed
28
 
1
@@ -14,15 +14,20 @@
2
 set(CPACK_PACKAGE_VERSION_PATCH "1")
3
 set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
4
 
5
-if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
6
-   execute_process(COMMAND git describe --always --tags --dirty=-modified
7
-       OUTPUT_VARIABLE OBS_VERSION
8
-       WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
9
-       OUTPUT_STRIP_TRAILING_WHITESPACE)
10
+if(NOT DEFINED OBS_VERSION_OVERRIDE)
11
+   if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
12
+       execute_process(COMMAND git describe --always --tags --dirty=-modified
13
+           OUTPUT_VARIABLE OBS_VERSION
14
+           WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
15
+           OUTPUT_STRIP_TRAILING_WHITESPACE)
16
+   else()
17
+       set(OBS_VERSION "${CPACK_PACKAGE_VERSION}")
18
+   endif()
19
 else()
20
-   set(OBS_VERSION "${CPACK_PACKAGE_VERSION}")
21
+   set(OBS_VERSION "${OBS_VERSION_OVERRIDE}")
22
 endif()
23
 
24
+MESSAGE(STATUS "OBS_VERSION: ${OBS_VERSION}")
25
 
26
 if(INSTALLER_RUN)
27
    set(CPACK_PACKAGE_EXECUTABLES
28
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/deps/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/deps/CMakeLists.txt Changed
10
 
1
@@ -1,5 +1,8 @@
2
 
3
+if(NOT MINGW)
4
 add_subdirectory(w32-pthreads)
5
+endif()
6
+
7
 add_subdirectory(glad)
8
 add_subdirectory(ipc-util)
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/deps/glad/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/deps/glad/CMakeLists.txt Changed
13
 
1
@@ -35,7 +35,10 @@
2
 
3
 if(NOT MSVC)
4
    target_compile_options(glad
5
-       PRIVATE -DPIC -fPIC -fvisibility=hidden)
6
+       PRIVATE -DPIC -fvisibility=hidden)
7
+   if(NOT MINGW)
8
+       target_compile_options(glad PRIVATE -fPIC)
9
+   endif()
10
 endif()
11
 
12
 if(NOT WIN32 AND NOT APPLE)
13
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/deps/glad/src/glad_wgl.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/deps/glad/src/glad_wgl.c Changed
12
 
1
@@ -583,8 +583,8 @@
2
 }
3
 
4
 static void find_coreWGL(HDC hdc) {
5
-   int major = 9;
6
-   int minor = 9;
7
+   //int major = 9;
8
+   //int minor = 9;
9
    GLADWGLhdc = hdc;
10
 }
11
 
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-duplicator.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-duplicator.cpp Changed
10
 
1
@@ -45,7 +45,7 @@
2
 }
3
 
4
 gs_duplicator::gs_duplicator(gs_device_t *device_, int monitor_idx)
5
-   : device(device_), texture(nullptr)
6
+   : texture(nullptr), device(device_)
7
 {
8
    ComPtr<IDXGIOutput1> output1;
9
    ComPtr<IDXGIOutput> output;
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-indexbuffer.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-indexbuffer.cpp Changed
14
 
1
@@ -40,10 +40,10 @@
2
 gs_index_buffer::gs_index_buffer(gs_device_t *device, enum gs_index_type type,
3
        void *indices, size_t num, uint32_t flags)
4
    : device  (device),
5
+     dynamic ((flags & GS_DYNAMIC) != 0),
6
      type    (type),
7
-     indices (indices),
8
      num     (num),
9
-     dynamic ((flags & GS_DYNAMIC) != 0)
10
+     indices (indices)
11
 {
12
    switch (type) {
13
    case GS_UNSIGNED_SHORT: indexSize = 2; break;
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-samplerstate.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-samplerstate.cpp Changed
9
 
1
@@ -16,6 +16,7 @@
2
 ******************************************************************************/
3
 
4
 #include <graphics/vec4.h>
5
+#include <float.h>
6
 
7
 #include "d3d11-subsystem.hpp"
8
 
9
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-shader.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-shader.cpp Changed
16
 
1
@@ -135,7 +135,13 @@
2
        case GS_SHADER_PARAM_VEC2:      size = sizeof(vec2);    break;
3
        case GS_SHADER_PARAM_VEC3:      size = sizeof(float)*3; break;
4
        case GS_SHADER_PARAM_VEC4:      size = sizeof(vec4);    break;
5
-       case GS_SHADER_PARAM_MATRIX4X4: size = sizeof(float)*4*4;
6
+       case GS_SHADER_PARAM_MATRIX4X4:
7
+           size = sizeof(float)*4*4;
8
+           break;
9
+       case GS_SHADER_PARAM_TEXTURE:
10
+       case GS_SHADER_PARAM_STRING:
11
+       case GS_SHADER_PARAM_UNKNOWN:
12
+           continue;
13
        }
14
 
15
        /* checks to see if this constant needs to start at a new
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-shaderprocessor.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-shaderprocessor.cpp Changed
12
 
1
@@ -147,8 +147,8 @@
2
 }
3
 
4
 gs_shader_param::gs_shader_param(shader_var &var, uint32_t &texCounter)
5
-   : type       (get_shader_param_type(var.type)),
6
-     name       (var.name),
7
+   : name       (var.name),
8
+     type       (get_shader_param_type(var.type)),
9
      textureID  (texCounter),
10
      arrayCount (var.array_count),
11
      changed    (false)
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-subsystem.cpp Changed
61
 
1
@@ -15,7 +15,7 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
-#include <inttypes.h>
6
+#include <cinttypes>
7
 #include <util/base.h>
8
 #include <util/platform.h>
9
 #include <graphics/matrix3.h>
10
@@ -142,7 +142,7 @@
11
    int ver = 49;
12
 
13
    while (ver > 30) {
14
-       sprintf_s(d3dcompiler, 40, "D3DCompiler_%02d.dll", ver);
15
+       sprintf(d3dcompiler, "D3DCompiler_%02d.dll", ver);
16
 
17
        HMODULE module = LoadLibraryA(d3dcompiler);
18
        if (module) {
19
@@ -189,8 +189,8 @@
20
    wstring adapterName;
21
    DXGI_SWAP_CHAIN_DESC swapDesc;
22
    DXGI_ADAPTER_DESC desc;
23
-   D3D_FEATURE_LEVEL levelUsed;
24
-   HRESULT hr;
25
+   D3D_FEATURE_LEVEL levelUsed = D3D_FEATURE_LEVEL_9_3;
26
+   HRESULT hr = 0;
27
 
28
    make_swap_desc(swapDesc, data);
29
 
30
@@ -219,7 +219,7 @@
31
                                 "swap chain", hr);
32
 
33
    blog(LOG_INFO, "D3D11 loaded sucessfully, feature level used: %u",
34
-           (uint32_t)levelUsed);
35
+           (unsigned int)levelUsed);
36
 
37
    defaultSwap.device     = this;
38
    defaultSwap.hwnd       = (HWND)data->window.hwnd;
39
@@ -421,20 +421,7 @@
40
 }
41
 
42
 gs_device::gs_device(const gs_init_data *data)
43
-   : curRenderTarget      (NULL),
44
-     curZStencilBuffer    (NULL),
45
-     curRenderSide        (0),
46
-     curIndexBuffer       (NULL),
47
-     curVertexBuffer      (NULL),
48
-     curVertexShader      (NULL),
49
-     curPixelShader       (NULL),
50
-     curSwapChain         (&defaultSwap),
51
-     zstencilStateChanged (true),
52
-     rasterStateChanged   (true),
53
-     blendStateChanged    (true),
54
-     curDepthStencilState (NULL),
55
-     curRasterState       (NULL),
56
-     curBlendState        (NULL),
57
+   : curSwapChain         (&defaultSwap),
58
      curToplogy           (D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED)
59
 {
60
    ComPtr<IDXGIAdapter1> adapter;
61
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-subsystem.hpp Changed
172
 
1
@@ -59,6 +59,7 @@
2
 static inline DXGI_FORMAT ConvertGSTextureFormat(gs_color_format format)
3
 {
4
    switch (format) {
5
+   case GS_UNKNOWN:     return DXGI_FORMAT_UNKNOWN;
6
    case GS_A8:          return DXGI_FORMAT_A8_UNORM;
7
    case GS_R8:          return DXGI_FORMAT_R8_UNORM;
8
    case GS_RGBA:        return DXGI_FORMAT_R8G8B8A8_UNORM;
9
@@ -83,7 +84,7 @@
10
 
11
 static inline gs_color_format ConvertDXGITextureFormat(DXGI_FORMAT format)
12
 {
13
-   switch (format) {
14
+   switch ((unsigned long)format) {
15
    case DXGI_FORMAT_A8_UNORM:           return GS_A8;
16
    case DXGI_FORMAT_R8_UNORM:           return GS_R8;
17
    case DXGI_FORMAT_R8G8B8A8_UNORM:     return GS_RGBA;
18
@@ -109,6 +110,7 @@
19
 static inline DXGI_FORMAT ConvertGSZStencilFormat(gs_zstencil_format format)
20
 {
21
    switch (format) {
22
+   case GS_ZS_NONE:     return DXGI_FORMAT_UNKNOWN;
23
    case GS_Z16:         return DXGI_FORMAT_D16_UNORM;
24
    case GS_Z24_S8:      return DXGI_FORMAT_D24_UNORM_S8_UINT;
25
    case GS_Z32F:        return DXGI_FORMAT_D32_FLOAT;
26
@@ -208,7 +210,7 @@
27
    ComPtr<ID3D11Buffer>         tangentBuffer;
28
    vector<ComPtr<ID3D11Buffer>> uvBuffers;
29
 
30
-   gs_device_t       *device;
31
+   gs_device_t    *device;
32
    bool           dynamic;
33
    VBDataPtr      vbd;
34
    size_t         numVerts;
35
@@ -264,8 +266,8 @@
36
 
37
    inline gs_texture(gs_device *device, gs_texture_type type,
38
            uint32_t levels, gs_color_format format)
39
-       : device (device),
40
-         type   (type),
41
+       : type   (type),
42
+         device (device),
43
          levels (levels),
44
          format (format)
45
    {
46
@@ -279,14 +281,14 @@
47
    ComPtr<ID3D11RenderTargetView>   renderTarget[6];
48
    ComPtr<IDXGISurface1>            gdiSurface;
49
 
50
-   uint32_t        width, height;
51
-   DXGI_FORMAT     dxgiFormat;
52
-   bool            isRenderTarget;
53
-   bool            isGDICompatible;
54
-   bool            isDynamic;
55
-   bool            isShared;
56
-   bool            genMipmaps;
57
-   uint32_t        sharedHandle;
58
+   uint32_t        width = 0, height = 0;
59
+   DXGI_FORMAT     dxgiFormat = DXGI_FORMAT_UNKNOWN;
60
+   bool            isRenderTarget = false;
61
+   bool            isGDICompatible = false;
62
+   bool            isDynamic = false;
63
+   bool            isShared = false;
64
+   bool            genMipmaps = false;
65
+   uint32_t        sharedHandle = 0;
66
 
67
    void InitSRD(vector<D3D11_SUBRESOURCE_DATA> &srd, const uint8_t **data);
68
    void InitTexture(const uint8_t **data);
69
@@ -294,16 +296,7 @@
70
    void InitRenderTargets();
71
 
72
    inline gs_texture_2d()
73
-       : gs_texture      (NULL, GS_TEXTURE_2D, 0, GS_UNKNOWN),
74
-         width           (0),
75
-         height          (0),
76
-         dxgiFormat      (DXGI_FORMAT_UNKNOWN),
77
-         isRenderTarget  (false),
78
-         isGDICompatible (false),
79
-         isDynamic       (false),
80
-         isShared        (false),
81
-         genMipmaps      (false),
82
-         sharedHandle    (NULL)
83
+       : gs_texture (NULL, GS_TEXTURE_2D, 0, GS_UNKNOWN)
84
    {
85
    }
86
 
87
@@ -359,18 +352,18 @@
88
 };
89
 
90
 struct gs_shader_param {
91
-   string            name;
92
-   gs_shader_param_type type;
93
+   string                         name;
94
+   gs_shader_param_type           type;
95
 
96
-   uint32_t          textureID;
97
+   uint32_t                       textureID;
98
 
99
-   int               arrayCount;
100
+   int                            arrayCount;
101
 
102
-   size_t            pos;
103
+   size_t                         pos;
104
 
105
-   vector<uint8_t>   curValue;
106
-   vector<uint8_t>   defaultValue;
107
-   bool              changed;
108
+   vector<uint8_t>                curValue;
109
+   vector<uint8_t>                defaultValue;
110
+   bool                           changed;
111
 
112
    gs_shader_param(shader_var &var, uint32_t &texCounter);
113
 };
114
@@ -390,8 +383,8 @@
115
    gs_device_t             *device;
116
    gs_shader_type          type;
117
    vector<gs_shader_param> params;
118
-   ComPtr<ID3D11Buffer> constants;
119
-   size_t               constantSize;
120
+   ComPtr<ID3D11Buffer>    constants;
121
+   size_t                  constantSize;
122
 
123
    inline void UpdateParam(vector<uint8_t> &constData,
124
            gs_shader_param &param, bool &upload);
125
@@ -619,32 +612,32 @@
126
    ComPtr<ID3D11DeviceContext> context;
127
    gs_swap_chain               defaultSwap;
128
 
129
-   gs_texture_2d               *curRenderTarget;
130
-   gs_zstencil_buffer          *curZStencilBuffer;
131
-   int                         curRenderSide;
132
+   gs_texture_2d               *curRenderTarget = nullptr;
133
+   gs_zstencil_buffer          *curZStencilBuffer = nullptr;
134
+   int                         curRenderSide = 0;
135
    gs_texture                  *curTextures[GS_MAX_TEXTURES];
136
    gs_sampler_state            *curSamplers[GS_MAX_TEXTURES];
137
-   gs_vertex_buffer            *curVertexBuffer;
138
-   gs_index_buffer             *curIndexBuffer;
139
-   gs_vertex_shader            *curVertexShader;
140
-   gs_pixel_shader             *curPixelShader;
141
+   gs_vertex_buffer            *curVertexBuffer = nullptr;
142
+   gs_index_buffer             *curIndexBuffer = nullptr;
143
+   gs_vertex_shader            *curVertexShader = nullptr;
144
+   gs_pixel_shader             *curPixelShader = nullptr;
145
    gs_swap_chain               *curSwapChain;
146
 
147
-   bool                        zstencilStateChanged;
148
-   bool                        rasterStateChanged;
149
-   bool                        blendStateChanged;
150
+   bool                        zstencilStateChanged = true;
151
+   bool                        rasterStateChanged = true;
152
+   bool                        blendStateChanged = true;
153
    ZStencilState               zstencilState;
154
    RasterState                 rasterState;
155
    BlendState                  blendState;
156
    vector<SavedZStencilState>  zstencilStates;
157
    vector<SavedRasterState>    rasterStates;
158
    vector<SavedBlendState>     blendStates;
159
-   ID3D11DepthStencilState     *curDepthStencilState;
160
-   ID3D11RasterizerState       *curRasterState;
161
-   ID3D11BlendState            *curBlendState;
162
+   ID3D11DepthStencilState     *curDepthStencilState = nullptr;
163
+   ID3D11RasterizerState       *curRasterState = nullptr;
164
+   ID3D11BlendState            *curBlendState = nullptr;
165
    D3D11_PRIMITIVE_TOPOLOGY    curToplogy;
166
 
167
-   pD3DCompile                 d3dCompile;
168
+   pD3DCompile                 d3dCompile = nullptr;
169
 
170
    gs_rect                     viewport;
171
 
172
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-texture2d.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-texture2d.cpp Changed
32
 
1
@@ -149,10 +149,10 @@
2
      width           (width),
3
      height          (height),
4
      dxgiFormat      (ConvertGSTextureFormat(format)),
5
+     isRenderTarget  ((flags & GS_RENDER_TARGET) != 0),
6
      isGDICompatible (gdiCompatible),
7
-     isShared        (shared),
8
      isDynamic       ((flags & GS_DYNAMIC) != 0),
9
-     isRenderTarget  ((flags & GS_RENDER_TARGET) != 0),
10
+     isShared        (shared),
11
      genMipmaps      ((flags & GS_BUILD_MIPMAPS) != 0)
12
 {
13
    InitTexture(data);
14
@@ -163,15 +163,11 @@
15
 }
16
 
17
 gs_texture_2d::gs_texture_2d(gs_device_t *device, uint32_t handle)
18
-   : isRenderTarget  (false),
19
-     isGDICompatible (false),
20
-     isDynamic       (false),
21
-     isShared        (true),
22
-     genMipmaps      (false),
23
+   : isShared        (true),
24
      sharedHandle    (handle)
25
 {
26
    HRESULT hr;
27
-   hr = device->device->OpenSharedResource((HANDLE)handle,
28
+   hr = device->device->OpenSharedResource((HANDLE)(uintptr_t)handle,
29
            __uuidof(ID3D11Texture2D), (void**)texture.Assign());
30
    if (FAILED(hr))
31
        throw HRError("Failed to open resource", hr);
32
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp Changed
13
 
1
@@ -96,9 +96,9 @@
2
 gs_vertex_buffer::gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data,
3
        uint32_t flags)
4
    : device   (device),
5
+     dynamic  ((flags & GS_DYNAMIC) != 0),
6
      vbd      (data),
7
-     numVerts (data->num),
8
-     dynamic  ((flags & GS_DYNAMIC) != 0)
9
+     numVerts (data->num)
10
 {
11
    if (!data->num)
12
        throw "Cannot initialize vertex buffer with 0 vertices";
13
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs-opengl/gl-windows.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs-opengl/gl-windows.c Changed
82
 
1
@@ -132,7 +132,7 @@
2
    bool success = wglMakeCurrent(hdc, hglrc);
3
    if (!success)
4
        blog(LOG_ERROR, "wglMakeCurrent failed, GetLastError "
5
-                       "returned %u", GetLastError());
6
+                       "returned %lu", GetLastError());
7
 
8
    return success;
9
 }
10
@@ -141,7 +141,7 @@
11
 {
12
    HGLRC hglrc = wglCreateContext(hdc);
13
    if (!hglrc) {
14
-       blog(LOG_ERROR, "wglCreateContext failed, %u", GetLastError());
15
+       blog(LOG_ERROR, "wglCreateContext failed, %lu", GetLastError());
16
        return NULL;
17
    }
18
 
19
@@ -168,8 +168,8 @@
20
    if (GLAD_WGL_ARB_create_context) {
21
        HGLRC hglrc = wglCreateContextAttribsARB(hdc, 0, attribs);
22
        if (!hglrc) {
23
-           blog(LOG_ERROR, "wglCreateContextAttribsARB failed, %u",
24
-                   GetLastError());
25
+           blog(LOG_ERROR, "wglCreateContextAttribsARB failed, "
26
+                   "%lu", GetLastError());
27
            return NULL;
28
        }
29
 
30
@@ -202,13 +202,13 @@
31
    init_dummy_pixel_format(&pfd);
32
    format_index = ChoosePixelFormat(dummy->hdc, &pfd);
33
    if (!format_index) {
34
-       blog(LOG_ERROR, "Dummy ChoosePixelFormat failed, %u",
35
+       blog(LOG_ERROR, "Dummy ChoosePixelFormat failed, %lu",
36
                GetLastError());
37
        return false;
38
    }
39
 
40
    if (!SetPixelFormat(dummy->hdc, format_index, &pfd)) {
41
-       blog(LOG_ERROR, "Dummy SetPixelFormat failed, %u",
42
+       blog(LOG_ERROR, "Dummy SetPixelFormat failed, %lu",
43
                GetLastError());
44
        return false;
45
    }
46
@@ -297,7 +297,7 @@
47
    success = wglChoosePixelFormatARB(hdc, attribs.array, NULL, 1, &format,
48
                &num_formats);
49
    if (!success || !num_formats) {
50
-       blog(LOG_ERROR, "wglChoosePixelFormatARB failed, %u",
51
+       blog(LOG_ERROR, "wglChoosePixelFormatARB failed, %lu",
52
                GetLastError());
53
        format = 0;
54
    }
55
@@ -316,7 +316,7 @@
56
    *format = gl_choose_pixel_format(hdc, info);
57
 
58
    if (!DescribePixelFormat(hdc, *format, sizeof(*pfd), pfd)) {
59
-       blog(LOG_ERROR, "DescribePixelFormat failed, %u",
60
+       blog(LOG_ERROR, "DescribePixelFormat failed, %lu",
61
                GetLastError());
62
        return false;
63
    }
64
@@ -328,7 +328,7 @@
65
        PIXELFORMATDESCRIPTOR *pfd)
66
 {
67
    if (!SetPixelFormat(hdc, format, pfd)) {
68
-       blog(LOG_ERROR, "SetPixelFormat failed, %u", GetLastError());
69
+       blog(LOG_ERROR, "SetPixelFormat failed, %lu", GetLastError());
70
        return false;
71
    }
72
 
73
@@ -514,7 +514,7 @@
74
 {
75
    if (!SwapBuffers(device->cur_swap->wi->hdc)) {
76
        blog(LOG_ERROR, "SwapBuffers failed, GetLastError "
77
-               "returned %u", GetLastError());
78
+               "returned %lu", GetLastError());
79
        blog(LOG_ERROR, "device_present (GL) failed");
80
    }
81
 }
82
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/CMakeLists.txt Changed
17
 
1
@@ -46,9 +46,12 @@
2
        util/threading-windows.c
3
        util/pipe-windows.c
4
        util/platform-windows.c)
5
-   set(libobs_PLATFORM_DEPS
6
-       w32-pthreads
7
-       winmm.lib)
8
+   set(libobs_PLATFORM_DEPS winmm)
9
+   if(MSVC)
10
+       set(libobs_PLATFORM_DEPS
11
+       ${libobs_PLATFORM_DEPS}
12
+       w32-pthreads)
13
+   endif()
14
 elseif(APPLE)
15
    set(libobs_PLATFORM_SOURCES
16
        obs-cocoa.c
17
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/media-io/audio-io.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/media-io/audio-io.c Changed
201
 
1
@@ -34,7 +34,7 @@
2
    struct audio_convert_info conversion;
3
    audio_resampler_t         *resampler;
4
 
5
-   void (*callback)(void *param, struct audio_data *data);
6
+   audio_output_callback_t callback;
7
    void *param;
8
 };
9
 
10
@@ -55,6 +55,9 @@
11
 
12
    uint64_t                   next_ts_min;
13
 
14
+   /* specifies which mixes this line applies to via bits */
15
+   uint32_t                   mixers;
16
+
17
    /* states whether this line is still being used.  if not, then when the
18
     * buffer is depleted, it's destroyed */
19
    bool                       alive;
20
@@ -75,6 +78,11 @@
21
    bfree(line);
22
 }
23
 
24
+struct audio_mix {
25
+   DARRAY(struct audio_input) inputs;
26
+   DARRAY(uint8_t)            mix_buffers[MAX_AV_PLANES];
27
+};
28
+
29
 struct audio_output {
30
    struct audio_output_info   info;
31
    size_t                     block_size;
32
@@ -84,15 +92,14 @@
33
    pthread_t                  thread;
34
    os_event_t                 *stop_event;
35
 
36
-   DARRAY(uint8_t)            mix_buffers[MAX_AV_PLANES];
37
-
38
    bool                       initialized;
39
 
40
    pthread_mutex_t            line_mutex;
41
    struct audio_line          *first_line;
42
 
43
    pthread_mutex_t            input_mutex;
44
-   DARRAY(struct audio_input) inputs;
45
+
46
+   struct audio_mix           mixes[MAX_AUDIO_MIXES];
47
 };
48
 
49
 static inline void audio_output_removeline(struct audio_output *audio,
50
@@ -188,29 +195,33 @@
51
 #define MIX_BUFFER_SIZE 256
52
 
53
 /* TODO: optimize mixing */
54
-static void mix_float(uint8_t *mix_in, struct circlebuf *buf, size_t size)
55
+static void mix_float(struct audio_output *audio, struct audio_line *line,
56
+       size_t size, size_t time_offset, size_t plane)
57
 {
58
-   float *mix = (float*)mix_in;
59
+   float *mixes[MAX_AUDIO_MIXES];
60
    float vals[MIX_BUFFER_SIZE];
61
-   register float mix_val;
62
+
63
+   for (size_t mix_idx = 0; mix_idx < MAX_AUDIO_MIXES; mix_idx++) {
64
+       uint8_t *bytes = audio->mixes[mix_idx].mix_buffers[plane].array;
65
+       mixes[mix_idx] = (float*)&bytes[time_offset];
66
+   }
67
 
68
    while (size) {
69
        size_t pop_count = min_size(size, sizeof(vals));
70
        size -= pop_count;
71
 
72
-       circlebuf_pop_front(buf, vals, pop_count);
73
+       circlebuf_pop_front(&line->buffers[plane], vals, pop_count);
74
        pop_count /= sizeof(float);
75
 
76
-       /* This sequence provides hints for MSVC to use packed SSE 
77
-        * instructions addps, minps, maxps, etc. */
78
-       for (size_t i = 0; i < pop_count; i++) {
79
-           mix_val =  *mix + vals[i];
80
-
81
-           /* clamp confuses the optimisation */
82
-           mix_val = (mix_val >  1.0f) ?  1.0f : mix_val; 
83
-           mix_val = (mix_val < -1.0f) ? -1.0f : mix_val;
84
+       for (size_t mix_idx = 0; mix_idx < MAX_AUDIO_MIXES; mix_idx++) {
85
+           /* only include this audio line in this mix if it's set
86
+            * via the line's 'mixes' variable */
87
+           if ((line->mixers & (1 << mix_idx)) == 0)
88
+               continue;
89
 
90
-           *(mix++) = mix_val;
91
+           for (size_t i = 0; i < pop_count; i++) {
92
+               *(mixes[mix_idx]++) += vals[i];
93
+           }
94
        }
95
    }
96
 }
97
@@ -232,8 +243,7 @@
98
    for (size_t i = 0; i < audio->planes; i++) {
99
        size_t pop_size = min_size(size, line->buffers[i].size);
100
 
101
-       mix_float(audio->mix_buffers[i].array + time_offset,
102
-               &line->buffers[i], pop_size);
103
+       mix_float(audio, line, pop_size, time_offset, i);
104
    }
105
 
106
    return true;
107
@@ -266,27 +276,55 @@
108
 }
109
 
110
 static inline void do_audio_output(struct audio_output *audio,
111
-       uint64_t timestamp, uint32_t frames)
112
+       size_t mix_idx, uint64_t timestamp, uint32_t frames)
113
 {
114
+   struct audio_mix *mix = &audio->mixes[mix_idx];
115
    struct audio_data data;
116
+
117
    for (size_t i = 0; i < MAX_AV_PLANES; i++)
118
-       data.data[i] = audio->mix_buffers[i].array;
119
+       data.data[i] = mix->mix_buffers[i].array;
120
+
121
    data.frames = frames;
122
    data.timestamp = timestamp;
123
    data.volume = 1.0f;
124
 
125
    pthread_mutex_lock(&audio->input_mutex);
126
 
127
-   for (size_t i = 0; i < audio->inputs.num; i++) {
128
-       struct audio_input *input = audio->inputs.array+i;
129
+   for (size_t i = 0; i < mix->inputs.num; i++) {
130
+       struct audio_input *input = mix->inputs.array+i;
131
 
132
        if (resample_audio_output(input, &data))
133
-           input->callback(input->param, &data);
134
+           input->callback(input->param, mix_idx, &data);
135
    }
136
 
137
    pthread_mutex_unlock(&audio->input_mutex);
138
 }
139
 
140
+static inline void clamp_audio_output(struct audio_output *audio, size_t bytes)
141
+{
142
+   size_t float_size = bytes / sizeof(float);
143
+
144
+   for (size_t mix_idx = 0; mix_idx < MAX_AUDIO_MIXES; mix_idx++) {
145
+       struct audio_mix *mix = &audio->mixes[mix_idx];
146
+
147
+       /* do not process mixing if a specific mix is inactive */
148
+       if (!mix->inputs.num)
149
+           continue;
150
+
151
+       for (size_t plane = 0; plane < audio->planes; plane++) {
152
+           float *mix_data = (float*)mix->mix_buffers[plane].array;
153
+           float *mix_end = &mix_data[float_size];
154
+
155
+           while (mix_data < mix_end) {
156
+               float val = *mix_data;
157
+               val = (val >  1.0f) ?  1.0f : val;
158
+               val = (val < -1.0f) ? -1.0f : val;
159
+               *(mix_data++) = val;
160
+           }
161
+       }
162
+   }
163
+}
164
+
165
 static uint64_t mix_and_output(struct audio_output *audio, uint64_t audio_time,
166
        uint64_t prev_time)
167
 {
168
@@ -305,9 +343,13 @@
169
    audio_time = prev_time + conv_frames_to_time(audio, frames);
170
 
171
    /* resize and clear mix buffers */
172
-   for (size_t i = 0; i < audio->planes; i++) {
173
-       da_resize(audio->mix_buffers[i], bytes);
174
-       memset(audio->mix_buffers[i].array, 0, bytes);
175
+   for (size_t mix_idx = 0; mix_idx < MAX_AUDIO_MIXES; mix_idx++) {
176
+       struct audio_mix *mix = &audio->mixes[mix_idx];
177
+
178
+       for (size_t i = 0; i < audio->planes; i++) {
179
+           da_resize(mix->mix_buffers[i], bytes);
180
+           memset(mix->mix_buffers[i].array, 0, bytes);
181
+       }
182
    }
183
 
184
    /* mix audio lines */
185
@@ -338,8 +380,12 @@
186
        line = next;
187
    }
188
 
189
+   /* clamps audio data to -1.0..1.0 */
190
+   clamp_audio_output(audio, bytes);
191
+
192
    /* output */
193
-   do_audio_output(audio, prev_time, frames);
194
+   for (size_t i = 0; i < MAX_AUDIO_MIXES; i++)
195
+       do_audio_output(audio, i, prev_time, frames);
196
 
197
    return audio_time;
198
 }
199
@@ -373,12 +419,14 @@
200
 
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/media-io/audio-io.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/media-io/audio-io.h Changed
43
 
1
@@ -24,6 +24,8 @@
2
 extern "C" {
3
 #endif
4
 
5
+#define MAX_AUDIO_MIXES 4
6
+
7
 /*
8
  * Base audio output component.  Use this to create an audio output track
9
  * for the media.
10
@@ -172,13 +174,14 @@
11
 EXPORT int audio_output_open(audio_t **audio, struct audio_output_info *info);
12
 EXPORT void audio_output_close(audio_t *audio);
13
 
14
-EXPORT bool audio_output_connect(audio_t *video,
15
+typedef void (*audio_output_callback_t)(void *param, size_t mix_idx,
16
+       struct audio_data *data);
17
+
18
+EXPORT bool audio_output_connect(audio_t *video, size_t mix_idx,
19
        const struct audio_convert_info *conversion,
20
-       void (*callback)(void *param, struct audio_data *data),
21
-       void *param);
22
-EXPORT void audio_output_disconnect(audio_t *video,
23
-       void (*callback)(void *param, struct audio_data *data),
24
-       void *param);
25
+       audio_output_callback_t callback, void *param);
26
+EXPORT void audio_output_disconnect(audio_t *video, size_t mix_idx,
27
+       audio_output_callback_t callback, void *param);
28
 
29
 EXPORT bool audio_output_active(const audio_t *audio);
30
 
31
@@ -189,7 +192,10 @@
32
 EXPORT const struct audio_output_info *audio_output_get_info(
33
        const audio_t *audio);
34
 
35
-EXPORT audio_line_t *audio_output_create_line(audio_t *audio, const char *name);
36
+EXPORT audio_line_t *audio_output_create_line(audio_t *audio, const char *name,
37
+       uint32_t mixers);
38
+EXPORT void audio_line_set_mixers(audio_line_t *line, uint32_t mixers);
39
+EXPORT uint32_t audio_line_get_mixers(audio_line_t *line);
40
 EXPORT void audio_line_destroy(audio_line_t *line);
41
 EXPORT void audio_line_output(audio_line_t *line, const struct audio_data *data);
42
 
43
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-cocoa.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-cocoa.c Changed
25
 
1
@@ -46,8 +46,23 @@
2
 
3
 void add_default_module_paths(void)
4
 {
5
+   char bin[512];
6
+   char data[512];
7
+   int ret;
8
+
9
    for (int i = 0; i < module_patterns_size; i++)
10
        obs_add_module_path(module_bin[i], module_data[i]);
11
+
12
+   ret = os_get_config_path(bin, sizeof(bin), "obs-plugins/%module%");
13
+   if (ret <= 0)
14
+       return;
15
+
16
+   strcpy(data, bin);
17
+   strcat(data, "/data");
18
+
19
+   strcat(bin, "/bin");
20
+
21
+   obs_add_module_path(bin, data);
22
 }
23
 
24
 char *find_libobs_data_file(const char *file)
25
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-config.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-config.h Changed
18
 
1
@@ -34,14 +34,14 @@
2
  *
3
  * Reset to zero each major version
4
  */
5
-#define LIBOBS_API_MINOR_VER  7
6
+#define LIBOBS_API_MINOR_VER  8
7
 
8
 /*
9
  * Increment if backward-compatible bug fix
10
  *
11
  * Reset to zero each major or minor version
12
  */
13
-#define LIBOBS_API_PATCH_VER  3
14
+#define LIBOBS_API_PATCH_VER  2
15
 
16
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
17
                              ((major << 24) | \
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-data.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-data.c Changed
116
 
1
@@ -798,12 +798,63 @@
2
    set_item_data(data, item, name, ptr, size, type, false, true);
3
 }
4
 
5
+static void copy_obj(struct obs_data *data, const char *name,
6
+       struct obs_data *obj,
7
+       void (*callback)(obs_data_t *, const char *, obs_data_t *))
8
+{
9
+   if (obj) {
10
+       obs_data_t *new_obj = obs_data_create();
11
+       obs_data_apply(new_obj, obj);
12
+       callback(data, name, new_obj);
13
+       obs_data_release(new_obj);
14
+   }
15
+}
16
+
17
+static void copy_array(struct obs_data *data, const char *name,
18
+       struct obs_data_array *array,
19
+       void (*callback)(obs_data_t*, const char*, obs_data_array_t*))
20
+{
21
+   if (array) {
22
+       obs_data_array_t *new_array = obs_data_array_create();
23
+       da_reserve(new_array->objects, array->objects.num);
24
+
25
+       for (size_t i = 0; i < array->objects.num; i++) {
26
+           obs_data_t *new_obj = obs_data_create();
27
+           obs_data_t *obj = array->objects.array[i];
28
+
29
+           obs_data_apply(new_obj, obj);
30
+           obs_data_array_push_back(new_array, new_obj);
31
+
32
+           obs_data_release(new_obj);
33
+       }
34
+
35
+       callback(data, name, new_array);
36
+       obs_data_array_release(new_array);
37
+   }
38
+}
39
+
40
 static inline void copy_item(struct obs_data *data, struct obs_data_item *item)
41
 {
42
    const char *name = get_item_name(item);
43
    void *ptr = get_item_data(item);
44
 
45
-   set_item(data, NULL, name, ptr, item->data_len, item->type);
46
+   if (item->type == OBS_DATA_OBJECT) {
47
+       obs_data_t **obj = item->data_size ? ptr : NULL;
48
+
49
+       if (obj)
50
+           copy_obj(data, name, *obj, obs_data_set_obj);
51
+
52
+   } else if (item->type == OBS_DATA_ARRAY) {
53
+       obs_data_array_t **array = item->data_size ? ptr : NULL;
54
+
55
+       if (array)
56
+           copy_array(data, name, *array, obs_data_set_array);
57
+
58
+   } else {
59
+       if (item->data_size)
60
+           set_item(data, NULL, name, ptr, item->data_size,
61
+                   item->type);
62
+   }
63
 }
64
 
65
 void obs_data_apply(obs_data_t *target, obs_data_t *apply_data)
66
@@ -831,6 +882,49 @@
67
    }
68
 }
69
 
70
+static inline void clear_item(struct obs_data_item *item)
71
+{
72
+   void *ptr = get_item_data(item);
73
+   size_t size;
74
+
75
+   if (item->data_len) {
76
+       if (item->type == OBS_DATA_OBJECT) {
77
+           obs_data_t **obj = item->data_size ? ptr : NULL;
78
+
79
+           if (obj && *obj)
80
+               obs_data_release(*obj);
81
+
82
+       } else if (item->type == OBS_DATA_ARRAY) {
83
+           obs_data_array_t **array = item->data_size ? ptr : NULL;
84
+
85
+           if (array && *array)
86
+               obs_data_array_release(*array);
87
+       }
88
+
89
+       size = item->default_len + item->autoselect_size;
90
+       if (size)
91
+           memmove(ptr, (uint8_t*)ptr + item->data_len, size);
92
+
93
+       item->data_size = 0;
94
+       item->data_len = 0;
95
+   }
96
+}
97
+
98
+void obs_data_clear(obs_data_t *target)
99
+{
100
+   struct obs_data_item *item;
101
+
102
+   if (!target)
103
+       return;
104
+
105
+   item = target->first_item;
106
+
107
+   while (item) {
108
+       clear_item(item);
109
+       item = item->next;
110
+   }
111
+}
112
+
113
 typedef void (*set_item_t)(obs_data_t*, obs_data_item_t**, const char*,
114
        const void*, size_t, enum obs_data_type);
115
 
116
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-data.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-data.h Changed
9
 
1
@@ -70,6 +70,7 @@
2
 EXPORT void obs_data_apply(obs_data_t *target, obs_data_t *apply_data);
3
 
4
 EXPORT void obs_data_erase(obs_data_t *data, const char *name);
5
+EXPORT void obs_data_clear(obs_data_t *data);
6
 
7
 /* Set functions */
8
 EXPORT void obs_data_set_string(obs_data_t *data, const char *name,
9
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-encoder.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-encoder.c Changed
147
 
1
@@ -57,7 +57,7 @@
2
 
3
 static struct obs_encoder *create_encoder(const char *id,
4
        enum obs_encoder_type type, const char *name,
5
-       obs_data_t *settings)
6
+       obs_data_t *settings, size_t mixer_idx)
7
 {
8
    struct obs_encoder *encoder;
9
    struct obs_encoder_info *ei = find_encoder(id);
10
@@ -68,6 +68,7 @@
11
 
12
    encoder = bzalloc(sizeof(struct obs_encoder));
13
    encoder->info = *ei;
14
+   encoder->mixer_idx = mixer_idx;
15
 
16
    success = init_encoder(encoder, name, settings);
17
    if (!success) {
18
@@ -87,18 +88,18 @@
19
        obs_data_t *settings)
20
 {
21
    if (!name || !id) return NULL;
22
-   return create_encoder(id, OBS_ENCODER_VIDEO, name, settings);
23
+   return create_encoder(id, OBS_ENCODER_VIDEO, name, settings, 0);
24
 }
25
 
26
 obs_encoder_t *obs_audio_encoder_create(const char *id, const char *name,
27
-       obs_data_t *settings)
28
+       obs_data_t *settings, size_t mixer_idx)
29
 {
30
    if (!name || !id) return NULL;
31
-   return create_encoder(id, OBS_ENCODER_AUDIO, name, settings);
32
+   return create_encoder(id, OBS_ENCODER_AUDIO, name, settings, mixer_idx);
33
 }
34
 
35
 static void receive_video(void *param, struct video_data *frame);
36
-static void receive_audio(void *param, struct audio_data *data);
37
+static void receive_audio(void *param, size_t mix_idx, struct audio_data *data);
38
 
39
 static inline struct audio_convert_info *get_audio_info(
40
        const struct obs_encoder *encoder,
41
@@ -149,8 +150,8 @@
42
 
43
    if (encoder->info.type == OBS_ENCODER_AUDIO) {
44
        get_audio_info(encoder, &audio_info);
45
-       audio_output_connect(encoder->media, &audio_info, receive_audio,
46
-               encoder);
47
+       audio_output_connect(encoder->media, encoder->mixer_idx,
48
+               &audio_info, receive_audio, encoder);
49
    } else {
50
        struct video_scale_info *info =
51
            get_video_info(encoder, &video_info);
52
@@ -180,8 +181,8 @@
53
 static void remove_connection(struct obs_encoder *encoder)
54
 {
55
    if (encoder->info.type == OBS_ENCODER_AUDIO)
56
-       audio_output_disconnect(encoder->media, receive_audio,
57
-               encoder);
58
+       audio_output_disconnect(encoder->media, encoder->mixer_idx,
59
+               receive_audio, encoder);
60
    else
61
        video_output_disconnect(encoder->media, receive_video,
62
                encoder);
63
@@ -248,6 +249,14 @@
64
    return encoder ? encoder->context.name : NULL;
65
 }
66
 
67
+void obs_encoder_set_name(obs_encoder_t *encoder, const char *name)
68
+{
69
+   if (!encoder) return;
70
+
71
+   if (name && *name && strcmp(name, encoder->context.name) != 0)
72
+       obs_context_data_setname(&encoder->context, name);
73
+}
74
+
75
 static inline obs_data_t *get_defaults(const struct obs_encoder_info *info)
76
 {
77
    obs_data_t *settings = obs_data_create();
78
@@ -437,6 +446,23 @@
79
    return encoder ? encoder->info.codec : NULL;
80
 }
81
 
82
+const char *obs_get_encoder_codec(const char *id)
83
+{
84
+   struct obs_encoder_info *info = find_encoder(id);
85
+   return info ? info->codec : NULL;
86
+}
87
+
88
+enum obs_encoder_type obs_encoder_get_type(const obs_encoder_t *encoder)
89
+{
90
+   return encoder ? encoder->info.type : OBS_ENCODER_AUDIO;
91
+}
92
+
93
+enum obs_encoder_type obs_get_encoder_type(const char *id)
94
+{
95
+   struct obs_encoder_info *info = find_encoder(id);
96
+   return info ? info->type : OBS_ENCODER_AUDIO;
97
+}
98
+
99
 void obs_encoder_set_scaled_size(obs_encoder_t *encoder, uint32_t width,
100
        uint32_t height)
101
 {
102
@@ -588,6 +614,7 @@
103
 
104
    pkt.timebase_num = encoder->timebase_num;
105
    pkt.timebase_den = encoder->timebase_den;
106
+   pkt.encoder = encoder;
107
 
108
    success = encoder->info.encode(encoder->context.data, frame, &pkt,
109
            &received);
110
@@ -644,7 +671,7 @@
111
    size_t size = data->frames * encoder->blocksize;
112
    size_t offset_size = 0;
113
 
114
-   if (encoder->paired_encoder && !encoder->start_ts) {
115
+   if (!encoder->start_ts && encoder->paired_encoder) {
116
        uint64_t end_ts     = data->timestamp;
117
        uint64_t v_start_ts = encoder->paired_encoder->start_ts;
118
 
119
@@ -666,6 +693,9 @@
120
        }
121
 
122
        encoder->start_ts = v_start_ts;
123
+
124
+   } else if (!encoder->start_ts && !encoder->paired_encoder) {
125
+       encoder->start_ts = data->timestamp;
126
    }
127
 
128
    size -= offset_size;
129
@@ -702,7 +732,7 @@
130
    encoder->cur_pts += encoder->framesize;
131
 }
132
 
133
-static void receive_audio(void *param, struct audio_data *data)
134
+static void receive_audio(void *param, size_t mix_idx, struct audio_data *data)
135
 {
136
    struct obs_encoder *encoder = param;
137
 
138
@@ -711,6 +741,8 @@
139
 
140
    while (encoder->audio_input_buffer[0].size >= encoder->framesize_bytes)
141
        send_audio_data(encoder);
142
+
143
+   UNUSED_PARAMETER(mix_idx);
144
 }
145
 
146
 void obs_encoder_add_output(struct obs_encoder *encoder,
147
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-encoder.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-encoder.h Changed
14
 
1
@@ -71,6 +71,12 @@
2
     * priority or higher to continue transmission.
3
     */
4
    int                   drop_priority;
5
+
6
+   /** Audio track index (used with outputs) */
7
+   size_t                track_idx;
8
+
9
+   /** Encoder from which the track originated from */
10
+   obs_encoder_t         *encoder;
11
 };
12
 
13
 /** Encoder input frame */
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-internal.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-internal.h Changed
30
 
1
@@ -388,7 +388,7 @@
2
    bool                            received_video;
3
    bool                            received_audio;
4
    int64_t                         video_offset;
5
-   int64_t                         audio_offset;
6
+   int64_t                         audio_offsets[MAX_AUDIO_MIXES];
7
    int64_t                         highest_audio_ts;
8
    int64_t                         highest_video_ts;
9
    pthread_mutex_t                 interleaved_mutex;
10
@@ -412,8 +412,9 @@
11
    video_t                         *video;
12
    audio_t                         *audio;
13
    obs_encoder_t                   *video_encoder;
14
-   obs_encoder_t                   *audio_encoder;
15
+   obs_encoder_t                   *audio_encoders[MAX_AUDIO_MIXES];
16
    obs_service_t                   *service;
17
+   size_t                          mixer_idx;
18
 
19
    uint32_t                        scaled_width;
20
    uint32_t                        scaled_height;
21
@@ -451,6 +452,8 @@
22
    size_t                          framesize;
23
    size_t                          framesize_bytes;
24
 
25
+   size_t                          mixer_idx;
26
+
27
    uint32_t                        scaled_width;
28
    uint32_t                        scaled_height;
29
 
30
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-module.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-module.c Changed
11
 
1
@@ -253,6 +253,9 @@
2
    char                   *parsed_data_dir;
3
    bool                   bin_found = true;
4
 
5
+   if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0)
6
+       return;
7
+
8
    file = strrchr(path, '/');
9
    file = file ? (file + 1) : path;
10
 
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-output.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-output.c Changed
201
 
1
@@ -135,9 +135,13 @@
2
            obs_encoder_remove_output(output->video_encoder,
3
                    output);
4
        }
5
-       if (output->audio_encoder) {
6
-           obs_encoder_remove_output(output->audio_encoder,
7
-                   output);
8
+
9
+       for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
10
+           if (output->audio_encoders[i]) {
11
+               obs_encoder_remove_output(
12
+                       output->audio_encoders[i],
13
+                       output);
14
+           }
15
        }
16
 
17
        pthread_mutex_destroy(&output->interleaved_mutex);
18
@@ -330,15 +334,33 @@
19
    return output ? output->audio : NULL;
20
 }
21
 
22
+void obs_output_set_mixer(obs_output_t *output, size_t mixer_idx)
23
+{
24
+   if (!output)
25
+       return;
26
+
27
+   if (!output->active)
28
+       output->mixer_idx = mixer_idx;
29
+}
30
+
31
+size_t obs_output_get_mixer(const obs_output_t *output)
32
+{
33
+   return output ? output->mixer_idx : 0;
34
+}
35
+
36
 void obs_output_remove_encoder(struct obs_output *output,
37
        struct obs_encoder *encoder)
38
 {
39
    if (!output) return;
40
 
41
-   if (output->video_encoder == encoder)
42
+   if (output->video_encoder == encoder) {
43
        output->video_encoder = NULL;
44
-   else if (output->audio_encoder == encoder)
45
-       output->audio_encoder = NULL;
46
+   } else {
47
+       for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
48
+           if (output->audio_encoders[i] == encoder)
49
+               output->audio_encoders[i] = NULL;
50
+       }
51
+   }
52
 }
53
 
54
 void obs_output_set_video_encoder(obs_output_t *output, obs_encoder_t *encoder)
55
@@ -357,15 +379,27 @@
56
                output->scaled_width, output->scaled_height);
57
 }
58
 
59
-void obs_output_set_audio_encoder(obs_output_t *output, obs_encoder_t *encoder)
60
+void obs_output_set_audio_encoder(obs_output_t *output, obs_encoder_t *encoder,
61
+       size_t idx)
62
 {
63
    if (!output) return;
64
-   if (output->audio_encoder == encoder) return;
65
    if (encoder && encoder->info.type != OBS_ENCODER_AUDIO) return;
66
 
67
-   obs_encoder_remove_output(output->audio_encoder, output);
68
+   if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) {
69
+       if (idx >= MAX_AUDIO_MIXES) {
70
+           return;
71
+       }
72
+   } else {
73
+       if (idx > 0) {
74
+           return;
75
+       }
76
+   }
77
+
78
+   if (output->audio_encoders[idx] == encoder) return;
79
+
80
+   obs_encoder_remove_output(output->audio_encoders[idx], output);
81
    obs_encoder_add_output(encoder, output);
82
-   output->audio_encoder = encoder;
83
+   output->audio_encoders[idx] = encoder;
84
 }
85
 
86
 obs_encoder_t *obs_output_get_video_encoder(const obs_output_t *output)
87
@@ -373,9 +407,22 @@
88
    return output ? output->video_encoder : NULL;
89
 }
90
 
91
-obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output)
92
+obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output,
93
+       size_t idx)
94
 {
95
-   return output ? output->audio_encoder : NULL;
96
+   if (!output) return NULL;
97
+
98
+   if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) {
99
+       if (idx >= MAX_AUDIO_MIXES) {
100
+           return NULL;
101
+       }
102
+   } else {
103
+       if (idx > 0) {
104
+           return NULL;
105
+       }
106
+   }
107
+
108
+   return output->audio_encoders[idx];
109
 }
110
 
111
 void obs_output_set_service(obs_output_t *output, obs_service_t *service)
112
@@ -491,6 +538,61 @@
113
    output->audio_conversion_set = true;
114
 }
115
 
116
+static inline bool service_supports_multitrack(const struct obs_output *output)
117
+{
118
+   const struct obs_service *service = output->service;
119
+
120
+   if (!service || !service->info.supports_multitrack) {
121
+       return false;
122
+   }
123
+
124
+   return service->info.supports_multitrack(service->context.data);
125
+}
126
+
127
+static inline size_t num_audio_mixes(const struct obs_output *output)
128
+{
129
+   size_t mix_count = 1;
130
+
131
+   if ((output->info.flags & OBS_OUTPUT_SERVICE) != 0) {
132
+       if (!service_supports_multitrack(output)) {
133
+           return 1;
134
+       }
135
+   }
136
+
137
+   if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) {
138
+       mix_count = 0;
139
+
140
+       for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
141
+           if (!output->audio_encoders[i])
142
+               break;
143
+
144
+           mix_count++;
145
+       }
146
+   }
147
+
148
+   return mix_count;
149
+}
150
+
151
+static inline bool audio_valid(const struct obs_output *output, bool encoded)
152
+{
153
+   if (encoded) {
154
+       size_t mix_count = num_audio_mixes(output);
155
+       if (!mix_count)
156
+           return false;
157
+
158
+       for (size_t i = 0; i < mix_count; i++) {
159
+           if (!output->audio_encoders[i]) {
160
+               return false;
161
+           }
162
+       }
163
+   } else {
164
+       if (!output->audio)
165
+           return false;
166
+   }
167
+
168
+   return true;
169
+}
170
+
171
 static bool can_begin_data_capture(const struct obs_output *output,
172
        bool encoded, bool has_video, bool has_audio, bool has_service)
173
 {
174
@@ -505,12 +607,8 @@
175
    }
176
 
177
    if (has_audio) {
178
-       if (encoded) {
179
-           if (!output->audio_encoder)
180
-               return false;
181
-       } else {
182
-           if (!output->audio)
183
-               return false;
184
+       if (!audio_valid(output, encoded)) {
185
+           return false;
186
        }
187
    }
188
 
189
@@ -565,26 +663,43 @@
190
    return output->audio_conversion_set ? &output->audio_conversion : NULL;
191
 }
192
 
193
-static void apply_interleaved_packet_offset(struct obs_output *output,
194
-       struct encoder_packet *out)
195
+static size_t get_track_index(const struct obs_output *output,
196
+       struct encoder_packet *pkt)
197
 {
198
-   int64_t offset;
199
+   for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) {
200
+       struct obs_encoder *encoder = output->audio_encoders[i];
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-output.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-output.h Changed
9
 
1
@@ -26,6 +26,7 @@
2
 #define OBS_OUTPUT_AV          (OBS_OUTPUT_VIDEO | OBS_OUTPUT_AUDIO)
3
 #define OBS_OUTPUT_ENCODED     (1<<2)
4
 #define OBS_OUTPUT_SERVICE     (1<<3)
5
+#define OBS_OUTPUT_MULTI_TRACK (1<<4)
6
 
7
 struct encoder_packet;
8
 
9
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-properties.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-properties.h Changed
15
 
1
@@ -101,8 +101,11 @@
2
 EXPORT obs_property_t *obs_properties_get(obs_properties_t *props,
3
        const char *property);
4
 
5
-/* used internally by libobs */
6
-extern void obs_properties_apply_settings(obs_properties_t *props,
7
+/**
8
+ * Applies settings to the properties by calling all the necessary
9
+ * modification callbacks
10
+ */
11
+EXPORT void obs_properties_apply_settings(obs_properties_t *props,
12
        obs_data_t *settings);
13
 
14
 /* ------------------------------------------------------------------------- */
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-service.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-service.c Changed
30
 
1
@@ -142,7 +142,7 @@
2
    return NULL;
3
 }
4
 
5
-const char *obs_service_gettype(const obs_service_t *service)
6
+const char *obs_service_get_type(const obs_service_t *service)
7
 {
8
    return service ? service->info.id : NULL;
9
 }
10
@@ -235,3 +235,19 @@
11
        return service->info.initialize(service->context.data, output);
12
    return true;
13
 }
14
+
15
+void obs_service_apply_encoder_settings(obs_service_t *service,
16
+       obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder)
17
+{
18
+   if (!service || !service->info.apply_encoder_settings)
19
+       return;
20
+
21
+   if (video_encoder && video_encoder->info.type != OBS_ENCODER_VIDEO)
22
+       video_encoder = NULL;
23
+   if (audio_encoder && audio_encoder->info.type != OBS_ENCODER_AUDIO)
24
+       audio_encoder = NULL;
25
+
26
+   if (video_encoder || audio_encoder)
27
+       service->info.apply_encoder_settings(service->context.data,
28
+               video_encoder, audio_encoder);
29
+}
30
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-service.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-service.h Changed
13
 
1
@@ -63,6 +63,11 @@
2
    const char *(*get_username)(void *data);
3
    const char *(*get_password)(void *data);
4
 
5
+   bool (*supports_multitrack)(void *data);
6
+
7
+   void (*apply_encoder_settings)(void *data, obs_encoder_t *video_encoder,
8
+           obs_encoder_t *audio_encoder);
9
+
10
    /* TODO: more stuff later */
11
 };
12
 
13
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-source.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-source.c Changed
56
 
1
@@ -84,6 +84,7 @@
2
    "void update_flags(ptr source, int flags)",
3
    "void audio_sync(ptr source, int out int offset)",
4
    "void audio_data(ptr source, ptr data)",
5
+   "void audio_mixers(ptr source, in out int mixers)",
6
    NULL
7
 };
8
 
9
@@ -126,7 +127,7 @@
10
 
11
    if (info && info->output_flags & OBS_SOURCE_AUDIO) {
12
        source->audio_line = audio_output_create_line(obs->audio.audio,
13
-               source->context.name);
14
+               source->context.name, 0xF);
15
        if (!source->audio_line) {
16
            blog(LOG_ERROR, "Failed to create audio line for "
17
                            "source '%s'", source->context.name);
18
@@ -2167,6 +2168,37 @@
19
    return source ? source->flags : 0;
20
 }
21
 
22
+void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers)
23
+{
24
+   struct calldata data = {0};
25
+   uint32_t cur_mixers;
26
+
27
+   if (!source) return;
28
+   if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0) return;
29
+
30
+   cur_mixers = audio_line_get_mixers(source->audio_line);
31
+   if (cur_mixers == mixers)
32
+       return;
33
+
34
+   calldata_set_ptr(&data, "source", source);
35
+   calldata_set_int(&data, "mixers", mixers);
36
+
37
+   signal_handler_signal(source->context.signals, "audio_mixers", &data);
38
+
39
+   mixers = (uint32_t)calldata_int(&data, "mixers");
40
+   calldata_free(&data);
41
+
42
+   audio_line_set_mixers(source->audio_line, mixers);
43
+}
44
+
45
+uint32_t obs_source_get_audio_mixers(const obs_source_t *source)
46
+{
47
+   if (!source) return 0;
48
+   if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0) return 0;
49
+
50
+   return audio_line_get_mixers(source->audio_line);
51
+}
52
+
53
 void obs_source_draw_set_color_matrix(const struct matrix4 *color_matrix,
54
        const struct vec3 *color_range_min,
55
        const struct vec3 *color_range_max)
56
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-win-crash-handler.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-win-crash-handler.c Changed
11
 
1
@@ -295,9 +295,6 @@
2
            data->process, thread, &trace->frame, &trace->context,
3
            NULL, data->sym_function_table_access64,
4
            data->sym_get_module_base64, NULL);
5
-
6
-   int last_error = GetLastError();
7
-
8
    if (!success)
9
        return false;
10
 
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs-windows.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs-windows.c Changed
56
 
1
@@ -48,8 +48,23 @@
2
 
3
 void add_default_module_paths(void)
4
 {
5
+   char bin[512];
6
+   char data[512];
7
+   int ret;
8
+
9
    for (int i = 0; i < module_patterns_size; i++)
10
        obs_add_module_path(module_bin[i], module_data[i]);
11
+
12
+   ret = os_get_config_path(bin, sizeof(bin), "obs-plugins/%module%");
13
+   if (ret <= 0)
14
+       return;
15
+
16
+   strcpy(data, bin);
17
+   strcat(data, "/data");
18
+
19
+   strcat(bin, "/bin/" BIT_STRING);
20
+
21
+   obs_add_module_path(bin, data);
22
 }
23
 
24
 /* on windows, points to [base directory]/data/libobs */
25
@@ -97,7 +112,7 @@
26
    status = RegQueryValueExW(key, L"~MHz", NULL, NULL, (LPBYTE)&speed,
27
            &size);
28
    if (status == ERROR_SUCCESS)
29
-       blog(LOG_INFO, "CPU Speed: %dMHz", speed);
30
+       blog(LOG_INFO, "CPU Speed: %ldMHz", speed);
31
 
32
    RegCloseKey(key);
33
 }
34
@@ -163,9 +178,9 @@
35
    const char *note = " (NOTE: 4 gigs max is normal for 32bit programs)";
36
 #endif
37
 
38
-   blog(LOG_INFO, "Physical Memory: %ldMB Total, %ldMB Free%s",
39
-           ms.dwTotalPhys / 1048576,
40
-           ms.dwAvailPhys / 1048576,
41
+   blog(LOG_INFO, "Physical Memory: %luMB Total, %luMB Free%s",
42
+           (DWORD)(ms.dwTotalPhys / 1048576),
43
+           (DWORD)(ms.dwAvailPhys / 1048576),
44
            note);
45
 }
46
 
47
@@ -178,7 +193,7 @@
48
    GetVersionExW(&osvi);
49
 
50
    os_wcs_to_utf8_ptr(osvi.szCSDVersion, 0, &build);
51
-   blog(LOG_INFO, "Windows Version: %u.%u Build %u %s",
52
+   blog(LOG_INFO, "Windows Version: %ld.%ld Build %ld %s",
53
            osvi.dwMajorVersion,
54
            osvi.dwMinorVersion,
55
            osvi.dwBuildNumber,
56
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs.c Changed
36
 
1
@@ -1231,6 +1231,7 @@
2
    double       volume;
3
    int64_t      sync;
4
    uint32_t     flags;
5
+   uint32_t     mixers;
6
 
7
    source = obs_source_create(OBS_SOURCE_TYPE_INPUT, id, name, settings);
8
 
9
@@ -1241,6 +1242,10 @@
10
    sync = obs_data_get_int(source_data, "sync");
11
    obs_source_set_sync_offset(source, sync);
12
 
13
+   obs_data_set_default_int(source_data, "mixers", 0xF);
14
+   mixers = (uint32_t)obs_data_get_int(source_data, "mixers");
15
+   obs_source_set_audio_mixers(source, mixers);
16
+
17
    obs_data_set_default_int(source_data, "flags", source->default_flags);
18
    flags = (uint32_t)obs_data_get_int(source_data, "flags");
19
    obs_source_set_flags(source, flags);
20
@@ -1283,6 +1288,7 @@
21
    obs_data_t *source_data = obs_data_create();
22
    obs_data_t *settings    = obs_source_get_settings(source);
23
    float      volume      = obs_source_get_volume(source);
24
+   uint32_t   mixers      = obs_source_get_audio_mixers(source);
25
    int64_t    sync        = obs_source_get_sync_offset(source);
26
    uint32_t   flags       = obs_source_get_flags(source);
27
    const char *name       = obs_source_get_name(source);
28
@@ -1293,6 +1299,7 @@
29
    obs_data_set_string(source_data, "name",     name);
30
    obs_data_set_string(source_data, "id",       id);
31
    obs_data_set_obj   (source_data, "settings", settings);
32
+   obs_data_set_int   (source_data, "mixers",   mixers);
33
    obs_data_set_int   (source_data, "sync",     sync);
34
    obs_data_set_int   (source_data, "flags",    flags);
35
    obs_data_set_double(source_data, "volume",   volume);
36
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/obs.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/obs.h Changed
131
 
1
@@ -761,13 +761,25 @@
2
 /** Specifies to force audio to mono */
3
 #define OBS_SOURCE_FLAG_FORCE_MONO             (1<<1)
4
 
5
-/** Sets source flags.  Note that these are different from the main output
6
- * flags. */
7
+/**
8
+ * Sets source flags.  Note that these are different from the main output
9
+ * flags.  These are generally things that can be set by the source or user,
10
+ * while the output flags are more used to determine capabilities of a source.
11
+ */
12
 EXPORT void obs_source_set_flags(obs_source_t *source, uint32_t flags);
13
 
14
 /** Gets source flags. */
15
 EXPORT uint32_t obs_source_get_flags(const obs_source_t *source);
16
 
17
+/**
18
+ * Sets audio mixer flags.  These flags are used to specify which mixers
19
+ * the source's audio should be applied to.
20
+ */
21
+EXPORT void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers);
22
+
23
+/** Gets audio mixer flags */
24
+EXPORT uint32_t obs_source_get_audio_mixers(const obs_source_t *source);
25
+
26
 /* ------------------------------------------------------------------------- */
27
 /* Functions used by sources */
28
 
29
@@ -1030,6 +1042,12 @@
30
 /** Returns the audio media context associated with this output */
31
 EXPORT audio_t *obs_output_audio(const obs_output_t *output);
32
 
33
+/** Sets the current audio mixer for non-encoded outputs */
34
+EXPORT void obs_output_set_mixer(obs_output_t *output, size_t mixer_idx);
35
+
36
+/** Gets the current audio mixer for non-encoded outputs */
37
+EXPORT size_t obs_output_get_mixer(const obs_output_t *output);
38
+
39
 /**
40
  * Sets the current video encoder associated with this output,
41
  * required for encoded outputs
42
@@ -1039,16 +1057,27 @@
43
 
44
 /**
45
  * Sets the current audio encoder associated with this output,
46
- * required for encoded outputs
47
+ * required for encoded outputs.
48
+ *
49
+ * The idx parameter specifies the audio encoder index to set the encoder to.
50
+ * Only used with outputs that have multiple audio outputs (RTMP typically),
51
+ * otherwise the parameter is ignored.
52
  */
53
 EXPORT void obs_output_set_audio_encoder(obs_output_t *output,
54
-       obs_encoder_t *encoder);
55
+       obs_encoder_t *encoder, size_t idx);
56
 
57
 /** Returns the current video encoder associated with this output */
58
 EXPORT obs_encoder_t *obs_output_get_video_encoder(const obs_output_t *output);
59
 
60
-/** Returns the current audio encoder associated with this output */
61
-EXPORT obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output);
62
+/**
63
+ * Returns the current audio encoder associated with this output
64
+ *
65
+ * The idx parameter specifies the audio encoder index.  Only used with
66
+ * outputs that have multiple audio outputs, otherwise the parameter is
67
+ * ignored.
68
+ */
69
+EXPORT obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output,
70
+       size_t idx);
71
 
72
 /** Sets the current service associated with this output. */
73
 EXPORT void obs_output_set_service(obs_output_t *output,
74
@@ -1151,19 +1180,30 @@
75
  * @param  id        Audio Encoder ID
76
  * @param  name      Name to assign to this context
77
  * @param  settings  Settings
78
+ * @param  mixer_idx Index of the mixer to use for this audio encoder
79
  * @return           The video encoder context, or NULL if failed or not found.
80
  */
81
 EXPORT obs_encoder_t *obs_audio_encoder_create(const char *id, const char *name,
82
-       obs_data_t *settings);
83
+       obs_data_t *settings, size_t mixer_idx);
84
 
85
 /** Destroys an encoder context */
86
 EXPORT void obs_encoder_destroy(obs_encoder_t *encoder);
87
 
88
+EXPORT void obs_encoder_set_name(obs_encoder_t *encoder, const char *name);
89
 EXPORT const char *obs_encoder_get_name(const obs_encoder_t *encoder);
90
 
91
+/** Returns the codec of an encoder by the id */
92
+EXPORT const char *obs_get_encoder_codec(const char *id);
93
+
94
+/** Returns the type of an encoder by the id */
95
+EXPORT enum obs_encoder_type obs_get_encoder_type(const char *id);
96
+
97
 /** Returns the codec of the encoder */
98
 EXPORT const char *obs_encoder_get_codec(const obs_encoder_t *encoder);
99
 
100
+/** Returns the type of an encoder */
101
+EXPORT enum obs_encoder_type obs_encoder_get_type(const obs_encoder_t *encoder);
102
+
103
 /**
104
  * Sets the scaled resolution for a video encoder.  Set width and height to 0
105
  * to disable scaling.  If the encoder is active, this function will trigger
106
@@ -1255,7 +1295,7 @@
107
 EXPORT obs_properties_t *obs_service_properties(const obs_service_t *service);
108
 
109
 /** Gets the service type */
110
-EXPORT const char *obs_service_gettype(const obs_service_t *service);
111
+EXPORT const char *obs_service_get_type(const obs_service_t *service);
112
 
113
 /** Updates the settings of the service context */
114
 EXPORT void obs_service_update(obs_service_t *service, obs_data_t *settings);
115
@@ -1275,6 +1315,15 @@
116
 /** Returns the password (if any) for this service context */
117
 EXPORT const char *obs_service_get_password(const obs_service_t *service);
118
 
119
+/**
120
+ * Applies service-specific video encoder settings.
121
+ *
122
+ * @param  video_encoder  Video encoder to apply settings to.  Optional.
123
+ * @param  audio_encoder  Audio encoder to apply settings to.  Optional.
124
+ */
125
+EXPORT void obs_service_apply_encoder_settings(obs_service_t *service,
126
+       obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder);
127
+
128
 
129
 /* ------------------------------------------------------------------------- */
130
 /* Source frame allocation functions */
131
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/platform-cocoa.m -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/platform-cocoa.m Changed
23
 
1
@@ -68,7 +68,20 @@
2
 }
3
 
4
 /* gets the location ~/Library/Application Support/[name] */
5
-char *os_get_config_path(const char *name)
6
+int os_get_config_path(char *dst, size_t size, const char *name)
7
+{
8
+   NSArray *paths = NSSearchPathForDirectoriesInDomains(
9
+           NSApplicationSupportDirectory, NSUserDomainMask, YES);
10
+
11
+   if([paths count] == 0)
12
+       bcrash("Could not get home directory (platform-cocoa)");
13
+
14
+   NSString *application_support = paths[0];
15
+   const char *base_path = [application_support UTF8String];
16
+   return snprintf(dst, size, "%s/%s", base_path, name);
17
+}
18
+
19
+char *os_get_config_path_ptr(const char *name)
20
 {
21
    NSArray *paths = NSSearchPathForDirectoriesInDomains(
22
            NSApplicationSupportDirectory, NSUserDomainMask, YES);
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/platform-nix.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/platform-nix.c Changed
19
 
1
@@ -154,7 +154,16 @@
2
 }
3
 
4
 /* should return $HOME/.[name] */
5
-char *os_get_config_path(const char *name)
6
+int os_get_config_path(char *dst, size_t size, const char *name)
7
+{
8
+   char *path_ptr = getenv("HOME");
9
+   if (path_ptr == NULL)
10
+       bcrash("Could not get $HOME\n");
11
+
12
+   return snprintf(dst, size, "%s/.%s", path_ptr, name);
13
+}
14
+
15
+char *os_get_config_path_ptr(const char *name)
16
 {
17
    char *path_ptr = getenv("HOME");
18
    if (path_ptr == NULL)
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/platform-windows.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/platform-windows.c Changed
45
 
1
@@ -67,7 +67,7 @@
2
    dstr_free(&dll_name);
3
 
4
    if (!h_library)
5
-       blog(LOG_INFO, "LoadLibrary failed for '%s', error: %u",
6
+       blog(LOG_INFO, "LoadLibrary failed for '%s', error: %ld",
7
                path, GetLastError());
8
 
9
    return h_library;
10
@@ -191,7 +191,25 @@
11
 }
12
 
13
 /* returns %appdata%\[name] on windows */
14
-char *os_get_config_path(const char *name)
15
+int os_get_config_path(char *dst, size_t size, const char *name)
16
+{
17
+   wchar_t path_utf16[MAX_PATH];
18
+
19
+   SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT,
20
+           path_utf16);
21
+
22
+   if (os_wcs_to_utf8(path_utf16, 0, dst, size) != 0) {
23
+       if (strcat_s(dst, size, "\\") == 0) {
24
+           if (strcat_s(dst, size, name) == 0) {
25
+               return (int)strlen(dst);
26
+           }
27
+       }
28
+   }
29
+
30
+   return -1;
31
+}
32
+
33
+char *os_get_config_path_ptr(const char *name)
34
 {
35
    char *ptr;
36
    wchar_t path_utf16[MAX_PATH];
37
@@ -320,7 +338,6 @@
38
    HANDLE                    handle;
39
    WIN32_FIND_DATA           wfd;
40
    int                       ret = -1;
41
-   os_glob_t                 *out = NULL;
42
    wchar_t                   *w_path;
43
 
44
    da_init(files);
45
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/platform.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/platform.h Changed
11
 
1
@@ -90,7 +90,8 @@
2
 
3
 EXPORT uint64_t os_gettime_ns(void);
4
 
5
-EXPORT char *os_get_config_path(const char *name);
6
+EXPORT int os_get_config_path(char *dst, size_t size, const char *name);
7
+EXPORT char *os_get_config_path_ptr(const char *name);
8
 
9
 EXPORT bool os_file_exists(const char *path);
10
 
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/threading-posix.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/threading-posix.c Changed
34
 
1
@@ -14,8 +14,10 @@
2
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3
  */
4
 
5
-#ifdef __APPLE__
6
+#if defined(__APPLE__) || defined(__MINGW32__)
7
 #include <sys/time.h>
8
+#endif
9
+#ifdef __APPLE__
10
 #include <mach/semaphore.h>
11
 #include <mach/task.h>
12
 #include <mach/mach_init.h>
13
@@ -100,7 +102,7 @@
14
    pthread_mutex_lock(&event->mutex);
15
    if (!event->signalled) {
16
        struct timespec ts;
17
-#ifdef __APPLE__
18
+#if defined(__APPLE__) || defined(__MINGW32__)
19
        struct timeval tv;
20
        gettimeofday(&tv, NULL);
21
        ts.tv_sec  = tv.tv_sec;
22
@@ -252,9 +254,9 @@
23
 
24
 void os_set_thread_name(const char *name)
25
 {
26
-#ifdef __APPLE__
27
+#if defined(__APPLE__)
28
    pthread_setname_np(name);
29
-#else
30
+#elif !defined(__MINGW32__)
31
    pthread_setname_np(pthread_self(), name);
32
 #endif
33
 }
34
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/threading-windows.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/threading-windows.c Changed
51
 
1
@@ -20,6 +20,21 @@
2
 #define WIN32_LEAN_AND_MEAN
3
 #include <windows.h>
4
 
5
+#ifdef __MINGW32__
6
+#include <excpt.h>
7
+#ifndef TRYLEVEL_NONE
8
+#ifndef __MINGW64__
9
+#define NO_SEH_MINGW
10
+#endif
11
+#ifndef __try
12
+#define __try
13
+#endif
14
+#ifndef __except
15
+#define __except(x) if (0)
16
+#endif
17
+#endif
18
+#endif
19
+
20
 struct os_event_data {
21
    HANDLE handle;
22
 };
23
@@ -177,15 +192,27 @@
24
 
25
 void os_set_thread_name(const char *name)
26
 {
27
+#ifdef __MINGW32__
28
+   UNUSED_PARAMETER(name);
29
+#else
30
    struct vs_threadname_info info;
31
    info.type = 0x1000;
32
    info.name = name;
33
    info.thread_id = GetCurrentThreadId();
34
    info.flags = 0;
35
 
36
+#ifdef NO_SEH_MINGW
37
+   __try1(EXCEPTION_EXECUTE_HANDLER) {
38
+#else
39
    __try {
40
+#endif
41
        RaiseException(VC_EXCEPTION, 0, THREADNAME_INFO_SIZE,
42
                (ULONG_PTR*)&info);
43
+#ifdef NO_SEH_MINGW
44
+   } __except1 {
45
+#else
46
    } __except(EXCEPTION_EXECUTE_HANDLER) {
47
+#endif
48
    }
49
+#endif
50
 }
51
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/utf8.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/utf8.c Changed
66
 
1
@@ -17,6 +17,58 @@
2
 
3
 #include "utf8.h"
4
 
5
+#ifdef _WIN32
6
+
7
+#include <windows.h>
8
+#include "c99defs.h"
9
+
10
+static inline bool has_utf8_bom(const char *in_char)
11
+{
12
+   uint8_t *in = (uint8_t*)in_char;
13
+   return (in && in[0] == 0xef && in[1] == 0xbb && in[2] == 0xbf);
14
+}
15
+
16
+size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out,
17
+       size_t outsize, int flags)
18
+{
19
+   int i_insize = (int)insize;
20
+   int ret;
21
+
22
+   if (i_insize == 0)
23
+       i_insize = (int)strlen(in);
24
+
25
+   /* prevent bom from being used in the string */
26
+   if (has_utf8_bom(in)) {
27
+       if (i_insize >= 3) {
28
+           in += 3;
29
+           insize -= 3;
30
+       }
31
+   }
32
+
33
+   ret = MultiByteToWideChar(CP_UTF8, 0, in, i_insize, out, (int)outsize);
34
+
35
+   UNUSED_PARAMETER(flags);
36
+   return (ret > 0) ? (size_t)ret : 0;
37
+}
38
+
39
+size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out,
40
+       size_t outsize, int flags)
41
+{
42
+   int i_insize = (int)insize;
43
+   int ret;
44
+
45
+   if (i_insize == 0)
46
+       i_insize = (int)wcslen(in);
47
+
48
+   ret = WideCharToMultiByte(CP_UTF8, 0, in, i_insize, out, (int)outsize,
49
+           NULL, NULL);
50
+
51
+   UNUSED_PARAMETER(flags);
52
+   return (ret > 0) ? (size_t)ret : 0;
53
+}
54
+
55
+#else
56
+
57
 #define _NXT   0x80
58
 #define _SEQ2  0xc0
59
 #define _SEQ3  0xe0
60
@@ -318,3 +370,5 @@
61
 
62
    return total;
63
 }
64
+
65
+#endif
66
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/libobs/util/windows/ComPtr.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/libobs/util/windows/ComPtr.hpp Changed
113
 
1
@@ -19,7 +19,9 @@
2
 /* Oh no I have my own com pointer class, the world is ending, how dare you
3
  * write your own! */
4
 
5
-template<typename T> class ComPtr {
6
+template<class T> class ComPtr {
7
+
8
+protected:
9
    T *ptr;
10
 
11
    inline void Kill()
12
@@ -38,11 +40,11 @@
13
    }
14
 
15
 public:
16
-   inline ComPtr() : ptr(NULL)                  {}
17
-   inline ComPtr(T *p) : ptr(p)                 {if (ptr) ptr->AddRef();}
18
-   inline ComPtr(const ComPtr &c) : ptr(c.ptr)  {if (ptr) ptr->AddRef();}
19
-   inline ComPtr(ComPtr &&c) : ptr(c.ptr)       {c.ptr = NULL;}
20
-   inline ~ComPtr()                             {Kill();}
21
+   inline ComPtr() : ptr(NULL)                    {}
22
+   inline ComPtr(T *p) : ptr(p)                   {if (ptr) ptr->AddRef();}
23
+   inline ComPtr(const ComPtr<T> &c) : ptr(c.ptr) {if (ptr) ptr->AddRef();}
24
+   inline ComPtr(ComPtr<T> &&c) : ptr(c.ptr)      {c.ptr = NULL;}
25
+   inline ~ComPtr()                               {Kill();}
26
 
27
    inline void Clear()
28
    {
29
@@ -52,19 +54,19 @@
30
        }
31
    }
32
 
33
-   inline ComPtr &operator=(T *p)
34
+   inline ComPtr<T> &operator=(T *p)
35
    {
36
        Replace(p);
37
        return *this;
38
    }
39
 
40
-   inline ComPtr &operator=(const ComPtr &c)
41
+   inline ComPtr<T> &operator=(const ComPtr<T> &c)
42
    {
43
        Replace(c.ptr);
44
        return *this;
45
    }
46
 
47
-   inline ComPtr &operator=(ComPtr &&c)
48
+   inline ComPtr<T> &operator=(ComPtr<T> &&c)
49
    {
50
        if (this != &c) {
51
            Kill();
52
@@ -75,13 +77,37 @@
53
        return *this;
54
    }
55
 
56
+   inline T *Detach()
57
+   {
58
+       T *out = ptr;
59
+       ptr = nullptr;
60
+       return out;
61
+   }
62
+
63
+   inline void CopyTo(T **out)
64
+   {
65
+       if (out) {
66
+           if (ptr) ptr->AddRef();
67
+           *out = ptr;
68
+       }
69
+   }
70
+
71
+   inline ULONG Release()
72
+   {
73
+       ULONG ref;
74
+
75
+       if (!ptr) return 0;
76
+       ref = ptr->Release();
77
+       ptr = nullptr;
78
+       return ref;
79
+   }
80
+
81
    inline T **Assign()                {Clear(); return &ptr;}
82
    inline void Set(T *p)              {Kill(); ptr = p;}
83
 
84
    inline T *Get() const              {return ptr;}
85
 
86
-   /* nabbed this one from virtualdub */
87
-   inline T **operator~()             {return Assign();}
88
+   inline T **operator&()             {return Assign();}
89
 
90
    inline    operator T*() const      {return ptr;}
91
    inline T *operator->() const       {return ptr;}
92
@@ -91,3 +117,20 @@
93
 
94
    inline bool operator!() const      {return !ptr;}
95
 };
96
+
97
+template<class T> class ComQIPtr : public ComPtr<T> {
98
+
99
+public:
100
+   inline ComQIPtr(IUnknown *unk)
101
+   {
102
+       this->ptr = nullptr;
103
+       unk->QueryInterface(__uuidof(T), (void**)&this->ptr);
104
+   }
105
+
106
+   inline ComPtr<T> &operator=(IUnknown *unk)
107
+   {
108
+       ComPtr<T>::Clear();
109
+       unk->QueryInterface(__uuidof(T), (void**)&this->ptr);
110
+       return *this;
111
+   }
112
+};
113
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/CMakeLists.txt Changed
17
 
1
@@ -93,6 +93,7 @@
2
    window-basic-settings.cpp
3
    window-basic-interaction.cpp
4
    window-basic-properties.cpp
5
+   window-basic-main-outputs.cpp
6
    window-basic-source-select.cpp
7
    window-license-agreement.cpp
8
    window-basic-status-bar.cpp
9
@@ -118,6 +119,7 @@
10
    window-basic-settings.hpp
11
    window-basic-interaction.hpp
12
    window-basic-properties.hpp
13
+   window-basic-main-outputs.hpp
14
    window-basic-source-select.hpp
15
    window-license-agreement.hpp
16
    window-basic-status-bar.hpp
17
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/adv-audio-control.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/adv-audio-control.cpp Changed
201
 
1
@@ -1,4 +1,5 @@
2
 #include <QHBoxLayout>
3
+#include <QGridLayout>
4
 #include <QLabel>
5
 #include <QSpinBox>
6
 #include <QCheckBox>
7
@@ -10,21 +11,18 @@
8
 #define NSEC_PER_MSEC 1000000
9
 #endif
10
 
11
-OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
12
+OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_)
13
    : source(source_)
14
 {
15
-   QWidget *forceMonoContainer;
16
-   QWidget *mediaChannelContainer;
17
-   QWidget *panningContainer;
18
    QHBoxLayout *hlayout;
19
-   QLabel  *labelL, *labelR;
20
    signal_handler_t *handler = obs_source_get_signal_handler(source);
21
    const char *sourceName = obs_source_get_name(source);
22
    float vol = obs_source_get_volume(source);
23
    uint32_t flags = obs_source_get_flags(source);
24
+   uint32_t mixers = obs_source_get_audio_mixers(source);
25
 
26
    forceMonoContainer             = new QWidget();
27
-   mediaChannelContainer          = new QWidget();
28
+   mixerContainer                 = new QWidget();
29
    panningContainer               = new QWidget();
30
    labelL                         = new QLabel();
31
    labelR                         = new QLabel();
32
@@ -33,10 +31,10 @@
33
    forceMono                      = new QCheckBox();
34
    panning                        = new QSlider(Qt::Horizontal);
35
    syncOffset                     = new QSpinBox();
36
-   mediaChannel1                  = new QCheckBox();
37
-   mediaChannel2                  = new QCheckBox();
38
-   mediaChannel3                  = new QCheckBox();
39
-   mediaChannel4                  = new QCheckBox();
40
+   mixer1                         = new QCheckBox();
41
+   mixer2                         = new QCheckBox();
42
+   mixer3                         = new QCheckBox();
43
+   mixer4                         = new QCheckBox();
44
 
45
    volChangedSignal.Connect(handler, "volume", OBSSourceVolumeChanged,
46
            this);
47
@@ -44,16 +42,19 @@
48
            this);
49
    flagsSignal.Connect(handler, "update_flags", OBSSourceFlagsChanged,
50
            this);
51
+   mixersSignal.Connect(handler, "audio_mixers", OBSSourceMixersChanged,
52
+           this);
53
 
54
    hlayout = new QHBoxLayout();
55
    hlayout->setContentsMargins(0, 0, 0, 0);
56
    forceMonoContainer->setLayout(hlayout);
57
    hlayout = new QHBoxLayout();
58
    hlayout->setContentsMargins(0, 0, 0, 0);
59
-   mediaChannelContainer->setLayout(hlayout);
60
+   mixerContainer->setLayout(hlayout);
61
    hlayout = new QHBoxLayout();
62
    hlayout->setContentsMargins(0, 0, 0, 0);
63
    panningContainer->setLayout(hlayout);
64
+   panningContainer->setMinimumWidth(100);
65
 
66
    labelL->setText("L");
67
 
68
@@ -65,14 +66,10 @@
69
 
70
    volume->setMinimum(0);
71
    volume->setMaximum(2000);
72
-   volume->setMinimumWidth(130);
73
-   volume->setMaximumWidth(130);
74
    volume->setValue(int(vol * 100.0f));
75
 
76
    forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
77
 
78
-   forceMonoContainer->setMinimumWidth(130);
79
-   forceMonoContainer->setMaximumWidth(130);
80
    forceMonoContainer->layout()->addWidget(forceMono);
81
    forceMonoContainer->layout()->setAlignment(forceMono,
82
            Qt::AlignHCenter | Qt::AlignVCenter);
83
@@ -86,32 +83,26 @@
84
    int64_t cur_sync = obs_source_get_sync_offset(source);
85
    syncOffset->setMinimum(-20000);
86
    syncOffset->setMaximum(20000);
87
-   syncOffset->setMinimumWidth(130);
88
-   syncOffset->setMaximumWidth(130);
89
    syncOffset->setValue(int(cur_sync / NSEC_PER_MSEC));
90
 
91
-   mediaChannel1->setChecked(true);
92
-   mediaChannel1->setText("1");
93
-   mediaChannel1->setEnabled(false);
94
-   mediaChannel2->setText("2");
95
-   mediaChannel2->setEnabled(false);
96
-   mediaChannel3->setText("3");
97
-   mediaChannel3->setEnabled(false);
98
-   mediaChannel4->setText("4");
99
-   mediaChannel4->setEnabled(false);
100
-
101
-   panningContainer->setMinimumWidth(140);
102
-   panningContainer->setMaximumWidth(140);
103
+   mixer1->setText("1");
104
+   mixer1->setChecked(mixers & (1<<0));
105
+   mixer2->setText("2");
106
+   mixer2->setChecked(mixers & (1<<1));
107
+   mixer3->setText("3");
108
+   mixer3->setChecked(mixers & (1<<2));
109
+   mixer4->setText("4");
110
+   mixer4->setChecked(mixers & (1<<3));
111
+
112
    panningContainer->layout()->addWidget(labelL);
113
    panningContainer->layout()->addWidget(panning);
114
    panningContainer->layout()->addWidget(labelR);
115
+   panningContainer->setMaximumWidth(170);
116
 
117
-   mediaChannelContainer->setMinimumWidth(160);
118
-   mediaChannelContainer->setMaximumWidth(160);
119
-   mediaChannelContainer->layout()->addWidget(mediaChannel1);
120
-   mediaChannelContainer->layout()->addWidget(mediaChannel2);
121
-   mediaChannelContainer->layout()->addWidget(mediaChannel3);
122
-   mediaChannelContainer->layout()->addWidget(mediaChannel4);
123
+   mixerContainer->layout()->addWidget(mixer1);
124
+   mixerContainer->layout()->addWidget(mixer2);
125
+   mixerContainer->layout()->addWidget(mixer3);
126
+   mixerContainer->layout()->addWidget(mixer4);
127
 
128
    QWidget::connect(volume, SIGNAL(valueChanged(int)),
129
            this, SLOT(volumeChanged(int)));
130
@@ -121,25 +112,35 @@
131
            this, SLOT(panningChanged(int)));
132
    QWidget::connect(syncOffset, SIGNAL(valueChanged(int)),
133
            this, SLOT(syncOffsetChanged(int)));
134
-   QWidget::connect(mediaChannel1, SIGNAL(clicked(bool)),
135
-           this, SLOT(mediaChannel1Changed(bool)));
136
-   QWidget::connect(mediaChannel2, SIGNAL(clicked(bool)),
137
-           this, SLOT(mediaChannel2Changed(bool)));
138
-   QWidget::connect(mediaChannel3, SIGNAL(clicked(bool)),
139
-           this, SLOT(mediaChannel3Changed(bool)));
140
-   QWidget::connect(mediaChannel4, SIGNAL(clicked(bool)),
141
-           this, SLOT(mediaChannel4Changed(bool)));
142
-
143
-   hlayout = new QHBoxLayout;
144
-   hlayout->setContentsMargins(0, 0, 0, 0);
145
-   hlayout->addWidget(nameLabel);
146
-   hlayout->addWidget(volume);
147
-   hlayout->addWidget(forceMonoContainer);
148
-   hlayout->addWidget(panningContainer);
149
-   hlayout->addWidget(syncOffset);
150
-   hlayout->addWidget(mediaChannelContainer);
151
-   setLayout(hlayout);
152
-   setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
153
+   QWidget::connect(mixer1, SIGNAL(clicked(bool)),
154
+           this, SLOT(mixer1Changed(bool)));
155
+   QWidget::connect(mixer2, SIGNAL(clicked(bool)),
156
+           this, SLOT(mixer2Changed(bool)));
157
+   QWidget::connect(mixer3, SIGNAL(clicked(bool)),
158
+           this, SLOT(mixer3Changed(bool)));
159
+   QWidget::connect(mixer4, SIGNAL(clicked(bool)),
160
+           this, SLOT(mixer4Changed(bool)));
161
+
162
+   int lastRow = layout->rowCount();
163
+
164
+   layout->addWidget(nameLabel, lastRow, 0);
165
+   layout->addWidget(volume, lastRow, 1);
166
+   layout->addWidget(forceMonoContainer, lastRow, 2);
167
+   layout->addWidget(panningContainer, lastRow, 3);
168
+   layout->addWidget(syncOffset, lastRow, 4);
169
+   layout->addWidget(mixerContainer, lastRow, 5);
170
+   layout->layout()->setAlignment(mixerContainer,
171
+           Qt::AlignHCenter | Qt::AlignVCenter);
172
+}
173
+
174
+OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
175
+{
176
+   nameLabel->deleteLater();
177
+   volume->deleteLater();
178
+   forceMonoContainer->deleteLater();
179
+   panningContainer->deleteLater();
180
+   syncOffset->deleteLater();
181
+   mixerContainer->deleteLater();
182
 }
183
 
184
 /* ------------------------------------------------------------------------- */
185
@@ -167,15 +168,27 @@
186
            "SourceSyncChanged", Q_ARG(int64_t, offset));
187
 }
188
 
189
+void OBSAdvAudioCtrl::OBSSourceMixersChanged(void *param, calldata_t *calldata)
190
+{
191
+   uint32_t mixers = (uint32_t)calldata_int(calldata, "mixers");
192
+   QMetaObject::invokeMethod(reinterpret_cast<OBSAdvAudioCtrl*>(param),
193
+           "SourceMixersChanged", Q_ARG(uint32_t, mixers));
194
+}
195
+
196
 /* ------------------------------------------------------------------------- */
197
 /* Qt event queue source callbacks */
198
 
199
+static inline void setCheckboxState(QCheckBox *checkbox, bool checked)
200
+{
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/adv-audio-control.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/adv-audio-control.hpp Changed
81
 
1
@@ -2,37 +2,49 @@
2
 
3
 #include <obs.hpp>
4
 #include <QWidget>
5
+#include <QPointer>
6
 
7
+class QGridLayout;
8
 class QLabel;
9
 class QSpinBox;
10
 class QCheckBox;
11
 class QSlider;
12
 
13
-class OBSAdvAudioCtrl : public QWidget {
14
+class OBSAdvAudioCtrl : public QObject {
15
    Q_OBJECT
16
 
17
 private:
18
    OBSSource              source;
19
-   QLabel                 *nameLabel              = nullptr;
20
-   QSpinBox               *volume                 = nullptr;
21
-   QCheckBox              *forceMono              = nullptr;
22
-   QSlider                *panning                = nullptr;
23
-   QSpinBox               *syncOffset             = nullptr;
24
-   QCheckBox              *mediaChannel1          = nullptr;
25
-   QCheckBox              *mediaChannel2          = nullptr;
26
-   QCheckBox              *mediaChannel3          = nullptr;
27
-   QCheckBox              *mediaChannel4          = nullptr;
28
+
29
+   QPointer<QWidget>      forceMonoContainer;
30
+   QPointer<QWidget>      mixerContainer;
31
+   QPointer<QWidget>      panningContainer;
32
+
33
+   QPointer<QLabel>       nameLabel;
34
+   QPointer<QSpinBox>     volume;
35
+   QPointer<QCheckBox>    forceMono;
36
+   QPointer<QSlider>      panning;
37
+   QPointer<QLabel>       labelL;
38
+   QPointer<QLabel>       labelR;
39
+   QPointer<QSpinBox>     syncOffset;
40
+   QPointer<QCheckBox>    mixer1;
41
+   QPointer<QCheckBox>    mixer2;
42
+   QPointer<QCheckBox>    mixer3;
43
+   QPointer<QCheckBox>    mixer4;
44
 
45
    OBSSignal              volChangedSignal;
46
    OBSSignal              syncOffsetSignal;
47
    OBSSignal              flagsSignal;
48
+   OBSSignal              mixersSignal;
49
 
50
    static void OBSSourceFlagsChanged(void *param, calldata_t *calldata);
51
    static void OBSSourceVolumeChanged(void *param, calldata_t *calldata);
52
    static void OBSSourceSyncChanged(void *param, calldata_t *calldata);
53
+   static void OBSSourceMixersChanged(void *param, calldata_t *calldata);
54
 
55
 public:
56
-   OBSAdvAudioCtrl(obs_source_t *source_);
57
+   OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_);
58
+   virtual ~OBSAdvAudioCtrl();
59
 
60
    inline obs_source_t *GetSource() const {return source;}
61
 
62
@@ -40,13 +52,14 @@
63
    void SourceFlagsChanged(uint32_t flags);
64
    void SourceVolumeChanged(float volume);
65
    void SourceSyncChanged(int64_t offset);
66
+   void SourceMixersChanged(uint32_t mixers);
67
 
68
    void volumeChanged(int percentage);
69
    void downmixMonoChanged(bool checked);
70
    void panningChanged(int val);
71
    void syncOffsetChanged(int milliseconds);
72
-   void mediaChannel1Changed(bool checked);
73
-   void mediaChannel2Changed(bool checked);
74
-   void mediaChannel3Changed(bool checked);
75
-   void mediaChannel4Changed(bool checked);
76
+   void mixer1Changed(bool checked);
77
+   void mixer2Changed(bool checked);
78
+   void mixer3Changed(bool checked);
79
+   void mixer4Changed(bool checked);
80
 };
81
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/ar-SA.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/ar-SA.ini Changed
41
 
1
@@ -25,6 +25,7 @@
2
 NameExists.Text="الاسم مستخدم حاليا."
3
 
4
 
5
+
6
 ConfirmRemove.Title="تأكيد الإزالة"
7
 ConfirmRemove.Text="هل أنت متأكد من رغبتك في إزالة '$1' ?"
8
 
9
@@ -163,8 +164,6 @@
10
 
11
 Basic.Settings.Output="المخرج"
12
 Basic.Settings.Output.Mode="نوع المخرج"
13
-Basic.Settings.Output.Mode.Simple="بسيط (بث و/أو تسجيل)"
14
-Basic.Settings.Output.Mode.Advanced="متقدم (أنواع إخراج مخصصة)"
15
 Basic.Settings.Output.Simple.SavePath="مسار تسجيل FLV"
16
 Basic.Settings.Output.VideoBitrate="معدل البت للفيديو"
17
 Basic.Settings.Output.AudioBitrate="معدل البت للصوت"
18
@@ -172,6 +171,8 @@
19
 Basic.Settings.Output.RetryDelay="إعادة محاولة تأخير (ثوان)"
20
 Basic.Settings.Output.MaxRetries="أقصى عدد للمحاولات"
21
 
22
+
23
+
24
 Basic.Settings.Video="الفيديو"
25
 Basic.Settings.Video.Adapter="محول الفيديو:"
26
 Basic.Settings.Video.BaseResolution="قاعدة الأبعاد:"
27
@@ -188,6 +189,7 @@
28
 Basic.Settings.Video.InvalidResolution="قيمة الأبعاد غير صالحة.  يجب أن يكون [العرض] x [الطول] (مثال. 1920 × 1080)"
29
 Basic.Settings.Video.CurrentlyActive="إخراج الفيديو نشط حاليا. الرجاء إيقاف كل الإخراجات لتغيير إعدادات الفيديو."
30
 
31
+
32
 Basic.Settings.Audio="الصوت"
33
 Basic.Settings.Audio.SampleRate="معدل العينات"
34
 Basic.Settings.Audio.Channels="قنوات"
35
@@ -197,3 +199,5 @@
36
 Basic.Settings.Audio.AuxDevice2="جهاز صوت Mic/Auxiliary 2"
37
 Basic.Settings.Audio.AuxDevice3="جهاز صوت Mic/Auxiliary 3"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/bg-BG.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/bg-BG.ini Changed
41
 
1
@@ -25,6 +25,7 @@
2
 NameExists.Text="Името е вече използвано."
3
 
4
 
5
+
6
 ConfirmRemove.Title="Потвърди премахване"
7
 ConfirmRemove.Text="Наистина ли искате да премахнете \"$1\"?"
8
 
9
@@ -159,8 +160,6 @@
10
 
11
 Basic.Settings.Output="Излъчване"
12
 Basic.Settings.Output.Mode="Режим на излъчване"
13
-Basic.Settings.Output.Mode.Simple="Прост (Стрийм и/или записване)"
14
-Basic.Settings.Output.Mode.Advanced="Разширен (Персонализиран тип на излъчване)"
15
 Basic.Settings.Output.Simple.SavePath="FLV път за запис"
16
 Basic.Settings.Output.VideoBitrate="Видео битрейт"
17
 Basic.Settings.Output.AudioBitrate="Аудио битрейт"
18
@@ -168,6 +167,8 @@
19
 Basic.Settings.Output.RetryDelay="Отлагане на повторно свързване (секунди)"
20
 Basic.Settings.Output.MaxRetries="Максимален брой повторни опити"
21
 
22
+
23
+
24
 Basic.Settings.Video="Видео"
25
 Basic.Settings.Video.Adapter="Видео адаптер:"
26
 Basic.Settings.Video.BaseResolution="Базова резолюция:"
27
@@ -183,6 +184,7 @@
28
 Basic.Settings.Video.InvalidResolution="Невалидна резолюция. Трябва да бъде [ширина] x [височина] (пример: 1920 x 1080)"
29
 Basic.Settings.Video.CurrentlyActive="В момента излъчвате. Моля спрете излъчването за да промените видео настройките."
30
 
31
+
32
 Basic.Settings.Audio="Аудио"
33
 Basic.Settings.Audio.SampleRate="Честота на дискретизацията"
34
 Basic.Settings.Audio.Channels="Канали"
35
@@ -192,3 +194,5 @@
36
 Basic.Settings.Audio.AuxDevice2="Микрофон/Вторично аудио устройство 2"
37
 Basic.Settings.Audio.AuxDevice3="Микрофон/Вторично аудио устройство 3"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/cs-CZ.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/cs-CZ.ini Changed
87
 
1
@@ -24,18 +24,45 @@
2
 NameExists.Title="Jméno již existuje"
3
 NameExists.Text="Toto jméno již bylo použito."
4
 
5
+NoNameEntered.Title="Zadejte prosím platné jméno"
6
+NoNameEntered.Text="Jméno nesmí být prázdné."
7
+
8
 
9
 ConfirmRemove.Title="Potvrzení odebrání"
10
 ConfirmRemove.Text="Opravdu si přejete odebrat '$1'?"
11
 
12
 Output.ConnectFail.Title="Spojení se nezdařilo"
13
+Output.ConnectFail.BadPath="Chybná cesta nebo adresa připojení. Zkontrolujte, prosím, správnost svých nastavení."
14
+Output.ConnectFail.ConnectFailed="K serveru se nepodařilo připojit"
15
 Output.ConnectFail.Disconnected="Odpojen od serveru."
16
 
17
+Output.BadPath.Title="Špatná cesta k souboru"
18
 
19
+LogReturnDialog="Záznam byl úspěšně nahrán"
20
 LogReturnDialog.CopyURL="Zkopírovat URL"
21
-
22
-
23
-
24
+LogReturnDialog.ErrorUploadingLog="Nahrání záznamu se nezdařilo"
25
+
26
+LicenseAgreement="Licenční smlouva"
27
+LicenseAgreement.PleaseReview="Před použitím OBS si, prosím, přečtěte licenční podmínky. Použitím tohoto programu potvrzujete, že jste si přečetl/a a souhlasíte s podmínkami <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a>. Pro zobrazení zbytku ujednání sjeďte dolů."
28
+LicenseAgreement.ClickIAgreeToContinue="Pro pokračování klikněte na Souhlasím, pokud souhlasíte s podmínkami ujednání. Před použitím OBS je toto nutné odsouhlasit."
29
+LicenseAgreement.IAgree="Souhlasím"
30
+LicenseAgreement.Exit="Konec"
31
+
32
+Remux.SourceFile="Nahrávání OBS"
33
+Remux.TargetFile="Cílový soubor"
34
+Remux.Remux="Remuxovat"
35
+Remux.FinishedTitle="Remuxování dokončeno"
36
+Remux.Finished="Nahrávka remuxována"
37
+Remux.FinishedError="Nahrávka remuxována, ale soubor nemusí být kompletní"
38
+Remux.SelectRecording="Vyberte OBS nahrávku …"
39
+Remux.SelectTarget="Vyberte cílový soubor …"
40
+Remux.FileExistsTitle="Cílový soubor existuje"
41
+Remux.FileExists="Cílový soubor existuje, chcete jej nahradit ?"
42
+Remux.ExitUnfinishedTitle="Probíhá remuxování"
43
+Remux.ExitUnfinished="Remuxování není dokončeno, ukončení procesu může znemožnit další použití cílového souboru.\nOpravdu chcete tento proces zastavit?"
44
+
45
+UpdateAvailable="K dispozici je nová verze"
46
+UpdateAvailable.Text="Verze %1.%2.%3 je nyní k dispozici.  <a href='%4'>Stáhnout</a>"
47
 
48
 
49
 Basic.Scene="Scéna"
50
@@ -45,17 +72,27 @@
51
 
52
 Basic.Main.DefaultSceneName.Text="Scéna %1"
53
 
54
+Basic.SourceSelect="Vytvořit/vybrat zdroj"
55
 Basic.SourceSelect.CreateNew="Vytvořit nový"
56
 Basic.SourceSelect.AddExisting="Přidat existující"
57
 
58
+Basic.PropertiesWindow="Vlastnosti pro '%1'"
59
 Basic.PropertiesWindow.AutoSelectFormat="%1 (nepodporováno; auto-výběr: %2)"
60
+Basic.PropertiesWindow.SelectColor="Výběr barvy"
61
+Basic.PropertiesWindow.SelectFont="Výběr písma"
62
 
63
 
64
 
65
+Basic.TransformWindow.Position="Umístění"
66
+Basic.TransformWindow.Rotation="Otočení"
67
+Basic.TransformWindow.Size="Velikost"
68
 
69
 
70
 
71
 
72
+Basic.Main.Scenes="Scény"
73
+Basic.Main.Sources="Zdroje"
74
+Basic.Main.Connecting="Připojování..."
75
 
76
 Basic.MainMenu.File="&Soubor"
77
 
78
@@ -67,3 +104,8 @@
79
 
80
 
81
 
82
+
83
+
84
+
85
+
86
+
87
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/da-DK.ini Changed
110
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Anvend"
4
 Cancel="Annuller"
5
+Save="Gem"
6
+Discard="Kassér"
7
 Yes="Ja"
8
 No="Nej"
9
 Add="Tilføj"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Flyt Op"
12
 MoveDown="Flyt Ned"
13
 Settings="Indstillinger"
14
+Name="Navn"
15
 Exit="Afslut"
16
 Mixer="Mixer"
17
 Browse="Browse"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Indtast venligst et gyldigt navn"
20
 NoNameEntered.Text="Du kan ikke bruge tomme navne."
21
 
22
+ConfirmExit.Title="Forlad OBS?"
23
+ConfirmExit.Text="OBS er i øjeblikket aktivt.  Er du sikker på du ønsker at forlade det?"
24
+
25
 ConfirmRemove.Title="Bekræfte Fjern"
26
 ConfirmRemove.Text="Er du sikker på du ønsker at fjerne '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (ikke understøttet; autoselect: %2)"
30
 Basic.PropertiesWindow.SelectColor="Vælg farve"
31
 Basic.PropertiesWindow.SelectFont="Vælg skrifttype"
32
+Basic.PropertiesWindow.ConfirmTitle="Indstillinger ændret"
33
+Basic.PropertiesWindow.Confirm="Der er ændringer, som ikke er gemt.  Vil du gerne beholde dem?"
34
 
35
 Basic.InteractionWindow="Interagere med '%1'"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Flyt Ned (&D)"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Flyt til &Toppen"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Flyt til &Bunden"
41
+Basic.MainMenu.Edit.AdvAudio="&Avancerede lydegenskaber"
42
 
43
 Basic.MainMenu.Help="&Hjælp"
44
 Basic.MainMenu.Help.Logs="&Logfiler"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Stream Type"
47
 
48
 Basic.Settings.Output="Output"
49
+Basic.Settings.Output.Encoder="Encoder"
50
+Basic.Settings.Output.SelectDirectory="Vælg optagelsesmappe"
51
+Basic.Settings.Output.SelectFile="Vælg optagelsesfil"
52
 Basic.Settings.Output.Mode="Output Mode"
53
-Basic.Settings.Output.Mode.Simple="Enkel (Stream og/eller record)"
54
-Basic.Settings.Output.Mode.Advanced="Avanceret (brugerdefinerede outputtype)"
55
+Basic.Settings.Output.Mode.Simple="Simpel"
56
+Basic.Settings.Output.Mode.Adv="Avanceret"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg output"
58
 Basic.Settings.Output.Simple.SavePath="FLV Recording sti"
59
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
60
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
61
@@ -192,10 +205,23 @@
62
 Basic.Settings.Output.RetryDelay="Retry forsinkelse (sekunder)"
63
 Basic.Settings.Output.MaxRetries="Maksimum forsøg"
64
 Basic.Settings.Output.Advanced="Aktivere avancerede Encoder indstillinger"
65
-Basic.Settings.Output.X264Preset="x264 preset"
66
-Basic.Settings.Output.CustomX264Settings="Brugerdefinerede x264 indstillinger"
67
 Basic.Settings.Output.UseCBR="Brug konstant bitrate"
68
 
69
+Basic.Settings.Output.Adv.AudioTrack="Lydspor"
70
+Basic.Settings.Output.Adv.Streaming="Streaming"
71
+Basic.Settings.Output.Adv.ApplyServiceSettings="Håndhæv streaming service encoder indstillinger"
72
+Basic.Settings.Output.Adv.Audio.Track1="Spor 1"
73
+Basic.Settings.Output.Adv.Audio.Track2="Spor 2"
74
+Basic.Settings.Output.Adv.Audio.Track3="Spor 3"
75
+Basic.Settings.Output.Adv.Audio.Track4="Spor 4"
76
+
77
+Basic.Settings.Output.Adv.Recording="Optagelse"
78
+Basic.Settings.Output.Adv.Recording.Type="Type"
79
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
80
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Brug stream encoder)"
81
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alle filer"
82
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Filsti eller URL"
83
+
84
 Basic.Settings.Video="Video"
85
 Basic.Settings.Video.Adapter="Skærmkort:"
86
 Basic.Settings.Video.BaseResolution="Basis Opløsning:"
87
@@ -212,6 +238,7 @@
88
 Basic.Settings.Video.InvalidResolution="Ugyldig opløsningsværdi.  Skal være [bredde] x [højde] (dvs. 1920 x 1080)"
89
 Basic.Settings.Video.CurrentlyActive="Video output er aktiv i øjeblikket.  Venligst slukke eventuelle udgange til at ændre videoindstillinger."
90
 
91
+
92
 Basic.Settings.Audio="Lyd"
93
 Basic.Settings.Audio.SampleRate="Sample Rate"
94
 Basic.Settings.Audio.Channels="Kanaler"
95
@@ -221,3 +248,14 @@
96
 Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary lydenhed 2"
97
 Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary lydenhed 3"
98
 
99
+Basic.Settings.Advanced="Avanceret"
100
+Basic.Settings.Advanced.Video.ColorFormat="Farveformat"
101
+Basic.Settings.Advanced.Video.ColorRange.Partial="Delvis"
102
+Basic.Settings.Advanced.Video.ColorRange.Full="Fuld"
103
+
104
+Basic.AdvAudio="Avancerede lydegenskaber"
105
+Basic.AdvAudio.Name="Navn"
106
+Basic.AdvAudio.Volume="Volumen (%)"
107
+Basic.AdvAudio.Panning="Panorering"
108
+Basic.AdvAudio.AudioTracks="Spor"
109
+
110
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/de-DE.ini Changed
196
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Anwenden"
4
 Cancel="Abbrechen"
5
+Save="Speichern"
6
+Discard="Verwerfen"
7
 Yes="Ja"
8
 No="Nein"
9
 Add="Hinzufügen"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Nach oben bewegen"
12
 MoveDown="Nach unten bewegen"
13
 Settings="Einstellungen"
14
+Name="Name"
15
 Exit="Beenden"
16
 Mixer="Mixer"
17
 Browse="Durchsuchen"
18
@@ -27,14 +30,17 @@
19
 NoNameEntered.Title="Bitte geben Sie einen gültigen Namen ein"
20
 NoNameEntered.Text="Sie können leere Namen nicht verwenden."
21
 
22
+ConfirmExit.Title="OBS beenden?"
23
+ConfirmExit.Text="OBS ist derzeit aktiv.  Sind Sie sicher, dass Sie die Anwendung beenden wollen?"
24
+
25
 ConfirmRemove.Title="Entfernen bestätigen"
26
 ConfirmRemove.Text="Sind Sie sicher, dass Sie '$1' entfernen möchten?"
27
 
28
-Output.ConnectFail.Title="Verbindung fehlgeschalgen"
29
-Output.ConnectFail.BadPath="Ungültiger Pfad oder Verbindungs URL. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass sie gültig sind."
30
+Output.ConnectFail.Title="Verbindung fehlgeschlagen"
31
+Output.ConnectFail.BadPath="Ungültiger Pfad oder Verbindungs-URL. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass sie gültig sind."
32
 Output.ConnectFail.ConnectFailed="Verbindung zum Server fehlgeschlagen"
33
 Output.ConnectFail.InvalidStream="Konnte auf den angegebenen Kanal oder Streamschlüssel nicht zugreifen. Dies kann daran liegen, dass der Schlüssel oder Kanal ungültig ist, oder der Server noch denkt, dass Sie angemeldet bist."
34
-Output.ConnectFail.Error="Ein unerwarteter Fehler ist beim Verbindungsversuch zum Server aufgetreten. Mehr Informationen in der Logdatei."
35
+Output.ConnectFail.Error="Ein unerwarteter Fehler ist beim Verbindungsversuch zum Server aufgetreten. Mehr Informationen finden Sie in der Logdatei."
36
 Output.ConnectFail.Disconnected="Verbindung zum Server getrennt."
37
 
38
 Output.BadPath.Title="Ungültiger Dateipfad"
39
@@ -45,7 +51,7 @@
40
 LogReturnDialog.ErrorUploadingLog="Fehler beim Upload der Logdatei"
41
 
42
 LicenseAgreement="Lizenzvereinbarung"
43
-LicenseAgreement.PleaseReview="Bitte lesen Sie die Lizenzbedingungen vor der Verwendung von OBS.  Mit dem verwenden dieses Programms, bestätigen Sie, dass Sie sie gelesen haben und den Bedingungen der <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a> zustimmen. Bitte scrollen Sie nach unten, um den Rest der Vereinbarung zu sehen."
44
+LicenseAgreement.PleaseReview="Bitte lesen Sie die Lizenzbedingungen vor der Verwendung von OBS.  Mit dem verwenden dieses Programms, bestätigen Sie, dass Sie diese gelesen haben und den Bedingungen der <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a> zustimmen. Bitte scrollen Sie nach unten, um den Rest der Vereinbarung zu sehen."
45
 LicenseAgreement.ClickIAgreeToContinue="Wenn Sie die Vereinbarung akzeptieren, klicken Sie auf ich stimme zu, um fortzufahren.  Sie müssen akzeptieren, um OBS verwenden zu können."
46
 LicenseAgreement.IAgree="Ich stimme zu"
47
 LicenseAgreement.Exit="Beenden"
48
@@ -60,9 +66,9 @@
49
 Remux.SelectRecording="Wählen Sie die OBS Aufnahme aus …"
50
 Remux.SelectTarget="Wähle Zieldatei …"
51
 Remux.FileExistsTitle="Zieldatei ist bereits vorhanden"
52
-Remux.FileExists="Zieldatei ist bereits vorhanden, möchten Sie sie ersetzen?"
53
+Remux.FileExists="Zieldatei ist bereits vorhanden. Möchten Sie diese ersetzen?"
54
 Remux.ExitUnfinishedTitle="Remuxen in Bearbeitung"
55
-Remux.ExitUnfinished="Remuxen ist noch nicht fertig, wenn Sie jetzt stoppen kann die Zieldatei unbrauchbar werden. \nSind Sie sicher, dass Sie das Remuxen beenden möchten?"
56
+Remux.ExitUnfinished="Das Remuxen ist noch nicht fertig. Wenn Sie jetzt stoppen, kann die Zieldatei unbrauchbar werden. \nSind Sie sicher, dass Sie das Remuxen beenden möchten?"
57
 
58
 UpdateAvailable="Neues Update verfügbar"
59
 UpdateAvailable.Text="Version %1.%2.%3 ist nun verfügbar.  <a href='%4'>Hier klicken zum Download</a>"
60
@@ -84,12 +90,14 @@
61
 
62
 Basic.SourceSelect="Quelle erstellen/auswählen"
63
 Basic.SourceSelect.CreateNew="Neu erstellen"
64
-Basic.SourceSelect.AddExisting="Existierender hinzufügen"
65
+Basic.SourceSelect.AddExisting="Existierende hinzufügen"
66
 
67
 Basic.PropertiesWindow="Eigenschaften für '%1'"
68
 Basic.PropertiesWindow.AutoSelectFormat="%1 (nicht unterstützt; automatisch ausgewählt: %2)"
69
 Basic.PropertiesWindow.SelectColor="Farbe auswählen"
70
 Basic.PropertiesWindow.SelectFont="Schriftart auswählen"
71
+Basic.PropertiesWindow.ConfirmTitle="Einstellungen geändert"
72
+Basic.PropertiesWindow.Confirm="Es gibt ungesicherte Änderungen. Möchten Sie diese behalten?"
73
 
74
 Basic.InteractionWindow="Interagiere mit '%1'"
75
 
76
@@ -124,7 +132,7 @@
77
 Basic.TransformWindow.BoundsType.Stretch="Bis zu den Begrenzungen strecken"
78
 
79
 Basic.Main.AddSourceHelp.Title="Konnte Quelle nicht hinzufügen"
80
-Basic.Main.AddSourceHelp.Text="Sie müssen mindestens 1 Szene besitzen um eine Quelle hinzuzufügen."
81
+Basic.Main.AddSourceHelp.Text="Sie müssen mindestens 1 Szene besitzen, um eine Quelle hinzuzufügen."
82
 
83
 Basic.Main.Scenes="Szenen"
84
 Basic.Main.Sources="Quellen"
85
@@ -152,7 +160,7 @@
86
 Basic.MainMenu.Edit.Transform.ResetTransform="Transformation zu&rücksetzen"
87
 Basic.MainMenu.Edit.Transform.Rotate90CW="Um 90° im Uhrzeigersinn drehen"
88
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Um 90° gegen den Uhrzeigersinn drehen"
89
-Basic.MainMenu.Edit.Transform.Rotate180="Um 180 Grad drehen"
90
+Basic.MainMenu.Edit.Transform.Rotate180="Um 180° drehen"
91
 Basic.MainMenu.Edit.Transform.FlipHorizontal="&Horizontal spiegeln"
92
 Basic.MainMenu.Edit.Transform.FlipVertical="&Vertikal spiegeln"
93
 Basic.MainMenu.Edit.Transform.FitToScreen="An Bildschirmgröße anpassen (&F)"
94
@@ -163,6 +171,7 @@
95
 Basic.MainMenu.Edit.Order.MoveDown="Nach unten bewegen (&D)"
96
 Basic.MainMenu.Edit.Order.MoveToTop="Ganz nach oben bewegen (&T)"
97
 Basic.MainMenu.Edit.Order.MoveToBottom="Ganz nach unten &bewegen"
98
+Basic.MainMenu.Edit.AdvAudio="Erweiterte &Audioeigenschaften"
99
 
100
 Basic.MainMenu.Help="&Hilfe"
101
 Basic.MainMenu.Help.Logs="&Logdateien"
102
@@ -182,9 +191,13 @@
103
 Basic.Settings.Stream.StreamType="Stream Typ"
104
 
105
 Basic.Settings.Output="Ausgabe"
106
-Basic.Settings.Output.Mode="Output Modus"
107
-Basic.Settings.Output.Mode.Simple="Einfach (Streamen und/oder Aufnehmen)"
108
-Basic.Settings.Output.Mode.Advanced="Fortgeschritten (Benutzerdefinierter Ausgabetyp)"
109
+Basic.Settings.Output.Encoder="Encoder"
110
+Basic.Settings.Output.SelectDirectory="Wählen Sie das Aufnahmeverzeichnis"
111
+Basic.Settings.Output.SelectFile="Wählen Sie die Aufnahmedatei"
112
+Basic.Settings.Output.Mode="Ausgabemodus"
113
+Basic.Settings.Output.Mode.Simple="Einfach"
114
+Basic.Settings.Output.Mode.Adv="Erweitert"
115
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Ausgabe"
116
 Basic.Settings.Output.Simple.SavePath="FLV Aufnahmepfad"
117
 Basic.Settings.Output.VideoBitrate="Video-Bitrate"
118
 Basic.Settings.Output.AudioBitrate="Audio-Bitrate"
119
@@ -192,9 +205,32 @@
120
 Basic.Settings.Output.RetryDelay="Wiederverbindungsverzögerung (Sekunden)"
121
 Basic.Settings.Output.MaxRetries="Maximale Wiederholungsversuche"
122
 Basic.Settings.Output.Advanced="Erweiterte Encoder-Einstellungen aktivieren"
123
-Basic.Settings.Output.X264Preset="x264 Voreinstellung"
124
-Basic.Settings.Output.CustomX264Settings="Benutzerdefinierte x264 Einstellungen"
125
-Basic.Settings.Output.UseCBR="Benutze Konstante Bitrate"
126
+Basic.Settings.Output.EncoderPreset="Encoder-Voreinstellung (höher = weniger CPU Auslastung)"
127
+Basic.Settings.Output.CustomEncoderSettings="Benutzerdefinierte Encoder-Einstellungen"
128
+Basic.Settings.Output.UseCBR="Benutze konstante Bitrate"
129
+Basic.Settings.Output.UseBufferSize="Benutzerdefinierte Puffergröße"
130
+
131
+Basic.Settings.Output.Adv.Rescale="Ausgabe umskalieren"
132
+Basic.Settings.Output.Adv.AudioTrack="Audiospur"
133
+Basic.Settings.Output.Adv.Streaming="Streamen"
134
+Basic.Settings.Output.Adv.ApplyServiceSettings="Erzwinge Streamingdienst-Encodereinstellungen"
135
+Basic.Settings.Output.Adv.Audio.Track1="Spur 1"
136
+Basic.Settings.Output.Adv.Audio.Track2="Spur 2"
137
+Basic.Settings.Output.Adv.Audio.Track3="Spur 3"
138
+Basic.Settings.Output.Adv.Audio.Track4="Spur 4"
139
+
140
+Basic.Settings.Output.Adv.Recording="Aufnehmen"
141
+Basic.Settings.Output.Adv.Recording.Type="Art"
142
+Basic.Settings.Output.Adv.Recording.Type.Standard="Normal"
143
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Benutzerdefinierte Ausgabe (FFmpeg)"
144
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Benutze Streamencoder)"
145
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Häufige Aufnahmeformate"
146
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alle Dateien"
147
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Dateipfad oder URL"
148
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video-Encoder (leer = Standard)"
149
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Encoder-Einstellungen (falls gewünscht)"
150
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio-Encoder (leer = Standard)"
151
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder-Einstellungen (falls gewünscht)"
152
 
153
 Basic.Settings.Video="Video"
154
 Basic.Settings.Video.Adapter="Grafikkarte:"
155
@@ -210,14 +246,34 @@
156
 Basic.Settings.Video.Denominator="Nenner:"
157
 Basic.Settings.Video.Renderer="Renderer:"
158
 Basic.Settings.Video.InvalidResolution="Ungültige Auflösung. Muss sein [Breite]x[Höhe] (z.B. 1920x1080)"
159
-Basic.Settings.Video.CurrentlyActive="Videoausgabe ist derzeit aktiv. Bitte schalten Sie alle Ausgaben ab um die Videoeinstellungen zu ändern."
160
+Basic.Settings.Video.CurrentlyActive="Videoausgabe ist derzeit aktiv. Bitte schalten Sie alle Ausgaben ab, um die Videoeinstellungen zu ändern."
161
+
162
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (am schnellsten, aber Unscharf bei Skalierung)"
163
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (geschärfte Skalierung, 16 Stichproben)"
164
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (geschärfte Skalierung, 32 Stichproben)"
165
 
166
 Basic.Settings.Audio="Audio"
167
 Basic.Settings.Audio.SampleRate="Abtastrate"
168
 Basic.Settings.Audio.Channels="Kanäle"
169
-Basic.Settings.Audio.DesktopDevice="Desktop Audio Gerät"
170
-Basic.Settings.Audio.DesktopDevice2="Desktop Audio Gerät 2"
171
-Basic.Settings.Audio.AuxDevice="Mikrofon/Extern Audio Gerät"
172
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Extern Audio Gerät 2"
173
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Extern Audio Gerät 3"
174
+Basic.Settings.Audio.DesktopDevice="Desktop Audiogerät"
175
+Basic.Settings.Audio.DesktopDevice2="Desktop Audiogerät 2"
176
+Basic.Settings.Audio.AuxDevice="Mikrofon/Externes Audiogerät"
177
+Basic.Settings.Audio.AuxDevice2="Mikrofon/Externes Audiogerät 2"
178
+Basic.Settings.Audio.AuxDevice3="Mikrofon/Externes Audiogerät 3"
179
+
180
+Basic.Settings.Advanced="Erweitert"
181
+Basic.Settings.Advanced.Audio.BufferingTime="Audio Pufferungszeit"
182
+Basic.Settings.Advanced.Video.ColorFormat="Farbformat"
183
+Basic.Settings.Advanced.Video.ColorSpace="YUV-Farbraum"
184
+Basic.Settings.Advanced.Video.ColorRange="YUV Farbpalette"
185
+Basic.Settings.Advanced.Video.ColorRange.Partial="Teilweise"
186
+Basic.Settings.Advanced.Video.ColorRange.Full="Voll"
187
+
188
+Basic.AdvAudio="Erweiterte Audioeigenschaften"
189
+Basic.AdvAudio.Name="Name"
190
+Basic.AdvAudio.Volume="Lautstärke (%)"
191
+Basic.AdvAudio.Mono="Heruntermischen zu Mono"
192
+Basic.AdvAudio.Panning="Schwenken"
193
+Basic.AdvAudio.SyncOffset="Sync Verschiebung (ms)"
194
+Basic.AdvAudio.AudioTracks="Spuren"
195
 
196
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/el-GR.ini Changed
128
 
1
@@ -5,6 +5,8 @@
2
 OK="ΟΚ"
3
 Apply="Εφαρμογή"
4
 Cancel="Ακύρωση"
5
+Save="Αποθήκευση"
6
+Discard="Απόρριψη"
7
 Yes="Ναι"
8
 No="Όχι"
9
 Add="Προσθήκη"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Μετακίνηση Πάνω"
12
 MoveDown="Μετακίνηση Κάτω"
13
 Settings="Ρυθμίσεις"
14
+Name="Όνομα"
15
 Exit="Έξοδος"
16
 Mixer="Μίξερ"
17
 Browse="Αναζήτηση"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Πληκτρολογήστε ένα έγκυρο όνομα"
20
 NoNameEntered.Text="Δεν μπορείτε να χρησιμοποιήσετε κενά ονόματα."
21
 
22
+ConfirmExit.Title="Έξοδος από το OBS;"
23
+ConfirmExit.Text="Το OBS είναι ενεργό αυτή τη στιγμή. Είστε σίγουροι ότι θέλετε να το κλείσετε;"
24
+
25
 ConfirmRemove.Title="Επιβεβαίωση Αφαίρεσης"
26
 ConfirmRemove.Text="Είστε βέβαιοι ότι θέλετε να καταργήσετε \"$1\";"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (μη υποστηριζόμενη; autoselect: %2)"
30
 Basic.PropertiesWindow.SelectColor="Επιλέξτε χρώμα"
31
 Basic.PropertiesWindow.SelectFont="Επιλέξτε γραμματοσειρά"
32
+Basic.PropertiesWindow.ConfirmTitle="Άλλαξαν οι Ρυθμίσεις"
33
+Basic.PropertiesWindow.Confirm="Υπάρχουν μη αποθηκευμένες αλλαγές.  Θέλετε να τις κρατήσετε;"
34
 
35
 Basic.InteractionWindow="Αλληλεπίδραση με '%1'"
36
 
37
@@ -129,9 +137,9 @@
38
 Basic.Main.Scenes="Σκηνές"
39
 Basic.Main.Sources="Πηγές"
40
 Basic.Main.Connecting="Σύνδεση..."
41
-Basic.Main.StartRecording="Έναρξη Ηχογράφησης"
42
+Basic.Main.StartRecording="Έναρξη Καταγραφής"
43
 Basic.Main.StartStreaming="Έναρξη Μετάδοσης"
44
-Basic.Main.StopRecording="Διακοπή Ηχογράφησης"
45
+Basic.Main.StopRecording="Διακοπή Καταγραφής"
46
 Basic.Main.StopStreaming="Διακοπή Μετάδοσης"
47
 
48
 Basic.MainMenu.File="Αρχείο(&F)"
49
@@ -163,6 +171,7 @@
50
 Basic.MainMenu.Edit.Order.MoveDown="Μετακίνηση Κάτω(&D)"
51
 Basic.MainMenu.Edit.Order.MoveToTop="Μετακίνηση στην Κορυφή(&T)"
52
 Basic.MainMenu.Edit.Order.MoveToBottom="Μετακίνηση τελέιως Κάτω(&B)"
53
+Basic.MainMenu.Edit.AdvAudio="Ιδιότητες(&A) Ήχου για Προχωρημένους"
54
 
55
 Basic.MainMenu.Help="Βοήθεια(&H)"
56
 Basic.MainMenu.Help.Logs="Αρχεία(&) Καταγραφής"
57
@@ -182,9 +191,12 @@
58
 Basic.Settings.Stream.StreamType="Τύπος Μετάδοσης"
59
 
60
 Basic.Settings.Output="Έξοδος"
61
+Basic.Settings.Output.Encoder="Κωδικοποιητής"
62
+Basic.Settings.Output.SelectDirectory="Επιλέξτε κατάλογο καταγραφής"
63
+Basic.Settings.Output.SelectFile="Επιλέξτε αρχείο καταγραφής"
64
 Basic.Settings.Output.Mode="Λειτουργία Εξόδου"
65
-Basic.Settings.Output.Mode.Simple="Απλό (Μετάδοση και/ή εγγραφή)"
66
-Basic.Settings.Output.Mode.Advanced="Προηγμένο (Προσαρμοσμένος τύπος εξόδου)"
67
+Basic.Settings.Output.Mode.Adv="Σύνθετες επιλογές"
68
+Basic.Settings.Output.Mode.FFmpeg="Έξοδος FFmpeg"
69
 Basic.Settings.Output.Simple.SavePath="Διαδρομή Καταγραφής FLV"
70
 Basic.Settings.Output.VideoBitrate="Ρυθμός Bit του Βίντεο"
71
 Basic.Settings.Output.AudioBitrate="Ρυθμός Bit του Ήχου"
72
@@ -192,9 +204,29 @@
73
 Basic.Settings.Output.RetryDelay="Καθυστέρηση Επανάληψης (δευτερόλεπτα)"
74
 Basic.Settings.Output.MaxRetries="Μέγιστος Αριθμός Επαναλήψεων"
75
 Basic.Settings.Output.Advanced="Ενεργοποίηση Ρυθμίσεις Κωδικοποιήτη Για Προχωρημένους"
76
-Basic.Settings.Output.X264Preset="Προφίλ x264"
77
-Basic.Settings.Output.CustomX264Settings="Προσαρμοσμένες Ρυθμίσεις x264"
78
+Basic.Settings.Output.EncoderPreset="Προφίλ Κωδικοποιητή (υψηλότερο = λιγότερη CPU)"
79
+Basic.Settings.Output.CustomEncoderSettings="Προσαρμοσμένες Ρυθμίσεις Κωδικοποιητή"
80
 Basic.Settings.Output.UseCBR="Χρήση Συνεχής Ροής Bit"
81
+Basic.Settings.Output.UseBufferSize="Χρήση Προσαρμοσμένου Μεγέθους Buffer"
82
+
83
+Basic.Settings.Output.Adv.Rescale="Κλιμάκωση Εξόδου"
84
+Basic.Settings.Output.Adv.AudioTrack="Κομμάτι ήχου"
85
+Basic.Settings.Output.Adv.ApplyServiceSettings="Επιβολή ρυθμίσεων κωδικοποιητή της υπηρεσίας streaming"
86
+Basic.Settings.Output.Adv.Audio.Track1="Κομμάτι 1"
87
+Basic.Settings.Output.Adv.Audio.Track2="Κομμάτι 2"
88
+Basic.Settings.Output.Adv.Audio.Track3="Κομμάτι 3"
89
+Basic.Settings.Output.Adv.Audio.Track4="Κομμάτι 4"
90
+
91
+Basic.Settings.Output.Adv.Recording.Type="Τύπος"
92
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Προσαρμοσμένη Έξοδος (FFmpeg)"
93
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Χρήση κωδικοποιητή ροής)"
94
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Κοινή μορφές εγγραφής"
95
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Όλα τα αρχεία"
96
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Διαδρομή αρχείου ή URL"
97
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Κωδικοποιητής Βίντεο (κενό=προεπιλογή)"
98
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Ρυθμίσεις Κωδικοποιητή Βίντεο (αν υπάρχουν)"
99
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Κωδικοποιητής Ήχου (κενό=προεπιλογή)"
100
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ρυθμίσεις Κωδικοποιητή Ήχου (αν υπάρχουν)"
101
 
102
 Basic.Settings.Video="Βίντεο"
103
 Basic.Settings.Video.Adapter="Προσαρμογέας Βίντεο:"
104
@@ -212,6 +244,10 @@
105
 Basic.Settings.Video.InvalidResolution="Μη έγκυρη τιμή ανάλυσης. Πρέπει να είναι [width]x[height] (π.χ. 1920x1080)"
106
 Basic.Settings.Video.CurrentlyActive="Δεν υπάρχει ενεργή έξοδος βίντεο. Παρακαλώ απενεργοποιήστε κάθε έξοδο για να αλλάξετε τις ρυθμίσεις βίντεο."
107
 
108
+Basic.Settings.Video.DownscaleFilter.Bilinear="Διγραμμικό (Πιο γρήγορο, αλλά θολό στην κλιμάκωση)"
109
+Basic.Settings.Video.DownscaleFilter.Bicubic="Δικυβικό (Οξυμμένη κλιμάκωση, 16 δείγματα)"
110
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Οξυμμένη κλιμάκωση, 32 δείγματα)"
111
+
112
 Basic.Settings.Audio="Ήχος"
113
 Basic.Settings.Audio.SampleRate="Ρυθμός Δειγματοληψίας"
114
 Basic.Settings.Audio.Channels="Κανάλια"
115
@@ -221,3 +257,12 @@
116
 Basic.Settings.Audio.AuxDevice2="Μικρόφωνο/Αuxillary Συσκευή Ήχου 2"
117
 Basic.Settings.Audio.AuxDevice3="Μικρόφωνο/Αuxillary Συσκευή Ήχου 3"
118
 
119
+
120
+Basic.AdvAudio="Ιδιότητες Ήχου για Προχωρημένους"
121
+Basic.AdvAudio.Name="Όνομα"
122
+Basic.AdvAudio.Volume="Ένταση (%)"
123
+Basic.AdvAudio.Mono="Αποκωδικοποίηση σε Mono"
124
+Basic.AdvAudio.Panning="Πανοραμικό"
125
+Basic.AdvAudio.SyncOffset="Μετατόπιση Συγχρονισμού (ms)"
126
+Basic.AdvAudio.AudioTracks="Κομμάτια"
127
+
128
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/en-US.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/en-US.ini Changed
113
 
1
@@ -10,6 +10,8 @@
2
 OK="OK"
3
 Apply="Apply"
4
 Cancel="Cancel"
5
+Save="Save"
6
+Discard="Discard"
7
 Yes="Yes"
8
 No="No"
9
 Add="Add"
10
@@ -19,6 +21,7 @@
11
 MoveUp="Move Up"
12
 MoveDown="Move Down"
13
 Settings="Settings"
14
+Name="Name"
15
 Exit="Exit"
16
 Mixer="Mixer"
17
 Browse="Browse"
18
@@ -33,6 +36,10 @@
19
 NoNameEntered.Title="Please enter a valid name"
20
 NoNameEntered.Text="You cannot use empty names."
21
 
22
+# confirm exit dialog box
23
+ConfirmExit.Title="Exit OBS?"
24
+ConfirmExit.Text="OBS is currently active.  Are you sure you wish to exit?"
25
+
26
 # confirm delete dialog box
27
 ConfirmRemove.Title="Confirm Remove"
28
 ConfirmRemove.Text="Are you sure you wish to remove '$1'?"
29
@@ -109,6 +116,8 @@
30
 Basic.PropertiesWindow.AutoSelectFormat="%1 (unsupported; autoselect: %2)"
31
 Basic.PropertiesWindow.SelectColor="Select color"
32
 Basic.PropertiesWindow.SelectFont="Select font"
33
+Basic.PropertiesWindow.ConfirmTitle="Settings Changed"
34
+Basic.PropertiesWindow.Confirm="There are unsaved changes.  Do you want to keep them?"
35
 
36
 # interaction window
37
 Basic.InteractionWindow="Interacting with '%1'"
38
@@ -214,9 +223,13 @@
39
 
40
 # basic mode 'output' settings
41
 Basic.Settings.Output="Output"
42
+Basic.Settings.Output.Encoder="Encoder"
43
+Basic.Settings.Output.SelectDirectory="Select Recording Directory"
44
+Basic.Settings.Output.SelectFile="Select Recording File"
45
 Basic.Settings.Output.Mode="Output Mode"
46
-Basic.Settings.Output.Mode.Simple="Simple (Stream and/or record)"
47
-Basic.Settings.Output.Mode.Advanced="Advanced (Custom output type)"
48
+Basic.Settings.Output.Mode.Simple="Simple"
49
+Basic.Settings.Output.Mode.Adv="Advanced"
50
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Output"
51
 Basic.Settings.Output.Simple.SavePath="FLV Recording Path"
52
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
53
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
54
@@ -224,9 +237,34 @@
55
 Basic.Settings.Output.RetryDelay="Retry Delay (seconds)"
56
 Basic.Settings.Output.MaxRetries="Maximum Retries"
57
 Basic.Settings.Output.Advanced="Enable Advanced Encoder Settings"
58
-Basic.Settings.Output.X264Preset="x264 Preset"
59
-Basic.Settings.Output.CustomX264Settings="Custom x264 Settings"
60
+Basic.Settings.Output.EncoderPreset="Encoder Preset (higher = less CPU)"
61
+Basic.Settings.Output.CustomEncoderSettings="Custom Encoder Settings"
62
 Basic.Settings.Output.UseCBR="Use Constant Bitrate"
63
+Basic.Settings.Output.UseBufferSize="Use Custom Buffer Size"
64
+
65
+# basic mode 'output' settings - advanced section
66
+Basic.Settings.Output.Adv.Rescale="Rescale Output"
67
+Basic.Settings.Output.Adv.AudioTrack="Audio Track"
68
+Basic.Settings.Output.Adv.Streaming="Streaming"
69
+Basic.Settings.Output.Adv.ApplyServiceSettings="Enforce streaming service encoder settings"
70
+Basic.Settings.Output.Adv.Audio.Track1="Track 1"
71
+Basic.Settings.Output.Adv.Audio.Track2="Track 2"
72
+Basic.Settings.Output.Adv.Audio.Track3="Track 3"
73
+Basic.Settings.Output.Adv.Audio.Track4="Track 4"
74
+
75
+# basic mode 'output' settings - advanced section - recording subsection
76
+Basic.Settings.Output.Adv.Recording="Recording"
77
+Basic.Settings.Output.Adv.Recording.Type="Type"
78
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
79
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)"
80
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Use stream encoder)"
81
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Common recording formats"
82
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="All Files"
83
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="File path or URL"
84
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Encoder (blank=default)"
85
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Encoder Settings (if any)"
86
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder (blank=default)"
87
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder Settings (if any)"
88
 
89
 # basic mode 'video' settings
90
 Basic.Settings.Video="Video"
91
@@ -260,6 +298,15 @@
92
 Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio Device 2"
93
 Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio Device 3"
94
 
95
+# basic mode 'advanced' settings
96
+Basic.Settings.Advanced="Advanced"
97
+Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
98
+Basic.Settings.Advanced.Video.ColorFormat="Color Format"
99
+Basic.Settings.Advanced.Video.ColorSpace="YUV Color Space"
100
+Basic.Settings.Advanced.Video.ColorRange="YUV Color Range"
101
+Basic.Settings.Advanced.Video.ColorRange.Partial="Partial"
102
+Basic.Settings.Advanced.Video.ColorRange.Full="Full"
103
+
104
 # advanced audio properties
105
 Basic.AdvAudio="Advanced Audio Properties"
106
 Basic.AdvAudio.Name="Name"
107
@@ -267,4 +314,4 @@
108
 Basic.AdvAudio.Mono="Downmix to Mono"
109
 Basic.AdvAudio.Panning="Panning"
110
 Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
111
-Basic.AdvAudio.MediaChannel="Media Channel"
112
+Basic.AdvAudio.AudioTracks="Tracks"
113
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/es-ES.ini Changed
127
 
1
@@ -5,6 +5,8 @@
2
 OK="Aceptar"
3
 Apply="Aplicar"
4
 Cancel="Cancelar"
5
+Save="Grabar"
6
+Discard="Descartar"
7
 Yes="Sí"
8
 No="No"
9
 Add="Agregar"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Mover arriba"
12
 MoveDown="Mover abajo"
13
 Settings="Configuración"
14
+Name="Nombre"
15
 Exit="Salir"
16
 Mixer="Mezclador"
17
 Browse="Examinar"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Por favor, introduzca un nombre válido"
20
 NoNameEntered.Text="No puede utilizar nombres de vacíos."
21
 
22
+ConfirmExit.Title="¿Cerrar OBS?"
23
+ConfirmExit.Text="OBS está activo en este momento.  ¿Está seguro que desea salir?"
24
+
25
 ConfirmRemove.Title="Confirmar borrado"
26
 ConfirmRemove.Text="¿Seguro que desea eliminar '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (no soportado; seleccionar: %2)"
30
 Basic.PropertiesWindow.SelectColor="Seleccionar color"
31
 Basic.PropertiesWindow.SelectFont="Elija fuente"
32
+Basic.PropertiesWindow.ConfirmTitle="Configuración cambiada"
33
+Basic.PropertiesWindow.Confirm="Hay cambios sin guardar. ¿Deseas conservarlos?"
34
 
35
 Basic.InteractionWindow="Interactuando con '%1'"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Mover &abajo"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Mover a la &cima"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Mover al &fondo"
41
+Basic.MainMenu.Edit.AdvAudio="Propiedades de &Audio avanzadas"
42
 
43
 Basic.MainMenu.Help="&Ayuda"
44
 Basic.MainMenu.Help.Logs="&Archivos de registro"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Tipo de flujo"
47
 
48
 Basic.Settings.Output="Salida"
49
+Basic.Settings.Output.Encoder="Codificador"
50
+Basic.Settings.Output.SelectDirectory="Seleccione Directorio de grabación"
51
+Basic.Settings.Output.SelectFile="Seleccione archivo de grabación"
52
 Basic.Settings.Output.Mode="Modo de salida"
53
-Basic.Settings.Output.Mode.Simple="Simple (Flujo y/o grabación)"
54
-Basic.Settings.Output.Mode.Advanced="Avanzado (Salida personalizada)"
55
+Basic.Settings.Output.Mode.Simple="Sencillo"
56
+Basic.Settings.Output.Mode.Adv="Avanzado"
57
+Basic.Settings.Output.Mode.FFmpeg="Salida de FFmpeg"
58
 Basic.Settings.Output.Simple.SavePath="Ruta de grabación FLV"
59
 Basic.Settings.Output.VideoBitrate="Bitrate de vídeo"
60
 Basic.Settings.Output.AudioBitrate="Bitrate de audio"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="Demora al reintentar (segundos)"
63
 Basic.Settings.Output.MaxRetries="Reintentos máximos"
64
 Basic.Settings.Output.Advanced="Habilitar la configuración de codificador avanzada"
65
-Basic.Settings.Output.X264Preset="Perfil x264"
66
-Basic.Settings.Output.CustomX264Settings="Configuración personalizada x264"
67
+Basic.Settings.Output.EncoderPreset="Perfil de Codificador (más rapido = menos CPU)"
68
+Basic.Settings.Output.CustomEncoderSettings="Configuración del codificador personalizada"
69
 Basic.Settings.Output.UseCBR="Usar Bitrate constante"
70
+Basic.Settings.Output.UseBufferSize="Usar tamaño de caché personalizado"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Cambiar la escala de salida"
73
+Basic.Settings.Output.Adv.AudioTrack="Pista de audio"
74
+Basic.Settings.Output.Adv.Streaming="En tiempo real"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Aplicar ajustes de codificador de servicio streaming"
76
+Basic.Settings.Output.Adv.Audio.Track1="Pista 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="Grabando"
82
+Basic.Settings.Output.Adv.Recording.Type="Tipo"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Estándar"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Salida personalizada (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Usar flujo del codificador)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Formatos comunes de grabación"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Todos los Archivos"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Ruta de archivo o URL"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Codificador de vídeo (en blanco = default)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Configuración de codificador de vídeo (si existe)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Codificador de audio (en blanco = por defecto)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Configuración de codificador de vídeo (si existe)"
93
 
94
 Basic.Settings.Video="Vídeo"
95
 Basic.Settings.Video.Adapter="Adaptador de vídeo:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="Valor de la resolución no válido.  Debe ser [ancho] x [altura] (por ejemplo, 1920 x 1080)"
98
 Basic.Settings.Video.CurrentlyActive="La salida de vídeo está actualmente activa.  Por favor apague cualquier salida para cambiar la configuración de vídeo."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineal (más rápido, pero borroso si se escala la imagen)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicúbico (Escalado fino, 16 muestras)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Scalado fino, 32 muestras)"
103
+
104
 Basic.Settings.Audio="Audio"
105
 Basic.Settings.Audio.SampleRate="Frecuencia de muestreo"
106
 Basic.Settings.Audio.Channels="Canales"
107
@@ -221,3 +261,19 @@
108
 Basic.Settings.Audio.AuxDevice2="Dispositivo de audio Mic/auxiliar 2"
109
 Basic.Settings.Audio.AuxDevice3="Dispositivo de audio Mic/auxiliar 3"
110
 
111
+Basic.Settings.Advanced="Avanzado"
112
+Basic.Settings.Advanced.Audio.BufferingTime="Tiempo de búfer de audio"
113
+Basic.Settings.Advanced.Video.ColorFormat="Formato de color"
114
+Basic.Settings.Advanced.Video.ColorSpace="Espacio de color YUV"
115
+Basic.Settings.Advanced.Video.ColorRange="Gama de Color YUV"
116
+Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
117
+Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
118
+
119
+Basic.AdvAudio="Propiedades de Audio avanzadas"
120
+Basic.AdvAudio.Name="Nombre"
121
+Basic.AdvAudio.Volume="Volumen (%)"
122
+Basic.AdvAudio.Mono="Remezclar a Mono"
123
+Basic.AdvAudio.Panning="Panorámica"
124
+Basic.AdvAudio.SyncOffset="Sincronización Offset (ms)"
125
+Basic.AdvAudio.AudioTracks="Pistas"
126
+
127
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/eu-ES.ini Changed
120
 
1
@@ -5,6 +5,8 @@
2
 OK="Ongi"
3
 Apply="Ezarri"
4
 Cancel="Ezeztatu"
5
+Save="Gorde"
6
+Discard="Baztertu"
7
 Yes="Bai"
8
 No="Ez"
9
 Add="Gehitu"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Mugitu Gora"
12
 MoveDown="Mugitu Behera"
13
 Settings="Ezarpenak..."
14
+Name="Izena"
15
 Exit="Irten"
16
 Mixer="Nahastzailea"
17
 Browse="Bilatu..."
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Mesedez sartu baliozko izen bat"
20
 NoNameEntered.Text="Ezin duzu izena hutsik erabili."
21
 
22
+ConfirmExit.Title="Irten OBS-tik?"
23
+ConfirmExit.Text="OBS lanean dago une honetan. Zihur zaude irtetzea nahi duzula?"
24
+
25
 ConfirmRemove.Title="Baieztatu Kentzea"
26
 ConfirmRemove.Text="Zihur zaude '$1' kentzea nahi duzula?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (sostengatu gabea; berez-hautapena: %2)"
30
 Basic.PropertiesWindow.SelectColor="Hautatu margoa"
31
 Basic.PropertiesWindow.SelectFont="Hautatu hizkia"
32
+Basic.PropertiesWindow.ConfirmTitle="Ezarpenak Aldatuta"
33
+Basic.PropertiesWindow.Confirm="Gorde gabeko aldaketak daude. Heustea nahi diezu?"
34
 
35
 Basic.InteractionWindow="Elkarrekintza '%1'-rekin"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Mugitu &Behera"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Mugitu G&oren"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Mugitu B&eheren"
41
+Basic.MainMenu.Edit.AdvAudio="A&udio Ezaugarri Aurreratuak"
42
 
43
 Basic.MainMenu.Help="&Laguntza"
44
 Basic.MainMenu.Help.Logs="&Ohar Agiriak"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Jario Mota"
47
 
48
 Basic.Settings.Output="Irteera"
49
+Basic.Settings.Output.Encoder="Kodeatzailea"
50
+Basic.Settings.Output.SelectDirectory="Hautatu Grabaketa Zuzenbidea"
51
+Basic.Settings.Output.SelectFile="Hautatu Grabaketa Agiria"
52
 Basic.Settings.Output.Mode="Irteera Modua"
53
-Basic.Settings.Output.Mode.Simple="Arrunta (Jarioa eta/edo grabaketa)"
54
-Basic.Settings.Output.Mode.Advanced="Aurreratua (Norbere irteera mota)"
55
+Basic.Settings.Output.Mode.Simple="Arrunta"
56
+Basic.Settings.Output.Mode.Adv="Aurreratua"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Irteera"
58
 Basic.Settings.Output.Simple.SavePath="FLV Grabaketa Helburua"
59
 Basic.Settings.Output.VideoBitrate="Bideo Bitneurria"
60
 Basic.Settings.Output.AudioBitrate="Audio Bitneurria"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="Saiakera Atzerapena (segundu)"
63
 Basic.Settings.Output.MaxRetries="Gehienezko Saiakerak"
64
 Basic.Settings.Output.Advanced="Gaitu Kodeatzaile Aurreratu Ezarpenak"
65
-Basic.Settings.Output.X264Preset="x264 Aurrezarpena"
66
-Basic.Settings.Output.CustomX264Settings="Norbere x264 Ezarpenak"
67
+Basic.Settings.Output.EncoderPreset="Kodeatzaile Aurrezarpena (handiagoa = CPU gutxiago)"
68
+Basic.Settings.Output.CustomEncoderSettings="Norbere Kodeatzaile Ezarpenak"
69
 Basic.Settings.Output.UseCBR="Erabili Bitneurri Aldagaitza"
70
+Basic.Settings.Output.UseBufferSize="Erabili Norbere Buffer Neurria"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Birneurriratu Irteera"
73
+Basic.Settings.Output.Adv.AudioTrack="Audio Bidea"
74
+Basic.Settings.Output.Adv.Streaming="Jarioa"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Behartu jario zerbitzu kodeatzaile ezarpenak"
76
+Basic.Settings.Output.Adv.Audio.Track1="1 Bidea"
77
+Basic.Settings.Output.Adv.Audio.Track2="2 Bidea"
78
+Basic.Settings.Output.Adv.Audio.Track3="3 Bidea"
79
+Basic.Settings.Output.Adv.Audio.Track4="4 Bidea"
80
+
81
+Basic.Settings.Output.Adv.Recording="Grabatzen"
82
+Basic.Settings.Output.Adv.Recording.Type="Mota"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Estandarra"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Norbere Irteera (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Erabili jario kodeatzailea)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Grabaketa heuskarri arruntak"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Agiri Guztiak"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Agiri helburua edo URL-a"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Bideo Kodeatzailea (hutsik=berezkoa)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Bideo Kodeatzaile Ezarpenak (egonez gero)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Kodeatzailea (hutsik=berezkoa)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Kodeatzaile Ezarpenak (egonez gero)"
93
 
94
 Basic.Settings.Video="Bideoa"
95
 Basic.Settings.Video.Adapter="Bideo Egokitzailea:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="Bereizmen balio baliogabea. Izan behar da [width]x[height] (adib. 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="Bideo irtera gaituta dago une honetan. Mesedez eten irteera guztiak bideo ezarpenak aldatzeko."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinearra (Azkarrena, baina lausoa eskalatuz gero)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubikoa (Eskalatze itzaldua, 16 lagin)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Eskalatze itzaldua, 32 lagin)"
103
+
104
 Basic.Settings.Audio="Audioa"
105
 Basic.Settings.Audio.SampleRate="Laginketa Neurria"
106
 Basic.Settings.Audio.Channels="Bideak"
107
@@ -221,3 +261,12 @@
108
 Basic.Settings.Audio.AuxDevice2="Mik/Osagarri Audio Gailua 2"
109
 Basic.Settings.Audio.AuxDevice3="Mik/Osagarri Audio Gailua 3"
110
 
111
+
112
+Basic.AdvAudio="Audio Ezaugarri Aurreratuak"
113
+Basic.AdvAudio.Name="Izena"
114
+Basic.AdvAudio.Volume="Bolumena (%)"
115
+Basic.AdvAudio.Mono="Behera-nahastu Monora"
116
+Basic.AdvAudio.Panning="Panoramika"
117
+Basic.AdvAudio.SyncOffset="Aldiberetze Oreka (sm)"
118
+Basic.AdvAudio.AudioTracks="Bideak"
119
+
120
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/fi-FI.ini Changed
120
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Käytä"
4
 Cancel="Peruuta"
5
+Save="Tallenna"
6
+Discard="Hylkää"
7
 Yes="Kyllä"
8
 No="Ei"
9
 Add="Lisää"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Siirrä ylös"
12
 MoveDown="Siirrä alas"
13
 Settings="Asetukset"
14
+Name="Nimi"
15
 Exit="Poistu"
16
 Mixer="Mikseri"
17
 Browse="Selaa"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Syötä sopiva nimi"
20
 NoNameEntered.Text="Et voi käyttää tyhjiä nimiä."
21
 
22
+ConfirmExit.Title="Sulje OBS?"
23
+ConfirmExit.Text="OBS on käytössä. Haluatko varmasti sulkea sen?"
24
+
25
 ConfirmRemove.Title="Vahvista poisto"
26
 ConfirmRemove.Text="Haluatko varmasti poistaa '$1'?"
27
 
28
@@ -91,6 +97,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (ei tueta; automaattinen: %2)"
30
 Basic.PropertiesWindow.SelectColor="Valitse väri"
31
 Basic.PropertiesWindow.SelectFont="Valitse kirjasin"
32
+Basic.PropertiesWindow.ConfirmTitle="Asetukset ovat muuttuneet"
33
+Basic.PropertiesWindow.Confirm="Muutoksia ei ole vielä tallennettu. Haluatko pitää muutokset?"
34
 
35
 Basic.InteractionWindow="Vuorovaikutetaan '%1' kanssa"
36
 
37
@@ -164,6 +172,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Siirrä &alas"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Siirrä &ylimmäksi"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Siirrä &alimmaksi"
41
+Basic.MainMenu.Edit.AdvAudio="&Äänen lisäominaisuudet"
42
 
43
 Basic.MainMenu.Help="&Apua"
44
 Basic.MainMenu.Help.Logs="&Lokitiedostot"
45
@@ -183,9 +192,13 @@
46
 Basic.Settings.Stream.StreamType="Lähetystyyppi"
47
 
48
 Basic.Settings.Output="Ulostulo"
49
+Basic.Settings.Output.Encoder="Enkooderi"
50
+Basic.Settings.Output.SelectDirectory="Valitse tallennuskansio"
51
+Basic.Settings.Output.SelectFile="Valitse tallennustiedosto"
52
 Basic.Settings.Output.Mode="Ulostulon tila"
53
-Basic.Settings.Output.Mode.Simple="Yksinkertainen (Lähetys ja/tai tallennus)"
54
-Basic.Settings.Output.Mode.Advanced="Monipuolinen (Custom output type)"
55
+Basic.Settings.Output.Mode.Simple="Yksinkertainen"
56
+Basic.Settings.Output.Mode.Adv="Kehittynyt"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg ulostulo"
58
 Basic.Settings.Output.Simple.SavePath="FLV-tallennuksen polku"
59
 Basic.Settings.Output.VideoBitrate="Kuvan bitrate"
60
 Basic.Settings.Output.AudioBitrate="Äänen bitrate"
61
@@ -193,9 +206,32 @@
62
 Basic.Settings.Output.RetryDelay="Uudelleenyrityksen viive (sekunteja)"
63
 Basic.Settings.Output.MaxRetries="Uudelleenyhdistyksien määrä"
64
 Basic.Settings.Output.Advanced="Käytä enkooderin lisäasetuksia"
65
-Basic.Settings.Output.X264Preset="x264-esiasetus"
66
-Basic.Settings.Output.CustomX264Settings="Mukautetut x264-asetukset"
67
+Basic.Settings.Output.EncoderPreset="Enkooderin asetus (korkeampi lisää tehon kulutusta)"
68
+Basic.Settings.Output.CustomEncoderSettings="Valinnaiset enkooderiasetukset"
69
 Basic.Settings.Output.UseCBR="Pidä bitrate vakiona"
70
+Basic.Settings.Output.UseBufferSize="Käytä valinnaista puskurin kokoa"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Uudelleenskaalaa ulostulo"
73
+Basic.Settings.Output.Adv.AudioTrack="Ääniraita"
74
+Basic.Settings.Output.Adv.Streaming="Lähetys"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Pakota asetukset palvelun suosituksiin"
76
+Basic.Settings.Output.Adv.Audio.Track1="Raita 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="Raita 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="Raita 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="Raita 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="Tallennus"
82
+Basic.Settings.Output.Adv.Recording.Type="Tyyppi"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Tavallinen"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Valinnainen lähtö (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Käytä lähetysenkooderia)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Yleiset tallennusmuodot"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Kaikki tiedostot"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Tiedostopolku tai URL-osoite"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video-enkooderi (tyhjä = oletus)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video-enkooderin asetukset"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Ääni-enkooderi (tyhjä = oletus)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ääni-enkooderin asetukset"
93
 
94
 Basic.Settings.Video="Kuva"
95
 Basic.Settings.Video.Adapter="Näytönohjain:"
96
@@ -213,6 +249,10 @@
97
 Basic.Settings.Video.InvalidResolution="Vialliset resoluution asetus.  Muodon pitää olla [leveys]x[korkeus] (esim. 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="Kuvan ulostulo on tällä hetkellä käytössä.  Kytke pois kaikki ulostulot vaihtaaksesi kuva-asetuksia."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (nopein, sumeutuu skaalattaessa)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Terävöity skaalaus, 16 näytettä)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Terävöity skaalaus, 32 näytettä)"
103
+
104
 Basic.Settings.Audio="Ääni"
105
 Basic.Settings.Audio.SampleRate="Näytteenottotaajuus"
106
 Basic.Settings.Audio.Channels="Kanavat"
107
@@ -222,3 +262,12 @@
108
 Basic.Settings.Audio.AuxDevice2="Mic/Aux -äänilaite 2"
109
 Basic.Settings.Audio.AuxDevice3="Mic/Aux -äänilaite 3"
110
 
111
+
112
+Basic.AdvAudio="Äänen lisäominaisuudet"
113
+Basic.AdvAudio.Name="Nimi"
114
+Basic.AdvAudio.Volume="Äänenvoimakkuus (%)"
115
+Basic.AdvAudio.Mono="Miksaa yksikanavaiseksi"
116
+Basic.AdvAudio.Panning="Vieritys"
117
+Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
118
+Basic.AdvAudio.AudioTracks="Raidat"
119
+
120
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/fr-FR.ini Changed
201
 
1
@@ -1,10 +1,12 @@
2
 
3
-Language="français"
4
+Language="Français"
5
 Region="France"
6
 
7
 OK="Ok"
8
 Apply="Appliquer"
9
 Cancel="Annuler"
10
+Save="Enregistrer"
11
+Discard="Ignorer les modifications"
12
 Yes="Oui"
13
 No="Non"
14
 Add="Ajouter"
15
@@ -14,12 +16,13 @@
16
 MoveUp="Déplacer vers le haut"
17
 MoveDown="Déplacer vers le bas"
18
 Settings="Paramètres"
19
+Name="Nom"
20
 Exit="Quitter OBS"
21
 Mixer="Table de mixage"
22
 Browse="Parcourir"
23
 Mono="Mono"
24
 Stereo="Stéréo"
25
-DroppedFrames="Images Perdus %1 (%2%)"
26
+DroppedFrames="Images Perdues %1 (%2%)"
27
 
28
 NameExists.Title="Ce nom existe déjà"
29
 NameExists.Text="Ce nom est déjà utilisé."
30
@@ -27,10 +30,13 @@
31
 NoNameEntered.Title="Veuillez saisir un nom valide"
32
 NoNameEntered.Text="Vous ne pouvez pas utiliser de noms vides."
33
 
34
+ConfirmExit.Title="Quitter OBS ?"
35
+ConfirmExit.Text="OBS est toujours actif. Êtes-vous certain de vouloir quitter ?"
36
+
37
 ConfirmRemove.Title="Confirmer la suppression"
38
 ConfirmRemove.Text="Êtes-vous sûr de vouloir supprimer « $1 » ?"
39
 
40
-Output.ConnectFail.Title="Echec de la connexion"
41
+Output.ConnectFail.Title="Échec de la connexion"
42
 Output.ConnectFail.BadPath="Adresse de Connexion ou Chemin Invalide. Veuillez vérifier vos paramètres afin de confirmer leur validité."
43
 Output.ConnectFail.ConnectFailed="Échec de Connexion au Serveur"
44
 Output.ConnectFail.InvalidStream="Impossible d'accéder à la chaîne ou à la clé spécifiée. Cela peut être causé par une chaîne/clé invalide ou par le serveur qui vous considère toujours connecté."
45
@@ -52,17 +58,17 @@
46
 
47
 Remux.SourceFile="Enregistrement OBS"
48
 Remux.TargetFile="Fichier cible"
49
-Remux.Remux="Réencapsuler"
50
+Remux.Remux="Convertir"
51
 Remux.RecordingPattern="Enregistrement OBS (*.flv)"
52
-Remux.FinishedTitle="Réencapsulage terminé"
53
-Remux.Finished="L'enregistrement est réencapsulé"
54
-Remux.FinishedError="L'enregistrement est réencapsulé, mais le fichier peut être incomplet"
55
+Remux.FinishedTitle="Conversion terminée"
56
+Remux.Finished="L'enregistrement a été converti"
57
+Remux.FinishedError="L'enregistrement a été converti, mais le fichier peut être incomplet"
58
 Remux.SelectRecording="Choisir un enregistrement OBS …"
59
 Remux.SelectTarget="Choisir le fichier cible …"
60
 Remux.FileExistsTitle="Fichier cible existant"
61
 Remux.FileExists="Le fichier cible existe, voulez-vous le remplacer ?"
62
-Remux.ExitUnfinishedTitle="Réencapsulage en cours"
63
-Remux.ExitUnfinished="Le réencapsulage n'est pas terminé, arrêter maintenant peut rendre le fichier cible inutilisable.\nVoulez-vous vraiment arrêter le réencapsulage ?"
64
+Remux.ExitUnfinishedTitle="Conversion en cours"
65
+Remux.ExitUnfinished="La conversion n'est pas terminée, arrêter maintenant peut rendre le fichier cible inutilisable.\nVoulez-vous vraiment arrêter la conversion ?"
66
 
67
 UpdateAvailable="Nouvelle Mise à Jour Disponible"
68
 UpdateAvailable.Text="La version %1.%2.%3 est désormais disponible. <a href='%4'>Cliquez ici pour la télécharger</a>"
69
@@ -90,6 +96,8 @@
70
 Basic.PropertiesWindow.AutoSelectFormat="%1 (non supporté ; sélection automatique: %2)"
71
 Basic.PropertiesWindow.SelectColor="Sélectionnez une couleur"
72
 Basic.PropertiesWindow.SelectFont="Sélectionnez la police"
73
+Basic.PropertiesWindow.ConfirmTitle="Paramètres modifiés"
74
+Basic.PropertiesWindow.Confirm="Des modifications n'ont pas été enregistrées. Voulez-vous les conserver ?"
75
 
76
 Basic.InteractionWindow="Interagit avec '%1'"
77
 
78
@@ -116,102 +124,134 @@
79
 Basic.TransformWindow.Alignment.BottomRight="En Bas à Droite"
80
 
81
 Basic.TransformWindow.BoundsType.None="Sans Contours"
82
-Basic.TransformWindow.BoundsType.MaxOnly="Taille Maximale Uniquement"
83
-Basic.TransformWindow.BoundsType.ScaleInner="Mettre à l'échelle par les Dimensions Intérieurs"
84
-Basic.TransformWindow.BoundsType.ScaleOuter="Mettre à l'échelle par les Dimensions Extérieurs"
85
-Basic.TransformWindow.BoundsType.ScaleToWidth="Mettre à l'échelle par la Largeur"
86
-Basic.TransformWindow.BoundsType.ScaleToHeight="Mettre à l'échelle par la Hauteur"
87
-Basic.TransformWindow.BoundsType.Stretch="Étiré au Dimensions"
88
-
89
-Basic.Main.AddSourceHelp.Title="Impossible d'ajouter la Source"
90
+Basic.TransformWindow.BoundsType.MaxOnly="Taille maximale uniquement"
91
+Basic.TransformWindow.BoundsType.ScaleInner="Mettre à l'échelle par les dimensions intérieurs"
92
+Basic.TransformWindow.BoundsType.ScaleOuter="Mettre à l'échelle par les dimensions extérieurs"
93
+Basic.TransformWindow.BoundsType.ScaleToWidth="Mettre à l'échelle par la largeur"
94
+Basic.TransformWindow.BoundsType.ScaleToHeight="Mettre à l'échelle par la hauteur"
95
+Basic.TransformWindow.BoundsType.Stretch="Étirer aux dimensions"
96
+
97
+Basic.Main.AddSourceHelp.Title="Impossible d'ajouter la source"
98
 Basic.Main.AddSourceHelp.Text="Vous devez avoir au moins 1 scène pour ajouter une source."
99
 
100
 Basic.Main.Scenes="Scènes"
101
 Basic.Main.Sources="Sources"
102
 Basic.Main.Connecting="Connexion en cours..."
103
 Basic.Main.StartRecording="Démarrer l'enregistrement"
104
-Basic.Main.StartStreaming="Commencer le Streaming"
105
+Basic.Main.StartStreaming="Commencer le streaming"
106
 Basic.Main.StopRecording="Arrêter l'enregistrement"
107
-Basic.Main.StopStreaming="Arrêter le Streaming"
108
+Basic.Main.StopStreaming="Arrêter le streaming"
109
 
110
 Basic.MainMenu.File="&Fichier"
111
 Basic.MainMenu.File.Export="&Exporter"
112
 Basic.MainMenu.File.Import="&Importer"
113
 Basic.MainMenu.File.ShowRecordings="Affichage & enregistrements"
114
-Basic.MainMenu.File.Remux="Réencapsuler un enregistrement"
115
+Basic.MainMenu.File.Remux="&Convertir un enregistrement"
116
 Basic.MainMenu.File.Settings="&Paramètres"
117
 Basic.MainMenu.File.Exit="&Quitter"
118
 
119
-Basic.MainMenu.Edit="E&diter"
120
+Basic.MainMenu.Edit="&Editer"
121
 Basic.MainMenu.Edit.Undo="&Annuler"
122
 Basic.MainMenu.Edit.Redo="&Rétablir"
123
-Basic.MainMenu.Edit.UndoAction="A&nnuler $1"
124
-Basic.MainMenu.Edit.RedoAction="Réta&blir $1"
125
+Basic.MainMenu.Edit.UndoAction="&Annuler $1"
126
+Basic.MainMenu.Edit.RedoAction="&Rétablir $1"
127
 Basic.MainMenu.Edit.Transform="&Transformer"
128
-Basic.MainMenu.Edit.Transform.EditTransform="Éditer la Transformation..."
129
-Basic.MainMenu.Edit.Transform.ResetTransform="Réinitialiser la Transformation"
130
-Basic.MainMenu.Edit.Transform.Rotate90CW="Rotation 90° Horaire"
131
-Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotation 90° Anti-horaire"
132
+Basic.MainMenu.Edit.Transform.EditTransform="Éditer la transformation..."
133
+Basic.MainMenu.Edit.Transform.ResetTransform="Réinitialiser la transformation"
134
+Basic.MainMenu.Edit.Transform.Rotate90CW="Rotation de 90° sens horaire"
135
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotation de 90° sens antihoraire"
136
 Basic.MainMenu.Edit.Transform.Rotate180="Rotation de 180°"
137
-Basic.MainMenu.Edit.Transform.FlipHorizontal="Inverser &Horizontalement"
138
-Basic.MainMenu.Edit.Transform.FlipVertical="Inverser &Verticalement"
139
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Inverser &horizontalement"
140
+Basic.MainMenu.Edit.Transform.FlipVertical="Inverser &verticalement"
141
 Basic.MainMenu.Edit.Transform.FitToScreen="&Adapter à l'écran"
142
 Basic.MainMenu.Edit.Transform.StretchToScreen="&Etirer à l'écran"
143
 Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrer à l'écran"
144
 Basic.MainMenu.Edit.Order="&Ordonner"
145
 Basic.MainMenu.Edit.Order.MoveUp="&Monter d'un cran"
146
 Basic.MainMenu.Edit.Order.MoveDown="&Descendre d'un cran"
147
-Basic.MainMenu.Edit.Order.MoveToTop="Déplacer en tout en &Haut"
148
-Basic.MainMenu.Edit.Order.MoveToBottom="Déplacer tout en &Bas"
149
+Basic.MainMenu.Edit.Order.MoveToTop="Déplacer tout en &haut"
150
+Basic.MainMenu.Edit.Order.MoveToBottom="Déplacer tout en &bas"
151
+Basic.MainMenu.Edit.AdvAudio="Propriétés audio &avancées"
152
 
153
 Basic.MainMenu.Help="&Aide"
154
 Basic.MainMenu.Help.Logs="&Fichiers journaux"
155
-Basic.MainMenu.Help.Logs.ShowLogs="& Afficher les fichiers de Log"
156
-Basic.MainMenu.Help.Logs.UploadCurrentLog="Mettre en Ligne le Fichier Journal &Actuel"
157
-Basic.MainMenu.Help.Logs.UploadLastLog="Mettre en Ligne le &Dernier Fichier Journal"
158
-Basic.MainMenu.Help.CheckForUpdates="Rechercher des Mises à Jour"
159
+Basic.MainMenu.Help.Logs.ShowLogs="Afficher les &fichiers de log"
160
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Mettre en ligne le fichier journal &actuel"
161
+Basic.MainMenu.Help.Logs.UploadLastLog="Mettre en ligne le &dernier fichier journal"
162
+Basic.MainMenu.Help.CheckForUpdates="Rechercher des mises à jour"
163
 
164
-Basic.Settings.ProgramRestart="Le programme doit être redémarré pour que ces paramètres prennent effet."
165
+Basic.Settings.ProgramRestart="Le programme doit être redémarré pour que les paramètres prennent effet."
166
 Basic.Settings.ConfirmTitle="Valider les modifications"
167
-Basic.Settings.Confirm="Vous avez des modifications non enregistrées.  Voulez-vous les enregistrer ?"
168
+Basic.Settings.Confirm="Vous avez des modifications non enregistrées. Voulez-vous les enregistrer ?"
169
 
170
 Basic.Settings.General="Général"
171
-Basic.Settings.General.Language="Langue:"
172
+Basic.Settings.General.Language="Langue :"
173
 
174
 Basic.Settings.Stream="Diffuser"
175
-Basic.Settings.Stream.StreamType="Type de Diffusion"
176
+Basic.Settings.Stream.StreamType="Type de diffusion"
177
 
178
 Basic.Settings.Output="Sortie"
179
-Basic.Settings.Output.Mode="Mode de Sortie"
180
-Basic.Settings.Output.Mode.Simple="Simple (Diffusion et/ou Enregistrement)"
181
-Basic.Settings.Output.Mode.Advanced="Avancés (type de sortie personnalisée)"
182
-Basic.Settings.Output.Simple.SavePath="Chemin d'Enregistrement FLV"
183
-Basic.Settings.Output.VideoBitrate="Débit Vidéo"
184
+Basic.Settings.Output.Encoder="Encodeur"
185
+Basic.Settings.Output.SelectDirectory="Sélectionnez le répertoire d'enregistrement"
186
+Basic.Settings.Output.SelectFile="Sélectionnez le fichier cible"
187
+Basic.Settings.Output.Mode="Mode de sortie"
188
+Basic.Settings.Output.Mode.Simple="Simple"
189
+Basic.Settings.Output.Mode.Adv="Avancé"
190
+Basic.Settings.Output.Mode.FFmpeg="Sortie FFmpeg"
191
+Basic.Settings.Output.Simple.SavePath="Chemin de l'enregistrement FLV"
192
+Basic.Settings.Output.VideoBitrate="Débit vidéo"
193
 Basic.Settings.Output.AudioBitrate="Débit audio"
194
 Basic.Settings.Output.Reconnect="Reconnecter Automatiquement"
195
-Basic.Settings.Output.RetryDelay="Délais avant Tentative de Reconnexion (secondes)"
196
-Basic.Settings.Output.MaxRetries="Nombres de Tentatives Maximum"
197
+Basic.Settings.Output.RetryDelay="Délai avant la tentative de reconnexion (en secondes)"
198
+Basic.Settings.Output.MaxRetries="Nombres de tentatives maximales"
199
 Basic.Settings.Output.Advanced="Activer les paramètres avancés d'encodage"
200
-Basic.Settings.Output.X264Preset="Préréglages x264"
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/gl-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/gl-ES.ini Changed
123
 
1
@@ -5,6 +5,8 @@
2
 OK="Aceptar"
3
 Apply="Aplicar"
4
 Cancel="Cancelar"
5
+Save="Gardar"
6
+Discard="Descartar"
7
 Yes="Si"
8
 No="Non"
9
 Add="Engadir"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Subir"
12
 MoveDown="Baixar"
13
 Settings="Axustes"
14
+Name="Nome"
15
 Exit="Saír"
16
 Mixer="Mesturador"
17
 Browse="Explorar"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Por favor, insire un nome válido"
20
 NoNameEntered.Text="Non podes empregar nomes baleiros."
21
 
22
+ConfirmExit.Title="Saír de OBS?"
23
+ConfirmExit.Text="OBS está activo neste momento. Tes a certeza de que desexas saír?"
24
+
25
 ConfirmRemove.Title="Confirmar a eliminación"
26
 ConfirmRemove.Text="Tes a certeza de querer eliminar '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (non compatible; autoseleccionar: %2)"
30
 Basic.PropertiesWindow.SelectColor="Seleccionar cor"
31
 Basic.PropertiesWindow.SelectFont="Seleccionar fonte"
32
+Basic.PropertiesWindow.ConfirmTitle="Axustes cambiados"
33
+Basic.PropertiesWindow.Confirm="Hai cambios sen gardar. Queres conservalos?"
34
 
35
 Basic.InteractionWindow="Interactuando con '%1'"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Baixar"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Levar para a cima"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Levar para abaixo"
41
+Basic.MainMenu.Edit.AdvAudio="Propiedades de audio &avanzadas"
42
 
43
 Basic.MainMenu.Help="&Axuda"
44
 Basic.MainMenu.Help.Logs="&Ficheiros de rexistro"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Tipo de retransmisión"
47
 
48
 Basic.Settings.Output="Saída"
49
+Basic.Settings.Output.Encoder="Codificador"
50
+Basic.Settings.Output.SelectDirectory="Seleccionar directorio de gravación"
51
+Basic.Settings.Output.SelectFile="Seleccionar ficheiro de gravación"
52
 Basic.Settings.Output.Mode="Modo de saída"
53
-Basic.Settings.Output.Mode.Simple="Simple (retransmisión e/ou gravación)"
54
-Basic.Settings.Output.Mode.Advanced="Avanzado (saída personalizada)"
55
+Basic.Settings.Output.Mode.Simple="Sinxelo"
56
+Basic.Settings.Output.Mode.Adv="Avanzado"
57
+Basic.Settings.Output.Mode.FFmpeg="Saída de FFmpeg"
58
 Basic.Settings.Output.Simple.SavePath="Camiño de gravación FLV"
59
 Basic.Settings.Output.VideoBitrate="Velocidade de bits de vídeo"
60
 Basic.Settings.Output.AudioBitrate="Velocidade de bits de audio"
61
@@ -192,9 +205,29 @@
62
 Basic.Settings.Output.RetryDelay="Retardo da nova tentativa (segundos)"
63
 Basic.Settings.Output.MaxRetries="Número máximo de tentativas"
64
 Basic.Settings.Output.Advanced="Activar a configuración do codificador avanzada"
65
-Basic.Settings.Output.X264Preset="Predefinido x264"
66
-Basic.Settings.Output.CustomX264Settings="Configuración personalizada x264"
67
+Basic.Settings.Output.CustomEncoderSettings="Axustes do codificador personalizados"
68
 Basic.Settings.Output.UseCBR="Utilizar unha velocidade de bits constante"
69
+Basic.Settings.Output.UseBufferSize="Utilizar tamaño do búfer personalizado"
70
+
71
+Basic.Settings.Output.Adv.Rescale="Cambiar a escala de saída"
72
+Basic.Settings.Output.Adv.AudioTrack="Pista de audio"
73
+Basic.Settings.Output.Adv.Streaming="En tempo real"
74
+Basic.Settings.Output.Adv.Audio.Track1="Pista 1"
75
+Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
76
+Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
77
+Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
78
+
79
+Basic.Settings.Output.Adv.Recording="Gravando"
80
+Basic.Settings.Output.Adv.Recording.Type="Tipo"
81
+Basic.Settings.Output.Adv.Recording.Type.Standard="Estándar"
82
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Saída personalizada (FFmpeg)"
83
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Formatos comúns de gravación"
84
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Todos os ficheiros"
85
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Camiño do ficheiro ou URL"
86
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Codificador de vídeo (en branco = por defecto)"
87
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Axustes do codificador de vídeo (se existe)"
88
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Codificador de audio (en branco = por defecto)"
89
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Axustes do codificador de audio (se existe)"
90
 
91
 Basic.Settings.Video="Vídeo"
92
 Basic.Settings.Video.Adapter="Adaptador de vídeo:"
93
@@ -212,6 +245,10 @@
94
 Basic.Settings.Video.InvalidResolution="Valor da resolución non válido.  Debe ser [width] x [height] (por exemplo, 1920 x 1080)"
95
 Basic.Settings.Video.CurrentlyActive="A saída de vídeo está actualmente activa.  Por favor, apaga calquera saída para cambiar a configuración de vídeo."
96
 
97
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (máis rápido, pero borroso de se escalar a imaxe)"
98
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicúbico (escalamento fino, 16 mostras)"
99
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (escalamento fino, 32 mostras)"
100
+
101
 Basic.Settings.Audio="Audio"
102
 Basic.Settings.Audio.SampleRate="Intervalo da mostra"
103
 Basic.Settings.Audio.Channels="Canles"
104
@@ -221,3 +258,18 @@
105
 Basic.Settings.Audio.AuxDevice2="Dispositivo de audio mic./auxiliar 2"
106
 Basic.Settings.Audio.AuxDevice3="Dispositivo de audio mic./auxiliar 3"
107
 
108
+Basic.Settings.Advanced="Avanzado"
109
+Basic.Settings.Advanced.Audio.BufferingTime="Tempo do búfer de audio"
110
+Basic.Settings.Advanced.Video.ColorFormat="Formato da cor"
111
+Basic.Settings.Advanced.Video.ColorSpace="Espazo de cor YUV"
112
+Basic.Settings.Advanced.Video.ColorRange="Gama de cor YUV"
113
+Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
114
+
115
+Basic.AdvAudio="Propiedades de audio avanzadas"
116
+Basic.AdvAudio.Name="Nome"
117
+Basic.AdvAudio.Volume="Volume (%)"
118
+Basic.AdvAudio.Mono="Remesturar a mono"
119
+Basic.AdvAudio.Panning="Panorámica"
120
+Basic.AdvAudio.SyncOffset="Sincronización Offset (ms)"
121
+Basic.AdvAudio.AudioTracks="Pistas"
122
+
123
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/hr-HR.ini Changed
110
 
1
@@ -14,6 +14,7 @@
2
 MoveUp="Pomeri gore"
3
 MoveDown="Pomeri dole"
4
 Settings="Podešavanja"
5
+Name="Ime"
6
 Exit="Izlaz"
7
 Mixer="Mikseta"
8
 Browse="Pretraži"
9
@@ -27,6 +28,9 @@
10
 NoNameEntered.Title="Molim unesite ispravno ime"
11
 NoNameEntered.Text="Ne možete izostaviti ime."
12
 
13
+ConfirmExit.Title="Napustiti OBS?"
14
+ConfirmExit.Text="OBS je trenutno aktivan. Da li ste sigurni da želite izaći?"
15
+
16
 ConfirmRemove.Title="Potvrdi izbacivanje"
17
 ConfirmRemove.Text="Da li ste sigurni da želite izbaciti '$1'?"
18
 
19
@@ -90,6 +94,8 @@
20
 Basic.PropertiesWindow.AutoSelectFormat="%1 (nije podržano; automatski odabrano: %2)"
21
 Basic.PropertiesWindow.SelectColor="Izaberi boju"
22
 Basic.PropertiesWindow.SelectFont="Izaberi font"
23
+Basic.PropertiesWindow.ConfirmTitle="Podešavanja promenjena"
24
+Basic.PropertiesWindow.Confirm="Postoje podešavanja koja nisu sačuvana. Da li želite da ih sačuvate?"
25
 
26
 Basic.InteractionWindow="Interakcija sa '%1'"
27
 
28
@@ -163,6 +169,7 @@
29
 Basic.MainMenu.Edit.Order.MoveDown="Pomeri &dole"
30
 Basic.MainMenu.Edit.Order.MoveToTop="Pomeri na vrh (&T)"
31
 Basic.MainMenu.Edit.Order.MoveToBottom="Pomeri na dno (&B)"
32
+Basic.MainMenu.Edit.AdvAudio="N&apredna podešavanja zvuka"
33
 
34
 Basic.MainMenu.Help="Pomoć (&H)"
35
 Basic.MainMenu.Help.Logs="&Log datoteke"
36
@@ -182,9 +189,13 @@
37
 Basic.Settings.Stream.StreamType="Vrsta strima"
38
 
39
 Basic.Settings.Output="Izlaz"
40
+Basic.Settings.Output.Encoder="Enkoder"
41
+Basic.Settings.Output.SelectDirectory="Odaberi direktorijum za snimanje"
42
+Basic.Settings.Output.SelectFile="Odaberi datoteku za snimanje"
43
 Basic.Settings.Output.Mode="Režim izlaza"
44
-Basic.Settings.Output.Mode.Simple="Jednostavno (stream i/ili snimanje)"
45
-Basic.Settings.Output.Mode.Advanced="Napredno (specifičan tip izlaza)"
46
+Basic.Settings.Output.Mode.Simple="Jednostavno"
47
+Basic.Settings.Output.Mode.Adv="Napredno"
48
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg izlaz"
49
 Basic.Settings.Output.Simple.SavePath="Putanja snimka za FLV"
50
 Basic.Settings.Output.VideoBitrate="Protok videa"
51
 Basic.Settings.Output.AudioBitrate="Protok zvuka"
52
@@ -192,9 +203,31 @@
53
 Basic.Settings.Output.RetryDelay="Pauza pre ponovnog pokušaja (sekunde)"
54
 Basic.Settings.Output.MaxRetries="Maksimalan broj ponovnih pokušaja"
55
 Basic.Settings.Output.Advanced="Omogući napredna podešavanja kompresora"
56
-Basic.Settings.Output.X264Preset="x264 šablon"
57
-Basic.Settings.Output.CustomX264Settings="Specifična x264 podešavanja"
58
+Basic.Settings.Output.EncoderPreset="Šablon enkodera (veće = manje CPU)"
59
+Basic.Settings.Output.CustomEncoderSettings="Prilagođena enkoder podešavanja"
60
 Basic.Settings.Output.UseCBR="Koristi konstantan protok"
61
+Basic.Settings.Output.UseBufferSize="Koristi specifičnu veličinu bafera"
62
+
63
+Basic.Settings.Output.Adv.Rescale="Skaliraj izlaz"
64
+Basic.Settings.Output.Adv.AudioTrack="Zvučni izvor"
65
+Basic.Settings.Output.Adv.Streaming="Strimovanje"
66
+Basic.Settings.Output.Adv.Audio.Track1="Izvor 1"
67
+Basic.Settings.Output.Adv.Audio.Track2="Izvor 2"
68
+Basic.Settings.Output.Adv.Audio.Track3="Izvor 3"
69
+Basic.Settings.Output.Adv.Audio.Track4="Izvor 4"
70
+
71
+Basic.Settings.Output.Adv.Recording="Snimanje"
72
+Basic.Settings.Output.Adv.Recording.Type="Vrsta"
73
+Basic.Settings.Output.Adv.Recording.Type.Standard="Uobičajeni"
74
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Prilagođeni izlaz (FFmpeg)"
75
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Koristi strim enkoder)"
76
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Uobičajeni formati snimaka"
77
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Sve datoteke"
78
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Putanja datoteke ili URL"
79
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video enkoder (prazno=podrazumevani)"
80
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Podešavanja video enkodera (ako postoje)"
81
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Zvučni enkoder (prazno=podrazumevani)"
82
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Podešavanja zvučnog enkodera (ako postoje)"
83
 
84
 Basic.Settings.Video="Video"
85
 Basic.Settings.Video.Adapter="Video adapter:"
86
@@ -212,6 +245,10 @@
87
 Basic.Settings.Video.InvalidResolution="Neispravna vrednost rezolucije. Mora biti [width]x[height] (npr. 1920x1080)"
88
 Basic.Settings.Video.CurrentlyActive="Video izlaz je trenutno aktivan. Molim isključite sve izlaze da promenite video podešavanja."
89
 
90
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (najbrže, ali mutno pri skaliranju)"
91
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (oštrije skaliranje, 16 uzoraka)"
92
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (oštrije skaliranje, 32 uzorka)"
93
+
94
 Basic.Settings.Audio="Zvuk"
95
 Basic.Settings.Audio.SampleRate="Protok"
96
 Basic.Settings.Audio.Channels="Kanali"
97
@@ -221,3 +258,12 @@
98
 Basic.Settings.Audio.AuxDevice2="Mikrofon/Ulaz 2"
99
 Basic.Settings.Audio.AuxDevice3="Mikrofon/Ulaz 3"
100
 
101
+
102
+Basic.AdvAudio="Napredna podešavanja zvuka"
103
+Basic.AdvAudio.Name="Ime"
104
+Basic.AdvAudio.Volume="Glasnoća (%)"
105
+Basic.AdvAudio.Mono="Spoji u mono"
106
+Basic.AdvAudio.Panning="Pomeranje"
107
+Basic.AdvAudio.SyncOffset="Razlika u sinhronizaciji (ms)"
108
+Basic.AdvAudio.AudioTracks="Izvori"
109
+
110
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/hu-HU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/hu-HU.ini Changed
110
 
1
@@ -14,6 +14,7 @@
2
 MoveUp="Mozgatás Fel"
3
 MoveDown="Mozgatás Le"
4
 Settings="Beállítások"
5
+Name="Név"
6
 Exit="Kilépés"
7
 Mixer="Keverő"
8
 Browse="Tallózás"
9
@@ -27,6 +28,9 @@
10
 NoNameEntered.Title="Kérem adjon meg egy érvényes nevet"
11
 NoNameEntered.Text="Üres nevek nem használhatóak."
12
 
13
+ConfirmExit.Title="Kilép a programból?"
14
+ConfirmExit.Text="Az OBS jelenleg aktív. Biztosan ki szeretne lépni?"
15
+
16
 ConfirmRemove.Title="Eltávolítás Megerősítése"
17
 ConfirmRemove.Text="\"$1\" eltávolítására készül, biztos benne?"
18
 
19
@@ -90,6 +94,8 @@
20
 Basic.PropertiesWindow.AutoSelectFormat="%1 (nem támogatott; autokiválasztás: %2)"
21
 Basic.PropertiesWindow.SelectColor="Szín Kiválasztása"
22
 Basic.PropertiesWindow.SelectFont="Betűtípus kiválasztása"
23
+Basic.PropertiesWindow.ConfirmTitle="Beállítások Módosultak"
24
+Basic.PropertiesWindow.Confirm="Változtatásai nincsenek elmentve. Szeretné megtartani őket?"
25
 
26
 Basic.InteractionWindow="Egymásra hatnak \"%1\"-el"
27
 
28
@@ -163,6 +169,7 @@
29
 Basic.MainMenu.Edit.Order.MoveDown="Mozgatás &Le"
30
 Basic.MainMenu.Edit.Order.MoveToTop="Mozgatás a &Tetejére"
31
 Basic.MainMenu.Edit.Order.MoveToBottom="Mozgatás az &Aljára"
32
+Basic.MainMenu.Edit.AdvAudio="&Speciális Audio Tulajdonságok"
33
 
34
 Basic.MainMenu.Help="&Segítség"
35
 Basic.MainMenu.Help.Logs="&Naplófájlok"
36
@@ -182,9 +189,13 @@
37
 Basic.Settings.Stream.StreamType="Stream típusa"
38
 
39
 Basic.Settings.Output="Kimenet"
40
+Basic.Settings.Output.Encoder="Kódoló"
41
+Basic.Settings.Output.SelectDirectory="Felvételi Könyvtár Kiválasztása"
42
+Basic.Settings.Output.SelectFile="Felvétel Fájljának Kiválasztása"
43
 Basic.Settings.Output.Mode="Kimeneti Mód"
44
-Basic.Settings.Output.Mode.Simple="Egyszerű (Stream és/vagy felvétel)"
45
-Basic.Settings.Output.Mode.Advanced="Speciális (Egyéni kimeneti típus)"
46
+Basic.Settings.Output.Mode.Simple="Egyszerű"
47
+Basic.Settings.Output.Mode.Adv="Haladó"
48
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Kimenet"
49
 Basic.Settings.Output.Simple.SavePath="FLV felvétel elérési útja"
50
 Basic.Settings.Output.VideoBitrate="Videó Bitráta"
51
 Basic.Settings.Output.AudioBitrate="Audio Bitráta"
52
@@ -192,9 +203,31 @@
53
 Basic.Settings.Output.RetryDelay="Újrapróbálkozás Késleltetése (másodperc)"
54
 Basic.Settings.Output.MaxRetries="Újrapróbálkozások Maximális Száma"
55
 Basic.Settings.Output.Advanced="Speciális Kódoló beállítások engedélyezése"
56
-Basic.Settings.Output.X264Preset="x264 készlet"
57
-Basic.Settings.Output.CustomX264Settings="Egyedi x264 Beállítások"
58
+Basic.Settings.Output.EncoderPreset="Kódoló Készlet (magasabb = kevesebb CPU igény)"
59
+Basic.Settings.Output.CustomEncoderSettings="Egyéni Kódolási Beállítások"
60
 Basic.Settings.Output.UseCBR="Konstans bitráta használata"
61
+Basic.Settings.Output.UseBufferSize="Egyéni pufferméret használata"
62
+
63
+Basic.Settings.Output.Adv.Rescale="Kimenet Átméretezése"
64
+Basic.Settings.Output.Adv.AudioTrack="Hangsáv"
65
+Basic.Settings.Output.Adv.Streaming="Streamelés"
66
+Basic.Settings.Output.Adv.Audio.Track1="Sáv 1"
67
+Basic.Settings.Output.Adv.Audio.Track2="Sáv 2"
68
+Basic.Settings.Output.Adv.Audio.Track3="Sáv 3"
69
+Basic.Settings.Output.Adv.Audio.Track4="Sáv 4"
70
+
71
+Basic.Settings.Output.Adv.Recording="Rögzítés"
72
+Basic.Settings.Output.Adv.Recording.Type="Típus"
73
+Basic.Settings.Output.Adv.Recording.Type.Standard="Szabvány"
74
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Egyéni Kimenet (FFmpeg)"
75
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Stream kódoló használata)"
76
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Általános felvételi formátumok"
77
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Minden fájl"
78
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Fájl elérési útja vagy URL"
79
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videó Kódoló (üres = alapértelmezett)"
80
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videó Kódoló Beállítások (ha van)"
81
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Kódoló (üres = alapértelmezett)"
82
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Kódoló Beállítások (ha van)"
83
 
84
 Basic.Settings.Video="Videó"
85
 Basic.Settings.Video.Adapter="Videó Adapter:"
86
@@ -212,6 +245,10 @@
87
 Basic.Settings.Video.InvalidResolution="Érvénytelen felbontás érték. [szélesség] x [magasság]-nak kell lennie (pl.: 1920 x 1080)"
88
 Basic.Settings.Video.CurrentlyActive="Video kimenet jelenleg aktív. Kérem, kapcsoljon ki minden kimeneti forrást a video beállítások módosításához."
89
 
90
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineáris (leggyorsabb, homályos lehet méretezésnél)"
91
+Basic.Settings.Video.DownscaleFilter.Bicubic="Kettős köbös (élesített méretezés, 16 minta)"
92
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (élesített méretezés, 32 minta)"
93
+
94
 Basic.Settings.Audio="Hang"
95
 Basic.Settings.Audio.SampleRate="Mintavételezés"
96
 Basic.Settings.Audio.Channels="Csatornák"
97
@@ -221,3 +258,12 @@
98
 Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux Audio eszköz 2"
99
 Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux Audio eszköz 3"
100
 
101
+
102
+Basic.AdvAudio="Speciális Audio Tulajdonságok"
103
+Basic.AdvAudio.Name="Név"
104
+Basic.AdvAudio.Volume="Hangerő (%)"
105
+Basic.AdvAudio.Mono="Monora lekeverés"
106
+Basic.AdvAudio.Panning="Keverő"
107
+Basic.AdvAudio.SyncOffset="Szinkron eltolás (ms)"
108
+Basic.AdvAudio.AudioTracks="Sávok"
109
+
110
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/it-IT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/it-IT.ini Changed
45
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Inserisci un nome valido"
3
 NoNameEntered.Text="Non è possibile utilizzare nomi vuoti."
4
 
5
+
6
 ConfirmRemove.Title="Conferma la rimozione"
7
 ConfirmRemove.Text="Sei sicuro di voler rimuovere '$1'?"
8
 
9
@@ -183,8 +184,6 @@
10
 
11
 Basic.Settings.Output="Output"
12
 Basic.Settings.Output.Mode="Modalità di output"
13
-Basic.Settings.Output.Mode.Simple="Semplice (trasmetti e/o registra)"
14
-Basic.Settings.Output.Mode.Advanced="Avanzata (tipo di output personalizzato)"
15
 Basic.Settings.Output.Simple.SavePath="Percorso di salvataggio per file FLV"
16
 Basic.Settings.Output.VideoBitrate="Bitrate video"
17
 Basic.Settings.Output.AudioBitrate="Bitrate Audio"
18
@@ -192,10 +191,10 @@
19
 Basic.Settings.Output.RetryDelay="Ritardo dei tentativi (secondi)"
20
 Basic.Settings.Output.MaxRetries="Tentativi massimi"
21
 Basic.Settings.Output.Advanced="Abilita le impostazioni avanzate di codifica"
22
-Basic.Settings.Output.X264Preset="x264 Preset"
23
-Basic.Settings.Output.CustomX264Settings="Impostazioni personalizzate x264"
24
 Basic.Settings.Output.UseCBR="Usa Bitrate costante"
25
 
26
+
27
+
28
 Basic.Settings.Video="Video"
29
 Basic.Settings.Video.Adapter="Adattatore video:"
30
 Basic.Settings.Video.BaseResolution="Risoluzione di base:"
31
@@ -212,6 +211,7 @@
32
 Basic.Settings.Video.InvalidResolution="Valore di risoluzione invalido. Deve essere [larghezza]x[altezza] (es. 1920x1080)"
33
 Basic.Settings.Video.CurrentlyActive="L'output video è attualmente attivo. Spegni qualunque output per cambiare le impostazioni."
34
 
35
+
36
 Basic.Settings.Audio="Audio"
37
 Basic.Settings.Audio.SampleRate="Ratio di campionamento"
38
 Basic.Settings.Audio.Channels="Canali"
39
@@ -221,3 +221,5 @@
40
 Basic.Settings.Audio.AuxDevice2="Dispositivo audio mic/ausiliario 2"
41
 Basic.Settings.Audio.AuxDevice3="Dispositivo audio mic/ausiliario 3"
42
 
43
+
44
+
45
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/ja-JP.ini Changed
115
 
1
@@ -14,9 +14,10 @@
2
 MoveUp="上へ移動"
3
 MoveDown="下へ移動"
4
 Settings="設定"
5
+Name="名称"
6
 Exit="終了"
7
 Mixer="ミキサー"
8
-Browse="ブラウズ"
9
+Browse="参照"
10
 Mono="モノラル"
11
 Stereo="ステレオ"
12
 DroppedFrames="ドロップしたフレーム %1 (%2%)"
13
@@ -27,6 +28,9 @@
14
 NoNameEntered.Title="有効な名前を入力してください"
15
 NoNameEntered.Text="空の名前を使用することはできません。"
16
 
17
+ConfirmExit.Title="OBSを終了しますか?"
18
+ConfirmExit.Text="OBS は現在アクティブです。終了してもよろしいですか?"
19
+
20
 ConfirmRemove.Title="削除の確認"
21
 ConfirmRemove.Text="'$1' を削除してもよろしいですか?"
22
 
23
@@ -90,6 +94,8 @@
24
 Basic.PropertiesWindow.AutoSelectFormat="%1 (サポートされていない; 自動選択: %2)"
25
 Basic.PropertiesWindow.SelectColor="色を選択"
26
 Basic.PropertiesWindow.SelectFont="フォントを選択"
27
+Basic.PropertiesWindow.ConfirmTitle="設定の変更"
28
+Basic.PropertiesWindow.Confirm="保存されていない変更があります。それらを維持しますか?"
29
 
30
 Basic.InteractionWindow="'%1' との相互作用"
31
 
32
@@ -163,6 +169,7 @@
33
 Basic.MainMenu.Edit.Order.MoveDown="下に移動(&D)"
34
 Basic.MainMenu.Edit.Order.MoveToTop="最上部に移動(&T)"
35
 Basic.MainMenu.Edit.Order.MoveToBottom="最下部に移動(&B)"
36
+Basic.MainMenu.Edit.AdvAudio="オーディオの詳細プロパティ"
37
 
38
 Basic.MainMenu.Help="ヘルプ(&H)"
39
 Basic.MainMenu.Help.Logs="ログファイル(&L)"
40
@@ -182,9 +189,13 @@
41
 Basic.Settings.Stream.StreamType="配信種別"
42
 
43
 Basic.Settings.Output="出力"
44
+Basic.Settings.Output.Encoder="エンコーダー"
45
+Basic.Settings.Output.SelectDirectory="録画ディレクトリを選択"
46
+Basic.Settings.Output.SelectFile="録画ファイルを選択"
47
 Basic.Settings.Output.Mode="出力モード"
48
-Basic.Settings.Output.Mode.Simple="基本 (配信 / 録画)"
49
-Basic.Settings.Output.Mode.Advanced="上級 (カスタム出力タイプ)"
50
+Basic.Settings.Output.Mode.Simple="基本"
51
+Basic.Settings.Output.Mode.Adv="詳細"
52
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg の出力"
53
 Basic.Settings.Output.Simple.SavePath="FLV 録画ファイルパス"
54
 Basic.Settings.Output.VideoBitrate="映像ビット レート"
55
 Basic.Settings.Output.AudioBitrate="音声ビットレート"
56
@@ -192,9 +203,32 @@
57
 Basic.Settings.Output.RetryDelay="再試行の遅延 (秒)"
58
 Basic.Settings.Output.MaxRetries="最大再試行回数"
59
 Basic.Settings.Output.Advanced="高度なエンコーダーの設定を有効にする"
60
-Basic.Settings.Output.X264Preset="x264 プリセット"
61
-Basic.Settings.Output.CustomX264Settings="x264 のカスタム設定"
62
+Basic.Settings.Output.EncoderPreset="エンコーダープリセット (高い = CPU使用低い)"
63
+Basic.Settings.Output.CustomEncoderSettings="エンコーダーのカスタム設定"
64
 Basic.Settings.Output.UseCBR="固定ビットレートを使用する"
65
+Basic.Settings.Output.UseBufferSize="特定バッファサイズを使用"
66
+
67
+Basic.Settings.Output.Adv.Rescale="出力をリスケールする"
68
+Basic.Settings.Output.Adv.AudioTrack="オーディオ トラック"
69
+Basic.Settings.Output.Adv.Streaming="配信"
70
+Basic.Settings.Output.Adv.ApplyServiceSettings="ストリーミングサービスのエンコーダ設定を適用する"
71
+Basic.Settings.Output.Adv.Audio.Track1="トラック 1"
72
+Basic.Settings.Output.Adv.Audio.Track2="トラック 2"
73
+Basic.Settings.Output.Adv.Audio.Track3="トラック 3"
74
+Basic.Settings.Output.Adv.Audio.Track4="トラック 4"
75
+
76
+Basic.Settings.Output.Adv.Recording="録画"
77
+Basic.Settings.Output.Adv.Recording.Type="種別"
78
+Basic.Settings.Output.Adv.Recording.Type.Standard="標準"
79
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="カスタム出力 (FFmpeg)"
80
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(ストリームエンコーダーを使用)"
81
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="共通の録画フォーマット"
82
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="すべてのファイル"
83
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="ファイルパス または URL"
84
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="ビデオエンコーダー (空白 = デフォルト)"
85
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="ビデオエンコーダー設定 (ある場合)"
86
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="オーディオエンコーダー (空白 = デフォルト)"
87
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="オーディオエンコーダー設定 (ある場合)"
88
 
89
 Basic.Settings.Video="映像"
90
 Basic.Settings.Video.Adapter="ビデオアダプター:"
91
@@ -212,6 +246,10 @@
92
 Basic.Settings.Video.InvalidResolution="解像度の値が不正です。[幅]x[高さ] (例 1920x1080)にしてください"
93
 Basic.Settings.Video.CurrentlyActive="映像出力中です。映像設定を変更するには出力を停止してください。"
94
 
95
+Basic.Settings.Video.DownscaleFilter.Bilinear="バイリニア(スケーリングする場合ぼやけているが最速)"
96
+Basic.Settings.Video.DownscaleFilter.Bicubic="バイキュービック(先鋭化スケーリング、16 のサンプル)"
97
+Basic.Settings.Video.DownscaleFilter.Lanczos="ランチョス(先鋭化スケーリング、32 のサンプル)"
98
+
99
 Basic.Settings.Audio="音声"
100
 Basic.Settings.Audio.SampleRate="サンプリングレート"
101
 Basic.Settings.Audio.Channels="チャンネル"
102
@@ -221,3 +259,12 @@
103
 Basic.Settings.Audio.AuxDevice2="マイク音声デバイス 2"
104
 Basic.Settings.Audio.AuxDevice3="マイク音声デバイス 3"
105
 
106
+
107
+Basic.AdvAudio="オーディオの詳細プロパティ"
108
+Basic.AdvAudio.Name="名称"
109
+Basic.AdvAudio.Volume="音量 (%)"
110
+Basic.AdvAudio.Mono="モノラルにダウンミックス"
111
+Basic.AdvAudio.Panning="パンニング"
112
+Basic.AdvAudio.SyncOffset="同期オフセット (ミリ秒)"
113
+Basic.AdvAudio.AudioTracks="トラック"
114
+
115
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/ko-KR.ini Changed
120
 
1
@@ -5,6 +5,8 @@
2
 OK="확인"
3
 Apply="적용"
4
 Cancel="취소"
5
+Save="저장"
6
+Discard="저장 안함"
7
 Yes="예"
8
 No="아니오"
9
 Add="추가"
10
@@ -14,6 +16,7 @@
11
 MoveUp="위로 올리기"
12
 MoveDown="아래로 내리기"
13
 Settings="설정"
14
+Name="이름"
15
 Exit="끝내기"
16
 Mixer="믹서"
17
 Browse="찾아보기"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="유효한 이름을 입력하십시오"
20
 NoNameEntered.Text="이름을 반드시 지정해야 합니다."
21
 
22
+ConfirmExit.Title="OBS를 종료합니까?"
23
+ConfirmExit.Text="OBS가 현재 작동 중입니다. 정말로 종료할까요?"
24
+
25
 ConfirmRemove.Title="제거 확인"
26
 ConfirmRemove.Text="'$1'을 정말로 제거하시겠습니까?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (미지원; 자동 선택: %2)"
30
 Basic.PropertiesWindow.SelectColor="색상 지정"
31
 Basic.PropertiesWindow.SelectFont="글꼴 선택"
32
+Basic.PropertiesWindow.ConfirmTitle="설정이 변경됨"
33
+Basic.PropertiesWindow.Confirm="아직 저장하지 않은 변경 사항이 있습니다. 변경을 유지하겠습니까?"
34
 
35
 Basic.InteractionWindow="'%1' 과 상호 작용"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="아래로 내리기(&D)"
39
 Basic.MainMenu.Edit.Order.MoveToTop="가장 위로 올리기(&T)"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="가장 아래로 내리기(&B)"
41
+Basic.MainMenu.Edit.AdvAudio="오디오 고급 설정(&A)"
42
 
43
 Basic.MainMenu.Help="도움말(&H)"
44
 Basic.MainMenu.Help.Logs="기록 파일(&L)"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="방송 형식"
47
 
48
 Basic.Settings.Output="출력"
49
+Basic.Settings.Output.Encoder="인코더"
50
+Basic.Settings.Output.SelectDirectory="녹화 경로 선택"
51
+Basic.Settings.Output.SelectFile="녹화 파일 선택"
52
 Basic.Settings.Output.Mode="출력 모드"
53
-Basic.Settings.Output.Mode.Simple="간단 (방송 그리고/또는 녹화)"
54
-Basic.Settings.Output.Mode.Advanced="고급 (사용자 정의 출력 형식)"
55
+Basic.Settings.Output.Mode.Simple="단순"
56
+Basic.Settings.Output.Mode.Adv="고급"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg 출력"
58
 Basic.Settings.Output.Simple.SavePath="FLV 녹화 경로"
59
 Basic.Settings.Output.VideoBitrate="비디오 비트레이트"
60
 Basic.Settings.Output.AudioBitrate="오디오 비트레이트"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="재접속 간격 (초 단위)"
63
 Basic.Settings.Output.MaxRetries="최대 재시도 횟수"
64
 Basic.Settings.Output.Advanced="고급 인코더 설정 활성화"
65
-Basic.Settings.Output.X264Preset="x264 사전설정"
66
-Basic.Settings.Output.CustomX264Settings="사용자 임의 x264 설정"
67
+Basic.Settings.Output.EncoderPreset="인코더 사전설정 (높음 = 적은 CPU 부담)"
68
+Basic.Settings.Output.CustomEncoderSettings="사용자 임의 인코더 설정"
69
 Basic.Settings.Output.UseCBR="고정 비트레이트 사용"
70
+Basic.Settings.Output.UseBufferSize="사용자 임의 버퍼  크기 설정"
71
+
72
+Basic.Settings.Output.Adv.Rescale="출력  배율 재조정"
73
+Basic.Settings.Output.Adv.AudioTrack="오디오 트랙"
74
+Basic.Settings.Output.Adv.Streaming="방송"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="방송 서비스 인코더 설정 강제 적용"
76
+Basic.Settings.Output.Adv.Audio.Track1="트랙 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="트랙 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="트랙 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="트랙 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="녹화"
82
+Basic.Settings.Output.Adv.Recording.Type="형식"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="표준"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="임의 출력 (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(스트림 인코더 사용)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="표준 녹화 형식"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="모든 파일"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="파일 경로 또는 URL"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="비디오 인코더 (공백 = 기본값)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="비디오 인코더 설정 (지원되는 경우)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="오디오 인코더 (공백 = 기본값)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="오디오 인코더 설정 (지원되는 경우)"
93
 
94
 Basic.Settings.Video="비디오"
95
 Basic.Settings.Video.Adapter="비디오 어댑터:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="잘못된 값이 입력되었습니다. 반드시 [폭]x[높이]의 형식이어야 합니다. (예 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="비디오가 현재 출력되고 있습니다. 비디오 설정을 변경하려면 관련 작업을 중단해야 합니다."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (가장 빠르지만 크기가 변경 시 영상이 흐려짐 )"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (영상 크기 변경을 좀 더 날카롭게 처리, 16 샘플)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (영상 크기 변경을 좀 더 날카롭게 처리, 32 샘플)"
103
+
104
 Basic.Settings.Audio="오디오"
105
 Basic.Settings.Audio.SampleRate="샘플 레이트"
106
 Basic.Settings.Audio.Channels="채널"
107
@@ -221,3 +261,12 @@
108
 Basic.Settings.Audio.AuxDevice2="마이크/보조 오디오 장치 2"
109
 Basic.Settings.Audio.AuxDevice3="마이크/보조 오디오 장치 3"
110
 
111
+
112
+Basic.AdvAudio="오디오 고급 설정"
113
+Basic.AdvAudio.Name="이름"
114
+Basic.AdvAudio.Volume="볼륨 (%)"
115
+Basic.AdvAudio.Mono="모노로 강제 송출"
116
+Basic.AdvAudio.Panning="패닝"
117
+Basic.AdvAudio.SyncOffset="싱크 오프셋 (ms)"
118
+Basic.AdvAudio.AudioTracks="트랙"
119
+
120
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/nb-NO.ini Changed
127
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Bruk"
4
 Cancel="Avbryt"
5
+Save="Lagre"
6
+Discard="Forkast"
7
 Yes="Ja"
8
 No="Nei"
9
 Add="Legg til"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Flytt opp"
12
 MoveDown="Flytt ned"
13
 Settings="Innstillinger"
14
+Name="Navn"
15
 Exit="Avslutt"
16
 Mixer="Mikser"
17
 Browse="Bla gjennom"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Vennligst oppgi et gyldig navn"
20
 NoNameEntered.Text="Du kan ikke bruke et tomt navn."
21
 
22
+ConfirmExit.Title="Avslutt OBS?"
23
+ConfirmExit.Text="OBS er aktivt, er du sikker på at du vil avslutte?"
24
+
25
 ConfirmRemove.Title="Bekreft Fjerning"
26
 ConfirmRemove.Text="Er du sikker på at du vil fjerne '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (ikke støttet; auto-velg: %2)"
30
 Basic.PropertiesWindow.SelectColor="Velg farge"
31
 Basic.PropertiesWindow.SelectFont="Velg skrifttype"
32
+Basic.PropertiesWindow.ConfirmTitle="Innstillingene er endret"
33
+Basic.PropertiesWindow.Confirm="Det er ulagra endringer. Vil du beholde dem?"
34
 
35
 Basic.InteractionWindow="Kommuniserer med «%1»"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Flytt &ned"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Legg på &toppen"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Legg på &bunnen"
41
+Basic.MainMenu.Edit.AdvAudio="&Avanserte lydinstillinger"
42
 
43
 Basic.MainMenu.Help="&Hjelp"
44
 Basic.MainMenu.Help.Logs="&Loggfiler"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Strømmetype"
47
 
48
 Basic.Settings.Output="Innspilling"
49
+Basic.Settings.Output.Encoder="Koder"
50
+Basic.Settings.Output.SelectDirectory="Velg opptaksmappe"
51
+Basic.Settings.Output.SelectFile="Velg opptaksfil"
52
 Basic.Settings.Output.Mode="Innspillingsmodus"
53
-Basic.Settings.Output.Mode.Simple="Lett (Strøm og/eller ta opp)"
54
-Basic.Settings.Output.Mode.Advanced="Avansert (Tilpasset inspillingstyper)"
55
+Basic.Settings.Output.Mode.Simple="Enkel"
56
+Basic.Settings.Output.Mode.Adv="Avansert"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg produkt"
58
 Basic.Settings.Output.Simple.SavePath="FLV Opptaksbane"
59
 Basic.Settings.Output.VideoBitrate="Bildeoverføringshastighet"
60
 Basic.Settings.Output.AudioBitrate="Lydoverføringshastighet"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="Opphold mellom tilkoblingsforsøk (sekunder)"
63
 Basic.Settings.Output.MaxRetries="Høyst antall tilkoblingsforsøk"
64
 Basic.Settings.Output.Advanced="Aktiver Avanserte Koderinstillinger"
65
-Basic.Settings.Output.X264Preset="x264-forhåndsinnstilling"
66
-Basic.Settings.Output.CustomX264Settings="Egendefinerte x264 innstillinger"
67
+Basic.Settings.Output.EncoderPreset="Koderforhåndsinstilling (raskere gir mindre prosessorbelastning)"
68
+Basic.Settings.Output.CustomEncoderSettings="Egendefinert koderinstilling"
69
 Basic.Settings.Output.UseCBR="Bruk Konstant Bitrate"
70
+Basic.Settings.Output.UseBufferSize="Bruk egendefinert bufferstørrelse"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Reskaler produkt"
73
+Basic.Settings.Output.Adv.AudioTrack="Lydspor"
74
+Basic.Settings.Output.Adv.Streaming="Strømming"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Bruk strømmetjenerens koderinstillinger"
76
+Basic.Settings.Output.Adv.Audio.Track1="Spor 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="Spor 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="Spor 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="Spor 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="Opptak"
82
+Basic.Settings.Output.Adv.Recording.Type="Type"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Egendefinert FFmpeg produkt"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Bruk strømkoder)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Vanlige opptaksformater"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alle filer"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Filbane eller URL"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videokoder (standard hvis uangitt)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videokoderinstillinger (hvis noen)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Lydkoder (standard hvis uangitt)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Lydkoderinstillinger (hvis noen)"
93
 
94
 Basic.Settings.Video="Bilde"
95
 Basic.Settings.Video.Adapter="Bildeadapter:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="Ugyldig oppløsningsverdi. Må være [bredde]x[høyde] (f.eks. 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="Bildeinnspilling er aktiv. Vennligst skru av alle innspillinger for å endre bildeinstillingene"
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineær (raskest, men uskarp ved skalering)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubisk (skjerpet skalering, 16 prøver)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (skjerpet skalering, 32 prøver)"
103
+
104
 Basic.Settings.Audio="Lyd"
105
 Basic.Settings.Audio.SampleRate="Samplingsfrekvens"
106
 Basic.Settings.Audio.Channels="Kanaler"
107
@@ -221,3 +261,19 @@
108
 Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux 2"
109
 Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux 3"
110
 
111
+Basic.Settings.Advanced="Avansert"
112
+Basic.Settings.Advanced.Audio.BufferingTime="Lydbuffertid"
113
+Basic.Settings.Advanced.Video.ColorFormat="Fargeformat"
114
+Basic.Settings.Advanced.Video.ColorSpace="YUV fargerom"
115
+Basic.Settings.Advanced.Video.ColorRange="YUV fargespekter"
116
+Basic.Settings.Advanced.Video.ColorRange.Partial="Delvis"
117
+Basic.Settings.Advanced.Video.ColorRange.Full="Full"
118
+
119
+Basic.AdvAudio="Avanserte lydinstillinger"
120
+Basic.AdvAudio.Name="Navn"
121
+Basic.AdvAudio.Volume="Volum (%)"
122
+Basic.AdvAudio.Mono="Nedmiks til mono"
123
+Basic.AdvAudio.Panning="Panorering"
124
+Basic.AdvAudio.SyncOffset="Synkronerings forskyvning (ms)"
125
+Basic.AdvAudio.AudioTracks="Spor"
126
+
127
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/nl-NL.ini Changed
111
 
1
@@ -14,6 +14,7 @@
2
 MoveUp="Omhoog Schuiven"
3
 MoveDown="Omlaag Schuiven"
4
 Settings="Instellingen"
5
+Name="Naam"
6
 Exit="Afsluiten"
7
 Mixer="Mixer"
8
 Browse="Bladeren"
9
@@ -27,6 +28,9 @@
10
 NoNameEntered.Title="Voer a.u.b. een geldige naam in"
11
 NoNameEntered.Text="Je kunt geen lege namen gebruiken."
12
 
13
+ConfirmExit.Title="OBS Afsluiten?"
14
+ConfirmExit.Text="OBS is momenteel actief. Weet je zeker dat je af wil sluiten?"
15
+
16
 ConfirmRemove.Title="Bevestig het verwijderen"
17
 ConfirmRemove.Text="Weet je zeker dat je '$1' wil verwijderen?"
18
 
19
@@ -90,6 +94,8 @@
20
 Basic.PropertiesWindow.AutoSelectFormat="%1 (niet ondersteund; automatisch geselecteerd: %2)"
21
 Basic.PropertiesWindow.SelectColor="Selecteer kleur"
22
 Basic.PropertiesWindow.SelectFont="Selecteer lettertype"
23
+Basic.PropertiesWindow.ConfirmTitle="Instellingen Aangepast"
24
+Basic.PropertiesWindow.Confirm="Er zijn onopgeslagen aanpassingen. Wil je deze bewaren?"
25
 
26
 Basic.InteractionWindow="Interactie met '%1'"
27
 
28
@@ -163,6 +169,7 @@
29
 Basic.MainMenu.Edit.Order.MoveDown="Omlaag Schuiven (&D)"
30
 Basic.MainMenu.Edit.Order.MoveToTop="Naar Boven Schuiven (&T)"
31
 Basic.MainMenu.Edit.Order.MoveToBottom="Naar Onderen Schuiven (&B)"
32
+Basic.MainMenu.Edit.AdvAudio="Geavanceerde &Audioinstellingen"
33
 
34
 Basic.MainMenu.Help="&Help"
35
 Basic.MainMenu.Help.Logs="&Logbestanden"
36
@@ -182,9 +189,13 @@
37
 Basic.Settings.Stream.StreamType="Stream Type"
38
 
39
 Basic.Settings.Output="Uitvoer"
40
+Basic.Settings.Output.Encoder="Encoder"
41
+Basic.Settings.Output.SelectDirectory="Selecteer Opnamemap"
42
+Basic.Settings.Output.SelectFile="Selecteer Opnamebestand"
43
 Basic.Settings.Output.Mode="Uitvoermodus"
44
-Basic.Settings.Output.Mode.Simple="Eenvoudig (Streamen en/of opnemen)"
45
-Basic.Settings.Output.Mode.Advanced="Geavanceerd (Aangepast uitvoertype)"
46
+Basic.Settings.Output.Mode.Simple="Simpel"
47
+Basic.Settings.Output.Mode.Adv="Geavanceerd"
48
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg-uitvoer"
49
 Basic.Settings.Output.Simple.SavePath="FLV-opname pad"
50
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
51
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
52
@@ -192,9 +203,32 @@
53
 Basic.Settings.Output.RetryDelay="Opnieuw proberen na (seconden)"
54
 Basic.Settings.Output.MaxRetries="Maximaal aantal pogingen"
55
 Basic.Settings.Output.Advanced="Geavanceerde Encoderinsellingen Inschakelen"
56
-Basic.Settings.Output.X264Preset="x264 Preset"
57
-Basic.Settings.Output.CustomX264Settings="Aangepaste x264-instellingen"
58
+Basic.Settings.Output.EncoderPreset="Encoderinstelling (hoger = minder CPU)"
59
+Basic.Settings.Output.CustomEncoderSettings="Aangepaste encoderinstellingen"
60
 Basic.Settings.Output.UseCBR="Gebruik Constante Bitrate"
61
+Basic.Settings.Output.UseBufferSize="Aangepaste buffergrootte gebruiken"
62
+
63
+Basic.Settings.Output.Adv.Rescale="Uitvoer Schalen"
64
+Basic.Settings.Output.Adv.AudioTrack="Geluidsspoor"
65
+Basic.Settings.Output.Adv.Streaming="Streamen"
66
+Basic.Settings.Output.Adv.ApplyServiceSettings="Forceer encoderinstellingen van de streaming dienst"
67
+Basic.Settings.Output.Adv.Audio.Track1="Spoor 1"
68
+Basic.Settings.Output.Adv.Audio.Track2="Spoor 2"
69
+Basic.Settings.Output.Adv.Audio.Track3="Spoor 3"
70
+Basic.Settings.Output.Adv.Audio.Track4="Spoor 4"
71
+
72
+Basic.Settings.Output.Adv.Recording="Opnemen"
73
+Basic.Settings.Output.Adv.Recording.Type="Type"
74
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standaard"
75
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Aangepaste Uitvoer (FFmpeg)"
76
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gebruik stream encoder)"
77
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Gebruikelijke opnameformaten"
78
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alle Bestanden"
79
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Bestandspad of URL"
80
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Encoder (leeg = standaard)"
81
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Encoderinstellingen (indien gewenst)"
82
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder (leeg = standaard)"
83
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoderinstellingen (indien gewenst)"
84
 
85
 Basic.Settings.Video="Video"
86
 Basic.Settings.Video.Adapter="Videoadapter:"
87
@@ -212,6 +246,10 @@
88
 Basic.Settings.Video.InvalidResolution="Ongeldige resolutiewaarde.  Moet [breedte] x [hoogte] zijn (bijv. 1920 x 1080)"
89
 Basic.Settings.Video.CurrentlyActive="Video-uitvoer is momenteel actief. Schakel a.u.b. alle uitvoeren uit om video-instellingen aan te passen."
90
 
91
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Snelste, maar wazig bij schalen)"
92
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Scherper schalen, 16 samples)"
93
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Scherper schalen, 32 samples)"
94
+
95
 Basic.Settings.Audio="Audio"
96
 Basic.Settings.Audio.SampleRate="Sample Rate"
97
 Basic.Settings.Audio.Channels="Kanalen"
98
@@ -221,3 +259,12 @@
99
 Basic.Settings.Audio.AuxDevice2="Mic/Aux Audioapparaat 2"
100
 Basic.Settings.Audio.AuxDevice3="Mic/Aux Audioapparaat 3"
101
 
102
+
103
+Basic.AdvAudio="Geavanceerde Audioinstellingen"
104
+Basic.AdvAudio.Name="Naam"
105
+Basic.AdvAudio.Volume="Volume (%)"
106
+Basic.AdvAudio.Mono="Downmixen naar Mono"
107
+Basic.AdvAudio.Panning="Pannen"
108
+Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
109
+Basic.AdvAudio.AudioTracks="Sporen"
110
+
111
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/pl-PL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/pl-PL.ini Changed
41
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Proszę wprowadzić prawidłową nazwę"
3
 NoNameEntered.Text="Nazwa nie może być pusta."
4
 
5
+
6
 ConfirmRemove.Title="Potwierdź usunięcie"
7
 ConfirmRemove.Text="Czy na pewno chcesz usunąć '$1'?"
8
 
9
@@ -169,15 +170,14 @@
10
 
11
 Basic.Settings.Output="Wyjście"
12
 Basic.Settings.Output.Mode="Tryb wyjścia"
13
-Basic.Settings.Output.Mode.Simple="Prosty (streamowanie i/lub zapis lokalny)"
14
-Basic.Settings.Output.Mode.Advanced="Zaawansowany (niestandardowy typ wyjścia)"
15
 Basic.Settings.Output.Simple.SavePath="Ścieżka pliku FLV z nagraniem"
16
 Basic.Settings.Output.VideoBitrate="Bitrate obrazu"
17
 Basic.Settings.Output.AudioBitrate="Bitrate dźwięku"
18
 Basic.Settings.Output.Reconnect="Ponowne łączenie"
19
 Basic.Settings.Output.RetryDelay="Ponów połączenie (w sekundach)"
20
 Basic.Settings.Output.MaxRetries="Maksymalna liczba ponownych prób"
21
-Basic.Settings.Output.CustomX264Settings="Własne ustawienia x264"
22
+
23
+
24
 
25
 Basic.Settings.Video="Obraz"
26
 Basic.Settings.Video.Adapter="Karta graficzna:"
27
@@ -195,6 +195,7 @@
28
 Basic.Settings.Video.InvalidResolution="Nieprawidłowa rozdzielczość.  Wartość powinna mieć format [szerokość]x[wysokość] (np. 1920x1080)"
29
 Basic.Settings.Video.CurrentlyActive="Wyjście wideo jest aktywne. Należy wyłączyć wszelkie wyjścia, aby zmienić ustawienia wideo."
30
 
31
+
32
 Basic.Settings.Audio="Dźwięk"
33
 Basic.Settings.Audio.SampleRate="Częstotliwość próbkowania"
34
 Basic.Settings.Audio.Channels="Kanały"
35
@@ -204,3 +205,5 @@
36
 Basic.Settings.Audio.AuxDevice2="Mikrofon/dodatkowe urządzenie audio 2"
37
 Basic.Settings.Audio.AuxDevice3="Mikrofon/dodatkowe urządzenie audio 3"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/pt-BR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/pt-BR.ini Changed
41
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Por favor digite um nome válido"
3
 NoNameEntered.Text="Você não pode usar nomes vazios."
4
 
5
+
6
 ConfirmRemove.Title="Confirmar a Remoção"
7
 ConfirmRemove.Text="Tem certeza que deseja remover '$1'?"
8
 
9
@@ -168,15 +169,14 @@
10
 
11
 Basic.Settings.Output="Saída"
12
 Basic.Settings.Output.Mode="Modo de Saída"
13
-Basic.Settings.Output.Mode.Simple="Simples (Stream e/ou gravação)"
14
-Basic.Settings.Output.Mode.Advanced="Avançado (Definições manuais)"
15
 Basic.Settings.Output.Simple.SavePath="Caminho de Gravação FLV"
16
 Basic.Settings.Output.VideoBitrate="Taxa de Bits do Vídeo"
17
 Basic.Settings.Output.AudioBitrate="Taxa de Bits do Áudio"
18
 Basic.Settings.Output.Reconnect="Reconectar automaticamente"
19
 Basic.Settings.Output.RetryDelay="Espera para reconectar-se (segundos)"
20
 Basic.Settings.Output.MaxRetries="Número Máximo de Tentativas"
21
-Basic.Settings.Output.CustomX264Settings="Configurações personalizadas do x264"
22
+
23
+
24
 
25
 Basic.Settings.Video="Vídeo"
26
 Basic.Settings.Video.Adapter="Adaptador de Vídeo:"
27
@@ -194,6 +194,7 @@
28
 Basic.Settings.Video.InvalidResolution="Resolução Inválida, Obrigatório ser [largura]x[altura] (ex. 1920x1080)"
29
 Basic.Settings.Video.CurrentlyActive="Saída de vídeo está atualmente ativa.  Por favor desligue quaisquer saídas para alterar as configurações de vídeo."
30
 
31
+
32
 Basic.Settings.Audio="Áudio"
33
 Basic.Settings.Audio.SampleRate="Taxa de Amostragem"
34
 Basic.Settings.Audio.Channels="Canais"
35
@@ -203,3 +204,5 @@
36
 Basic.Settings.Audio.AuxDevice2="Dispositivo de áudio/microfone auxiliar 2"
37
 Basic.Settings.Audio.AuxDevice3="Dispositivo de áudio/microfone auxiliar 3"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/pt-PT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/pt-PT.ini Changed
41
 
1
@@ -25,6 +25,7 @@
2
 NameExists.Text="O nome já encontra-se em utilização."
3
 
4
 
5
+
6
 ConfirmRemove.Title="Comfirmar Remover"
7
 ConfirmRemove.Text="Tem a certeza que quer remover '$1'?"
8
 
9
@@ -163,8 +164,6 @@
10
 
11
 Basic.Settings.Output="Saída Output"
12
 Basic.Settings.Output.Mode="Modo de Saída"
13
-Basic.Settings.Output.Mode.Simple="Simples (Stream e/ou gravação)"
14
-Basic.Settings.Output.Mode.Advanced="Avançado (Definições manuais)"
15
 Basic.Settings.Output.Simple.SavePath="Caminho de Gravação FLV"
16
 Basic.Settings.Output.VideoBitrate="Bitrate de Vídeo"
17
 Basic.Settings.Output.AudioBitrate="Bitrate de Áudio"
18
@@ -172,6 +171,8 @@
19
 Basic.Settings.Output.RetryDelay="Atraso de Tentatica de Religação (segundos)"
20
 Basic.Settings.Output.MaxRetries="Número Máximo de Tentativas de Religação"
21
 
22
+
23
+
24
 Basic.Settings.Video="Vídeo"
25
 Basic.Settings.Video.Adapter="Adaptador de Vídeo:"
26
 Basic.Settings.Video.BaseResolution="Resolução de Captura:"
27
@@ -188,6 +189,7 @@
28
 Basic.Settings.Video.InvalidResolution="Resolução Inválida, Tem de ser [largura]x[altura] (ex. 1920x1080)"
29
 Basic.Settings.Video.CurrentlyActive="A Saída de Vídeo encontra-se activa. Por favor desligue a saída de vídeo para mudar as definições de vídeo."
30
 
31
+
32
 Basic.Settings.Audio="Áudio"
33
 Basic.Settings.Audio.SampleRate="Frequência de Samplagem"
34
 Basic.Settings.Audio.Channels="Canias"
35
@@ -197,3 +199,5 @@
36
 Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio Device 2"
37
 Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio Device 3"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/ro-RO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/ro-RO.ini Changed
71
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Va rugăm introduceţi un nume valid"
3
 NoNameEntered.Text="Nu puteți utiliza un nume gol."
4
 
5
+
6
 ConfirmRemove.Title="Confirmă Ştergere"
7
 ConfirmRemove.Text="Sigur eliminaţi '$1'?"
8
 
9
@@ -90,6 +91,8 @@
10
 Basic.PropertiesWindow.AutoSelectFormat="%1 (neacceptat; Selectare automată: %2)"
11
 Basic.PropertiesWindow.SelectColor="Selectaţi culoarea"
12
 Basic.PropertiesWindow.SelectFont="Selectează Fontul"
13
+Basic.PropertiesWindow.ConfirmTitle="Setări Schimbate"
14
+Basic.PropertiesWindow.Confirm="Există modificări nesalvate.  Vrei să le păstrezi?"
15
 
16
 Basic.InteractionWindow="Interacționează cu '%1'"
17
 
18
@@ -163,6 +166,7 @@
19
 Basic.MainMenu.Edit.Order.MoveDown="Mută &Jos"
20
 Basic.MainMenu.Edit.Order.MoveToTop="Mută &Prima"
21
 Basic.MainMenu.Edit.Order.MoveToBottom="Mută &Ultima"
22
+Basic.MainMenu.Edit.AdvAudio="&Proprietăţi Audio Avansate"
23
 
24
 Basic.MainMenu.Help="&Ajutor"
25
 Basic.MainMenu.Help.Logs="&Fişierele jurnal"
26
@@ -183,8 +187,6 @@
27
 
28
 Basic.Settings.Output="Ieşire"
29
 Basic.Settings.Output.Mode="Modul de ieşire"
30
-Basic.Settings.Output.Mode.Simple="Simplu (Stream si/sau înregistrare)"
31
-Basic.Settings.Output.Mode.Advanced="Avansat (tip de ieşire personalizat)"
32
 Basic.Settings.Output.Simple.SavePath="Calea de înregistrare FLV"
33
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
34
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
35
@@ -192,10 +194,10 @@
36
 Basic.Settings.Output.RetryDelay="Intârziere reincercare (secunde)"
37
 Basic.Settings.Output.MaxRetries="Maxim de reîncercări"
38
 Basic.Settings.Output.Advanced="Activează Setări Codare Avansate"
39
-Basic.Settings.Output.X264Preset="Presetul x264"
40
-Basic.Settings.Output.CustomX264Settings="Setări x264 Personalizate"
41
 Basic.Settings.Output.UseCBR="Utilizează Bitrate Constant"
42
 
43
+
44
+
45
 Basic.Settings.Video="Video"
46
 Basic.Settings.Video.Adapter="Adaptor video:"
47
 Basic.Settings.Video.BaseResolution="Rezoluţia de bază:"
48
@@ -212,6 +214,10 @@
49
 Basic.Settings.Video.InvalidResolution="Valoare rezoluţie invalidă.  Trebuie să fie [latime]x[înălţime] (de exemplu, 1920x1080)"
50
 Basic.Settings.Video.CurrentlyActive="Ieşirea video este în prezent activă.  Vă rugăm să opriţi orice ieşiri pentru a schimba setările video."
51
 
52
+Basic.Settings.Video.DownscaleFilter.Bilinear="Biliniar (mai rapid, dar neclar la scalare)"
53
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Scalare ascutita, 16 mostre)"
54
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Scalare ascutita, 32 de mostre)"
55
+
56
 Basic.Settings.Audio="Audio"
57
 Basic.Settings.Audio.SampleRate="Rata de eşantionare"
58
 Basic.Settings.Audio.Channels="Canale"
59
@@ -221,3 +227,11 @@
60
 Basic.Settings.Audio.AuxDevice2="Dispozitiv Audio microfon/auxiliar 2"
61
 Basic.Settings.Audio.AuxDevice3="Dispozitiv Audio microfon/auxiliar 3"
62
 
63
+
64
+Basic.AdvAudio="Proprietăţi Audio Avansate"
65
+Basic.AdvAudio.Name="Nume"
66
+Basic.AdvAudio.Volume="Volum (%)"
67
+Basic.AdvAudio.Mono="Transformă in Mono"
68
+Basic.AdvAudio.Panning="Panning"
69
+Basic.AdvAudio.SyncOffset="Compensare Sincronizare (ms)"
70
+
71
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/ru-RU.ini Changed
127
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Применить"
4
 Cancel="Отмена"
5
+Save="Сохранить"
6
+Discard="Отклонить"
7
 Yes="Да"
8
 No="Нет"
9
 Add="Добавить"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Выше"
12
 MoveDown="Ниже"
13
 Settings="Настройки"
14
+Name="Название"
15
 Exit="Выход"
16
 Mixer="Микшер"
17
 Browse="Обзор"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Пожалуйста, укажите действительное имя"
20
 NoNameEntered.Text="Вы не можете использовать пустые имена."
21
 
22
+ConfirmExit.Title="Выйти из OBS?"
23
+ConfirmExit.Text="OBS сейчас активен. Вы уверены, что хотите выйти?"
24
+
25
 ConfirmRemove.Title="Подтвердить удаление"
26
 ConfirmRemove.Text="Вы уверены, что хотите удалить '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (неподдерживаемый; Автовыбор: %2)"
30
 Basic.PropertiesWindow.SelectColor="Выбрать цвет"
31
 Basic.PropertiesWindow.SelectFont="Выбрать шрифт"
32
+Basic.PropertiesWindow.ConfirmTitle="Настройки изменены"
33
+Basic.PropertiesWindow.Confirm="Имеются несохранённые изменения. Желаете сохранить их?"
34
 
35
 Basic.InteractionWindow="Взаимодействие с '%1'"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Переместить &Ниже"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Переместить &Наверх"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Переместить &Вниз"
41
+Basic.MainMenu.Edit.AdvAudio="&Расширенные свойства аудио"
42
 
43
 Basic.MainMenu.Help="&Справка"
44
 Basic.MainMenu.Help.Logs="&Log файлы"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Тип вещания"
47
 
48
 Basic.Settings.Output="Вывод"
49
+Basic.Settings.Output.Encoder="Кодировщик"
50
+Basic.Settings.Output.SelectDirectory="Выбрать каталог записи"
51
+Basic.Settings.Output.SelectFile="Выбрать файл записи"
52
 Basic.Settings.Output.Mode="Режим вывода"
53
-Basic.Settings.Output.Mode.Simple="Простой (Прямая трансляция и/или запись)"
54
-Basic.Settings.Output.Mode.Advanced="Расширенный (Настраиваемый тип вывода)"
55
+Basic.Settings.Output.Mode.Simple="Простой"
56
+Basic.Settings.Output.Mode.Adv="Расширенные"
57
+Basic.Settings.Output.Mode.FFmpeg="Вывод FFmpeg"
58
 Basic.Settings.Output.Simple.SavePath="Путь для записи FLV"
59
 Basic.Settings.Output.VideoBitrate="Битрейт видео"
60
 Basic.Settings.Output.AudioBitrate="Битрейт аудио"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="Задержка между повторными попытками (с)"
63
 Basic.Settings.Output.MaxRetries="Максимальное количество повторов"
64
 Basic.Settings.Output.Advanced="Включить дополнительные настройки кодировщика"
65
-Basic.Settings.Output.X264Preset="Пресет x264"
66
-Basic.Settings.Output.CustomX264Settings="Пользовательские настройки x264"
67
+Basic.Settings.Output.EncoderPreset="Предустановки кодировщика (выше = меньше ЦП)"
68
+Basic.Settings.Output.CustomEncoderSettings="Пользовательские настройки кодировщика"
69
 Basic.Settings.Output.UseCBR="Использовать постоянный битрейт"
70
+Basic.Settings.Output.UseBufferSize="Использовать пользовательский размер буфера"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Перемасштабировать вывод"
73
+Basic.Settings.Output.Adv.AudioTrack="Звуковая дорожка"
74
+Basic.Settings.Output.Adv.Streaming="Потоковое вещание"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Принудительно использовать настройки кодировщика потоковой службы"
76
+Basic.Settings.Output.Adv.Audio.Track1="Дорожка 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="Дорожка 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="Дорожка 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="Дорожка 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="Запись"
82
+Basic.Settings.Output.Adv.Recording.Type="Тип"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Обычный"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Пользовательский вывод (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Использовать кодировщик потока)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Общие форматы записи"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Все файлы"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Путь к файлу или URL-адрес"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Кодировщик видео (пусто = по умолчанию)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Настройки кодировщика видео (если есть)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Кодировщик аудио (пусто = по умолчанию)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Настройки кодировщика аудио (если есть)"
93
 
94
 Basic.Settings.Video="Видео"
95
 Basic.Settings.Video.Adapter="Видеоадаптер:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="Неверное разрешение.  Должно быть [Ширина]x[Высота] (т.е. 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="Видео выход в данный момент активен. Пожалуйста, отключите все выходы, чтобы изменить настройки видео."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Билинейный (Быстрый, но размытый при масштабировании)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Бикубический (Чёткое масштабирование, 16 значений)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Метод Ланцоша (Чёткое масштабирование, 32 значения)"
103
+
104
 Basic.Settings.Audio="Аудио"
105
 Basic.Settings.Audio.SampleRate="Частота дискретизации"
106
 Basic.Settings.Audio.Channels="Каналы"
107
@@ -221,3 +261,19 @@
108
 Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Аудиоустройство 2"
109
 Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Аудиоустройство 3"
110
 
111
+Basic.Settings.Advanced="Расширенные"
112
+Basic.Settings.Advanced.Audio.BufferingTime="Время буферизации аудио"
113
+Basic.Settings.Advanced.Video.ColorFormat="Цветовой формат"
114
+Basic.Settings.Advanced.Video.ColorSpace="Цветовое пространство YUV"
115
+Basic.Settings.Advanced.Video.ColorRange="Цветовой диапазон YUV"
116
+Basic.Settings.Advanced.Video.ColorRange.Partial="Частичный"
117
+Basic.Settings.Advanced.Video.ColorRange.Full="Полный"
118
+
119
+Basic.AdvAudio="Расширенные свойства аудио"
120
+Basic.AdvAudio.Name="Название"
121
+Basic.AdvAudio.Volume="Громкость (%)"
122
+Basic.AdvAudio.Mono="Объединение в один канал"
123
+Basic.AdvAudio.Panning="Панорамирование"
124
+Basic.AdvAudio.SyncOffset="Смещение синхронизации (мс)"
125
+Basic.AdvAudio.AudioTracks="Дорожки"
126
+
127
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/sk-SK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/sk-SK.ini Changed
41
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Prosím, zadajte platný názov"
3
 NoNameEntered.Text="Nemôžete použiť prázdne názvy."
4
 
5
+
6
 ConfirmRemove.Title="Potvrdenie odobratia"
7
 ConfirmRemove.Text="Naozaj si prajete odobrať '$1'?"
8
 
9
@@ -160,8 +161,6 @@
10
 
11
 Basic.Settings.Output="Výstup"
12
 Basic.Settings.Output.Mode="Režim výstupu"
13
-Basic.Settings.Output.Mode.Simple="Jednoduchý (Stream a/alebo nahrávanie)"
14
-Basic.Settings.Output.Mode.Advanced="Pokročilý (Vlastný typ výstupu)"
15
 Basic.Settings.Output.Simple.SavePath="Cesta k FLV nahrávkam"
16
 Basic.Settings.Output.VideoBitrate="Bitrate videa"
17
 Basic.Settings.Output.AudioBitrate="Bitrate zvuku"
18
@@ -169,9 +168,10 @@
19
 Basic.Settings.Output.RetryDelay="Čas medzi pokusmi (sekundy)"
20
 Basic.Settings.Output.MaxRetries="Maximálny počet pokusov"
21
 Basic.Settings.Output.Advanced="Povoliť pokročilé nastavenia enkodéra"
22
-Basic.Settings.Output.CustomX264Settings="Vlastné x264 nastavenia"
23
 Basic.Settings.Output.UseCBR="Použiť konštantný bitrate"
24
 
25
+
26
+
27
 Basic.Settings.Video="Video"
28
 Basic.Settings.Video.Adapter="Video adaptér:"
29
 Basic.Settings.Video.BaseResolution="Základné rozlíšenie:"
30
@@ -186,7 +186,10 @@
31
 Basic.Settings.Video.InvalidResolution="Neplatné rozlíšenie. Správne je [šírka]x[výška] (napr. 1920x1080)"
32
 Basic.Settings.Video.CurrentlyActive="Výstup videa je práve aktívny. Prosím, vypnite všetky výstupy na zmenu nastavení videa."
33
 
34
+
35
 Basic.Settings.Audio="Zvuk"
36
 Basic.Settings.Audio.SampleRate="Vzorkovacia frekvencia"
37
 Basic.Settings.Audio.Channels="Kanály"
38
 
39
+
40
+
41
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/sl-SI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/sl-SI.ini Changed
45
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Prosim vnesite veljavno ime"
3
 NoNameEntered.Text="Praznega imena ne morete uporabiti."
4
 
5
+
6
 ConfirmRemove.Title="Potrdite odstranitev"
7
 ConfirmRemove.Text="Ali ste prepričani, da želite odstraniti '$ 1'?"
8
 
9
@@ -169,8 +170,6 @@
10
 
11
 Basic.Settings.Output="Izhodišče"
12
 Basic.Settings.Output.Mode="Vrsta izhodišča"
13
-Basic.Settings.Output.Mode.Simple="Enostavno (Oddajanje in/ali Snemanje)"
14
-Basic.Settings.Output.Mode.Advanced="Napredno (vrsta izhoda po želji)"
15
 Basic.Settings.Output.Simple.SavePath="FLV pot snemanja"
16
 Basic.Settings.Output.VideoBitrate="Bitrate Videa"
17
 Basic.Settings.Output.AudioBitrate="Bitrate zvoka"
18
@@ -178,10 +177,10 @@
19
 Basic.Settings.Output.RetryDelay="Premor med ponovnim poskusom (sekund)"
20
 Basic.Settings.Output.MaxRetries="Število ponovnih poskusov"
21
 Basic.Settings.Output.Advanced="Omogoči napredne nastavitve kodiranja"
22
-Basic.Settings.Output.X264Preset="x264 prednastavitev"
23
-Basic.Settings.Output.CustomX264Settings="Nastavitve po meri x264"
24
 Basic.Settings.Output.UseCBR="Uporabi konstantni Bitrate"
25
 
26
+
27
+
28
 Basic.Settings.Video="Video"
29
 Basic.Settings.Video.Adapter="Grafična kartica:"
30
 Basic.Settings.Video.BaseResolution="Osnovna ločljivost:"
31
@@ -198,6 +197,7 @@
32
 Basic.Settings.Video.InvalidResolution="Neveljavna vrednost ločljivost. Biti mora [širina] x [višina] (npr. 1920x1080)"
33
 Basic.Settings.Video.CurrentlyActive="Video izhod je trenutno aktiven. Prosimo, izklopite kakšen koli izhod za spreminjanje nastavitev."
34
 
35
+
36
 Basic.Settings.Audio="Zvok"
37
 Basic.Settings.Audio.SampleRate="Sample Rate"
38
 Basic.Settings.Audio.Channels="Kanali"
39
@@ -207,3 +207,5 @@
40
 Basic.Settings.Audio.AuxDevice2="Mic / Dodatne Zvočne Naprave 2"
41
 Basic.Settings.Audio.AuxDevice3="Mic / Dodatne Zvočne Naprave 3"
42
 
43
+
44
+
45
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/sr-CS.ini Changed
110
 
1
@@ -14,6 +14,7 @@
2
 MoveUp="Pomeri gore"
3
 MoveDown="Pomeri dole"
4
 Settings="Podešavanja"
5
+Name="Ime"
6
 Exit="Izlaz"
7
 Mixer="Mikseta"
8
 Browse="Pretraži"
9
@@ -27,6 +28,9 @@
10
 NoNameEntered.Title="Molim unesite ispravno ime"
11
 NoNameEntered.Text="Ne možete izostaviti ime."
12
 
13
+ConfirmExit.Title="Napustiti OBS?"
14
+ConfirmExit.Text="OBS je trenutno aktivan. Da li ste sigurni da želite izaći?"
15
+
16
 ConfirmRemove.Title="Potvrdi izbacivanje"
17
 ConfirmRemove.Text="Da li ste sigurni da želite izbaciti '$1'?"
18
 
19
@@ -90,6 +94,8 @@
20
 Basic.PropertiesWindow.AutoSelectFormat="%1 (nije podržano; automatski odabrano: %2)"
21
 Basic.PropertiesWindow.SelectColor="Izaberi boju"
22
 Basic.PropertiesWindow.SelectFont="Izaberi font"
23
+Basic.PropertiesWindow.ConfirmTitle="Podešavanja promenjena"
24
+Basic.PropertiesWindow.Confirm="Postoje podešavanja koja nisu sačuvana. Da li želite da ih sačuvate?"
25
 
26
 Basic.InteractionWindow="Interakcija sa '%1'"
27
 
28
@@ -163,6 +169,7 @@
29
 Basic.MainMenu.Edit.Order.MoveDown="Pomeri &dole"
30
 Basic.MainMenu.Edit.Order.MoveToTop="Pomeri na vrh (&T)"
31
 Basic.MainMenu.Edit.Order.MoveToBottom="Pomeri na dno (&B)"
32
+Basic.MainMenu.Edit.AdvAudio="N&apredna podešavanja zvuka"
33
 
34
 Basic.MainMenu.Help="Pomoć (&H)"
35
 Basic.MainMenu.Help.Logs="&Log datoteke"
36
@@ -182,9 +189,13 @@
37
 Basic.Settings.Stream.StreamType="Vrsta strima"
38
 
39
 Basic.Settings.Output="Izlaz"
40
+Basic.Settings.Output.Encoder="Enkoder"
41
+Basic.Settings.Output.SelectDirectory="Odaberi direktorijum za snimanje"
42
+Basic.Settings.Output.SelectFile="Odaberi datoteku za snimanje"
43
 Basic.Settings.Output.Mode="Režim izlaza"
44
-Basic.Settings.Output.Mode.Simple="Jednostavno (stream i/ili snimanje)"
45
-Basic.Settings.Output.Mode.Advanced="Napredno (specifičan tip izlaza)"
46
+Basic.Settings.Output.Mode.Simple="Jednostavno"
47
+Basic.Settings.Output.Mode.Adv="Napredno"
48
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg izlaz"
49
 Basic.Settings.Output.Simple.SavePath="Putanja snimka za FLV"
50
 Basic.Settings.Output.VideoBitrate="Protok videa"
51
 Basic.Settings.Output.AudioBitrate="Protok zvuka"
52
@@ -192,9 +203,31 @@
53
 Basic.Settings.Output.RetryDelay="Pauza pre ponovnog pokušaja (sekunde)"
54
 Basic.Settings.Output.MaxRetries="Maksimalan broj ponovnih pokušaja"
55
 Basic.Settings.Output.Advanced="Omogući napredna podešavanja kompresora"
56
-Basic.Settings.Output.X264Preset="x264 šablon"
57
-Basic.Settings.Output.CustomX264Settings="Specifična x264 podešavanja"
58
+Basic.Settings.Output.EncoderPreset="Šablon enkodera (veće = manje CPU)"
59
+Basic.Settings.Output.CustomEncoderSettings="Prilagođena enkoder podešavanja"
60
 Basic.Settings.Output.UseCBR="Koristi konstantan protok"
61
+Basic.Settings.Output.UseBufferSize="Koristi specifičnu veličinu bafera"
62
+
63
+Basic.Settings.Output.Adv.Rescale="Skaliraj izlaz"
64
+Basic.Settings.Output.Adv.AudioTrack="Zvučni izvor"
65
+Basic.Settings.Output.Adv.Streaming="Strimovanje"
66
+Basic.Settings.Output.Adv.Audio.Track1="Izvor 1"
67
+Basic.Settings.Output.Adv.Audio.Track2="Izvor 2"
68
+Basic.Settings.Output.Adv.Audio.Track3="Izvor 3"
69
+Basic.Settings.Output.Adv.Audio.Track4="Izvor 4"
70
+
71
+Basic.Settings.Output.Adv.Recording="Snimanje"
72
+Basic.Settings.Output.Adv.Recording.Type="Vrsta"
73
+Basic.Settings.Output.Adv.Recording.Type.Standard="Uobičajeni"
74
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Prilagođeni izlaz (FFmpeg)"
75
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Koristi strim enkoder)"
76
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Uobičajeni formati snimaka"
77
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Sve datoteke"
78
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Putanja datoteke ili URL"
79
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video enkoder (prazno=podrazumevani)"
80
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Podešavanja video enkodera (ako postoje)"
81
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Zvučni enkoder (prazno=podrazumevani)"
82
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Podešavanja zvučnog enkodera (ako postoje)"
83
 
84
 Basic.Settings.Video="Video"
85
 Basic.Settings.Video.Adapter="Video adapter:"
86
@@ -212,6 +245,10 @@
87
 Basic.Settings.Video.InvalidResolution="Neispravna vrednost rezolucije. Mora biti [width]x[height] (npr. 1920x1080)"
88
 Basic.Settings.Video.CurrentlyActive="Video izlaz je trenutno aktivan. Molim isključite sve izlaze da promenite video podešavanja."
89
 
90
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (najbrže, ali mutno pri skaliranju)"
91
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (oštrije skaliranje, 16 uzoraka)"
92
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (oštrije skaliranje, 32 uzorka)"
93
+
94
 Basic.Settings.Audio="Zvuk"
95
 Basic.Settings.Audio.SampleRate="Protok"
96
 Basic.Settings.Audio.Channels="Kanali"
97
@@ -221,3 +258,12 @@
98
 Basic.Settings.Audio.AuxDevice2="Mikrofon/Ulaz 2"
99
 Basic.Settings.Audio.AuxDevice3="Mikrofon/Ulaz 3"
100
 
101
+
102
+Basic.AdvAudio="Napredna podešavanja zvuka"
103
+Basic.AdvAudio.Name="Ime"
104
+Basic.AdvAudio.Volume="Glasnoća (%)"
105
+Basic.AdvAudio.Mono="Spoji u mono"
106
+Basic.AdvAudio.Panning="Pomeranje"
107
+Basic.AdvAudio.SyncOffset="Razlika u sinhronizaciji (ms)"
108
+Basic.AdvAudio.AudioTracks="Izvori"
109
+
110
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/sr-SP.ini Changed
110
 
1
@@ -14,6 +14,7 @@
2
 MoveUp="Помери горе"
3
 MoveDown="Помери доле"
4
 Settings="Подешавања"
5
+Name="Име"
6
 Exit="Излаз"
7
 Mixer="Миксета"
8
 Browse="Претражи"
9
@@ -27,6 +28,9 @@
10
 NoNameEntered.Title="Молим унесите исправно име"
11
 NoNameEntered.Text="Не можете изоставити име."
12
 
13
+ConfirmExit.Title="Напустити OBS?"
14
+ConfirmExit.Text="OBS је тренутно активан. Да ли сте сигурни да желите изаћи?"
15
+
16
 ConfirmRemove.Title="Потврди избацивање"
17
 ConfirmRemove.Text="Да ли сте сигурни да желите избацити '$1'?"
18
 
19
@@ -90,6 +94,8 @@
20
 Basic.PropertiesWindow.AutoSelectFormat="%1 (није подржано; аутоматски одабрано: %2)"
21
 Basic.PropertiesWindow.SelectColor="Изабери боју"
22
 Basic.PropertiesWindow.SelectFont="Изабери фонт"
23
+Basic.PropertiesWindow.ConfirmTitle="Подешавања промењена"
24
+Basic.PropertiesWindow.Confirm="Постоје подешавања која нису сачувана. Да ли желите да их сачувате?"
25
 
26
 Basic.InteractionWindow="Интеракција са '%1'"
27
 
28
@@ -163,6 +169,7 @@
29
 Basic.MainMenu.Edit.Order.MoveDown="Помери доле (&D)"
30
 Basic.MainMenu.Edit.Order.MoveToTop="Помери на врх (&T)"
31
 Basic.MainMenu.Edit.Order.MoveToBottom="Помери на дно (&B)"
32
+Basic.MainMenu.Edit.AdvAudio="Н&апредна подешавања звука"
33
 
34
 Basic.MainMenu.Help="Помоћ (&H)"
35
 Basic.MainMenu.Help.Logs="Лог датотеке (&L)"
36
@@ -182,9 +189,13 @@
37
 Basic.Settings.Stream.StreamType="Врста стрима"
38
 
39
 Basic.Settings.Output="Излаз"
40
+Basic.Settings.Output.Encoder="Енкодер"
41
+Basic.Settings.Output.SelectDirectory="Одабери директоријум за снимање"
42
+Basic.Settings.Output.SelectFile="Одабери датотеку за снимање"
43
 Basic.Settings.Output.Mode="Режим излаза"
44
-Basic.Settings.Output.Mode.Simple="Једноставно (стрим и/или снимање)"
45
-Basic.Settings.Output.Mode.Advanced="Напредно (специфичан тип излаза)"
46
+Basic.Settings.Output.Mode.Simple="Једноставно"
47
+Basic.Settings.Output.Mode.Adv="Напредно"
48
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg излаз"
49
 Basic.Settings.Output.Simple.SavePath="Путања снимка за FLV"
50
 Basic.Settings.Output.VideoBitrate="Проток видеа"
51
 Basic.Settings.Output.AudioBitrate="Проток звука"
52
@@ -192,9 +203,31 @@
53
 Basic.Settings.Output.RetryDelay="Пауза пре поновног покушаја (секунде)"
54
 Basic.Settings.Output.MaxRetries="Максималан број поновних покушаја"
55
 Basic.Settings.Output.Advanced="Омогући напредна подешавања компресора"
56
-Basic.Settings.Output.X264Preset="x264 шаблон"
57
-Basic.Settings.Output.CustomX264Settings="Специфична x264 подешавања"
58
+Basic.Settings.Output.EncoderPreset="Шаблон енкодера (веће = мање CPU-а)"
59
+Basic.Settings.Output.CustomEncoderSettings="Прилагођена енкодер подешавања"
60
 Basic.Settings.Output.UseCBR="Користи константан проток"
61
+Basic.Settings.Output.UseBufferSize="Користи специфичну величину бафера"
62
+
63
+Basic.Settings.Output.Adv.Rescale="Скалирај излаз"
64
+Basic.Settings.Output.Adv.AudioTrack="Звучни извор"
65
+Basic.Settings.Output.Adv.Streaming="Стримовање"
66
+Basic.Settings.Output.Adv.Audio.Track1="Извор 1"
67
+Basic.Settings.Output.Adv.Audio.Track2="Извор 2"
68
+Basic.Settings.Output.Adv.Audio.Track3="Извор 3"
69
+Basic.Settings.Output.Adv.Audio.Track4="Извор 4"
70
+
71
+Basic.Settings.Output.Adv.Recording="Снимање"
72
+Basic.Settings.Output.Adv.Recording.Type="Врста"
73
+Basic.Settings.Output.Adv.Recording.Type.Standard="Уобичајени"
74
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Прилагођени излаз (FFmpeg)"
75
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Користи стрим енкодер)"
76
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Уобичајени формати снимака"
77
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Све датотеке"
78
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Путања датотеке или URL"
79
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Видео енкодер (празно=подразумевани)"
80
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Подешавања видео енкодера (ако постоје)"
81
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Звучни енкодер (празно=подразумевани)"
82
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Подешавања звучног енкодера (ако постоје)"
83
 
84
 Basic.Settings.Video="Видео"
85
 Basic.Settings.Video.Adapter="Видео адаптер:"
86
@@ -212,6 +245,10 @@
87
 Basic.Settings.Video.InvalidResolution="Неисправна вредност резолуције. Мора бити [width]x[height] (нпр. 1920x1080)"
88
 Basic.Settings.Video.CurrentlyActive="Видео излаз је тренутно активан. Молим искључите све излазе да промените видео подешавања."
89
 
90
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (најбрже, али мутно при скалирању)"
91
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (оштрије скалирање, 16 узорака)"
92
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (оштрије скалирање, 32 узорка)"
93
+
94
 Basic.Settings.Audio="Звук"
95
 Basic.Settings.Audio.SampleRate="Проток"
96
 Basic.Settings.Audio.Channels="Канали"
97
@@ -221,3 +258,12 @@
98
 Basic.Settings.Audio.AuxDevice2="Микрофон/Улаз 2"
99
 Basic.Settings.Audio.AuxDevice3="Микрофон/Улаз 3"
100
 
101
+
102
+Basic.AdvAudio="Напредна подешавања звука"
103
+Basic.AdvAudio.Name="Име"
104
+Basic.AdvAudio.Volume="Гласноћа (%)"
105
+Basic.AdvAudio.Mono="Споји у моно"
106
+Basic.AdvAudio.Panning="Померање"
107
+Basic.AdvAudio.SyncOffset="Разлика у синхронизацији (ms)"
108
+Basic.AdvAudio.AudioTracks="Извори"
109
+
110
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/sv-SE.ini Changed
120
 
1
@@ -5,6 +5,8 @@
2
 OK="OK"
3
 Apply="Bekräfta"
4
 Cancel="Avbryt"
5
+Save="Spara"
6
+Discard="Radera"
7
 Yes="Ja"
8
 No="Nej"
9
 Add="Lägg till"
10
@@ -14,6 +16,7 @@
11
 MoveUp="Flytta upp"
12
 MoveDown="Flytta ned"
13
 Settings="Inställningar"
14
+Name="Namn"
15
 Exit="Avsluta"
16
 Mixer="Mixer"
17
 Browse="Bläddra"
18
@@ -27,6 +30,9 @@
19
 NoNameEntered.Title="Vänligen ange ett giltigt namn"
20
 NoNameEntered.Text="Du måste ange ett namn."
21
 
22
+ConfirmExit.Title="Avsluta OBS?"
23
+ConfirmExit.Text="OBS är aktivt just nu.  Är du säker på att du vill avsluta?"
24
+
25
 ConfirmRemove.Title="Bekräfta borttagning"
26
 ConfirmRemove.Text="Vill du verkligen ta bort '$1'?"
27
 
28
@@ -90,6 +96,8 @@
29
 Basic.PropertiesWindow.AutoSelectFormat="%1 (stöds inte, Välj automatiskt: %2)"
30
 Basic.PropertiesWindow.SelectColor="Välj färg"
31
 Basic.PropertiesWindow.SelectFont="Välj typsnitt"
32
+Basic.PropertiesWindow.ConfirmTitle="Inställningarna har ändrats"
33
+Basic.PropertiesWindow.Confirm="Det finns osparade ändringar.  Vill du behålla dem?"
34
 
35
 Basic.InteractionWindow="Interagerar med '%1'"
36
 
37
@@ -163,6 +171,7 @@
38
 Basic.MainMenu.Edit.Order.MoveDown="Flytta &ned"
39
 Basic.MainMenu.Edit.Order.MoveToTop="Lägg &överst"
40
 Basic.MainMenu.Edit.Order.MoveToBottom="Lägg unders&t"
41
+Basic.MainMenu.Edit.AdvAudio="&Avancerade ljudinställningar"
42
 
43
 Basic.MainMenu.Help="&Hjälp"
44
 Basic.MainMenu.Help.Logs="&Loggfiler"
45
@@ -182,9 +191,13 @@
46
 Basic.Settings.Stream.StreamType="Streamtyp"
47
 
48
 Basic.Settings.Output="Utmatning"
49
+Basic.Settings.Output.Encoder="Kodare"
50
+Basic.Settings.Output.SelectDirectory="Välj inspelningsplats"
51
+Basic.Settings.Output.SelectFile="Välj inspelningsfil"
52
 Basic.Settings.Output.Mode="Utmatningsläge"
53
-Basic.Settings.Output.Mode.Simple="Enkelt (streama och/eller spela in)"
54
-Basic.Settings.Output.Mode.Advanced="Avancerat (anpassad utmatningstyp)"
55
+Basic.Settings.Output.Mode.Simple="Simpel"
56
+Basic.Settings.Output.Mode.Adv="Avancerat"
57
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg-utmatning"
58
 Basic.Settings.Output.Simple.SavePath="Sökväg till FLV-inspelningsfil"
59
 Basic.Settings.Output.VideoBitrate="Bithastighet för video"
60
 Basic.Settings.Output.AudioBitrate="Bithastighet för ljud"
61
@@ -192,9 +205,32 @@
62
 Basic.Settings.Output.RetryDelay="Återanslutningsfördröjning (sek)"
63
 Basic.Settings.Output.MaxRetries="Maximalt antal försök"
64
 Basic.Settings.Output.Advanced="Aktivera avancerade kodarinställningar"
65
-Basic.Settings.Output.X264Preset="x264-förinställning"
66
-Basic.Settings.Output.CustomX264Settings="Anpassade x264 inställningar"
67
+Basic.Settings.Output.EncoderPreset="Kodarförinställning (högre = mindre CPU)"
68
+Basic.Settings.Output.CustomEncoderSettings="Inställningar för anpassade kodare"
69
 Basic.Settings.Output.UseCBR="Använd konstant bithastighet"
70
+Basic.Settings.Output.UseBufferSize="Använd anpassad buffertstorlek"
71
+
72
+Basic.Settings.Output.Adv.Rescale="Skala om utmatning"
73
+Basic.Settings.Output.Adv.AudioTrack="Ljudspår"
74
+Basic.Settings.Output.Adv.Streaming="Strömning"
75
+Basic.Settings.Output.Adv.ApplyServiceSettings="Tillämpa strömningstjänstens kodarinställningar"
76
+Basic.Settings.Output.Adv.Audio.Track1="Spår 1"
77
+Basic.Settings.Output.Adv.Audio.Track2="Spår 2"
78
+Basic.Settings.Output.Adv.Audio.Track3="Spår 3"
79
+Basic.Settings.Output.Adv.Audio.Track4="Spår 4"
80
+
81
+Basic.Settings.Output.Adv.Recording="Inspelning"
82
+Basic.Settings.Output.Adv.Recording.Type="Typ"
83
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
84
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Anpassad utmatning (FFmpeg)"
85
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Använd strömkodare)"
86
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Vanliga inspelningsformat"
87
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Alla Filer"
88
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Sökväg eller webbadress"
89
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videokodare (tomt = standard)"
90
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videokodar-inställningar (om något)"
91
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Ljudkodare (tomt = standard)"
92
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ljudkodar-inställningar (om något)"
93
 
94
 Basic.Settings.Video="Video"
95
 Basic.Settings.Video.Adapter="Grafikkort:"
96
@@ -212,6 +248,10 @@
97
 Basic.Settings.Video.InvalidResolution="Ogiltig upplösning. Måste anges som [bredd]x[höjd] (t.ex 1920x1080)"
98
 Basic.Settings.Video.CurrentlyActive="Videoutmatning är aktiv. Stoppa alla utmatningar för att kunna ändra videoinställningar."
99
 
100
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinjär (snabbast, men suddigt om skalad)"
101
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubisk (Vässd skalning, 16 prover)"
102
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Vässd skalning, 32 prover)"
103
+
104
 Basic.Settings.Audio="Ljud"
105
 Basic.Settings.Audio.SampleRate="Samplingsfrekvens"
106
 Basic.Settings.Audio.Channels="Kanaler"
107
@@ -221,3 +261,12 @@
108
 Basic.Settings.Audio.AuxDevice2="Mikrofon/extra ljudenhet 2"
109
 Basic.Settings.Audio.AuxDevice3="Mikrofon/extra ljudenhet 3"
110
 
111
+
112
+Basic.AdvAudio="Avancerade ljudinställningar"
113
+Basic.AdvAudio.Name="Namn"
114
+Basic.AdvAudio.Volume="Volym (%)"
115
+Basic.AdvAudio.Mono="Downmixa till Mono"
116
+Basic.AdvAudio.Panning="Panorering"
117
+Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
118
+Basic.AdvAudio.AudioTracks="Spår"
119
+
120
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/th-TH.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/th-TH.ini Changed
71
 
1
@@ -1,5 +1,6 @@
2
 
3
 Language="ไทย"
4
+Region="ประเทศไทย"
5
 
6
 OK="ตกลง"
7
 Apply="นำไปใช้"
8
@@ -13,15 +14,18 @@
9
 MoveUp="เลื่อนขึ้น"
10
 MoveDown="เลื่อนลง"
11
 Settings="ตั้งค่า"
12
+Exit="ออก"
13
 Browse="เปิดหา"
14
 Mono="โมโน"
15
 Stereo="สเตอริโอ"
16
 
17
 
18
 
19
+
20
 ConfirmRemove.Title="ยืนยันการลบ"
21
 ConfirmRemove.Text="คุณแน่ใจแล้วหรือที่จะลบ '$1'?"
22
 
23
+Output.ConnectFail.Title="ไม่สามารถเชื่อมต่อได้"
24
 Output.ConnectFail.ConnectFailed="ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์"
25
 Output.ConnectFail.Disconnected="ถูกตัดออกจากเซิร์ฟเวอร์"
26
 
27
@@ -41,6 +45,7 @@
28
 
29
 Basic.Main.DefaultSceneName.Text="ฉาก %1"
30
 
31
+Basic.SourceSelect.CreateNew="สร้างใหม่"
32
 
33
 
34
 
35
@@ -48,6 +53,10 @@
36
 Basic.TransformWindow.Position="ตำแหน่ง"
37
 Basic.TransformWindow.Size="ขนาด"
38
 
39
+Basic.TransformWindow.Alignment.TopLeft="ด้านบนซ้าย"
40
+Basic.TransformWindow.Alignment.TopCenter="ด้านบนกลาง"
41
+Basic.TransformWindow.Alignment.TopRight="ด้านบนขวา"
42
+Basic.TransformWindow.Alignment.BottomLeft="ด้านล่างซ้าย"
43
 
44
 
45
 
46
@@ -58,6 +67,7 @@
47
 Basic.Main.StopRecording="หยุดบันทึก"
48
 Basic.Main.StopStreaming="หยุดสตรีมมิ่ง"
49
 
50
+Basic.MainMenu.File.Exit="อ&อก"
51
 
52
 
53
 Basic.MainMenu.Help.CheckForUpdates="ตรวจสอบการอัพเดต"
54
@@ -70,11 +80,15 @@
55
 Basic.Settings.Stream="สตรีม"
56
 Basic.Settings.Stream.StreamType="รูปแบบการสตรีม"
57
 
58
-Basic.Settings.Output.Mode.Simple="อย่างง่าย (สตรีม และ/หรือ บันทึก)"
59
+
60
+
61
 
62
 Basic.Settings.Video="วีดีโอ"
63
 Basic.Settings.Video.DisableAeroWindows="ปิดการใช้งาน Aero (เฉพาะ Windows เท่านั้น)"
64
 Basic.Settings.Video.FPS="FPS:"
65
 
66
+
67
 Basic.Settings.Audio="เสียง"
68
 
69
+
70
+
71
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/tr-TR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/tr-TR.ini Changed
44
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="Lütfen geçerli bir ad girin"
3
 NoNameEntered.Text="İsim boş olamaz."
4
 
5
+
6
 ConfirmRemove.Title="Kaldırmayı Onayla"
7
 ConfirmRemove.Text="'$1''i kaldırmak istediğinizden emin misiniz?"
8
 
9
@@ -154,18 +155,16 @@
10
 
11
 Basic.Settings.Output="Çıkış"
12
 Basic.Settings.Output.Mode="Çıkış modu"
13
-Basic.Settings.Output.Mode.Simple="Basit (Yayın ve/veya kayıt)"
14
-Basic.Settings.Output.Mode.Advanced="Gelişmiş (Özel çıkış tipi)"
15
 Basic.Settings.Output.Simple.SavePath="FLV Kayıt Dizini"
16
 Basic.Settings.Output.VideoBitrate="Video Bithızı"
17
 Basic.Settings.Output.AudioBitrate="Ses Bithızı"
18
 Basic.Settings.Output.Reconnect="Otomatik Yeniden Bağlan"
19
 Basic.Settings.Output.RetryDelay="Yeniden Deneme Gecikmesi (saniye)"
20
 Basic.Settings.Output.MaxRetries="En fazla yeniden deneme sayısı"
21
-Basic.Settings.Output.X264Preset="x264 Hazır Ayarı"
22
-Basic.Settings.Output.CustomX264Settings="Özel x264 Ayarı"
23
 Basic.Settings.Output.UseCBR="Sabit Bit Hızı Kullanın"
24
 
25
+
26
+
27
 Basic.Settings.Video="Video"
28
 Basic.Settings.Video.Adapter="Video Bağdaştırıcısi:"
29
 Basic.Settings.Video.BaseResolution="Temel Çözünürlük:"
30
@@ -181,6 +180,7 @@
31
 Basic.Settings.Video.InvalidResolution="Geçersiz çözünürlük değeri. [Genişlik]x[Yükseklik] şeklinde olmalıdır. (örnek 1920x1080)"
32
 Basic.Settings.Video.CurrentlyActive="Video çıkışı şu anda etkin durumda.  Video ayarlarını değiştirmek için lütfen bütün çıkışları kapalı duruma getirin."
33
 
34
+
35
 Basic.Settings.Audio="Ses"
36
 Basic.Settings.Audio.SampleRate="Örnekleme Sıklığı"
37
 Basic.Settings.Audio.Channels="Kanallar"
38
@@ -190,3 +190,5 @@
39
 Basic.Settings.Audio.AuxDevice2="Mic/yardımcı ses aygıtı 2"
40
 Basic.Settings.Audio.AuxDevice3="Mic/yardımcı ses aygıtı 3"
41
 
42
+
43
+
44
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/uk-UA.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/uk-UA.ini Changed
18
 
1
@@ -17,6 +17,7 @@
2
 
3
 
4
 
5
+
6
 LicenseAgreement.Exit="Вихід"
7
 
8
 
9
@@ -44,3 +45,8 @@
10
 
11
 
12
 
13
+
14
+
15
+
16
+
17
+
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/zh-CN.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/zh-CN.ini Changed
183
 
1
@@ -5,6 +5,8 @@
2
 OK="确定"
3
 Apply="应用"
4
 Cancel="取消"
5
+Save="保存"
6
+Discard="舍弃"
7
 Yes="是"
8
 No="否"
9
 Add="添加"
10
@@ -14,6 +16,7 @@
11
 MoveUp="上移"
12
 MoveDown="下移"
13
 Settings="设置"
14
+Name="名称"
15
 Exit="退出"
16
 Mixer="混音器"
17
 Browse="浏览"
18
@@ -24,14 +27,19 @@
19
 NameExists.Title="名称已存在"
20
 NameExists.Text="该名称已被使用"
21
 
22
+NoNameEntered.Title="请输入一个有效的名称"
23
 NoNameEntered.Text="您不能使用空白名称。"
24
 
25
+ConfirmExit.Title="退出OBS?"
26
+ConfirmExit.Text="OBS当前是活跃的. 你确定要退出吗?"
27
+
28
 ConfirmRemove.Title="确认移除"
29
 ConfirmRemove.Text="确实要删除 '$1' 吗?"
30
 
31
 Output.ConnectFail.Title="连接失败"
32
 Output.ConnectFail.BadPath="无效的路径或URL。请检查您的设置以确认它们是有效的。"
33
 Output.ConnectFail.ConnectFailed="无法连接到服务器"
34
+Output.ConnectFail.InvalidStream="无法访问指定的通道或流密钥. 这可能是因为 密钥/通道 是无效的, 活着因为服务认为你已经登录了."
35
 Output.ConnectFail.Error="试图连接到服务器时出现意外的错误。详细信息记录在日志文件中。"
36
 Output.ConnectFail.Disconnected="已从服务器断开。"
37
 
38
@@ -48,6 +56,19 @@
39
 LicenseAgreement.IAgree="我同意"
40
 LicenseAgreement.Exit="退出"
41
 
42
+Remux.SourceFile="OBS 录像"
43
+Remux.TargetFile="目标文件"
44
+Remux.Remux="重新封装"
45
+Remux.RecordingPattern="OBS 录像(*.flv)"
46
+Remux.FinishedTitle="转封装完成"
47
+Remux.Finished="录像已经转封装"
48
+Remux.FinishedError="录像已经转封装, 但是文件可能不完整."
49
+Remux.SelectRecording="选择OBS录像 ..."
50
+Remux.SelectTarget="选择目标文件 ..."
51
+Remux.FileExistsTitle="目标文件已存在"
52
+Remux.FileExists="目标文件存在,你想要替换它吗?"
53
+Remux.ExitUnfinishedTitle="转封装在进行中"
54
+Remux.ExitUnfinished="转封装没有完成, 现在停止可能使目标文件不可用.\n你确定要停止转封装吗?"
55
 
56
 UpdateAvailable="版本升级"
57
 UpdateAvailable.Text="新的版本 %1.%2.%3 已可用。<a href='%4'> 点击这里下载</a>"
58
@@ -72,8 +93,13 @@
59
 Basic.SourceSelect.AddExisting="添加现有"
60
 
61
 Basic.PropertiesWindow="属性 '%1'"
62
+Basic.PropertiesWindow.AutoSelectFormat="%1 (不支持; 自动选择: %2)"
63
 Basic.PropertiesWindow.SelectColor="选择颜色"
64
+Basic.PropertiesWindow.SelectFont="选择字体"
65
+Basic.PropertiesWindow.ConfirmTitle="设置已更改"
66
+Basic.PropertiesWindow.Confirm="有未保存的更改. 你想要保存他们吗?"
67
 
68
+Basic.InteractionWindow="与'%1'交互"
69
 
70
 Basic.StatusBar.Reconnecting="已断开连接,正在重连(尝试 %1)"
71
 Basic.StatusBar.ReconnectSuccessful="重连成功"
72
@@ -119,6 +145,8 @@
73
 Basic.MainMenu.File="& 文件"
74
 Basic.MainMenu.File.Export="& 导出"
75
 Basic.MainMenu.File.Import="& 导入"
76
+Basic.MainMenu.File.ShowRecordings="显示 & 录像"
77
+Basic.MainMenu.File.Remux="转&封装 录像"
78
 Basic.MainMenu.File.Settings="& 设置"
79
 Basic.MainMenu.File.Exit="退出(&X)"
80
 
81
@@ -143,9 +171,11 @@
82
 Basic.MainMenu.Edit.Order.MoveDown="下移"
83
 Basic.MainMenu.Edit.Order.MoveToTop="移至顶部"
84
 Basic.MainMenu.Edit.Order.MoveToBottom="移至底部"
85
+Basic.MainMenu.Edit.AdvAudio="&高级音频属性"
86
 
87
 Basic.MainMenu.Help="& 帮助"
88
 Basic.MainMenu.Help.Logs="& 日志文件"
89
+Basic.MainMenu.Help.Logs.ShowLogs="& 显示日志文件"
90
 Basic.MainMenu.Help.Logs.UploadCurrentLog="& 上传当前日志文件"
91
 Basic.MainMenu.Help.Logs.UploadLastLog="& 上传最后一个日志文件"
92
 Basic.MainMenu.Help.CheckForUpdates="检查升级"
93
@@ -161,29 +191,67 @@
94
 Basic.Settings.Stream.StreamType="串流类型"
95
 
96
 Basic.Settings.Output="输出"
97
+Basic.Settings.Output.Encoder="编码器"
98
+Basic.Settings.Output.SelectDirectory="选择录像目录"
99
+Basic.Settings.Output.SelectFile="选择录像文件"
100
 Basic.Settings.Output.Mode="输出模式"
101
-Basic.Settings.Output.Mode.Simple="简单 (串流和录制)"
102
-Basic.Settings.Output.Mode.Advanced="高级 (自定义输出类型)"
103
+Basic.Settings.Output.Mode.Simple="简单"
104
+Basic.Settings.Output.Mode.Adv="高级"
105
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg 输出"
106
 Basic.Settings.Output.Simple.SavePath="FLV 录制路径"
107
 Basic.Settings.Output.VideoBitrate="视频比特率"
108
 Basic.Settings.Output.AudioBitrate="音频比特率"
109
 Basic.Settings.Output.Reconnect="自动重连"
110
 Basic.Settings.Output.RetryDelay="重试延迟时间 (秒)"
111
 Basic.Settings.Output.MaxRetries="最大重试次数"
112
+Basic.Settings.Output.Advanced="启用高级编码器设置"
113
+Basic.Settings.Output.EncoderPreset="编码器预设 (更高 = 较少的CPU占用)"
114
+Basic.Settings.Output.CustomEncoderSettings="自定义编码器设置"
115
+Basic.Settings.Output.UseCBR="使用恒定比特率"
116
+Basic.Settings.Output.UseBufferSize="使用自定义缓存大小"
117
+
118
+Basic.Settings.Output.Adv.Rescale="重新缩放输出"
119
+Basic.Settings.Output.Adv.AudioTrack="音轨"
120
+Basic.Settings.Output.Adv.Streaming="流"
121
+Basic.Settings.Output.Adv.ApplyServiceSettings="强制流服务编码器设置"
122
+Basic.Settings.Output.Adv.Audio.Track1="轨道 1"
123
+Basic.Settings.Output.Adv.Audio.Track2="轨道 2"
124
+Basic.Settings.Output.Adv.Audio.Track3="轨道 3"
125
+Basic.Settings.Output.Adv.Audio.Track4="轨道 4"
126
+
127
+Basic.Settings.Output.Adv.Recording="录像"
128
+Basic.Settings.Output.Adv.Recording.Type="类型"
129
+Basic.Settings.Output.Adv.Recording.Type.Standard="标准"
130
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="自定义输出 (FFmpeg)"
131
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(使用流编码器)"
132
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="常见的录像格式"
133
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="所有文件"
134
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="文件路径或 URL"
135
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="视频编码器 (空白 = 默认值)"
136
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="视频编码器设置 (如果有)"
137
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="音频编码器 (空白 = 默认值)"
138
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="视频编码器设置 (如果有)"
139
 
140
 Basic.Settings.Video="视频"
141
 Basic.Settings.Video.Adapter="视频适配器:"
142
 Basic.Settings.Video.BaseResolution="基本分辨率:"
143
+Basic.Settings.Video.ScaledResolution="缩放分辨率"
144
+Basic.Settings.Video.DownscaleFilter="缩放过滤器"
145
 Basic.Settings.Video.DisableAeroWindows="禁用 Aero (仅限 Windows)"
146
 Basic.Settings.Video.FPS="每秒帧数:"
147
 Basic.Settings.Video.FPSCommon="常见的 FPS 值"
148
 Basic.Settings.Video.FPSInteger="整数 FPS 值"
149
+Basic.Settings.Video.FPSFraction="分数帧率值"
150
 Basic.Settings.Video.Numerator="分子:"
151
 Basic.Settings.Video.Denominator="分母:"
152
 Basic.Settings.Video.Renderer="渲染器:"
153
 Basic.Settings.Video.InvalidResolution="无效的分辨率值。必须是 [宽]x[高] (如 1920 x 1080)"
154
 Basic.Settings.Video.CurrentlyActive="视频输出处于活动状态。请关闭任何输出以更改视频设置。"
155
 
156
+Basic.Settings.Video.DownscaleFilter.Bilinear="双直线法(最快, 但如果缩放会模糊)"
157
+Basic.Settings.Video.DownscaleFilter.Bicubic="两次立方(削尖缩放, 16 个样本)"
158
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos(削尖缩放, 32个样本)"
159
+
160
 Basic.Settings.Audio="音频"
161
 Basic.Settings.Audio.SampleRate="采样率"
162
 Basic.Settings.Audio.Channels="声道"
163
@@ -193,3 +261,19 @@
164
 Basic.Settings.Audio.AuxDevice2="麦克风/辅助音频设备 2"
165
 Basic.Settings.Audio.AuxDevice3="麦克风/辅助音频设备 3"
166
 
167
+Basic.Settings.Advanced="高级"
168
+Basic.Settings.Advanced.Audio.BufferingTime="音频缓冲时间"
169
+Basic.Settings.Advanced.Video.ColorFormat="颜色格式"
170
+Basic.Settings.Advanced.Video.ColorSpace="YUV 颜色空间"
171
+Basic.Settings.Advanced.Video.ColorRange="YUV 颜色范围"
172
+Basic.Settings.Advanced.Video.ColorRange.Partial="局部"
173
+Basic.Settings.Advanced.Video.ColorRange.Full="全部"
174
+
175
+Basic.AdvAudio="高级音频属性"
176
+Basic.AdvAudio.Name="名称"
177
+Basic.AdvAudio.Volume="卷 (%)"
178
+Basic.AdvAudio.Mono="下降混合为单声道"
179
+Basic.AdvAudio.Panning="平移"
180
+Basic.AdvAudio.SyncOffset="同步偏移 (毫秒)"
181
+Basic.AdvAudio.AudioTracks="轨道"
182
+
183
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/data/locale/zh-TW.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/data/locale/zh-TW.ini Changed
43
 
1
@@ -27,6 +27,7 @@
2
 NoNameEntered.Title="請輸入有效的名稱"
3
 NoNameEntered.Text="您使用的名稱不能為空。"
4
 
5
+
6
 ConfirmRemove.Title="確認刪除?"
7
 ConfirmRemove.Text="您確定要刪除「$1」?"
8
 
9
@@ -167,8 +168,6 @@
10
 
11
 Basic.Settings.Output="輸出"
12
 Basic.Settings.Output.Mode="輸出模式"
13
-Basic.Settings.Output.Mode.Simple="簡易(串流/錄製)"
14
-Basic.Settings.Output.Mode.Advanced="進階(自訂輸出模式)"
15
 Basic.Settings.Output.Simple.SavePath="錄製 FLV 路徑"
16
 Basic.Settings.Output.VideoBitrate="影像頻率(kbit/s)"
17
 Basic.Settings.Output.AudioBitrate="音效頻率(kbit/s)"
18
@@ -176,8 +175,8 @@
19
 Basic.Settings.Output.RetryDelay="重試間隔(秒)"
20
 Basic.Settings.Output.MaxRetries="最大嘗試次數"
21
 Basic.Settings.Output.Advanced="啓用進階編碼器設定"
22
-Basic.Settings.Output.X264Preset="x264 預設"
23
-Basic.Settings.Output.CustomX264Settings="自訂 x264 設定"
24
+
25
+
26
 
27
 Basic.Settings.Video="影像"
28
 Basic.Settings.Video.Adapter="顯示卡:"
29
@@ -195,6 +194,7 @@
30
 Basic.Settings.Video.InvalidResolution="無效的解析度。 必須表達為 [寬]x[高] (例如:1920x1080)"
31
 Basic.Settings.Video.CurrentlyActive="目前影像輸出進行中。 請先停止輸出以便修改影像設定。"
32
 
33
+
34
 Basic.Settings.Audio="音效"
35
 Basic.Settings.Audio.SampleRate="取樣頻率"
36
 Basic.Settings.Audio.Channels="通道數"
37
@@ -204,3 +204,5 @@
38
 Basic.Settings.Audio.AuxDevice2="麥克風/輸入音效 2"
39
 Basic.Settings.Audio.AuxDevice3="麥克風/輸入音效 3"
40
 
41
+
42
+
43
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/forms/OBSBasic.ui -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/forms/OBSBasic.ui Changed
201
 
1
@@ -30,6 +30,9 @@
2
    <iconset resource="obs.qrc">
3
     <normaloff>:/res/images/obs.png</normaloff>:/res/images/obs.png</iconset>
4
   </property>
5
+  <property name="styleSheet">
6
+   <string notr="true"/>
7
+  </property>
8
   <widget class="QWidget" name="centralwidget">
9
    <layout class="QVBoxLayout" name="verticalLayout">
10
     <item>
11
@@ -69,10 +72,10 @@
12
       <property name="maximumSize">
13
        <size>
14
         <width>16777215</width>
15
-        <height>154</height>
16
+        <height>165</height>
17
        </size>
18
       </property>
19
-      <layout class="QHBoxLayout" name="horizontalLayout_2">
20
+      <layout class="QGridLayout" name="gridLayout">
21
        <property name="leftMargin">
22
         <number>0</number>
23
        </property>
24
@@ -85,7 +88,173 @@
25
        <property name="bottomMargin">
26
         <number>0</number>
27
        </property>
28
-       <item>
29
+       <property name="verticalSpacing">
30
+        <number>2</number>
31
+       </property>
32
+       <item row="0" column="2">
33
+        <widget class="QWidget" name="widget_6" native="true">
34
+         <property name="sizePolicy">
35
+          <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
36
+           <horstretch>0</horstretch>
37
+           <verstretch>0</verstretch>
38
+          </sizepolicy>
39
+         </property>
40
+         <layout class="QHBoxLayout" name="horizontalLayout">
41
+          <property name="spacing">
42
+           <number>4</number>
43
+          </property>
44
+          <property name="leftMargin">
45
+           <number>0</number>
46
+          </property>
47
+          <property name="topMargin">
48
+           <number>0</number>
49
+          </property>
50
+          <property name="rightMargin">
51
+           <number>0</number>
52
+          </property>
53
+          <property name="bottomMargin">
54
+           <number>0</number>
55
+          </property>
56
+          <item>
57
+           <widget class="QLabel" name="label_3">
58
+            <property name="sizePolicy">
59
+             <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
60
+              <horstretch>0</horstretch>
61
+              <verstretch>0</verstretch>
62
+             </sizepolicy>
63
+            </property>
64
+            <property name="text">
65
+             <string>Mixer</string>
66
+            </property>
67
+           </widget>
68
+          </item>
69
+          <item>
70
+           <widget class="QPushButton" name="advAudioProps">
71
+            <property name="sizePolicy">
72
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
73
+              <horstretch>0</horstretch>
74
+              <verstretch>0</verstretch>
75
+             </sizepolicy>
76
+            </property>
77
+            <property name="maximumSize">
78
+             <size>
79
+              <width>22</width>
80
+              <height>22</height>
81
+             </size>
82
+            </property>
83
+            <property name="text">
84
+             <string notr="true"/>
85
+            </property>
86
+            <property name="icon">
87
+             <iconset resource="obs.qrc">
88
+              <normaloff>:/res/images/configuration21_16.png</normaloff>:/res/images/configuration21_16.png</iconset>
89
+            </property>
90
+            <property name="flat">
91
+             <bool>true</bool>
92
+            </property>
93
+           </widget>
94
+          </item>
95
+         </layout>
96
+        </widget>
97
+       </item>
98
+       <item row="1" column="2">
99
+        <widget class="QWidget" name="widget_4" native="true">
100
+         <layout class="QVBoxLayout" name="verticalLayout_9">
101
+          <property name="leftMargin">
102
+           <number>0</number>
103
+          </property>
104
+          <property name="topMargin">
105
+           <number>0</number>
106
+          </property>
107
+          <property name="rightMargin">
108
+           <number>0</number>
109
+          </property>
110
+          <property name="bottomMargin">
111
+           <number>0</number>
112
+          </property>
113
+          <item>
114
+           <widget class="QFrame" name="frame_4">
115
+            <property name="sizePolicy">
116
+             <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
117
+              <horstretch>0</horstretch>
118
+              <verstretch>0</verstretch>
119
+             </sizepolicy>
120
+            </property>
121
+            <property name="frameShape">
122
+             <enum>QFrame::StyledPanel</enum>
123
+            </property>
124
+            <property name="frameShadow">
125
+             <enum>QFrame::Raised</enum>
126
+            </property>
127
+            <layout class="QVBoxLayout" name="verticalLayout_7">
128
+             <property name="spacing">
129
+              <number>0</number>
130
+             </property>
131
+             <property name="leftMargin">
132
+              <number>0</number>
133
+             </property>
134
+             <property name="topMargin">
135
+              <number>0</number>
136
+             </property>
137
+             <property name="rightMargin">
138
+              <number>0</number>
139
+             </property>
140
+             <property name="bottomMargin">
141
+              <number>0</number>
142
+             </property>
143
+             <item>
144
+              <widget class="VScrollArea" name="scrollArea">
145
+               <property name="verticalScrollBarPolicy">
146
+                <enum>Qt::ScrollBarAlwaysOn</enum>
147
+               </property>
148
+               <property name="horizontalScrollBarPolicy">
149
+                <enum>Qt::ScrollBarAlwaysOff</enum>
150
+               </property>
151
+               <property name="widgetResizable">
152
+                <bool>true</bool>
153
+               </property>
154
+               <widget class="QWidget" name="volumeWidgets">
155
+                <property name="geometry">
156
+                 <rect>
157
+                  <x>0</x>
158
+                  <y>0</y>
159
+                  <width>231</width>
160
+                  <height>16</height>
161
+                 </rect>
162
+                </property>
163
+                <property name="sizePolicy">
164
+                 <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
165
+                  <horstretch>0</horstretch>
166
+                  <verstretch>0</verstretch>
167
+                 </sizepolicy>
168
+                </property>
169
+                <layout class="QVBoxLayout" name="verticalLayout_6">
170
+                 <property name="spacing">
171
+                  <number>0</number>
172
+                 </property>
173
+                 <property name="leftMargin">
174
+                  <number>0</number>
175
+                 </property>
176
+                 <property name="topMargin">
177
+                  <number>0</number>
178
+                 </property>
179
+                 <property name="rightMargin">
180
+                  <number>0</number>
181
+                 </property>
182
+                 <property name="bottomMargin">
183
+                  <number>0</number>
184
+                 </property>
185
+                </layout>
186
+               </widget>
187
+              </widget>
188
+             </item>
189
+            </layout>
190
+           </widget>
191
+          </item>
192
+         </layout>
193
+        </widget>
194
+       </item>
195
+       <item row="1" column="0">
196
         <widget class="QWidget" name="widget_5" native="true">
197
          <property name="sizePolicy">
198
           <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
199
@@ -113,13 +282,6 @@
200
            <number>0</number>
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/forms/OBSBasicSettings.ui -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/forms/OBSBasicSettings.ui Changed
201
 
1
@@ -87,6 +87,15 @@
2
           <normaloff>:/settings/images/settings/video-display-3.png</normaloff>:/settings/images/settings/video-display-3.png</iconset>
3
         </property>
4
        </item>
5
+       <item>
6
+        <property name="text">
7
+         <string>Basic.Settings.Advanced</string>
8
+        </property>
9
+        <property name="icon">
10
+         <iconset resource="obs.qrc">
11
+          <normaloff>:/settings/images/settings/advanced.png</normaloff>:/settings/images/settings/advanced.png</iconset>
12
+        </property>
13
+       </item>
14
       </widget>
15
      </item>
16
      <item>
17
@@ -115,9 +124,6 @@
18
            </property>
19
           </spacer>
20
          </item>
21
-         <item row="1" column="1">
22
-          <widget class="QComboBox" name="language"/>
23
-         </item>
24
          <item row="1" column="0">
25
           <widget class="QLabel" name="label">
26
            <property name="minimumSize">
27
@@ -134,6 +140,9 @@
28
            </property>
29
           </widget>
30
          </item>
31
+         <item row="1" column="1">
32
+          <widget class="QComboBox" name="language"/>
33
+         </item>
34
         </layout>
35
        </widget>
36
        <widget class="QWidget" name="streamPage">
37
@@ -280,7 +289,7 @@
38
             <item row="0" column="1">
39
              <widget class="QComboBox" name="outputMode">
40
               <property name="enabled">
41
-               <bool>false</bool>
42
+               <bool>true</bool>
43
               </property>
44
               <property name="sizePolicy">
45
                <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
46
@@ -298,7 +307,7 @@
47
               </item>
48
               <item>
49
                <property name="text">
50
-                <string>Basic.Settings.Output.Mode.Custom</string>
51
+                <string>Basic.Settings.Output.Mode.Adv</string>
52
                </property>
53
               </item>
54
              </widget>
55
@@ -483,6 +492,13 @@
56
                      </property>
57
                     </widget>
58
                    </item>
59
+                   <item row="4" column="0">
60
+                    <widget class="QLabel" name="label_17">
61
+                     <property name="text">
62
+                      <string>Basic.Settings.Output.RetryDelay</string>
63
+                     </property>
64
+                    </widget>
65
+                   </item>
66
                    <item row="4" column="1">
67
                     <widget class="QSpinBox" name="simpleOutRetryDelay">
68
                      <property name="maximum">
69
@@ -490,6 +506,13 @@
70
                      </property>
71
                     </widget>
72
                    </item>
73
+                   <item row="5" column="0">
74
+                    <widget class="QLabel" name="label_22">
75
+                     <property name="text">
76
+                      <string>Basic.Settings.Output.MaxRetries</string>
77
+                     </property>
78
+                    </widget>
79
+                   </item>
80
                    <item row="5" column="1">
81
                     <widget class="QSpinBox" name="simpleOutMaxRetries">
82
                      <property name="minimum">
83
@@ -500,20 +523,6 @@
84
                      </property>
85
                     </widget>
86
                    </item>
87
-                   <item row="4" column="0">
88
-                    <widget class="QLabel" name="label_17">
89
-                     <property name="text">
90
-                      <string>Basic.Settings.Output.RetryDelay</string>
91
-                     </property>
92
-                    </widget>
93
-                   </item>
94
-                   <item row="5" column="0">
95
-                    <widget class="QLabel" name="label_22">
96
-                     <property name="text">
97
-                      <string>Basic.Settings.Output.MaxRetries</string>
98
-                     </property>
99
-                    </widget>
100
-                   </item>
101
                    <item row="6" column="1">
102
                     <widget class="QCheckBox" name="simpleOutAdvanced">
103
                      <property name="text">
104
@@ -524,13 +533,13 @@
105
                      </property>
106
                     </widget>
107
                    </item>
108
-                   <item row="9" column="1">
109
-                    <widget class="QLineEdit" name="simpleOutCustomX264"/>
110
-                   </item>
111
-                   <item row="9" column="0">
112
-                    <widget class="QLabel" name="label_23">
113
+                   <item row="7" column="1">
114
+                    <widget class="QCheckBox" name="simpleOutUseCBR">
115
                      <property name="text">
116
-                      <string>Basic.Settings.Output.CustomX264Settings</string>
117
+                      <string>Basic.Settings.Output.UseCBR</string>
118
+                     </property>
119
+                     <property name="checked">
120
+                      <bool>true</bool>
121
                      </property>
122
                     </widget>
123
                    </item>
124
@@ -540,7 +549,7 @@
125
                       <bool>true</bool>
126
                      </property>
127
                      <property name="text">
128
-                      <string>Basic.Settings.Output.X264Preset</string>
129
+                      <string>Basic.Settings.Output.EncoderPreset</string>
130
                      </property>
131
                     </widget>
132
                    </item>
133
@@ -588,16 +597,48 @@
134
                      </item>
135
                     </widget>
136
                    </item>
137
-                   <item row="7" column="1">
138
-                    <widget class="QCheckBox" name="simpleOutUseCBR">
139
+                   <item row="9" column="0">
140
+                    <widget class="QCheckBox" name="simpleOutUseBufsize">
141
+                     <property name="sizePolicy">
142
+                      <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
143
+                       <horstretch>0</horstretch>
144
+                       <verstretch>0</verstretch>
145
+                      </sizepolicy>
146
+                     </property>
147
+                     <property name="layoutDirection">
148
+                      <enum>Qt::RightToLeft</enum>
149
+                     </property>
150
                      <property name="text">
151
-                      <string>Basic.Settings.Output.UseCBR</string>
152
+                      <string>Basic.Settings.Output.UseBufferSize</string>
153
                      </property>
154
-                     <property name="checked">
155
-                      <bool>true</bool>
156
+                    </widget>
157
+                   </item>
158
+                   <item row="9" column="1">
159
+                    <widget class="QSpinBox" name="simpleOutVBufsize">
160
+                     <property name="enabled">
161
+                      <bool>false</bool>
162
+                     </property>
163
+                     <property name="minimum">
164
+                      <number>0</number>
165
+                     </property>
166
+                     <property name="maximum">
167
+                      <number>1000000</number>
168
+                     </property>
169
+                     <property name="value">
170
+                      <number>2000</number>
171
+                     </property>
172
+                    </widget>
173
+                   </item>
174
+                   <item row="10" column="0">
175
+                    <widget class="QLabel" name="label_23">
176
+                     <property name="text">
177
+                      <string>Basic.Settings.Output.CustomEncoderSettings</string>
178
                      </property>
179
                     </widget>
180
                    </item>
181
+                   <item row="10" column="1">
182
+                    <widget class="QLineEdit" name="simpleOutCustom"/>
183
+                   </item>
184
                   </layout>
185
                  </widget>
186
                 </item>
187
@@ -606,7 +647,1177 @@
188
              </item>
189
             </layout>
190
            </widget>
191
-           <widget class="QWidget" name="customOutputsPage"/>
192
+           <widget class="QWidget" name="advOutputsPage">
193
+            <layout class="QVBoxLayout" name="verticalLayout_8">
194
+             <property name="leftMargin">
195
+              <number>0</number>
196
+             </property>
197
+             <property name="topMargin">
198
+              <number>0</number>
199
+             </property>
200
+             <property name="rightMargin">
201
obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/forms/images/configuration21_16.png Added
obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/forms/images/settings/advanced.png Added
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/forms/obs.qrc -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/forms/obs.qrc Changed
16
 
1
@@ -1,5 +1,6 @@
2
 <RCC>
3
   <qresource prefix="res">
4
+    <file>images/configuration21_16.png</file>
5
     <file>images/list_remove.png</file>
6
     <file>images/add.png</file>
7
     <file>images/down.png</file>
8
@@ -10,6 +11,7 @@
9
     <file>images/obs.png</file>
10
   </qresource>
11
   <qresource prefix="settings">
12
+    <file>images/settings/advanced.png</file>
13
     <file>images/settings/network.png</file>
14
     <file>images/settings/video-display-3.png</file>
15
     <file>images/settings/decibel_audio_player.png</file>
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/obs-app.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/obs-app.cpp Changed
94
 
1
@@ -127,17 +127,20 @@
2
 
3
 static bool MakeUserDirs()
4
 {
5
-   BPtr<char> path;
6
+   char path[512];
7
 
8
-   path = os_get_config_path("obs-studio");
9
+   if (os_get_config_path(path, sizeof(path), "obs-studio") <= 0)
10
+       return false;
11
    if (!do_mkdir(path))
12
        return false;
13
 
14
-   path = os_get_config_path("obs-studio/basic");
15
+   if (os_get_config_path(path, sizeof(path), "obs-studio/basic") <= 0)
16
+       return false;
17
    if (!do_mkdir(path))
18
        return false;
19
 
20
-   path = os_get_config_path("obs-studio/logs");
21
+   if (os_get_config_path(path, sizeof(path), "obs-studio/logs") <= 0)
22
+       return false;
23
    if (!do_mkdir(path))
24
        return false;
25
 
26
@@ -146,7 +149,13 @@
27
 
28
 bool OBSApp::InitGlobalConfig()
29
 {
30
-   BPtr<char> path(os_get_config_path("obs-studio/global.ini"));
31
+   char path[512];
32
+
33
+   int len = os_get_config_path(path, sizeof(path),
34
+           "obs-studio/global.ini");
35
+   if (len <= 0) {
36
+       return false;
37
+   }
38
 
39
    int errorcode = globalConfig.Open(path, CONFIG_OPEN_ALWAYS);
40
    if (errorcode != CONFIG_SUCCESS) {
41
@@ -408,7 +417,7 @@
42
 
43
 static void delete_oldest_log(void)
44
 {
45
-   BPtr<char>       logDir(os_get_config_path("obs-studio/logs"));
46
+   BPtr<char>       logDir(os_get_config_path_ptr("obs-studio/logs"));
47
    string           oldestLog;
48
    uint64_t         oldest_ts = (uint64_t)-1;
49
    struct os_dirent *entry;
50
@@ -449,7 +458,7 @@
51
 
52
 static void get_last_log(void)
53
 {
54
-   BPtr<char>       logDir(os_get_config_path("obs-studio/logs"));
55
+   BPtr<char>       logDir(os_get_config_path_ptr("obs-studio/logs"));
56
    struct os_dirent *entry;
57
    os_dir_t         *dir        = os_opendir(logDir);
58
    uint64_t         highest_ts = 0;
59
@@ -522,7 +531,7 @@
60
    currentLogFile = GenerateTimeDateFilename("txt");
61
    dst << "obs-studio/logs/" << currentLogFile.c_str();
62
 
63
-   BPtr<char> path(os_get_config_path(dst.str().c_str()));
64
+   BPtr<char> path(os_get_config_path_ptr(dst.str().c_str()));
65
    logFile.open(path,
66
            ios_base::in | ios_base::out | ios_base::trunc);
67
 
68
@@ -579,7 +588,6 @@
69
 static void load_debug_privilege(void)
70
 {
71
    const DWORD flags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY;
72
-   bool success = false;
73
    TOKEN_PRIVILEGES tp;
74
    HANDLE token;
75
    LUID val;
76
@@ -593,7 +601,7 @@
77
        tp.Privileges[0].Luid = val;
78
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
79
 
80
-       success = !!AdjustTokenPrivileges(token, false, &tp,
81
+       AdjustTokenPrivileges(token, false, &tp,
82
                sizeof(tp), NULL, NULL);
83
    }
84
 
85
@@ -603,7 +611,7 @@
86
 
87
 int main(int argc, char *argv[])
88
 {
89
-#ifndef WIN32
90
+#ifndef _WIN32
91
    signal(SIGPIPE, SIG_IGN);
92
 #endif
93
 
94
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/properties-view.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/properties-view.cpp Changed
120
 
1
@@ -1,4 +1,5 @@
2
 #include <QFormLayout>
3
+#include <QScrollBar>
4
 #include <QLabel>
5
 #include <QCheckBox>
6
 #include <QFont>
7
@@ -42,12 +43,21 @@
8
 
9
 void OBSPropertiesView::ReloadProperties()
10
 {
11
-   properties.reset(reloadCallback(obj));
12
+   if (obj) {
13
+       properties.reset(reloadCallback(obj));
14
+   } else {
15
+       properties.reset(reloadCallback((void*)type.c_str()));
16
+       obs_properties_apply_settings(properties.get(), settings);
17
+   }
18
+
19
    RefreshProperties();
20
 }
21
 
22
 void OBSPropertiesView::RefreshProperties()
23
 {
24
+   int h, v;
25
+   GetScrollPos(h, v);
26
+
27
    children.clear();
28
    if (widget)
29
        widget->deleteLater();
30
@@ -73,6 +83,7 @@
31
 
32
    setWidgetResizable(true);
33
    setWidget(widget);
34
+   SetScrollPos(h, v);
35
    setSizePolicy(mainPolicy);
36
 
37
    lastFocused.clear();
38
@@ -82,18 +93,53 @@
39
    }
40
 }
41
 
42
+void OBSPropertiesView::SetScrollPos(int h, int v)
43
+{
44
+   QScrollBar *scroll = horizontalScrollBar();
45
+   if (scroll)
46
+       scroll->setValue(h);
47
+
48
+   scroll = verticalScrollBar();
49
+   if (scroll)
50
+       scroll->setValue(v);
51
+}
52
+
53
+void OBSPropertiesView::GetScrollPos(int &h, int &v)
54
+{
55
+   h = v = 0;
56
+
57
+   QScrollBar *scroll = horizontalScrollBar();
58
+   if (scroll)
59
+       h = scroll->value();
60
+
61
+   scroll = verticalScrollBar();
62
+   if (scroll)
63
+       v = scroll->value();
64
+}
65
+
66
 OBSPropertiesView::OBSPropertiesView(OBSData settings_, void *obj_,
67
        PropertiesReloadCallback reloadCallback,
68
        PropertiesUpdateCallback callback_, int minSize_)
69
    : VScrollArea    (nullptr),
70
-     widget         (nullptr),
71
      properties     (nullptr, obs_properties_destroy),
72
      settings       (settings_),
73
      obj            (obj_),
74
      reloadCallback (reloadCallback),
75
      callback       (callback_),
76
-     minSize        (minSize_),
77
-     lastWidget     (nullptr)
78
+     minSize        (minSize_)
79
+{
80
+   setFrameShape(QFrame::NoFrame);
81
+   ReloadProperties();
82
+}
83
+
84
+OBSPropertiesView::OBSPropertiesView(OBSData settings_, const char *type_,
85
+       PropertiesReloadCallback reloadCallback_, int minSize_)
86
+   : VScrollArea    (nullptr),
87
+     properties     (nullptr, obs_properties_destroy),
88
+     settings       (settings_),
89
+     type           (type_),
90
+     reloadCallback (reloadCallback_),
91
+     minSize        (minSize_)
92
 {
93
    setFrameShape(QFrame::NoFrame);
94
    ReloadProperties();
95
@@ -497,6 +543,11 @@
96
            lastWidget = widget;
97
 }
98
 
99
+void OBSPropertiesView::SignalChanged()
100
+{
101
+   emit Changed();
102
+}
103
+
104
 void WidgetInfo::BoolChanged(const char *setting)
105
 {
106
    QCheckBox *checkbox = static_cast<QCheckBox*>(widget);
107
@@ -696,7 +747,11 @@
108
            return;
109
    }
110
 
111
-   view->callback(view->obj, view->settings);
112
+   if (view->callback)
113
+       view->callback(view->obj, view->settings);
114
+
115
+   view->SignalChanged();
116
+
117
    if (obs_property_modified(property, view->settings)) {
118
        view->lastFocused = setting;
119
        QMetaObject::invokeMethod(view, "RefreshProperties",
120
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/properties-view.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/properties-view.hpp Changed
50
 
1
@@ -55,16 +55,17 @@
2
        std::unique_ptr<obs_properties_t, properties_delete_t>;
3
 
4
 private:
5
-   QWidget                                  *widget;
6
+   QWidget                                  *widget = nullptr;
7
    properties_t                             properties;
8
    OBSData                                  settings;
9
-   void                                     *obj;
10
+   void                                     *obj = nullptr;
11
+   std::string                              type;
12
    PropertiesReloadCallback                 reloadCallback;
13
-   PropertiesUpdateCallback                 callback;
14
+   PropertiesUpdateCallback                 callback = nullptr;
15
    int                                      minSize;
16
    std::vector<std::unique_ptr<WidgetInfo>> children;
17
    std::string                              lastFocused;
18
-   QWidget                                  *lastWidget;
19
+   QWidget                                  *lastWidget = nullptr;
20
 
21
    QWidget *NewWidget(obs_property_t *prop, QWidget *widget,
22
            const char *signal);
23
@@ -83,16 +84,26 @@
24
 
25
    void resizeEvent(QResizeEvent *event) override;
26
 
27
+   void GetScrollPos(int &h, int &v);
28
+   void SetScrollPos(int h, int v);
29
+
30
 public slots:
31
    void ReloadProperties();
32
    void RefreshProperties();
33
+   void SignalChanged();
34
 
35
 signals:
36
    void PropertiesResized();
37
+   void Changed();
38
 
39
 public:
40
    OBSPropertiesView(OBSData settings, void *obj,
41
            PropertiesReloadCallback reloadCallback,
42
            PropertiesUpdateCallback callback,
43
            int minSize = 0);
44
+   OBSPropertiesView(OBSData settings, const char *type,
45
+           PropertiesReloadCallback reloadCallback,
46
+           int minSize = 0);
47
+
48
+   inline obs_data_t *GetSettings() const {return settings;}
49
 };
50
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/volume-control.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/volume-control.cpp Changed
55
 
1
@@ -137,11 +137,53 @@
2
    obs_volmeter_destroy(obs_volmeter);
3
 }
4
 
5
+QColor VolumeMeter::getBkColor() const
6
+{
7
+   return bkColor;
8
+}
9
+
10
+void VolumeMeter::setBkColor(QColor c)
11
+{
12
+   bkColor = c;
13
+}
14
+
15
+QColor VolumeMeter::getMagColor() const
16
+{
17
+   return magColor;
18
+}
19
+
20
+void VolumeMeter::setMagColor(QColor c)
21
+{
22
+   magColor = c;
23
+}
24
+
25
+QColor VolumeMeter::getPeakColor() const
26
+{
27
+   return peakColor;
28
+}
29
+
30
+void VolumeMeter::setPeakColor(QColor c)
31
+{
32
+   peakColor = c;
33
+}
34
+
35
+QColor VolumeMeter::getPeakHoldColor() const
36
+{
37
+   return peakHoldColor;
38
+}
39
+
40
+void VolumeMeter::setPeakHoldColor(QColor c)
41
+{
42
+   peakHoldColor = c;
43
+}
44
+
45
+
46
 VolumeMeter::VolumeMeter(QWidget *parent)
47
            : QWidget(parent)
48
 {
49
    setMinimumSize(1, 3);
50
 
51
+   //Default meter color settings, they only show if there is no stylesheet, do not remove.
52
    bkColor.setRgb(0xDD, 0xDD, 0xDD);
53
    magColor.setRgb(0x20, 0x7D, 0x17);
54
    peakColor.setRgb(0x3E, 0xF1, 0x2B);
55
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/volume-control.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/volume-control.hpp Changed
29
 
1
@@ -6,6 +6,11 @@
2
 class VolumeMeter : public QWidget
3
 {
4
    Q_OBJECT
5
+   Q_PROPERTY(QColor bkColor READ getBkColor WRITE setBkColor DESIGNABLE true)
6
+   Q_PROPERTY(QColor magColor READ getMagColor WRITE setMagColor DESIGNABLE true)
7
+   Q_PROPERTY(QColor peakColor READ getPeakColor WRITE setPeakColor DESIGNABLE true)
8
+   Q_PROPERTY(QColor peakHoldColor READ getPeakHoldColor WRITE setPeakHoldColor DESIGNABLE true)
9
+
10
 private:
11
    float mag, peak, peakHold;
12
    QColor bkColor, magColor, peakColor, peakHoldColor;
13
@@ -14,6 +19,15 @@
14
 public:
15
    explicit VolumeMeter(QWidget *parent = 0);
16
    void setLevels(float nmag, float npeak, float npeakHold);
17
+   QColor getBkColor() const;
18
+   void setBkColor(QColor c);
19
+   QColor getMagColor() const;
20
+   void setMagColor(QColor c);
21
+   QColor getPeakColor() const;
22
+   void setPeakColor(QColor c);
23
+   QColor getPeakHoldColor() const;
24
+   void setPeakHoldColor(QColor c);
25
+
26
 protected:
27
    void paintEvent(QPaintEvent *event);
28
 private slots:
29
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-adv-audio.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-adv-audio.cpp Changed
78
 
1
@@ -1,5 +1,5 @@
2
 #include <QVBoxLayout>
3
-#include <QHBoxLayout>
4
+#include <QGridLayout>
5
 #include <QScrollArea>
6
 #include <QLabel>
7
 #include "window-basic-adv-audio.hpp"
8
@@ -18,49 +18,32 @@
9
 {
10
    QScrollArea *scrollArea;
11
    QVBoxLayout *vlayout;
12
-   QHBoxLayout *hlayout;
13
    QWidget *widget;
14
    QLabel *label;
15
 
16
-   hlayout = new QHBoxLayout;
17
-   hlayout->setContentsMargins(0, 0, 0, 0);
18
+   mainLayout = new QGridLayout;
19
+   mainLayout->setContentsMargins(0, 0, 0, 0);
20
    label = new QLabel(QTStr("Basic.AdvAudio.Name"));
21
-   label->setMinimumWidth(170);
22
    label->setAlignment(Qt::AlignHCenter);
23
-   hlayout->addWidget(label);
24
+   mainLayout->addWidget(label, 0, 0);
25
    label = new QLabel(QTStr("Basic.AdvAudio.Volume"));
26
-   label->setMinimumWidth(130);
27
-   label->setMaximumWidth(130);
28
    label->setAlignment(Qt::AlignHCenter);
29
-   hlayout->addWidget(label);
30
+   mainLayout->addWidget(label, 0, 1);
31
    label = new QLabel(QTStr("Basic.AdvAudio.Mono"));
32
-   label->setMinimumWidth(130);
33
-   label->setMaximumWidth(130);
34
    label->setAlignment(Qt::AlignHCenter);
35
-   hlayout->addWidget(label);
36
+   mainLayout->addWidget(label, 0, 2);
37
    label = new QLabel(QTStr("Basic.AdvAudio.Panning"));
38
-   label->setMinimumWidth(140);
39
-   label->setMaximumWidth(140);
40
    label->setAlignment(Qt::AlignHCenter);
41
-   hlayout->addWidget(label);
42
+   mainLayout->addWidget(label, 0, 3);
43
    label = new QLabel(QTStr("Basic.AdvAudio.SyncOffset"));
44
-   label->setMinimumWidth(130);
45
-   label->setMaximumWidth(130);
46
    label->setAlignment(Qt::AlignHCenter);
47
-   hlayout->addWidget(label);
48
-   label = new QLabel(QTStr("Basic.AdvAudio.MediaChannel"));
49
-   label->setMinimumWidth(160);
50
-   label->setMaximumWidth(160);
51
+   mainLayout->addWidget(label, 0, 4);
52
+   label = new QLabel(QTStr("Basic.AdvAudio.AudioTracks"));
53
    label->setAlignment(Qt::AlignHCenter);
54
-   hlayout->addWidget(label);
55
-   widget = new QWidget;
56
-   widget->setLayout(hlayout);
57
+   mainLayout->addWidget(label, 0, 5);
58
 
59
-   vlayout = new QVBoxLayout;
60
-   vlayout->setContentsMargins(0, 0, 0, 10);
61
-   vlayout->addWidget(widget);
62
    controlArea = new QWidget;
63
-   controlArea->setLayout(vlayout);
64
+   controlArea->setLayout(mainLayout);
65
    controlArea->setSizePolicy(QSizePolicy::Preferred,
66
            QSizePolicy::Preferred);
67
 
68
@@ -128,8 +111,7 @@
69
 
70
 inline void OBSBasicAdvAudio::AddAudioSource(obs_source_t *source)
71
 {
72
-   OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(source);
73
-   controlArea->layout()->addWidget(control);
74
+   OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(mainLayout, source);
75
    controls.push_back(control);
76
 }
77
 
78
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-adv-audio.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-adv-audio.hpp Changed
17
 
1
@@ -5,6 +5,7 @@
2
 #include <vector>
3
 
4
 class OBSAdvAudioCtrl;
5
+class QGridLayout;
6
 
7
 // "Basic advanced audio"?  ...
8
 
9
@@ -13,6 +14,7 @@
10
 
11
 private:
12
    QWidget *controlArea;
13
+   QGridLayout *mainLayout;
14
    OBSSignal sourceAddedSignal;
15
    OBSSignal sourceRemovedSignal;
16
 
17
obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-main-outputs.cpp Added
201
 
1
@@ -0,0 +1,711 @@
2
+#include <string>
3
+#include <QMessageBox>
4
+#include "window-basic-main.hpp"
5
+#include "window-basic-main-outputs.hpp"
6
+
7
+using namespace std;
8
+
9
+static void OBSStartStreaming(void *data, calldata_t *params)
10
+{
11
+   BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
12
+   QMetaObject::invokeMethod(output->main, "StreamingStart");
13
+
14
+   UNUSED_PARAMETER(params);
15
+}
16
+
17
+static void OBSStopStreaming(void *data, calldata_t *params)
18
+{
19
+   BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
20
+   int code = (int)calldata_int(params, "code");
21
+
22
+   QMetaObject::invokeMethod(output->main,
23
+           "StreamingStop", Q_ARG(int, code));
24
+   output->activeRefs--;
25
+}
26
+
27
+static void OBSStartRecording(void *data, calldata_t *params)
28
+{
29
+   BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
30
+
31
+   QMetaObject::invokeMethod(output->main, "RecordingStart");
32
+
33
+   UNUSED_PARAMETER(params);
34
+}
35
+
36
+static void OBSStopRecording(void *data, calldata_t *params)
37
+{
38
+   BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
39
+
40
+   QMetaObject::invokeMethod(output->main, "RecordingStop");
41
+   output->activeRefs--;
42
+
43
+   UNUSED_PARAMETER(params);
44
+}
45
+
46
+/* ------------------------------------------------------------------------ */
47
+
48
+struct SimpleOutput : BasicOutputHandler {
49
+   OBSEncoder             aac;
50
+   OBSEncoder             h264;
51
+
52
+   SimpleOutput(OBSBasic *main_);
53
+
54
+   virtual void Update() override;
55
+
56
+   void SetupOutputs();
57
+
58
+   virtual bool StartStreaming(obs_service_t *service) override;
59
+   virtual bool StartRecording() override;
60
+   virtual void StopStreaming() override;
61
+   virtual void StopRecording() override;
62
+   virtual bool StreamingActive() const override;
63
+   virtual bool RecordingActive() const override;
64
+};
65
+
66
+SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_)
67
+{
68
+   streamOutput = obs_output_create("rtmp_output", "simple_stream",
69
+           nullptr);
70
+   if (!streamOutput)
71
+       throw "Failed to create stream output (simple output)";
72
+
73
+   fileOutput = obs_output_create("flv_output", "simple_file_output",
74
+           nullptr);
75
+   if (!fileOutput)
76
+       throw "Failed to create recording output (simple output)";
77
+
78
+   h264 = obs_video_encoder_create("obs_x264", "simple_h264", nullptr);
79
+   if (!h264)
80
+       throw "Failed to create h264 encoder (simple output)";
81
+
82
+   aac = obs_audio_encoder_create("libfdk_aac", "simple_aac", nullptr, 0);
83
+   if (!aac)
84
+       aac = obs_audio_encoder_create("ffmpeg_aac", "simple_aac",
85
+               nullptr, 0);
86
+   if (!aac)
87
+       throw "Failed to create audio encoder (simple output)";
88
+
89
+   signal_handler_connect(obs_output_get_signal_handler(streamOutput),
90
+           "start", OBSStartStreaming, this);
91
+   signal_handler_connect(obs_output_get_signal_handler(streamOutput),
92
+           "stop", OBSStopStreaming, this);
93
+
94
+   signal_handler_connect(obs_output_get_signal_handler(fileOutput),
95
+           "start", OBSStartRecording, this);
96
+   signal_handler_connect(obs_output_get_signal_handler(fileOutput),
97
+           "stop", OBSStopRecording, this);
98
+}
99
+
100
+void SimpleOutput::Update()
101
+{
102
+   obs_data_t *h264Settings = obs_data_create();
103
+   obs_data_t *aacSettings  = obs_data_create();
104
+
105
+   int videoBitrate = config_get_uint(main->Config(), "SimpleOutput",
106
+           "VBitrate");
107
+   int videoBufsize = config_get_uint(main->Config(), "SimpleOutput",
108
+           "Bufsize");
109
+   int audioBitrate = config_get_uint(main->Config(), "SimpleOutput",
110
+           "ABitrate");
111
+   bool advanced = config_get_bool(main->Config(), "SimpleOutput",
112
+           "UseAdvanced");
113
+   bool useCBR = config_get_bool(main->Config(), "SimpleOutput",
114
+           "UseCBR");
115
+   bool useBufsize = config_get_bool(main->Config(), "SimpleOutput",
116
+           "UseBufsize");
117
+   const char *preset = config_get_string(main->Config(),
118
+           "SimpleOutput", "Preset");
119
+   const char *custom = config_get_string(main->Config(),
120
+           "SimpleOutput", "x264Settings");
121
+
122
+   obs_data_set_int(h264Settings, "bitrate", videoBitrate);
123
+   obs_data_set_bool(h264Settings, "use_bufsize", useBufsize);
124
+   obs_data_set_int(h264Settings, "buffer_size", videoBufsize);
125
+
126
+   if (advanced) {
127
+       obs_data_set_string(h264Settings, "preset", preset);
128
+       obs_data_set_string(h264Settings, "x264opts", custom);
129
+       obs_data_set_bool(h264Settings, "cbr", useCBR);
130
+   } else {
131
+       obs_data_set_bool(h264Settings, "cbr", true);
132
+   }
133
+
134
+   obs_data_set_int(aacSettings, "bitrate", audioBitrate);
135
+
136
+   obs_encoder_update(h264, h264Settings);
137
+   obs_encoder_update(aac,  aacSettings);
138
+
139
+   obs_data_release(h264Settings);
140
+   obs_data_release(aacSettings);
141
+}
142
+
143
+inline void SimpleOutput::SetupOutputs()
144
+{
145
+   SimpleOutput::Update();
146
+   obs_encoder_set_video(h264, obs_get_video());
147
+   obs_encoder_set_audio(aac,  obs_get_audio());
148
+
149
+   obs_service_apply_encoder_settings(main->GetService(), h264, aac);
150
+}
151
+
152
+bool SimpleOutput::StartStreaming(obs_service_t *service)
153
+{
154
+   if (!Active())
155
+       SetupOutputs();
156
+
157
+   obs_output_set_video_encoder(streamOutput, h264);
158
+   obs_output_set_audio_encoder(streamOutput, aac, 0);
159
+   obs_output_set_service(streamOutput, service);
160
+
161
+   bool reconnect = config_get_bool(main->Config(), "SimpleOutput",
162
+           "Reconnect");
163
+   int retryDelay = config_get_uint(main->Config(), "SimpleOutput",
164
+           "RetryDelay");
165
+   int maxRetries = config_get_uint(main->Config(), "SimpleOutput",
166
+           "MaxRetries");
167
+   if (!reconnect)
168
+       maxRetries = 0;
169
+
170
+   obs_output_set_reconnect_settings(streamOutput, maxRetries,
171
+           retryDelay);
172
+
173
+   if (obs_output_start(streamOutput)) {
174
+       activeRefs++;
175
+       return true;
176
+   }
177
+
178
+   return false;
179
+}
180
+
181
+bool SimpleOutput::StartRecording()
182
+{
183
+   if (!Active())
184
+       SetupOutputs();
185
+
186
+   const char *path = config_get_string(main->Config(),
187
+           "SimpleOutput", "FilePath");
188
+
189
+   os_dir_t *dir = path ? os_opendir(path) : nullptr;
190
+
191
+   if (!dir) {
192
+       QMessageBox::information(main,
193
+               QTStr("Output.BadPath.Title"),
194
+               QTStr("Output.BadPath.Text"));
195
+       return false;
196
+   }
197
+
198
+   os_closedir(dir);
199
+
200
+   string strPath;
201
obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-main-outputs.hpp Added
30
 
1
@@ -0,0 +1,28 @@
2
+#pragma once
3
+
4
+class OBSBasic;
5
+
6
+struct BasicOutputHandler {
7
+   OBSOutput              fileOutput;
8
+   OBSOutput              streamOutput;
9
+   int                    activeRefs = 0;
10
+   OBSBasic               *main;
11
+
12
+   inline BasicOutputHandler(OBSBasic *main_) : main(main_) {}
13
+
14
+   virtual ~BasicOutputHandler() {};
15
+
16
+   virtual bool StartStreaming(obs_service_t *service) = 0;
17
+   virtual bool StartRecording() = 0;
18
+   virtual void StopStreaming() = 0;
19
+   virtual void StopRecording() = 0;
20
+   virtual bool StreamingActive() const = 0;
21
+   virtual bool RecordingActive() const = 0;
22
+
23
+   virtual void Update() = 0;
24
+
25
+   inline bool Active() const {return !!activeRefs;}
26
+};
27
+
28
+BasicOutputHandler *CreateSimpleOutputHandler(OBSBasic *main);
29
+BasicOutputHandler *CreateAdvancedOutputHandler(OBSBasic *main);
30
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-main.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-main.cpp Changed
201
 
1
@@ -36,6 +36,7 @@
2
 #include "window-namedialog.hpp"
3
 #include "window-basic-source-select.hpp"
4
 #include "window-basic-main.hpp"
5
+#include "window-basic-main-outputs.hpp"
6
 #include "window-basic-properties.hpp"
7
 #include "window-log-reply.hpp"
8
 #include "window-remux.hpp"
9
@@ -62,10 +63,11 @@
10
 
11
 static void AddExtraModulePaths()
12
 {
13
-   BPtr<char> base_module_dir =
14
-       os_get_config_path("obs-studio/plugins/%module%");
15
+   char base_module_dir[512];
16
+   int ret = os_get_config_path(base_module_dir, sizeof(base_module_dir),
17
+           "obs-studio/plugins/%module%");
18
 
19
-   if (!base_module_dir)
20
+   if (ret <= 0)
21
        return;
22
 
23
    string path = (char*)base_module_dir;
24
@@ -80,6 +82,17 @@
25
 {
26
    ui->setupUi(this);
27
 
28
+   char styleSheetPath[512];
29
+   int ret = os_get_config_path(styleSheetPath, sizeof(styleSheetPath),
30
+           "obs-studio/basic/stylesheet.qss");
31
+   if (ret > 0) {
32
+       if (QFile::exists(styleSheetPath)) {
33
+           QString path = QString("file:///") +
34
+               QT_UTF8(styleSheetPath);
35
+           App()->setStyleSheet(path);
36
+       }
37
+   }
38
+
39
    qRegisterMetaType<OBSScene>    ("OBSScene");
40
    qRegisterMetaType<OBSSceneItem>("OBSSceneItem");
41
    qRegisterMetaType<OBSSource>   ("OBSSource");
42
@@ -282,36 +295,6 @@
43
    return count != 0;
44
 }
45
 
46
-static void OBSStartStreaming(void *data, calldata_t *params)
47
-{
48
-   UNUSED_PARAMETER(params);
49
-   QMetaObject::invokeMethod(static_cast<OBSBasic*>(data),
50
-           "StreamingStart");
51
-}
52
-
53
-static void OBSStopStreaming(void *data, calldata_t *params)
54
-{
55
-   int code = (int)calldata_int(params, "code");
56
-   QMetaObject::invokeMethod(static_cast<OBSBasic*>(data),
57
-           "StreamingStop", Q_ARG(int, code));
58
-}
59
-
60
-static void OBSStartRecording(void *data, calldata_t *params)
61
-{
62
-   UNUSED_PARAMETER(params);
63
-
64
-   QMetaObject::invokeMethod(static_cast<OBSBasic*>(data),
65
-           "RecordingStart");
66
-}
67
-
68
-static void OBSStopRecording(void *data, calldata_t *params)
69
-{
70
-   UNUSED_PARAMETER(params);
71
-
72
-   QMetaObject::invokeMethod(static_cast<OBSBasic*>(data),
73
-           "RecordingStop");
74
-}
75
-
76
 #define SERVICE_PATH "obs-studio/basic/service.json"
77
 
78
 void OBSBasic::SaveService()
79
@@ -319,14 +302,16 @@
80
    if (!service)
81
        return;
82
 
83
-   BPtr<char> serviceJsonPath(os_get_config_path(SERVICE_PATH));
84
-   if (!serviceJsonPath)
85
+   char serviceJsonPath[512];
86
+   int ret = os_get_config_path(serviceJsonPath, sizeof(serviceJsonPath),
87
+           SERVICE_PATH);
88
+   if (ret <= 0)
89
        return;
90
 
91
    obs_data_t *data     = obs_data_create();
92
    obs_data_t *settings = obs_service_get_settings(service);
93
 
94
-   obs_data_set_string(data, "type", obs_service_gettype(service));
95
+   obs_data_set_string(data, "type", obs_service_get_type(service));
96
    obs_data_set_obj(data, "settings", settings);
97
 
98
    const char *json = obs_data_get_json(data);
99
@@ -341,8 +326,15 @@
100
 {
101
    const char *type;
102
 
103
-   BPtr<char> serviceJsonPath(os_get_config_path(SERVICE_PATH));
104
-   if (!serviceJsonPath)
105
+   if (service) {
106
+       obs_service_destroy(service);
107
+       service = nullptr;
108
+   }
109
+
110
+   char serviceJsonPath[512];
111
+   int ret = os_get_config_path(serviceJsonPath, sizeof(serviceJsonPath),
112
+           SERVICE_PATH);
113
+   if (ret <= 0)
114
        return false;
115
 
116
    BPtr<char> jsonText = os_quick_read_utf8_file(serviceJsonPath);
117
@@ -364,49 +356,6 @@
118
    return !!service;
119
 }
120
 
121
-bool OBSBasic::InitOutputs()
122
-{
123
-   fileOutput = obs_output_create("flv_output", "default_file_output",
124
-           nullptr);
125
-   if (!fileOutput)
126
-       return false;
127
-
128
-   streamOutput = obs_output_create("rtmp_output", "default_stream",
129
-           nullptr);
130
-   if (!streamOutput)
131
-       return false;
132
-
133
-   signal_handler_connect(obs_output_get_signal_handler(streamOutput),
134
-           "start", OBSStartStreaming, this);
135
-   signal_handler_connect(obs_output_get_signal_handler(streamOutput),
136
-           "stop", OBSStopStreaming, this);
137
-
138
-   signal_handler_connect(obs_output_get_signal_handler(fileOutput),
139
-           "start", OBSStartRecording, this);
140
-   signal_handler_connect(obs_output_get_signal_handler(fileOutput),
141
-           "stop", OBSStopRecording, this);
142
-
143
-   return true;
144
-}
145
-
146
-bool OBSBasic::InitEncoders()
147
-{
148
-   x264 = obs_video_encoder_create("obs_x264", "default_h264", nullptr);
149
-   if (!x264)
150
-       return false;
151
-
152
-   aac = obs_audio_encoder_create("libfdk_aac", "default_aac", nullptr);
153
-
154
-   if (!aac)
155
-       aac = obs_audio_encoder_create("ffmpeg_aac", "default_aac",
156
-               nullptr);
157
-
158
-   if (!aac)
159
-       return false;
160
-
161
-   return true;
162
-}
163
-
164
 bool OBSBasic::InitService()
165
 {
166
    if (LoadService())
167
@@ -441,7 +390,8 @@
168
    uint32_t cx = monitors[0].cx;
169
    uint32_t cy = monitors[0].cy;
170
 
171
-   /* TODO: temporary */
172
+   config_set_default_string(basicConfig, "Output", "Type", "Simple");
173
+
174
    config_set_default_string(basicConfig, "SimpleOutput", "FilePath",
175
            GetDefaultVideoSavePath().c_str());
176
    config_set_default_uint  (basicConfig, "SimpleOutput", "VBitrate",
177
@@ -455,9 +405,47 @@
178
    config_set_default_bool  (basicConfig, "SimpleOutput", "UseAdvanced",
179
            false);
180
    config_set_default_bool  (basicConfig, "SimpleOutput", "UseCBR", true);
181
+   config_set_default_bool  (basicConfig, "SimpleOutput", "UseBufsize",
182
+           false);
183
+   config_set_default_int   (basicConfig, "SimpleOutput", "Bufsize", 2500);
184
    config_set_default_string(basicConfig, "SimpleOutput", "Preset",
185
            "veryfast");
186
 
187
+   config_set_default_bool  (basicConfig, "AdvOut", "Reconnect", true);
188
+   config_set_default_uint  (basicConfig, "AdvOut", "RetryDelay", 2);
189
+   config_set_default_uint  (basicConfig, "AdvOut", "MaxRetries", 20);
190
+   config_set_default_bool  (basicConfig, "AdvOut", "ApplyServiceSettings",
191
+           true);
192
+   config_set_default_bool  (basicConfig, "AdvOut", "UseRescale", false);
193
+   config_set_default_bool  (basicConfig, "AdvOut", "Multitrack", false);
194
+   config_set_default_uint  (basicConfig, "AdvOut", "TrackIndex", 1);
195
+   config_set_default_uint  (basicConfig, "AdvOut", "TrackCount", 1);
196
+   config_set_default_string(basicConfig, "AdvOut", "Encoder", "obs_x264");
197
+
198
+   config_set_default_string(basicConfig, "AdvOut", "RecType", "Standard");
199
+
200
+   config_set_default_string(basicConfig, "AdvOut", "RecFilePath",
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-main.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-main.hpp Changed
76
 
1
@@ -47,6 +47,8 @@
2
 #define AUX_AUDIO_2     Str("AuxAudioDevice2")
3
 #define AUX_AUDIO_3     Str("AuxAudioDevice3")
4
 
5
+struct BasicOutputHandler;
6
+
7
 class OBSBasic : public OBSMainWindow {
8
    Q_OBJECT
9
 
10
@@ -69,11 +71,8 @@
11
    QPointer<QTimer>    cpuUsageTimer;
12
    os_cpu_usage_info_t *cpuUsageInfo = nullptr;
13
 
14
-   obs_output_t  *fileOutput = nullptr;
15
-   obs_output_t  *streamOutput = nullptr;
16
    obs_service_t *service = nullptr;
17
-   obs_encoder_t *aac = nullptr;
18
-   obs_encoder_t *x264 = nullptr;
19
+   std::unique_ptr<BasicOutputHandler> outputHandler;
20
 
21
    gs_vertbuffer_t *box = nullptr;
22
    gs_vertbuffer_t *circle = nullptr;
23
@@ -87,8 +86,6 @@
24
 
25
    ConfigFile    basicConfig;
26
 
27
-   int           activeRefs = 0;
28
-
29
    void          DrawBackdrop(float cx, float cy);
30
 
31
    void          SetupEncoders();
32
@@ -102,11 +99,6 @@
33
    void          Save(const char *file);
34
    void          Load(const char *file);
35
 
36
-   void          SaveService();
37
-   bool          LoadService();
38
-
39
-   bool          InitOutputs();
40
-   bool          InitEncoders();
41
    bool          InitService();
42
 
43
    bool          InitBasicConfigDefaults();
44
@@ -197,9 +189,13 @@
45
    obs_service_t *GetService();
46
    void          SetService(obs_service_t *service);
47
 
48
+   bool StreamingActive();
49
+
50
    int  ResetVideo();
51
    bool ResetAudio();
52
 
53
+   void ResetOutputs();
54
+
55
    void ResetAudioDevice(const char *sourceId, const char *deviceName,
56
            const char *deviceDesc, int channel);
57
    void ResetAudioDevices();
58
@@ -220,6 +216,9 @@
59
        return os_cpu_usage_info_query(cpuUsageInfo);
60
    }
61
 
62
+   void SaveService();
63
+   bool LoadService();
64
+
65
 protected:
66
    virtual void closeEvent(QCloseEvent *event) override;
67
    virtual void changeEvent(QEvent *event) override;
68
@@ -234,6 +233,7 @@
69
    void on_actionRemux_triggered();
70
    void on_action_Settings_triggered();
71
    void on_actionAdvAudioProperties_triggered();
72
+   void on_advAudioProps_clicked();
73
    void on_actionShowLogs_triggered();
74
    void on_actionUploadCurrentLog_triggered();
75
    void on_actionUploadLastLog_triggered();
76
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-properties.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-properties.cpp Changed
146
 
1
@@ -24,6 +24,7 @@
2
 #include <QCloseEvent>
3
 #include <QScreen>
4
 #include <QWindow>
5
+#include <QMessageBox>
6
 
7
 using namespace std;
8
 
9
@@ -31,6 +32,7 @@
10
    : QDialog                (parent),
11
      main                   (qobject_cast<OBSBasic*>(parent)),
12
      resizeTimer            (0),
13
+     acceptClicked          (false),
14
      ui                     (new Ui::OBSBasicProperties),
15
      source                 (source_),
16
      removedSignal          (obs_source_get_signal_handler(source),
17
@@ -39,20 +41,26 @@
18
      updatePropertiesSignal (obs_source_get_signal_handler(source),
19
                              "update_properties",
20
                              OBSBasicProperties::UpdateProperties,
21
-                             this)
22
-
23
+                             this),
24
+     oldSettings            (obs_data_create()),
25
+     buttonBox              (new QDialogButtonBox(this))
26
 {
27
    int cx = (int)config_get_int(App()->GlobalConfig(), "PropertiesWindow",
28
            "cx");
29
    int cy = (int)config_get_int(App()->GlobalConfig(), "PropertiesWindow",
30
            "cy");
31
 
32
+   buttonBox->setStandardButtons(QDialogButtonBox::Ok |
33
+           QDialogButtonBox::Cancel);
34
+   buttonBox->setObjectName(QStringLiteral("buttonBox"));
35
+
36
    ui->setupUi(this);
37
 
38
    if (cx > 400 && cy > 400)
39
        resize(cx, cy);
40
 
41
    OBSData settings = obs_source_get_settings(source);
42
+   obs_data_apply(oldSettings, settings);
43
    obs_data_release(settings);
44
 
45
    view = new OBSPropertiesView(settings, source,
46
@@ -60,6 +68,8 @@
47
            (PropertiesUpdateCallback)obs_source_update);
48
 
49
    layout()->addWidget(view);
50
+   layout()->addWidget(buttonBox);
51
+   layout()->setAlignment(buttonBox, Qt::AlignRight | Qt::AlignBottom);
52
    layout()->setAlignment(view, Qt::AlignBottom);
53
    view->setMaximumHeight(250);
54
    view->setMinimumHeight(150);
55
@@ -92,6 +102,26 @@
56
            "ReloadProperties");
57
 }
58
 
59
+void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button)
60
+{
61
+   QDialogButtonBox::ButtonRole val = buttonBox->buttonRole(button);
62
+
63
+   if (val == QDialogButtonBox::AcceptRole) {
64
+       acceptClicked = true;
65
+       close();
66
+   }
67
+
68
+   if (val == QDialogButtonBox::RejectRole) {
69
+       obs_data_t *settings = obs_source_get_settings(source);
70
+       obs_data_clear(settings);
71
+       obs_data_release(settings);
72
+
73
+       obs_source_update(source, oldSettings);
74
+
75
+       close();
76
+   }
77
+}
78
+
79
 void OBSBasicProperties::DrawPreview(void *data, uint32_t cx, uint32_t cy)
80
 {
81
    OBSBasicProperties *window = static_cast<OBSBasicProperties*>(data);
82
@@ -154,10 +184,19 @@
83
 
84
 void OBSBasicProperties::closeEvent(QCloseEvent *event)
85
 {
86
+   if (!acceptClicked && (CheckSettings() != 0)) {
87
+       if (!ConfirmQuit()) {
88
+           event->ignore();
89
+           return;
90
+       }
91
+   }
92
+
93
    QDialog::closeEvent(event);
94
    if (!event->isAccepted())
95
        return;
96
 
97
+   obs_data_release(oldSettings);
98
+
99
    // remove draw callback and release display in case our drawable
100
    // surfaces go away before the destructor gets called
101
    obs_display_remove_draw_callback(display,
102
@@ -188,3 +227,43 @@
103
        obs_display_add_draw_callback(display,
104
                OBSBasicProperties::DrawPreview, this);
105
 }
106
+
107
+int OBSBasicProperties::CheckSettings()
108
+{
109
+   OBSData currentSettings = obs_source_get_settings(source);
110
+   const char *oldSettingsJson = obs_data_get_json(oldSettings);
111
+   const char *currentSettingsJson = obs_data_get_json(currentSettings);
112
+
113
+   int ret = strcmp(currentSettingsJson, oldSettingsJson);
114
+
115
+   obs_data_release(currentSettings);
116
+   return ret;
117
+}
118
+
119
+bool OBSBasicProperties::ConfirmQuit()
120
+{
121
+   QMessageBox::StandardButton button;
122
+
123
+   button = QMessageBox::question(this,
124
+           QTStr("Basic.PropertiesWindow.ConfirmTitle"),
125
+           QTStr("Basic.PropertiesWindow.Confirm"),
126
+           QMessageBox::Save | QMessageBox::Discard |
127
+           QMessageBox::Cancel);
128
+
129
+   switch (button) {
130
+   case QMessageBox::Save:
131
+       // Do nothing because the settings are already updated
132
+       break;
133
+   case QMessageBox::Discard:
134
+       obs_source_update(source, oldSettings);
135
+       break;
136
+   case QMessageBox::Cancel:
137
+       return false;
138
+       break;
139
+   default:
140
+       /* If somehow the dialog fails to show, just default to
141
+        * saving the settings. */
142
+       break;
143
+   }
144
+   return true;
145
+}
146
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-properties.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-properties.hpp Changed
38
 
1
@@ -18,8 +18,8 @@
2
 #pragma once
3
 
4
 #include <QDialog>
5
+#include <QDialogButtonBox>
6
 #include <memory>
7
-
8
 #include <obs.hpp>
9
 
10
 #include "properties-view.hpp"
11
@@ -34,20 +34,26 @@
12
 private:
13
    OBSBasic   *main;
14
    int        resizeTimer;
15
+   bool       acceptClicked;
16
 
17
    std::unique_ptr<Ui::OBSBasicProperties> ui;
18
    OBSSource  source;
19
    OBSDisplay display;
20
    OBSSignal  removedSignal;
21
    OBSSignal  updatePropertiesSignal;
22
+   OBSData    oldSettings;
23
    OBSPropertiesView *view;
24
+   QDialogButtonBox *buttonBox;
25
 
26
    static void SourceRemoved(void *data, calldata_t *params);
27
    static void UpdateProperties(void *data, calldata_t *params);
28
    static void DrawPreview(void *data, uint32_t cx, uint32_t cy);
29
+   bool ConfirmQuit();
30
+   int  CheckSettings();
31
 
32
 private slots:
33
    void OnPropertiesResized();
34
+   void on_buttonBox_clicked(QAbstractButton *button);
35
 
36
 public:
37
    OBSBasicProperties(QWidget *parent, OBSSource source_);
38
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-settings.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-settings.cpp Changed
201
 
1
@@ -114,24 +114,20 @@
2
 #define SCROLL_CHANGED  SIGNAL(valueChanged(int))
3
 
4
 #define GENERAL_CHANGED SLOT(GeneralChanged())
5
+#define STREAM1_CHANGED SLOT(Stream1Changed())
6
 #define OUTPUTS_CHANGED SLOT(OutputsChanged())
7
 #define AUDIO_RESTART   SLOT(AudioChangedRestart())
8
 #define AUDIO_CHANGED   SLOT(AudioChanged())
9
 #define VIDEO_RESTART   SLOT(VideoChangedRestart())
10
 #define VIDEO_RES       SLOT(VideoChangedResolution())
11
 #define VIDEO_CHANGED   SLOT(VideoChanged())
12
+#define ADV_CHANGED     SLOT(AdvancedChanged())
13
+#define ADV_RESTART     SLOT(AdvancedChangedRestart())
14
 
15
 OBSBasicSettings::OBSBasicSettings(QWidget *parent)
16
    : QDialog          (parent),
17
      main             (qobject_cast<OBSBasic*>(parent)),
18
-     ui               (new Ui::OBSBasicSettings),
19
-     generalChanged   (false),
20
-     outputsChanged   (false),
21
-     audioChanged     (false),
22
-     videoChanged     (false),
23
-     pageIndex        (0),
24
-     loading          (true),
25
-     streamProperties (nullptr)
26
+     ui               (new Ui::OBSBasicSettings)
27
 {
28
    string path;
29
 
30
@@ -139,6 +135,7 @@
31
 
32
    HookWidget(ui->language,             COMBO_CHANGED,  GENERAL_CHANGED);
33
    HookWidget(ui->outputMode,           COMBO_CHANGED,  OUTPUTS_CHANGED);
34
+   HookWidget(ui->streamType,           COMBO_CHANGED,  STREAM1_CHANGED);
35
    HookWidget(ui->simpleOutputPath,     EDIT_CHANGED,   OUTPUTS_CHANGED);
36
    HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED);
37
    HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED,  OUTPUTS_CHANGED);
38
@@ -148,7 +145,51 @@
39
    HookWidget(ui->simpleOutAdvanced,    CHECK_CHANGED,  OUTPUTS_CHANGED);
40
    HookWidget(ui->simpleOutUseCBR,      CHECK_CHANGED,  OUTPUTS_CHANGED);
41
    HookWidget(ui->simpleOutPreset,      COMBO_CHANGED,  OUTPUTS_CHANGED);
42
-   HookWidget(ui->simpleOutCustomX264,  EDIT_CHANGED,   OUTPUTS_CHANGED);
43
+   HookWidget(ui->simpleOutUseBufsize,  CHECK_CHANGED,  OUTPUTS_CHANGED);
44
+   HookWidget(ui->simpleOutPreset,      COMBO_CHANGED,  OUTPUTS_CHANGED);
45
+   HookWidget(ui->simpleOutVBufsize,    SCROLL_CHANGED, OUTPUTS_CHANGED);
46
+   HookWidget(ui->simpleOutCustom,      EDIT_CHANGED,   OUTPUTS_CHANGED);
47
+   HookWidget(ui->advOutReconnect,      CHECK_CHANGED,  OUTPUTS_CHANGED);
48
+   HookWidget(ui->advOutRetryDelay,     SCROLL_CHANGED, OUTPUTS_CHANGED);
49
+   HookWidget(ui->advOutMaxRetries,     SCROLL_CHANGED, OUTPUTS_CHANGED);
50
+   HookWidget(ui->advOutEncoder,        COMBO_CHANGED,  OUTPUTS_CHANGED);
51
+   HookWidget(ui->advOutUseRescale,     CHECK_CHANGED,  OUTPUTS_CHANGED);
52
+   HookWidget(ui->advOutRescale,        CBEDIT_CHANGED, OUTPUTS_CHANGED);
53
+   HookWidget(ui->advOutTrack1,         CHECK_CHANGED,  OUTPUTS_CHANGED);
54
+   HookWidget(ui->advOutTrack2,         CHECK_CHANGED,  OUTPUTS_CHANGED);
55
+   HookWidget(ui->advOutTrack3,         CHECK_CHANGED,  OUTPUTS_CHANGED);
56
+   HookWidget(ui->advOutTrack4,         CHECK_CHANGED,  OUTPUTS_CHANGED);
57
+   HookWidget(ui->advOutApplyService,   CHECK_CHANGED,  OUTPUTS_CHANGED);
58
+   HookWidget(ui->advOutRecType,        COMBO_CHANGED,  OUTPUTS_CHANGED);
59
+   HookWidget(ui->advOutRecPath,        EDIT_CHANGED,   OUTPUTS_CHANGED);
60
+   HookWidget(ui->advOutRecEncoder,     COMBO_CHANGED,  OUTPUTS_CHANGED);
61
+   HookWidget(ui->advOutRecUseRescale,  CHECK_CHANGED,  OUTPUTS_CHANGED);
62
+   HookWidget(ui->advOutRecRescale,     CBEDIT_CHANGED, OUTPUTS_CHANGED);
63
+   HookWidget(ui->advOutRecTrack1,      CHECK_CHANGED,  OUTPUTS_CHANGED);
64
+   HookWidget(ui->advOutRecTrack2,      CHECK_CHANGED,  OUTPUTS_CHANGED);
65
+   HookWidget(ui->advOutRecTrack3,      CHECK_CHANGED,  OUTPUTS_CHANGED);
66
+   HookWidget(ui->advOutRecTrack4,      CHECK_CHANGED,  OUTPUTS_CHANGED);
67
+   HookWidget(ui->advOutFFURL,          EDIT_CHANGED,   OUTPUTS_CHANGED);
68
+   HookWidget(ui->advOutFFVBitrate,     SCROLL_CHANGED, OUTPUTS_CHANGED);
69
+   HookWidget(ui->advOutFFUseRescale,   CHECK_CHANGED,  OUTPUTS_CHANGED);
70
+   HookWidget(ui->advOutFFRescale,      CBEDIT_CHANGED, OUTPUTS_CHANGED);
71
+   HookWidget(ui->advOutFFVEncoder,     EDIT_CHANGED,   OUTPUTS_CHANGED);
72
+   HookWidget(ui->advOutFFVCfg,         EDIT_CHANGED,   OUTPUTS_CHANGED);
73
+   HookWidget(ui->advOutFFABitrate,     SCROLL_CHANGED, OUTPUTS_CHANGED);
74
+   HookWidget(ui->advOutFFTrack1,       CHECK_CHANGED,  OUTPUTS_CHANGED);
75
+   HookWidget(ui->advOutFFTrack2,       CHECK_CHANGED,  OUTPUTS_CHANGED);
76
+   HookWidget(ui->advOutFFTrack3,       CHECK_CHANGED,  OUTPUTS_CHANGED);
77
+   HookWidget(ui->advOutFFTrack4,       CHECK_CHANGED,  OUTPUTS_CHANGED);
78
+   HookWidget(ui->advOutFFAEncoder,     EDIT_CHANGED,   OUTPUTS_CHANGED);
79
+   HookWidget(ui->advOutFFACfg,         EDIT_CHANGED,   OUTPUTS_CHANGED);
80
+   HookWidget(ui->advOutTrack1Bitrate,  COMBO_CHANGED,  OUTPUTS_CHANGED);
81
+   HookWidget(ui->advOutTrack1Name,     EDIT_CHANGED,   OUTPUTS_CHANGED);
82
+   HookWidget(ui->advOutTrack2Bitrate,  COMBO_CHANGED,  OUTPUTS_CHANGED);
83
+   HookWidget(ui->advOutTrack2Name,     EDIT_CHANGED,   OUTPUTS_CHANGED);
84
+   HookWidget(ui->advOutTrack3Bitrate,  COMBO_CHANGED,  OUTPUTS_CHANGED);
85
+   HookWidget(ui->advOutTrack3Name,     EDIT_CHANGED,   OUTPUTS_CHANGED);
86
+   HookWidget(ui->advOutTrack4Bitrate,  COMBO_CHANGED,  OUTPUTS_CHANGED);
87
+   HookWidget(ui->advOutTrack4Name,     EDIT_CHANGED,   OUTPUTS_CHANGED);
88
    HookWidget(ui->channelSetup,         COMBO_CHANGED,  AUDIO_RESTART);
89
    HookWidget(ui->sampleRate,           COMBO_CHANGED,  AUDIO_RESTART);
90
    HookWidget(ui->desktopAudioDevice1,  COMBO_CHANGED,  AUDIO_CHANGED);
91
@@ -167,12 +208,17 @@
92
    HookWidget(ui->fpsInteger,           SCROLL_CHANGED, VIDEO_CHANGED);
93
    HookWidget(ui->fpsNumerator,         SCROLL_CHANGED, VIDEO_CHANGED);
94
    HookWidget(ui->fpsDenominator,       SCROLL_CHANGED, VIDEO_CHANGED);
95
+   HookWidget(ui->audioBufferingTime,   SCROLL_CHANGED, ADV_RESTART);
96
+   HookWidget(ui->colorFormat,          COMBO_CHANGED,  ADV_CHANGED);
97
+   HookWidget(ui->colorSpace,           COMBO_CHANGED,  ADV_CHANGED);
98
+   HookWidget(ui->colorRange,           COMBO_CHANGED,  ADV_CHANGED);
99
 
100
    //Apply button disabled until change.
101
    EnableApplyButton(false);
102
 
103
    LoadServiceTypes();
104
-   LoadServiceInfo();
105
+   LoadEncoderTypes();
106
+   LoadColorRanges();
107
    LoadSettings(false);
108
 }
109
 
110
@@ -194,12 +240,15 @@
111
    }
112
 }
113
 
114
-void OBSBasicSettings::SaveCheckBox(QCheckBox *widget, const char *section,
115
-       const char *value)
116
+void OBSBasicSettings::SaveCheckBox(QAbstractButton *widget,
117
+       const char *section, const char *value, bool invert)
118
 {
119
-   if (WidgetChanged(widget))
120
-       config_set_bool(main->Config(), section, value,
121
-               widget->isChecked());
122
+   if (WidgetChanged(widget)) {
123
+       bool checked = widget->isChecked();
124
+       if (invert) checked = !checked;
125
+
126
+       config_set_bool(main->Config(), section, value, checked);
127
+   }
128
 }
129
 
130
 void OBSBasicSettings::SaveEdit(QLineEdit *widget, const char *section,
131
@@ -230,25 +279,42 @@
132
        ui->streamType->addItem(qName, qType);
133
    }
134
 
135
-   type = obs_service_gettype(main->GetService());
136
+   type = obs_service_get_type(main->GetService());
137
    SetComboByValue(ui->streamType, type);
138
 }
139
 
140
-void OBSBasicSettings::LoadServiceInfo()
141
+#define TEXT_USE_STREAM_ENC \
142
+   QTStr("Basic.Settings.Output.Adv.Recording.UseStreamEncoder")
143
+
144
+void OBSBasicSettings::LoadEncoderTypes()
145
 {
146
-   QLayout          *layout    = ui->streamContainer->layout();
147
-   obs_service_t    *service    = main->GetService();
148
-   obs_data_t       *settings   = obs_service_get_settings(service);
149
+   const char    *type;
150
+   size_t        idx = 0;
151
 
152
-   delete streamProperties;
153
-   streamProperties = new OBSPropertiesView(settings, service,
154
-           (PropertiesReloadCallback)obs_service_properties,
155
-           (PropertiesUpdateCallback)obs_service_update,
156
-           170);
157
+   ui->advOutRecEncoder->addItem(TEXT_USE_STREAM_ENC, "none");
158
 
159
-   layout->addWidget(streamProperties);
160
+   while (obs_enum_encoder_types(idx++, &type)) {
161
+       const char *name = obs_encoder_get_display_name(type);
162
+       const char *codec = obs_get_encoder_codec(type);
163
 
164
-   obs_data_release(settings);
165
+       if (strcmp(codec, "h264") != 0)
166
+           continue;
167
+
168
+       QString qName = QT_UTF8(name);
169
+       QString qType = QT_UTF8(type);
170
+
171
+       ui->advOutEncoder->addItem(qName, qType);
172
+       ui->advOutRecEncoder->addItem(qName, qType);
173
+   }
174
+}
175
+
176
+#define CS_PARTIAL_STR QTStr("Basic.Settings.Advanced.Video.ColorRange.Partial")
177
+#define CS_FULL_STR    QTStr("Basic.Settings.Advanced.Video.ColorRange.Full")
178
+
179
+void OBSBasicSettings::LoadColorRanges()
180
+{
181
+   ui->colorRange->addItem(CS_PARTIAL_STR, "Partial");
182
+   ui->colorRange->addItem(CS_FULL_STR, "Full");
183
 }
184
 
185
 void OBSBasicSettings::LoadLanguageList()
186
@@ -279,6 +345,37 @@
187
    loading = false;
188
 }
189
 
190
+void OBSBasicSettings::LoadStream1Settings()
191
+{
192
+   QLayout *layout = ui->streamContainer->layout();
193
+   obs_service_t *service = main->GetService();
194
+   const char *type = obs_service_get_type(service);
195
+
196
+   loading = true;
197
+
198
+   obs_data_t *settings = obs_service_get_settings(service);
199
+
200
+   delete streamProperties;
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/obs/window-basic-settings.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/obs/window-basic-settings.hpp Changed
141
 
1
@@ -37,21 +37,25 @@
2
    OBSBasic *main;
3
 
4
    std::unique_ptr<Ui::OBSBasicSettings> ui;
5
-   bool generalChanged;
6
-   bool outputsChanged;
7
-   bool audioChanged;
8
-   bool videoChanged;
9
-   int  pageIndex;
10
-   bool loading;
11
-
12
-   OBSPropertiesView *streamProperties;
13
+   bool generalChanged = false;
14
+   bool stream1Changed = false;
15
+   bool outputsChanged = false;
16
+   bool audioChanged = false;
17
+   bool videoChanged = false;
18
+   bool advancedChanged = false;
19
+   int  pageIndex = 0;
20
+   bool loading = true;
21
+
22
+   OBSPropertiesView *streamProperties = nullptr;
23
+   OBSPropertiesView *streamEncoderProps = nullptr;
24
+   OBSPropertiesView *recordEncoderProps = nullptr;
25
 
26
    void SaveCombo(QComboBox *widget, const char *section,
27
            const char *value);
28
    void SaveComboData(QComboBox *widget, const char *section,
29
            const char *value);
30
-   void SaveCheckBox(QCheckBox *widget, const char *section,
31
-           const char *value);
32
+   void SaveCheckBox(QAbstractButton *widget, const char *section,
33
+           const char *value, bool invert = false);
34
    void SaveEdit(QLineEdit *widget, const char *section,
35
            const char *value);
36
    void SaveSpinBox(QSpinBox *widget, const char *section,
37
@@ -59,8 +63,8 @@
38
 
39
    inline bool Changed() const
40
    {
41
-       return generalChanged || outputsChanged ||
42
-           audioChanged || videoChanged;
43
+       return generalChanged || outputsChanged || stream1Changed ||
44
+           audioChanged || videoChanged || advancedChanged;
45
    }
46
 
47
    inline void EnableApplyButton(bool en)
48
@@ -71,9 +75,11 @@
49
    inline void ClearChanged()
50
    {
51
        generalChanged = false;
52
+       stream1Changed = false;
53
        outputsChanged = false;
54
        audioChanged   = false;
55
        videoChanged   = false;
56
+       advancedChanged= false;
57
        EnableApplyButton(false);
58
    }
59
 
60
@@ -82,19 +88,31 @@
61
    bool QueryChanges();
62
 
63
    void LoadServiceTypes();
64
-   void LoadServiceInfo();
65
+   void LoadEncoderTypes();
66
+   void LoadColorRanges();
67
 
68
    void LoadGeneralSettings();
69
+   void LoadStream1Settings();
70
    void LoadOutputSettings();
71
    void LoadAudioSettings();
72
    void LoadVideoSettings();
73
+   void LoadAdvancedSettings();
74
    void LoadSettings(bool changedOnly);
75
 
76
+   OBSPropertiesView *CreateEncoderPropertyView(const char *encoder,
77
+           const char *path, bool changed = false);
78
+
79
    /* general */
80
    void LoadLanguageList();
81
 
82
    /* output */
83
    void LoadSimpleOutputSettings();
84
+   void LoadAdvOutputStreamingSettings();
85
+   void LoadAdvOutputStreamingEncoderProperties();
86
+   void LoadAdvOutputRecordingSettings();
87
+   void LoadAdvOutputRecordingEncoderProperties();
88
+   void LoadAdvOutputFFmpegSettings();
89
+   void LoadAdvOutputAudioSettings();
90
 
91
    /* audio */
92
    void LoadListValues(QComboBox *widget, obs_property_t *prop,
93
@@ -103,23 +121,33 @@
94
 
95
    /* video */
96
    void LoadRendererList();
97
-   void ResetDownscales(uint32_t cx, uint32_t cy);
98
+   void ResetDownscales(uint32_t cx, uint32_t cy,
99
+           uint32_t out_cx, uint32_t out_cy);
100
    void LoadDownscaleFilters();
101
    void LoadResolutionLists();
102
    void LoadFPSData();
103
 
104
    void SaveGeneralSettings();
105
+   void SaveStream1Settings();
106
    void SaveOutputSettings();
107
    void SaveAudioSettings();
108
    void SaveVideoSettings();
109
+   void SaveAdvancedSettings();
110
    void SaveSettings();
111
 
112
 private slots:
113
+   void on_simpleOutUseBufsize_toggled(bool checked);
114
+   void on_simpleOutputVBitrate_valueChanged(int val);
115
+
116
    void on_listWidget_itemSelectionChanged();
117
    void on_buttonBox_clicked(QAbstractButton *button);
118
 
119
    void on_streamType_currentIndexChanged(int idx);
120
    void on_simpleOutputBrowse_clicked();
121
+   void on_advOutRecPathBrowse_clicked();
122
+   void on_advOutFFPathBrowse_clicked();
123
+   void on_advOutEncoder_currentIndexChanged(int idx);
124
+   void on_advOutRecEncoder_currentIndexChanged(int idx);
125
 
126
    void on_baseResolution_editTextChanged(const QString &text);
127
 
128
@@ -127,9 +155,12 @@
129
    void AudioChanged();
130
    void AudioChangedRestart();
131
    void OutputsChanged();
132
+   void Stream1Changed();
133
    void VideoChanged();
134
    void VideoChangedResolution();
135
    void VideoChangedRestart();
136
+   void AdvancedChanged();
137
+   void AdvancedChangedRestart();
138
 
139
 protected:
140
    virtual void closeEvent(QCloseEvent *event);
141
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/CMakeLists.txt Changed
9
 
1
@@ -11,6 +11,7 @@
2
    add_subdirectory(linux-capture)
3
    add_subdirectory(linux-pulseaudio)
4
    add_subdirectory(linux-v4l2)
5
+   add_subdirectory(linux-jack)
6
 endif()
7
 
8
 add_subdirectory(image-source)
9
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/image-source/data/locale/cs-CZ.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+ImageInput="Obrázek"
3
+File="Soubor obrázku"
4
+
5
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/image-source/data/locale/zh-CN.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+ImageInput="图像"
3
+File="图像文件"
4
+
5
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/cs-CZ.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+X11SharedMemoryScreenInput="Snímání obrazovky (XSHM)"
3
+Screen="Obrazovka"
4
+CaptureCursor="Snímat kurzor"
5
+XCCapture="Snímání okna (Xcomposite)"
6
+Window="Okno"
7
+CropTop="Oříznout vršek (px)"
8
+CropLeft="Oříznout vlevo (px)"
9
+CropRight="Oříznout vpravo (px)"
10
+CropBottom="Oříznout spodek (px)"
11
+SwapRedBlue="Prohodit červenou a modrou"
12
+LockX="Zamknout X server při snímání"
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/da-DK.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Indfang Skærm (XSHM)"
3
 Screen="Skærm"
4
 CaptureCursor="Indfang markøren"
5
+AdvancedSettings="Avancerede indstillinger"
6
+XServer="X Server"
7
 XCCapture="Indfang Vindue (Xcomposite)"
8
 Window="Vindue"
9
 CropTop="Beskær Top (pixels)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Beskær bund (pixels)"
12
 SwapRedBlue="Swap rød og blå"
13
 LockX="Lås X server ved optagelse"
14
+IncludeXBorder="Inkluder X kant"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/de-DE.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Monitoraufnahme (XSHM)"
3
 Screen="Monitor"
4
 CaptureCursor="Mauszeiger aufnehmen"
5
+AdvancedSettings="Erweiterte Einstellungen"
6
+XServer="X Server"
7
 XCCapture="Fensteraufnahme (Xcomposite)"
8
 Window="Fenster"
9
 CropTop="Oben abschneiden (Pixel)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Unten abschneiden (Pixel)"
12
 SwapRedBlue="Rot und Blau tauschen"
13
 LockX="X Server sperren während der Aufnahme"
14
+IncludeXBorder="X Rahmen anzeigen"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/el-GR.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Σύλληψη Οθόνης (XSHM)"
3
 Screen="Οθόνη"
4
 CaptureCursor="Σύλληψη δρομέα"
5
+AdvancedSettings="Ρυθμίσεις για Προχωρημένους"
6
+XServer="X Server"
7
 XCCapture="Σύλληψη παραθήρου (XComposite)"
8
 Window="Παράθυρο"
9
 CropTop="Περικοπή Πάνω (pixels)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Περικοπή Κάτω (pixels)"
12
 SwapRedBlue="Ανταλλαγή κόκκινου και μπλέ"
13
 LockX="Κλείδωμα X server κατά την σύλληψη"
14
+IncludeXBorder="Περίλαβε το περίγραμμα του X"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/es-ES.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Captura de pantalla (XSHM)"
3
 Screen="Pantalla"
4
 CaptureCursor="Captura de Cursor"
5
+AdvancedSettings="Ajustes Avanzados"
6
+XServer="X Server"
7
 XCCapture="Captura de ventana (Xcomposite)"
8
 Window="Ventana"
9
 CropTop="Recortar arriba (píxeles)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Recortar abajo (píxeles)"
12
 SwapRedBlue="Intercambiar rojo y azúl"
13
 LockX="Fijar X server mientras se captura"
14
+IncludeXBorder="Incluir borde de ventana X"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/eu-ES.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Ikusleiho Harpena (XSHM)"
3
 Screen="Ikusleihoa"
4
 CaptureCursor="Hartu Kurtsorea"
5
+AdvancedSettings="Ezarpen Aurreratuak"
6
+XServer="X Zerbitzaria"
7
 XCCapture="Leiho Harpena (Xcomposite)"
8
 Window="Leihoa"
9
 CropTop="Moztu Goitik (pixel)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Moztu Behetik (pixel)"
12
 SwapRedBlue="Aldatu gorria eta urdina"
13
 LockX="Blokeatu X zerbitzaria harpenean"
14
+IncludeXBorder="Barneratu X Hertza"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/fi-FI.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Ruudunkaappaus (XSHM)"
3
 Screen="Kuvaruutu"
4
 CaptureCursor="Kaappaa kursori"
5
+AdvancedSettings="Lisäasetukset"
6
+XServer="X Server"
7
 XCCapture="Ikkunakaappaus (Xcomposite)"
8
 Window="Ikkuna"
9
 CropTop="Rajaa ylhäältä (pikselit)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Rajaa alhaalta (pikselit)"
12
 SwapRedBlue="Vaihda punainen ja sininen"
13
 LockX="Lukitse X Server kaappauksen aikana"
14
+IncludeXBorder="Sisällytä X-reunus"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/fr-FR.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Capture d'écran (XSHM)"
3
 Screen="Écran"
4
 CaptureCursor="Enregistrer le Curseur"
5
+AdvancedSettings="Paramètres avancés"
6
+XServer="Serveur X"
7
 XCCapture="Capture de la fenêtre (Xcomposite)"
8
 Window="Fenêtre"
9
 CropTop="Rogner en Haut (pixels)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Rogner en Bas (pixels)"
12
 SwapRedBlue="Intervertir le rouge et le bleu"
13
 LockX="Verrouiller le serveur X lors de la capture"
14
+IncludeXBorder="Inclure la bordure de X"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/gl-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/gl-ES.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Captura de pantalla (XSHM)"
3
 Screen="Pantalla"
4
 CaptureCursor="Captura de cursor"
5
+AdvancedSettings="Axustes avanzados"
6
+XServer="X Server"
7
 XCCapture="Captura de xanela (Xcomposite)"
8
 Window="Xanela"
9
 CropTop="Recortar por arriba (píxeles)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Recortar por abaixo (píxeles)"
12
 SwapRedBlue="Trocar vermello e azul"
13
 LockX="Bloquear o servidor X durante a captura"
14
+IncludeXBorder="Incluír o bordo da xanela X"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/hr-HR.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Ekranski ulaz (XSHM)"
3
 Screen="Ekran"
4
 CaptureCursor="Snimaj kursor"
5
+AdvancedSettings="Napredna podešavanja"
6
+XServer="X server"
7
 XCCapture="Ulaz sa prozora (Xcomposite)"
8
 Window="Prozor"
9
 CropTop="Odseci odozgo (pikseli)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Odseci odozdo (pikseli)"
12
 SwapRedBlue="Zameni crvenu i plavu"
13
 LockX="Zaključaj X server u toku snimanja"
14
+IncludeXBorder="Uključujući i X okvir"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/hu-HU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/hu-HU.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Képernyő Felvétel (XSHM)"
3
 Screen="Képernyő"
4
 CaptureCursor="Kurzor Rögztítése"
5
+AdvancedSettings="Speciális Beállítások"
6
+XServer="X Szerver"
7
 XCCapture="Ablak Felvétel (Xcomposite)"
8
 Window="Ablak"
9
 CropTop="Felső Levágása (pixelek)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Alsó Levágása (pixelek)"
12
 SwapRedBlue="Piros és Kék Cseréje"
13
 LockX="X Szerver Zárolása Rögzítéskor"
14
+IncludeXBorder="X Kerettel"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/ja-JP.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="画面キャプチャ (XSHM)"
3
 Screen="画面"
4
 CaptureCursor="カーソルをキャプチャ"
5
+AdvancedSettings="高度な設定"
6
+XServer="X サーバ"
7
 XCCapture="ウィンドウキャプチャ (Xcomposite)"
8
 Window="ウィンドウ"
9
 CropTop="上部クロップ(ピクセル)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="下部クロップ(ピクセル)"
12
 SwapRedBlue="赤と青を入れ替え"
13
 LockX="キャプチャ時にXサーバをロック"
14
+IncludeXBorder="Xウインドウの境界を含める"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/ko-KR.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="화면 캡쳐 (XSHM)"
3
 Screen="화면"
4
 CaptureCursor="커서 캡쳐"
5
+AdvancedSettings="고급 설정"
6
+XServer="X 서버"
7
 XCCapture="윈도우 캡쳐(Xcomposite)"
8
 Window="윈도우"
9
 CropTop="위쪽 자르기 (픽셀)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="아래 자르기 (픽셀)"
12
 SwapRedBlue="적청 교환"
13
 LockX="캡쳐 시 X 서버를 잠금"
14
+IncludeXBorder="X 윈도우 경계를 포함"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/nb-NO.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Skjermopptak (XSHM)"
3
 Screen="Skjerm"
4
 CaptureCursor="Ta opp musepeker"
5
+AdvancedSettings="Avanserte innstillinger"
6
+XServer="X-tjener"
7
 XCCapture="Vindusopptak (Xcomposite)"
8
 Window="Vindu"
9
 CropTop="Beskjær toppen (piksler)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Beskjær bunnen (piksler)"
12
 SwapRedBlue="Bytt rød og blå"
13
 LockX="Lås X-server under opptak"
14
+IncludeXBorder="Inkludér X11-rammen"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/nl-NL.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Schermcapture (XSHM)"
3
 Screen="Scherm"
4
 CaptureCursor="Cursor Opnemen"
5
+AdvancedSettings="Geavanceerde instellingen"
6
+XServer="X Server"
7
 XCCapture="Venstercapture (Xcomposite)"
8
 Window="Venster"
9
 CropTop="Boven Bijsnijden (pixels)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Onder Bijsnijden (pixels)"
12
 SwapRedBlue="Rood en blauw omwisselen"
13
 LockX="X server vergrendelen tijdens het opnemen"
14
+IncludeXBorder="Inclusief X-schermranden"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/ro-RO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/ro-RO.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Captură de ecran (XSHM)"
3
 Screen="Ecran"
4
 CaptureCursor="Capturează cursorul"
5
+AdvancedSettings="Setări Avansate"
6
+XServer="X Server"
7
 XCCapture="Captură Fereastră (Xcomposite)"
8
 Window="Fereastră"
9
 CropTop="Taie Sus (pixeli)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Taie jos (pixeli)"
12
 SwapRedBlue="Schimbă Roșu cu Albastru"
13
 LockX="Blochează server X atunci când se capturează"
14
+IncludeXBorder="Include marginea cu X"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/ru-RU.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Захват экрана (XSHM)"
3
 Screen="Экран"
4
 CaptureCursor="Захват курсора"
5
+AdvancedSettings="Дополнительные настройки"
6
+XServer="X-сервер"
7
 XCCapture="Захват окна (Xcomposite)"
8
 Window="Окно"
9
 CropTop="Обрезать сверху (пикселей)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Обрезать снизу (пикселей)"
12
 SwapRedBlue="Поменять местами красный и синий"
13
 LockX="Блокировать X-сервер при захвате"
14
+IncludeXBorder="Включить захват границы"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/sl-SI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/sl-SI.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Zajemanje zaslona (XSHM)"
3
 Screen="Zaslon"
4
 CaptureCursor="Zajemaj kazalec"
5
+AdvancedSettings="Napredne nastavitve"
6
+XServer="X Server"
7
 XCCapture="Zajemanje okna (Xcomposite)"
8
 Window="Okno"
9
 CropTop="Obreži zgoraj (pixels)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Obreži spodaj (pixels)"
12
 SwapRedBlue="Zamenjaj modro in rdečo"
13
 LockX="Zakleni X server med zajemanjem"
14
+IncludeXBorder="Vključujejo X meje"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/sr-CS.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Ekranski ulaz (XSHM)"
3
 Screen="Ekran"
4
 CaptureCursor="Snimaj kursor"
5
+AdvancedSettings="Napredna podešavanja"
6
+XServer="X server"
7
 XCCapture="Улаз са прозора (Xcomposite)"
8
 Window="Прозор"
9
 CropTop="Одсеци одозго (пиксели)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Одсеци одоздо (пиксели)"
12
 SwapRedBlue="Замени црвену и плаву"
13
 LockX="Закључај X сервер у току снимања"
14
+IncludeXBorder="Uključujući i X okvir"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/sr-SP.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Екрански улаз (XSHM)"
3
 Screen="Екран"
4
 CaptureCursor="Снимај курсор"
5
+AdvancedSettings="Напредна подешавања"
6
+XServer="X сервер"
7
 XCCapture="Ulaz sa prozora (Xcomposite)"
8
 Window="Prozor"
9
 CropTop="Odseci odozgo (pikseli)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Odseci odozdo (pikseli)"
12
 SwapRedBlue="Zameni crvenu i plavu"
13
 LockX="Zaključaj X server u toku snimanja"
14
+IncludeXBorder="Укључујући и X оквир"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-capture/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/sv-SE.ini Changed
16
 
1
@@ -1,6 +1,8 @@
2
 X11SharedMemoryScreenInput="Bildskärmskälla (XSHM)"
3
 Screen="Skärm"
4
 CaptureCursor="Visa muspekare"
5
+AdvancedSettings="Avancerade Inställningar"
6
+XServer="X-servern"
7
 XCCapture="Fönsterkälla (Xcomposite)"
8
 Window="Fönster"
9
 CropTop="Beskär övre kant (pixlar)"
10
@@ -9,4 +11,5 @@
11
 CropBottom="Beskär nedre kant (pixlar)"
12
 SwapRedBlue="Byt röd och blå"
13
 LockX="Lås X-servern medan källan är aktiv"
14
+IncludeXBorder="Inkludera X Border"
15
 
16
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-capture/data/locale/zh-CN.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+X11SharedMemoryScreenInput="屏幕捕获(XSHM)"
3
+Screen="屏幕"
4
+CaptureCursor="捕捉光标"
5
+AdvancedSettings="高级设置"
6
+XServer="X Server"
7
+XCCapture="窗口捕获(Xcomposite)"
8
+Window="窗口"
9
+CropTop="裁剪顶部(像素)"
10
+CropLeft="裁剪左侧(像素)"
11
+CropRight="裁剪右部(像素)"
12
+CropBottom="裁剪下部(像素)"
13
+SwapRedBlue="交换红色和蓝色"
14
+LockX="当捕获时锁定X server"
15
+IncludeXBorder="包括 X 边框"
16
+
17
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack Added
2
 
1
+(directory)
2
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/CMakeLists.txt Added
34
 
1
@@ -0,0 +1,32 @@
2
+project(linux-jack)
3
+
4
+if(DISABLE_JACK)
5
+   message(STATUS "JACK support disabled")
6
+   return()
7
+endif()
8
+
9
+find_package(Jack)
10
+if(NOT JACK_FOUND AND ENABLE_JACK)
11
+   message(FATAL_ERROR "JACK Audio Connection Kit not found but set as enabled")
12
+elseif(NOT JACK_FOUND)
13
+   message(STATUS "JACK Audio Connection Kit not found, disabling JACK plugin")
14
+   return()
15
+endif()
16
+
17
+include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
18
+
19
+set(linux-jack_SOURCES
20
+   linux-jack.c
21
+   jack-wrapper.c
22
+   jack-input.c
23
+)
24
+
25
+add_library(linux-jack MODULE
26
+   ${linux-jack_SOURCES}
27
+)
28
+target_link_libraries(linux-jack
29
+   libobs
30
+   ${JACK_LIBRARIES}
31
+)
32
+
33
+install_obs_plugin_with_data(linux-jack data)
34
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/data Added
2
 
1
+(directory)
2
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/data/locale Added
2
 
1
+(directory)
2
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/data/locale/en-US.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="Start JACK Server"
3
+Channels="Number of Channels"
4
+JACKInput="JACK Input Client"
5
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/jack-input.c Added
151
 
1
@@ -0,0 +1,149 @@
2
+/*
3
+Copyright (C) 2015 by Bernd Buschinski <b.buschinski@gmail.com>
4
+
5
+This program is free software: you can redistribute it and/or modify
6
+it under the terms of the GNU General Public License as published by
7
+the Free Software Foundation, either version 2 of the License, or
8
+(at your option) any later version.
9
+
10
+This program is distributed in the hope that it will be useful,
11
+but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+GNU General Public License for more details.
14
+
15
+You should have received a copy of the GNU General Public License
16
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+*/
18
+
19
+#include "jack-wrapper.h"
20
+
21
+#include <obs-module.h>
22
+
23
+/**
24
+ * Returns the name of the plugin
25
+ */
26
+static const char *jack_input_getname(void)
27
+{
28
+   return obs_module_text("JACKInput");
29
+}
30
+
31
+/**
32
+ * Destroy the plugin object and free all memory
33
+ */
34
+static void jack_destroy(void *vptr)
35
+{
36
+   struct jack_data* data = (struct jack_data*)vptr;
37
+
38
+   if (!data)
39
+       return;
40
+
41
+   deactivate_jack(data);
42
+
43
+   if (data->device)
44
+       bfree(data->device);
45
+   pthread_mutex_destroy(&data->jack_mutex);
46
+   bfree(data);
47
+}
48
+
49
+/**
50
+ * Update the input settings
51
+ */
52
+static void jack_update(void *vptr, obs_data_t *settings)
53
+{
54
+   struct jack_data* data = (struct jack_data*)vptr;
55
+   if (!data)
56
+       return;
57
+
58
+   const char *new_device;
59
+   bool settings_changed      = false;
60
+   bool new_jack_start_server = obs_data_get_bool(settings, "startjack");
61
+   int new_channel_count      = obs_data_get_int(settings, "channels");
62
+
63
+   if (new_jack_start_server != data->start_jack_server) {
64
+       data->start_jack_server = new_jack_start_server;
65
+       settings_changed = true;
66
+   }
67
+
68
+   if (new_channel_count != data->channels)
69
+       /*
70
+        * keep "old" channel count  for now,
71
+        * we need to destroy the correct number of channels
72
+        */
73
+       settings_changed = true;
74
+
75
+   new_device = obs_source_get_name(data->source);
76
+   if (!data->device || strcmp(data->device, new_device) != 0) {
77
+       if (data->device)
78
+           bfree(data->device);
79
+       data->device = bstrdup(new_device);
80
+       settings_changed = true;
81
+   }
82
+
83
+   if (settings_changed) {
84
+       deactivate_jack(data);
85
+
86
+       data->channels = new_channel_count;
87
+
88
+       if (jack_init(data) != 0) {
89
+           deactivate_jack(data);
90
+       }
91
+   }
92
+}
93
+
94
+/**
95
+ * Create the plugin object
96
+ */
97
+static void *jack_create(obs_data_t *settings, obs_source_t *source)
98
+{
99
+   struct jack_data *data = bzalloc(sizeof(struct jack_data));
100
+
101
+   pthread_mutex_init(&data->jack_mutex, NULL);
102
+   data->source   = source;
103
+   data->channels = -1;
104
+
105
+   jack_update(data, settings);
106
+
107
+   if (data->jack_client == NULL) {
108
+       jack_destroy(data);
109
+       return NULL;
110
+   }
111
+   return data;
112
+}
113
+
114
+/**
115
+ * Get plugin defaults
116
+ */
117
+static void jack_input_defaults(obs_data_t *settings)
118
+{
119
+   obs_data_set_default_int(settings, "channels", 2);
120
+   obs_data_set_default_bool(settings, "startjack", false);
121
+}
122
+
123
+/**
124
+ * Get plugin properties
125
+ */
126
+static obs_properties_t *jack_input_properties(void *unused)
127
+{
128
+   (void)unused;
129
+
130
+   obs_properties_t *props = obs_properties_create();
131
+
132
+   obs_properties_add_int(props, "channels",
133
+       obs_module_text("Channels"), 1, 8, 1);
134
+   obs_properties_add_bool(props, "startjack",
135
+       obs_module_text("StartJACKServer"));
136
+
137
+   return props;
138
+}
139
+
140
+struct obs_source_info jack_output_capture = {
141
+   .id             = "jack_output_capture",
142
+   .type           = OBS_SOURCE_TYPE_INPUT,
143
+   .output_flags   = OBS_SOURCE_AUDIO,
144
+   .get_name       = jack_input_getname,
145
+   .create         = jack_create,
146
+   .destroy        = jack_destroy,
147
+   .update         = jack_update,
148
+   .get_defaults   = jack_input_defaults,
149
+   .get_properties = jack_input_properties
150
+};
151
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/jack-wrapper.c Added
162
 
1
@@ -0,0 +1,160 @@
2
+/*
3
+Copyright (C) 2015 by Bernd Buschinski <b.buschinski@gmail.com>
4
+
5
+This program is free software: you can redistribute it and/or modify
6
+it under the terms of the GNU General Public License as published by
7
+the Free Software Foundation, either version 2 of the License, or
8
+(at your option) any later version.
9
+
10
+This program is distributed in the hope that it will be useful,
11
+but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+GNU General Public License for more details.
14
+
15
+You should have received a copy of the GNU General Public License
16
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+*/
18
+
19
+#include "jack-wrapper.h"
20
+
21
+#include <pthread.h>
22
+#include <stdio.h>
23
+
24
+#include <util/platform.h>
25
+
26
+#define blog(level, msg, ...) blog(level, "jack-input: " msg, ##__VA_ARGS__)
27
+
28
+/**
29
+ * Get obs speaker layout from number of channels
30
+ *
31
+ * @param channels number of channels reported by jack
32
+ *
33
+ * @return obs speaker_layout id
34
+ *
35
+ * @note This *might* not work for some rather unusual setups, but should work
36
+ *       fine for the majority of cases.
37
+ */
38
+static enum speaker_layout jack_channels_to_obs_speakers(uint_fast32_t channels)
39
+{
40
+   switch(channels) {
41
+   case 1: return SPEAKERS_MONO;
42
+   case 2: return SPEAKERS_STEREO;
43
+   case 3: return SPEAKERS_2POINT1;
44
+   case 4: return SPEAKERS_SURROUND;
45
+   case 5: return SPEAKERS_4POINT1;
46
+   case 6: return SPEAKERS_5POINT1;
47
+   /* What should we do with 7 channels? */
48
+   /* case 7: return SPEAKERS_...; */
49
+   case 8: return SPEAKERS_7POINT1;
50
+   }
51
+
52
+   return SPEAKERS_UNKNOWN;
53
+}
54
+
55
+int jack_process_callback(jack_nframes_t nframes, void* arg)
56
+{
57
+   struct jack_data* data = (struct jack_data*)arg;
58
+   if (data == 0)
59
+       return 0;
60
+
61
+   pthread_mutex_lock(&data->jack_mutex);
62
+
63
+   struct obs_source_audio out;
64
+   out.speakers        = jack_channels_to_obs_speakers(data->channels);
65
+   out.samples_per_sec = jack_get_sample_rate (data->jack_client);
66
+   /* format is always 32 bit float for jack */
67
+   out.format          = AUDIO_FORMAT_FLOAT_PLANAR;
68
+
69
+   for (unsigned int i = 0; i < data->channels; ++i) {
70
+       jack_default_audio_sample_t *jack_buffer =
71
+           (jack_default_audio_sample_t *)jack_port_get_buffer(
72
+               data->jack_ports[i], nframes);
73
+       out.data[i] = (uint8_t *)jack_buffer;
74
+   }
75
+
76
+   out.frames    = nframes;
77
+   out.timestamp = os_gettime_ns() -
78
+               jack_frames_to_time(data->jack_client, nframes);
79
+
80
+   obs_source_output_audio(data->source, &out);
81
+   pthread_mutex_unlock(&data->jack_mutex);
82
+   return 0;
83
+}
84
+
85
+int_fast32_t jack_init(struct jack_data* data)
86
+{
87
+   pthread_mutex_lock(&data->jack_mutex);
88
+
89
+   if (data->jack_client != NULL)
90
+       goto good;
91
+
92
+   jack_options_t jack_option = data->start_jack_server ?
93
+       JackNullOption : JackNoStartServer;
94
+
95
+   data->jack_client = jack_client_open(data->device, jack_option, 0);
96
+   if (data->jack_client == NULL) {
97
+       blog(LOG_ERROR,
98
+           "jack_client_open Error:"
99
+           "Could not create JACK client! %s",
100
+           data->device);
101
+       goto error;
102
+   }
103
+
104
+   data->jack_ports = (jack_port_t**)bzalloc(
105
+       sizeof(jack_port_t*) * data->channels);
106
+   for (unsigned int i = 0; i < data->channels; ++i) {
107
+       char port_name[10] = {'\0'};
108
+       snprintf(port_name, sizeof(port_name), "in_%d", i+1);
109
+
110
+       data->jack_ports[i] = jack_port_register(data->jack_client,
111
+           port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
112
+       if (data->jack_ports[i] == NULL) {
113
+           blog(LOG_ERROR,
114
+               "jack_port_register Error:"
115
+               "Could not create JACK port! %s",
116
+               port_name);
117
+           goto error;
118
+       }
119
+   }
120
+
121
+   if (jack_set_process_callback(data->jack_client,
122
+           jack_process_callback, data) != 0) {
123
+       blog(LOG_ERROR, "jack_set_process_callback Error");
124
+       goto error;
125
+   }
126
+
127
+   if (jack_activate(data->jack_client) != 0) {
128
+       blog(LOG_ERROR,
129
+           "jack_activate Error:"
130
+           "Could not activate JACK client!");
131
+       goto error;
132
+   }
133
+
134
+good:
135
+   pthread_mutex_unlock(&data->jack_mutex);
136
+   return 0;
137
+
138
+error:
139
+   pthread_mutex_unlock(&data->jack_mutex);
140
+   return 1;
141
+}
142
+
143
+void deactivate_jack(struct jack_data* data)
144
+{
145
+   pthread_mutex_lock(&data->jack_mutex);
146
+
147
+   if (data->jack_client) {
148
+       if (data->jack_ports != NULL) {
149
+           for (int i = 0; i < data->channels; ++i) {
150
+               if (data->jack_ports[i] != NULL)
151
+                   jack_port_unregister(data->jack_client,
152
+                       data->jack_ports[i]);
153
+           }
154
+           bfree(data->jack_ports);
155
+           data->jack_ports = NULL;
156
+       }
157
+       jack_client_close(data->jack_client);
158
+       data->jack_client = NULL;
159
+   }
160
+   pthread_mutex_unlock(&data->jack_mutex);
161
+}
162
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/jack-wrapper.h Added
53
 
1
@@ -0,0 +1,51 @@
2
+/*
3
+Copyright (C) 2015 by Bernd Buschinski <b.buschinski@gmail.com>
4
+
5
+This program is free software: you can redistribute it and/or modify
6
+it under the terms of the GNU General Public License as published by
7
+the Free Software Foundation, either version 2 of the License, or
8
+(at your option) any later version.
9
+
10
+This program is distributed in the hope that it will be useful,
11
+but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+GNU General Public License for more details.
14
+
15
+You should have received a copy of the GNU General Public License
16
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+*/
18
+
19
+#pragma once
20
+
21
+#include <jack/jack.h>
22
+#include <obs.h>
23
+#include <pthread.h>
24
+
25
+struct jack_data {
26
+   obs_source_t *source;
27
+
28
+   /* user settings */
29
+   char *device;
30
+   uint_fast8_t channels;
31
+   bool start_jack_server;
32
+
33
+   /* server info */
34
+   enum speaker_layout speakers;
35
+   uint_fast32_t samples_per_sec;
36
+   uint_fast32_t bytes_per_frame;
37
+
38
+   jack_client_t *jack_client;
39
+   jack_port_t **jack_ports;
40
+
41
+   pthread_mutex_t jack_mutex;
42
+};
43
+
44
+/**
45
+ * Initialize the jack client and register the ports
46
+ */
47
+int_fast32_t jack_init(struct jack_data* data);
48
+
49
+/**
50
+ * Destroys the jack client and unregisters the ports
51
+ */
52
+void deactivate_jack(struct jack_data* data);
53
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-jack/linux-jack.c Added
30
 
1
@@ -0,0 +1,28 @@
2
+/*
3
+Copyright (C) 2015 by Bernd Buschinski <b.buschinski@gmail.com>
4
+
5
+This program is free software: you can redistribute it and/or modify
6
+it under the terms of the GNU General Public License as published by
7
+the Free Software Foundation, either version 2 of the License, or
8
+(at your option) any later version.
9
+
10
+This program is distributed in the hope that it will be useful,
11
+but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+GNU General Public License for more details.
14
+
15
+You should have received a copy of the GNU General Public License
16
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+*/
18
+#include <obs-module.h>
19
+
20
+OBS_DECLARE_MODULE()
21
+OBS_MODULE_USE_DEFAULT_LOCALE("linux-jack", "en-US")
22
+
23
+extern struct obs_source_info jack_output_capture;
24
+
25
+bool obs_module_load(void)
26
+{
27
+   obs_register_source(&jack_output_capture);
28
+   return true;
29
+}
30
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-pulseaudio/data/locale/cs-CZ.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="Záznam vstupu zvuku (PulseAudio)"
3
+PulseOutput="Záznam výstupu zvuku (PulseAudio)"
4
+Device="Zařízení"
5
+
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-pulseaudio/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-pulseaudio/data/locale/fr-FR.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
 PulseInput="Capture d'Audio Entrant (PulseAudio)"
3
 PulseOutput="Capture d'Audio Sortant (PulseAudio)"
4
-Device="Appareil"
5
+Device="Périphérique"
6
 
7
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-pulseaudio/data/locale/zh-CN.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="音频输入捕获(脉冲音频)"
3
+PulseOutput="音频输出捕获(脉冲音频)"
4
+Device="设备"
5
+
6
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/cs-CZ.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+V4L2Input="Zařízení pro záznam (V4L2)"
3
+Device="Zařízení"
4
+Input="Vstup"
5
+ImageFormat="Formát videa"
6
+Resolution="Rozlišení"
7
+FrameRate="Frekvence snímkování"
8
+LeaveUnchanged="Ponechat nezměněné"
9
+UseSystemTiming="Použít systémové časování"
10
+
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-v4l2/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/de-DE.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-V4L2Input="Videogerät (V4L2)"
3
+V4L2Input="Videoaufnahmegerät (V4L2)"
4
 Device="Gerät"
5
 Input="Eingabe"
6
 ImageFormat="Videoformat"
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-v4l2/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/nb-NO.ini Changed
7
 
1
@@ -5,4 +5,5 @@
2
 Resolution="Oppløsning"
3
 FrameRate="Bildehastighet"
4
 LeaveUnchanged="La stå uendret"
5
+UseSystemTiming="Bruk systemtid"
6
 
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-v4l2/data/locale/pl-PL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/pl-PL.ini Changed
7
 
1
@@ -4,4 +4,5 @@
2
 ImageFormat="Format wideo"
3
 Resolution="Rozdzielczość"
4
 FrameRate="Klatki na sekundę"
5
+LeaveUnchanged="Pozostaw bez zmian"
6
 
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/linux-v4l2/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/sv-SE.ini Changed
7
 
1
@@ -5,4 +5,5 @@
2
 Resolution="Upplösning"
3
 FrameRate="Bildhastighet"
4
 LeaveUnchanged="Lämna oförändrat"
5
+UseSystemTiming="Använd Systemets Timing"
6
 
7
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/linux-v4l2/data/locale/zh-CN.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+V4L2Input="视频捕获设备(V4L2)"
3
+Device="设备"
4
+Input="输入"
5
+ImageFormat="视频格式"
6
+Resolution="分辨率"
7
+FrameRate="帧率"
8
+LeaveUnchanged="保持不变"
9
+UseSystemTiming="使用系统时间(忽略V4L2时间)"
10
+
11
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-avcapture/data/locale/cs-CZ.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+AvCapture="Zařízení pro záznam"
3
+Device="Zařízení"
4
+UsePreset="Použít předvolbu"
5
+Preset="Předvolba"
6
+
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-avcapture/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-avcapture/data/locale/de-DE.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-AvCapture="Videogerät"
3
+AvCapture="Videoaufnahmegerät"
4
 Device="Gerät"
5
 UsePreset="Benutze Voreinstellung"
6
 Preset="Voreinstellung"
7
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-avcapture/data/locale/zh-CN.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+AvCapture="视频捕捉设备"
3
+Device="设备"
4
+UsePreset="使用预设"
5
+Preset="预设"
6
+
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-capture/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-capture/data/locale/de-DE.ini Changed
10
 
1
@@ -8,7 +8,7 @@
2
 WindowCapture="Fensteraufnahme"
3
 WindowCapture.ShowShadow="Zeige Fensterschatten"
4
 WindowUtils.Window="Fenster"
5
-WindowUtils.ShowEmptyNames="Zeife Fenster mit leeren Namen"
6
+WindowUtils.ShowEmptyNames="Zeige Fenster mit leeren Namen"
7
 CropMode="Zuschneiden"
8
 CropMode.None="Keine"
9
 CropMode.Manual="Manuell"
10
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-capture/data/locale/zh-CN.ini Added
23
 
1
@@ -0,0 +1,21 @@
2
+CoreAudio.InputCapture="音频输入捕获"
3
+CoreAudio.OutputCapture="音频输出捕获"
4
+CoreAudio.Device="设备"
5
+CoreAudio.Device.Default="默认"
6
+DisplayCapture="显示捕获"
7
+DisplayCapture.Display="显示"
8
+DisplayCapture.ShowCursor="显示光标"
9
+WindowCapture="窗口捕获"
10
+WindowCapture.ShowShadow="显示窗口阴影"
11
+WindowUtils.Window="窗口"
12
+WindowUtils.ShowEmptyNames="显示窗口名称为空"
13
+CropMode="裁剪"
14
+CropMode.None="无"
15
+CropMode.Manual="手动"
16
+CropMode.ToWindow="到窗口"
17
+CropMode.ToWindowAndManual="到窗口和手动"
18
+Crop.origin.x="裁剪左侧"
19
+Crop.origin.y="裁剪顶部"
20
+Crop.size.width="裁剪右侧"
21
+Crop.size.height="裁剪底部"
22
+
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/da-DK.ini Changed
12
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Indfang spil (Syphon)"
3
 Source="Kilde"
4
 LaunchSyphonInject="Kør SyphonInject"
5
 Inject="Indsæt"
6
@@ -8,4 +9,5 @@
7
 Crop.origin.y="Beskær top"
8
 Crop.size.width="Beskær højre"
9
 Crop.size.height="Beskær bund"
10
+AllowTransparency="Tillad gennemsigtighed"
11
 
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Spielaufnahme (Syphon)"
3
 Source="Quelle"
4
 LaunchSyphonInject="SyphonInject starten"
5
 Inject="Injizieren"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/el-GR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Σύλληψη Παιχνιδιού (Syphon)"
3
 Source="Πηγή"
4
 LaunchSyphonInject="Έναρξη SyphonInject"
5
 Inject="Εισήγαγε"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/en-US.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/en-US.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Game Capture (Syphon)"
3
 Source="Source"
4
 LaunchSyphonInject="Launch SyphonInject"
5
 Inject="Inject"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/es-ES.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Captura de juego (Syphon)"
3
 Source="Fuente"
4
 LaunchSyphonInject="Lanzar SyphonInject"
5
 Inject="Inyectar"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/eu-ES.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Jolas Harpena (Syphon)"
3
 Source="Iturburua"
4
 LaunchSyphonInject="Abiarazi SyphonInject"
5
 Inject="Inject"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/fi-FI.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Kaappaa peli (Syphon)"
3
 Source="Lähde"
4
 LaunchSyphonInject="Käynnistä SyphonInject"
5
 Inject="Inject"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/fr-FR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Capture de jeu (Syphon)"
3
 Source="Source"
4
 LaunchSyphonInject="Lancer SyphonInject"
5
 Inject="Injecter"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/hr-HR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Snimanje igre (Syphon)"
3
 Source="Izvor"
4
 LaunchSyphonInject="Pokreni SyphonInject"
5
 Inject="Ubrizgaj"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/ja-JP.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="ゲームキャプチャ (サイフォン)"
3
 Source="ソース"
4
 LaunchSyphonInject="サイフォンインジェクトを起動する"
5
 Inject="インジェクト"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/ko-KR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="게임 캡쳐 (Syphon)"
3
 Source="소스"
4
 LaunchSyphonInject="SyphonInject 실행"
5
 Inject="삽입"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/nb-NO.ini Changed
12
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Spillopptak (Syphon)"
3
 Source="Kilde"
4
 LaunchSyphonInject="Start SyphonInject"
5
 Inject="Injiser"
6
@@ -8,4 +9,5 @@
7
 Crop.origin.y="Beskjær topp"
8
 Crop.size.width="Beskjær høyre"
9
 Crop.size.height="Beskjær bunn"
10
+AllowTransparency="Tillat gjennomsiktighet"
11
 
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/nl-NL.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Gamecapture (Syphon)"
3
 Source="Bron"
4
 LaunchSyphonInject="Start SyphonInject"
5
 Inject="Injecteren"
6
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/pl-PL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Source="Źródło"
3
+
4
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/ru-RU.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Захват игры (Syphon)"
3
 Source="Источник"
4
 LaunchSyphonInject="Запуск SyphonInject"
5
 Inject="Ввести"
6
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/sl-SI.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+Source="Vir"
3
+LaunchSyphonInject="Zaženi SyphonInject"
4
+Inject="Vstavi"
5
+Application="Aplikacija"
6
+SyphonLicense="Syphon Licenca"
7
+Crop="Obreži"
8
+Crop.origin.x="Obreži levo"
9
+Crop.origin.y="Obreži vrh"
10
+Crop.size.width="Obreži desno"
11
+Crop.size.height="Obreži spodaj"
12
+AllowTransparency="Omogoči prozornost"
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/sr-CS.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Snimanje igre (Syphon)"
3
 Source="Izvor"
4
 LaunchSyphonInject="Pokreni SyphonInject"
5
 Inject="Ubrizgaj"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/sr-SP.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Syphon="Снимање игре (Syphon)"
3
 Source="Извор"
4
 LaunchSyphonInject="Покрени SyphonInject"
5
 Inject="Убризгај"
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/sv-SE.ini Changed
7
 
1
@@ -8,4 +8,5 @@
2
 Crop.origin.y="Beskär topp"
3
 Crop.size.width="Beskär höger"
4
 Crop.size.height="Beskär botten"
5
+AllowTransparency="Tillåt opacitet"
6
 
7
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/data/locale/zh-CN.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Syphon="游戏捕获(Syphon)"
3
+Source="来源"
4
+LaunchSyphonInject="启动 SyphonInject"
5
+Inject="注入"
6
+Application="应用"
7
+SyphonLicense="Syphon 许可证"
8
+Crop="裁剪"
9
+Crop.origin.x="裁剪左侧"
10
+Crop.origin.y="裁剪顶部"
11
+Crop.size.width="裁剪右侧"
12
+Crop.size.height="裁剪底部"
13
+AllowTransparency="允许透明度"
14
+
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/mac-syphon/syphon.m -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/mac-syphon/syphon.m Changed
10
 
1
@@ -91,7 +91,7 @@
2
 
3
 static const char *syphon_get_name()
4
 {
5
-   return "Syphon";
6
+   return obs_module_text("Syphon");
7
 }
8
 
9
 static void stop_client(syphon_t s)
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-ffmpeg/CMakeLists.txt Changed
19
 
1
@@ -1,6 +1,6 @@
2
 project(obs-ffmpeg)
3
 
4
-if(WIN32)
5
+if(MSVC)
6
    set(obs-ffmpeg_PLATFORM_DEPS
7
        w32-pthreads)
8
 endif()
9
@@ -11,7 +11,8 @@
10
 
11
 set(obs-ffmpeg_HEADERS
12
    obs-ffmpeg-formats.h
13
-   obs-ffmpeg-compat.h)
14
+   obs-ffmpeg-compat.h
15
+   closest-pixel-format.h)
16
 set(obs-ffmpeg_SOURCES
17
    obs-ffmpeg.c
18
    obs-ffmpeg-aac.c
19
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-ffmpeg/closest-pixel-format.h Added
117
 
1
@@ -0,0 +1,115 @@
2
+#pragma once
3
+
4
+static const enum AVPixelFormat i420_formats[] = {
5
+   AV_PIX_FMT_YUV420P,
6
+   AV_PIX_FMT_NV12,
7
+   AV_PIX_FMT_NV21,
8
+   AV_PIX_FMT_YUYV422,
9
+   AV_PIX_FMT_UYVY422,
10
+   AV_PIX_FMT_YUV422P,
11
+   AV_PIX_FMT_NONE
12
+};
13
+
14
+static const enum AVPixelFormat nv12_formats[] = {
15
+   AV_PIX_FMT_NV12,
16
+   AV_PIX_FMT_NV21,
17
+   AV_PIX_FMT_YUV420P,
18
+   AV_PIX_FMT_YUYV422,
19
+   AV_PIX_FMT_UYVY422,
20
+   AV_PIX_FMT_NONE
21
+};
22
+
23
+static const enum AVPixelFormat yuy2_formats[] = {
24
+   AV_PIX_FMT_YUYV422,
25
+   AV_PIX_FMT_UYVY422,
26
+   AV_PIX_FMT_NV12,
27
+   AV_PIX_FMT_NV21,
28
+   AV_PIX_FMT_YUV420P,
29
+   AV_PIX_FMT_NONE
30
+};
31
+
32
+static const enum AVPixelFormat uyvy_formats[] = {
33
+   AV_PIX_FMT_UYVY422,
34
+   AV_PIX_FMT_YUYV422,
35
+   AV_PIX_FMT_NV12,
36
+   AV_PIX_FMT_NV21,
37
+   AV_PIX_FMT_YUV420P,
38
+   AV_PIX_FMT_NONE
39
+};
40
+
41
+static const enum AVPixelFormat rgba_formats[] = {
42
+   AV_PIX_FMT_RGBA,
43
+   AV_PIX_FMT_BGRA,
44
+   AV_PIX_FMT_YUYV422,
45
+   AV_PIX_FMT_UYVY422,
46
+   AV_PIX_FMT_NV12,
47
+   AV_PIX_FMT_NV21,
48
+   AV_PIX_FMT_NONE
49
+};
50
+
51
+static const enum AVPixelFormat bgra_formats[] = {
52
+   AV_PIX_FMT_BGRA,
53
+   AV_PIX_FMT_RGBA,
54
+   AV_PIX_FMT_YUYV422,
55
+   AV_PIX_FMT_UYVY422,
56
+   AV_PIX_FMT_NV12,
57
+   AV_PIX_FMT_NV21,
58
+   AV_PIX_FMT_NONE
59
+};
60
+
61
+static enum AVPixelFormat get_best_format(
62
+       const enum AVPixelFormat *best,
63
+       const enum AVPixelFormat *formats)
64
+{
65
+   while (*best != AV_PIX_FMT_NONE) {
66
+       enum AVPixelFormat best_format = *best;
67
+       const enum AVPixelFormat *cur_formats = formats;
68
+
69
+       while (*cur_formats != AV_PIX_FMT_NONE) {
70
+           enum AVPixelFormat avail_format = *cur_formats;
71
+
72
+           if (best_format == avail_format)
73
+               return best_format;
74
+
75
+           cur_formats++;
76
+       }
77
+
78
+       best++;
79
+   }
80
+
81
+   return AV_PIX_FMT_NONE;
82
+}
83
+
84
+static inline enum AVPixelFormat get_closest_format(
85
+       enum AVPixelFormat format,
86
+       const enum AVPixelFormat *formats)
87
+{
88
+   enum AVPixelFormat best_format = AV_PIX_FMT_NONE;
89
+
90
+   if (!formats || formats[0] == AV_PIX_FMT_NONE)
91
+       return format;
92
+
93
+   switch ((int)format) {
94
+
95
+   case AV_PIX_FMT_YUV420P:
96
+       best_format = get_best_format(i420_formats, formats);
97
+       break;
98
+   case AV_PIX_FMT_NV12:
99
+       best_format = get_best_format(nv12_formats, formats);
100
+       break;
101
+   case AV_PIX_FMT_YUYV422:
102
+       best_format = get_best_format(yuy2_formats, formats);
103
+       break;
104
+   case AV_PIX_FMT_UYVY422:
105
+       best_format = get_best_format(uyvy_formats, formats);
106
+       break;
107
+   case AV_PIX_FMT_RGBA:
108
+       best_format = get_best_format(rgba_formats, formats);
109
+       break;
110
+   case AV_PIX_FMT_BGRA:
111
+       best_format = get_best_format(bgra_formats, formats);
112
+       break;
113
+   }
114
+
115
+   return (best_format == AV_PIX_FMT_NONE) ? formats[0] : best_format;
116
+}
117
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+FFmpegOutput="FFmpeg 输出"
3
+FFmpegAAC="FFmpeg 默认 AAC 编码器"
4
+Bitrate="比特率"
5
+
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c Changed
201
 
1
@@ -27,13 +27,23 @@
2
 #include <libswscale/swscale.h>
3
 
4
 #include "obs-ffmpeg-formats.h"
5
+#include "closest-pixel-format.h"
6
 #include "obs-ffmpeg-compat.h"
7
 
8
-//#define OBS_FFMPEG_VIDEO_FORMAT VIDEO_FORMAT_I420
9
-#define OBS_FFMPEG_VIDEO_FORMAT VIDEO_FORMAT_NV12
10
-
11
-/* NOTE: much of this stuff is test stuff that was more or less copied from
12
- * the muxing.c ffmpeg example */
13
+struct ffmpeg_cfg {
14
+   const char         *url;
15
+   int                video_bitrate;
16
+   int                audio_bitrate;
17
+   const char         *video_encoder;
18
+   const char         *audio_encoder;
19
+   const char         *video_settings;
20
+   const char         *audio_settings;
21
+   enum AVPixelFormat format;
22
+   int                scale_width;
23
+   int                scale_height;
24
+   int                width;
25
+   int                height;
26
+};
27
 
28
 struct ffmpeg_data {
29
    AVStream           *video;
30
@@ -43,18 +53,13 @@
31
    AVFormatContext    *output;
32
    struct SwsContext  *swscale;
33
 
34
-   int                video_bitrate;
35
    AVPicture          dst_picture;
36
    AVFrame            *vframe;
37
    int                frame_size;
38
    int                total_frames;
39
 
40
-   int                width;
41
-   int                height;
42
-
43
    uint64_t           start_timestamp;
44
 
45
-   int                audio_bitrate;
46
    uint32_t           audio_samplerate;
47
    enum audio_format  audio_format;
48
    size_t             audio_planes;
49
@@ -64,7 +69,7 @@
50
    AVFrame            *aframe;
51
    int                total_samples;
52
 
53
-   const char         *filename_test;
54
+   struct ffmpeg_cfg  config;
55
 
56
    bool               initialized;
57
 };
58
@@ -89,9 +94,12 @@
59
 /* ------------------------------------------------------------------------- */
60
 
61
 static bool new_stream(struct ffmpeg_data *data, AVStream **stream,
62
-       AVCodec **codec, enum AVCodecID id)
63
+       AVCodec **codec, enum AVCodecID id, const char *name)
64
 {
65
-   *codec = avcodec_find_encoder(id);
66
+   *codec = (!!name && *name) ?
67
+       avcodec_find_encoder_by_name(name) :
68
+       avcodec_find_encoder(id);
69
+
70
    if (!*codec) {
71
        blog(LOG_WARNING, "Couldn't find encoder '%s'",
72
                avcodec_get_name(id));
73
@@ -109,14 +117,41 @@
74
    return true;
75
 }
76
 
77
+static void parse_params(AVCodecContext *context, char **opts)
78
+{
79
+   if (!context || !context->priv_data)
80
+       return;
81
+
82
+   while (*opts) {
83
+       char *opt = *opts;
84
+       char *assign = strchr(opt, '=');
85
+
86
+       if (assign) {
87
+           char *name = opt;
88
+           char *value;
89
+
90
+           *assign = 0;
91
+           value = assign+1;
92
+
93
+           av_opt_set(context->priv_data, name, value, 0);
94
+       }
95
+
96
+       opts++;
97
+   }
98
+}
99
+
100
 static bool open_video_codec(struct ffmpeg_data *data)
101
 {
102
    AVCodecContext *context = data->video->codec;
103
+   char **opts = strlist_split(data->config.video_settings, ' ', false);
104
    int ret;
105
 
106
-   if (data->vcodec->id == AV_CODEC_ID_H264) {
107
+   if (data->vcodec->id == AV_CODEC_ID_H264)
108
        av_opt_set(context->priv_data, "preset", "veryfast", 0);
109
-       av_opt_set(context->priv_data, "x264-params", "nal-hrd=cbr", 0);
110
+
111
+   if (opts) {
112
+       parse_params(context, opts);
113
+       strlist_free(opts);
114
    }
115
 
116
    ret = avcodec_open2(context, data->vcodec, NULL);
117
@@ -150,12 +185,11 @@
118
 
119
 static bool init_swscale(struct ffmpeg_data *data, AVCodecContext *context)
120
 {
121
-   enum AVPixelFormat format;
122
-   format = obs_to_ffmpeg_video_format(OBS_FFMPEG_VIDEO_FORMAT);
123
-
124
    data->swscale = sws_getContext(
125
-           context->width, context->height, format,
126
-           context->width, context->height, context->pix_fmt,
127
+           data->config.width, data->config.height,
128
+           data->config.format,
129
+           data->config.scale_width, data->config.scale_height,
130
+           context->pix_fmt,
131
            SWS_BICUBIC, NULL, NULL, NULL);
132
 
133
    if (!data->swscale) {
134
@@ -168,11 +202,9 @@
135
 
136
 static bool create_video_stream(struct ffmpeg_data *data)
137
 {
138
+   enum AVPixelFormat closest_format;
139
    AVCodecContext *context;
140
    struct obs_video_info ovi;
141
-   enum AVPixelFormat vformat;
142
-
143
-   vformat = obs_to_ffmpeg_video_format(OBS_FFMPEG_VIDEO_FORMAT);
144
 
145
    if (!obs_get_video_info(&ovi)) {
146
        blog(LOG_WARNING, "No active video");
147
@@ -180,20 +212,21 @@
148
    }
149
 
150
    if (!new_stream(data, &data->video, &data->vcodec,
151
-               data->output->oformat->video_codec))
152
+               data->output->oformat->video_codec,
153
+               data->config.video_encoder))
154
        return false;
155
 
156
+   closest_format = get_closest_format(data->config.format,
157
+           data->vcodec->pix_fmts);
158
+
159
    context                 = data->video->codec;
160
-   context->codec_id       = data->output->oformat->video_codec;
161
-   context->bit_rate       = data->video_bitrate * 1000;
162
-   context->rc_buffer_size = data->video_bitrate * 1000;
163
-   context->rc_max_rate    = data->video_bitrate * 1000;
164
-   context->width          = data->width;
165
-   context->height         = data->height;
166
+   context->bit_rate       = data->config.video_bitrate * 1000;
167
+   context->width          = data->config.scale_width;
168
+   context->height         = data->config.scale_height;
169
    context->time_base.num  = ovi.fps_den;
170
    context->time_base.den  = ovi.fps_num;
171
    context->gop_size       = 120;
172
-   context->pix_fmt        = vformat;
173
+   context->pix_fmt        = closest_format;
174
 
175
    if (data->output->oformat->flags & AVFMT_GLOBALHEADER)
176
        context->flags |= CODEC_FLAG_GLOBAL_HEADER;
177
@@ -201,9 +234,13 @@
178
    if (!open_video_codec(data))
179
        return false;
180
 
181
-   if (context->pix_fmt != vformat)
182
+   if (context->pix_fmt    != data->config.format ||
183
+       data->config.width  != data->config.scale_width ||
184
+       data->config.height != data->config.scale_height) {
185
+
186
        if (!init_swscale(data, context))
187
            return false;
188
+   }
189
 
190
    return true;
191
 }
192
@@ -211,8 +248,14 @@
193
 static bool open_audio_codec(struct ffmpeg_data *data)
194
 {
195
    AVCodecContext *context = data->audio->codec;
196
+   char **opts = strlist_split(data->config.video_settings, ' ', false);
197
    int ret;
198
 
199
+   if (opts) {
200
+       parse_params(context, opts);
201
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-libfdk/data/locale/zh-CN.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+LibFDK="libfdk AAC 编码器"
3
+Bitrate="比特率"
4
+Afterburner="启用 AAC Afterburner"
5
+
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/CMakeLists.txt Changed
19
 
1
@@ -2,9 +2,14 @@
2
 
3
 if(WIN32)
4
    set(obs-outputs_PLATFORM_DEPS
5
-       w32-pthreads
6
-       ws2_32.lib
7
-       winmm.lib)
8
+       ws2_32
9
+       winmm)
10
+endif()
11
+
12
+if(MSVC)
13
+   set(obs-outputs_PLATFORM_DEPS
14
+       ${obs-outputs_PLATFORM_DEPS}
15
+       w32-pthreads)
16
 endif()
17
 
18
 set(obs-outputs_librtmp_HEADERS
19
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/data/locale/zh-CN.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+RTMPStream="RTMP 流"
3
+RTMPStream.DropThreshold="Drop阈值(毫秒)"
4
+FLVOutput="FLV 文件输出"
5
+FLVOutput.FilePath="文件路径"
6
+
7
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/flv-mux.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/flv-mux.c Changed
93
 
1
@@ -56,11 +56,11 @@
2
    fwrite(buf, 1, enc - buf, file);
3
 }
4
 
5
-static void build_flv_meta_data(obs_output_t *context,
6
-       uint8_t **output, size_t *size)
7
+static bool build_flv_meta_data(obs_output_t *context,
8
+       uint8_t **output, size_t *size, size_t a_idx)
9
 {
10
    obs_encoder_t *vencoder = obs_output_get_video_encoder(context);
11
-   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context);
12
+   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, a_idx);
13
    video_t       *video    = obs_encoder_video(vencoder);
14
    audio_t       *audio    = obs_encoder_audio(aencoder);
15
    char buf[4096];
16
@@ -68,22 +68,29 @@
17
    char *end = enc+sizeof(buf);
18
    struct dstr encoder_name = {0};
19
 
20
+   if (a_idx > 0 && !aencoder)
21
+       return false;
22
+
23
    enc_str(&enc, end, "onMetaData");
24
 
25
    *enc++ = AMF_ECMA_ARRAY;
26
-   enc    = AMF_EncodeInt32(enc, end, 14);
27
+   enc    = AMF_EncodeInt32(enc, end, a_idx == 0 ? 14 : 9);
28
 
29
    enc_num_val(&enc, end, "duration", 0.0);
30
    enc_num_val(&enc, end, "fileSize", 0.0);
31
 
32
-   enc_num_val(&enc, end, "width",
33
-           (double)obs_encoder_get_width(vencoder));
34
-   enc_num_val(&enc, end, "height",
35
-           (double)obs_encoder_get_height(vencoder));
36
-
37
-   enc_str_val(&enc, end, "videocodecid", "avc1");
38
-   enc_num_val(&enc, end, "videodatarate", encoder_bitrate(vencoder));
39
-   enc_num_val(&enc, end, "framerate", video_output_get_frame_rate(video));
40
+   if (a_idx == 0) {
41
+       enc_num_val(&enc, end, "width",
42
+               (double)obs_encoder_get_width(vencoder));
43
+       enc_num_val(&enc, end, "height",
44
+               (double)obs_encoder_get_height(vencoder));
45
+
46
+       enc_str_val(&enc, end, "videocodecid", "avc1");
47
+       enc_num_val(&enc, end, "videodatarate",
48
+               encoder_bitrate(vencoder));
49
+       enc_num_val(&enc, end, "framerate",
50
+               video_output_get_frame_rate(video));
51
+   }
52
 
53
    enc_str_val(&enc, end, "audiocodecid", "mp4a");
54
    enc_num_val(&enc, end, "audiodatarate", encoder_bitrate(aencoder));
55
@@ -119,20 +126,25 @@
56
 
57
    *size   = enc-buf;
58
    *output = bmemdup(buf, *size);
59
+   return true;
60
 }
61
 
62
-void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
63
-       bool write_header)
64
+bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
65
+       bool write_header, size_t audio_idx)
66
 {
67
    struct array_output_data data;
68
    struct serializer s;
69
-   uint8_t *meta_data;
70
+   uint8_t *meta_data = NULL;
71
    size_t  meta_data_size;
72
    uint32_t start_pos;
73
 
74
    array_output_serializer_init(&s, &data);
75
 
76
-   build_flv_meta_data(context, &meta_data, &meta_data_size);
77
+   if (!build_flv_meta_data(context, &meta_data, &meta_data_size,
78
+               audio_idx)) {
79
+       bfree(meta_data);
80
+       return false;
81
+   }
82
 
83
    if (write_header) {
84
        s_write(&s, "FLV", 3);
85
@@ -158,6 +170,7 @@
86
    *size   = data.bytes.num;
87
 
88
    bfree(meta_data);
89
+   return true;
90
 }
91
 
92
 #ifdef DEBUG_TIMESTAMPS
93
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/flv-mux.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/flv-mux.h Changed
11
 
1
@@ -28,7 +28,7 @@
2
 
3
 extern void write_file_info(FILE *file, int64_t duration_ms, int64_t size);
4
 
5
-extern void flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
6
-       bool write_header);
7
+extern bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
8
+       bool write_header, size_t audio_idx);
9
 extern void flv_packet_mux(struct encoder_packet *packet,
10
        uint8_t **output, size_t *size, bool is_header);
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/flv-output.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/flv-output.c Changed
19
 
1
@@ -107,7 +107,7 @@
2
    uint8_t *meta_data;
3
    size_t  meta_data_size;
4
 
5
-   flv_meta_data(stream->output, &meta_data, &meta_data_size, true);
6
+   flv_meta_data(stream->output, &meta_data, &meta_data_size, true, 0);
7
    fwrite(meta_data, 1, meta_data_size, stream->file);
8
    bfree(meta_data);
9
 }
10
@@ -115,7 +115,7 @@
11
 static void write_audio_header(struct flv_output *stream)
12
 {
13
    obs_output_t  *context  = stream->output;
14
-   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context);
15
+   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, 0);
16
    uint8_t       *header;
17
 
18
    struct encoder_packet packet   = {
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/amf.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/amf.c Changed
36
 
1
@@ -483,6 +483,7 @@
2
 
3
         return len + nSize;
4
     }
5
+    return len;
6
 }
7
 
8
 int
9
@@ -504,7 +505,7 @@
10
     /* decode name */
11
     if (bDecodeName)
12
     {
13
-        AVal name;
14
+        AVal name = AV_empty;
15
         int nRes = AMF3ReadString(pBuffer, &name);
16
 
17
         if (name.av_len <= 0)
18
@@ -863,7 +864,7 @@
19
 void
20
 AMFProp_Reset(AMFObjectProperty *prop)
21
 {
22
-    if (prop->p_type == AMF_OBJECT)
23
+    if (prop->p_type == AMF_OBJECT || prop->p_type == AMF_ECMA_ARRAY || prop->p_type == AMF_STRICT_ARRAY)
24
         AMF_Reset(&prop->p_vu.p_object);
25
     else
26
     {
27
@@ -1078,7 +1079,7 @@
28
 
29
             for (i = 0; i < cd.cd_num; i++)
30
             {
31
-                AVal memberName;
32
+                AVal memberName = AV_empty;
33
                 len = AMF3ReadString(pBuffer, &memberName);
34
                 RTMP_Log(RTMP_LOGDEBUG, "Member: %s", memberName.av_val);
35
                 AMF3CD_AddProp(&cd, &memberName);
36
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/hashswf.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/hashswf.c Changed
10
 
1
@@ -131,7 +131,7 @@
2
     }
3
     sa.sin_port = htons(port);
4
     sb.sb_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
5
-    if (sb.sb_socket == -1)
6
+    if (sb.sb_socket == INVALID_SOCKET)
7
         return HTTPRES_LOST_CONNECTION;
8
     i =
9
         sprintf(sb.sb_buf,
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/parseurl.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/parseurl.c Changed
195
 
1
@@ -25,180 +25,9 @@
2
 #include "log.h"
3
 
4
 int RTMP_ParseURL(const char *url, int *protocol, AVal *host, unsigned int *port,
5
-                  AVal *playpath, AVal *app)
6
-{
7
-    char *p, *end, *col, *ques, *slash;
8
-
9
-    RTMP_Log(RTMP_LOGDEBUG, "Parsing...");
10
-
11
-    *protocol = RTMP_PROTOCOL_RTMP;
12
-    *port = 0;
13
-    playpath->av_len = 0;
14
-    playpath->av_val = NULL;
15
-    app->av_len = 0;
16
-    app->av_val = NULL;
17
-
18
-    /* Old School Parsing */
19
-
20
-    /* look for usual :// pattern */
21
-    p = strstr(url, "://");
22
-    if(!p)
23
-    {
24
-        RTMP_Log(RTMP_LOGERROR, "RTMP URL: No :// in url!");
25
-        return FALSE;
26
-    }
27
-    {
28
-        int len = (int)(p-url);
29
-
30
-        if(len == 4 && strncasecmp(url, "rtmp", 4)==0)
31
-            *protocol = RTMP_PROTOCOL_RTMP;
32
-        else if(len == 5 && strncasecmp(url, "rtmpt", 5)==0)
33
-            *protocol = RTMP_PROTOCOL_RTMPT;
34
-        else if(len == 5 && strncasecmp(url, "rtmps", 5)==0)
35
-            *protocol = RTMP_PROTOCOL_RTMPS;
36
-        else if(len == 5 && strncasecmp(url, "rtmpe", 5)==0)
37
-            *protocol = RTMP_PROTOCOL_RTMPE;
38
-        else if(len == 5 && strncasecmp(url, "rtmfp", 5)==0)
39
-            *protocol = RTMP_PROTOCOL_RTMFP;
40
-        else if(len == 6 && strncasecmp(url, "rtmpte", 6)==0)
41
-            *protocol = RTMP_PROTOCOL_RTMPTE;
42
-        else if(len == 6 && strncasecmp(url, "rtmpts", 6)==0)
43
-            *protocol = RTMP_PROTOCOL_RTMPTS;
44
-        else
45
-        {
46
-            RTMP_Log(RTMP_LOGWARNING, "Unknown protocol!\n");
47
-            goto parsehost;
48
-        }
49
-    }
50
-
51
-    RTMP_Log(RTMP_LOGDEBUG, "Parsed protocol: %d", *protocol);
52
-
53
-parsehost:
54
-    /* let's get the hostname */
55
-    p+=3;
56
-
57
-    /* check for sudden death */
58
-    if(*p==0)
59
-    {
60
-        RTMP_Log(RTMP_LOGWARNING, "No hostname in URL!");
61
-        return FALSE;
62
-    }
63
-
64
-    end   = p + strlen(p);
65
-    col   = strchr(p, ':');
66
-    ques  = strchr(p, '?');
67
-    slash = strchr(p, '/');
68
-
69
-    {
70
-        int hostlen;
71
-        if(slash)
72
-            hostlen = slash - p;
73
-        else
74
-            hostlen = end - p;
75
-        if(col && col -p < hostlen)
76
-            hostlen = col - p;
77
-
78
-        if(hostlen < 256)
79
-        {
80
-            host->av_val = p;
81
-            host->av_len = hostlen;
82
-            RTMP_Log(RTMP_LOGDEBUG, "Parsed host    : %.*s", hostlen, host->av_val);
83
-        }
84
-        else
85
-        {
86
-            RTMP_Log(RTMP_LOGWARNING, "Hostname exceeds 255 characters!");
87
-        }
88
-
89
-        p+=hostlen;
90
-    }
91
-
92
-    /* get the port number if available */
93
-    if(*p == ':')
94
-    {
95
-        unsigned int p2;
96
-        p++;
97
-        p2 = atoi(p);
98
-        if(p2 > 65535)
99
-        {
100
-            RTMP_Log(RTMP_LOGWARNING, "Invalid port number!");
101
-        }
102
-        else
103
-        {
104
-            *port = p2;
105
-        }
106
-    }
107
-
108
-    if(!slash)
109
-    {
110
-        RTMP_Log(RTMP_LOGWARNING, "No application or playpath in URL!");
111
-        return TRUE;
112
-    }
113
-    p = slash+1;
114
-
115
-    {
116
-        /* parse application
117
-         *
118
-         * rtmp://host[:port]/app[/appinstance][/...]
119
-         * application = app[/appinstance]
120
-         */
121
-
122
-        char *slash2, *slash3 = NULL, *slash4 = NULL;
123
-        int applen, appnamelen;
124
-
125
-        slash2 = strchr(p, '/');
126
-        if(slash2)
127
-            slash3 = strchr(slash2+1, '/');
128
-        if(slash3)
129
-            slash4 = strchr(slash3+1, '/');
130
-
131
-        applen = end-p; /* ondemand, pass all parameters as app */
132
-        appnamelen = applen; /* ondemand length */
133
-
134
-        if(ques && strstr(p, "slist="))   /* whatever it is, the '?' and slist= means we need to use everything as app and parse plapath from slist= */
135
-        {
136
-            appnamelen = ques-p;
137
-        }
138
-        else if(strncmp(p, "ondemand/", 9)==0)
139
-        {
140
-            /* app = ondemand/foobar, only pass app=ondemand */
141
-            applen = 8;
142
-            appnamelen = 8;
143
-        }
144
-        else   /* app!=ondemand, so app is app[/appinstance] */
145
-        {
146
-            if(slash4)
147
-                appnamelen = slash4-p;
148
-            else if(slash3)
149
-                appnamelen = slash3-p;
150
-            else if(slash2)
151
-                appnamelen = slash2-p;
152
-
153
-            applen = appnamelen;
154
-        }
155
-
156
-        app->av_val = p;
157
-        app->av_len = applen;
158
-        RTMP_Log(RTMP_LOGDEBUG, "Parsed app     : %.*s", applen, p);
159
-
160
-        p += appnamelen;
161
-    }
162
-
163
-    if (*p == '/')
164
-        p++;
165
-
166
-    if (end-p)
167
-    {
168
-        AVal av = {p, end-p};
169
-        RTMP_ParsePlaypath(&av, playpath);
170
-    }
171
-
172
-    return TRUE;
173
-}
174
-
175
-int RTMP_ParseURL2(const char *url, int *protocol, AVal *host, unsigned int *port,
176
                   AVal *app)
177
 {
178
-    char *p, *end, *col, /* *ques, */ *slash;
179
+    char *p, *end, *col, /* *ques, */ *slash, *v6;
180
 
181
     RTMP_Log(RTMP_LOGDEBUG, "Parsing...");
182
 
183
@@ -254,9 +83,10 @@
184
     }
185
 
186
     end   = p + strlen(p);
187
-    col   = strchr(p, ':');
188
+    v6    = strchr(p, ']');
189
     // ques  = strchr(p, '?');
190
     slash = strchr(p, '/');
191
+    col   = strchr((v6 && v6 < slash) ? v6 : p, ':');
192
 
193
     {
194
         int hostlen;
195
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/rtmp.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/rtmp.c Changed
201
 
1
@@ -115,10 +115,10 @@
2
 static int SendCheckBWResult(RTMP *r, double txn);
3
 static int SendDeleteStream(RTMP *r, double dStreamId);
4
 static int SendFCSubscribe(RTMP *r, AVal *subscribepath);
5
-static int SendPlay(RTMP *r);
6
+static int SendPlay(RTMP *r, int streamIdx);
7
 static int SendBytesReceived(RTMP *r);
8
 static int SendUsherToken(RTMP *r, AVal *usherToken);
9
-static int SendFCUnpublish(RTMP *r);
10
+static int SendFCUnpublish(RTMP *r, int streamIdx);
11
 
12
 #if 0              /* unused */
13
 static int SendBGHasStream(RTMP *r, double dId, AVal *playpath);
14
@@ -379,6 +379,8 @@
15
     r->m_nServerBW = 2500000;
16
     r->m_fAudioCodecs = 3191.0;
17
     r->m_fVideoCodecs = 252.0;
18
+    r->Link.curStreamIdx = 0;
19
+    r->Link.nStreams = 0;
20
     r->Link.timeout = 30;
21
     r->Link.swfAge = 30;
22
 }
23
@@ -398,7 +400,7 @@
24
 int
25
 RTMP_IsConnected(RTMP *r)
26
 {
27
-    return r->m_sb.sb_socket != -1;
28
+    return r->m_sb.sb_socket != INVALID_SOCKET;
29
 }
30
 
31
 SOCKET
32
@@ -467,244 +469,6 @@
33
     }
34
 }
35
 
36
-void
37
-RTMP_SetupStream(RTMP *r,
38
-                 int protocol,
39
-                 AVal *host,
40
-                 unsigned int port,
41
-                 AVal *sockshost,
42
-                 AVal *playpath,
43
-                 AVal *tcUrl,
44
-                 AVal *swfUrl,
45
-                 AVal *pageUrl,
46
-                 AVal *app,
47
-                 AVal *auth,
48
-                 AVal *swfSHA256Hash,
49
-                 uint32_t swfSize,
50
-                 AVal *flashVer,
51
-                 AVal *subscribepath,
52
-                 AVal *usherToken,
53
-                 int dStart,
54
-                 int dStop, int bLiveStream, long int timeout)
55
-{
56
-    RTMP_Log(RTMP_LOGDEBUG, "Protocol : %s", RTMPProtocolStrings[protocol&7]);
57
-    RTMP_Log(RTMP_LOGDEBUG, "Hostname : %.*s", host->av_len, host->av_val);
58
-    RTMP_Log(RTMP_LOGDEBUG, "Port     : %d", port);
59
-    RTMP_Log(RTMP_LOGDEBUG, "Playpath : %s", playpath->av_val);
60
-
61
-    if (tcUrl && tcUrl->av_val)
62
-        RTMP_Log(RTMP_LOGDEBUG, "tcUrl    : %s", tcUrl->av_val);
63
-    if (swfUrl && swfUrl->av_val)
64
-        RTMP_Log(RTMP_LOGDEBUG, "swfUrl   : %s", swfUrl->av_val);
65
-    if (pageUrl && pageUrl->av_val)
66
-        RTMP_Log(RTMP_LOGDEBUG, "pageUrl  : %s", pageUrl->av_val);
67
-    if (app && app->av_val)
68
-        RTMP_Log(RTMP_LOGDEBUG, "app      : %.*s", app->av_len, app->av_val);
69
-    if (auth && auth->av_val)
70
-        RTMP_Log(RTMP_LOGDEBUG, "auth     : %s", auth->av_val);
71
-    if (subscribepath && subscribepath->av_val)
72
-        RTMP_Log(RTMP_LOGDEBUG, "subscribepath : %s", subscribepath->av_val);
73
-    if (usherToken && usherToken->av_val)
74
-        RTMP_Log(RTMP_LOGDEBUG, "NetStream.Authenticate.UsherToken : %s", usherToken->av_val);
75
-    if (flashVer && flashVer->av_val)
76
-        RTMP_Log(RTMP_LOGDEBUG, "flashVer : %s", flashVer->av_val);
77
-    if (dStart > 0)
78
-        RTMP_Log(RTMP_LOGDEBUG, "StartTime     : %d msec", dStart);
79
-    if (dStop > 0)
80
-        RTMP_Log(RTMP_LOGDEBUG, "StopTime      : %d msec", dStop);
81
-
82
-    RTMP_Log(RTMP_LOGDEBUG, "live     : %s", bLiveStream ? "yes" : "no");
83
-    RTMP_Log(RTMP_LOGDEBUG, "timeout  : %ld sec", timeout);
84
-
85
-#ifdef CRYPTO
86
-    if (swfSHA256Hash != NULL && swfSize > 0)
87
-    {
88
-        memcpy(r->Link.SWFHash, swfSHA256Hash->av_val, sizeof(r->Link.SWFHash));
89
-        r->Link.SWFSize = swfSize;
90
-        RTMP_Log(RTMP_LOGDEBUG, "SWFSHA256:");
91
-        RTMP_LogHex(RTMP_LOGDEBUG, r->Link.SWFHash, sizeof(r->Link.SWFHash));
92
-        RTMP_Log(RTMP_LOGDEBUG, "SWFSize  : %u", r->Link.SWFSize);
93
-    }
94
-    else
95
-    {
96
-        r->Link.SWFSize = 0;
97
-    }
98
-
99
-#else
100
-    (void)swfSHA256Hash;
101
-    (void)swfSize;
102
-#endif
103
-
104
-    SocksSetup(r, sockshost);
105
-
106
-    if (tcUrl && tcUrl->av_len)
107
-        r->Link.tcUrl = *tcUrl;
108
-    if (swfUrl && swfUrl->av_len)
109
-        r->Link.swfUrl = *swfUrl;
110
-    if (pageUrl && pageUrl->av_len)
111
-        r->Link.pageUrl = *pageUrl;
112
-    if (app && app->av_len)
113
-        r->Link.app = *app;
114
-    if (auth && auth->av_len)
115
-    {
116
-        r->Link.auth = *auth;
117
-        r->Link.lFlags |= RTMP_LF_AUTH;
118
-    }
119
-    if (flashVer && flashVer->av_len)
120
-        r->Link.flashVer = *flashVer;
121
-    else
122
-        r->Link.flashVer = RTMP_DefaultFlashVer;
123
-    if (subscribepath && subscribepath->av_len)
124
-        r->Link.subscribepath = *subscribepath;
125
-    if (usherToken && usherToken->av_len)
126
-        r->Link.usherToken = *usherToken;
127
-    r->Link.seekTime = dStart;
128
-    r->Link.stopTime = dStop;
129
-    if (bLiveStream)
130
-        r->Link.lFlags |= RTMP_LF_LIVE;
131
-    r->Link.timeout = timeout;
132
-
133
-    r->Link.protocol = protocol;
134
-    r->Link.hostname = *host;
135
-    r->Link.port = port;
136
-    r->Link.playpath = *playpath;
137
-
138
-    if (r->Link.port == 0)
139
-    {
140
-        if (protocol & RTMP_FEATURE_SSL)
141
-            r->Link.port = 443;
142
-        else if (protocol & RTMP_FEATURE_HTTP)
143
-            r->Link.port = 80;
144
-        else
145
-            r->Link.port = 1935;
146
-    }
147
-}
148
-
149
-enum { OPT_STR=0, OPT_INT, OPT_BOOL, OPT_CONN };
150
-static const char *optinfo[] =
151
-{
152
-    "string", "integer", "boolean", "AMF"
153
-};
154
-
155
-#define OFF(x) offsetof(struct RTMP,x)
156
-
157
-static struct urlopt
158
-{
159
-    AVal name;
160
-    off_t off;
161
-    int otype;
162
-    int omisc;
163
-    char *use;
164
-} options[] =
165
-{
166
-    {
167
-        AVC("socks"),     OFF(Link.sockshost),     OPT_STR, 0,
168
-        "Use the specified SOCKS proxy"
169
-    },
170
-    {
171
-        AVC("app"),       OFF(Link.app),           OPT_STR, 0,
172
-        "Name of target app on server"
173
-    },
174
-    {
175
-        AVC("tcUrl"),     OFF(Link.tcUrl),         OPT_STR, 0,
176
-        "URL to played stream"
177
-    },
178
-    {
179
-        AVC("pageUrl"),   OFF(Link.pageUrl),       OPT_STR, 0,
180
-        "URL of played media's web page"
181
-    },
182
-    {
183
-        AVC("swfUrl"),    OFF(Link.swfUrl),        OPT_STR, 0,
184
-        "URL to player SWF file"
185
-    },
186
-    {
187
-        AVC("flashver"),  OFF(Link.flashVer),      OPT_STR, 0,
188
-        "Flash version string (default " DEF_VERSTR ")"
189
-    },
190
-    {
191
-        AVC("conn"),      OFF(Link.extras),        OPT_CONN, 0,
192
-        "Append arbitrary AMF data to Connect message"
193
-    },
194
-    {
195
-        AVC("playpath"),  OFF(Link.playpath),      OPT_STR, 0,
196
-        "Path to target media on server"
197
-    },
198
-    {
199
-        AVC("playlist"),  OFF(Link.lFlags),        OPT_BOOL, RTMP_LF_PLST,
200
-        "Set playlist before play command"
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/rtmp.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/rtmp.h Changed
97
 
1
@@ -37,9 +37,12 @@
2
 #include <stdint.h>
3
 
4
 #ifdef _WIN32
5
+#ifdef _MSC_VER
6
 #pragma warning(disable:4996) //depricated warnings
7
 #pragma warning(disable:4244) //64bit defensive mechanism, fixed the ones that mattered
8
-#include <winsock.h>
9
+#endif
10
+#include <winsock2.h>
11
+#include <ws2tcpip.h>
12
 #else
13
 #include <sys/socket.h>
14
 #include <netinet/in.h>
15
@@ -154,13 +157,22 @@
16
 
17
 #define RTMPPacket_IsReady(a)  ((a)->m_nBytesRead == (a)->m_nBodySize)
18
 
19
+    typedef struct RTMP_Stream {
20
+        int id;
21
+        AVal playpath;
22
+    } RTMP_Stream;
23
+
24
     typedef struct RTMP_LNK
25
     {
26
+#define RTMP_MAX_STREAMS 8
27
+        RTMP_Stream streams[RTMP_MAX_STREAMS];
28
+        int nStreams;
29
+        int curStreamIdx;
30
+        int playingStreams;
31
+
32
         AVal hostname;
33
         AVal sockshost;
34
 
35
-        AVal playpath0;    /* parsed from URL */
36
-        AVal playpath; /* passed in explicitly */
37
         AVal tcUrl;
38
         AVal swfUrl;
39
         AVal pageUrl;
40
@@ -253,7 +265,7 @@
41
 
42
     typedef struct RTMP_BINDINFO
43
     {
44
-        struct sockaddr_in addr;
45
+        struct sockaddr_storage addr;
46
         int addrLen;
47
     } RTMP_BINDINFO;
48
 
49
@@ -317,9 +329,6 @@
50
     } RTMP;
51
 
52
     int RTMP_ParseURL(const char *url, int *protocol, AVal *host,
53
-                      unsigned int *port, AVal *playpath, AVal *app);
54
-
55
-    int RTMP_ParseURL2(const char *url, int *protocol, AVal *host,
56
                       unsigned int *port, AVal *app);
57
 
58
     void RTMP_ParsePlaypath(AVal *in, AVal *out);
59
@@ -328,7 +337,7 @@
60
 
61
     int RTMP_SetOpt(RTMP *r, const AVal *opt, AVal *arg);
62
     int RTMP_SetupURL(RTMP *r, char *url);
63
-    int RTMP_SetupURL2(RTMP *r, char *url, char *playpath);
64
+    int RTMP_AddStream(RTMP *r, const char *playpath);
65
     void RTMP_SetupStream(RTMP *r, int protocol,
66
                           AVal *hostname,
67
                           unsigned int port,
68
@@ -349,7 +358,7 @@
69
 
70
     int RTMP_Connect(RTMP *r, RTMPPacket *cp);
71
     struct sockaddr;
72
-    int RTMP_Connect0(RTMP *r, struct sockaddr *svc);
73
+    int RTMP_Connect0(RTMP *r, struct sockaddr *svc, socklen_t addrlen);
74
     int RTMP_Connect1(RTMP *r, RTMPPacket *cp);
75
     int RTMP_Serve(RTMP *r);
76
     int RTMP_TLS_Accept(RTMP *r, void *ctx);
77
@@ -364,8 +373,8 @@
78
     int RTMP_ToggleStream(RTMP *r);
79
 
80
     int RTMP_ConnectStream(RTMP *r, int seekTime);
81
-    int RTMP_ReconnectStream(RTMP *r, int seekTime);
82
-    void RTMP_DeleteStream(RTMP *r);
83
+    int RTMP_ReconnectStream(RTMP *r, int seekTime, int streamIdx);
84
+    void RTMP_DeleteStream(RTMP *r, int streamIdx);
85
     int RTMP_GetNextMediaPacket(RTMP *r, RTMPPacket *packet);
86
     int RTMP_ClientPacket(RTMP *r, RTMPPacket *packet);
87
 
88
@@ -403,7 +412,7 @@
89
     int RTMP_SendClientBW(RTMP *r);
90
     void RTMP_DropRequest(RTMP *r, int i, int freeit);
91
     int RTMP_Read(RTMP *r, char *buf, int size);
92
-    int RTMP_Write(RTMP *r, const char *buf, int size);
93
+    int RTMP_Write(RTMP *r, const char *buf, int size, int streamIdx);
94
 
95
     /* hashswf.c */
96
     int RTMP_HashSWF(const char *url, unsigned int *size, unsigned char *hash,
97
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/librtmp/rtmp_sys.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/librtmp/rtmp_sys.h Changed
19
 
1
@@ -38,6 +38,7 @@
2
 
3
 #include <winsock2.h>
4
 #include <ws2tcpip.h>
5
+#include <Mstcpip.h>
6
 
7
 
8
 #ifdef _MSC_VER    /* MSVC */
9
@@ -72,6 +73,9 @@
10
 #define closesocket(s) close(s)
11
 #define msleep(n)  usleep(n*1000)
12
 #define SET_RCVTIMEO(tv,s) struct timeval tv = {s,0}
13
+#ifndef INVALID_SOCKET
14
+#define INVALID_SOCKET -1
15
+#endif
16
 #endif
17
 
18
 #include "rtmp.h"
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/rtmp-helpers.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/rtmp-helpers.h Changed
10
 
1
@@ -15,6 +15,8 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#pragma once
6
+
7
 #include "librtmp/rtmp.h"
8
 
9
 static inline AVal *flv_str(AVal *out, const char *str)
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-outputs/rtmp-stream.c Changed
170
 
1
@@ -191,7 +191,7 @@
2
 }
3
 
4
 static int send_packet(struct rtmp_stream *stream,
5
-       struct encoder_packet *packet, bool is_header)
6
+       struct encoder_packet *packet, bool is_header, size_t idx)
7
 {
8
    uint8_t *data;
9
    size_t  size;
10
@@ -201,7 +201,7 @@
11
 #ifdef TEST_FRAMEDROPS
12
    os_sleep_ms(rand() % 40);
13
 #endif
14
-   ret = RTMP_Write(&stream->rtmp, (char*)data, (int)size);
15
+   ret = RTMP_Write(&stream->rtmp, (char*)data, (int)size, (int)idx);
16
    bfree(data);
17
 
18
    obs_free_encoder_packet(packet);
19
@@ -220,7 +220,7 @@
20
        send_headers(stream);
21
 
22
    while (get_next_packet(stream, &packet))
23
-       if (send_packet(stream, &packet, false) < 0)
24
+       if (send_packet(stream, &packet, false, packet.track_idx) < 0)
25
            return false;
26
 
27
    return true;
28
@@ -242,7 +242,7 @@
29
        if (!stream->sent_headers)
30
            send_headers(stream);
31
 
32
-       if (send_packet(stream, &packet, false) < 0) {
33
+       if (send_packet(stream, &packet, false, packet.track_idx) < 0) {
34
            disconnected = true;
35
            break;
36
        }
37
@@ -267,20 +267,26 @@
38
    return NULL;
39
 }
40
 
41
-static void send_meta_data(struct rtmp_stream *stream)
42
+static bool send_meta_data(struct rtmp_stream *stream, size_t idx)
43
 {
44
    uint8_t *meta_data;
45
    size_t  meta_data_size;
46
+   bool success = flv_meta_data(stream->output, &meta_data,
47
+           &meta_data_size, false, idx);
48
 
49
-   flv_meta_data(stream->output, &meta_data, &meta_data_size, false);
50
-   RTMP_Write(&stream->rtmp, (char*)meta_data, (int)meta_data_size);
51
-   bfree(meta_data);
52
+   if (success) {
53
+       RTMP_Write(&stream->rtmp, (char*)meta_data,
54
+               (int)meta_data_size, (int)idx);
55
+       bfree(meta_data);
56
+   }
57
+
58
+   return success;
59
 }
60
 
61
-static void send_audio_header(struct rtmp_stream *stream)
62
+static bool send_audio_header(struct rtmp_stream *stream, size_t idx)
63
 {
64
    obs_output_t  *context  = stream->output;
65
-   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context);
66
+   obs_encoder_t *aencoder = obs_output_get_audio_encoder(context, idx);
67
    uint8_t       *header;
68
 
69
    struct encoder_packet packet   = {
70
@@ -288,9 +294,13 @@
71
        .timebase_den = 1
72
    };
73
 
74
+   if (!aencoder)
75
+       return false;
76
+
77
    obs_encoder_get_extra_data(aencoder, &header, &packet.size);
78
    packet.data = bmemdup(header, packet.size);
79
-   send_packet(stream, &packet, true);
80
+   send_packet(stream, &packet, true, idx);
81
+   return true;
82
 }
83
 
84
 static void send_video_header(struct rtmp_stream *stream)
85
@@ -308,14 +318,18 @@
86
 
87
    obs_encoder_get_extra_data(vencoder, &header, &size);
88
    packet.size = obs_parse_avc_header(&packet.data, header, size);
89
-   send_packet(stream, &packet, true);
90
+   send_packet(stream, &packet, true, 0);
91
 }
92
 
93
 static inline void send_headers(struct rtmp_stream *stream)
94
 {
95
    stream->sent_headers = true;
96
-   send_audio_header(stream);
97
+   size_t i = 0;
98
+
99
+   send_audio_header(stream, i++);
100
    send_video_header(stream);
101
+
102
+   while (send_audio_header(stream, i++));
103
 }
104
 
105
 static inline bool reset_semaphore(struct rtmp_stream *stream)
106
@@ -348,6 +362,7 @@
107
 static int init_send(struct rtmp_stream *stream)
108
 {
109
    int ret;
110
+   size_t idx = 0;
111
 
112
 #if defined(_WIN32)
113
    adjust_sndbuf_size(stream, MIN_SENDBUF_SIZE);
114
@@ -363,7 +378,7 @@
115
    }
116
 
117
    stream->active = true;
118
-   send_meta_data(stream);
119
+   while (send_meta_data(stream, idx++));
120
    obs_output_begin_data_capture(stream->output, 0);
121
 
122
    return OBS_OUTPUT_SUCCESS;
123
@@ -378,8 +393,7 @@
124
 
125
    info("Connecting to RTMP URL %s...", stream->path.array);
126
 
127
-   if (!RTMP_SetupURL2(&stream->rtmp, stream->path.array,
128
-               stream->key.array))
129
+   if (!RTMP_SetupURL(&stream->rtmp, stream->path.array))
130
        return OBS_OUTPUT_BAD_PATH;
131
 
132
    RTMP_EnableWrite(&stream->rtmp);
133
@@ -390,6 +404,20 @@
134
    set_rtmp_str(&stream->rtmp.Link.flashVer,
135
            "FMLE/3.0 (compatible; FMSc/1.0)");
136
 
137
+   RTMP_AddStream(&stream->rtmp, stream->key.array);
138
+
139
+   for (size_t idx = 1;; idx++) {
140
+       obs_encoder_t *encoder = obs_output_get_audio_encoder(
141
+               stream->output, idx);
142
+       const char *encoder_name;
143
+
144
+       if (!encoder)
145
+           break;
146
+
147
+       encoder_name = obs_encoder_get_name(encoder);
148
+       RTMP_AddStream(&stream->rtmp, encoder_name);
149
+   }
150
+
151
    stream->rtmp.m_outChunkSize       = 4096;
152
    stream->rtmp.m_bSendChunkSizeInfo = true;
153
    stream->rtmp.m_bUseNagle          = true;
154
@@ -600,7 +628,8 @@
155
    .id                 = "rtmp_output",
156
    .flags              = OBS_OUTPUT_AV |
157
                          OBS_OUTPUT_ENCODED |
158
-                         OBS_OUTPUT_SERVICE,
159
+                         OBS_OUTPUT_SERVICE |
160
+                         OBS_OUTPUT_MULTI_TRACK,
161
    .get_name           = rtmp_stream_getname,
162
    .create             = rtmp_stream_create,
163
    .destroy            = rtmp_stream_destroy,
164
@@ -611,4 +640,4 @@
165
    .get_properties     = rtmp_stream_properties,
166
    .get_total_bytes    = rtmp_stream_total_bytes_sent,
167
    .get_dropped_frames = rtmp_stream_dropped_frames
168
-};         
169
+};
170
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/ar-SA.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/ar-SA.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="معدل النقل"
3
 BufferSize="حجم المخزن المؤقت"
4
 KeyframeIntervalSec="الفاصل الزمني لـKeyframe (ثانية, 0=تلقائي)"
5
-CPUPreset="استخدام المعالج (سرعة التشفير)"
6
 Profile="الملف الشخصي"
7
 Tune="لحن"
8
-EncoderOptions="خيارات تشفير x264 (مفصولة بالمسافة)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/bg-BG.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/bg-BG.ini Changed
9
 
1
@@ -1,7 +1,5 @@
2
 Bitrate="Битрейт"
3
 BufferSize="Размер на буфера"
4
 KeyframeIntervalSec="Keyframe интервал (секунди, 0 = автоматично)"
5
-CPUPreset="CPU Usage Preset (скорост на енкодера)"
6
 Profile="Профил"
7
-EncoderOptions="x264 Настройки (отдалечени с празно място)"
8
 
9
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/da-DK.ini Changed
15
 
1
@@ -1,8 +1,11 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Brug brugerdefineret bufferstørrelse"
4
 BufferSize="Bufferstørrelsen"
5
+UseCBR="Brug CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe Interval (sekunder, 0 = auto)"
8
-CPUPreset="CPU Forbrug Forudindstillede (enkoder hastighed)"
9
 Profile="Profil"
10
 Tune="Stil ind"
11
-EncoderOptions="x264 Encoder Indstillinger (adskilt af mellemrum)"
12
+None="(Ingen)"
13
+EncoderOptions="x264 indstillinger (adskilt af mellemrum)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/de-DE.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Verwende benutzerdefinierte Puffergröße"
4
 BufferSize="Puffergröße"
5
+UseCBR="Benutze CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframeintervall (Sekunden, 0=auto)"
8
-CPUPreset="CPU Voreinstellung (Encoder Geschwindigkeit)"
9
+CPUPreset="Prozessorauslastung-Voreinstellung (höher = weniger CPU Auslastung)"
10
 Profile="Profil"
11
 Tune="Tune"
12
-EncoderOptions="x264 Encoder-Optionen (durch Leerzeichen getrennt)"
13
+None="(Nichts)"
14
+EncoderOptions="x264 Optionen (durch Leerzeichen getrennt)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/el-GR.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Ρυθμός μετάδοσης bit"
3
+CustomBufsize="Χρήση Προσαρμοσμένου Μεγέθους Buffer"
4
 BufferSize="Μέγεθος buffer"
5
+UseCBR="Χρήση CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Συχνότητα Καρέ-Κλειδιού (δευτερόλεπτα, 0=αυτόματο)"
8
-CPUPreset="Προφίλ Χρήσης CPU (ταχύτητα κωδικοποιητή)"
9
+CPUPreset="Προφίλ Χρήσης CPU (υψηλότερο = λιγότερη CPU)"
10
 Profile="Προφίλ"
11
 Tune="Βελτιστοποίηση"
12
-EncoderOptions="Επιλογές κωδικοποιητή x264 (χωρίζονται με κενό)"
13
+None="(Κανένα)"
14
+EncoderOptions="Επιλογές x264 (διαχωρισμένες από κενό)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/en-US.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/en-US.ini Changed
15
 
1
@@ -1,7 +1,11 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Use Custom Buffer Size"
4
 BufferSize="Buffer Size"
5
+UseCBR="Use CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
8
-CPUPreset="CPU Usage Preset (encoder speed)"
9
+CPUPreset="CPU Usage Preset (higher = less CPU)"
10
 Profile="Profile"
11
 Tune="Tune"
12
-EncoderOptions="x264 Encoder Options (separated by space)"
13
+None="(None)"
14
+EncoderOptions="x264 Options (separated by space)"
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/es-ES.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Tasa de bits"
3
+CustomBufsize="Usar tamaño de caché personalizado"
4
 BufferSize="Tamaño de la memoria intermedia"
5
+UseCBR="Usar CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Intervalo de fotogramas clave (segundos, 0 = auto)"
8
-CPUPreset="Preajuste del uso de CPU (velocidad del codificador)"
9
+CPUPreset="Perfíl de uso de CPU (superior = menos CPU)"
10
 Profile="Perfil"
11
 Tune="Sintonizar"
12
-EncoderOptions="Opciones del codificador x264 (separadas por espacio)"
13
+None="(Ninguno)"
14
+EncoderOptions="Opciones x264 (separadas por espacio)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/eu-ES.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitneurria"
3
+CustomBufsize="Erabili Norbere Buffer Neurria"
4
 BufferSize="Buffer Neurria"
5
+UseCBR="Erabili BNG"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Giltzaframe Tartea (segundu, 0=berez)"
8
-CPUPreset="CPU Erabilpen Aurrezarpena (kodeatzaile abiadura)"
9
+CPUPreset="CPU Erabilpen Aurrezarpena (handiagoa = CPU gutxiago)"
10
 Profile="Profila"
11
 Tune="Sintonizatu"
12
-EncoderOptions="x264 Kodeatzaile Aukerak (tarte batez bananduta)"
13
+None="(Bat ere ez)"
14
+EncoderOptions="x264 Aukerak (tarte batez bananduta)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/fi-FI.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Käytä valinnaista puskurin kokoa"
4
 BufferSize="Puskurin koko"
5
+UseCBR="Käytä CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe-väli (sec, 0=auto)"
8
-CPUPreset="CPU:n käytön esiasetus (enkooderin nopeus)"
9
+CPUPreset="CPU:n käyttö (korkeampi vaatii enemmän tehoa)"
10
 Profile="Profiili"
11
 Tune="Hienosäätö"
12
-EncoderOptions="x264-enkooderin valinnat (erotellaan välilyönnillä)"
13
+None="(Ei mitään)"
14
+EncoderOptions="x264-asetukset (erotetaan välilyönnillä)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/fr-FR.ini Changed
17
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Débit"
3
+CustomBufsize="Utiliser une taille de buffer personnalisée"
4
 BufferSize="Taille du Tampon"
5
-KeyframeIntervalSec="Intervalle d'image clé (secondes, 0=auto)"
6
-CPUPreset="Préconfiguration d'utilisation du CPU (vitesse de l'encodeur)"
7
+UseCBR="Utiliser CBR"
8
+CRF="CRF"
9
+KeyframeIntervalSec="Intervalle d'image-clé (en secondes, 0 = auto)"
10
+CPUPreset="Réglages prédéfinis du CPU (élevé = charge CPU faible)"
11
 Profile="Profil"
12
 Tune="Régler"
13
-EncoderOptions="Paramètres de l'Encodeur x264 (séparés par des espaces)"
14
+None="(Aucun)"
15
+EncoderOptions="Options x264 (séparées par un espace)"
16
 
17
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/gl-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/gl-ES.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Velocidade de bits"
3
+CustomBufsize="Utilizar tamaño da caché personalizado"
4
 BufferSize="Tamaño do búfer"
5
+UseCBR="Utilizar CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Intervalo de fotogramas chave (segundos, 0 = auto)"
8
-CPUPreset="Predefinición do uso da CPU (velocidade do codificador)"
9
+CPUPreset="Uso predefinido da CPU (superior = menos CPU)"
10
 Profile="Perfil"
11
 Tune="Sintonizar"
12
-EncoderOptions="Opcións do codificador x264 (separadas por espazo)"
13
+None="(Ningún)"
14
+EncoderOptions="Opcións x264 (separadas por un espazo)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/hr-HR.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Protok"
3
+CustomBufsize="Koristi specifičnu veličinu bafera"
4
 BufferSize="Veličina buffer-a"
5
+UseCBR="Koristi CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe interval (sekunde, 0=automatski)"
8
-CPUPreset="Šablon iskorišćenja procesora (brzina enkodera)"
9
+CPUPreset="Koristi CPU šablon (veće = manje CPU-a)"
10
 Profile="Profil"
11
 Tune="Doterivanje"
12
-EncoderOptions="x264 enkoder opcije (odvojene razmakom)"
13
+None="(Nijedno)"
14
+EncoderOptions="x264 opcije (odvojene razmakom)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/hu-HU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/hu-HU.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitráta"
3
+CustomBufsize="Egyéni pufferméret használata"
4
 BufferSize="Bufferméret"
5
+UseCBR="CBR Használata"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Kulcsképkocka Időköze (másodperc, 0=auto)"
8
-CPUPreset="CPU Terhelési Készlet (kódoló sebesség)"
9
+CPUPreset="CPU Készlet (magasabb = kevesebb CPU igény)"
10
 Profile="Profil"
11
 Tune="Hangolás"
12
-EncoderOptions="x 264 Kódoló Beállítás (szóközzel elválasztva)"
13
+None="(Nincs)"
14
+EncoderOptions="x264 Opciók (szóközzel elválasztva)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/it-IT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/it-IT.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Bitrate"
3
 BufferSize="Grandezza buffer"
4
 KeyframeIntervalSec="Intervallo keyframe (secondi, 0=auto)"
5
-CPUPreset="Pre imposta l'uso della CPU (velocità di codificazione)"
6
 Profile="Profilo"
7
 Tune="Regola"
8
-EncoderOptions="Opzioni codificatore x264 (sperate con uno spazio)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/ja-JP.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="ビットレート"
3
+CustomBufsize="特定バッファサイズを使用"
4
 BufferSize="バッファサイズ"
5
+UseCBR="CBRを使用する"
6
+CRF="CRF"
7
 KeyframeIntervalSec="キーフレーム間隔 (秒, 0=自動)"
8
-CPUPreset="CPU 使用のプリセット(エンコーダー速度)"
9
+CPUPreset="CPU使用のプリセット (高い = CPU使用低い)"
10
 Profile="プロファイル"
11
 Tune="チューン"
12
-EncoderOptions="x264 エンコーダーオプション (スペース区切り)"
13
+None="(なし)"
14
+EncoderOptions="x264 オプション (スペースで区切る)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="비트레이트"
3
+CustomBufsize="사용자 임의 버퍼  크기 설정"
4
 BufferSize="버퍼 크기"
5
+UseCBR="CBR 사용"
6
+CRF="CRF"
7
 KeyframeIntervalSec="키프레임 간격 (초 단위, 0=자동)"
8
-CPUPreset="CPU 사용량 사전 설정 (인코더 속도)"
9
+CPUPreset="CPU 사용량 사전설정 (높음 = 적은 CPU 부담)"
10
 Profile="프로필"
11
 Tune="조정"
12
-EncoderOptions="x264 인코더 설정 (공백으로 구분)"
13
+None="(없음)"
14
+EncoderOptions="x264 설정 (공백으로 구분)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Bruk egendefinert bufferstørrelse"
4
 BufferSize="Buffer størrelse"
5
+UseCBR="Bruk CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframeintervall (sekunder, 0=automatisk)"
8
-CPUPreset="Forhåndsinstillinger for prosessorbruk (kodings hastighet)"
9
+CPUPreset="Forhåndsinstilling for prosessorbruk (raskere betyr mindre belastning)"
10
 Profile="Profil"
11
 Tune="Tune"
12
-EncoderOptions="x264 kodingsalternativer (adksilt med mellomrom)"
13
+None="(Ingen)"
14
+EncoderOptions="x264 alternativer (separert med mellomrom)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/nl-NL.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bitrate"
3
+CustomBufsize="Aangepaste buffergrootte gebruiken"
4
 BufferSize="Buffergrootte"
5
+UseCBR="CBR Gebruiken"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Tijd tussen keyframes (seconden, 0=auto)"
8
-CPUPreset="Processorgebruik Preset (encoder snelheid)"
9
+CPUPreset="CPU-gebruik instelling (hoger = minder CPU)"
10
 Profile="Profiel"
11
 Tune="Afstemmen"
12
-EncoderOptions="x264 Encoderinstellingen (gescheiden door spaties)"
13
+None="(Geen)"
14
+EncoderOptions="x264 Opties (gescheiden door spaties)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/pl-PL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/pl-PL.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Przepływność bitowa"
3
 BufferSize="Rozmiar bufora"
4
 KeyframeIntervalSec="Interwał klatek kluczowych (sekundy, 0 - auto)"
5
-CPUPreset="Ustawienie wykorzystania CPU (szybkość enkodera)"
6
 Profile="Profil"
7
 Tune="Dostrajanie"
8
-EncoderOptions="Ustawienia enkodera x264 (oddzielone spacją)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/pt-BR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/pt-BR.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Taxa de Bits"
3
 BufferSize="Tamanho do Buffer"
4
 KeyframeIntervalSec="Intervalo de Keyframe (segundos, 0 = auto)"
5
-CPUPreset="Predefinição de Uso da CPU (Velocidade do Codificador)"
6
 Profile="Perfil"
7
 Tune="Ajustar"
8
-EncoderOptions="Opções do Codificador x264 (Separados por Espaço)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/pt-PT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/pt-PT.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Taxa de Bits (Bitrate)"
3
 BufferSize="Tamanho do Buffer"
4
 KeyframeIntervalSec="Intervalo de Keyframe (segundos, 0 = auto)"
5
-CPUPreset="Predefinição de uso CPU (velocidade do codificador)"
6
 Profile="Perfil"
7
 Tune="Sintonizar"
8
-EncoderOptions="Opções do Codificador x264  (separados por espaço)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/ro-RO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/ro-RO.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Rata biti"
3
 BufferSize="Dimensiune tampon"
4
 KeyframeIntervalSec="Intervalul de cadre (secunde, 0 = auto)"
5
-CPUPreset="Utilizare Procesor Prestabilit (viteza de codare)"
6
 Profile="Profil"
7
 Tune="Reglaj"
8
-EncoderOptions="Opţiuni Codare x264 (separate prin spațiu)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Битрейт"
3
+CustomBufsize="Использовать пользовательский размер буфера"
4
 BufferSize="Размер буфера"
5
+UseCBR="Использовать CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)"
8
-CPUPreset="Предустановка использования ЦП (скорость шифратора)"
9
+CPUPreset="Предустановка использования ЦП (выше = меньше)"
10
 Profile="Профиль"
11
 Tune="Настроить"
12
-EncoderOptions="Настройки кодера x264 (разделённые пробелом)"
13
+None="(Нет)"
14
+EncoderOptions="Настройки x264 (разделённые пробелом)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/sk-SK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/sk-SK.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Bitrate"
3
 BufferSize="Veľkosť medzipamäte"
4
 KeyframeIntervalSec="Kľúčová snímka každých (sekúnd, 0 = automaticky)"
5
-CPUPreset="Predvoľba využitia CPU (rýchlosť enkodéra)"
6
 Profile="Profil"
7
 Tune="Vyladenie"
8
-EncoderOptions="Možnosti x264 enkodéra (oddelené medzerou)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/sl-SI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/sl-SI.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Bitrate"
3
 BufferSize="Velikost medpolnilnika"
4
 KeyframeIntervalSec="Okvirni Interval(sekunde, 0=avtomatsko)"
5
-CPUPreset="Prednastavitev porabe CPU (hitrost kodiranja)"
6
 Profile="Profil"
7
 Tune="Tune"
8
-EncoderOptions="Opcije x264 kodiranja (ločene z razmikom)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/sr-CS.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Protok"
3
+CustomBufsize="Koristi specifičnu veličinu bafera"
4
 BufferSize="Veličina buffer-a"
5
+UseCBR="Koristi CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe interval (sekunde, 0=automatski)"
8
-CPUPreset="Šablon iskorišćenja procesora (brzina enkodera)"
9
+CPUPreset="Koristi CPU šablon (veće = manje CPU-a)"
10
 Profile="Profil"
11
 Tune="Doterivanje"
12
-EncoderOptions="x264 enkoder opcije (odvojene razmakom)"
13
+None="(Nijedno)"
14
+EncoderOptions="x264 opcije (odvojene razmakom)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/sr-SP.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Проток"
3
+CustomBufsize="Користи специфичну величину бафера"
4
 BufferSize="Величина buffer-а"
5
+UseCBR="Користи CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe интервал (секунде, 0=аутоматски)"
8
-CPUPreset="Шаблон искоришћења процесора (брзина енкодера)"
9
+CPUPreset="Користи CPU шаблон (веће = мање CPU-а)"
10
 Profile="Профил"
11
 Tune="Дотеривање"
12
-EncoderOptions="x264 енкодер опције (одвојене размаком)"
13
+None="(Ниједно)"
14
+EncoderOptions="x264 опције (одвојене размаком)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/sv-SE.ini Changed
16
 
1
@@ -1,8 +1,12 @@
2
 Bitrate="Bithastighet"
3
+CustomBufsize="Använd anpassad buffertstorlek"
4
 BufferSize="Buffertstorlek"
5
+UseCBR="Använd CBR"
6
+CRF="CRF"
7
 KeyframeIntervalSec="Keyframe-tidsintervall (i sek, 0=auto)"
8
-CPUPreset="CPU-förinställning (påverkar kodarhastighet)"
9
+CPUPreset="CPU-användning förinställning (högre = mindre CPU)"
10
 Profile="Profil"
11
 Tune="Tune"
12
-EncoderOptions="x264-kodningsinställningar (separera med mellanslag)"
13
+None="(Inga)"
14
+EncoderOptions="x264 inställningar (separerade med blanksteg)"
15
 
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/tr-TR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/tr-TR.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="Bit hızı"
3
 BufferSize="Arabellek Boyutu"
4
 KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
5
-CPUPreset="CPU Kullanımı Hazır Ayarı (kodlayıcı hızı)"
6
 Profile="Profil"
7
 Tune="Ayarla"
8
-EncoderOptions="x264 Kodlayıcı Seçenekleri (boşlukla ayrılmış)"
9
 
10
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/zh-CN.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+Bitrate="比特率"
3
+CustomBufsize="使用自定义缓存大小"
4
+BufferSize="缓冲大小"
5
+UseCBR="使用 CBR"
6
+CRF="CRF"
7
+KeyframeIntervalSec="关键帧间隔(秒, 0=自动)"
8
+CPUPreset="CPU 使用预设 (更高 = 较少的 CPU占用)"
9
+Profile="档案"
10
+Tune="曲调"
11
+None="(无)"
12
+EncoderOptions="x264 选项 (用空格分隔)"
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/data/locale/zh-TW.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/data/locale/zh-TW.ini Changed
10
 
1
@@ -1,8 +1,6 @@
2
 Bitrate="位元率"
3
 BufferSize="緩衝區大小"
4
 KeyframeIntervalSec="關鍵影格間隔 (秒,0 = 自動):"
5
-CPUPreset="CPU 預設(編碼速度)"
6
 Profile="演算法"
7
 Tune="最佳化"
8
-EncoderOptions="x264 編碼器參數(以空格分隔)"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/obs-x264/obs-x264.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/obs-x264/obs-x264.c Changed
108
 
1
@@ -90,11 +90,12 @@
2
 
3
 static void obs_x264_defaults(obs_data_t *settings)
4
 {
5
-   obs_data_set_default_int   (settings, "bitrate",     1000);
6
-   obs_data_set_default_int   (settings, "buffer_size", 1000);
7
+   obs_data_set_default_int   (settings, "bitrate",     2500);
8
+   obs_data_set_default_bool  (settings, "use_bufsize", false);
9
+   obs_data_set_default_int   (settings, "buffer_size", 2500);
10
    obs_data_set_default_int   (settings, "keyint_sec",  0);
11
    obs_data_set_default_int   (settings, "crf",         23);
12
-   obs_data_set_default_bool  (settings, "cbr",         false);
13
+   obs_data_set_default_bool  (settings, "cbr",         true);
14
 
15
    obs_data_set_default_string(settings, "preset",      "veryfast");
16
    obs_data_set_default_string(settings, "profile",     "");
17
@@ -111,24 +112,55 @@
18
 }
19
 
20
 #define TEXT_BITRATE    obs_module_text("Bitrate")
21
+#define TEXT_CUSTOM_BUF obs_module_text("CustomBufsize")
22
 #define TEXT_BUF_SIZE   obs_module_text("BufferSize")
23
+#define TEXT_USE_CBR    obs_module_text("UseCBR")
24
+#define TEXT_CRF        obs_module_text("CRF")
25
 #define TEXT_KEYINT_SEC obs_module_text("KeyframeIntervalSec")
26
 #define TEXT_PRESET     obs_module_text("CPUPreset")
27
 #define TEXT_PROFILE    obs_module_text("Profile")
28
 #define TEXT_TUNE       obs_module_text("Tune")
29
+#define TEXT_NONE       obs_module_text("None")
30
 #define TEXT_X264_OPTS  obs_module_text("EncoderOptions")
31
 
32
+static bool use_bufsize_modified(obs_properties_t *ppts, obs_property_t *p,
33
+       obs_data_t *settings)
34
+{
35
+   bool use_bufsize = obs_data_get_bool(settings, "use_bufsize");
36
+   p = obs_properties_get(ppts, "buffer_size");
37
+   obs_property_set_visible(p, use_bufsize);
38
+   return true;
39
+}
40
+
41
+static bool use_cbr_modified(obs_properties_t *ppts, obs_property_t *p,
42
+       obs_data_t *settings)
43
+{
44
+   bool cbr = obs_data_get_bool(settings, "cbr");
45
+   p = obs_properties_get(ppts, "crf");
46
+   obs_property_set_visible(p, !cbr);
47
+   return true;
48
+}
49
+
50
 static obs_properties_t *obs_x264_props(void *unused)
51
 {
52
    UNUSED_PARAMETER(unused);
53
 
54
    obs_properties_t *props = obs_properties_create();
55
    obs_property_t *list;
56
+   obs_property_t *p;
57
+
58
+   obs_properties_add_int(props, "bitrate", TEXT_BITRATE, 50, 10000000, 1);
59
+
60
+   p = obs_properties_add_bool(props, "use_bufsize", TEXT_CUSTOM_BUF);
61
+   obs_property_set_modified_callback(p, use_bufsize_modified);
62
+   obs_properties_add_int(props, "buffer_size", TEXT_BUF_SIZE, 0,
63
+           10000000, 1);
64
 
65
-   obs_properties_add_int(props, "bitrate", TEXT_BITRATE, 50, 100000, 1);
66
-   obs_properties_add_int(props, "buffer_size", TEXT_BUF_SIZE, 50, 100000,
67
-           1);
68
    obs_properties_add_int(props, "keyint_sec", TEXT_KEYINT_SEC, 0, 20, 1);
69
+   p = obs_properties_add_bool(props, "cbr", TEXT_USE_CBR);
70
+   obs_properties_add_int(props, "crf", TEXT_CRF, 0, 51, 1);
71
+
72
+   obs_property_set_modified_callback(p, use_cbr_modified);
73
 
74
    list = obs_properties_add_list(props, "preset", TEXT_PRESET,
75
            OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
76
@@ -136,12 +168,14 @@
77
 
78
    list = obs_properties_add_list(props, "profile", TEXT_PROFILE,
79
            OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
80
+   obs_property_list_add_string(list, TEXT_NONE, "");
81
    obs_property_list_add_string(list, "baseline", "baseline");
82
    obs_property_list_add_string(list, "main", "main");
83
    obs_property_list_add_string(list, "high", "high");
84
 
85
    list = obs_properties_add_list(props, "tune", TEXT_TUNE,
86
            OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
87
+   obs_property_list_add_string(list, TEXT_NONE, "");
88
    add_strings(list, x264_tune_names);
89
 
90
    obs_properties_add_text(props, "x264opts", TEXT_X264_OPTS,
91
@@ -324,12 +358,16 @@
92
    int crf          = (int)obs_data_get_int(settings, "crf");
93
    int width        = (int)obs_encoder_get_width(obsx264->encoder);
94
    int height       = (int)obs_encoder_get_height(obsx264->encoder);
95
+   bool use_bufsize = obs_data_get_bool(settings, "use_bufsize");
96
    bool cbr         = obs_data_get_bool(settings, "cbr");
97
 
98
    if (keyint_sec)
99
        obsx264->params.i_keyint_max =
100
            keyint_sec * voi->fps_num / voi->fps_den;
101
 
102
+   if (!use_bufsize)
103
+       buffer_size = bitrate;
104
+
105
    obsx264->params.b_vfr_input          = false;
106
    obsx264->params.rc.i_vbv_max_bitrate = bitrate;
107
    obsx264->params.rc.i_vbv_buffer_size = buffer_size;
108
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/rtmp-services/data/locale/zh-CN.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+StreamingServices="流媒体服务"
3
+CustomStreamingServer="自定义流媒体服务器"
4
+Service="服务"
5
+Server="服务器"
6
+StreamKey="流密钥"
7
+
8
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/rtmp-services/data/services.json Changed
100
 
1
@@ -7,10 +7,30 @@
2
                 "url": "rtmp://live.twitch.tv/app"
3
             },
4
             {
5
+                "name": "Asia: Hong Kong",
6
+                "url": "rtmp://live-hkg.twitch.tv/app"
7
+            },
8
+            {
9
+                "name": "Asia: Seoul, South Korea",
10
+                "url": "rtmp://live-sel.twitch.tv/app"
11
+            },
12
+            {
13
                 "name": "Asia: Singapore",
14
                 "url": "rtmp://live-sin-backup.twitch.tv/app"
15
             },
16
             {
17
+                "name": "Asia: Taipei, Taiwan",
18
+                "url": "rtmp://live-tpe.twitch.tv/app"
19
+            },
20
+            {
21
+                "name": "Asia: Tokyo, Japan",
22
+                "url": "rtmp://live-tyo.twitch.tv/app"
23
+            },
24
+            {
25
+                "name": "Australia: Sydney",
26
+                "url": "rtmp://live-syd.twitch.tv/app"
27
+            },
28
+            {
29
                 "name": "EU: Amsterdam, NL",
30
                 "url": "rtmp://live-ams.twitch.tv/app"
31
             },
32
@@ -91,36 +111,56 @@
33
                 "url": "rtmp://live.hitbox.tv/push"
34
             },
35
             {
36
-                "name": "EU-East",
37
+                "name": "EU-West: Frankfurt, Germany",
38
+                "url": "rtmp://live.fra.hitbox.tv/push"
39
+            },
40
+            {
41
+                "name": "EU-East: Vienna, Austria",
42
                 "url": "rtmp://live.vie.hitbox.tv/push"
43
             },
44
             {
45
-                "name": "EU-Central",
46
-                "url": "rtmp://live.nbg.hitbox.tv/push"
47
+                "name": "EU-North: London, United Kingdom",
48
+                "url": "rtmp://live.lhr.hitbox.tv/push"
49
             },
50
             {
51
-                "name": "EU-West",
52
-                "url": "rtmp://live.fra.hitbox.tv/push"
53
+                "name": "EU-Central: Nurnberg, Germany",
54
+                "url": "rtmp://live.nbg.hitbox.tv/push"
55
             },
56
             {
57
-                "name": "EU-North",
58
-                "url": "rtmp://live.ams.hitbox.tv/push"
59
+                "name": "Russia: Moscow",
60
+                "url": "rtmp://live.dme.hitbox.tv/push"
61
             },
62
             {
63
-                "name": "US-East",
64
+                "name": "US-East: Washington",
65
                 "url": "rtmp://live.vgn.hitbox.tv/push"
66
             },
67
             {
68
-                "name": "US-West",
69
+                "name": "US-Central: Denver",
70
+                "url": "rtmp://live.den.hitbox.tv/push"
71
+            },
72
+            {
73
+                "name": "US-West: Los Angeles",
74
                 "url": "rtmp://live.lax.hitbox.tv/push"
75
             },
76
             {
77
-                "name": "South America",
78
+                "name": "South America: Sao Paulo, Brazil",
79
                 "url": "rtmp://live.gru.hitbox.tv/push"
80
             },
81
             {
82
-                "name": "Asia",
83
+                "name": "South Korea: Seoul",
84
+                "url": "rtmp://live.icn.hitbox.tv/push"
85
+            },
86
+            {
87
+                "name": "Asia: Singapore",
88
                 "url": "rtmp://live.lax.hitbox.tv/push"
89
+            },
90
+            {
91
+                "name": "China: Hong Kong",
92
+                "url": "rtmp://live.hkg.hitbox.tv/push"
93
+            },
94
+            {
95
+                "name": "Oceania: Sydney, Australia",
96
+                "url": "rtmp://live.syd.hitbox.tv/push"
97
             }
98
         ],
99
         "recommended": {
100
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/rtmp-services/rtmp-common.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/rtmp-services/rtmp-common.c Changed
52
 
1
@@ -277,11 +277,9 @@
2
    obs_data_release(settings);
3
 }
4
 
5
-static void initialize_output(struct rtmp_common *service, obs_output_t *output,
6
-       json_t *root)
7
+static void initialize_output(struct rtmp_common *service, json_t *root,
8
+       obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder)
9
 {
10
-   obs_encoder_t *video_encoder = obs_output_get_video_encoder(output);
11
-   obs_encoder_t *audio_encoder = obs_output_get_audio_encoder(output);
12
    json_t        *json_service = find_service(root, service->service);
13
    json_t        *recommended;
14
 
15
@@ -302,7 +300,8 @@
16
        apply_audio_encoder_settings(audio_encoder, recommended);
17
 }
18
 
19
-static bool rtmp_common_initialize(void *data, obs_output_t *output)
20
+static void rtmp_common_apply_settings(void *data,
21
+       obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder)
22
 {
23
    struct rtmp_common *service = data;
24
    char               *file;
25
@@ -311,13 +310,12 @@
26
    if (file) {
27
        json_t *root = open_json_file(file);
28
        if (root) {
29
-           initialize_output(service, output, root);
30
+           initialize_output(service, root, video_encoder,
31
+                   audio_encoder);
32
            json_decref(root);
33
        }
34
        bfree(file);
35
    }
36
-
37
-   return true;
38
 }
39
 
40
 static const char *rtmp_common_url(void *data)
41
@@ -338,8 +336,8 @@
42
    .create         = rtmp_common_create,
43
    .destroy        = rtmp_common_destroy,
44
    .update         = rtmp_common_update,
45
-   .initialize     = rtmp_common_initialize,
46
    .get_properties = rtmp_common_properties,
47
    .get_url        = rtmp_common_url,
48
-   .get_key        = rtmp_common_key
49
+   .get_key        = rtmp_common_key,
50
+   .apply_encoder_settings = rtmp_common_apply_settings,
51
 };
52
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/text-freetype2/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/text-freetype2/data/locale/de-DE.ini Changed
10
 
1
@@ -7,7 +7,7 @@
2
 Color2="Farbe 2"
3
 Outline="Umrandung"
4
 DropShadow="Schlagschatten"
5
-ReadFromFile="Lesen aus Datei"
6
+ReadFromFile="Aus Datei lesen"
7
 CustomWidth="Benutzerdefinierte Textbreite"
8
 WordWrap="Zeilenumbruch"
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/text-freetype2/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/text-freetype2/data/locale/fi-FI.ini Changed
10
 
1
@@ -5,7 +5,7 @@
2
 ChatLogMode="Keskustelun lokitila (6 viimeistä riviä)"
3
 Color1="Väri 1"
4
 Color2="Väri 2"
5
-Outline="Ulkoreuna"
6
+Outline="Reunaviiva"
7
 DropShadow="Varjo"
8
 ReadFromFile="Lue tiedostosta"
9
 CustomWidth="Mukautettu tekstin pituus"
10
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/text-freetype2/data/locale/zh-CN.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Font="字体"
3
+Text="文本"
4
+TextFile="文本文件(UTF-8 或 UTF-16)"
5
+TextFileFilter="文本文件(*.txt);;"
6
+ChatLogMode="聊天日志模式 (最后 6 行)"
7
+Color1="颜色 1"
8
+Color2="颜色 2"
9
+Outline="大纲"
10
+DropShadow="下拉阴影"
11
+ReadFromFile="从文件读取"
12
+CustomWidth="自定义文本宽度"
13
+WordWrap="自动换行"
14
+
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/text-freetype2/find-font-windows.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/text-freetype2/find-font-windows.c Changed
16
 
1
@@ -172,11 +172,12 @@
2
        return NULL;
3
 
4
    utf16_len = MultiByteToWideChar(code_page, 0,
5
-           sfnt_name->string, sfnt_name->string_len, NULL, 0);
6
+           (char*)sfnt_name->string, sfnt_name->string_len,
7
+           NULL, 0);
8
    if (utf16_len) {
9
        utf16_str = malloc((utf16_len + 1) * sizeof(wchar_t));
10
        utf16_len = MultiByteToWideChar(code_page, 0,
11
-               sfnt_name->string, sfnt_name->string_len,
12
+               (char*)sfnt_name->string, sfnt_name->string_len,
13
                utf16_str, (int)utf16_len);
14
 
15
        if (utf16_len) {
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/CMakeLists.txt Changed
10
 
1
@@ -26,7 +26,7 @@
2
 target_link_libraries(win-capture
3
    libobs
4
    ipc-util
5
-   psapi.lib)
6
+   psapi)
7
 
8
 install_obs_plugin_with_data(win-capture data)
9
 
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/cursor-capture.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/cursor-capture.c Changed
18
 
1
@@ -133,7 +133,6 @@
2
 
3
 static inline bool cursor_capture_icon(struct cursor_data *data, HICON icon)
4
 {
5
-   bool success = false;
6
    uint8_t *bitmap;
7
    uint32_t height;
8
    uint32_t width;
9
@@ -152,7 +151,7 @@
10
    bitmap = cursor_capture_icon_bitmap(&ii, &width, &height);
11
    if (bitmap) {
12
        data->texture = gs_texture_create(width, height, GS_BGRA,
13
-               1, &bitmap, 0);
14
+               1, (const uint8_t**)&bitmap, 0);
15
        bfree(bitmap);
16
 
17
        data->x_hotspot = ii.xHotspot;
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/d3d8-api/d3d8types.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/d3d8-api/d3d8types.h Changed
24
 
1
@@ -22,7 +22,11 @@
2
 #if _MSC_VER >= 1200
3
 #pragma warning(push)
4
 #endif
5
+
6
+#ifdef _MSC_VER
7
 #pragma warning(disable:4201) // anonymous unions warning
8
+#endif
9
+
10
 #if defined(_X86_) || defined(_IA64_)
11
 #pragma pack(4)
12
 #endif
13
@@ -1676,8 +1680,10 @@
14
 #if _MSC_VER >= 1200
15
 #pragma warning(pop)
16
 #else
17
+#ifdef _MSC_VER
18
 #pragma warning(default:4201)
19
 #endif
20
+#endif
21
 
22
 #endif /* (DIRECT3D_VERSION >= 0x0800) */
23
 #endif /* _D3D8TYPES(P)_H_ */
24
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/da-DK.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Eksekverbare Navn"
3
 CaptureCursor="Indfang markøren"
4
 Compatibility="Multi-adapter kompatibilitet"
5
+AllowTransparency="Tillad gennemsigtighed"
6
 Monitor="Skærm"
7
 PrimaryMonitor="Primære skærm"
8
+GameCapture="Spil optager"
9
+GameCapture.AnyFullscreen="Optag ethvert fuldskærms program"
10
+GameCapture.ForceScaling="Tving skalering"
11
+GameCapture.ScaleRes="Skalere opløsning"
12
+GameCapture.LimitFramerate="Begræns optagelses framerate"
13
+GameCapture.CaptureOverlays="Optag fra tredjepart overlays (såsom Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/de-DE.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Name der ausführbaren Datei"
3
 CaptureCursor="Mauszeiger aufnehmen"
4
 Compatibility="Multi-Adapter-Kompatibilität"
5
+AllowTransparency="Erlaube Transparenz"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Hauptmonitor"
8
+GameCapture="Spielaufnahme"
9
+GameCapture.AnyFullscreen="Nehme beliebige Vollbild-Anwendung auf"
10
+GameCapture.ForceScaling="Erzwinge Skalierung"
11
+GameCapture.ScaleRes="Skaliere Auflösung"
12
+GameCapture.LimitFramerate="Limitiere FPS der Aufnahme"
13
+GameCapture.CaptureOverlays="Aufnahme von Drittanbieter Overlays (z.B. Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/el-GR.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Όνομα Εκτελέσιμου Αρχείου"
3
 CaptureCursor="Σύλληψη Δρομέα"
4
 Compatibility="Συμβατότητα με Πολυ-Προσαρμογείς"
5
+AllowTransparency="Επιτροπή Διαφάνειας"
6
 Monitor="Οθόνη"
7
 PrimaryMonitor="Κύρια Oθόνη"
8
+GameCapture="Καταγραφή Παιχνιδιού"
9
+GameCapture.AnyFullscreen="Καταγραφή οποιασδήποτε εφαρμογής πλήρους οθόνης"
10
+GameCapture.ForceScaling="Εξανάγκαση Κλιμάκωσης"
11
+GameCapture.ScaleRes="Κλιμάκωση Ανάλυσης"
12
+GameCapture.LimitFramerate="Περιορισμός των frame καταγραφής"
13
+GameCapture.CaptureOverlays="Καταγραφή επικαλύψεων τρίτου προσώπου (όπως π.χ. steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/es-ES.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Nombre del archivo ejecutable"
3
 CaptureCursor="Captura de Cursor"
4
 Compatibility="Compatibilidad multi adaptador"
5
+AllowTransparency="Permitir transparencia"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Monitor principal"
8
+GameCapture="Capturar Juego"
9
+GameCapture.AnyFullscreen="Capturar cualquier aplicación a pantalla completa"
10
+GameCapture.ForceScaling="Forzar escalado"
11
+GameCapture.ScaleRes="Resolución de la escala"
12
+GameCapture.LimitFramerate="Limitar ratio de captura"
13
+GameCapture.CaptureOverlays="Capturar capas de aplicaciones externas (tales como Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/eu-ES.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Exekutagarri Izena"
3
 CaptureCursor="Hartu Kurtsorea"
4
 Compatibility="Egokitzaile-anitz Bateragarritasuna"
5
+AllowTransparency="Ahalbidetu Gardentasuna"
6
 Monitor="Monitorea"
7
 PrimaryMonitor="Lehen Monitorea"
8
+GameCapture="Bideojoko Harpena"
9
+GameCapture.AnyFullscreen="Hartu edozein ikusleiho-osoko aplikazio"
10
+GameCapture.ForceScaling="Behartu Eskalatzea"
11
+GameCapture.ScaleRes="Bereizmen Eskalatua"
12
+GameCapture.LimitFramerate="Mugatu harpen frameneurria"
13
+GameCapture.CaptureOverlays="Hartu hirugarrenen gainjarpenak (steam bezalakoak)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/fi-FI.ini Changed
23
 
1
@@ -1,5 +1,5 @@
2
-MonitorCapture="Ruudunkaappaus"
3
-WindowCapture="Ikkunakaappaus"
4
+MonitorCapture="Kaappaa monitori"
5
+WindowCapture="Kaappaa ikkuna"
6
 WindowCapture.Window="Ikkuna"
7
 WindowCapture.Priority="Ikkunan valintaperuste"
8
 WindowCapture.Priority.Title="Ikkunan otsikko"
9
@@ -7,6 +7,13 @@
10
 WindowCapture.Priority.Exe="Suoritetun tiedoston nimi"
11
 CaptureCursor="Kaappaa kursori"
12
 Compatibility="Usean sovittimen tuki"
13
+AllowTransparency="Salli läpinäkyvyys"
14
 Monitor="Näyttö"
15
 PrimaryMonitor="Ensisijainen näyttö"
16
+GameCapture="Kaappaa peli"
17
+GameCapture.AnyFullscreen="Kaappaa mitä tahansa kokoruudun sovellusta"
18
+GameCapture.ForceScaling="Pakota skaalaus"
19
+GameCapture.ScaleRes="Skaalaa resoluutio"
20
+GameCapture.LimitFramerate="Rajoita kaappauksen ruudunpäivitysnopeutta"
21
+GameCapture.CaptureOverlays="Kaappaa kolmannen osapuolen \"overlay\" (kuten Steam)"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/fr-FR.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Nom de l'exécutable"
3
 CaptureCursor="Enregistrer le Curseur"
4
 Compatibility="Compatibilité Multi-adaptateur"
5
+AllowTransparency="Permettre la transparence"
6
 Monitor="Moniteur"
7
 PrimaryMonitor="Moniteur Principal"
8
+GameCapture="Capture de jeu"
9
+GameCapture.AnyFullscreen="Capturer toute application en plein écran"
10
+GameCapture.ForceScaling="Forcer la mise à l'échelle"
11
+GameCapture.ScaleRes="Résolution mise à l'échelle"
12
+GameCapture.LimitFramerate="Limiter la fréquence d'images de la capture"
13
+GameCapture.CaptureOverlays="Capturer les surcouches tierces (comme Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/gl-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/gl-ES.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Nome do ficheiro executable"
3
 CaptureCursor="Captura de cursor"
4
 Compatibility="Compatibilidade do multiadaptador"
5
+AllowTransparency="Permitir transparencia"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Monitor principal"
8
+GameCapture="Capturar xogo"
9
+GameCapture.AnyFullscreen="Capturar calquera aplicativo a pantalla completa"
10
+GameCapture.ForceScaling="Forzar dimensionamento"
11
+GameCapture.ScaleRes="Resolución da escala"
12
+GameCapture.LimitFramerate="Limitar a ratio da captura"
13
+GameCapture.CaptureOverlays="Capturar capas de aplicativos externos (tales como Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/hr-HR.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Ime izvršne datoteke"
3
 CaptureCursor="Snimaj kursor"
4
 Compatibility="Višeadapterska kompatibilnost"
5
+AllowTransparency="Omogući providnost"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Primarni monitor"
8
+GameCapture="Ulaz sa igre"
9
+GameCapture.AnyFullscreen="Ulaz sa bilo koje aplikacije koja je preko celog ekrana"
10
+GameCapture.ForceScaling="Prisilno skaliranje"
11
+GameCapture.ScaleRes="Skalirana rezolucija"
12
+GameCapture.LimitFramerate="Ograniči framerate snimanja"
13
+GameCapture.CaptureOverlays="Snimaj overlay treće strane (kao što je steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/hu-HU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/hu-HU.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Végrehajtható Fájl Neve"
3
 CaptureCursor="Kurzor Rögztítése"
4
 Compatibility="Több Adapteres Kompatibilitás"
5
+AllowTransparency="Áttetszőség Engedélyezése"
6
 Monitor="Képernyő"
7
 PrimaryMonitor="Elsődleges Képernyő"
8
+GameCapture="Játék Felvétel"
9
+GameCapture.AnyFullscreen="Teljes képernyős alkalmazás felvétele"
10
+GameCapture.ForceScaling="Skálázás Kényszerítése"
11
+GameCapture.ScaleRes="Skálázott Felbontás"
12
+GameCapture.LimitFramerate="Felvételi képkockasebesség korlátozása"
13
+GameCapture.CaptureOverlays="Külső overlay felvétele (mint például steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/ja-JP.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="実行ファイル名"
3
 CaptureCursor="カーソルをキャプチャ"
4
 Compatibility="マルチアダプターの互換性"
5
+AllowTransparency="透過を許可"
6
 Monitor="モニター"
7
 PrimaryMonitor="プライマリ モニター"
8
+GameCapture="ゲームキャプチャ"
9
+GameCapture.AnyFullscreen="フルスクリーンアプリケーションをキャプチャ"
10
+GameCapture.ForceScaling="強制的にスケーリングする"
11
+GameCapture.ScaleRes="出力解像度"
12
+GameCapture.LimitFramerate="キャプチャのフレーム レートを制限する"
13
+GameCapture.CaptureOverlays="(steamなどの)サードパーティ製のオーバーレイをキャプチャする"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/ko-KR.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="실행 파일 이름"
3
 CaptureCursor="커서 캡쳐"
4
 Compatibility="다중 어댑터 호환성"
5
+AllowTransparency="투명도 허용"
6
 Monitor="모니터"
7
 PrimaryMonitor="기본 모니터"
8
+GameCapture="게임 캡쳐"
9
+GameCapture.AnyFullscreen="어떤 전체화면 응용 프로그램이건 캡쳐"
10
+GameCapture.ForceScaling="강제 크기 조정"
11
+GameCapture.ScaleRes="조정된 해상도:"
12
+GameCapture.LimitFramerate="캡처 프레임 속도 제한"
13
+GameCapture.CaptureOverlays="서드-파티 오버레이 (스팀과 같은) 캡쳐"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/nb-NO.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Navn på kjørbar fil"
3
 CaptureCursor="Ta opp musepeker"
4
 Compatibility="Multiadapter kompatibilitet"
5
+AllowTransparency="Tillat gjennomsiktighet"
6
 Monitor="Skjerm"
7
 PrimaryMonitor="Hovedskjerm"
8
+GameCapture="Spillopptak"
9
+GameCapture.AnyFullscreen="Opptak av fullskjermapplikasjon"
10
+GameCapture.ForceScaling="Tving skalering"
11
+GameCapture.ScaleRes="Skaler oppløsning"
12
+GameCapture.LimitFramerate="Begrens opptakets bildefrekvens"
13
+GameCapture.CaptureOverlays="Ta opp tredjeparts overlag (som Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/nl-NL.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Executable-naam"
3
 CaptureCursor="Cursor Opnemen"
4
 Compatibility="Multi-adapter Compatibiliteit"
5
+AllowTransparency="Transparantie Toestaan"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Primaire Monitor"
8
+GameCapture="Gamecapture"
9
+GameCapture.AnyFullscreen="Capture elke full-screen applicatie"
10
+GameCapture.ForceScaling="Forceer Schalen"
11
+GameCapture.ScaleRes="Geschaalde resolutie"
12
+GameCapture.LimitFramerate="Begrens frame rate van de opname"
13
+GameCapture.CaptureOverlays="Capture overlays van derde partijen (zoals Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/ro-RO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/ro-RO.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Numele executabilului"
3
 CaptureCursor="Capturează cursorul"
4
 Compatibility="Compatibilitate pentru Multi-adaptoare"
5
+AllowTransparency="Permite transparenţa"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Monitorul principal"
8
+GameCapture="Captura Jocului"
9
+GameCapture.AnyFullscreen="Captureaza orice aplicaţie pe tot ecranul"
10
+GameCapture.ForceScaling="Scalare Forţata"
11
+GameCapture.ScaleRes="Scalează Rezoluţia"
12
+GameCapture.LimitFramerate="Limitează framerate-ul capturii"
13
+GameCapture.CaptureOverlays="Captureaza overlay-uri terţiare(cum ar fi cel al Steam-ului)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/ru-RU.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Имя исполняемого файла"
3
 CaptureCursor="Захват курсора"
4
 Compatibility="Совместимость с мульти-адаптером"
5
+AllowTransparency="Разрешить прозрачность"
6
 Monitor="Монитор"
7
 PrimaryMonitor="Основной монитор"
8
+GameCapture="Захват игры"
9
+GameCapture.AnyFullscreen="Захват любого полноэкранного приложения"
10
+GameCapture.ForceScaling="Принудительное масштабирование"
11
+GameCapture.ScaleRes="Разрешение масштабирования"
12
+GameCapture.LimitFramerate="Ограничивать частоту кадров"
13
+GameCapture.CaptureOverlays="Захват сторонних оверлеев (например, Steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/sr-CS.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Ime izvršne datoteke"
3
 CaptureCursor="Snimaj kursor"
4
 Compatibility="Višeadapterska kompatibilnost"
5
+AllowTransparency="Omogući providnost"
6
 Monitor="Monitor"
7
 PrimaryMonitor="Primarni monitor"
8
+GameCapture="Ulaz sa igre"
9
+GameCapture.AnyFullscreen="Ulaz sa bilo koje aplikacije koja je preko celog ekrana"
10
+GameCapture.ForceScaling="Prisilno skaliranje"
11
+GameCapture.ScaleRes="Skalirana rezolucija"
12
+GameCapture.LimitFramerate="Ograniči framerate snimanja"
13
+GameCapture.CaptureOverlays="Snimaj overlay treće strane (kao što je steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/sr-SP.ini Changed
15
 
1
@@ -7,6 +7,13 @@
2
 WindowCapture.Priority.Exe="Име извршнe datoteke"
3
 CaptureCursor="Снимај курсор"
4
 Compatibility="Вишеадаптерска компатибилност"
5
+AllowTransparency="Омогући провидност"
6
 Monitor="Монитор"
7
 PrimaryMonitor="Примарни монитор"
8
+GameCapture="Улаз са игре"
9
+GameCapture.AnyFullscreen="Улаз са било које апликације која је преко целог екрана"
10
+GameCapture.ForceScaling="Присилно скалирање"
11
+GameCapture.ScaleRes="Скалирана резолуција"
12
+GameCapture.LimitFramerate="Ограничи framerate снимања"
13
+GameCapture.CaptureOverlays="Снимај overlay треће стране (као што је steam)"
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/sv-SE.ini Changed
15
 
1
@@ -7,4 +7,13 @@
2
 WindowCapture.Priority.Exe="Filnamn"
3
 CaptureCursor="Visa muspekare"
4
 Compatibility="Kompatibilitetsläge för flera grafikkort"
5
+AllowTransparency="Tillåt opacitet"
6
+Monitor="Bildskärm"
7
+PrimaryMonitor="Primära bildskärmen"
8
+GameCapture="Spelintagning"
9
+GameCapture.AnyFullscreen="Spela in alla program i fullskärm"
10
+GameCapture.ForceScaling="Tvinga skalning"
11
+GameCapture.ScaleRes="Skala upplösning"
12
+GameCapture.LimitFramerate="Begränsa inspelad bildhastighet"
13
+GameCapture.CaptureOverlays="Spela in tredje part överlägg (som Steam)"
14
 
15
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/data/locale/zh-CN.ini Added
21
 
1
@@ -0,0 +1,19 @@
2
+MonitorCapture="显示器捕获"
3
+WindowCapture="窗口捕获"
4
+WindowCapture.Window="窗口"
5
+WindowCapture.Priority="窗口匹配优先级"
6
+WindowCapture.Priority.Title="窗口标题"
7
+WindowCapture.Priority.Class="窗口种类"
8
+WindowCapture.Priority.Exe="可执行文件名称"
9
+CaptureCursor="捕捉光标"
10
+Compatibility="多适配器的兼容性"
11
+AllowTransparency="允许透明度"
12
+Monitor="显示器"
13
+PrimaryMonitor="主监视器"
14
+GameCapture="游戏捕获"
15
+GameCapture.AnyFullscreen="捕获任何全屏应用程序"
16
+GameCapture.ForceScaling="强制缩放"
17
+GameCapture.ScaleRes="缩放分辨率"
18
+GameCapture.LimitFramerate="限制捕获帧速率"
19
+GameCapture.CaptureOverlays="捕获第三方 (如: steam) 覆盖"
20
+
21
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/duplicator-monitor-capture.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/duplicator-monitor-capture.c Changed
34
 
1
@@ -203,20 +203,18 @@
2
        gs_enable_color(true, true, true, false);
3
 
4
        if (rot != 0) {
5
-           float x;
6
-           float y;
7
+           float x = 0.0f;
8
+           float y = 0.0f;
9
 
10
            switch (rot) {
11
            case 90:
12
                x = (float)capture->height;
13
-               y = 0.0f;
14
                break;
15
            case 180:
16
                x = (float)capture->width;
17
                y = (float)capture->height;
18
                break;
19
            case 270:
20
-               x = 0.0f;
21
                y = (float)capture->width;
22
                break;
23
            }
24
@@ -271,8 +269,7 @@
25
        "monitor", TEXT_MONITOR,
26
        OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
27
 
28
-   obs_property_t *capture_cursor = obs_properties_add_bool(props,
29
-       "capture_cursor", TEXT_CAPTURE_CURSOR);
30
+   obs_properties_add_bool(props, "capture_cursor", TEXT_CAPTURE_CURSOR);
31
 
32
    obs_enter_graphics();
33
 
34
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/funchook.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/funchook.h Changed
10
 
1
@@ -6,7 +6,7 @@
2
 #ifdef __cplusplus
3
 extern "C" {
4
 #else
5
-#ifndef inline
6
+#if defined(_MSC_VER) && !defined(inline)
7
 #define inline __inline
8
 #endif
9
 #endif
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/game-capture.c Changed
201
 
1
@@ -86,6 +86,7 @@
2
    bool                          error_acquiring : 1;
3
    bool                          dwm_capture : 1;
4
    bool                          initial_config : 1;
5
+   bool                          convert_16bit : 1;
6
 
7
    struct game_capture_config    config;
8
 
9
@@ -352,14 +353,14 @@
10
        const char *name, DWORD process_id)
11
 {
12
    char new_name[128];
13
-   sprintf(new_name, "%s%d", name, process_id);
14
+   sprintf(new_name, "%s%lu", name, process_id);
15
    return CreateEventA(NULL, manual_reset, initial_state, new_name);
16
 }
17
 
18
 static inline HANDLE open_event_id(const char *name, DWORD process_id)
19
 {
20
    char new_name[128];
21
-   sprintf(new_name, "%s%d", name, process_id);
22
+   sprintf(new_name, "%s%lu", name, process_id);
23
    return OpenEventA(EVENT_ALL_ACCESS, false, new_name);
24
 }
25
 
26
@@ -542,7 +543,7 @@
27
 static inline bool init_pipe(struct game_capture *gc)
28
 {
29
    char name[64];
30
-   sprintf(name, "%s%d", PIPE_NAME, gc->process_id);
31
+   sprintf(name, "%s%lu", PIPE_NAME, gc->process_id);
32
 
33
    if (!ipc_pipe_server_start(&gc->pipe, name, pipe_log, gc)) {
34
        warn("init_pipe: failed to start pipe");
35
@@ -738,7 +739,7 @@
36
 
37
        if (!gc->thread_id || !gc->process_id) {
38
            warn("error acquiring, failed to get window "
39
-                   "thread/process ids: %d",
40
+                   "thread/process ids: %lu",
41
                    GetLastError());
42
            gc->error_acquiring = true;
43
            return;
44
@@ -838,6 +839,94 @@
45
    return true;
46
 }
47
 
48
+#define PIXEL_16BIT_SIZE 2
49
+#define PIXEL_32BIT_SIZE 4
50
+
51
+static inline uint32_t convert_5_to_8bit(uint16_t val)
52
+{
53
+   return (uint32_t)((double)(val & 0x1F) * (255.0/31.0));
54
+}
55
+
56
+static inline uint32_t convert_6_to_8bit(uint16_t val)
57
+{
58
+   return (uint32_t)((double)(val & 0x3F) * (255.0/63.0));
59
+}
60
+
61
+static void copy_b5g6r5_tex(struct game_capture *gc, int cur_texture,
62
+       uint8_t *data, uint32_t pitch)
63
+{
64
+   uint8_t *input = gc->texture_buffers[cur_texture];
65
+   uint32_t gc_cx = gc->cx;
66
+   uint32_t gc_cy = gc->cy;
67
+   uint32_t gc_pitch = gc->pitch;
68
+
69
+   for (uint32_t y = 0; y < gc_cy; y++) {
70
+       register uint8_t *in  = input + (gc_pitch * y);
71
+       register uint8_t *end = input + (gc_cx * PIXEL_16BIT_SIZE);
72
+       register uint8_t *out = data  + pitch;
73
+
74
+       while (in < end) {
75
+           register uint16_t in_pix = *(uint16_t*)in;
76
+           register uint32_t out_pix = 0xFF000000;
77
+
78
+           out_pix |= convert_5_to_8bit(in_pix);
79
+           in_pix >>= 5;
80
+           out_pix |= convert_6_to_8bit(in_pix) << 8;
81
+           in_pix >>= 6;
82
+           out_pix |= convert_5_to_8bit(in_pix) << 16;
83
+
84
+           *(uint32_t*)out = out_pix;
85
+
86
+           in  += PIXEL_16BIT_SIZE;
87
+           out += PIXEL_32BIT_SIZE;
88
+       }
89
+   }
90
+}
91
+
92
+static void copy_b5g5r5a1_tex(struct game_capture *gc, int cur_texture,
93
+       uint8_t *data, uint32_t pitch)
94
+{
95
+   uint8_t *input = gc->texture_buffers[cur_texture];
96
+   uint32_t gc_cx = gc->cx;
97
+   uint32_t gc_cy = gc->cy;
98
+   uint32_t gc_pitch = gc->pitch;
99
+
100
+   for (uint32_t y = 0; y < gc_cy; y++) {
101
+       register uint8_t *in  = input + (gc_pitch * y);
102
+       register uint8_t *end = input + (gc_cx * PIXEL_16BIT_SIZE);
103
+       register uint8_t *out = data  + pitch;
104
+
105
+       while (in < end) {
106
+           register uint16_t in_pix = *(uint16_t*)in;
107
+           register uint32_t out_pix = 0;
108
+
109
+           out_pix |= convert_5_to_8bit(in_pix);
110
+           in_pix >>= 5;
111
+           out_pix |= convert_5_to_8bit(in_pix) << 8;
112
+           in_pix >>= 5;
113
+           out_pix |= convert_5_to_8bit(in_pix) << 16;
114
+           in_pix >>= 5;
115
+           out_pix |= (in_pix * 255) << 24;
116
+
117
+           *(uint32_t*)out = out_pix;
118
+
119
+           in  += PIXEL_16BIT_SIZE;
120
+           out += PIXEL_32BIT_SIZE;
121
+       }
122
+   }
123
+}
124
+
125
+static inline void copy_16bit_tex(struct game_capture *gc, int cur_texture,
126
+       uint8_t *data, uint32_t pitch)
127
+{
128
+   if (gc->global_hook_info->format == DXGI_FORMAT_B5G5R5A1_UNORM) {
129
+       copy_b5g5r5a1_tex(gc, cur_texture, data, pitch);
130
+
131
+   } else if (gc->global_hook_info->format == DXGI_FORMAT_B5G6R5_UNORM) {
132
+       copy_b5g6r5_tex(gc, cur_texture, data, pitch);
133
+   }
134
+}
135
+
136
 static void copy_shmem_tex(struct game_capture *gc)
137
 {
138
    int cur_texture = gc->shmem_data->last_tex;
139
@@ -863,7 +952,10 @@
140
    }
141
 
142
    if (gs_texture_map(gc->texture, &data, &pitch)) {
143
-       if (pitch == gc->pitch) {
144
+       if (gc->convert_16bit) {
145
+           copy_16bit_tex(gc, cur_texture, data, pitch);
146
+
147
+       } else if (pitch == gc->pitch) {
148
            memcpy(data, gc->texture_buffers[cur_texture],
149
                    pitch * gc->cy);
150
        } else {
151
@@ -884,18 +976,29 @@
152
    ReleaseMutex(mutex);
153
 }
154
 
155
+static inline bool is_16bit_format(uint32_t format)
156
+{
157
+   return format == DXGI_FORMAT_B5G5R5A1_UNORM ||
158
+          format == DXGI_FORMAT_B5G6R5_UNORM;
159
+}
160
+
161
 static inline bool init_shmem_capture(struct game_capture *gc)
162
 {
163
+   enum gs_color_format format;
164
+
165
    gc->texture_buffers[0] =
166
        (uint8_t*)gc->data + gc->shmem_data->tex1_offset;
167
    gc->texture_buffers[1] =
168
        (uint8_t*)gc->data + gc->shmem_data->tex2_offset;
169
 
170
+   gc->convert_16bit = is_16bit_format(gc->global_hook_info->format);
171
+   format = gc->convert_16bit ?
172
+       GS_BGRA : convert_format(gc->global_hook_info->format);
173
+
174
    obs_enter_graphics();
175
    gs_texture_destroy(gc->texture);
176
-   gc->texture = gs_texture_create(gc->cx, gc->cy,
177
-           convert_format(gc->global_hook_info->format),
178
-           1, NULL, GS_DYNAMIC);
179
+   gc->texture = gs_texture_create(gc->cx, gc->cy, format, 1, NULL,
180
+           GS_DYNAMIC);
181
    obs_leave_graphics();
182
 
183
    if (!gc->texture) {
184
@@ -943,6 +1046,14 @@
185
    return true;
186
 }
187
 
188
+static inline bool capture_valid(struct game_capture *gc)
189
+{
190
+   if (!gc->dwm_capture && !IsWindow(gc->window))
191
+          return false;
192
+   
193
+   return !object_signalled(gc->target_process);
194
+}
195
+
196
 static void game_capture_tick(void *data, float seconds)
197
 {
198
    struct game_capture *gc = data;
199
@@ -963,7 +1074,7 @@
200
        close_handle(&gc->injector_process);
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.c Changed
28
 
1
@@ -26,17 +26,17 @@
2
    get_dxgi_offsets(&dxgi);
3
 
4
    printf("[d3d8]\n");
5
-   printf("present=0x%"PRIxPTR"\n", d3d8.present);
6
-   printf("reset=0x%"PRIxPTR"\n", d3d8.reset);
7
+   printf("present=0x%"PRIx32"\n", d3d8.present);
8
+   printf("reset=0x%"PRIx32"\n", d3d8.reset);
9
    printf("[d3d9]\n");
10
-   printf("present=0x%"PRIxPTR"\n", d3d9.present);
11
-   printf("present_ex=0x%"PRIxPTR"\n", d3d9.present_ex);
12
-   printf("present_swap=0x%"PRIxPTR"\n", d3d9.present_swap);
13
-   printf("reset=0x%"PRIxPTR"\n", d3d9.reset);
14
-   printf("reset_ex=0x%"PRIxPTR"\n", d3d9.reset_ex);
15
+   printf("present=0x%"PRIx32"\n", d3d9.present);
16
+   printf("present_ex=0x%"PRIx32"\n", d3d9.present_ex);
17
+   printf("present_swap=0x%"PRIx32"\n", d3d9.present_swap);
18
+   printf("reset=0x%"PRIx32"\n", d3d9.reset);
19
+   printf("reset_ex=0x%"PRIx32"\n", d3d9.reset_ex);
20
    printf("[dxgi]\n");
21
-   printf("present=0x%"PRIxPTR"\n", dxgi.present);
22
-   printf("resize=0x%"PRIxPTR"\n", dxgi.resize);
23
+   printf("present=0x%"PRIx32"\n", dxgi.present);
24
+   printf("resize=0x%"PRIx32"\n", dxgi.resize);
25
 
26
    (void)argc;
27
    (void)argv;
28
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/get-graphics-offsets/get-graphics-offsets.h Changed
10
 
1
@@ -9,7 +9,7 @@
2
 #ifdef __cplusplus
3
 extern "C" {
4
 #else
5
-#ifndef inline
6
+#if defined(_MSC_VER) && !defined(inline)
7
 #define inline __inline
8
 #endif
9
 #endif
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook-info.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook-info.h Changed
10
 
1
@@ -106,7 +106,7 @@
2
 {
3
    HANDLE handle;
4
    char new_name[64];
5
-   sprintf(new_name, "%s%d", SHMEM_HOOK_INFO, id);
6
+   sprintf(new_name, "%s%lu", SHMEM_HOOK_INFO, id);
7
 
8
    handle = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL,
9
            PAGE_READWRITE, 0, sizeof(struct hook_info), new_name);
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt Changed
18
 
1
@@ -14,6 +14,7 @@
2
    ../funchook.c
3
    ../obfuscate.c
4
    gl-capture.c
5
+   d3d8-capture.cpp
6
    d3d9-capture.cpp
7
    dxgi-capture.cpp
8
    d3d10-capture.cpp
9
@@ -24,7 +25,7 @@
10
    ${graphics-hook_HEADERS})
11
 
12
 target_link_libraries(graphics-hook
13
-   ipc-util)
14
+   ipc-util psapi)
15
 
16
 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
17
    set(_output_suffix "64")
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp Changed
19
 
1
@@ -54,7 +54,7 @@
2
    };
3
 };
4
 
5
-struct d3d10_data data = {};
6
+static struct d3d10_data data = {};
7
 
8
 void d3d10_free(void)
9
 {
10
@@ -510,7 +510,7 @@
11
    }
12
    if (!capture_init_shtex(&data.shtex_info, window,
13
                data.base_cx, data.base_cy, data.cx, data.cy,
14
-               data.format, false, (uint32_t)data.handle)) {
15
+               data.format, false, (uintptr_t)data.handle)) {
16
        return false;
17
    }
18
 
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp Changed
19
 
1
@@ -55,7 +55,7 @@
2
    };
3
 };
4
 
5
-struct d3d11_data data = {};
6
+static struct d3d11_data data = {};
7
 
8
 void d3d11_free(void)
9
 {
10
@@ -516,7 +516,7 @@
11
    }
12
    if (!capture_init_shtex(&data.shtex_info, window,
13
                data.base_cx, data.base_cy, data.cx, data.cy,
14
-               data.format, false, (uint32_t)data.handle)) {
15
+               data.format, false, (uintptr_t)data.handle)) {
16
        return false;
17
    }
18
 
19
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/d3d8-capture.cpp Added
201
 
1
@@ -0,0 +1,302 @@
2
+#define _CRT_SECURE_NO_WARNINGS
3
+#include <dxgi.h>
4
+
5
+#include "../d3d8-api/d3d8.h"
6
+#include "graphics-hook.h"
7
+#include "../funchook.h"
8
+
9
+typedef HRESULT(STDMETHODCALLTYPE *reset_t)(IDirect3DDevice8*,
10
+       D3DPRESENT_PARAMETERS*);
11
+typedef HRESULT(STDMETHODCALLTYPE *present_t)(IDirect3DDevice8*,
12
+       CONST RECT*, CONST RECT*, HWND, CONST RGNDATA*);
13
+
14
+static struct func_hook present;
15
+static struct func_hook reset;
16
+
17
+struct d3d8_data {
18
+   HMODULE                        d3d8;
19
+   uint32_t                       cx;
20
+   uint32_t                       cy;
21
+   D3DFORMAT                      d3d8_format;
22
+   DXGI_FORMAT                    dxgi_format;
23
+
24
+   struct shmem_data              *shmem_info;
25
+   HWND                           window;
26
+   uint32_t                       pitch;
27
+   IDirect3DSurface8              *copy_surfaces[NUM_BUFFERS];
28
+   bool                           surface_locked[NUM_BUFFERS];
29
+   int                            cur_surface;
30
+   int                            copy_wait;
31
+};
32
+
33
+static d3d8_data data = {};
34
+
35
+static DXGI_FORMAT d3d8_to_dxgi_format(D3DFORMAT format)
36
+{
37
+   switch ((unsigned long)format) {
38
+   case D3DFMT_X1R5G5B5:
39
+   case D3DFMT_A1R5G5B5: return DXGI_FORMAT_B5G5R5A1_UNORM;
40
+   case D3DFMT_R5G6B5:   return DXGI_FORMAT_B5G6R5_UNORM;
41
+   case D3DFMT_A8R8G8B8: return DXGI_FORMAT_B8G8R8A8_UNORM;
42
+   case D3DFMT_X8R8G8B8: return DXGI_FORMAT_B8G8R8X8_UNORM;
43
+   }
44
+
45
+   return DXGI_FORMAT_UNKNOWN;
46
+}
47
+
48
+static IDirect3DSurface8 *d3d8_get_backbuffer(IDirect3DDevice8 *device)
49
+{
50
+   IDirect3DSurface8 *backbuffer;
51
+   HRESULT hr;
52
+
53
+   hr = device->GetRenderTarget(&backbuffer);
54
+   if (FAILED(hr)) {
55
+       hlog_hr("d3d8_get_backbuffer: Failed to get backbuffer", hr);
56
+       backbuffer = nullptr;
57
+   }
58
+
59
+   return backbuffer;
60
+}
61
+
62
+static bool d3d8_get_window_handle(IDirect3DDevice8 *device)
63
+{
64
+   D3DDEVICE_CREATION_PARAMETERS parameters;
65
+   HRESULT hr;
66
+   hr = device->GetCreationParameters(&parameters);
67
+   if (FAILED(hr)) {
68
+       hlog_hr("d3d8_get_window_handle: Failed to get "
69
+               "device creation parameters", hr);
70
+       return false;
71
+   }
72
+
73
+   data.window = parameters.hFocusWindow;
74
+
75
+   return true;
76
+}
77
+
78
+static bool d3d8_init_format_backbuffer(IDirect3DDevice8 *device)
79
+{
80
+   IDirect3DSurface8 *backbuffer;
81
+   D3DSURFACE_DESC desc;
82
+   HRESULT hr;
83
+
84
+   if (!d3d8_get_window_handle(device))
85
+       return false;
86
+
87
+   backbuffer = d3d8_get_backbuffer(device);
88
+   if (!backbuffer)
89
+       return false;
90
+
91
+   hr = backbuffer->GetDesc(&desc);
92
+   backbuffer->Release();
93
+   if (FAILED(hr)) {
94
+       hlog_hr("d3d8_init_format_backbuffer: Failed to get "
95
+               "backbuffer descriptor", hr);
96
+       return false;
97
+   }
98
+
99
+   data.d3d8_format = desc.Format;
100
+   data.dxgi_format = d3d8_to_dxgi_format(desc.Format);
101
+   data.cx = desc.Width;
102
+   data.cy = desc.Height;
103
+
104
+   return true;
105
+}
106
+
107
+static bool d3d8_shmem_init_buffer(IDirect3DDevice8 *device, int idx)
108
+{
109
+   HRESULT hr;
110
+
111
+   hr = device->CreateImageSurface(data.cx, data.cy,
112
+           data.d3d8_format, &data.copy_surfaces[idx]);
113
+   if (FAILED(hr)) {
114
+       hlog_hr("d3d8_shmem_init_buffer: Failed to create surface", hr);
115
+       return false;
116
+   }
117
+
118
+   if (idx == 0) {
119
+       D3DLOCKED_RECT rect;
120
+       hr = data.copy_surfaces[0]->LockRect(&rect, nullptr,
121
+               D3DLOCK_READONLY);
122
+       if (FAILED(hr)) {
123
+           hlog_hr("d3d8_shmem_init_buffer: Failed to lock buffer", hr);
124
+           return false;
125
+       }
126
+
127
+       data.pitch = rect.Pitch;
128
+       data.copy_surfaces[0]->UnlockRect();
129
+   }
130
+
131
+   return true;
132
+}
133
+
134
+static bool d3d8_shmem_init(IDirect3DDevice8 *device)
135
+{
136
+   for (int i = 0; i < NUM_BUFFERS; i++) {
137
+       if (!d3d8_shmem_init_buffer(device, i)) {
138
+           return false;
139
+       }
140
+   }
141
+   if (!capture_init_shmem(&data.shmem_info, data.window, data.cx, data.cy,
142
+               data.cx, data.cy, data.pitch, data.dxgi_format,
143
+               false)) {
144
+       return false;
145
+   }
146
+
147
+   hlog("d3d8 memory capture successfull");
148
+   return true;
149
+}
150
+
151
+static void d3d8_free()
152
+{
153
+   capture_free();
154
+
155
+   for (size_t i = 0; i < NUM_BUFFERS; i++) {
156
+       if (data.copy_surfaces[i]) {
157
+           if (data.surface_locked[i])
158
+               data.copy_surfaces[i]->UnlockRect();
159
+           data.copy_surfaces[i]->Release();
160
+       }
161
+   }
162
+
163
+   memset(&data, 0, sizeof(data));
164
+
165
+   hlog("----------------- d3d8 capture freed -----------------");
166
+}
167
+
168
+static void d3d8_init(IDirect3DDevice8 *device)
169
+{
170
+   data.d3d8 = get_system_module("d3d8.dll");
171
+
172
+   if (!d3d8_init_format_backbuffer(device))
173
+       return;
174
+
175
+   if (!d3d8_shmem_init(device))
176
+       d3d8_free();
177
+}
178
+
179
+static void d3d8_shmem_capture_copy(int idx)
180
+{
181
+   IDirect3DSurface8 *target = data.copy_surfaces[idx];
182
+   D3DLOCKED_RECT rect;
183
+   HRESULT hr;
184
+
185
+   if (data.surface_locked[idx])
186
+       return;
187
+
188
+   hr = target->LockRect(&rect, nullptr, D3DLOCK_READONLY);
189
+   if (SUCCEEDED(hr)) {
190
+       shmem_copy_data(idx, rect.pBits);
191
+   }
192
+}
193
+
194
+static void d3d8_shmem_capture(IDirect3DDevice8 *device,
195
+       IDirect3DSurface8 *backbuffer)
196
+{
197
+   int cur_surface;
198
+   int next_surface;
199
+   HRESULT hr;
200
+
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp Changed
62
 
1
@@ -98,7 +98,7 @@
2
 
3
 static DXGI_FORMAT d3d9_to_dxgi_format(D3DFORMAT format)
4
 {
5
-   switch (format) {
6
+   switch ((unsigned long)format) {
7
    case D3DFMT_A2B10G10R10: return DXGI_FORMAT_R10G10B10A2_UNORM;
8
    case D3DFMT_A8R8G8B8:    return DXGI_FORMAT_B8G8R8A8_UNORM;
9
    case D3DFMT_X8R8G8B8:    return DXGI_FORMAT_B8G8R8X8_UNORM;
10
@@ -285,7 +285,7 @@
11
    }
12
    if (!capture_init_shtex(&data.shtex_info, window, cx, cy,
13
                data.cx, data.cy, data.dxgi_format, false,
14
-               (uint32_t)data.handle)) {
15
+               (uintptr_t)data.handle)) {
16
        return false;
17
    }
18
 
19
@@ -425,7 +425,7 @@
20
    return true;
21
 }
22
 
23
-static bool d3d9_init_format_swapchain(uint32_t cx, uint32_t cy, HWND window)
24
+static bool d3d9_init_format_swapchain(uint32_t &cx, uint32_t &cy, HWND &window)
25
 {
26
    D3DPRESENT_PARAMETERS pp;
27
 
28
@@ -455,9 +455,9 @@
29
 {
30
    IDirect3DDevice9Ex *d3d9ex = nullptr;
31
    bool success;
32
-   uint32_t cx;
33
-   uint32_t cy;
34
-   HWND window;
35
+   uint32_t cx = 0;
36
+   uint32_t cy = 0;
37
+   HWND window = nullptr;
38
    HRESULT hr;
39
 
40
    data.d3d9 = get_system_module("d3d9.dll");
41
@@ -773,15 +773,15 @@
42
    reset_ex_addr = get_offset_addr(d3d9_module,
43
            global_hook_info->offsets.d3d9.reset_ex);
44
 
45
-   hook_init(&present, present_addr, hook_present,
46
+   hook_init(&present, present_addr, (void*)hook_present,
47
            "IDirect3DDevice9::Present");
48
-   hook_init(&present_ex, present_ex_addr, hook_present_ex,
49
+   hook_init(&present_ex, present_ex_addr, (void*)hook_present_ex,
50
            "IDirect3DDevice9Ex::PresentEx");
51
-   hook_init(&present_swap, present_swap_addr, hook_present_swap,
52
+   hook_init(&present_swap, present_swap_addr, (void*)hook_present_swap,
53
            "IDirect3DSwapChain9::Present");
54
-   hook_init(&reset, reset_addr, hook_reset,
55
+   hook_init(&reset, reset_addr, (void*)hook_reset,
56
            "IDirect3DDevice9::Reset");
57
-   hook_init(&reset_ex, reset_ex_addr, hook_reset_ex,
58
+   hook_init(&reset_ex, reset_ex_addr, (void*)hook_reset_ex,
59
            "IDirect3DDevice9Ex::ResetEx");
60
 
61
    rehook(&reset_ex);
62
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/d3d9-patches.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/d3d9-patches.hpp Changed
50
 
1
@@ -2,13 +2,46 @@
2
 
3
 #include <stdint.h>
4
 
5
+#ifdef __MINGW32__
6
+#include <excpt.h>
7
+#ifndef TRYLEVEL_NONE
8
+#ifndef __MINGW64__
9
+#define NO_SEH_MINGW
10
+#endif
11
+#ifndef __try
12
+#define __try
13
+#endif
14
+#ifndef __except
15
+#define __except(x) if (0)
16
+#endif
17
+#endif
18
+#endif
19
+
20
 static inline int safe_memcmp(const void *p1, const void *p2, size_t size)
21
 {
22
-   __try {
23
+
24
+// Disabled exceptions on mingw-w64 as it is broken
25
+#ifndef __MINGW32__
26
+#ifdef NO_SEH_MINGW
27
+   __try1(EXCEPTION_EXECUTE_HANDLER)
28
+#else
29
+   __try
30
+#endif
31
+#endif
32
+   {
33
        return memcmp(p1, p2, size);
34
-   } __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) {
35
+   }
36
+// Disabled exceptions on mingw-w64 as it is broken
37
+#ifndef __MINGW32__
38
+#ifdef NO_SEH_MINGW
39
+   __except1
40
+#else
41
+   __except(EXCEPTION_EXECUTE_HANDLER)
42
+#endif
43
+   {
44
        return -1;
45
    }
46
+#endif
47
 }
48
 
49
 struct patch_info {
50
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp Changed
13
 
1
@@ -217,9 +217,9 @@
2
    resize_addr = get_offset_addr(dxgi_module,
3
            global_hook_info->offsets.dxgi.resize);
4
 
5
-   hook_init(&present, present_addr, hook_present,
6
+   hook_init(&present, present_addr, (void*)hook_present,
7
            "IDXGISwapChain::Present");
8
-   hook_init(&resize_buffers, resize_addr, hook_resize_buffers,
9
+   hook_init(&resize_buffers, resize_addr, (void*)hook_resize_buffers,
10
            "IDXGISwapChain::ResizeBuffers");
11
 
12
    rehook(&resize_buffers);
13
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/dxgi-helpers.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/dxgi-helpers.hpp Changed
10
 
1
@@ -2,7 +2,7 @@
2
 
3
 static inline DXGI_FORMAT fix_dxgi_format(DXGI_FORMAT format)
4
 {
5
-   switch (format) {
6
+   switch ((unsigned long)format) {
7
        case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
8
            return DXGI_FORMAT_B8G8R8A8_UNORM;
9
        case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c Changed
38
 
1
@@ -1,6 +1,10 @@
2
 #define _CRT_SECURE_NO_WARNINGS
3
+
4
+#ifdef _MSC_VER
5
 #pragma warning(disable : 4214) /* nonstandard extension, non-int bitfield */
6
 #pragma warning(disable : 4054) /* function pointer to data pointer */
7
+#endif
8
+
9
 #include <windows.h>
10
 
11
 #define COBJMACROS
12
@@ -248,7 +252,7 @@
13
 
14
 typedef HRESULT (WINAPI *create_dxgi_factory1_t)(REFIID, void **);
15
 
16
-const static D3D_FEATURE_LEVEL feature_levels[] =
17
+static const D3D_FEATURE_LEVEL feature_levels[] =
18
 {
19
    D3D_FEATURE_LEVEL_11_0,
20
    D3D_FEATURE_LEVEL_10_1,
21
@@ -426,7 +430,7 @@
22
    }
23
    if (!capture_init_shtex(&data.shtex_info, window,
24
                data.base_cx, data.base_cy, data.cx, data.cy,
25
-               data.format, true, (uint32_t)data.handle)) {
26
+               data.format, true, (uintptr_t)data.handle)) {
27
        return false;
28
    }
29
 
30
@@ -697,7 +701,6 @@
31
 {
32
    static bool functions_initialized = false;
33
    static bool critical_failure = false;
34
-   static bool reacquireing = false;
35
 
36
    if (critical_failure) {
37
        return;
38
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/gl-decs.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/gl-decs.h Changed
16
 
1
@@ -119,14 +119,10 @@
2
 static GLDRAWBUFFERPROC glDrawBuffer = NULL;
3
 static GLGETINTEGERVPROC glGetIntegerv = NULL;
4
 static GLGETERRORPROC glGetError = NULL;
5
-static WGLSWAPLAYERBUFFERSPROC jimglSwapLayerBuffers = NULL;
6
-static WGLSWAPBUFFERSPROC jimglSwapBuffers = NULL;
7
-static WGLDELETECONTEXTPROC jimglDeleteContext = NULL;
8
 static WGLGETPROCADDRESSPROC jimglGetProcAddress = NULL;
9
 static WGLMAKECURRENTPROC jimglMakeCurrent = NULL;
10
 static WGLGETCURRENTDCPROC jimglGetCurrentDC = NULL;
11
 static WGLGETCURRENTCONTEXTPROC jimglGetCurrentContext = NULL;
12
-static WGLCREATECONTEXTPROC jimglCreateContext = NULL;
13
 static GLBUFFERDATAARBPROC glBufferData = NULL;
14
 static GLDELETEBUFFERSARBPROC glDeleteBuffers = NULL;
15
 static GLDELETETEXTURESPROC glDeleteTextures = NULL;
16
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c Changed
201
 
1
@@ -2,7 +2,6 @@
2
 #include <windows.h>
3
 #include <shlobj.h>
4
 #include <psapi.h>
5
-#include <ipc-util/pipe.h>
6
 #include "graphics-hook.h"
7
 #include "../obfuscate.h"
8
 #include "../funchook.h"
9
@@ -29,19 +28,19 @@
10
    volatile bool          locked_textures[NUM_BUFFERS];
11
 };
12
 
13
-static ipc_pipe_client_t       pipe                            = {0};
14
-static HANDLE                  signal_restart                  = NULL;
15
-static HANDLE                  signal_stop                     = NULL;
16
-static HANDLE                  signal_ready                    = NULL;
17
-static HANDLE                  signal_exit                     = NULL;
18
-static HANDLE                  tex_mutexes[2]                  = {NULL, NULL};
19
+ipc_pipe_client_t              pipe                            = {0};
20
+HANDLE                         signal_restart                  = NULL;
21
+HANDLE                         signal_stop                     = NULL;
22
+HANDLE                         signal_ready                    = NULL;
23
+HANDLE                         signal_exit                     = NULL;
24
+HANDLE                         tex_mutexes[2]                  = {NULL, NULL};
25
 static HANDLE                  filemap_hook_info               = NULL;
26
 
27
 static volatile bool           stop_loop                       = false;
28
 static HANDLE                  capture_thread                  = NULL;
29
-static char                    system_path[MAX_PATH]           = {0};
30
-static char                    process_name[MAX_PATH]          = {0};
31
-static char                    keepalive_name[64]              = {0};
32
+char                           system_path[MAX_PATH]           = {0};
33
+char                           process_name[MAX_PATH]          = {0};
34
+char                           keepalive_name[64]              = {0};
35
 
36
 static unsigned int            shmem_id_counter                = 0;
37
 static void                    *shmem_info                     = NULL;
38
@@ -60,10 +59,10 @@
39
    }
40
 }
41
 
42
-static inline bool init_pipe(void)
43
+bool init_pipe(void)
44
 {
45
    char new_name[64];
46
-   sprintf(new_name, "%s%d", PIPE_NAME, GetCurrentProcessId());
47
+   sprintf(new_name, "%s%lu", PIPE_NAME, GetCurrentProcessId());
48
 
49
    if (!ipc_pipe_client_open(&pipe, new_name)) {
50
        DbgOut("Failed to open pipe\n");
51
@@ -86,7 +85,7 @@
52
    char new_name[64];
53
    HANDLE handle;
54
 
55
-   sprintf(new_name, "%s%d", name, pid);
56
+   sprintf(new_name, "%s%lu", name, pid);
57
 
58
    handle = OpenMutexA(MUTEX_ALL_ACCESS, false, new_name);
59
    if (!handle)
60
@@ -186,7 +185,7 @@
61
 {
62
    wait_for_dll_main_finish(thread_handle);
63
 
64
-   sprintf(keepalive_name, "%s%d", EVENT_HOOK_KEEPALIVE,
65
+   sprintf(keepalive_name, "%s%lu", EVENT_HOOK_KEEPALIVE,
66
            GetCurrentProcessId());
67
 
68
    if (!init_pipe()) {
69
@@ -274,7 +273,7 @@
70
 
71
 static inline bool attempt_hook(void)
72
 {
73
-   static bool ddraw_hooked = false;
74
+   //static bool ddraw_hooked = false;
75
    static bool d3d8_hooked  = false;
76
    static bool d3d9_hooked  = false;
77
    static bool dxgi_hooked  = false;
78
@@ -311,7 +310,7 @@
79
        rehook_gl();*/
80
    }
81
 
82
-   /*if (!d3d8_hooked) {
83
+   if (!d3d8_hooked) {
84
        if (!d3d8_hookable()) {
85
            d3d8_hooked = true;
86
        } else {
87
@@ -322,7 +321,7 @@
88
        }
89
    }
90
 
91
-   if (!ddraw_hooked) {
92
+   /*if (!ddraw_hooked) {
93
        if (!ddraw_hookable()) {
94
            ddraw_hooked = true;
95
        } else {
96
@@ -401,87 +400,6 @@
97
    }
98
 }
99
 
100
-inline const char *get_process_name(void)
101
-{
102
-   return process_name;
103
-}
104
-
105
-inline HMODULE get_system_module(const char *module)
106
-{
107
-   char base_path[MAX_PATH];
108
-
109
-   strcpy(base_path, system_path);
110
-   strcat(base_path, "\\");
111
-   strcat(base_path, module);
112
-   return GetModuleHandleA(module);
113
-}
114
-
115
-inline HMODULE load_system_library(const char *name)
116
-{
117
-   char base_path[MAX_PATH];
118
-   HMODULE module;
119
-
120
-   strcpy(base_path, system_path);
121
-   strcat(base_path, "\\");
122
-   strcat(base_path, name);
123
-
124
-   module = GetModuleHandleA(base_path);
125
-   if (module)
126
-       return module;
127
-
128
-   return LoadLibraryA(base_path);
129
-}
130
-
131
-static inline bool capture_alive(void)
132
-{
133
-   HANDLE event = OpenEventA(EVENT_ALL_ACCESS, false, keepalive_name);
134
-   if (event) {
135
-       CloseHandle(event);
136
-       return true;
137
-   }
138
-
139
-   return false;
140
-}
141
-
142
-inline bool capture_active(void)
143
-{
144
-   return active;
145
-}
146
-
147
-static inline bool capture_stopped(void)
148
-{
149
-   return WaitForSingleObject(signal_stop, 0) == WAIT_OBJECT_0;
150
-}
151
-
152
-static inline bool capture_restarted(void)
153
-{
154
-   return WaitForSingleObject(signal_restart, 0) == WAIT_OBJECT_0;
155
-}
156
-
157
-inline bool capture_should_stop(void)
158
-{
159
-   bool stop_requested = false;
160
-
161
-   if (capture_active())
162
-       stop_requested = capture_stopped() || !capture_alive();
163
-
164
-   return stop_requested;
165
-}
166
-
167
-inline bool capture_should_init(void)
168
-{
169
-   if (!capture_active() && capture_restarted()) {
170
-       if (capture_alive()) {
171
-           if (!ipc_pipe_client_valid(&pipe)) {
172
-               init_pipe();
173
-           }
174
-           return true;
175
-       }
176
-   }
177
-
178
-   return false;
179
-}
180
-
181
 static inline uint64_t get_clockfreq(void)
182
 {
183
    static bool have_clockfreq = false;
184
@@ -508,7 +426,7 @@
185
    return (uint64_t)time_val;
186
 }
187
 
188
-inline int try_lock_shmem_tex(int id)
189
+static inline int try_lock_shmem_tex(int id)
190
 {
191
    int next = id == 0 ? 1 : 0;
192
 
193
@@ -521,40 +439,13 @@
194
    return -1;
195
 }
196
 
197
-inline void unlock_shmem_tex(int id)
198
+static inline void unlock_shmem_tex(int id)
199
 {
200
    if (id != -1) {
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h Changed
189
 
1
@@ -1,14 +1,17 @@
2
 #pragma once
3
 
4
+#ifdef _MSC_VER
5
 /* conversion from data/function pointer */
6
 #pragma warning(disable: 4152)
7
+#endif
8
 
9
 #include "../graphics-hook-info.h"
10
+#include <ipc-util/pipe.h>
11
 
12
 #ifdef __cplusplus
13
 extern "C" {
14
 #else
15
-#ifndef inline
16
+#if defined(_MSC_VER) && !defined(inline)
17
 #define inline __inline
18
 #endif
19
 #endif
20
@@ -17,19 +20,19 @@
21
 
22
 extern void hlog(const char *format, ...);
23
 extern void hlog_hr(const char *text, HRESULT hr);
24
-extern inline const char *get_process_name(void);
25
-extern inline HMODULE get_system_module(const char *module);
26
-extern inline HMODULE load_system_library(const char *module);
27
+static inline const char *get_process_name(void);
28
+static inline HMODULE get_system_module(const char *module);
29
+static inline HMODULE load_system_library(const char *module);
30
 extern uint64_t os_gettime_ns(void);
31
 
32
-extern inline bool capture_active(void);
33
-extern inline bool capture_ready(void);
34
-extern inline bool capture_should_stop(void);
35
-extern inline bool capture_should_init(void);
36
+static inline bool capture_active(void);
37
+static inline bool capture_ready(void);
38
+static inline bool capture_should_stop(void);
39
+static inline bool capture_should_init(void);
40
 
41
-extern inline void shmem_copy_data(size_t idx, void *volatile data);
42
-extern inline bool shmem_texture_data_lock(int idx);
43
-extern inline void shmem_texture_data_unlock(int idx);
44
+extern void shmem_copy_data(size_t idx, void *volatile data);
45
+extern bool shmem_texture_data_lock(int idx);
46
+extern void shmem_texture_data_unlock(int idx);
47
 
48
 extern bool hook_ddraw(void);
49
 extern bool hook_d3d8(void);
50
@@ -49,7 +52,7 @@
51
 
52
 extern bool capture_init_shtex(struct shtex_data **data, HWND window,
53
        uint32_t base_cx, uint32_t base_cy, uint32_t cx, uint32_t cy,
54
-       uint32_t format, bool flip, uint32_t handle);
55
+       uint32_t format, bool flip, uintptr_t handle);
56
 extern bool capture_init_shmem(struct shmem_data **data, HWND window,
57
        uint32_t base_cx, uint32_t base_cy, uint32_t cx, uint32_t cy,
58
        uint32_t pitch, uint32_t format, bool flip);
59
@@ -77,6 +80,129 @@
60
    return (void*)((uintptr_t)module + (uintptr_t)offset);
61
 }
62
 
63
+/* ------------------------------------------------------------------------- */
64
+
65
+extern ipc_pipe_client_t pipe;
66
+extern HANDLE signal_restart;
67
+extern HANDLE signal_stop;
68
+extern HANDLE signal_ready;
69
+extern HANDLE signal_exit;
70
+extern HANDLE tex_mutexes[2];
71
+extern char system_path[MAX_PATH];
72
+extern char process_name[MAX_PATH];
73
+extern char keepalive_name[64];
74
+extern volatile bool active;
75
+
76
+static inline const char *get_process_name(void)
77
+{
78
+   return process_name;
79
+}
80
+
81
+static inline HMODULE get_system_module(const char *module)
82
+{
83
+   char base_path[MAX_PATH];
84
+
85
+   strcpy(base_path, system_path);
86
+   strcat(base_path, "\\");
87
+   strcat(base_path, module);
88
+   return GetModuleHandleA(module);
89
+}
90
+
91
+static inline HMODULE load_system_library(const char *name)
92
+{
93
+   char base_path[MAX_PATH];
94
+   HMODULE module;
95
+
96
+   strcpy(base_path, system_path);
97
+   strcat(base_path, "\\");
98
+   strcat(base_path, name);
99
+
100
+   module = GetModuleHandleA(base_path);
101
+   if (module)
102
+       return module;
103
+
104
+   return LoadLibraryA(base_path);
105
+}
106
+
107
+static inline bool capture_alive(void)
108
+{
109
+   HANDLE event = OpenEventA(EVENT_ALL_ACCESS, false, keepalive_name);
110
+   if (event) {
111
+       CloseHandle(event);
112
+       return true;
113
+   }
114
+
115
+   return false;
116
+}
117
+
118
+static inline bool capture_active(void)
119
+{
120
+   return active;
121
+}
122
+
123
+static inline bool frame_ready(uint64_t interval)
124
+{
125
+   static uint64_t last_time = 0;
126
+   uint64_t        elapsed;
127
+   uint64_t        t;
128
+
129
+   if (!interval) {
130
+       return true;
131
+   }
132
+
133
+   t = os_gettime_ns();
134
+   elapsed = t - last_time;
135
+
136
+   if (elapsed < interval) {
137
+       return false;
138
+   }
139
+
140
+   last_time = (elapsed > interval * 2) ? t : last_time + interval;
141
+   return true;
142
+}
143
+
144
+static inline bool capture_ready(void)
145
+{
146
+   return capture_active() &&
147
+       frame_ready(global_hook_info->frame_interval);
148
+}
149
+
150
+static inline bool capture_stopped(void)
151
+{
152
+   return WaitForSingleObject(signal_stop, 0) == WAIT_OBJECT_0;
153
+}
154
+
155
+static inline bool capture_restarted(void)
156
+{
157
+   return WaitForSingleObject(signal_restart, 0) == WAIT_OBJECT_0;
158
+}
159
+
160
+static inline bool capture_should_stop(void)
161
+{
162
+   bool stop_requested = false;
163
+
164
+   if (capture_active())
165
+       stop_requested = capture_stopped() || !capture_alive();
166
+
167
+   return stop_requested;
168
+}
169
+
170
+extern bool init_pipe(void);
171
+
172
+static inline bool capture_should_init(void)
173
+{
174
+   if (!capture_active() && capture_restarted()) {
175
+       if (capture_alive()) {
176
+           if (!ipc_pipe_client_valid(&pipe)) {
177
+               init_pipe();
178
+           }
179
+           return true;
180
+       }
181
+   }
182
+
183
+   return false;
184
+}
185
+
186
 #ifdef __cplusplus
187
 }
188
 #endif
189
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/hook-helpers.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/hook-helpers.h Changed
18
 
1
@@ -25,14 +25,14 @@
2
 static inline HANDLE get_event_plus_id(const char *name, DWORD id)
3
 {
4
    char new_name[64];
5
-   sprintf(new_name, "%s%d", name, id);
6
+   sprintf(new_name, "%s%lu", name, id);
7
    return get_event(new_name);
8
 }
9
 
10
 static inline HANDLE get_mutex_plus_id(const char *name, DWORD id)
11
 {
12
    char new_name[64];
13
-   sprintf(new_name, "%s%d", name, id);
14
+   sprintf(new_name, "%s%lu", name, id);
15
    return get_mutex(new_name);
16
 }
17
 
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/inject-helper/inject-helper.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/inject-helper/inject-helper.c Changed
18
 
1
@@ -7,7 +7,6 @@
2
 static void load_debug_privilege(void)
3
 {
4
    const DWORD flags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY;
5
-   bool success = false;
6
    TOKEN_PRIVILEGES tp;
7
    HANDLE token;
8
    LUID val;
9
@@ -21,7 +20,7 @@
10
        tp.Privileges[0].Luid = val;
11
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
12
 
13
-       success = !!AdjustTokenPrivileges(token, false, &tp,
14
+       AdjustTokenPrivileges(token, false, &tp,
15
                sizeof(tp), NULL, NULL);
16
    }
17
 
18
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/load-graphics-offsets.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/load-graphics-offsets.c Changed
22
 
1
@@ -20,6 +20,11 @@
2
        return false;
3
    }
4
 
5
+   offsets->d3d8.present =
6
+       (uint32_t)config_get_uint(config, "d3d8", "present");
7
+   offsets->d3d8.reset =
8
+       (uint32_t)config_get_uint(config, "d3d8", "reset");
9
+
10
    offsets->d3d9.present =
11
        (uint32_t)config_get_uint(config, "d3d9", "present");
12
    offsets->d3d9.present_ex =
13
@@ -61,7 +66,7 @@
14
    }
15
 
16
    for (;;) {
17
-       size_t len = os_process_pipe_read(pp, data, 128);
18
+       size_t len = os_process_pipe_read(pp, (uint8_t*)data, 128);
19
        if (!len)
20
            break;
21
 
22
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/monitor-capture.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/monitor-capture.c Changed
15
 
1
@@ -229,11 +229,8 @@
2
        "monitor", TEXT_MONITOR,
3
        OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
4
 
5
-   obs_property_t *compatmode = obs_properties_add_bool(props,
6
-       "compatibility", TEXT_COMPATIBILITY);
7
-
8
-   obs_property_t *capture_cursor = obs_properties_add_bool(props,
9
-       "capture_cursor", TEXT_CAPTURE_CURSOR);
10
+   obs_properties_add_bool(props, "compatibility", TEXT_COMPATIBILITY);
11
+   obs_properties_add_bool(props, "capture_cursor", TEXT_CAPTURE_CURSOR);
12
 
13
    EnumDisplayMonitors(NULL, NULL, enum_monitor_props, (LPARAM)monitors);
14
 
15
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/obfuscate.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/obfuscate.c Changed
11
 
1
@@ -1,5 +1,9 @@
2
 #define _CRT_SECURE_NO_WARNINGS
3
+
4
+#ifdef _MSC_VER
5
 #pragma warning(disable : 4152) /* casting func ptr to void */
6
+#endif
7
+
8
 #include <stdbool.h>
9
 #include <windows.h>
10
 #include "obfuscate.h"
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-capture/window-helpers.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-capture/window-helpers.c Changed
10
 
1
@@ -7,8 +7,6 @@
2
 #include "window-helpers.h"
3
 #include "obfuscate.h"
4
 
5
-#define inline __inline
6
-
7
 static inline void encode_dstr(struct dstr *str)
8
 {
9
    dstr_replace(str, "#", "#22");
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/CMakeLists.txt Changed
12
 
1
@@ -50,7 +50,9 @@
2
    ${libdshowcapture_HEADERS})
3
 target_link_libraries(win-dshow
4
    libobs
5
-   strmiids.lib
6
+   strmiids
7
+   ksuser
8
+   wmcodecdspuuid
9
    ${FFMPEG_LIBRARIES})
10
 
11
 install_obs_plugin_with_data(win-dshow data)
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini Changed
14
 
1
@@ -4,7 +4,6 @@
2
 ConfigureCrossbar="تكوين العارضة"
3
 ResFPSType="نوع الأبعاد/FPS"
4
 ResFPSType.Custom="مخصص"
5
-ResFPSType.DevPreferred="الجهاز المفضل"
6
 FPS.Matching="تطابق إخراج FPS"
7
 FPS.Highest="أعلى FPS"
8
 Resolution="الأبعاد"
9
@@ -12,3 +11,4 @@
10
 VideoFormat.Any="أي"
11
 VideoFormat.Unknown="المجهول (%1)"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/bg-BG.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/bg-BG.ini Changed
12
 
1
@@ -2,9 +2,9 @@
2
 Device="Устройство"
3
 ConfigureVideo="Настрой видео"
4
 ResFPSType.Custom="По избор"
5
-ResFPSType.DevPreferred="Предпочитано устройство"
6
 Resolution="Резолюция"
7
 VideoFormat="Видео формат"
8
 VideoFormat.Any="Всичко"
9
 VideoFormat.Unknown="Неизвестно  (%1)"
10
 
11
+
12
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/da-DK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/da-DK.ini Changed
30
 
1
@@ -1,11 +1,15 @@
2
 VideoCaptureDevice="Video Optagelsesenhed"
3
 Device="Enhed"
4
+ColorSpace.Default="Standard"
5
+ColorRange="YUV farveområde"
6
+ColorRange.Partial="Delvis"
7
+ColorRange.Full="Fuld"
8
 ConfigureAudio="Konfigurere lyd"
9
 ConfigureVideo="Konfigurere Video"
10
 ConfigureCrossbar="Konfigurere overligger"
11
 ResFPSType="Opløsning/FPS Type"
12
 ResFPSType.Custom="Brugerdefineret"
13
-ResFPSType.DevPreferred="Fortrukken Enhed"
14
+ResFPSType.DevPreferred="Enhedens standard"
15
 FPS.Matching="Match Udgang FPS"
16
 FPS.Highest="Højeste FPS"
17
 Resolution="Opløsning"
18
@@ -14,4 +18,11 @@
19
 VideoFormat.Unknown="Ukendt (%1)"
20
 UseCustomAudioDevice="Brug brugerdefinerede lydenhed"
21
 AudioDevice="Lydenhed"
22
+Buffering="Buffering"
23
+Buffering.Enable="Slå til"
24
+Buffering.Disable="Slå fra"
25
+Activate="Aktivér"
26
+Deactivate="Deaktivér"
27
+
28
+Bitrate="Bitrate"
29
 
30
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/de-DE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/de-DE.ini Changed
35
 
1
@@ -1,11 +1,16 @@
2
-VideoCaptureDevice="Videogerät"
3
+VideoCaptureDevice="Videoaufnahmegerät"
4
 Device="Gerät"
5
+ColorSpace="YUV-Farbraum"
6
+ColorSpace.Default="Standard"
7
+ColorRange="YUV Farbpalette"
8
+ColorRange.Partial="Teilweise"
9
+ColorRange.Full="Voll"
10
 ConfigureAudio="Audio konfigurieren"
11
 ConfigureVideo="Video konfigurieren"
12
 ConfigureCrossbar="Crossbar konfigurieren"
13
 ResFPSType="Auflösung/FPS Typ"
14
 ResFPSType.Custom="Benutzerdefiniert"
15
-ResFPSType.DevPreferred="Bevorzugte Einstellungen des Geräts benutzen"
16
+ResFPSType.DevPreferred="Gerätestandard"
17
 FPS.Matching="Ausgang FPS benutzen"
18
 FPS.Highest="Höchstmögliche FPS"
19
 Resolution="Auflösung"
20
@@ -14,4 +19,14 @@
21
 VideoFormat.Unknown="Unbekannt (%1)"
22
 UseCustomAudioDevice="Verwende eigenes Audiogerät"
23
 AudioDevice="Audiogerät"
24
+Buffering="Pufferung"
25
+Buffering.AutoDetect="Automatisch erkennen"
26
+Buffering.Enable="Aktivieren"
27
+Buffering.Disable="Deaktivieren"
28
+Activate="Aktivieren"
29
+Deactivate="Deaktivieren"
30
+
31
+Bitrate="Bitrate"
32
+Encoder.C985="AVerMedia C985 Encoder"
33
+Encoder.C353="AVerMedia C353 Encoder"
34
 
35
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/el-GR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/el-GR.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Ρύθμιση Crossbar"
3
 ResFPSType="Τύπος Ανάλυσης/FPS"
4
 ResFPSType.Custom="Προσαρμοσμένο"
5
-ResFPSType.DevPreferred="Προτίμηση Συσκευής"
6
+ResFPSType.DevPreferred="Προεπιλεγμένη Συσκευή"
7
 FPS.Matching="Ταίριασμα FPS Εξόδου"
8
 FPS.Highest="Υψηλότατο FPS"
9
 Resolution="Ανάλυση"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Άγνωστο (%1)"
12
 UseCustomAudioDevice="Χρήση προσαρμοσμένης συσκευής ήχου"
13
 AudioDevice="Συσκευή Ήχου"
14
+Buffering="Γίνεται φόρτωση"
15
+Buffering.AutoDetect="Αυτόματος εντοπισμός"
16
+Buffering.Enable="Ενεργοποίηση"
17
+Buffering.Disable="Απενεργοποίηση"
18
+Activate="Ενεργοποίηση"
19
+Deactivate="Απενεργοποίηση"
20
+
21
+Bitrate="Ρυθμός μετάδοσης bit"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/en-US.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/en-US.ini Changed
21
 
1
@@ -1,6 +1,11 @@
2
 # video capture device text
3
 VideoCaptureDevice="Video Capture Device"
4
 Device="Device"
5
+ColorSpace="YUV Color Space"
6
+ColorSpace.Default="Default"
7
+ColorRange="YUV Color Range"
8
+ColorRange.Partial="Partial"
9
+ColorRange.Full="Full"
10
 ConfigureAudio="Configure Audio"
11
 ConfigureVideo="Configure Video"
12
 ConfigureCrossbar="Configure Crossbar"
13
@@ -24,5 +29,5 @@
14
 
15
 # encoder text
16
 Bitrate="Bitrate"
17
-Encoder.C985="AverMedia C985 Hardware Encoder"
18
-Encoder.C353="AverMedia C353 Hardware Encoder"
19
+Encoder.C985="AVerMedia C985 Encoder"
20
+Encoder.C353="AVerMedia C353 Encoder"
21
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/es-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/es-ES.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Configurar la barra fija"
3
 ResFPSType="Tipo de resolución/FPS"
4
 ResFPSType.Custom="Personalizado"
5
-ResFPSType.DevPreferred="Dispositivo preferido"
6
+ResFPSType.DevPreferred="Dispositivo predeterminado"
7
 FPS.Matching="Emparejar los FPS de salida"
8
 FPS.Highest="FPS máximos"
9
 Resolution="Resolución"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Desconocido (%1)"
12
 UseCustomAudioDevice="Utilizar dispositivo de audio personalizado"
13
 AudioDevice="Dispositivo de audio"
14
+Buffering="Almacenando en buffer"
15
+Buffering.AutoDetect="Autodetectar"
16
+Buffering.Enable="Habilitar"
17
+Buffering.Disable="Deshabilitar"
18
+Activate="Activar"
19
+Deactivate="Desactivar"
20
+
21
+Bitrate="Tasa de bits"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/eu-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/eu-ES.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Itxuratu Zeharbarra"
3
 ResFPSType="Bereizmen/FS-ko Mota"
4
 ResFPSType.Custom="Norberea"
5
-ResFPSType.DevPreferred="Hobetsitako Gailua"
6
+ResFPSType.DevPreferred="Berezko Gailua"
7
 FPS.Matching="Berdindu Irteerako FS-koa"
8
 FPS.Highest="FS-ko Handiena"
9
 Resolution="Bereizmena"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Ezezaguna (%1)"
12
 UseCustomAudioDevice="Erabili norbere audio gailua"
13
 AudioDevice="Audio Gailua"
14
+Buffering="Bufferrereratzen"
15
+Buffering.AutoDetect="Berez-Atzeman"
16
+Buffering.Enable="Gaitu"
17
+Buffering.Disable="Ezgaitu"
18
+Activate="Gaitu"
19
+Deactivate="Desgaitu"
20
+
21
+Bitrate="Bitneurria"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/fi-FI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/fi-FI.ini Changed
14
 
1
@@ -14,4 +14,12 @@
2
 VideoFormat.Unknown="Tuntematon (%1)"
3
 UseCustomAudioDevice="Käytä mukautettua äänilaitetta"
4
 AudioDevice="Äänilaite"
5
+Buffering="Puskurointi"
6
+Buffering.AutoDetect="Automaattinen tunnistus"
7
+Buffering.Enable="Ota käyttöön"
8
+Buffering.Disable="Poista käytöstä"
9
+Activate="Ota käyttöön"
10
+Deactivate="Poista käytöstä"
11
+
12
+Bitrate="Bitrate"
13
 
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/fr-FR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/fr-FR.ini Changed
32
 
1
@@ -1,11 +1,16 @@
2
 VideoCaptureDevice="Périphérique de Capture Vidéo"
3
 Device="Appareil"
4
+ColorSpace="Espace de couleur YUV"
5
+ColorSpace.Default="Par défaut"
6
+ColorRange="Gamme de couleurs YUV"
7
+ColorRange.Partial="Partielle"
8
+ColorRange.Full="Complète"
9
 ConfigureAudio="Configurer l'audio"
10
 ConfigureVideo="Configurer la Vidéo"
11
 ConfigureCrossbar="Configurer la Crossbar"
12
 ResFPSType="Type de Résolution/FPS"
13
 ResFPSType.Custom="Personnalisé"
14
-ResFPSType.DevPreferred="Appareil préféré"
15
+ResFPSType.DevPreferred="Paramètres par défaut du périphérique"
16
 FPS.Matching="Associer les FPS Sortants"
17
 FPS.Highest="FPS Maximum"
18
 Resolution="Résolution"
19
@@ -14,4 +19,12 @@
20
 VideoFormat.Unknown="Inconnu (%1)"
21
 UseCustomAudioDevice="Utiliser un périphérique audio personnalisé"
22
 AudioDevice="Périphérique audio"
23
+Buffering="Mise en mémoire tampon"
24
+Buffering.AutoDetect="Détecter automatiquement"
25
+Buffering.Enable="Activer"
26
+Buffering.Disable="Désactiver"
27
+Activate="Activer"
28
+Deactivate="Désactiver"
29
+
30
+Bitrate="Débit"
31
 
32
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/gl-ES.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/gl-ES.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Configurar a barra fixa"
3
 ResFPSType="Tipo de resolución/FPS"
4
 ResFPSType.Custom="Personalizado"
5
-ResFPSType.DevPreferred="Dispositivo preferido"
6
+ResFPSType.DevPreferred="Dispositivo predefinido"
7
 FPS.Matching="Emparellar os FPS de saída"
8
 FPS.Highest="FPS máximos"
9
 Resolution="Resolución"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Descoñecido (%1)"
12
 UseCustomAudioDevice="Utilizar o dispositivo de audio personalizado"
13
 AudioDevice="Dispositivo de audio"
14
+Buffering="Almacenamento no búfer"
15
+Buffering.AutoDetect="Detección automática"
16
+Buffering.Enable="Activar"
17
+Buffering.Disable="Desactivar"
18
+Activate="Activar"
19
+Deactivate="Desactivar"
20
+
21
+Bitrate="Velocidade de bits"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/hr-HR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/hr-HR.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Podesi crossbar"
3
 ResFPSType="Rezolucija/FPS tip"
4
 ResFPSType.Custom="Prilagođeno"
5
-ResFPSType.DevPreferred="Određeno uređajem"
6
+ResFPSType.DevPreferred="Podrazumevano za uređaj"
7
 FPS.Matching="Prilagodi izlaznom FPS-u"
8
 FPS.Highest="Najviši FPS"
9
 Resolution="Rezolucija"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Nepoznato (%1)"
12
 UseCustomAudioDevice="Koristi specifičan uređaj za zvuk"
13
 AudioDevice="Uređaj za zvuk"
14
+Buffering="Baferovanje"
15
+Buffering.AutoDetect="Automatsko-otkrivanje"
16
+Buffering.Enable="Omogući"
17
+Buffering.Disable="Onemogući"
18
+Activate="Aktiviraj"
19
+Deactivate="Deaktiviraj"
20
+
21
+Bitrate="Bitrate"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Keresztsor Konfigurálása"
3
 ResFPSType="Felbontás/FPS típusa"
4
 ResFPSType.Custom="Egyedi"
5
-ResFPSType.DevPreferred="Preferált Eszköz"
6
+ResFPSType.DevPreferred="Alapértelmezett eszköz"
7
 FPS.Matching="Kimeneti FPS Megfeleltetés"
8
 FPS.Highest="Legmagasabb FPS"
9
 Resolution="Felbontás"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Ismeretlen (%1)"
12
 UseCustomAudioDevice="Egyedi Audioeszköz használata"
13
 AudioDevice="Audió Eszköz"
14
+Buffering="Pufferelés"
15
+Buffering.AutoDetect="Automatikus felismerés"
16
+Buffering.Enable="Engedélyezés"
17
+Buffering.Disable="Letiltás"
18
+Activate="Aktiválás"
19
+Deactivate="Kikapcsolás"
20
+
21
+Bitrate="Bitráta"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/it-IT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/it-IT.ini Changed
14
 
1
@@ -5,7 +5,6 @@
2
 ConfigureCrossbar="Configura la crossbar"
3
 ResFPSType="Tipo risoluzione/FPS"
4
 ResFPSType.Custom="Personalizzato"
5
-ResFPSType.DevPreferred="Dispositivo predefinito"
6
 FPS.Matching="Corrispondenza FPS in uscita"
7
 FPS.Highest="FPS elevati"
8
 Resolution="Risoluzione"
9
@@ -15,3 +14,4 @@
10
 UseCustomAudioDevice="Usa il dispositivo audio personalizzato"
11
 AudioDevice="Dispositivo audio"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/ja-JP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/ja-JP.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="クロスバーを構成"
3
 ResFPSType="解像度/FPS タイプ"
4
 ResFPSType.Custom="カスタム"
5
-ResFPSType.DevPreferred="優先デバイス"
6
+ResFPSType.DevPreferred="デバイスの既定値"
7
 FPS.Matching="出力FPSにあわせる"
8
 FPS.Highest="最高FPS"
9
 Resolution="解像度"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="不明 (%1)"
12
 UseCustomAudioDevice="カスタム音声デバイスを使用する"
13
 AudioDevice="音声デバイス"
14
+Buffering="バッファリング"
15
+Buffering.AutoDetect="自動検出"
16
+Buffering.Enable=" 有効にする"
17
+Buffering.Disable="無効にする"
18
+Activate="有効化"
19
+Deactivate="無効化"
20
+
21
+Bitrate="ビットレート"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/ko-KR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/ko-KR.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="크로스바 설정"
3
 ResFPSType="해상도/FPS 유형"
4
 ResFPSType.Custom="사용자 정의"
5
-ResFPSType.DevPreferred="선호 장치"
6
+ResFPSType.DevPreferred="기본 설정 사용"
7
 FPS.Matching="출력FPS에 맞춤"
8
 FPS.Highest="최고 FPS"
9
 Resolution="해상도"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="알 수 없음 (%1)"
12
 UseCustomAudioDevice="사용자 지정 오디오 장치 사용"
13
 AudioDevice="오디오 장치"
14
+Buffering="버퍼링"
15
+Buffering.AutoDetect="자동-감지"
16
+Buffering.Enable="사용"
17
+Buffering.Disable="사용 안 함"
18
+Activate="활성화"
19
+Deactivate="비활성화"
20
+
21
+Bitrate="품질(비트레이트)"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini Changed
34
 
1
@@ -1,11 +1,16 @@
2
 VideoCaptureDevice="Videoopptaksenhet"
3
 Device="Enhet"
4
+ColorSpace="YUV fargerom"
5
+ColorSpace.Default="Standard"
6
+ColorRange="YUV fargespekter"
7
+ColorRange.Partial="Delvis"
8
+ColorRange.Full="Full"
9
 ConfigureAudio="Konfigurer lyd"
10
 ConfigureVideo="Konfigurer video"
11
 ConfigureCrossbar="Konfigurer bildemikser"
12
 ResFPSType="Oppløsning/bilder per sekund type"
13
 ResFPSType.Custom="Egendefinert"
14
-ResFPSType.DevPreferred="Foretrukket enhet"
15
+ResFPSType.DevPreferred="Enhetsstandard"
16
 FPS.Matching="Match utgangs bilder per sekund"
17
 FPS.Highest="Høyeste antall bilder per sekund"
18
 Resolution="Oppløsning"
19
@@ -14,4 +19,14 @@
20
 VideoFormat.Unknown="Ukjent (%1)"
21
 UseCustomAudioDevice="Bruk egendefinert lydenhet"
22
 AudioDevice="Lydenhet"
23
+Buffering="Bufring"
24
+Buffering.AutoDetect="Automatisk søk"
25
+Buffering.Enable="Aktiver"
26
+Buffering.Disable="Deaktiver"
27
+Activate="Aktiver"
28
+Deactivate="Deaktiver"
29
+
30
+Bitrate="Bitrate"
31
+Encoder.C985="AVerMedia C985 koder"
32
+Encoder.C353="AVerMedia C353 koder"
33
 
34
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/nl-NL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/nl-NL.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Crossbar Instellen"
3
 ResFPSType="Resolutie/FPS Type"
4
 ResFPSType.Custom="Aangepast"
5
-ResFPSType.DevPreferred="Voorkeur van het apparaat"
6
+ResFPSType.DevPreferred="Standaard van apparaat"
7
 FPS.Matching="Gelijk aan Uitvoer-FPS"
8
 FPS.Highest="Hoogste FPS"
9
 Resolution="Resolutie"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Onbekend (%1)"
12
 UseCustomAudioDevice="Gebruik aangepast audioapparaat"
13
 AudioDevice="Audioapparaat"
14
+Buffering="Bufferen"
15
+Buffering.AutoDetect="Automatisch detecteren"
16
+Buffering.Enable="Inschakelen"
17
+Buffering.Disable="Uitschakelen"
18
+Activate="Activeren"
19
+Deactivate="Deactiveren"
20
+
21
+Bitrate="Bitrate"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/pl-PL.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/pl-PL.ini Changed
14
 
1
@@ -5,7 +5,6 @@
2
 ConfigureCrossbar="Konfiguruj wejścia"
3
 ResFPSType="Rozdzielczość / Tryb FPS"
4
 ResFPSType.Custom="Własny"
5
-ResFPSType.DevPreferred="Preferowany przez urządzenie"
6
 FPS.Matching="Dopasuj do wyjściowego FPS"
7
 FPS.Highest="Najwyższy FPS"
8
 Resolution="Rozdzielczość"
9
@@ -15,3 +14,4 @@
10
 UseCustomAudioDevice="Użyj własnego wyjścia audio"
11
 AudioDevice="Urządzenie audio"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini Changed
14
 
1
@@ -5,7 +5,6 @@
2
 ConfigureCrossbar="Configurar Crossbar"
3
 ResFPSType="Tipo de Resolução/FPS"
4
 ResFPSType.Custom="Personalizado"
5
-ResFPSType.DevPreferred="Dispositivo Padrão"
6
 FPS.Matching="Igualar FPS de Saída"
7
 FPS.Highest="Maior FPS possível"
8
 Resolution="Resolução"
9
@@ -15,3 +14,4 @@
10
 UseCustomAudioDevice="Utilizar dispositivo de áudio personalizado"
11
 AudioDevice="Dispositivo de Áudio"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/pt-PT.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/pt-PT.ini Changed
14
 
1
@@ -4,7 +4,6 @@
2
 ConfigureCrossbar="Configurar Crossbar"
3
 ResFPSType="Tipo de Resolução/Quadro"
4
 ResFPSType.Custom="Personalizado"
5
-ResFPSType.DevPreferred="Dispositivo preferido"
6
 FPS.Matching="Igualar Quadros de Saída"
7
 FPS.Highest="Limite de Quadros"
8
 Resolution="Resolução"
9
@@ -12,3 +11,4 @@
10
 VideoFormat.Any="Qualquer"
11
 VideoFormat.Unknown="Desconhecido (%1)"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Configuraţi bara transversală"
3
 ResFPSType="Tip rezoluție/FPS"
4
 ResFPSType.Custom="Personalizat"
5
-ResFPSType.DevPreferred="Dispozitiv Preferat"
6
+ResFPSType.DevPreferred="Dispozitiv implicit"
7
 FPS.Matching="Potrivește FPS ieșire"
8
 FPS.Highest="Cel mai mare FPS"
9
 Resolution="Rezoluţie"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Necunoscut (%1)"
12
 UseCustomAudioDevice="Folosește dispozitivul audio personalizat"
13
 AudioDevice="Dispozitiv audio"
14
+Buffering="Buffering"
15
+Buffering.AutoDetect="Detectare automată"
16
+Buffering.Enable="Activează"
17
+Buffering.Disable="Dezactivează"
18
+Activate="Activează"
19
+Deactivate="Dezactivează"
20
+
21
+Bitrate="Bitrate"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/ru-RU.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/ru-RU.ini Changed
32
 
1
@@ -1,11 +1,16 @@
2
 VideoCaptureDevice="Устройство захвата видео"
3
 Device="Устройство"
4
+ColorSpace="Цветовое пространство YUV"
5
+ColorSpace.Default="По умолчанию"
6
+ColorRange="Цветовой диапазон YUV"
7
+ColorRange.Partial="Частичный"
8
+ColorRange.Full="Полный"
9
 ConfigureAudio="Настроить звук"
10
 ConfigureVideo="Настройка видео"
11
 ConfigureCrossbar="Настройка кроссбара"
12
 ResFPSType="Разрешение/Частота кадров"
13
 ResFPSType.Custom="Пользовательское"
14
-ResFPSType.DevPreferred="Рекомендуемое устройством"
15
+ResFPSType.DevPreferred="Стандартные значения устройства"
16
 FPS.Matching="Согласовать с выходной частотой кадров"
17
 FPS.Highest="Наибольшая частота кадров"
18
 Resolution="Разрешение"
19
@@ -14,4 +19,12 @@
20
 VideoFormat.Unknown="Неизвестный (%1)"
21
 UseCustomAudioDevice="Использовать пользовательское аудиоустройство"
22
 AudioDevice="Аудиоустройство"
23
+Buffering="Буферизация"
24
+Buffering.AutoDetect="Авто-обнаружение"
25
+Buffering.Enable="Включить"
26
+Buffering.Disable="Отключить"
27
+Activate="Активировать"
28
+Deactivate="Деактивировать"
29
+
30
+Bitrate="Битрейт"
31
 
32
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/sk-SK.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/sk-SK.ini Changed
6
 
1
@@ -14,3 +14,4 @@
2
 UseCustomAudioDevice="Použiť vlastné audio zariadenie"
3
 AudioDevice="Audio zariadenie"
4
 
5
+
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini Changed
14
 
1
@@ -5,7 +5,6 @@
2
 ConfigureCrossbar="Konfiguriranje stičišče vratnice in prečke"
3
 ResFPSType="Vrsta Resolucije/FPS"
4
 ResFPSType.Custom="Po meri"
5
-ResFPSType.DevPreferred="Po izbiri naprave"
6
 FPS.Matching="Usklajaj se z Izhodnim FPS"
7
 FPS.Highest="Najvišji FPS"
8
 Resolution="Resolucija"
9
@@ -15,3 +14,4 @@
10
 UseCustomAudioDevice="Uporabi zvočno napravo po meri"
11
 AudioDevice="Zvočna naprava"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/sr-CS.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/sr-CS.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Podesi crossbar"
3
 ResFPSType="Rezolucija/FPS tip"
4
 ResFPSType.Custom="Prilagođeno"
5
-ResFPSType.DevPreferred="Određeno uređajem"
6
+ResFPSType.DevPreferred="Podrazumevano za uređaj"
7
 FPS.Matching="Prilagodi izlaznom FPS-u"
8
 FPS.Highest="Najviši FPS"
9
 Resolution="Rezolucija"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Nepoznato (%1)"
12
 UseCustomAudioDevice="Koristi specifičan uređaj za zvuk"
13
 AudioDevice="Uređaj za zvuk"
14
+Buffering="Baferovanje"
15
+Buffering.AutoDetect="Automatsko-otkrivanje"
16
+Buffering.Enable="Omogući"
17
+Buffering.Disable="Onemogući"
18
+Activate="Aktiviraj"
19
+Deactivate="Deaktiviraj"
20
+
21
+Bitrate="Bitrate"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/sr-SP.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/sr-SP.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Подеси crossbar"
3
 ResFPSType="Резолуција/FPS тип"
4
 ResFPSType.Custom="Прилагођено"
5
-ResFPSType.DevPreferred="Одређено уређајем"
6
+ResFPSType.DevPreferred="Подразумевано за уређај"
7
 FPS.Matching="Прилагоди излазном FPS-у"
8
 FPS.Highest="Највиши FPS"
9
 Resolution="Резолуција"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Непознато (%1)"
12
 UseCustomAudioDevice="Користи специфичан уређај за звук"
13
 AudioDevice="Уређај за звук"
14
+Buffering="Баферовање"
15
+Buffering.AutoDetect="Аутоматско-откривање"
16
+Buffering.Enable="Омогући"
17
+Buffering.Disable="Онемогући"
18
+Activate="Активирај"
19
+Deactivate="Деактивирај"
20
+
21
+Bitrate="Bitrate"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini Changed
23
 
1
@@ -5,7 +5,7 @@
2
 ConfigureCrossbar="Öppna Crossbar"
3
 ResFPSType="Val av upplösning och bildhastighet"
4
 ResFPSType.Custom="Anpassad"
5
-ResFPSType.DevPreferred="Förslag från enhet"
6
+ResFPSType.DevPreferred="Enhetsstandard"
7
 FPS.Matching="Matcha utmatningsbildhastighet"
8
 FPS.Highest="Högsta tillgängliga bildhastighet"
9
 Resolution="Upplösning"
10
@@ -14,4 +14,12 @@
11
 VideoFormat.Unknown="Okänd (%1)"
12
 UseCustomAudioDevice="Använd anpassad ljudenhet"
13
 AudioDevice="Ljudenhet"
14
+Buffering="Buffrar"
15
+Buffering.AutoDetect="Upptäck automatiskt"
16
+Buffering.Enable="Aktivera"
17
+Buffering.Disable="Avaktivera"
18
+Activate="Aktivera"
19
+Deactivate="Inaktivera"
20
+
21
+Bitrate="Bithastighet"
22
 
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/th-TH.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/th-TH.ini Changed
6
 
1
@@ -2,3 +2,4 @@
2
 Resolution="ความละเอียด"
3
 VideoFormat="ฟอร์แมทวีดีโอ"
4
 
5
+
6
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini Changed
14
 
1
@@ -5,7 +5,6 @@
2
 ConfigureCrossbar="Crossbarı Ayarla"
3
 ResFPSType="Çözünürlük/FPS Türü"
4
 ResFPSType.Custom="Özel"
5
-ResFPSType.DevPreferred="Tercih Edilen Aygıt"
6
 FPS.Matching="Çıkış FPS'ini Eşleştir"
7
 FPS.Highest="En Yüksek FPS"
8
 Resolution="Çözünürlük"
9
@@ -15,3 +14,4 @@
10
 UseCustomAudioDevice="Özel ses aygıtını kullan"
11
 AudioDevice="Ses Aygıtı"
12
 
13
+
14
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/zh-CN.ini Added
34
 
1
@@ -0,0 +1,32 @@
2
+VideoCaptureDevice="视频捕获设备"
3
+Device="设备"
4
+ColorSpace="YUV 颜色空间"
5
+ColorSpace.Default="默认"
6
+ColorRange="YUV 颜色范围"
7
+ColorRange.Partial="局部"
8
+ColorRange.Full="全部"
9
+ConfigureAudio="配置音频"
10
+ConfigureVideo="配置视频"
11
+ConfigureCrossbar="配置Crossbar"
12
+ResFPSType="分辨率/帧率 类型"
13
+ResFPSType.Custom="自定义"
14
+ResFPSType.DevPreferred="设备默认"
15
+FPS.Matching="匹配输出帧率"
16
+FPS.Highest="最高帧率"
17
+Resolution="分辨率"
18
+VideoFormat="视频格式"
19
+VideoFormat.Any="任意"
20
+VideoFormat.Unknown="未知(%1)"
21
+UseCustomAudioDevice="使用自定义的音频设备"
22
+AudioDevice="音频设备"
23
+Buffering="正在缓冲"
24
+Buffering.AutoDetect="自动检测"
25
+Buffering.Enable="启用"
26
+Buffering.Disable="停用"
27
+Activate="激活"
28
+Deactivate="取消激活"
29
+
30
+Bitrate="比特率"
31
+Encoder.C985="AVerMedia C985 编码器"
32
+Encoder.C353="AVerMedia C353编码器"
33
+
34
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/data/locale/zh-TW.ini -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/data/locale/zh-TW.ini Changed
14
 
1
@@ -4,7 +4,6 @@
2
 ConfigureCrossbar="設定影像格式"
3
 ResFPSType="解析度/FPS 類型"
4
 ResFPSType.Custom="自訂"
5
-ResFPSType.DevPreferred="裝置建議值"
6
 FPS.Matching="符合輸出 FPS"
7
 FPS.Highest="最大化 FPS"
8
 Resolution="解析度"
9
@@ -12,3 +11,4 @@
10
 VideoFormat.Any="任何格式"
11
 VideoFormat.Unknown="未知 (%1)"
12
 
13
+
14
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/ffmpeg-decode.c -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/ffmpeg-decode.c Changed
23
 
1
@@ -125,11 +125,9 @@
2
    packet.size = (int)size;
3
 
4
    if (!decode->frame) {
5
-       decode->frame = avcodec_alloc_frame();
6
+       decode->frame = av_frame_alloc();
7
        if (!decode->frame)
8
            return -1;
9
-   } else {
10
-       avcodec_get_frame_defaults(decode->frame);
11
    }
12
 
13
    len = avcodec_decode_audio4(decode->decoder, decode->frame, &got_frame,
14
@@ -178,7 +176,7 @@
15
        packet.flags |= AV_PKT_FLAG_KEY;
16
 
17
    if (!decode->frame) {
18
-       decode->frame = avcodec_alloc_frame();
19
+       decode->frame = av_frame_alloc();
20
        if (!decode->frame)
21
            return -1;
22
    }
23
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/ffmpeg-decode.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/ffmpeg-decode.h Changed
19
 
1
@@ -23,7 +23,7 @@
2
 
3
 #include <obs.h>
4
 
5
-#ifdef _WIN32
6
+#ifdef _MSC_VER
7
 #pragma warning(push)
8
 #pragma warning(disable : 4244)
9
 #pragma warning(disable : 4204)
10
@@ -32,7 +32,7 @@
11
 #include <libavcodec/avcodec.h>
12
 #include <libavutil/log.h>
13
 
14
-#ifdef _WIN32
15
+#ifdef _MSC_VER
16
 #pragma warning(pop)
17
 #endif
18
 
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp Changed
10
 
1
@@ -31,7 +31,7 @@
2
 
3
 #define DSHOWCAPTURE_VERSION_MAJOR 0
4
 #define DSHOWCAPTURE_VERSION_MINOR 4
5
-#define DSHOWCAPTURE_VERSION_PATCH 2
6
+#define DSHOWCAPTURE_VERSION_PATCH 3
7
 
8
 #define MAKE_DSHOWCAPTURE_VERSION(major, minor, patch) \
9
        ( (major << 24) | \
10
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/ComPtr.hpp Added
138
 
1
@@ -0,0 +1,136 @@
2
+/*
3
+ * Copyright (c) 2013 Hugh Bailey <obs.jim@gmail.com>
4
+ *
5
+ * Permission to use, copy, modify, and distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+#pragma once
19
+
20
+/* Oh no I have my own com pointer class, the world is ending, how dare you
21
+ * write your own! */
22
+
23
+template<class T> class ComPtr {
24
+
25
+protected:
26
+   T *ptr;
27
+
28
+   inline void Kill()
29
+   {
30
+       if (ptr)
31
+           ptr->Release();
32
+   }
33
+
34
+   inline void Replace(T *p)
35
+   {
36
+       if (ptr != p) {
37
+           if (p)   p->AddRef();
38
+           if (ptr) ptr->Release();
39
+           ptr = p;
40
+       }
41
+   }
42
+
43
+public:
44
+   inline ComPtr() : ptr(NULL)                    {}
45
+   inline ComPtr(T *p) : ptr(p)                   {if (ptr) ptr->AddRef();}
46
+   inline ComPtr(const ComPtr<T> &c) : ptr(c.ptr) {if (ptr) ptr->AddRef();}
47
+   inline ComPtr(ComPtr<T> &&c) : ptr(c.ptr)      {c.ptr = NULL;}
48
+   inline ~ComPtr()                               {Kill();}
49
+
50
+   inline void Clear()
51
+   {
52
+       if (ptr) {
53
+           ptr->Release();
54
+           ptr = NULL;
55
+       }
56
+   }
57
+
58
+   inline ComPtr<T> &operator=(T *p)
59
+   {
60
+       Replace(p);
61
+       return *this;
62
+   }
63
+
64
+   inline ComPtr<T> &operator=(const ComPtr<T> &c)
65
+   {
66
+       Replace(c.ptr);
67
+       return *this;
68
+   }
69
+
70
+   inline ComPtr<T> &operator=(ComPtr<T> &&c)
71
+   {
72
+       if (this != &c) {
73
+           Kill();
74
+           ptr = c.ptr;
75
+           c.ptr = NULL;
76
+       }
77
+
78
+       return *this;
79
+   }
80
+
81
+   inline T *Detach()
82
+   {
83
+       T *out = ptr;
84
+       ptr = nullptr;
85
+       return out;
86
+   }
87
+
88
+   inline void CopyTo(T **out)
89
+   {
90
+       if (out) {
91
+           if (ptr) ptr->AddRef();
92
+           *out = ptr;
93
+       }
94
+   }
95
+
96
+   inline ULONG Release()
97
+   {
98
+       ULONG ref;
99
+
100
+       if (!ptr) return 0;
101
+       ref = ptr->Release();
102
+       ptr = nullptr;
103
+       return ref;
104
+   }
105
+
106
+   inline T **Assign()                {Clear(); return &ptr;}
107
+   inline void Set(T *p)              {Kill(); ptr = p;}
108
+
109
+   inline T *Get() const              {return ptr;}
110
+
111
+   inline T **operator&()             {return Assign();}
112
+
113
+   inline    operator T*() const      {return ptr;}
114
+   inline T *operator->() const       {return ptr;}
115
+
116
+   inline bool operator==(T *p) const {return ptr == p;}
117
+   inline bool operator!=(T *p) const {return ptr != p;}
118
+
119
+   inline bool operator!() const      {return !ptr;}
120
+};
121
+
122
+template<class T> class ComQIPtr : public ComPtr<T> {
123
+
124
+public:
125
+   inline ComQIPtr(IUnknown *unk)
126
+   {
127
+       this->ptr = nullptr;
128
+       unk->QueryInterface(__uuidof(T), (void**)&this->ptr);
129
+   }
130
+
131
+   inline ComPtr<T> &operator=(IUnknown *unk)
132
+   {
133
+       ComPtr<T>::Clear();
134
+       unk->QueryInterface(__uuidof(T), (void**)&this->ptr);
135
+       return *this;
136
+   }
137
+};
138
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/IVideoCaptureFilter.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/IVideoCaptureFilter.h Changed
109
 
1
@@ -86,7 +86,7 @@
2
 =============================================================================*/
3
 
4
 //! Video Capture device type
5
-typedef enum VIDEO_CAPTURE_FILTER_DEVICE_TYPE
6
+enum VIDEO_CAPTURE_FILTER_DEVICE_TYPE
7
 {
8
     VIDEO_CAPTURE_FILTER_DEVICE_TYPE_INVALID                = 0,            //!< Invalid
9
     VIDEO_CAPTURE_FILTER_DEVICE_TYPE_GAME_CAPTURE_HD        = 2,            //!< Game Capture HD   (VID: 0x0fd9 PID: 0x0044, 0x004e, 0x0051)
10
@@ -95,7 +95,7 @@
11
 };
12
 
13
 //! Input device
14
-typedef enum VIDEO_CAPTURE_FILTER_INPUT_DEVICE
15
+enum VIDEO_CAPTURE_FILTER_INPUT_DEVICE
16
 {
17
     VIDEO_CAPTURE_FILTER_INPUT_DEVICE_INVALID               =   0,          //!< Invalid
18
     VIDEO_CAPTURE_FILTER_INPUT_DEVICE_XBOX360               =   1,          //!< Microsoft Xbox 360
19
@@ -110,7 +110,7 @@
20
 };
21
 
22
 //! Video inputs
23
-typedef enum VIDEO_CAPTURE_FILTER_VIDEO_INPUT
24
+enum VIDEO_CAPTURE_FILTER_VIDEO_INPUT
25
 {
26
     VIDEO_CAPTURE_FILTER_VIDEO_INPUT_INVALID                =   0,          //!< Invalid
27
     VIDEO_CAPTURE_FILTER_VIDEO_INPUT_COMPOSITE              =   1,          //!< Composite
28
@@ -120,7 +120,7 @@
29
 };
30
 
31
 //! Video encoder profile
32
-typedef enum VIDEO_CAPTURE_FILTER_VID_ENC_PROFILE
33
+enum VIDEO_CAPTURE_FILTER_VID_ENC_PROFILE
34
 {
35
     VIDEO_CAPTURE_FILTER_VID_ENC_PROFILE_INVALID            = 0x00000000,   //!< Invalid
36
     VIDEO_CAPTURE_FILTER_VID_ENC_PROFILE_240                = 0x00000001,   //!< 320x240
37
@@ -131,7 +131,7 @@
38
 };
39
 
40
 //! Color range
41
-typedef enum VIDEO_CAPTURE_FILTER_COLOR_RANGE
42
+enum VIDEO_CAPTURE_FILTER_COLOR_RANGE
43
 {
44
     VIDEO_CAPTURE_FILTER_COLOR_RANGE_INVALID                =   0,          //!< Invalid
45
     VIDEO_CAPTURE_FILTER_COLOR_RANGE_FULL                   =   1,          //!< 0-255
46
@@ -140,7 +140,7 @@
47
 };
48
 
49
 //! Settings
50
-typedef struct _VIDEO_CAPTURE_FILTER_SETTINGS
51
+struct VIDEO_CAPTURE_FILTER_SETTINGS
52
 {
53
     TCHAR                                deviceName[256];                   //!< Device name (get only)
54
     VIDEO_CAPTURE_FILTER_INPUT_DEVICE    inputDevice;                       //!< Input device (e.g. Xbox360)
55
@@ -156,17 +156,16 @@
56
     int                                  digitalAudioGain;                  //!< Digital audio gain (-60 - 12 dB)
57
     BOOL                                 preserveInputFormat;               //!< Input Format will be preserved (e.g. do not convert interlaced to progressive)
58
     BOOL                                 stretchStandardDefinitionInput;    //!< Stretch SD input to 16:9
59
-}VIDEO_CAPTURE_FILTER_SETTINGS, *PVIDEO_CAPTURE_FILTER_SETTINGS;
60
-typedef const VIDEO_CAPTURE_FILTER_SETTINGS* PCVIDEO_CAPTURE_FILTER_SETTINGS;
61
+};
62
 
63
 //! Interface
64
 DECLARE_INTERFACE_(IElgatoVideoCaptureFilter2, IElgatoVideoCaptureFilter)
65
 {
66
     // Get current settings
67
-    STDMETHOD(GetSettings)(THIS_ PVIDEO_CAPTURE_FILTER_SETTINGS pSettings) PURE;
68
+    STDMETHOD(GetSettings)(THIS_ VIDEO_CAPTURE_FILTER_SETTINGS *pSettings) PURE;
69
 
70
     // Set settings
71
-    STDMETHOD(SetSettings)(THIS_ PCVIDEO_CAPTURE_FILTER_SETTINGS pcSettings) PURE;
72
+    STDMETHOD(SetSettings)(THIS_ const VIDEO_CAPTURE_FILTER_SETTINGS *pcSettings) PURE;
73
 };
74
 
75
 /*=============================================================================
76
@@ -186,7 +185,7 @@
77
 =============================================================================*/
78
 
79
 //! Messages
80
-typedef enum VIDEO_CAPTURE_FILTER_NOTIFICATION
81
+enum VIDEO_CAPTURE_FILTER_NOTIFICATION
82
 {
83
    //! Description: Delay of the device has changed. Call GetDelayMs() to get the new delay.
84
     VIDEO_CAPTURE_FILTER_NOTIFICATION_DEVICE_DELAY_CHANGED              = 110,      //!< Data: none
85
@@ -222,19 +221,18 @@
86
 =============================================================================*/
87
 
88
 //! Extended Settings
89
-typedef struct _VIDEO_CAPTURE_FILTER_SETTINGS_EX
90
+struct VIDEO_CAPTURE_FILTER_SETTINGS_EX
91
 {
92
    VIDEO_CAPTURE_FILTER_SETTINGS       Settings;
93
    BOOL                                enableFullFrameRate;                //!< Enable full frame rate (50/60 fps)
94
    BYTE                                reserved[20 * 1024];
95
-}VIDEO_CAPTURE_FILTER_SETTINGS_EX, *PVIDEO_CAPTURE_FILTER_SETTINGS_EX;
96
-typedef const VIDEO_CAPTURE_FILTER_SETTINGS_EX* PCVIDEO_CAPTURE_FILTER_SETTINGS_EX;
97
+};
98
 
99
 DECLARE_INTERFACE_(IElgatoVideoCaptureFilter5, IElgatoVideoCaptureFilter4)
100
 {
101
    //! Get current settings
102
-   STDMETHOD(GetSettingsEx)(THIS_ PVIDEO_CAPTURE_FILTER_SETTINGS_EX pSettings) PURE;
103
+   STDMETHOD(GetSettingsEx)(THIS_ VIDEO_CAPTURE_FILTER_SETTINGS_EX *pSettings) PURE;
104
 
105
    //! Set settings
106
-   STDMETHOD(SetSettingsEx)(THIS_ PCVIDEO_CAPTURE_FILTER_SETTINGS_EX pcSettings) PURE;
107
+   STDMETHOD(SetSettingsEx)(THIS_ const VIDEO_CAPTURE_FILTER_SETTINGS_EX *pcSettings) PURE;
108
 };
109
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/avermedia-encode.h -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/avermedia-encode.h Changed
73
 
1
@@ -1,32 +1,61 @@
2
-///////////////////////////////////////////////////////////////////////////////
3
-//
4
-// Copyright (c) 2014 AVerMedia Inc.
5
-// All rights reserved.
6
-//
7
-// Description:
8
-// This property is provide to 3rd party AP to use our HW encode function.
9
-//
10
-///////////////////////////////////////////////////////////////////////////////
11
-
12
+/*
13
+ * aver_prophwencode.h  --  This header filer is provide to 3rd party AP
14
+ * to use the HW encode function of AVerMedia.
15
+ *
16
+ * Copyright (C) 2014 AVerMedia TECHNOLOGIES, Inc.
17
+ *
18
+ * Authors: Morris Pan, AVerMedia TECHNOLOGIES, Inc. <morris.pan@avermedia.com>
19
+ *
20
+ * This content is released under the MIT License
21
+ * (http://opensource.org/licenses/MIT).
22
+ *
23
+ */
24
 #pragma once
25
 
26
 static const GUID AVER_HW_ENCODE_PROPERTY =
27
 {0x1bd55918, 0xbaf5, 0x4781, {0x8d, 0x76, 0xe0, 0xa0, 0xa5, 0xe1, 0xd2, 0xb8}};
28
 
29
 enum {
30
+   // @brief   PropertySet Enumeration
31
+   // param    AVER_PARAMETERS          
32
    PROPERTY_HW_ENCODE_PARAMETER           = 0
33
 };
34
 
35
 enum {
36
+   // property to set/get the encode frame rate
37
+   // ulParam1 = Frames per second
38
    AVER_PARAMETER_ENCODE_FRAME_RATE       = 0,
39
+
40
+   // property to set/get the encode bit rate
41
+   // ulParam1 = Bitrate (kb/s)
42
    AVER_PARAMETER_ENCODE_BIT_RATE         = 1,
43
+
44
+   // property to get the output resolution
45
+   // ulParam1 = Resolution width
46
+   // ulParam2 = Resolution height
47
    AVER_PARAMETER_CURRENT_RESOLUTION      = 2,
48
+
49
+   // property to set the output resolution
50
+   // ulParam1 = Resolution width
51
+   // ulParam2 = Resolution height
52
    AVER_PARAMETER_ENCODE_RESOLUTION       = 3,
53
+
54
+   // property to set/get the encode GOP
55
+   // ulParam1 = GOP length
56
    AVER_PARAMETER_ENCODE_GOP              = 4,
57
+
58
+   // property to insert an I frame to the encoded stream
59
    AVER_PARAMETER_INSERT_I_FRAME          = 6
60
 };
61
 
62
 struct AVER_PARAMETERS {
63
+   // @brief   Use the PROPERTY_PARAMETER Property to Get or Set the
64
+   //          Device Parameter.
65
+   //
66
+   // param    ulIndex   Parameter Index (AVER_PARAMETER_*)
67
+   // param    ulParam1  Parameter 1 (if any)
68
+   // param    ulParam2  Parameter 2 (if any)
69
+   // param    ulParam3  Parameter 3 (if any)
70
    ULONG ulIndex;
71
    ULONG ulParam1;
72
    ULONG ulParam2;
73
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/capture-filter.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/capture-filter.cpp Changed
78
 
1
@@ -40,6 +40,10 @@
2
    connectedMediaType->majortype = info.expectedMajorType;
3
 }
4
 
5
+CapturePin::~CapturePin()
6
+{
7
+}
8
+
9
 STDMETHODIMP CapturePin::QueryInterface(REFIID riid, void **ppv)
10
 {
11
    if (riid == IID_IUnknown) {
12
@@ -182,9 +186,13 @@
13
    return NOERROR;
14
 }
15
 
16
+#define CAPTURE_PIN_NAME L"Capture Pin"
17
+
18
 STDMETHODIMP CapturePin::QueryId(LPWSTR *lpId)
19
 {
20
-   *lpId = L"Capture Pin";
21
+   wchar_t *str = (wchar_t*)CoTaskMemAlloc(sizeof(CAPTURE_PIN_NAME));
22
+   memcpy(str, CAPTURE_PIN_NAME, sizeof(CAPTURE_PIN_NAME));
23
+   *lpId = str;
24
    return S_OK;
25
 }
26
 
27
@@ -340,6 +348,7 @@
28
 
29
 public:
30
    inline MiscFlagsHandler() {}
31
+   virtual ~MiscFlagsHandler() {}
32
 
33
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
34
    {
35
@@ -383,6 +392,10 @@
36
 {
37
 }
38
 
39
+CaptureFilter::~CaptureFilter()
40
+{
41
+}
42
+
43
 // IUnknown methods
44
 STDMETHODIMP CaptureFilter::QueryInterface(REFIID riid, void **ppv)
45
 {
46
@@ -528,12 +541,15 @@
47
 // ============================================================================
48
 
49
 CaptureEnumPins::CaptureEnumPins(CaptureFilter *filter_, CaptureEnumPins *pEnum)
50
-   : filter   (filter_),
51
-     refCount (1)
52
+   : filter (filter_)
53
 {
54
    curPin = (pEnum != nullptr) ? pEnum->curPin : 0;
55
 }
56
 
57
+CaptureEnumPins::~CaptureEnumPins()
58
+{
59
+}
60
+
61
 // IUnknown
62
 STDMETHODIMP CaptureEnumPins::QueryInterface(REFIID riid, void **ppv)
63
 {
64
@@ -603,8 +619,11 @@
65
 // ============================================================================
66
 
67
 CaptureEnumMediaTypes::CaptureEnumMediaTypes(CapturePin *pin_)
68
-   : pin      (pin_),
69
-     refCount (1)
70
+   : pin (pin_)
71
+{
72
+}
73
+
74
+CaptureEnumMediaTypes::~CaptureEnumMediaTypes()
75
 {
76
 }
77
 
78
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/capture-filter.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/capture-filter.hpp Changed
68
 
1
@@ -42,7 +42,7 @@
2
    volatile long          refCount;
3
 
4
    PinCaptureInfo         captureInfo;
5
-   CComPtr<IPin>          connectedPin;
6
+   ComPtr<IPin>           connectedPin;
7
    CaptureFilter          *filter;
8
    MediaType              connectedMediaType;
9
    volatile bool          flushing = false;
10
@@ -51,6 +51,7 @@
11
 
12
 public:
13
    CapturePin(CaptureFilter *filter, const PinCaptureInfo &info);
14
+   virtual ~CapturePin();
15
 
16
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
17
    STDMETHODIMP_(ULONG) AddRef();
18
@@ -91,13 +92,14 @@
19
 
20
    volatile long         refCount;
21
    FILTER_STATE          state;
22
-   CComPtr<IFilterGraph> graph;
23
-   CComPtr<CapturePin>   pin;
24
+   ComPtr<IFilterGraph>  graph;
25
+   ComPtr<CapturePin>    pin;
26
 
27
-   CComPtr<IAMFilterMiscFlags> misc;
28
+   ComPtr<IAMFilterMiscFlags> misc;
29
 
30
 public:
31
    CaptureFilter(const PinCaptureInfo &info);
32
+   virtual ~CaptureFilter();
33
 
34
    // IUnknown methods
35
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
36
@@ -126,12 +128,13 @@
37
 };
38
 
39
 class CaptureEnumPins : public IEnumPins {
40
-   volatile long          refCount;
41
-   CComPtr<CaptureFilter> filter;
42
+   volatile long          refCount = 1;
43
+   ComPtr<CaptureFilter>  filter;
44
    UINT                   curPin;
45
 
46
 public:
47
    CaptureEnumPins(CaptureFilter *filter, CaptureEnumPins *pEnum);
48
+   virtual ~CaptureEnumPins();
49
 
50
    // IUnknown
51
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
52
@@ -146,12 +149,13 @@
53
 };
54
 
55
 class CaptureEnumMediaTypes : public IEnumMediaTypes {
56
-   volatile long       refCount;
57
-   CComPtr<CapturePin> pin;
58
+   volatile long       refCount = 1;
59
+   ComPtr<CapturePin>  pin;
60
    UINT                curMT = 0;
61
 
62
 public:
63
    CaptureEnumMediaTypes(CapturePin *pin);
64
+   virtual ~CaptureEnumMediaTypes();
65
 
66
    // IUnknown
67
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
68
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/device.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/device.cpp Changed
124
 
1
@@ -209,7 +209,7 @@
2
 bool HDevice::SetupExceptionVideoCapture(IBaseFilter *filter,
3
        VideoConfig &config)
4
 {
5
-   CComPtr<IPin> pin;
6
+   ComPtr<IPin> pin;
7
 
8
    if (GetPinByName(filter, PINDIR_OUTPUT, L"656", &pin))
9
        return SetupEncodedVideoCapture(filter, config, HD_PVR2);
10
@@ -222,7 +222,7 @@
11
 
12
 static bool GetPinMediaType(IPin *pin, MediaType &mt)
13
 {
14
-   CComPtr<IEnumMediaTypes> mediaTypes;
15
+   ComPtr<IEnumMediaTypes> mediaTypes;
16
 
17
    if (SUCCEEDED(pin->EnumMediaTypes(&mediaTypes))) {
18
        MediaTypePtr curMT;
19
@@ -241,7 +241,7 @@
20
 
21
 bool HDevice::SetupVideoCapture(IBaseFilter *filter, VideoConfig &config)
22
 {
23
-   CComPtr<IPin> pin;
24
+   ComPtr<IPin>  pin;
25
    HRESULT       hr;
26
    bool          success;
27
 
28
@@ -262,7 +262,7 @@
29
        }
30
    }
31
 
32
-   CComQIPtr<IAMStreamConfig> pinConfig(pin);
33
+   ComQIPtr<IAMStreamConfig> pinConfig(pin);
34
    if (pinConfig == NULL) {
35
        Error(L"Could not get IAMStreamConfig for device");
36
        return false;
37
@@ -328,7 +328,7 @@
38
 
39
 bool HDevice::SetVideoConfig(VideoConfig *config)
40
 {
41
-   CComPtr<IBaseFilter> filter;
42
+   ComPtr<IBaseFilter> filter;
43
 
44
    if (!EnsureInitialized(L"SetVideoConfig") ||
45
        !EnsureInactive(L"SetVideoConfig"))
46
@@ -372,7 +372,7 @@
47
 
48
 bool HDevice::SetupExceptionAudioCapture(IPin *pin)
49
 {
50
-   CComPtr<IEnumMediaTypes> enumMediaTypes;
51
+   ComPtr<IEnumMediaTypes>  enumMediaTypes;
52
    ULONG                    count = 0;
53
    HRESULT                  hr;
54
    MediaTypePtr             mt;
55
@@ -397,7 +397,7 @@
56
 
57
 bool HDevice::SetupAudioCapture(IBaseFilter *filter, AudioConfig &config)
58
 {
59
-   CComPtr<IPin> pin;
60
+   ComPtr<IPin>  pin;
61
    MediaTypePtr  defaultMT;
62
    bool          success;
63
    HRESULT       hr;
64
@@ -409,7 +409,7 @@
65
        return false;
66
    }
67
 
68
-   CComQIPtr<IAMStreamConfig> pinConfig(pin);
69
+   ComQIPtr<IAMStreamConfig> pinConfig(pin);
70
 
71
    if (config.useDefaultConfig) {
72
        MediaTypePtr defaultMT;
73
@@ -458,7 +458,7 @@
74
 
75
 bool HDevice::SetAudioConfig(AudioConfig *config)
76
 {
77
-   CComPtr<IBaseFilter> filter;
78
+   ComPtr<IBaseFilter> filter;
79
 
80
    if (!EnsureInitialized(L"SetAudioConfig") ||
81
        !EnsureInactive(L"SetAudioConfig"))
82
@@ -493,8 +493,8 @@
83
                config->name.c_str(), config->path.c_str(),
84
                &filter);
85
        if (!success) {
86
-           Error(L"Audio device '%s': %s not found", config->name,
87
-                   config->path);
88
+           Error(L"Audio device '%s': %s not found", config->name.c_str(),
89
+                   config->path.c_str());
90
            return false;
91
        }
92
    }
93
@@ -534,7 +534,7 @@
94
        IBaseFilter *filter, CaptureFilter *capture)
95
 {
96
    HRESULT hr;
97
-   CComPtr<IPin> filterPin;
98
+   ComPtr<IPin> filterPin;
99
 
100
    if (!EnsureInitialized(L"HDevice::ConnectPins") ||
101
        !EnsureInactive(L"HDevice::ConnectPins"))
102
@@ -614,7 +614,7 @@
103
 
104
 void HDevice::DisconnectFilters()
105
 {
106
-   CComPtr<IEnumFilters> filterEnum;
107
+   ComPtr<IEnumFilters>  filterEnum;
108
    HRESULT               hr;
109
 
110
    if (!graph)
111
@@ -624,11 +624,10 @@
112
    if (FAILED(hr))
113
        return;
114
 
115
-   CComPtr<IBaseFilter> filter;
116
+   ComPtr<IBaseFilter> filter;
117
    while (filterEnum->Next(1, &filter, nullptr) == S_OK) {
118
        graph->RemoveFilter(filter);
119
        filterEnum->Reset();
120
-       filter.Release();
121
    }
122
 }
123
 
124
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/device.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/device.hpp Changed
26
 
1
@@ -47,15 +47,15 @@
2
 };
3
 
4
 struct HDevice {
5
-   CComPtr<IGraphBuilder>         graph;
6
-   CComPtr<ICaptureGraphBuilder2> builder;
7
-   CComPtr<IMediaControl>         control;
8
-
9
-   CComPtr<IBaseFilter>           videoFilter;
10
-   CComPtr<IBaseFilter>           audioFilter;
11
-   CComPtr<CaptureFilter>         videoCapture;
12
-   CComPtr<CaptureFilter>         audioCapture;
13
-   CComPtr<IBaseFilter>           rocketEncoder;
14
+   ComPtr<IGraphBuilder>          graph;
15
+   ComPtr<ICaptureGraphBuilder2>  builder;
16
+   ComPtr<IMediaControl>          control;
17
+
18
+   ComPtr<IBaseFilter>            videoFilter;
19
+   ComPtr<IBaseFilter>            audioFilter;
20
+   ComPtr<CaptureFilter>          videoCapture;
21
+   ComPtr<CaptureFilter>          audioCapture;
22
+   ComPtr<IBaseFilter>            rocketEncoder;
23
    MediaType                      videoMediaType;
24
    MediaType                      audioMediaType;
25
    VideoConfig                    videoConfig;
26
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-base.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-base.cpp Changed
201
 
1
@@ -33,9 +33,9 @@
2
 bool CreateFilterGraph(IGraphBuilder **pgraph, ICaptureGraphBuilder2 **pbuilder,
3
        IMediaControl **pcontrol)
4
 {
5
-   CComPtr<IGraphBuilder> graph;
6
-   CComPtr<ICaptureGraphBuilder2> builder;
7
-   CComPtr<IMediaControl> control;
8
+   ComPtr<IGraphBuilder> graph;
9
+   ComPtr<ICaptureGraphBuilder2> builder;
10
+   ComPtr<IMediaControl> control;
11
    HRESULT hr;
12
 
13
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
14
@@ -73,8 +73,8 @@
15
 
16
 void LogFilters(IGraphBuilder *graph)
17
 {
18
-   CComPtr<IEnumFilters> filterEnum;
19
-   CComPtr<IBaseFilter>  filter;
20
+   ComPtr<IEnumFilters> filterEnum;
21
+   ComPtr<IBaseFilter>  filter;
22
    HRESULT hr;
23
 
24
    hr = graph->EnumFilters(&filterEnum);
25
@@ -93,13 +93,11 @@
26
 
27
            Debug(L"\t%s", filterInfo.achName);
28
        }
29
-
30
-       filter.Release();
31
    }
32
 }
33
 
34
 struct DeviceFilterCallbackInfo {
35
-   CComPtr<IBaseFilter> filter;
36
+   ComPtr<IBaseFilter>  filter;
37
    const wchar_t        *name;
38
    const wchar_t        *path;
39
 };
40
@@ -141,7 +139,7 @@
41
 static bool PinConfigHasMajorType(IPin *pin, const GUID &type)
42
 {
43
    HRESULT hr;
44
-   CComPtr<IAMStreamConfig> config;
45
+   ComPtr<IAMStreamConfig> config;
46
    int count, size;
47
 
48
    hr = pin->QueryInterface(IID_IAMStreamConfig, (void**)&config);
49
@@ -170,7 +168,7 @@
50
 {
51
    HRESULT hr;
52
    MediaTypePtr mt;
53
-   CComPtr<IEnumMediaTypes> mediaEnum;
54
+   ComPtr<IEnumMediaTypes> mediaEnum;
55
 
56
    /* first, check the config caps. */
57
    if (PinConfigHasMajorType(pin, type))
58
@@ -202,7 +200,7 @@
59
    if (!pin)
60
        return E_POINTER;
61
 
62
-   CComQIPtr<IKsPropertySet> propertySet(pin);
63
+   ComQIPtr<IKsPropertySet>  propertySet(pin);
64
    DWORD                     size;
65
 
66
    if (propertySet == NULL)
67
@@ -258,8 +256,8 @@
68
 bool GetFilterPin(IBaseFilter *filter, const GUID &type, const GUID &category,
69
        PIN_DIRECTION dir, IPin **pin)
70
 {
71
-   CComPtr<IPin>      curPin;
72
-   CComPtr<IEnumPins> pinsEnum;
73
+   ComPtr<IPin>       curPin;
74
+   ComPtr<IEnumPins>  pinsEnum;
75
    ULONG              num;
76
 
77
    if (!filter)
78
@@ -274,8 +272,6 @@
79
            (*pin)->AddRef();
80
            return true;
81
        }
82
-
83
-       curPin.Release();
84
    }
85
 
86
    return false;
87
@@ -284,8 +280,8 @@
88
 bool GetPinByName(IBaseFilter *filter, PIN_DIRECTION dir, const wchar_t *name,
89
        IPin **pin)
90
 {
91
-   CComPtr<IPin>      curPin;
92
-   CComPtr<IEnumPins> pinsEnum;
93
+   ComPtr<IPin>       curPin;
94
+   ComPtr<IEnumPins>  pinsEnum;
95
    ULONG              num;
96
 
97
    if (!filter)
98
@@ -300,8 +296,6 @@
99
            *pin = curPin.Detach();
100
            return true;
101
        }
102
-
103
-       curPin.Release();
104
    }
105
 
106
    return false;
107
@@ -309,8 +303,8 @@
108
 
109
 bool GetPinByMedium(IBaseFilter *filter, REGPINMEDIUM &medium, IPin **pin)
110
 {
111
-   CComPtr<IPin>      curPin;
112
-   CComPtr<IEnumPins> pinsEnum;
113
+   ComPtr<IPin>       curPin;
114
+   ComPtr<IEnumPins>  pinsEnum;
115
    ULONG              num;
116
 
117
    if (!filter)
118
@@ -326,8 +320,6 @@
119
            *pin = curPin.Detach();
120
            return true;
121
        }
122
-
123
-       curPin.Release();
124
    }
125
 
126
    return false;
127
@@ -336,13 +328,13 @@
128
 static bool GetFilterByMediumFromMoniker(IMoniker *moniker,
129
        REGPINMEDIUM &medium, IBaseFilter **filter)
130
 {
131
-   CComPtr<IBaseFilter> curFilter;
132
+   ComPtr<IBaseFilter>  curFilter;
133
    HRESULT              hr;
134
 
135
    hr = moniker->BindToObject(nullptr, nullptr, IID_IBaseFilter,
136
            (void**)&curFilter);
137
    if (SUCCEEDED(hr)) {
138
-       CComPtr<IPin> pin;
139
+       ComPtr<IPin> pin;
140
        if (GetPinByMedium(curFilter, medium, &pin)) {
141
            *filter = curFilter.Detach();
142
            return true;
143
@@ -358,9 +350,9 @@
144
 bool GetFilterByMedium(const CLSID &id, REGPINMEDIUM &medium,
145
        IBaseFilter **filter)
146
 {
147
-   CComPtr<ICreateDevEnum> deviceEnum;
148
-   CComPtr<IEnumMoniker>   enumMoniker;
149
-   CComPtr<IMoniker>       moniker;
150
+   ComPtr<ICreateDevEnum>  deviceEnum;
151
+   ComPtr<IEnumMoniker>    enumMoniker;
152
+   ComPtr<IMoniker>        moniker;
153
    DWORD                   count = 0;
154
    HRESULT                 hr;
155
 
156
@@ -385,8 +377,6 @@
157
    while (enumMoniker->Next(1, &moniker, &count) == S_OK) {
158
        if (GetFilterByMediumFromMoniker(moniker, medium, filter))
159
            return true;
160
-
161
-       moniker.Release();
162
    }
163
 
164
    return false;
165
@@ -394,7 +384,7 @@
166
 
167
 bool GetPinMedium(IPin *pin, REGPINMEDIUM &medium)
168
 {
169
-   CComQIPtr<IKsPin>             ksPin(pin);
170
+   ComQIPtr<IKsPin>              ksPin(pin);
171
    CoTaskMemPtr<KSMULTIPLE_ITEM> items;
172
 
173
    if (!ksPin)
174
@@ -418,15 +408,15 @@
175
 
176
 static inline bool PinIsConnected(IPin *pin)
177
 {
178
-   CComPtr<IPin> connectedPin;
179
+   ComPtr<IPin> connectedPin;
180
    return SUCCEEDED(pin->ConnectedTo(&connectedPin));
181
 }
182
 
183
 static bool DirectConnectOutputPin(IFilterGraph *graph, IPin *pin,
184
        IBaseFilter *filterIn)
185
 {
186
-   CComPtr<IPin>      curPin;
187
-   CComPtr<IEnumPins> pinsEnum;
188
+   ComPtr<IPin>       curPin;
189
+   ComPtr<IEnumPins>  pinsEnum;
190
    ULONG              num;
191
 
192
    if (!graph || !filterIn || !pin)
193
@@ -441,8 +431,6 @@
194
            if (graph->ConnectDirect(pin, curPin, nullptr) == S_OK)
195
                return true;
196
        }
197
-
198
-       curPin.Release();
199
    }
200
 
201
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-base.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-base.hpp Changed
17
 
1
@@ -22,7 +22,6 @@
2
 #define WIN32_MEAN_AND_LEAN
3
 #define __STREAMS__
4
 #include <windows.h>
5
-#include <atlbase.h>
6
 #include <dshow.h>
7
 #include <ks.h>
8
 #include <ksmedia.h>
9
@@ -30,6 +29,7 @@
10
 #include <Amaudio.h>
11
 #include <Dvdmedia.h>
12
 
13
+#include "ComPtr.hpp"
14
 #include "CoTaskMemPtr.hpp"
15
 
16
 #include <string>
17
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-demux.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-demux.cpp Changed
59
 
1
@@ -43,14 +43,14 @@
2
        long width, long height, long long frameTime,
3
        VideoFormat format)
4
 {
5
-   CComQIPtr<IMpeg2Demultiplexer> demuxer(demuxFilter);
6
+   ComQIPtr<IMpeg2Demultiplexer> demuxer(demuxFilter);
7
    if (!demuxer) {
8
        Warning(L"CreateDemuxVideoPin: Failed to get "
9
                L"IMpeg2Demultiplexer from filter");
10
        return false;
11
    }
12
 
13
-   CComPtr<IPin> pin;
14
+   ComPtr<IPin>  pin;
15
    HRESULT       hr;
16
 
17
    VIDEOINFOHEADER *vih           = mt.AllocFormat<VIDEOINFOHEADER>();
18
@@ -72,7 +72,10 @@
19
    mt->formattype           = FORMAT_VideoInfo;
20
    mt->bTemporalCompression = true;
21
 
22
-   hr = demuxer->CreateOutputPin(mt, DEMUX_VIDEO_PIN, &pin);
23
+   wchar_t *name = (wchar_t*)CoTaskMemAlloc(sizeof(DEMUX_VIDEO_PIN));
24
+   memcpy(name, DEMUX_VIDEO_PIN, sizeof(DEMUX_VIDEO_PIN));
25
+
26
+   hr = demuxer->CreateOutputPin(mt, name, &pin);
27
    if (FAILED(hr)) {
28
        WarningHR(L"CreateDemuxVideoPin: Failed to create video pin "
29
                  L"on demuxer", hr);
30
@@ -110,14 +113,14 @@
31
        DWORD samplesPerSec, WORD bitsPerSample, WORD channels,
32
        AudioFormat format)
33
 {
34
-   CComQIPtr<IMpeg2Demultiplexer> demuxer(demuxFilter);
35
+   ComQIPtr<IMpeg2Demultiplexer> demuxer(demuxFilter);
36
    if (!demuxer) {
37
        Warning(L"CreateDemuxAudioPin: Failed to get "
38
                L"IMpeg2Demultiplexer from filter");
39
        return false;
40
    }
41
 
42
-   CComPtr<IPin> pin;
43
+   ComPtr<IPin>  pin;
44
    HRESULT       hr;
45
 
46
    WAVEFORMATEX *wfex   = mt.AllocFormat<WAVEFORMATEX>();
47
@@ -136,7 +139,10 @@
48
    mt->formattype           = FORMAT_WaveFormatEx;
49
    mt->bTemporalCompression = true;
50
 
51
-   hr = demuxer->CreateOutputPin(mt, DEMUX_AUDIO_PIN, &pin);
52
+   wchar_t *name = (wchar_t*)CoTaskMemAlloc(sizeof(DEMUX_AUDIO_PIN));
53
+   memcpy(name, DEMUX_AUDIO_PIN, sizeof(DEMUX_AUDIO_PIN));
54
+
55
+   hr = demuxer->CreateOutputPin(mt, name, &pin);
56
    if (FAILED(hr)) {
57
        WarningHR(L"CreateDemuxAudioPin: Failed to create audio pin "
58
                  L"on demuxer", hr);
59
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-encoded-device.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-encoded-device.cpp Changed
43
 
1
@@ -31,8 +31,8 @@
2
        IBaseFilter **crossbar, IBaseFilter **encoder,
3
        IBaseFilter **demuxer)
4
 {
5
-   CComPtr<IPin> inputPin;
6
-   CComPtr<IPin> outputPin;
7
+   ComPtr<IPin>  inputPin;
8
+   ComPtr<IPin>  outputPin;
9
    REGPINMEDIUM  inMedium;
10
    REGPINMEDIUM  outMedium;
11
    bool          hasOutMedium;
12
@@ -109,7 +109,7 @@
13
 
14
 static inline bool MapPacketIDs(IBaseFilter *demuxer, ULONG video, ULONG audio)
15
 {
16
-   CComPtr<IPin> videoPin, audioPin;
17
+   ComPtr<IPin>  videoPin, audioPin;
18
    HRESULT       hr;
19
 
20
    if (!GetPinByName(demuxer, PINDIR_OUTPUT, DEMUX_VIDEO_PIN, &videoPin)) {
21
@@ -174,7 +174,7 @@
22
    RocketInstStruct   rocketInstance   = {};
23
    RocketPropStruct   rocketProperty   = {};
24
 
25
-   CComQIPtr<IKsPropertySet> propertySet(encoder);
26
+   ComQIPtr<IKsPropertySet> propertySet(encoder);
27
    if (!propertySet)
28
        return false;
29
 
30
@@ -194,9 +194,9 @@
31
            VideoConfig &config,
32
            const EncodedDevice &info)
33
 {
34
-   CComPtr<IBaseFilter> crossbar;
35
-   CComPtr<IBaseFilter> encoder;
36
-   CComPtr<IBaseFilter> demuxer;
37
+   ComPtr<IBaseFilter>  crossbar;
38
+   ComPtr<IBaseFilter>  encoder;
39
+   ComPtr<IBaseFilter>  demuxer;
40
    MediaType            mtVideo;
41
    MediaType            mtAudio;
42
 
43
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-enum.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-enum.cpp Changed
108
 
1
@@ -36,7 +36,7 @@
2
 
3
 static void EnumElgatoCaps(IPin *pin, EnumCapsCallback callback, void *param)
4
 {
5
-   CComPtr<IEnumMediaTypes> mediaTypes;
6
+   ComPtr<IEnumMediaTypes> mediaTypes;
7
 
8
    if (SUCCEEDED(pin->EnumMediaTypes(&mediaTypes))) {
9
        MediaTypePtr mt;
10
@@ -52,7 +52,7 @@
11
 static bool EnumPinCaps(IPin *pin, EnumCapsCallback callback, void *param)
12
 {
13
    HRESULT hr;
14
-   CComQIPtr<IAMStreamConfig> config(pin);
15
+   ComQIPtr<IAMStreamConfig> config(pin);
16
    int count, size;
17
 
18
    if (config == NULL)
19
@@ -152,6 +152,9 @@
20
    long long   bestVal;
21
    bool        found;
22
 
23
+   ClosestVideoData &operator=(ClosestVideoData const&) = delete;
24
+   ClosestVideoData &operator=(ClosestVideoData&&) = delete;
25
+
26
    inline ClosestVideoData(VideoConfig &config, MediaType &mt)
27
        : config     (config),
28
          mt         (mt),
29
@@ -236,7 +239,7 @@
30
 bool GetClosestVideoMediaType(IBaseFilter *filter, VideoConfig &config,
31
        MediaType &mt)
32
 {
33
-   CComPtr<IPin>    pin;
34
+   ComPtr<IPin>     pin;
35
    ClosestVideoData data(config, mt);
36
    bool             success;
37
 
38
@@ -263,6 +266,9 @@
39
    int         bestVal;
40
    bool        found;
41
 
42
+   ClosestAudioData &operator=(ClosestAudioData const&) = delete;
43
+   ClosestAudioData &operator=(ClosestAudioData&&) = delete;
44
+
45
    inline ClosestAudioData(AudioConfig &config, MediaType &mt)
46
        : config     (config),
47
          mt         (mt),
48
@@ -274,7 +280,7 @@
49
 static bool ClosestAudioMTCallback(ClosestAudioData &data,
50
        const AM_MEDIA_TYPE &mt, const BYTE *capData)
51
 {
52
-   AudioInfo info;
53
+   AudioInfo info = {};
54
 
55
    if (mt.formattype == FORMAT_WaveFormatEx)
56
        Get_FORMAT_WaveFormatEx_Data(info, mt, capData);
57
@@ -338,7 +344,7 @@
58
 bool GetClosestAudioMediaType(IBaseFilter *filter, AudioConfig &config,
59
        MediaType &mt)
60
 {
61
-   CComPtr<IPin>    pin;
62
+   ComPtr<IPin>     pin;
63
    ClosestAudioData data(config, mt);
64
    bool             success;
65
 
66
@@ -397,8 +403,8 @@
67
 static bool EnumDevice(IMoniker *deviceInfo, EnumDeviceCallback callback,
68
        void *param)
69
 {
70
-   CComPtr<IPropertyBag> propertyData;
71
-   CComPtr<IBaseFilter>  filter;
72
+   ComPtr<IPropertyBag> propertyData;
73
+   ComPtr<IBaseFilter>  filter;
74
    HRESULT hr;
75
 
76
    hr = deviceInfo->BindToStorage(0, 0, IID_IPropertyBag,
77
@@ -430,7 +436,7 @@
78
 
79
 static bool EnumExceptionVideoDevices(EnumDeviceCallback callback, void *param)
80
 {
81
-   CComPtr<IBaseFilter> filter;
82
+   ComPtr<IBaseFilter>  filter;
83
    HRESULT              hr;
84
 
85
    hr = CoCreateInstance(CLSID_ElgatoVideoCaptureFilter, nullptr,
86
@@ -446,9 +452,9 @@
87
 
88
 bool EnumDevices(const GUID &type, EnumDeviceCallback callback, void *param)
89
 {
90
-   CComPtr<ICreateDevEnum> deviceEnum;
91
-   CComPtr<IEnumMoniker>   enumMoniker;
92
-   CComPtr<IMoniker>       deviceInfo;
93
+   ComPtr<ICreateDevEnum>  deviceEnum;
94
+   ComPtr<IEnumMoniker>    enumMoniker;
95
+   ComPtr<IMoniker>        deviceInfo;
96
    HRESULT                 hr;
97
    DWORD                   count = 0;
98
 
99
@@ -471,8 +477,6 @@
100
        while (enumMoniker->Next(1, &deviceInfo, &count) == S_OK) {
101
            if (!EnumDevice(deviceInfo, callback, param))
102
                return true;
103
-
104
-           deviceInfo.Release();
105
        }
106
    }
107
 
108
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-formats.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshow-formats.cpp Changed
19
 
1
@@ -20,6 +20,8 @@
2
 #include "dshow-formats.hpp"
3
 #include "dshow-media-type.hpp"
4
 
5
+#ifndef __MINGW32__
6
+
7
 const GUID MEDIASUBTYPE_RAW_AAC1 =
8
 {0x000000FF, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
9
 
10
@@ -29,6 +31,8 @@
11
 const GUID MEDIASUBTYPE_DVM =
12
 {0x00002000, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
13
 
14
+#endif
15
+
16
 namespace DShow {
17
 
18
 static bool GetFourCCVFormat(DWORD fourCC, VideoFormat &format)
19
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/dshowcapture.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/dshowcapture.cpp Changed
59
 
1
@@ -125,7 +125,7 @@
2
    if (!propertyObject)
3
        return;
4
 
5
-   CComQIPtr<ISpecifyPropertyPages> pages(propertyObject);
6
+   ComQIPtr<ISpecifyPropertyPages> pages(propertyObject);
7
    CAUUID cauuid;
8
 
9
    if (pages != NULL) {
10
@@ -141,7 +141,7 @@
11
 
12
 void Device::OpenDialog(void *hwnd, DialogType type) const
13
 {
14
-   CComPtr<IUnknown> ptr;
15
+   ComPtr<IUnknown>  ptr;
16
    HRESULT           hr;
17
 
18
    if (type == DialogType::ConfigVideo) {
19
@@ -157,8 +157,8 @@
20
        }
21
 
22
        if (ptr != NULL && type == DialogType::ConfigCrossbar2) {
23
-           CComQIPtr<IAMCrossbar> xbar(ptr);
24
-           CComQIPtr<IBaseFilter> filter(xbar);
25
+           ComQIPtr<IAMCrossbar> xbar(ptr);
26
+           ComQIPtr<IBaseFilter> filter(xbar);
27
 
28
            hr = context->builder->FindInterface(
29
                    &LOOK_UPSTREAM_ONLY,
30
@@ -208,7 +208,7 @@
31
        const wchar_t *deviceName,
32
        const wchar_t *devicePath)
33
 {
34
-   CComPtr<IPin> pin;
35
+   ComPtr<IPin> pin;
36
 
37
    if (GetPinByName(filter, PINDIR_OUTPUT, L"656", &pin))
38
        EnumEncodedVideo(devices, deviceName, devicePath, HD_PVR2);
39
@@ -222,8 +222,8 @@
40
        const wchar_t *deviceName,
41
        const wchar_t *devicePath)
42
 {
43
-   CComPtr<IPin> pin;
44
-   CComPtr<IPin> audioPin;
45
+   ComPtr<IPin>  pin;
46
+   ComPtr<IPin>  audioPin;
47
    VideoDevice   info;
48
 
49
    if (wcsstr(deviceName, L"Hauppauge HD PVR Capture") != nullptr) {
50
@@ -269,7 +269,7 @@
51
        const wchar_t *deviceName,
52
        const wchar_t *devicePath)
53
 {
54
-   CComPtr<IPin> pin;
55
+   ComPtr<IPin>  pin;
56
    AudioDevice   info;
57
 
58
    bool success = GetFilterPin(filter, MEDIATYPE_Audio,
59
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/encoder.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/encoder.cpp Changed
78
 
1
@@ -30,7 +30,7 @@
2
 
3
 HVideoEncoder::~HVideoEncoder()
4
 {
5
-   CComPtr<IEnumFilters> filterEnum;
6
+   ComPtr<IEnumFilters> filterEnum;
7
    IBaseFilter *filter;
8
    HRESULT hr;
9
 
10
@@ -54,10 +54,10 @@
11
 
12
 bool HVideoEncoder::ConnectFilters()
13
 {
14
-   CComPtr<IPin> deviceIn;
15
-   CComPtr<IPin> deviceOut;
16
-   CComPtr<IPin> encoderIn;
17
-   CComPtr<IPin> encoderOut;
18
+   ComPtr<IPin> deviceIn;
19
+   ComPtr<IPin> deviceOut;
20
+   ComPtr<IPin> encoderIn;
21
+   ComPtr<IPin> encoderOut;
22
    bool success;
23
    HRESULT hr;
24
 
25
@@ -110,7 +110,7 @@
26
 
27
 static bool GetPinFirstMediaType(IPin *pin, AM_MEDIA_TYPE **mt)
28
 {
29
-   CComPtr<IEnumMediaTypes>       mediaEnum;
30
+   ComPtr<IEnumMediaTypes>        mediaEnum;
31
    HRESULT                        hr;
32
    ULONG                          fetched;
33
 
34
@@ -130,8 +130,8 @@
35
 
36
 bool HVideoEncoder::SetupCrossbar()
37
 {
38
-   CComPtr<IBaseFilter> crossbar;
39
-   CComPtr<IPin> pin;
40
+   ComPtr<IBaseFilter> crossbar;
41
+   ComPtr<IPin> pin;
42
    REGPINMEDIUM medium;
43
 
44
    /* C353 has no crossbar */
45
@@ -199,9 +199,9 @@
46
 
47
 bool HVideoEncoder::SetupEncoder(IBaseFilter *filter)
48
 {
49
-   CComPtr<IBaseFilter>           deviceFilter;
50
-   CComPtr<IPin>                  inputPin;
51
-   CComPtr<IPin>                  outputPin;
52
+   ComPtr<IBaseFilter>            deviceFilter;
53
+   ComPtr<IPin>                   inputPin;
54
+   ComPtr<IPin>                   outputPin;
55
    REGPINMEDIUM                   medium;
56
    MediaTypePtr                   mtRaw;
57
    MediaTypePtr                   mtEncoded;
58
@@ -296,7 +296,7 @@
59
 {
60
    HRESULT hr;
61
 
62
-   CComQIPtr<IKsPropertySet> propertySet(encoder);
63
+   ComQIPtr<IKsPropertySet> propertySet(encoder);
64
    if (!propertySet) {
65
        Warning(L"Could not get IKsPropertySet for encoder");
66
        return false;
67
@@ -350,8 +350,8 @@
68
 
69
 bool HVideoEncoder::SetConfig(VideoEncoderConfig &config)
70
 {
71
-   CComPtr<IBaseFilter> filter;
72
-   CComPtr<IBaseFilter> crossbar;
73
+   ComPtr<IBaseFilter> filter;
74
+   ComPtr<IBaseFilter> crossbar;
75
 
76
    if (config.name.empty() && config.path.empty()) {
77
        Warning(L"No video encoder name or path specified");
78
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/encoder.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/encoder.hpp Changed
24
 
1
@@ -44,14 +44,14 @@
2
 namespace DShow {
3
 
4
 struct HVideoEncoder {
5
-   CComPtr<IGraphBuilder>         graph;
6
-   CComPtr<ICaptureGraphBuilder2> builder;
7
-   CComPtr<IMediaControl>         control;
8
-
9
-   CComPtr<IBaseFilter>           encoder;
10
-   CComPtr<IBaseFilter>           device;
11
-   CComPtr<OutputFilter>          output;
12
-   CComPtr<CaptureFilter>         capture;
13
+   ComPtr<IGraphBuilder>          graph;
14
+   ComPtr<ICaptureGraphBuilder2>  builder;
15
+   ComPtr<IMediaControl>          control;
16
+
17
+   ComPtr<IBaseFilter>            encoder;
18
+   ComPtr<IBaseFilter>            device;
19
+   ComPtr<OutputFilter>           output;
20
+   ComPtr<CaptureFilter>          capture;
21
 
22
    VideoEncoderConfig             config;
23
 
24
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.cpp Changed
123
 
1
@@ -39,6 +39,10 @@
2
 {
3
 }
4
 
5
+OutputPin::~OutputPin()
6
+{
7
+}
8
+
9
 STDMETHODIMP OutputPin::QueryInterface(REFIID riid, void **ppv)
10
 {
11
    if (riid == IID_IUnknown) {
12
@@ -88,7 +92,7 @@
13
 
14
    hr = pReceivePin->ReceiveConnection(this, outputInfo.mt);
15
    if (FAILED(hr)) {
16
-       CComPtr<IEnumMediaTypes> enumMT;
17
+       ComPtr<IEnumMediaTypes> enumMT;
18
        pReceivePin->EnumMediaTypes(&enumMT);
19
 
20
        if (enumMT) {
21
@@ -103,13 +107,12 @@
22
        return E_FAIL;
23
    }
24
 
25
-   CComQIPtr<IMemInputPin> memInput(pReceivePin);
26
+   ComQIPtr<IMemInputPin> memInput(pReceivePin);
27
    if (!memInput)
28
        return E_FAIL;
29
 
30
    if (!!allocator) {
31
        allocator->Decommit();
32
-       allocator.Release();
33
    }
34
 
35
    hr = memInput->GetAllocator(&allocator);
36
@@ -173,7 +176,6 @@
37
 
38
    if (!!allocator) {
39
        allocator->Decommit();
40
-       allocator.Release();
41
    }
42
 
43
    connectedPin = nullptr;
44
@@ -229,9 +231,13 @@
45
    return NOERROR;
46
 }
47
 
48
+#define OUTPUT_PIN_NAME L"Output Pin"
49
+
50
 STDMETHODIMP OutputPin::QueryId(LPWSTR *lpId)
51
 {
52
-   *lpId = L"Output Pin";
53
+   wchar_t *str = (wchar_t*)CoTaskMemAlloc(sizeof(OUTPUT_PIN_NAME));
54
+   memcpy(str, OUTPUT_PIN_NAME, sizeof(OUTPUT_PIN_NAME));
55
+   *lpId = str;
56
    return S_OK;
57
 }
58
 
59
@@ -318,10 +324,10 @@
60
        size_t linesize[DSHOW_MAX_PLANES],
61
        long long timestampStart, long long timestampEnd)
62
 {
63
-   CComQIPtr<IMemInputPin> memInput(connectedPin);
64
+   ComQIPtr<IMemInputPin> memInput(connectedPin);
65
    REFERENCE_TIME startTime = timestampStart;
66
    REFERENCE_TIME endTime = timestampEnd;
67
-   CComPtr<IMediaSample> sample;
68
+   ComPtr<IMediaSample> sample;
69
    HRESULT hr;
70
    BYTE *ptr;
71
 
72
@@ -375,6 +381,7 @@
73
 
74
 public:
75
    inline SourceMiscFlags() {}
76
+   virtual ~SourceMiscFlags() {}
77
 
78
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
79
    {
80
@@ -418,6 +425,10 @@
81
 {
82
 }
83
 
84
+OutputFilter::~OutputFilter()
85
+{
86
+}
87
+
88
 // IUnknown methods
89
 STDMETHODIMP OutputFilter::QueryInterface(REFIID riid, void **ppv)
90
 {
91
@@ -567,12 +578,15 @@
92
 // ============================================================================
93
 
94
 OutputEnumPins::OutputEnumPins(OutputFilter *filter_, OutputEnumPins *pEnum)
95
-   : filter   (filter_),
96
-     refCount (1)
97
+   : filter (filter_)
98
 {
99
    curPin = (pEnum != nullptr) ? pEnum->curPin : 0;
100
 }
101
 
102
+OutputEnumPins::~OutputEnumPins()
103
+{
104
+}
105
+
106
 // IUnknown
107
 STDMETHODIMP OutputEnumPins::QueryInterface(REFIID riid, void **ppv)
108
 {
109
@@ -642,8 +656,11 @@
110
 // ============================================================================
111
 
112
 OutputEnumMediaTypes::OutputEnumMediaTypes(OutputPin *pin_)
113
-   : pin      (pin_),
114
-     refCount (1)
115
+   : pin (pin_)
116
+{
117
+}
118
+
119
+OutputEnumMediaTypes::~OutputEnumMediaTypes()
120
 {
121
 }
122
 
123
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/source/output-filter.hpp Changed
71
 
1
@@ -41,16 +41,17 @@
2
    volatile long                  refCount;
3
 
4
    PinOutputInfo                  outputInfo;
5
-   CComPtr<IPin>                  connectedPin;
6
+   ComPtr<IPin>                   connectedPin;
7
    OutputFilter                   *filter;
8
    volatile bool                  flushing = false;
9
-   CComPtr<IMemAllocator>         allocator;
10
+   ComPtr<IMemAllocator>          allocator;
11
    size_t                         bufSize;
12
 
13
    bool IsValidMediaType(const AM_MEDIA_TYPE *pmt) const;
14
 
15
 public:
16
    OutputPin(OutputFilter *filter, const PinOutputInfo &info);
17
+   virtual ~OutputPin();
18
 
19
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
20
    STDMETHODIMP_(ULONG) AddRef();
21
@@ -89,13 +90,14 @@
22
 
23
    volatile long                  refCount;
24
    FILTER_STATE                   state;
25
-   CComPtr<IFilterGraph>          graph;
26
-   CComPtr<OutputPin>             pin;
27
+   ComPtr<IFilterGraph>           graph;
28
+   ComPtr<OutputPin>              pin;
29
 
30
-   CComPtr<IAMFilterMiscFlags>    misc;
31
+   ComPtr<IAMFilterMiscFlags>     misc;
32
 
33
 public:
34
    OutputFilter(const PinOutputInfo &info);
35
+   virtual ~OutputFilter();
36
 
37
    // IUnknown methods
38
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
39
@@ -131,12 +133,13 @@
40
 };
41
 
42
 class OutputEnumPins : public IEnumPins {
43
-   volatile long                  refCount;
44
-   CComPtr<OutputFilter>          filter;
45
+   volatile long                  refCount = 1;
46
+   ComPtr<OutputFilter>           filter;
47
    UINT                           curPin;
48
 
49
 public:
50
    OutputEnumPins(OutputFilter *filter, OutputEnumPins *pEnum);
51
+   virtual ~OutputEnumPins();
52
 
53
    // IUnknown
54
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
55
@@ -151,12 +154,13 @@
56
 };
57
 
58
 class OutputEnumMediaTypes : public IEnumMediaTypes {
59
-   volatile long                  refCount;
60
-   CComPtr<OutputPin>             pin;
61
+   volatile long                  refCount = 1;
62
+   ComPtr<OutputPin>              pin;
63
    UINT                           curMT = 0;
64
 
65
 public:
66
    OutputEnumMediaTypes(OutputPin *pin);
67
+   virtual ~OutputEnumMediaTypes();
68
 
69
    // IUnknown
70
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
71
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/vs/2013/dshowcapture/dshowcapture.vcxproj -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/vs/2013/dshowcapture/dshowcapture.vcxproj Changed
9
 
1
@@ -160,6 +160,7 @@
2
   <ItemGroup>
3
     <ClInclude Include="..\..\..\dshowcapture.hpp" />
4
     <ClInclude Include="..\..\..\source\capture-filter.hpp" />
5
+    <ClInclude Include="..\..\..\source\ComPtr.hpp" />
6
     <ClInclude Include="..\..\..\source\device.hpp" />
7
     <ClInclude Include="..\..\..\source\dshow-base.hpp" />
8
     <ClInclude Include="..\..\..\source\dshow-demux.hpp" />
9
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/libdshowcapture/vs/2013/dshowcapture/dshowcapture.vcxproj.filters -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/libdshowcapture/vs/2013/dshowcapture/dshowcapture.vcxproj.filters Changed
11
 
1
@@ -95,5 +95,8 @@
2
     <ClInclude Include="..\..\..\source\encoder.hpp">
3
       <Filter>Header Files</Filter>
4
     </ClInclude>
5
+    <ClInclude Include="..\..\..\source\ComPtr.hpp">
6
+      <Filter>Header Files</Filter>
7
+    </ClInclude>
8
   </ItemGroup>
9
 </Project>
10
\ No newline at end of file
11
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-dshow/win-dshow.cpp Changed
133
 
1
@@ -39,6 +39,8 @@
2
 #define BUFFERING_VAL     "buffering"
3
 #define USE_CUSTOM_AUDIO  "use_custom_audio_device"
4
 #define AUDIO_DEVICE_ID   "audio_device_id"
5
+#define COLOR_SPACE       "color_space"
6
+#define COLOR_RANGE       "color_range"
7
 
8
 #define TEXT_INPUT_NAME     obs_module_text("VideoCaptureDevice")
9
 #define TEXT_DEVICE         obs_module_text("Device")
10
@@ -60,6 +62,11 @@
11
 #define TEXT_AUDIO_DEVICE   obs_module_text("AudioDevice")
12
 #define TEXT_ACTIVATE       obs_module_text("Activate")
13
 #define TEXT_DEACTIVATE     obs_module_text("Deactivate")
14
+#define TEXT_COLOR_SPACE    obs_module_text("ColorSpace")
15
+#define TEXT_COLOR_DEFAULT  obs_module_text("ColorSpace.Default")
16
+#define TEXT_COLOR_RANGE    obs_module_text("ColorRange")
17
+#define TEXT_RANGE_PARTIAL  obs_module_text("ColorRange.Partial")
18
+#define TEXT_RANGE_FULL     obs_module_text("ColorRange.Full")
19
 
20
 enum ResType {
21
    ResType_Preferred,
22
@@ -223,6 +230,8 @@
23
    bool UpdateVideoConfig(obs_data_t *settings);
24
    bool UpdateAudioConfig(obs_data_t *settings);
25
    void SetActive(bool active);
26
+   inline enum video_colorspace GetColorSpace(obs_data_t *settings) const;
27
+   inline enum video_range_type GetColorRange(obs_data_t *settings) const;
28
    inline void Activate(obs_data_t *settings);
29
    inline void Deactivate();
30
 
31
@@ -569,6 +578,9 @@
32
    return ConvertRes(cx, cy, res.c_str());
33
 }
34
 
35
+template <typename ... F>
36
+static bool CapsMatch(const VideoDevice &dev, F ... fs);
37
+
38
 template <typename F, typename ... Fs>
39
 static inline bool CapsMatch(const VideoInfo &info, F&& f, Fs ... fs)
40
 {
41
@@ -828,6 +840,29 @@
42
    obs_data_release(settings);
43
 }
44
 
45
+inline enum video_colorspace DShowInput::GetColorSpace(
46
+       obs_data_t *settings) const
47
+{
48
+   const char *space = obs_data_get_string(settings, COLOR_SPACE);
49
+
50
+   if (astrcmpi(space, "709") == 0)
51
+       return VIDEO_CS_709;
52
+   else if (astrcmpi(space, "601") == 0)
53
+       return VIDEO_CS_601;
54
+   else
55
+       return (videoConfig.format == VideoFormat::HDYC) ?
56
+           VIDEO_CS_709 : VIDEO_CS_601;
57
+}
58
+
59
+inline enum video_range_type DShowInput::GetColorRange(
60
+       obs_data_t *settings) const
61
+{
62
+   const char *range = obs_data_get_string(settings, COLOR_RANGE);
63
+
64
+   return astrcmpi(range, "full") == 0 ?
65
+       VIDEO_RANGE_FULL : VIDEO_RANGE_PARTIAL;
66
+}
67
+
68
 inline void DShowInput::Activate(obs_data_t *settings)
69
 {
70
    if (!device.ResetGraph())
71
@@ -849,13 +884,14 @@
72
    if (device.Start() != Result::Success)
73
        return;
74
 
75
-   enum video_colorspace cs = (videoConfig.format == VideoFormat::HDYC) ?
76
-       VIDEO_CS_709 : VIDEO_CS_601;
77
+   enum video_colorspace cs = GetColorSpace(settings);
78
 
79
-   if (!video_format_get_parameters(cs, VIDEO_RANGE_PARTIAL,
80
+   bool success = video_format_get_parameters(
81
+           cs, GetColorRange(settings),
82
            frame.color_matrix,
83
            frame.color_range_min,
84
-           frame.color_range_max)) {
85
+           frame.color_range_max);
86
+   if (!success) {
87
        blog(LOG_ERROR, "Failed to get video format parameters for " \
88
                        "video format %u", cs);
89
    }
90
@@ -907,6 +943,8 @@
91
    obs_data_set_default_int(settings, FRAME_INTERVAL, FPS_MATCHING);
92
    obs_data_set_default_int(settings, RES_TYPE, ResType_Preferred);
93
    obs_data_set_default_int(settings, VIDEO_FORMAT, (int)VideoFormat::Any);
94
+   obs_data_set_default_string(settings, COLOR_SPACE, "default");
95
+   obs_data_set_default_string(settings, COLOR_RANGE, "partial");
96
 }
97
 
98
 struct Resolution {
99
@@ -1399,7 +1437,6 @@
100
 static bool UpdateFPS(long long interval, obs_property_t *list)
101
 {
102
    size_t size = obs_property_list_item_count(list);
103
-   bool fps_found = false;
104
    DStr name;
105
 
106
    for (size_t i = 0; i < size; i++) {
107
@@ -1411,7 +1448,6 @@
108
            return false;
109
 
110
        dstr_cat(name, obs_property_list_item_name(list, i));
111
-       fps_found = true;
112
        break;
113
    }
114
 
115
@@ -1628,6 +1664,17 @@
116
 
117
    obs_property_set_modified_callback(p, VideoFormatChanged);
118
 
119
+   p = obs_properties_add_list(ppts, COLOR_SPACE, TEXT_COLOR_SPACE,
120
+           OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
121
+   obs_property_list_add_string(p, TEXT_COLOR_DEFAULT, "default");
122
+   obs_property_list_add_string(p, "709", "709");
123
+   obs_property_list_add_string(p, "601", "601");
124
+
125
+   p = obs_properties_add_list(ppts, COLOR_RANGE, TEXT_COLOR_RANGE,
126
+           OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
127
+   obs_property_list_add_string(p, TEXT_RANGE_PARTIAL, "partial");
128
+   obs_property_list_add_string(p, TEXT_RANGE_FULL, "full");
129
+
130
    p = obs_properties_add_list(ppts, BUFFERING_VAL, TEXT_BUFFERING,
131
            OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
132
    obs_property_list_add_int(p, TEXT_BUFFERING_AUTO,
133
obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-wasapi/data/locale/zh-CN.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+AudioInput="音频输入捕获"
3
+AudioOutput="音频输出捕获"
4
+Device="设备"
5
+Default="默认"
6
+UseDeviceTiming="使用设备时间戳"
7
+
8
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-wasapi/enum-wasapi.hpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-wasapi/enum-wasapi.hpp Changed
26
 
1
@@ -5,8 +5,24 @@
2
 #include <mmdeviceapi.h>
3
 #include <audioclient.h>
4
 #include <propsys.h>
5
+
6
+#ifdef __MINGW32__
7
+
8
+#ifdef DEFINE_PROPERTYKEY
9
+#undef DEFINE_PROPERTYKEY
10
+#endif
11
+#define DEFINE_PROPERTYKEY(id, a, b, c, d, e, f, g, h, i, j, k, l) \
12
+   const PROPERTYKEY id = { { a,b,c, { d,e,f,g,h,i,j,k, } }, l };
13
+DEFINE_PROPERTYKEY(PKEY_Device_FriendlyName, \
14
+   0xa45c254e, 0xdf1c, 0x4efd, 0x80, \
15
+   0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14);
16
+
17
+#else
18
+
19
 #include <functiondiscoverykeys_devpkey.h>
20
 
21
+#endif
22
+
23
 #include <vector>
24
 #include <string>
25
 
26
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/plugins/win-wasapi/win-wasapi.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/plugins/win-wasapi/win-wasapi.cpp Changed
51
 
1
@@ -27,13 +27,13 @@
2
    string                      device_id;
3
    string                      device_name;
4
    bool                        isInputDevice;
5
-   bool                        useDeviceTiming;
6
-   bool                        isDefaultDevice;
7
+   bool                        useDeviceTiming = false;
8
+   bool                        isDefaultDevice = false;
9
 
10
-   bool                        reconnecting;
11
+   bool                        reconnecting = false;
12
    WinHandle                   reconnectThread;
13
 
14
-   bool                        active;
15
+   bool                        active = false;
16
    WinHandle                   captureThread;
17
 
18
    WinHandle                   stopSignal;
19
@@ -72,11 +72,7 @@
20
 
21
 WASAPISource::WASAPISource(obs_data_t *settings, obs_source_t *source_,
22
        bool input)
23
-   : reconnecting    (false),
24
-     active          (false),
25
-     reconnectThread (nullptr),
26
-     captureThread   (nullptr),
27
-     source          (source_),
28
+   : source          (source_),
29
      isInputDevice   (input)
30
 {
31
    UpdateSettings(settings);
32
@@ -299,7 +295,7 @@
33
 
34
    if (!reconnectThread.Valid())
35
        blog(LOG_WARNING, "[WASAPISource::Reconnect] "
36
-                       "Failed to intiialize reconnect thread: %d",
37
+                       "Failed to intiialize reconnect thread: %lu",
38
                         GetLastError());
39
 }
40
 
41
@@ -494,8 +490,7 @@
42
                device.name.c_str(), device.id.c_str());
43
    }
44
 
45
-   obs_property_t *prop;
46
-   prop = obs_properties_add_bool(props, OPT_USE_DEVICE_TIMING,
47
+   obs_properties_add_bool(props, OPT_USE_DEVICE_TIMING,
48
            obs_module_text("UseDeviceTiming"));
49
 
50
    return props;
51
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/test/test-input/CMakeLists.txt -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/test/test-input/CMakeLists.txt Changed
10
 
1
@@ -2,7 +2,7 @@
2
 
3
 include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
4
 
5
-if(WIN32)
6
+if(MSVC)
7
    set(test-input_PLATFORM_DEPS
8
        w32-pthreads)
9
 endif()
10
obs-studio-0.7.3+git20150114.d54b3cc.tar.xz/test/win/test.cpp -> obs-studio-0.8.2+git20150211.6099c65.tar.xz/test/win/test.cpp Changed
10
 
1
@@ -198,7 +198,7 @@
2
 
3
    obs_shutdown();
4
 
5
-   blog(LOG_INFO, "Number of memory leaks: %llu", bnum_allocs());
6
+   blog(LOG_INFO, "Number of memory leaks: %ld", bnum_allocs());
7
    DestroyWindow(hwnd);
8
 
9
    UNUSED_PARAMETER(prevInstance);
10