We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 7
obs-studio.changes
Changed
x
1
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
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
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
18
19
%prep
20
%setup -q
21
-%patch0 -p1
22
23
%build
24
mkdir -p build && cd build
25
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 ¶m, bool &upload);
125
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
#include <QHBoxLayout>
3
+#include <QGridLayout>
4
#include <QLabel>
5
#include <QSpinBox>
6
#include <QCheckBox>
7
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
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
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
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
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
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
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
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
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
2
NameExists.Text="الاسم مستخدم حاليا."
3
4
5
+
6
ConfirmRemove.Title="تأكيد الإزالة"
7
ConfirmRemove.Text="هل أنت متأكد من رغبتك في إزالة '$1' ?"
8
9
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
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
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
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
2
NameExists.Text="Името е вече използвано."
3
4
5
+
6
ConfirmRemove.Title="Потвърди премахване"
7
ConfirmRemove.Text="Наистина ли искате да премахнете \"$1\"?"
8
9
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
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
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
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
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
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
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
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
11
MoveUp="Flyt Op"
12
MoveDown="Flyt Ned"
13
Settings="Indstillinger"
14
+Name="Navn"
15
Exit="Afslut"
16
Mixer="Mixer"
17
Browse="Browse"
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
OK="ΟΚ"
3
Apply="Εφαρμογή"
4
Cancel="Ακύρωση"
5
+Save="Αποθήκευση"
6
+Discard="Απόρριψη"
7
Yes="Ναι"
8
No="Όχι"
9
Add="Προσθήκη"
10
11
MoveUp="Μετακίνηση Πάνω"
12
MoveDown="Μετακίνηση Κάτω"
13
Settings="Ρυθμίσεις"
14
+Name="Όνομα"
15
Exit="Έξοδος"
16
Mixer="Μίξερ"
17
Browse="Αναζήτηση"
18
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
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
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
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
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
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
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
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
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
11
MoveUp="Move Up"
12
MoveDown="Move Down"
13
Settings="Settings"
14
+Name="Name"
15
Exit="Exit"
16
Mixer="Mixer"
17
Browse="Browse"
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
11
MoveUp="Mugitu Gora"
12
MoveDown="Mugitu Behera"
13
Settings="Ezarpenak..."
14
+Name="Izena"
15
Exit="Irten"
16
Mixer="Nahastzailea"
17
Browse="Bilatu..."
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
11
MoveUp="Subir"
12
MoveDown="Baixar"
13
Settings="Axustes"
14
+Name="Nome"
15
Exit="Saír"
16
Mixer="Mesturador"
17
Browse="Explorar"
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
OK="확인"
3
Apply="적용"
4
Cancel="취소"
5
+Save="저장"
6
+Discard="저장 안함"
7
Yes="예"
8
No="아니오"
9
Add="추가"
10
11
MoveUp="위로 올리기"
12
MoveDown="아래로 내리기"
13
Settings="설정"
14
+Name="이름"
15
Exit="끝내기"
16
Mixer="믹서"
17
Browse="찾아보기"
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
MoveUp="Omhoog Schuiven"
3
MoveDown="Omlaag Schuiven"
4
Settings="Instellingen"
5
+Name="Naam"
6
Exit="Afsluiten"
7
Mixer="Mixer"
8
Browse="Bladeren"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
OK="OK"
3
Apply="Применить"
4
Cancel="Отмена"
5
+Save="Сохранить"
6
+Discard="Отклонить"
7
Yes="Да"
8
No="Нет"
9
Add="Добавить"
10
11
MoveUp="Выше"
12
MoveDown="Ниже"
13
Settings="Настройки"
14
+Name="Название"
15
Exit="Выход"
16
Mixer="Микшер"
17
Browse="Обзор"
18
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
MoveUp="Помери горе"
3
MoveDown="Помери доле"
4
Settings="Подешавања"
5
+Name="Име"
6
Exit="Излаз"
7
Mixer="Миксета"
8
Browse="Претражи"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
Language="ไทย"
4
+Region="ประเทศไทย"
5
6
OK="ตกลง"
7
Apply="นำไปใช้"
8
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
28
29
Basic.Main.DefaultSceneName.Text="ฉาก %1"
30
31
+Basic.SourceSelect.CreateNew="สร้างใหม่"
32
33
34
35
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
47
Basic.Main.StopRecording="หยุดบันทึก"
48
Basic.Main.StopStreaming="หยุดสตรีมมิ่ง"
49
50
+Basic.MainMenu.File.Exit="อ&อก"
51
52
53
Basic.MainMenu.Help.CheckForUpdates="ตรวจสอบการอัพเดต"
54
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
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
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
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
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
2
3
4
5
+
6
LicenseAgreement.Exit="Вихід"
7
8
9
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
2
OK="确定"
3
Apply="应用"
4
Cancel="取消"
5
+Save="保存"
6
+Discard="舍弃"
7
Yes="是"
8
No="否"
9
Add="添加"
10
11
MoveUp="上移"
12
MoveDown="下移"
13
Settings="设置"
14
+Name="名称"
15
Exit="退出"
16
Mixer="混音器"
17
Browse="浏览"
18
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
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
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
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
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
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
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
2
NoNameEntered.Title="請輸入有效的名稱"
3
NoNameEntered.Text="您使用的名稱不能為空。"
4
5
+
6
ConfirmRemove.Title="確認刪除?"
7
ConfirmRemove.Text="您確定要刪除「$1」?"
8
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
#include <QFormLayout>
3
+#include <QScrollBar>
4
#include <QLabel>
5
#include <QCheckBox>
6
#include <QFont>
7
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
31
32
setWidgetResizable(true);
33
setWidget(widget);
34
+ SetScrollPos(h, v);
35
setSizePolicy(mainPolicy);
36
37
lastFocused.clear();
38
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
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
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
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
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
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
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
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
2
#include <QVBoxLayout>
3
-#include <QHBoxLayout>
4
+#include <QGridLayout>
5
#include <QScrollArea>
6
#include <QLabel>
7
#include "window-basic-adv-audio.hpp"
8
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
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
2
#include <vector>
3
4
class OBSAdvAudioCtrl;
5
+class QGridLayout;
6
7
// "Basic advanced audio"? ...
8
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
24
25
ConfigFile basicConfig;
26
27
- int activeRefs = 0;
28
-
29
void DrawBackdrop(float cx, float cy);
30
31
void SetupEncoders();
32
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
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
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
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
2
#include <QCloseEvent>
3
#include <QScreen>
4
#include <QWindow>
5
+#include <QMessageBox>
6
7
using namespace std;
8
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
X11SharedMemoryScreenInput="Σύλληψη Οθόνης (XSHM)"
3
Screen="Οθόνη"
4
CaptureCursor="Σύλληψη δρομέα"
5
+AdvancedSettings="Ρυθμίσεις για Προχωρημένους"
6
+XServer="X Server"
7
XCCapture="Σύλληψη παραθήρου (XComposite)"
8
Window="Παράθυρο"
9
CropTop="Περικοπή Πάνω (pixels)"
10
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
X11SharedMemoryScreenInput="画面キャプチャ (XSHM)"
3
Screen="画面"
4
CaptureCursor="カーソルをキャプチャ"
5
+AdvancedSettings="高度な設定"
6
+XServer="X サーバ"
7
XCCapture="ウィンドウキャプチャ (Xcomposite)"
8
Window="ウィンドウ"
9
CropTop="上部クロップ(ピクセル)"
10
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
2
X11SharedMemoryScreenInput="화면 캡쳐 (XSHM)"
3
Screen="화면"
4
CaptureCursor="커서 캡쳐"
5
+AdvancedSettings="고급 설정"
6
+XServer="X 서버"
7
XCCapture="윈도우 캡쳐(Xcomposite)"
8
Window="윈도우"
9
CropTop="위쪽 자르기 (픽셀)"
10
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
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
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
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
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
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
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
2
X11SharedMemoryScreenInput="Захват экрана (XSHM)"
3
Screen="Экран"
4
CaptureCursor="Захват курсора"
5
+AdvancedSettings="Дополнительные настройки"
6
+XServer="X-сервер"
7
XCCapture="Захват окна (Xcomposite)"
8
Window="Окно"
9
CropTop="Обрезать сверху (пикселей)"
10
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
+Syphon="Indfang spil (Syphon)"
3
Source="Kilde"
4
LaunchSyphonInject="Kør SyphonInject"
5
Inject="Indsæt"
6
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
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
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
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
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
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
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
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
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
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
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
2
+Syphon="Spillopptak (Syphon)"
3
Source="Kilde"
4
LaunchSyphonInject="Start SyphonInject"
5
Inject="Injiser"
6
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
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
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
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
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
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
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
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
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
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
2
project(obs-ffmpeg)
3
4
-if(WIN32)
5
+if(MSVC)
6
set(obs-ffmpeg_PLATFORM_DEPS
7
w32-pthreads)
8
endif()
9
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
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
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
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
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
50
AVFrame *aframe;
51
int total_samples;
52
53
- const char *filename_test;
54
+ struct ffmpeg_cfg config;
55
56
bool initialized;
57
};
58
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
return len + nSize;
4
}
5
+ return len;
6
}
7
8
int
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
#include <winsock2.h>
4
#include <ws2tcpip.h>
5
+#include <Mstcpip.h>
6
7
8
#ifdef _MSC_VER /* MSVC */
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
};
3
};
4
5
-struct d3d10_data data = {};
6
+static struct d3d10_data data = {};
7
8
void d3d10_free(void)
9
{
10
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
2
};
3
};
4
5
-struct d3d11_data data = {};
6
+static struct d3d11_data data = {};
7
8
void d3d11_free(void)
9
{
10
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
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(¶meters);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
#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
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
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
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
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
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
79
rehook_gl();*/
80
}
81
82
- /*if (!d3d8_hooked) {
83
+ if (!d3d8_hooked) {
84
if (!d3d8_hookable()) {
85
d3d8_hooked = true;
86
} else {
87
88
}
89
}
90
91
- if (!ddraw_hooked) {
92
+ /*if (!ddraw_hooked) {
93
if (!ddraw_hookable()) {
94
ddraw_hooked = true;
95
} else {
96
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
ConfigureCrossbar="تكوين العارضة"
3
ResFPSType="نوع الأبعاد/FPS"
4
ResFPSType.Custom="مخصص"
5
-ResFPSType.DevPreferred="الجهاز المفضل"
6
FPS.Matching="تطابق إخراج FPS"
7
FPS.Highest="أعلى FPS"
8
Resolution="الأبعاد"
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
ConfigureCrossbar="設定影像格式"
3
ResFPSType="解析度/FPS 類型"
4
ResFPSType.Custom="自訂"
5
-ResFPSType.DevPreferred="裝置建議值"
6
FPS.Matching="符合輸出 FPS"
7
FPS.Highest="最大化 FPS"
8
Resolution="解析度"
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
28
29
public:
30
inline MiscFlagsHandler() {}
31
+ virtual ~MiscFlagsHandler() {}
32
33
STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
34
{
35
36
{
37
}
38
39
+CaptureFilter::~CaptureFilter()
40
+{
41
+}
42
+
43
// IUnknown methods
44
STDMETHODIMP CaptureFilter::QueryInterface(REFIID riid, void **ppv)
45
{
46
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
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
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
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
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
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
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
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
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
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
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
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
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
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
65
return false;
66
}
67
68
- CComQIPtr<IAMStreamConfig> pinConfig(pin);
69
+ ComQIPtr<IAMStreamConfig> pinConfig(pin);
70
71
if (config.useDefaultConfig) {
72
MediaTypePtr defaultMT;
73
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
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
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
103
104
void HDevice::DisconnectFilters()
105
{
106
- CComPtr<IEnumFilters> filterEnum;
107
+ ComPtr<IEnumFilters> filterEnum;
108
HRESULT hr;
109
110
if (!graph)
111
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
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
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
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
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
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
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
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
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
79
(*pin)->AddRef();
80
return true;
81
}
82
-
83
- curPin.Release();
84
}
85
86
return false;
87
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
99
*pin = curPin.Detach();
100
return true;
101
}
102
-
103
- curPin.Release();
104
}
105
106
return false;
107
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
119
*pin = curPin.Detach();
120
return true;
121
}
122
-
123
- curPin.Release();
124
}
125
126
return false;
127
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
HVideoEncoder::~HVideoEncoder()
4
{
5
- CComPtr<IEnumFilters> filterEnum;
6
+ ComPtr<IEnumFilters> filterEnum;
7
IBaseFilter *filter;
8
HRESULT hr;
9
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
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
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
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
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
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
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
2
{
3
}
4
5
+OutputPin::~OutputPin()
6
+{
7
+}
8
+
9
STDMETHODIMP OutputPin::QueryInterface(REFIID riid, void **ppv)
10
{
11
if (riid == IID_IUnknown) {
12
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
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
37
38
if (!!allocator) {
39
allocator->Decommit();
40
- allocator.Release();
41
}
42
43
connectedPin = nullptr;
44
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
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
73
74
public:
75
inline SourceMiscFlags() {}
76
+ virtual ~SourceMiscFlags() {}
77
78
STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
79
{
80
81
{
82
}
83
84
+OutputFilter::~OutputFilter()
85
+{
86
+}
87
+
88
// IUnknown methods
89
STDMETHODIMP OutputFilter::QueryInterface(REFIID riid, void **ppv)
90
{
91
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
108
return false;
109
110
dstr_cat(name, obs_property_list_item_name(list, i));
111
- fps_found = true;
112
break;
113
}
114
115
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
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
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
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
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
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
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
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
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