fixed crashes, added dxgi1.2 stuff

master
jp9000 2012-12-05 21:48:21 -07:00
parent 6ebf3633d9
commit 0784e6b637
12 changed files with 7443 additions and 21 deletions

View File

@ -76,6 +76,7 @@ void STDCALL OSInit()
GetSystemInfo(&si);
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
if(osvi.dwMajorVersion > 6 || (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion >= 2))
bWindows8 = TRUE;

View File

@ -65,8 +65,8 @@ extern ConfigFile *AppConfig;
extern OBS *App;
extern TCHAR lpAppDataPath[MAX_PATH];
#define OBS_VERSION 0x000450
#define OBS_VERSION_STRING_ANSI "Open Broadcaster Software v0.45a"
#define OBS_VERSION 0x000452
#define OBS_VERSION_STRING_ANSI "Open Broadcaster Software v0.452a"
#define OBS_VERSION_STRING TEXT(OBS_VERSION_STRING_ANSI)
#define OBS_WINDOW_CLASS TEXT("OBSWindowClass")
@ -82,6 +82,7 @@ void WINAPI ProcessEvents();
inline bool IsWindows8Up()
{
OSVERSIONINFO osi;
osi.dwOSVersionInfoSize = sizeof(osi);
GetVersionEx(&osi);
return (osi.dwMajorVersion > 6 || (osi.dwMajorVersion == 6 && osi.dwMinorVersion >= 2));

View File

@ -749,13 +749,15 @@ OBS::OBS()
UINT numScenes = scenes->NumElements();
if(!numScenes)
{
scenes->CreateElement(Str("Scene"));
XElement *scene = scenes->CreateElement(Str("Scene"));
scene->SetString(TEXT("class"), TEXT("Scene"));
numScenes++;
}
for(UINT i=0; i<numScenes; i++)
{
XElement *scene = scenes->GetElementByID(i);
scene->SetString(TEXT("class"), TEXT("Scene"));
SendMessage(hwndTemp, LB_ADDSTRING, 0, (LPARAM)scene->GetName());
}

View File

@ -384,7 +384,13 @@ LRESULT CALLBACK OBS::ListboxHook(HWND hwnd, UINT message, WPARAM wParam, LPARAM
if(numItems)
{
curClassInfo = App->GetSceneClass(item->GetString(TEXT("class")));
if(curClassInfo->configProc)
if(!curClassInfo)
{
curSceneElement->AddString(TEXT("class"), TEXT("Scene"));
curClassInfo = App->GetSceneClass(item->GetString(TEXT("class")));
}
if(curClassInfo && curClassInfo->configProc)
{
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hMenu, MF_STRING, ID_LISTBOX_CONFIG, Str("Listbox.Config"));

357
extras/concurrencysal.h Normal file
View File

@ -0,0 +1,357 @@
/***
*concurrencysal.h - markers for documenting the concurrent semantics of APIs
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* This file contains macros for Concurrency SAL annotations. Definitions
* starting with _Internal are low level macros that are subject to change.
* Users should not use those low level macros directly.
* [ANSI]
*
* [Public]
*
****/
#ifndef CONCURRENCYSAL_H
#define CONCURRENCYSAL_H
#pragma once
#ifdef __cplusplus // [
extern "C" {
#endif // ]
#if !defined(__midl) && defined(_PREFAST_) && _MSC_VER >= 1000 && !defined(_SDV_) /*IFSTRIP=IGN*/
__ANNOTATION(SAL_guarded_by(__deferTypecheck void *));
__ANNOTATION(SAL_write_guarded_by(__deferTypecheck void *));
__ANNOTATION(SAL_requires_lock_held(__deferTypecheck void *));
__ANNOTATION(SAL_requires_exclusive_lock_held(__deferTypecheck void *));
__ANNOTATION(SAL_requires_shared_lock_held(__deferTypecheck void *));
__ANNOTATION(SAL_requires_lock_not_held(__deferTypecheck void *));
__ANNOTATION(SAL_requires_no_locks_held(void));
__ANNOTATION(SAL_set_lock_count_to_zero(__deferTypecheck void *));
__ANNOTATION(SAL_set_lock_count_to_one(__deferTypecheck void *));
__ANNOTATION(SAL_acquires_lock(__deferTypecheck void *));
__ANNOTATION(SAL_acquires_exclusive_lock(__deferTypecheck void *));
__ANNOTATION(SAL_acquires_shared_lock(__deferTypecheck void *));
__ANNOTATION(SAL_releases_lock(__deferTypecheck void *));
__ANNOTATION(SAL_releases_exclusive_lock(__deferTypecheck void *));
__ANNOTATION(SAL_releases_shared_lock(__deferTypecheck void *));
__ANNOTATION(SAL_ignore_lock_match(__deferTypecheck void *));
__ANNOTATION(SAL_has_lock_property(__AuToQuOtE __In_impl_ char *));
__ANNOTATION(SAL_has_lock_level(__AuToQuOtE __In_impl_ char *));
__ANNOTATION(SAL_lock_level_order(__deferTypecheck void *, __deferTypecheck void *));
__ANNOTATION(SAL_no_competing_thread(void));
__ANNOTATION(SAL_set_same_lock(__deferTypecheck void *, __deferTypecheck void *));
/*
* pre-defined global system locks
*/
extern int _Global_interlock_;
extern int _Global_cancel_spin_lock_;
extern int _Global_critical_region_;
/*
* Annotation identifiers
*/
#define _Internal_create_CSAL_identifier_(id) const char id##[] = "";
_Internal_create_CSAL_identifier_(_Lock_kind_mutex_)
_Internal_create_CSAL_identifier_(_Lock_kind_event_)
_Internal_create_CSAL_identifier_(_Lock_kind_semaphore_)
_Internal_create_CSAL_identifier_(_Lock_kind_spin_lock_)
_Internal_create_CSAL_identifier_(_Lock_kind_critical_section_)
/*
* data protection
*/
#define _Guarded_by_(lock) _SA_annotes1(SAL_guarded_by,lock)
#define _Write_guarded_by_(lock) _SA_annotes1(SAL_write_guarded_by,lock)
#define _Interlocked_ _Guarded_by_(_Global_interlock_)
/*
* interlocked operand used in interlocked instructions
*/
#ifndef _Interlocked_operand_
#define _Interlocked_operand_ _Pre_ _SA_annotes0(SAL_interlocked)
#endif
/*
* caller/callee locking contracts
*/
#define _Requires_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_lock_held,lock)
#define _Requires_exclusive_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_exclusive_lock_held,lock)
#define _Requires_shared_lock_held_(lock) _Pre_ _SA_annotes1(SAL_requires_shared_lock_held,lock)
#define _Requires_lock_not_held_(lock) _Pre_ _SA_annotes1(SAL_requires_lock_not_held,lock)
#define _Requires_no_locks_held_ _Pre_ _SA_annotes0(SAL_requires_no_locks_held)
/*
* acquire/release locking side effects
*/
#define _Acquires_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_lock,lock)
#define _Acquires_exclusive_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_exclusive_lock,lock)
#define _Acquires_shared_lock_(lock) _Post_ _SA_annotes1(SAL_acquires_shared_lock,lock)
#define _Releases_lock_(lock) _Post_ _SA_annotes1(SAL_releases_lock,lock)
#define _Releases_exclusive_lock_(lock) _Post_ _SA_annotes1(SAL_releases_exclusive_lock,lock)
#define _Releases_shared_lock_(lock) _Post_ _SA_annotes1(SAL_releases_shared_lock,lock)
/*
* acquire/release locking side effects for non-reentrant locks
*/
#define _Acquires_nonreentrant_lock_(lock) \
_Group_( \
_Requires_lock_not_held_(lock) \
_Acquires_lock_(lock))
#define _Releases_nonreentrant_lock_(lock) \
_Group_( \
_Requires_lock_held_(lock) \
_Releases_lock_(lock))
#define _Post_same_lock_(a,b) _Post_ _SA_annotes2(SAL_set_same_lock,a,b)
/*
* lock level
*/
#define _Create_lock_level_(level) _Internal_create_CSAL_identifier_(level)
#define _Has_lock_level_(level) _SA_annotes1(SAL_has_lock_level,#level)
#define _Internal_lock_level_order_(a,b) _SA_annotes2(SAL_lock_level_order,a,b)
#define _Csalcat1_(x,y) x##y
#define _Csalcat2_(x,y) _Csalcat1_(x,y)
#define _Lock_level_order_(a,b) \
extern _Internal_lock_level_order_(a,b) void _Sal_order_##a##_##b(_In_z_ char*a, _In_z_ char*b); \
static __inline void CSALCAT2(CSAL_LockOrder,__COUNTER__)(void){_Sal_order_##a##_##b(#a,#b);}
/*
* threading context
*/
#define _No_competing_thread_ _Pre_ _SA_annotes0(SAL_no_competing_thread)
/*
* refinement and suppression
*/
extern _Acquires_lock_(*plock) void _Internal_acquires_lock_(void* plock);
extern _Releases_lock_(*plock) void _Internal_releases_lock_(void* plock);
#define _Internal_set_lock_count_to_zero_(lock) _Post_ _SA_annotes1(SAL_set_lock_count_to_zero,lock)
#define _Internal_set_lock_count_to_one_(lock) _Post_ _SA_annotes1(SAL_set_lock_count_to_one,lock)
extern _Internal_set_lock_count_to_one_(*plock) void _Internal_lock_held_(void* plock);
extern _Internal_set_lock_count_to_zero_(*plock) void _Internal_lock_not_held_(void* plock);
extern _Post_same_lock_(*plock1, *plock2) void _Internal_same_lock_(void* plock1, void* plock2);
#define _Analysis_assume_lock_acquired_(lock) _Internal_acquires_lock_((void*)(&(lock)))
#define _Analysis_assume_lock_released_(lock) _Internal_releases_lock_((void*)(&(lock)))
#define _Analysis_assume_lock_held_(lock) _Internal_lock_held_((void*)(&(lock)))
#define _Analysis_assume_lock_not_held_(lock) _Internal_lock_not_held_((void*)(&(lock)))
#define _Analysis_assume_same_lock_(lock1, lock2) _Internal_same_lock_((void*)(&(lock1)), (void*)(&(lock2)))
/*
* _Function_ignore_lock_checking_ may be deprecated in future versions of SAL
*/
#define _Function_ignore_lock_checking_(lock) _Pre_ _SA_annotes1(SAL_ignore_lock_match,lock)
extern _Function_ignore_lock_checking_(*plock) void _Internal_suppress_lock_checking_(void* plock);
/*
* _Analysis_suppress_lock_checking_ may be deprecated in future versions of SAL
*/
#define _Analysis_suppress_lock_checking_(lock) _Internal_suppress_lock_checking_((void*)(&(lock)));
#define _Benign_race_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26130 26180 26131 26181 28112))
#define _Benign_race_end_ __pragma(warning(pop))
#define _No_competing_thread_begin_ __pragma(warning(push)) __pragma(warning(disable:26100 26101 26150 26101 26151 26110 26160 26130 26180 26131 26181 28112))
#define _No_competing_thread_end_ __pragma(warning(pop))
/*
* lock kinds
*/
#define _Has_lock_kind_(kind) _SA_annotes1(SAL_has_lock_property,#kind)
/*
* Old spelling
* Note: the old version may be deprecated in the future!!!
*/
extern int __system_interlock;
extern int __system_cancel_spinlock;
extern int __system_critical_region;
#define __guarded_by(lock) _SA_annotes1(SAL_guarded_by,lock)
#define __write_guarded_by(lock) _SA_annotes1(SAL_write_guarded_by,lock)
#define __interlocked __guarded_by(_Global_interlock_)
/*
* caller/callee locking contracts
*/
#define __requires_lock_held(lock) __pre _SA_annotes1(SAL_requires_lock_held,lock)
#define __requires_exclusive_lock_held(lock) __pre _SA_annotes1(SAL_requires_exclusive_lock_held,lock)
#define __requires_shared_lock_held(lock) __pre _SA_annotes1(SAL_requires_shared_lock_held,lock)
#define __requires_lock_not_held(lock) __pre _SA_annotes1(SAL_requires_lock_not_held,lock)
#define __requires_no_locks_held __pre _SA_annotes0(SAL_requires_no_locks_held)
/*
* acquire/release locking side effects
*/
#define __acquires_lock(lock) __post _SA_annotes1(SAL_acquires_lock,lock)
#define __acquires_exclusive_lock(lock) __post _SA_annotes1(SAL_acquires_exclusive_lock,lock)
#define __acquires_shared_lock(lock) __post _SA_annotes1(SAL_acquires_shared_lock,lock)
#define __releases_lock(lock) __post _SA_annotes1(SAL_releases_lock,lock)
#define __releases_exclusive_lock(lock) __post _SA_annotes1(SAL_releases_exclusive_lock,lock)
#define __releases_shared_lock(lock) __post _SA_annotes1(SAL_releases_shared_lock,lock)
/*
* lock properties
* The following kind options are supported:
* __has_lock_property(MUTEX)
* __has_lock_property(EVENT)
* __has_lock_property(SEMAPHORE)
* __has_lock_property(OTHER_HANDLE)
* __has_lock_property(REENTRANT)
* __has_lock_property(NON_REENTRANT)
*/
#define __has_lock_property(kind) _SA_annotes1(SAL_has_lock_property,#kind)
/*
* lock level
*/
#define __declare_lock_level(level) _Internal_create_CSAL_identifier_(level)
#define __has_lock_level(level) _SA_annotes1(SAL_has_lock_level,#level)
#define __internal_lock_level_order(a,b) _SA_annotes2(SAL_lock_level_order,#a,#b)
#define CSALCAT1(x,y) x##y
#define CSALCAT2(x,y) CSALCAT1(x,y)
#define __lock_level_order(a,b) \
extern __internal_lock_level_order(a,b) void __sal_order_##a##_##b(__in_z char*a, __in_z char*b); \
static __inline void CSALCAT2(CSAL_LockOrder,__COUNTER__)(void){__sal_order_##a##_##b(#a,#b);}
/*
* threading context
*/
#define __no_competing_thread __pre _SA_annotes0(SAL_no_competing_thread)
/*
* refinement and suppression
*/
extern __acquires_lock(*plock) void __internal_acquires_lock(void* plock);
extern __releases_lock(*plock) void __internal_releases_lock(void* plock);
#define __analysis_assume_lock_acquired(lock) __internal_acquires_lock((void*)(&(lock)))
#define __analysis_assume_lock_released(lock) __internal_releases_lock((void*)(&(lock)))
#define __function_ignore_lock_checking(lock) __pre _SA_annotes1(SAL_ignore_lock_match,lock)
extern __function_ignore_lock_checking(*plock) void __internal_suppress_lock_checking(void* plock);
#define __analysis_suppress_lock_checking(lock) __internal_suppress_lock_checking((void*)(&(lock)));
#define BENIGN_RACE_BEGIN __pragma(warning(push)) __pragma(warning(disable:26100 26150 26130 26180 26131 26181))
#define BENIGN_RACE_END __pragma(warning(pop))
#define NO_COMPETING_THREAD_BEGIN __pragma(warning(push)) __pragma(warning(disable:26100 26150 26101 26151 26110 26160 26130 26180 26131 26181))
#define NO_COMPETING_THREAD_END __pragma(warning(pop))
#else
#ifndef _Interlocked_operand_
#define _Interlocked_operand_
#endif
#define _Guarded_by_(lock)
#define _Write_guarded_by_(lock)
#define _Interlocked_
#define _Requires_lock_held_(lock)
#define _Requires_exclusive_lock_held_(lock)
#define _Requires_shared_lock_held_(lock)
#define _Requires_lock_not_held_(lock)
#define _Requires_no_locks_held_
#define _Acquires_lock_(lock)
#define _Acquires_exclusive_lock_(lock)
#define _Acquires_shared_lock_(lock)
#define _Releases_lock_(lock)
#define _Releases_exclusive_lock_(lock)
#define _Releases_shared_lock_(lock)
#define _Acquires_nonreentrant_lock_(lock)
#define _Releases_nonreentrant_lock_(lock)
#define _Post_same_lock_(lock1,lock2)
#define _Internal_set_lock_count_(lock, count)
#define _Create_lock_level_(level)
#define _Has_lock_level_(level)
#define _Internal_lock_level_order_(a,b)
#define _Csalcat1_(x,y)
#define _Csalcat2_(x,y)
#define _Lock_level_order_(a,b)
#define _No_competing_thread_
#define _Analysis_assume_lock_acquired_(lock)
#define _Analysis_assume_lock_released_(lock)
#define _Analysis_assume_lock_held_(lock)
#define _Analysis_assume_lock_not_held_(lock)
#define _Analysis_assume_same_lock_(lock1, lock2)
#define _Function_ignore_lock_checking_(lock)
#define _Analysis_suppress_lock_checking_(lock)
#define _Benign_race_begin_ __pragma(warning(push))
#define _Benign_race_end_ __pragma(warning(pop))
#define _No_competing_thread_begin_ __pragma(warning(push))
#define _No_competing_thread_end_ __pragma(warning(pop))
#define _Has_lock_kind_(kind)
/*
* Old spelling: will be deprecated
*/
#define __guarded_by(lock)
#define __write_guarded_by(lock)
#define __interlocked
#define __requires_lock_held(lock)
#define __requires_exclusive_lock_held(lock)
#define __requires_shared_lock_held(lock)
#define __requires_lock_not_held(lock)
#define __requires_no_locks_held
#define __acquires_lock(lock)
#define __acquires_exclusive_lock(lock)
#define __acquires_shared_lock(lock)
#define __releases_lock(lock)
#define __releases_exclusive_lock(lock)
#define __releases_shared_lock(lock)
#define __has_lock_property(kind)
#define __declare_lock_level(level)
#define __has_lock_level(level)
#define __internal_lock_level_order(a,b)
#define CSALCAT1(x,y)
#define CSALCAT2(x,y)
#define __lock_level_order(a,b)
#define __no_competing_thread
#define __analysis_assume_lock_acquired(lock)
#define __analysis_assume_lock_released(lock)
#define __function_ignore_lock_checking(lock)
#define __analysis_suppress_lock_checking(lock)
#define BENIGN_RACE_BEGIN __pragma(warning(push))
#define BENIGN_RACE_END __pragma(warning(pop))
#define NO_COMPETING_THREAD_BEGIN __pragma(warning(push))
#define NO_COMPETING_THREAD_END __pragma(warning(pop))
#endif
#ifdef __cplusplus
}
#endif
#endif // CONCURRENCYSAL_H

2475
extras/dxgi1_2.h Normal file

File diff suppressed because it is too large Load Diff

426
extras/dxgi1_2.idl Normal file
View File

@ -0,0 +1,426 @@
// Copyright (c) Microsoft Corporation. All Rights Reserved
import "dxgi.idl";
cpp_quote("#include <winapifamily.h>")
#pragma region Desktop Family
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
[
object,
uuid( ea9dbf1a-c88e-4486-854a-98aa0138f30c ),
local,
pointer_default(unique)
]
interface IDXGIDisplayControl :
IUnknown
{
BOOL IsStereoEnabled();
void SetStereoEnabled(BOOL enabled);
};
//--------------------------------------------------------------------------------------------------------
// IDXGIOutputDuplication structures
//--------------------------------------------------------------------------------------------------------
typedef struct DXGI_OUTDUPL_MOVE_RECT
{
POINT SourcePoint;
RECT DestinationRect;
} DXGI_OUTDUPL_MOVE_RECT;
typedef struct DXGI_OUTDUPL_DESC
{
DXGI_MODE_DESC ModeDesc;
DXGI_MODE_ROTATION Rotation;
BOOL DesktopImageInSystemMemory;
} DXGI_OUTDUPL_DESC;
typedef struct DXGI_OUTDUPL_POINTER_POSITION
{
POINT Position;
BOOL Visible;
} DXGI_OUTDUPL_POINTER_POSITION;
typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE
{
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
} DXGI_OUTDUPL_POINTER_SHAPE_TYPE;
typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO
{
UINT Type;
UINT Width;
UINT Height;
UINT Pitch;
POINT HotSpot;
} DXGI_OUTDUPL_POINTER_SHAPE_INFO;
typedef struct DXGI_OUTDUPL_FRAME_INFO
{
LARGE_INTEGER LastPresentTime;
LARGE_INTEGER LastMouseUpdateTime;
UINT AccumulatedFrames;
BOOL RectsCoalesced;
BOOL ProtectedContentMaskedOut;
DXGI_OUTDUPL_POINTER_POSITION PointerPosition;
UINT TotalMetadataBufferSize;
UINT PointerShapeBufferSize;
} DXGI_OUTDUPL_FRAME_INFO;
//--------------------------------------------------------------------------------------------------------
// IDXGIOutputDuplication interface
//--------------------------------------------------------------------------------------------------------
[
object,
uuid(191cfac3-a341-470d-b26e-a864f428319c),
local,
pointer_default(unique)
]
interface IDXGIOutputDuplication :
IDXGIObject
{
void GetDesc([out, annotation ("_Out_")] DXGI_OUTDUPL_DESC* pDesc);
HRESULT AcquireNextFrame([in, annotation ("_In_")] UINT TimeoutInMilliseconds,
[out, annotation("_Out_")] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,
[out, annotation("_Out_")] IDXGIResource** ppDesktopResource);
HRESULT GetFrameDirtyRects([in, annotation("_In_")] UINT DirtyRectsBufferSize,
[out, annotation("_Out_writes_bytes_to_(DirtyRectsBufferSize, *pDirtyRectsBufferSizeRequired)")] RECT* pDirtyRectsBuffer,
[out, annotation("_Out_")] UINT* pDirtyRectsBufferSizeRequired);
HRESULT GetFrameMoveRects([in, annotation("_In_")] UINT MoveRectsBufferSize,
[out, annotation("_Out_writes_bytes_to_(MoveRectsBufferSize, *pMoveRectsBufferSizeRequired)")] DXGI_OUTDUPL_MOVE_RECT* pMoveRectBuffer,
[out, annotation("_Out_")] UINT* pMoveRectsBufferSizeRequired);
HRESULT GetFramePointerShape([in, annotation("_In_")] UINT PointerShapeBufferSize,
[out, annotation("_Out_writes_bytes_to_(PointerShapeBufferSize, *pPointerShapeBufferSizeRequired)")] void* pPointerShapeBuffer,
[out, annotation("_Out_")] UINT* pPointerShapeBufferSizeRequired,
[out, annotation("_Out_")] DXGI_OUTDUPL_POINTER_SHAPE_INFO* pPointerShapeInfo);
HRESULT MapDesktopSurface([out, annotation("_Out_")] DXGI_MAPPED_RECT* pLockedRect);
HRESULT UnMapDesktopSurface();
HRESULT ReleaseFrame();
};
cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
#pragma endregion
#pragma region App Family
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)")
typedef enum DXGI_ALPHA_MODE
{
DXGI_ALPHA_MODE_UNSPECIFIED = 0,
DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
DXGI_ALPHA_MODE_STRAIGHT = 2,
DXGI_ALPHA_MODE_IGNORE = 3,
DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff
} DXGI_ALPHA_MODE;
[
object,
uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2),
local,
pointer_default(unique)
]
interface IDXGISurface2 :
IDXGISurface1
{
HRESULT GetResource([in, annotation("_In_")] REFIID riid,
[out, annotation("_Out_")] void **ppParentResource,
[out, annotation("_Out_")] UINT *pSubresourceIndex);
};
[
object,
uuid(30961379-4609-4a41-998e-54fe567ee0c1),
local,
pointer_default(unique)
]
interface IDXGIResource1 :
IDXGIResource
{
HRESULT CreateSubresourceSurface(
UINT index,
[out, annotation("_Out_")] IDXGISurface2 **ppSurface );
HRESULT CreateSharedHandle(
[in, annotation("_In_opt_")] const SECURITY_ATTRIBUTES *pAttributes,
[in, annotation("_In_")] DWORD dwAccess,
[in, annotation("_In_opt_")] LPCWSTR lpName,
[out, annotation("_Out_")] HANDLE *pHandle);
};
typedef enum _DXGI_OFFER_RESOURCE_PRIORITY
{
DXGI_OFFER_RESOURCE_PRIORITY_LOW=1,
DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
DXGI_OFFER_RESOURCE_PRIORITY_HIGH,
} DXGI_OFFER_RESOURCE_PRIORITY;
[
object,
uuid( 05008617-fbfd-4051-a790-144884b4f6a9 ),
local,
pointer_default(unique)
]
interface IDXGIDevice2 :
IDXGIDevice1
{
HRESULT OfferResources(
[in, annotation("_In_")] UINT NumResources,
[in, size_is(NumResources), annotation("_In_reads_(NumResources)")] IDXGIResource *const *ppResources,
[in, annotation("_In_")] DXGI_OFFER_RESOURCE_PRIORITY Priority);
HRESULT ReclaimResources(
[in, annotation("_In_")] UINT NumResources,
[in, size_is(NumResources), annotation("_In_reads_(NumResources)")] IDXGIResource *const *ppResources,
[out, size_is(NumResources), annotation("_Out_writes_all_opt_(NumResources)")] BOOL *pDiscarded);
HRESULT EnqueueSetEvent( [in, annotation("_In_")] HANDLE hEvent );
};
const UINT DXGI_ENUM_MODES_STEREO = 4UL;
const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 8UL;
const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000L;
const DWORD DXGI_SHARED_RESOURCE_WRITE = 1;
typedef struct DXGI_MODE_DESC1
{
UINT Width;
UINT Height;
DXGI_RATIONAL RefreshRate;
DXGI_FORMAT Format;
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
DXGI_MODE_SCALING Scaling;
BOOL Stereo;
} DXGI_MODE_DESC1;
//--------------------------------------------------------------------------------------------------------
// IDXGISwapchain1 structures
//--------------------------------------------------------------------------------------------------------
typedef enum DXGI_SCALING
{
DXGI_SCALING_STRETCH = 0,
DXGI_SCALING_NONE = 1,
} DXGI_SCALING;
typedef struct DXGI_SWAP_CHAIN_DESC1
{
UINT Width;
UINT Height;
DXGI_FORMAT Format;
BOOL Stereo;
DXGI_SAMPLE_DESC SampleDesc;
DXGI_USAGE BufferUsage;
UINT BufferCount;
DXGI_SCALING Scaling;
DXGI_SWAP_EFFECT SwapEffect;
DXGI_ALPHA_MODE AlphaMode;
UINT Flags; // DXGI_SWAP_CHAIN_FLAG
} DXGI_SWAP_CHAIN_DESC1;
typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC
{
DXGI_RATIONAL RefreshRate;
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
DXGI_MODE_SCALING Scaling;
BOOL Windowed;
} DXGI_SWAP_CHAIN_FULLSCREEN_DESC;
typedef struct DXGI_PRESENT_PARAMETERS
{
UINT DirtyRectsCount;
RECT* pDirtyRects;
RECT* pScrollRect;
POINT* pScrollOffset;
} DXGI_PRESENT_PARAMETERS;
//--------------------------------------------------------------------------------------------------------
// IDXGISwapchain1 interface
//--------------------------------------------------------------------------------------------------------
[
object,
uuid( 790a45f7-0d42-4876-983a-0a55cfe6f4aa ),
local,
pointer_default(unique)
]
interface IDXGISwapChain1 :
IDXGISwapChain
{
HRESULT GetDesc1( [out, annotation("_Out_")] DXGI_SWAP_CHAIN_DESC1 *pDesc );
HRESULT GetFullscreenDesc( [out, annotation("_Out_")] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc );
HRESULT GetHwnd( [out, annotation("_Out_")] HWND *pHwnd);
HRESULT GetCoreWindow (
[in, annotation("_In_")] REFIID refiid,
[out, annotation("_Out_")] void **ppUnk);
HRESULT Present1(
[in] UINT SyncInterval,
[in] UINT PresentFlags,
[in, annotation("_In_")] const DXGI_PRESENT_PARAMETERS* pPresentParameters );
BOOL IsTemporaryMonoSupported();
HRESULT GetRestrictToOutput( [out, annotation("_Out_")] IDXGIOutput** ppRestrictToOutput );
HRESULT SetBackgroundColor( [in, annotation("_In_")] const DXGI_RGBA* pColor );
HRESULT GetBackgroundColor( [out, annotation("_Out_")] DXGI_RGBA* pColor );
HRESULT SetRotation( [in, annotation("_In_")] DXGI_MODE_ROTATION Rotation );
HRESULT GetRotation( [out, annotation("_Out_")] DXGI_MODE_ROTATION* pRotation );
};
//--------------------------------------------------------------------------------------------------------
// IDXGIFactory2 interface
//--------------------------------------------------------------------------------------------------------
[
object,
uuid( 50c83a1c-e072-4c48-87b0-3630fa36a6d0 ),
local,
pointer_default(unique)
]
interface IDXGIFactory2 :
IDXGIFactory1
{
BOOL IsWindowedStereoEnabled();
HRESULT CreateSwapChainForHwnd(
[in, annotation("_In_")] IUnknown *pDevice,
[in, annotation("_In_")] HWND hWnd,
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
[in, annotation("_In_opt_")] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
[out, annotation("_Out_")] IDXGISwapChain1 **ppSwapChain );
HRESULT CreateSwapChainForCoreWindow(
[in, annotation("_In_")] IUnknown *pDevice,
[in, annotation("_In_")] IUnknown *pWindow,
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
[out, annotation("_Out_")] IDXGISwapChain1 **ppSwapChain );
HRESULT GetSharedResourceAdapterLuid(
[annotation("_In_")] HANDLE hResource,
[annotation("_Out_")] LUID* pLuid);
HRESULT RegisterStereoStatusWindow(
[in, annotation("_In_")] HWND WindowHandle,
[in, annotation("_In_")] UINT wMsg,
[out, annotation("_Out_")] DWORD *pdwCookie );
HRESULT RegisterStereoStatusEvent(
[in, annotation("_In_")] HANDLE hEvent,
[out, annotation("_Out_")] DWORD *pdwCookie );
void UnregisterStereoStatus(
[in, annotation("_In_")] DWORD dwCookie );
HRESULT RegisterOcclusionStatusWindow(
[in, annotation("_In_")] HWND WindowHandle,
[in, annotation("_In_")] UINT wMsg,
[out, annotation("_Out_")] DWORD *pdwCookie );
HRESULT RegisterOcclusionStatusEvent(
[in, annotation("_In_")] HANDLE hEvent,
[out, annotation("_Out_")] DWORD *pdwCookie );
void UnregisterOcclusionStatus(
[in, annotation("_In_")] DWORD dwCookie );
HRESULT CreateSwapChainForComposition(
[in, annotation("_In_")] IUnknown *pDevice,
[in, annotation("_In_")] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
[in, annotation("_In_opt_")] IDXGIOutput *pRestrictToOutput,
[out, annotation("_Outptr_")] IDXGISwapChain1 **ppSwapChain );
};
//--------------------------------------------------------------------------------------------------------
// IDXGIAdapter2 structures
//--------------------------------------------------------------------------------------------------------
typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY
{
DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY
{
DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
typedef struct DXGI_ADAPTER_DESC2
{
WCHAR Description[128];
UINT VendorId;
UINT DeviceId;
UINT SubSysId;
UINT Revision;
SIZE_T DedicatedVideoMemory;
SIZE_T DedicatedSystemMemory;
SIZE_T SharedSystemMemory;
LUID AdapterLuid;
UINT Flags;
DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
} DXGI_ADAPTER_DESC2;
//--------------------------------------------------------------------------------------------------------
// IDXGIAdapter2 interface
//--------------------------------------------------------------------------------------------------------
[
object,
uuid(0AA1AE0A-FA0E-4B84-8644-E05FF8E5ACB5),
local,
pointer_default(unique)
]
interface IDXGIAdapter2 :
IDXGIAdapter1
{
HRESULT GetDesc2( [out, annotation("_Out_")] DXGI_ADAPTER_DESC2 *pDesc);
};
//--------------------------------------------------------------------------------------------------------
// IDXGIOutput1
//--------------------------------------------------------------------------------------------------------
[
object,
uuid(00cddea8-939b-4b83-a340-a685226666cc),
local,
pointer_default(unique)
]
interface IDXGIOutput1 :
IDXGIOutput
{
HRESULT GetDisplayModeList1(
[in] DXGI_FORMAT EnumFormat,
[in] UINT Flags,
[in, out, annotation("_Inout_")] UINT * pNumModes,
[out, annotation("_Out_writes_to_opt_(*pNumModes,*pNumModes)")] DXGI_MODE_DESC1 *pDesc);
HRESULT FindClosestMatchingMode1(
[in, annotation("_In_")] const DXGI_MODE_DESC1 *pModeToMatch,
[out, annotation("_Out_")] DXGI_MODE_DESC1 *pClosestMatch,
[in, annotation("_In_opt_")] IUnknown * pConcernedDevice );
HRESULT GetDisplaySurfaceData1( [in, annotation("_In_")] IDXGIResource *pDestination );
HRESULT DuplicateOutput([in, annotation("_In_")] IUnknown *pDevice,
[out, annotation("_Out_")] IDXGIOutputDuplication **ppOutputDuplication);
};
cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */")
#pragma endregion
cpp_quote( "DEFINE_GUID(IID_IDXGIDisplayControl,0xea9dbf1a,0xc88e,0x4486,0x85,0x4a,0x98,0xaa,0x01,0x38,0xf3,0x0c);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIOutputDuplication,0x191cfac3,0xa341,0x470d,0xb2,0x6e,0xa8,0x64,0xf4,0x28,0x31,0x9c);" )
cpp_quote( "DEFINE_GUID(IID_IDXGISurface2,0xaba496dd,0xb617,0x4cb8,0xa8,0x66,0xbc,0x44,0xd7,0xeb,0x1f,0xa2);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIResource1,0x30961379,0x4609,0x4a41,0x99,0x8e,0x54,0xfe,0x56,0x7e,0xe0,0xc1);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIDevice2,0x05008617,0xfbfd,0x4051,0xa7,0x90,0x14,0x48,0x84,0xb4,0xf6,0xa9);" )
cpp_quote( "DEFINE_GUID(IID_IDXGISwapChain1,0x790a45f7,0x0d42,0x4876,0x98,0x3a,0x0a,0x55,0xcf,0xe6,0xf4,0xaa);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIFactory2,0x50c83a1c,0xe072,0x4c48,0x87,0xb0,0x36,0x30,0xfa,0x36,0xa6,0xd0);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIAdapter2,0x0AA1AE0A,0xFA0E,0x4B84,0x86,0x44,0xE0,0x5F,0xF8,0xE5,0xAC,0xB5);" )
cpp_quote( "DEFINE_GUID(IID_IDXGIOutput1,0x00cddea8,0x939b,0x4b83,0xa3,0x40,0xa6,0x85,0x22,0x66,0x66,0xcc);" )

1022
extras/no_sal2.h Normal file

File diff suppressed because it is too large Load Diff

2978
extras/sal.h Normal file

File diff suppressed because it is too large Load Diff

88
extras/winapifamily.h Normal file
View File

@ -0,0 +1,88 @@
/*
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
winapifamily.h
Abstract:
Master include file for API family partitioning.
*/
#ifndef _INC_WINAPIFAMILY
#define _INC_WINAPIFAMILY
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
#pragma once
#endif // defined(_MSC_VER) && !defined(MOFCOMP_PASS)
/*
* Windows APIs can be placed in a partition represented by one of the below bits. The
* WINAPI_FAMILY value determines which partitions are available to the client code.
*/
#define WINAPI_PARTITION_DESKTOP 0x00000001
#define WINAPI_PARTITION_APP 0x00000002
/*
* A family may be defined as the union of multiple families. WINAPI_FAMILY should be set
* to one of these values.
*/
#define WINAPI_FAMILY_APP WINAPI_PARTITION_APP
#define WINAPI_FAMILY_DESKTOP_APP (WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_APP)
/*
* A constant that specifies which code is available to the program's target runtime platform.
* By default we use the 'desktop app' family which places no restrictions on the API surface.
* To restrict the API surface to just the App API surface, define WINAPI_FAMILY to WINAPI_FAMILY_APP.
*/
#ifndef WINAPI_FAMILY
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
#endif
/* Macro to determine if a partition is enabled */
#define WINAPI_FAMILY_PARTITION(Partition) ((WINAPI_FAMILY & Partition) == Partition)
/* Macro to determine if only one partition is enabled from a set */
#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)
/*
* Macro examples:
* The following examples are typical macro usage for enabling/restricting access to header code based
* on the target runtime platform. The examples assume a correct setting of the WINAPI_FAMILY macro.
*
* App programs:
* Explicitly set WINAPI_FAMILY to WINAPI_PARTITION_APP (cannot access DESKTOP partition)
* Desktop programs:
* Leave WINAPI_FAMILY set to the default above (currently WINAPI_FAMILY_DESKTOP_APP)
*
* Note: Other families and partitions may be added in the future.
*
*
* The WINAPI_FAMILY_PARTITION macro:
* Code-block is available to programs that have access to specified partition.
*
* Example: Available to App and Desktop programs
* #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
*
* Example: Available to Desktop programs
* #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
*
*
* The WINAPI_FAMILY_ONE_PARTITION macro:
* Code-block is available to programs that have access to specified parition, but not others in the partition set.
*
* Example: Available only to App programs
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY, WINAPI_PARTITION_APP )
*
* Example: Available only to Desktop programs
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY, WINAPI_PARTITION_DESKTOP )
*
* Example: Available to App, but not Desktop programs
* #if WINAPI_FAMILY_ONE_PARTITION( WINAPI_FAMILY_DESKTOP_APP, WINAPI_PARTITION_APP )
*/
#endif /* !_INC_WINAPIFAMILY */

View File

@ -4,12 +4,15 @@ Browse "Найти"
BuildingMP4Dialog "Создаю MP4"
Cancel "Отменить"
ClearHotkey "Сбросить"
Color "Цвет"
Default "По умолчанию"
DeleteConfirm "Вы уверены, что хотите удалить выбранное?"
Desktop "Рабочий стол"
Disable "Отключено"
EndingDelay "Завершение стрима с задержкой..."
EnterName "Пожалуйста, введите имя"
GlobalSources "Глобальные источники"
IncompatibleModules "В OBS обнаружены несовместимые модули внедрения. Убедитесь что OBS добавлен в список исключения таких программ захвата как DXTory, FRAPS и т.д.\r\n\r\nЧтобы изменения вступили в силу, после изменения настроек исключений может понадобиться перезапуск OBS и всех программ захвата, использующих внедрение в процесс."
MicrophoneFailure "Ошибка инициализации микрофона. Возможно, он не подключен или его использует другое приложение."
MoveDown "Вниз"
MoveToBottom "Переместить вниз"
@ -35,6 +38,8 @@ Connection.InvalidStream "Неверный stream channel или playpath"
DeleteConfirm.Title "Удалить выбранное?"
EndingDelay.TimeLeft "Осталось: $1"
GlobalSources.DeleteConfirm "Если вы удалите глобальный источник, он будет удален из всех сцен, в которых он используется. Вы уверены, что хотите продолжить?"
Listbox.Add "Добавить $1"
@ -47,8 +52,12 @@ Listbox.SetHotkey "Добавить горячую клавишу"
MainMenu.File "Ф&айл"
MainMenu.Help "(&Р)Помощь"
MainMenu.Settings "(&Ы)Настройки"
MainMenu.File.Exit "(&Ч)Выход"
MainMenu.Help.Contents "&Содержание"
MainMenu.Help.VisitWebsite "Посетить веб-сайт"
MainMenu.Settings.OpenConfigFolder "&(C)Открыть папку конфигурации"
MainMenu.Settings.OpenLogFolder "&(Д)Открыть папку журнала"
@ -64,7 +73,6 @@ MainWindow.StopStream "Закончить"
MainWindow.StopTest "Закончить"
MainWindow.TestStream "Предпросмотр"
Plugins.Configure "Конфигурация"
Plugins.Description "Описание:"
Plugins.Filename "Имя файла:"
@ -94,12 +102,19 @@ Settings.Video "Видео"
Settings.Advanced.DisableD3DCompatibilityMode "Отключить совместимость с D3D"
Settings.Advanced.DisableD3DCompatibilityModeTooltip "Отключает режим совместимости GPU с D3D"
Settings.Advanced.Network "Сеть"
Settings.Advanced.UnlockHigherFPS "Разрешить использование 61-120 FPS в настройках видео"
Settings.Advanced.UseCBR "Использовать постоянный битрейт"
Settings.Advanced.UseHighQualityResampling "Использовать высококачественное преобразование звука"
Settings.Advanced.UseHighQualityResamplingTooltip "Когда звуковая подсистема принудительно использует высококачественное преобразование звука, то вместо линейной интерполяции используется синусоидальная. Слегка увеличивает нагрузку на CPU."
Settings.Advanced.UseMultithreadedOptimizations "Использовать многопоточную оптимизацию"
Settings.Advanced.UseSyncFix "Исправлять Видео / Аудио синхронизацию"
Settings.Advanced.UseSyncFixTooltip "В редких случаях у определенных процессоров и/или материнских плат возникают ошибки с таймингами. Использование данного исправления гарантирует, что аудио / видео синхронизация всегда будет корректна, но менее точна чет при правильных таймингах. Не используйте это если не уверенны что у вас есть данная ошибка."
Settings.Advanced.VideoEncoderCPUTradeoff "x264 CPU пресет:"
Settings.Advanced.VideoEncoderCPUTradeoff "x264 CPU предустановка:"
Settings.Advanced.VideoEncoderCPUTradeoffToolTip "Увеличение этого значения уменьшит загрузку процессора в ущерб качеству. Уменьшение этого значения повысит качество, но загрузка процессора увеличится.\r\n\r\nРекомендуется: Very Fast"
Settings.Advanced.VideoEncoderSettings "Пользовательские настройки энкодера x264"
Settings.Advanced.VideoEncoderSettingsTooltip "Позволяет установить пользовательские настройки энкодера x264. В виде [параметр] = [значение] (например, \"VBV-maxrate = 1000 VBV-BUFSIZE = 1000 \")."
Settings.Advanced.ProcessPriority "Приоритет процесса"
Settings.Advanced.PresetWarning "Внимание! Изменение настроек х264 может оказывать негативное влияние на качество трансляции и загрузку CPU.\r\n\r\nНе меняйте эти настройки, если вы не имеете полного представления о том, как они влияют на трансляцию.\r\n\r\nОстерегайтесь советов, которые предлагают изменять этот параметр.\r\n\r\nРедко когда может понадобиться менять значение по умолчанию (veryfast).\r\n\r\nУверены что хотите изменить настройки?"
Settings.Audio.Device "Микрофон:"
Settings.Audio.ForceMicMono "Принудительный режим моно:"
@ -131,8 +146,9 @@ Settings.General.Restart "Для смены языка необходим
Settings.Publish.AutoReconnect "Автопереподключение:"
Settings.Publish.AutoReconnectTimeout "Задержка автопереподключения:"
Settings.Publish.ChannelName "Имя канала:"
Settings.Publish.ChannelName "Имя канала:"
Settings.Publish.DashboardLink "Ссылка на дэшборд (если есть):"
Settings.Publish.Delay "Задержка (секунд):"
Settings.Publish.Mode "Режим:"
Settings.Publish.Password "Пароль (если имеется):"
Settings.Publish.Playpath "Play Path/Stream Key (если имеется):"
@ -152,21 +168,36 @@ Settings.Video.DisableAero "Отключать Aero при запуск
Settings.Video.DisableAeroTooltip "Рекомендуется отключить Aero при использовании программного захвата."
Settings.Video.Downscale "Масштабировать разрешение:"
Settings.Video.DownscaleTooltip "Масштабирования может улучшить качество видео за счет разрешения."
Settings.Video.FPS "Кадры в секунду (FPS):"
Settings.Video.FPS "Кадров в секунду (FPS):"
Settings.Video.Monitor "Монитор:"
Settings.Video.Resolution "Базовое разрешение:"
Sources.BitmapSource "Изображение"
Sources.GameCaptureSource "Игровой захват [экспериментальный]"
Sources.GlobalSource "Глобальный источник"
Sources.SoftwareCaptureSource "Программный источник захвата"
Sources.TextSource "Текст"
Sources.TransitionSource "Слайд-шоу"
Sources.BitmapSource.Color "Цвет:"
Sources.BitmapSource.Empty "Изображение не найдено. Пожалуйста, найдите и выберите картинку."
Sources.BitmapSource.Opacity "Прозрачность:"
Sources.GameCaptureSource.Application "Приложение:"
Sources.GameCaptureSource.PluginDescription "Захватывает кадры напрямую из игр и графических приложений посредством внедрения в приложение и считывания кадров как только они появляются."
Sources.GameCaptureSource.PluginName "Плагин захвата игр"
Sources.GameCaptureSource.Requires32bit "Эти приложения требуют 32-битной версии OBS для захвата:"
Sources.GameCaptureSource.Requires64bit "Эти приложения требуют 64-битной версии OBS для захвата:"
Sources.GameCaptureSource.RequiresAdmin "Для захвата этого приложения требуются привилегии Администратора (запустите OBS от имени Администратора):"
Sources.GameCaptureSource.StretchToScreen "Растянуть изображение по размеру экрана"
Sources.SoftwareCaptureSource.Blend "Смешивание (1-100):"
Sources.SoftwareCaptureSource.CaptureLayered "Захватывать многослойные окна"
Sources.SoftwareCaptureSource.CaptureLayeredTip "Захватывать программы использующие обложки или прозрачные/'слоёные' окна при отключенном Aero. Может вызывать моргание курсора. Используйте только если не получается захватить какую-то конкретную программу."
Sources.SoftwareCaptureSource.ColorKey "Color Key"
Sources.SoftwareCaptureSource.EntireWindow "Все окно"
Sources.SoftwareCaptureSource.InnerWindow "Окно без рамки"
Sources.SoftwareCaptureSource.InvertMouseOnClick "Инвертировать цвет курсора при клике"
Sources.SoftwareCaptureSource.Monitor "Монитор:"
Sources.SoftwareCaptureSource.MonitorCapture "Захват экрана"
Sources.SoftwareCaptureSource.MonitorCaptureTooltip "Отключите Aero в настройках видео, чтобы максимизировать значение FPS"
@ -175,16 +206,40 @@ Sources.SoftwareCaptureSource.Position "Положение:"
Sources.SoftwareCaptureSource.Refresh "Обновить"
Sources.SoftwareCaptureSource.RegionCapture "Конкретная область"
Sources.SoftwareCaptureSource.RegionWindowText "Нажмите клавишу Enter, Esc или щелкните за пределами этого прямоугольника для завершения."
Sources.SoftwareCaptureSource.Select "Выбрать"
Sources.SoftwareCaptureSource.SelectRegion "Выбрать область"
Sources.SoftwareCaptureSource.SelectRegionTooltip "При выборе области захвата изменение размера прямоугольника производится путем захвата за край."
Sources.SoftwareCaptureSource.Similarity "Сходство (1-100):"
Sources.SoftwareCaptureSource.Size "Размер:"
Sources.SoftwareCaptureSource.SpillReduction "Уменьшение охвата:"
Sources.SoftwareCaptureSource.UseColorKey "Использовать Color Key:"
Sources.SoftwareCaptureSource.Window "Процесс:"
Sources.SoftwareCaptureSource.WindowCapture "Захват окна"
Sources.SoftwareCaptureSource.WindowCaptureTooltip "Aero может быть включено при использовании только функции захвата окна. Изображение не обновляется, если целевое окно свернуто. Захват с помощью этой функции обычно быстрее, чем захват всего экрана или области экрана. Если Aero включено, окна, перекрывающие целевое окно, не будут видны."
Sources.SoftwareCaptureSource.WindowMinimized "Окно минимизировано"
Sources.SoftwareCaptureSource.WindowNotFound "Окно не найдено"
Sources.TextSource.Align "Выровнять:"
Sources.TextSource.Bold "Жирный"
Sources.TextSource.Center "По центру"
Sources.TextSource.EnterText "Свой Текст"
Sources.TextSource.FileNotFound "Не удалось открыть файл '$1'"
Sources.TextSource.Font "Шрифт:"
Sources.TextSource.FontNotFound "Шрифт '$1' не найден"
Sources.TextSource.FontSize "Размер шрифта:"
Sources.TextSource.Italic "Курсив"
Sources.TextSource.Left "Слева"
Sources.TextSource.Right "Справа"
Sources.TextSource.ScrollSpeed "Скорость прокрутки:"
Sources.TextSource.Size "Размер:"
Sources.TextSource.Underline "Подчеркнутый"
Sources.TextSource.UseCustomExtents "Свои границы текста"
Sources.TextSource.UseTextExtents "Свои границы текста"
Sources.TextSource.UseTextFromFile "Использовать текст из файла (поддерживается UTF-8)"
Sources.TextSource.VerticalScript "Вертикально"
Sources.TextSource.Wrap "Перенос"
Sources.TransitionSource.Bitmaps "Изображения:"
Sources.TransitionSource.Empty "Не все картинки будут отображаться"
Sources.TransitionSource.FadeInOnly "Только "Fade In":"
Sources.TransitionSource.FadeInOnly "Только плавное появление:"
Sources.TransitionSource.TimeBetweenBitmaps "Время между показом изображений:"

View File

@ -3,17 +3,28 @@ ClassName "Устройство Видео Захвата"
DeviceSelection "Выбор устройства"
OK "OK"
DeviceSelection.Config "Настройки"
DeviceSelection.Device "Устройство:"
DeviceSelection.ExistsInScene "Источник использующийся этим устройством уже существует."using this device already exists."
DeviceSelection.ExistsSomewhere "Это устройство используется как источник в одной или несколких сценах."
DeviceSelection.FlipImage "Перевернуть Изображение"
DeviceSelection.FPS "FPS:"
DeviceSelection.GlobalExists "Глобальный источник использующий это устройство уже существует."
DeviceSelection.InvalidResolution "Неверное разрешение"
DeviceSelection.Refresh "Обновить"
DeviceSelection.Resolution "Разрешение:"
DeviceSelection.Blend "Смешивание (1-1000):"
DeviceSelection.ChromaKey "Chroma Key"
DeviceSelection.Color "Цвет:"
DeviceSelection.Config "Настройки"
DeviceSelection.CustomResolution "Изменить разрешение:"
DeviceSelection.Device "Устройство:"
DeviceSelection.ExistsInScene "Источник использующийся этим устройством уже существует."using this device already exists."
DeviceSelection.ExistsSomewhere "Это устройство используется как источник в одной или нескольких сценах."
DeviceSelection.FlipImage "Перевернуть Изображение"
DeviceSelection.FlipImageHorizontal "Отразить изображение по горизонтали"
DeviceSelection.FPS "FPS:"
DeviceSelection.GlobalExists "Глобальный источник использующий это устройство уже существует."
DeviceSelection.InvalidResolution "Неверное разрешение"
DeviceSelection.Opacity "Прозрачность"
DeviceSelection.PreferredType "Использовать привилегированный тип вывода"
DeviceSelection.Refresh "Обновить"
DeviceSelection.Resolution "Разрешение:"
DeviceSelection.Select "Выбор"
DeviceSelection.Similarity "Схожесть (1-1000):"
DeviceSelection.SpillReduction "Уменьшение охвата (1-1000):"
DeviceSelection.UnsupportedResolution "Это устройство не поддерживает такое разрешение"
DeviceSelection.UseChromaKey "Использовать Chroma Key"
Plugin.Description "Этот плагин позволяет добавлять DirectShow видео устройства (вебкамеры, карты захвата, и т.д.) на сцену."
Plugin.Name "DirectShow Video Device Plugin"
Plugin.Description "Этот плагин позволяет добавлять DirectShow видео устройства (веб-камеры, карты захвата, и т.д.) на сцену."
Plugin.Name "Плагин DirectShow видео устройств"