updated hotkey code, settings tweaks, added hotkey for stopping stream, and got rid of the text message in software capture

master
jim 2012-09-30 23:14:13 -07:00
parent a623c310b1
commit 9271b73d93
21 changed files with 660 additions and 173 deletions

62
OBS.rc
View File

@ -85,11 +85,14 @@ BEGIN
RTEXT "Settings.Publish.AutoReconnectTimeout",IDC_AUTORECONNECT_TIMEOUT_STATIC,7,115,133,8
EDITTEXT IDC_AUTORECONNECT_TIMEOUT_EDIT,143,112,40,14,ES_AUTOHSCROLL | ES_READONLY
CONTROL "",IDC_AUTORECONNECT_TIMEOUT,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,185,112,11,14
LTEXT "Settings.Info",IDC_INFO,7,171,408,37,NOT WS_VISIBLE
LTEXT "Settings.Info",IDC_INFO,7,197,408,37,NOT WS_VISIBLE
CONTROL "Settings.Publish.SaveToFile",IDC_SAVETOFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,132,145,10,WS_EX_RIGHT
RTEXT "Settings.Publish.SavePath",IDC_SAVEPATH_STATIC,7,150,133,8
EDITTEXT IDC_SAVEPATH,143,147,148,14,ES_AUTOHSCROLL
PUSHBUTTON "Browse",IDC_BROWSE,295,147,63,14
RTEXT "Settings.Publish.StopStreamHotkey",IDC_STOPSTREAMHOTKEY_STATIC,7,168,133,8
CONTROL "カスタム1",IDC_STOPSTREAMHOTKEY,"OBSHotkeyControlEx",WS_TABSTOP,144,165,80,14
PUSHBUTTON "ClearHotkey",IDC_CLEARHOTKEY,225,165,66,14
END
IDD_SETTINGS_ENCODING DIALOGEX 0, 0, 427, 287
@ -97,24 +100,21 @@ STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Settings.Encoding.Video",IDC_STATIC,4,2,417,64
GROUPBOX "Settings.Encoding.Video",IDC_STATIC,4,2,417,50
RTEXT "Settings.Encoding.Video.Quality",IDC_STATIC,10,15,138,8
COMBOBOX IDC_QUALITY,152,13,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Video.Tradeoff",IDC_STATIC,221,15,128,8
COMBOBOX IDC_PRESET,354,13,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Video.MaxBitRate",IDC_STATIC,10,31,138,8
EDITTEXT IDC_MAXBITRATE,152,29,61,14,ES_AUTOHSCROLL | ES_NUMBER
RTEXT "Settings.Encoding.Video.BufferSize",IDC_STATIC,221,31,128,8
EDITTEXT IDC_BUFFERSIZE,354,29,61,14,ES_AUTOHSCROLL | ES_NUMBER
GROUPBOX "Settings.Encoding.Audio",IDC_STATIC,4,73,417,50
RTEXT "Settings.Encoding.Audio.Codec",IDC_STATIC,10,89,138,8
COMBOBOX IDC_AUDIOCODEC,152,87,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Bitrate",IDC_STATIC,221,89,128,8
COMBOBOX IDC_AUDIOBITRATE,354,87,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Format",IDC_STATIC,10,105,138,8
COMBOBOX IDC_AUDIOFORMAT,152,103,264,62,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
LTEXT "Settings.Info",IDC_INFO,4,131,417,37,NOT WS_VISIBLE
CONTROL "Settings.Encoding.Video.UseI444",IDC_USEI444,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | NOT WS_VISIBLE | WS_TABSTOP,10,48,151,10,WS_EX_RIGHT
GROUPBOX "Settings.Encoding.Audio",IDC_STATIC,4,58,417,50
RTEXT "Settings.Encoding.Audio.Codec",IDC_STATIC,10,74,138,8
COMBOBOX IDC_AUDIOCODEC,152,72,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Bitrate",IDC_STATIC,221,74,128,8
COMBOBOX IDC_AUDIOBITRATE,354,72,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Format",IDC_STATIC,10,90,138,8
COMBOBOX IDC_AUDIOFORMAT,152,88,264,62,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
LTEXT "Settings.Info",IDC_INFO,4,116,417,37,NOT WS_VISIBLE
END
IDD_SETTINGS_VIDEO DIALOGEX 0, 0, 427, 287
@ -161,14 +161,14 @@ BEGIN
RTEXT "Settings.Audio.Device",IDC_STATIC,4,12,138,8
COMBOBOX IDC_MICDEVICES,144,10,226,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Settings.Audio.PushToTalkHotkey",IDC_PUSHTOTALK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,31,143,10,WS_EX_RIGHT
CONTROL "",IDC_PUSHTOTALKHOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,159,29,80,14
CONTROL "",IDC_MUTEMICHOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,160,46,80,14
CONTROL "",IDC_MUTEDESKTOPHOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,160,64,80,14
RTEXT "Settings.Audio.MuteMicHotkey",IDC_STATIC,4,48,138,8
RTEXT "Settings.Audio.MuteDesktopHotkey",IDC_STATIC,4,66,138,8
PUSHBUTTON "ClearHotkey",IDC_CLEARPUSHTOTALK,240,29,73,14
PUSHBUTTON "ClearHotkey",IDC_CLEARMUTEMIC,240,46,73,14
PUSHBUTTON "ClearHotkey",IDC_CLEARMUTEDESKTOP,240,64,73,14
PUSHBUTTON "ClearHotkey",IDC_CLEARPUSHTOTALK,241,29,73,14
PUSHBUTTON "ClearHotkey",IDC_CLEARMUTEMIC,241,46,73,14
PUSHBUTTON "ClearHotkey",IDC_CLEARMUTEDESKTOP,241,64,73,14
CONTROL "カスタム1",IDC_PUSHTOTALKHOTKEY,"OBSHotkeyControlEx",WS_TABSTOP,160,29,80,14
CONTROL "カスタム1",IDC_MUTEMICHOTKEY,"OBSHotkeyControlEx",WS_TABSTOP,160,46,80,14
CONTROL "カスタム1",IDC_MUTEDESKTOPHOTKEY,"OBSHotkeyControlEx",WS_TABSTOP,160,64,80,14
END
IDD_ENTERNAME DIALOGEX 0, 0, 265, 49
@ -255,10 +255,10 @@ CAPTION "Scene.Hotkey"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
RTEXT "Scene.Hotkey.Hotkey",IDC_STATIC,7,10,82,8
CONTROL "",IDC_HOTKEY,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,94,7,80,14
DEFPUSHBUTTON "OK",IDOK,130,28,50,14
PUSHBUTTON "Cancel",IDCANCEL,183,28,50,14
PUSHBUTTON "ClearHotkey",IDC_CLEAR,177,7,56,14
CONTROL "カスタム1",IDC_HOTKEY,"OBSHotkeyControlEx",WS_TABSTOP,93,7,80,14
END
IDD_RECONNECTING DIALOGEX 0, 0, 179, 50
@ -274,17 +274,19 @@ IDD_SETTINGS_ADVANCED DIALOGEX 0, 0, 427, 287
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Settings.Video",IDC_STATIC,4,2,418,66
GROUPBOX "Settings.Video",IDC_STATIC,4,2,418,82
CONTROL "Settings.Advanced.VideoEncoderSettings",IDC_USEVIDEOENCODERSETTINGS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,14,203,10
EDITTEXT IDC_VIDEOENCODERSETTINGS,33,29,373,14,ES_AUTOHSCROLL
CONTROL "Settings.Advanced.UseSyncFix",IDC_USESYNCFIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,49,203,10
LTEXT "Settings.Info",IDC_INFO,4,136,418,37,NOT WS_VISIBLE
GROUPBOX "Settings.Advanced.Network",IDC_STATIC,4,73,418,52
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,30,149,10
EDITTEXT IDC_VIDEOENCODERSETTINGS,33,43,373,14,ES_AUTOHSCROLL
CONTROL "Settings.Advanced.UseSyncFix",IDC_USESYNCFIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,63,149,10
LTEXT "Settings.Info",IDC_INFO,4,153,418,37,NOT WS_VISIBLE
GROUPBOX "Settings.Advanced.Network",IDC_STATIC,4,90,418,52
CONTROL "Settings.Advanced.UseSendBuffer",IDC_USESENDBUFFER,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,87,203,10
COMBOBOX IDC_SENDBUFFERSIZE,144,101,158,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Advanced.SendBufferSize",IDC_STATIC,4,103,138,8
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,105,149,10
COMBOBOX IDC_SENDBUFFERSIZE,145,118,158,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Advanced.SendBufferSize",IDC_STATIC,5,120,138,8
RTEXT "Settings.Advanced.VideoEncoderCPUTradeoff",IDC_STATIC,5,14,138,8
COMBOBOX IDC_PRESET,145,12,82,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
@ -429,7 +431,7 @@ IDI_SOUND_DESKTOP_MUTED ICON "ui\\speaker-muted.ico"
// Dialog Info
//
IDD_SETTINGS_ENCODING DLGINIT
IDD_SETTINGS_ADVANCED DLGINIT
BEGIN
IDC_PRESET, 0x403, 8, 0
0x6466, 0x6673, 0x7364, 0x0066,

387
OBSApi/HotkeyControlEx.cpp Normal file
View File

@ -0,0 +1,387 @@
/********************************************************************************
Copyright (C) 2012 Hugh Bailey <obs.jim@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
********************************************************************************/
#include "OBSAPI.h"
struct HotkeyControlExData
{
DWORD hotkeyVK, modifiers;
bool bHasFocus;
long cx,cy;
HFONT hFont;
int fontHeight;
bool bExtendedKey;
void DrawHotkeyControlEx(HWND hwnd, HDC hDC);
};
inline HotkeyControlExData* GetHotkeyControlExData(HWND hwnd)
{
return (HotkeyControlExData*)GetWindowLongPtr(hwnd, 0);
}
LRESULT CALLBACK HotkeyExProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HotkeyControlExData *control;
switch(message)
{
case WM_NCCREATE:
{
CREATESTRUCT *pCreateData = (CREATESTRUCT*)lParam;
SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_STATICEDGE);
control = (HotkeyControlExData*)malloc(sizeof(HotkeyControlExData));
zero(control, sizeof(HotkeyControlExData));
SetWindowLongPtr(hwnd, 0, (LONG_PTR)control);
control->hotkeyVK = 0;
control->modifiers = 0;
control->cx = pCreateData->cx;
control->cy = pCreateData->cy;
control->hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
return TRUE;
}
case WM_CREATE:
{
control = GetHotkeyControlExData(hwnd);
HDC hDC = GetDC(hwnd);
SIZE size;
SelectObject(hDC, control->hFont);
GetTextExtentPoint32(hDC, TEXT("C"), 1, &size);
control->fontHeight = size.cy;
ReleaseDC(hwnd, hDC);
break;
}
case WM_SETFOCUS:
{
control = GetHotkeyControlExData(hwnd);
InvalidateRect(hwnd, NULL, TRUE);
CreateCaret(hwnd, NULL, 0, control->fontHeight);
control->bHasFocus = true;
int x = GetSystemMetrics(SM_CXEDGE);
int y = GetSystemMetrics(SM_CYEDGE);
SetCaretPos(x-1, y);
ShowCaret(hwnd);
break;
}
case WM_KILLFOCUS:
{
control = GetHotkeyControlExData(hwnd);
control->bHasFocus = false;
DestroyCaret();
if(!control->hotkeyVK)
{
control->modifiers = 0;
control->bExtendedKey = false;
}
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case WM_GETDLGCODE:
return DLGC_WANTCHARS | DLGC_WANTARROWS;
case HKM_SETHOTKEY:
{
control = GetHotkeyControlExData(hwnd);
control->hotkeyVK = LOBYTE(wParam);
control->modifiers = HIBYTE(wParam);
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case HKM_GETHOTKEY:
{
control = GetHotkeyControlExData(hwnd);
return MAKEWORD(control->hotkeyVK, control->modifiers);
}
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
{
control = GetHotkeyControlExData(hwnd);
switch(wParam)
{
case VK_RETURN:
case VK_TAB:
case VK_DELETE:
case VK_ESCAPE:
case VK_LWIN:
case VK_RWIN:
case VK_APPS:
if(control->hotkeyVK != 0 || control->modifiers != 0)
{
control->hotkeyVK = 0;
control->modifiers = 0;
control->bExtendedKey = 0;
InvalidateRect(hwnd, NULL, TRUE);
PostMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE), (LPARAM)hwnd);
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
DWORD hotkeyVK = 0;
if(wParam != VK_MENU && wParam != VK_SHIFT && wParam != VK_CONTROL)
hotkeyVK = (DWORD)wParam;
DWORD modifiers = 0;
if((GetKeyState(VK_CONTROL) & 0x8000) != 0)
modifiers |= HOTKEYF_CONTROL;
if((GetKeyState(VK_SHIFT) & 0x8000) != 0)
modifiers |= HOTKEYF_SHIFT;
if((GetKeyState(VK_MENU) & 0x8000) != 0)
modifiers |= HOTKEYF_ALT;
bool bExtendedKey = (lParam & 0x01000000) != 0;
if((hotkeyVK && control->hotkeyVK != hotkeyVK) || control->bExtendedKey != bExtendedKey || control->modifiers != modifiers)
{
control->hotkeyVK = hotkeyVK;
control->modifiers = modifiers;
control->bExtendedKey = bExtendedKey;
InvalidateRect(hwnd, NULL, TRUE);
PostMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE), (LPARAM)hwnd);
}
break;
}
case WM_LBUTTONDOWN:
{
control = GetHotkeyControlExData(hwnd);
if(!control->bHasFocus)
{
SetFocus(hwnd);
break;
}
}
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_XBUTTONDOWN:
{
control = GetHotkeyControlExData(hwnd);
DWORD modifiers = 0;
if((GetKeyState(VK_CONTROL) & 0x8000) != 0)
modifiers |= HOTKEYF_CONTROL;
if((GetKeyState(VK_SHIFT) & 0x8000) != 0)
modifiers |= HOTKEYF_SHIFT;
if((GetKeyState(VK_MENU) & 0x8000) != 0)
modifiers |= HOTKEYF_ALT;
DWORD hotkeyVK = 0;
switch(message)
{
case WM_LBUTTONDOWN: hotkeyVK = VK_LBUTTON; break;
case WM_RBUTTONDOWN: hotkeyVK = VK_RBUTTON; break;
case WM_MBUTTONDOWN: hotkeyVK = VK_MBUTTON; break;
case WM_XBUTTONDOWN:
if(GET_XBUTTON_WPARAM(wParam) == XBUTTON1)
hotkeyVK = VK_XBUTTON1;
else if(GET_XBUTTON_WPARAM(wParam) == XBUTTON2)
hotkeyVK = VK_XBUTTON2;
}
if(control->hotkeyVK != hotkeyVK || control->modifiers != modifiers)
{
control->hotkeyVK = hotkeyVK;
control->modifiers = modifiers;
control->bExtendedKey = false;
InvalidateRect(hwnd, NULL, TRUE);
PostMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE), (LPARAM)hwnd);
}
break;
}
case WM_PAINT:
{
control = GetHotkeyControlExData(hwnd);
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hwnd, &ps);
control->DrawHotkeyControlEx(hwnd, hDC);
EndPaint(hwnd, &ps);
break;
}
case WM_ERASEBKGND:
{
control = GetHotkeyControlExData(hwnd);
HideCaret(hwnd);
RECT rc;
HDC hDC = GetDC(hwnd);
GetClientRect(hwnd, &rc);
if(IsWindowEnabled(hwnd))
FillRect(hDC, &rc, (HBRUSH)(COLOR_WINDOW+1));
else
FillRect(hDC, &rc, (HBRUSH)(COLOR_BTNFACE+1));
ReleaseDC(hwnd, hDC);
ShowCaret(hwnd);
break;
}
case WM_GETFONT:
{
control = GetHotkeyControlExData(hwnd);
return control->fontHeight;
}
case WM_SETFONT:
{
control = GetHotkeyControlExData(hwnd);
control->hFont = (HFONT)wParam;
HDC hDC = GetDC(hwnd);
SIZE size;
SelectObject(hDC, control->hFont);
GetTextExtentPoint32(hDC, TEXT("C"), 1, &size);
control->fontHeight = size.cy;
control->DrawHotkeyControlEx(hwnd, hDC);
ReleaseDC(hwnd, hDC);
break;
}
case WM_ENABLE:
{
InvalidateRect(hwnd, NULL, TRUE);
}
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
void HotkeyControlExData::DrawHotkeyControlEx(HWND hwnd, HDC hDC)
{
TCHAR lpName[128];
String strText;
if(hotkeyVK || modifiers)
{
if(modifiers & HOTKEYF_CONTROL)
{
GetKeyNameText((LONG)MapVirtualKey(VK_CONTROL, 0) << 16, lpName, 127);
strText << lpName << TEXT(" + ");
}
if(modifiers & HOTKEYF_SHIFT)
{
GetKeyNameText((LONG)MapVirtualKey(VK_SHIFT, 0) << 16, lpName, 127);
strText << lpName << TEXT(" + ");
}
if(modifiers & HOTKEYF_ALT)
{
GetKeyNameText((LONG)MapVirtualKey(VK_MENU, 0) << 16, lpName, 127);
strText << lpName << TEXT(" + ");
}
if(hotkeyVK)
{
if(hotkeyVK <= VK_RBUTTON)
strText << TEXT("Mouse ") << UIntString(hotkeyVK);
else if(hotkeyVK > VK_CANCEL && hotkeyVK <= VK_XBUTTON2)
strText << TEXT("Mouse ") << UIntString(hotkeyVK-1);
else
{
UINT scanCode = MapVirtualKey(hotkeyVK, 0) << 16;
if(bExtendedKey)
scanCode |= 0x01000000;
GetKeyNameText(scanCode, lpName, 128);
strText << lpName;
}
}
}
else
strText << Str("None");
if(bHasFocus)
HideCaret(hwnd);
int x = GetSystemMetrics(SM_CXEDGE);
int y = GetSystemMetrics(SM_CYEDGE);
SelectObject(hDC, hFont);
if(IsWindowEnabled(hwnd))
{
SetBkColor(hDC, GetSysColor(COLOR_WINDOW));
SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT));
}
else
{
SetBkColor(hDC, GetSysColor(COLOR_BTNFACE));
SetTextColor(hDC, GetSysColor(COLOR_GRAYTEXT));
}
TextOut(hDC, x, y, strText, strText.Length());
if(bHasFocus)
ShowCaret(hwnd);
}
void InitHotkeyExControl(HINSTANCE hInstance)
{
WNDCLASS wnd;
wnd.cbClsExtra = 0;
wnd.cbWndExtra = sizeof(LPVOID);
wnd.hbrBackground = NULL;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = NULL;
wnd.hInstance = hInstance;
wnd.lpfnWndProc = HotkeyExProc;
wnd.lpszClassName = HOTKEY_CONTROL_EX_CLASS;
wnd.lpszMenuName = NULL;
wnd.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
if(!RegisterClass(&wnd))
CrashError(TEXT("Could not register volume control class"));
}

26
OBSApi/HotkeyControlEx.h Normal file
View File

@ -0,0 +1,26 @@
/********************************************************************************
Copyright (C) 2012 Hugh Bailey <obs.jim@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
********************************************************************************/
#pragma once
#define HOTKEY_CONTROL_EX_CLASS TEXT("OBSHotkeyControlEx")
BASE_EXPORT void InitHotkeyExControl(HINSTANCE hInstance);

View File

@ -82,4 +82,5 @@ inline void SSECopy(void *lpDest, void *lpSource, UINT size)
#include "GraphicsSystem.h"
#include "Scene.h"
#include "APIInterface.h"
#include "HotkeyControlEx.h"

View File

@ -332,6 +332,10 @@
RelativePath=".\GraphicsSystem.cpp"
>
</File>
<File
RelativePath=".\HotkeyControlEx.cpp"
>
</File>
<File
RelativePath=".\OBSApi.cpp"
>
@ -354,6 +358,10 @@
RelativePath=".\GraphicsSystem.h"
>
</File>
<File
RelativePath=".\HotkeyControlEx.h"
>
</File>
<File
RelativePath=".\OBSApi.h"
>

View File

@ -116,16 +116,16 @@ public:
if(bWindowMinimized || bWindowNotFound)
{
CTSTR lpStr;
/*CTSTR lpStr;
if(bWindowMinimized)
lpStr = Str("Sources.SoftwareCaptureSource.WindowMinimized");
else if(bWindowNotFound)
lpStr = Str("Sources.SoftwareCaptureSource.WindowNotFound");
lpStr = Str("Sources.SoftwareCaptureSource.WindowNotFound");*/
RECT rc = {0, 0, width, height};
FillRect(hDC, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
/*HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
HFONT hfontOld = (HFONT)SelectObject(hDC, hFont);
SetBkColor(hDC, 0x000000);
@ -133,7 +133,7 @@ public:
SetTextAlign(hDC, TA_CENTER);
TextOut(hDC, width/2, height/2, lpStr, slen(lpStr));
SelectObject(hDC, hfontOld);
SelectObject(hDC, hfontOld);*/
}
else
{

View File

@ -354,6 +354,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
//--------------------------------------------
GlobalConfig->SetInt(TEXT("General"), TEXT("LastAppVersion"), OBS_VERSION);
delete AppConfig;
delete GlobalConfig;

View File

@ -61,8 +61,9 @@ extern ConfigFile *AppConfig;
extern OBS *App;
extern TCHAR lpAppDataPath[MAX_PATH];
#define OBS_VERSION 0x000401
#define OBS_VERSION_STRING_ANSI "Open Broadcaster Software v0.401a"
#define OBS_VERSION_STRING TEXT(OBS_VERSION_STRING_ANSI)
#define OBS_VERSION_STRING TEXT(OBS_VERSION_STRING_ANSI)
#define OBS_WINDOW_CLASS TEXT("OBSWindowClass")
#define OBS_RENDERFRAME_CLASS TEXT("RenderFrame")

View File

@ -291,7 +291,7 @@ struct HotkeyInfo
DWORD hotkey;
OBSHOTKEYPROC hotkeyProc;
UPARAM param;
bool bDown;
bool bModifiersDown, bHotkeyDown, bDownSent;
};
class OBSAPIInterface : public APIInterface
@ -396,6 +396,7 @@ OBS::OBS()
if(!InitCommonControlsEx(&ecce))
CrashError(TEXT("Could not initalize common shell controls"));
InitHotkeyExControl(hinstMain);
InitVolumeControl();
InitBandwidthMeter();
@ -727,6 +728,10 @@ OBS::OBS()
if(hotkey)
muteDesktopHotkeyID = API->CreateHotkey(hotkey, OBS::MuteDesktopHotkey, NULL);
hotkey = AppConfig->GetInt(TEXT("Publish"), TEXT("StopStreamHotkey"));
if(hotkey)
stopStreamHotkeyID = API->CreateHotkey(hotkey, OBS::StopStreamHotkey, NULL);
//-----------------------------------------------------
// load plugins
@ -859,11 +864,18 @@ void STDCALL SceneHotkey(DWORD hotkey, UPARAM param, bool bDown)
}
}
void STDCALL OBS::StopStreamHotkey(DWORD hotkey, UPARAM param, bool bDown)
{
if(!bDown) return;
App->Stop();
}
void STDCALL OBS::PushToTalkHotkey(DWORD hotkey, UPARAM param, bool bDown)
{
App->bPushToTalkOn = bDown;
}
void STDCALL OBS::MuteMicHotkey(DWORD hotkey, UPARAM param, bool bDown)
{
if(!bDown) return;
@ -2158,8 +2170,8 @@ UINT OBSAPIInterface::CreateHotkey(DWORD hotkey, OBSHOTKEYPROC hotkeyProc, UPARA
if(!hotkey)
return 0;
DWORD vk = LOWORD(hotkey);
DWORD modifier = HIWORD(hotkey);
DWORD vk = LOBYTE(hotkey);
DWORD modifier = HIBYTE(hotkey);
DWORD fsModifiers = 0;
if(modifier & HOTKEYF_ALT)
@ -2170,12 +2182,13 @@ UINT OBSAPIInterface::CreateHotkey(DWORD hotkey, OBSHOTKEYPROC hotkeyProc, UPARA
fsModifiers |= MOD_SHIFT;
OSEnterMutex(App->hHotkeyMutex);
HotkeyInfo &hi = *hotkeys.CreateNew();
hi.hotkeyID = ++curHotkeyIDVal;
hi.hotkey = hotkey;
hi.hotkeyProc = hotkeyProc;
hi.param = param;
hi.bDown = false;
HotkeyInfo &hi = *hotkeys.CreateNew();
hi.hotkeyID = ++curHotkeyIDVal;
hi.hotkey = hotkey;
hi.hotkeyProc = hotkeyProc;
hi.param = param;
hi.bModifiersDown = false;
hi.bHotkeyDown = false;
OSLeaveMutex(App->hHotkeyMutex);
return curHotkeyIDVal;
@ -2213,8 +2226,8 @@ void OBSAPIInterface::HandleHotkeys()
{
HotkeyInfo &info = hotkeys[i];
DWORD hotkeyVK = LOWORD(info.hotkey);
DWORD hotkeyModifiers = HIWORD(info.hotkey);
DWORD hotkeyVK = LOBYTE(info.hotkey);
DWORD hotkeyModifiers = HIBYTE(info.hotkey);
bool bModifiersMatch = (hotkeyModifiers == modifiers);
if(bModifiersMatch)
@ -2223,27 +2236,31 @@ void OBSAPIInterface::HandleHotkeys()
bool bDown = (keyState & 0x8000) != 0;
bool bWasPressed = (keyState & 0x1) != 0;
if(bDown)
if(bDown || bWasPressed)
{
if(!info.bDown)
if(!info.bHotkeyDown && info.bModifiersDown) //only triggers the hotkey if the actual main key was pressed second
{
PostMessage(hwndMain, OBS_CALLHOTKEY, TRUE, info.hotkeyID);
info.bDownSent = true;
}
info.bDown = bDown;
continue;
}
else if(bWasPressed)
{
if(!info.bDown)
PostMessage(hwndMain, OBS_CALLHOTKEY, TRUE, info.hotkeyID);
info.bDown = true;
info.bHotkeyDown = true;
if(bDown)
continue;
}
}
if(info.bDown) //key up
info.bModifiersDown = bModifiersMatch;
if(info.bHotkeyDown) //key up
{
PostMessage(hwndMain, OBS_CALLHOTKEY, FALSE, info.hotkeyID);
info.bDown = false;
if(info.bDownSent)
{
PostMessage(hwndMain, OBS_CALLHOTKEY, FALSE, info.hotkeyID);
info.bDownSent = false;
}
info.bHotkeyDown = false;
}
}

View File

@ -432,6 +432,7 @@ class OBS
UINT pushToTalkHotkeyID;
UINT muteMicHotkeyID;
UINT muteDesktopHotkeyID;
UINT stopStreamHotkeyID;
bool bWriteToFile;
VideoFileStream *fileStream;
@ -504,6 +505,8 @@ class OBS
void MainAudioLoop();
static DWORD STDCALL MainAudioThread(LPVOID lpUnused);
static void STDCALL StopStreamHotkey(DWORD hotkey, UPARAM param, bool bDown);
static void STDCALL PushToTalkHotkey(DWORD hotkey, UPARAM param, bool bDown);
static void STDCALL MuteMicHotkey(DWORD hotkey, UPARAM param, bool bDown);
static void STDCALL MuteDesktopHotkey(DWORD hotkey, UPARAM param, bool bDown);

View File

@ -201,6 +201,9 @@ INT_PTR CALLBACK OBS::GeneralSettingsProc(HWND hwnd, UINT message, WPARAM wParam
UINT numItems = (UINT)SendMessage(GetDlgItem(hwnd, IDC_PROFILE), CB_GETCOUNT, 0, 0);
EnableWindow(GetDlgItem(hwnd, IDC_REMOVE), (numItems > 1));
if(!App->bRunning)
App->ResizeWindow(false);
}
break;
@ -423,18 +426,6 @@ INT_PTR CALLBACK OBS::EncoderSettingsProc(HWND hwnd, UINT message, WPARAM wParam
//--------------------------------------------
hwndTemp = GetDlgItem(hwnd, IDC_PRESET);
for(int i=0; i<10; i++)
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)preset_names[i]);
LoadSettingComboString(hwndTemp, TEXT("Video Encoding"), TEXT("Preset"), TEXT("veryfast"));
ti.lpszText = (LPWSTR)Str("Settings.Encoding.Video.TradeoffTooltip");
ti.uId = (UINT_PTR)hwndTemp;
SendMessage(hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
//--------------------------------------------
LoadSettingEditInt(GetDlgItem(hwnd, IDC_MAXBITRATE), TEXT("Video Encoding"), TEXT("MaxBitrate"), 2000);
LoadSettingEditInt(GetDlgItem(hwnd, IDC_BUFFERSIZE), TEXT("Video Encoding"), TEXT("BufferSize"), 1000);
@ -448,11 +439,6 @@ INT_PTR CALLBACK OBS::EncoderSettingsProc(HWND hwnd, UINT message, WPARAM wParam
//--------------------------------------------
BOOL bUse444 = AppConfig->GetInt(TEXT("Video Encoding"), TEXT("Use444"), 0);
SendMessage(GetDlgItem(hwnd, IDC_USEI444), BM_SETCHECK, bUse444 ? BST_CHECKED : 0, 0);
//--------------------------------------------
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOCODEC);
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("AAC"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("MP3"));
@ -494,7 +480,6 @@ INT_PTR CALLBACK OBS::EncoderSettingsProc(HWND hwnd, UINT message, WPARAM wParam
switch(LOWORD(wParam))
{
case IDC_QUALITY:
case IDC_PRESET:
case IDC_AUDIOCODEC:
case IDC_AUDIOBITRATE:
case IDC_AUDIOFORMAT:
@ -507,10 +492,6 @@ INT_PTR CALLBACK OBS::EncoderSettingsProc(HWND hwnd, UINT message, WPARAM wParam
if(HIWORD(wParam) == EN_CHANGE)
bDataChanged = true;
break;
case IDC_USEI444:
if(HIWORD(wParam) == BN_CLICKED)
bDataChanged = true;
break;
}
if(bDataChanged)
@ -698,10 +679,18 @@ INT_PTR CALLBACK OBS::PublishSettingsProc(HWND hwnd, UINT message, WPARAM wParam
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH_STATIC), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_BROWSE), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY_STATIC), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_CLEARHOTKEY), 0, -data->fileControlOffset);
}
//--------------------------------------------
DWORD stopHotkey = AppConfig->GetInt(TEXT("Publish"), TEXT("StopStreamHotkey"));
SendMessage(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), HKM_SETHOTKEY, stopHotkey, 0);
//--------------------------------------------
BOOL bSaveToFile = AppConfig->GetInt(TEXT("Publish"), TEXT("SaveToFile"));
SendMessage(GetDlgItem(hwnd, IDC_SAVETOFILE), BM_SETCHECK, bSaveToFile ? BST_CHECKED : BST_UNCHECKED, 0);
@ -781,12 +770,18 @@ INT_PTR CALLBACK OBS::PublishSettingsProc(HWND hwnd, UINT message, WPARAM wParam
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH_STATIC), 0, data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH), 0, data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_BROWSE), 0, data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY_STATIC), 0, data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), 0, data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_CLEARHOTKEY), 0, data->fileControlOffset);
}
else if(mode == 1 && data->mode == 0)
{
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH_STATIC), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_SAVEPATH), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_BROWSE), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY_STATIC), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), 0, -data->fileControlOffset);
AdjustWindowPos(GetDlgItem(hwnd, IDC_CLEARHOTKEY), 0, -data->fileControlOffset);
}
data->mode = mode;
@ -958,10 +953,22 @@ INT_PTR CALLBACK OBS::PublishSettingsProc(HWND hwnd, UINT message, WPARAM wParam
case IDC_CHANNELNAME:
case IDC_SERVEREDIT:
case IDC_SAVEPATH:
case IDC_STOPSTREAMHOTKEY:
if(HIWORD(wParam) == EN_CHANGE)
bDataChanged = true;
break;
case IDC_CLEARHOTKEY:
if(HIWORD(wParam) == BN_CLICKED)
{
if(SendMessage(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), HKM_GETHOTKEY, 0, 0))
{
SendMessage(GetDlgItem(hwnd, IDC_STOPSTREAMHOTKEY), HKM_SETHOTKEY, 0, 0);
bDataChanged = true;
}
}
break;
case IDC_SERVERLIST:
if(HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam) == CBN_SELCHANGE)
bDataChanged = true;
@ -1001,7 +1008,7 @@ void OBS::RefreshDownscales(HWND hwnd, int cx, int cy)
String strText;
if(i == 0)
strText << Str("Settings.Video.Downscale.None") << TEXT(" (") << IntString(scaleCX) << TEXT("x") << IntString(scaleCY) << TEXT(")");
strText << Str("None") << TEXT(" (") << IntString(scaleCX) << TEXT("x") << IntString(scaleCY) << TEXT(")");
else
strText << FormattedString(TEXT("%0.2f"), multiplier) << TEXT(" (") << IntString(scaleCX) << TEXT("x") << IntString(scaleCY) << TEXT(")");
@ -1434,6 +1441,18 @@ INT_PTR CALLBACK OBS::AdvancedSettingsProc(HWND hwnd, UINT message, WPARAM wPara
SendMessage(hwndToolTip, TTM_SETMAXTIPWIDTH, 0, 500);
SendMessage(hwndToolTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 14000);
//--------------------------------------------
HWND hwndTemp = GetDlgItem(hwnd, IDC_PRESET);
for(int i=0; i<10; i++)
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)preset_names[i]);
LoadSettingComboString(hwndTemp, TEXT("Video Encoding"), TEXT("Preset"), TEXT("veryfast"));
ti.lpszText = (LPWSTR)Str("Settings.Advanced.VideoEncoderCPUTradeoffTooltip");
ti.uId = (UINT_PTR)hwndTemp;
SendMessage(hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
//------------------------------------
bool bUseCustomX264Settings = AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseCustomSettings")) != 0;
@ -1465,7 +1484,7 @@ INT_PTR CALLBACK OBS::AdvancedSettingsProc(HWND hwnd, UINT message, WPARAM wPara
BOOL bUseSendBuffer = AppConfig->GetInt(TEXT("Publish"), TEXT("UseSendBuffer"), 1) != 0;
SendMessage(GetDlgItem(hwnd, IDC_USESENDBUFFER), BM_SETCHECK, bUseSendBuffer ? BST_CHECKED : BST_UNCHECKED, 0);
HWND hwndTemp = GetDlgItem(hwnd, IDC_SENDBUFFERSIZE);
hwndTemp = GetDlgItem(hwnd, IDC_SENDBUFFERSIZE);
EnableWindow(hwndTemp, bUseSendBuffer);
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("32768"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("16384"));
@ -1516,6 +1535,14 @@ INT_PTR CALLBACK OBS::AdvancedSettingsProc(HWND hwnd, UINT message, WPARAM wPara
}
break;
case IDC_PRESET:
if(HIWORD(wParam) == CBN_SELCHANGE)
{
ShowWindow(GetDlgItem(hwnd, IDC_INFO), SW_SHOW);
App->SetChangedSettings(true);
}
break;
case IDC_USESYNCFIX:
if(HIWORD(wParam) == BN_CLICKED)
{
@ -1540,9 +1567,6 @@ void OBS::ApplySettings()
if(quality != CB_ERR)
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("Quality"), quality);
String strTemp = GetCBText(GetDlgItem(hwndCurrentSettings, IDC_PRESET));
AppConfig->SetString(TEXT("Video Encoding"), TEXT("Preset"), strTemp);
UINT bitrate = GetEditText(GetDlgItem(hwndCurrentSettings, IDC_MAXBITRATE)).ToInt();
if(bitrate < 100) bitrate = 100;
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("MaxBitrate"), bitrate);
@ -1554,7 +1578,7 @@ void OBS::ApplySettings()
BOOL bUse444 = SendMessage(GetDlgItem(hwndCurrentSettings, IDC_USEI444), BM_GETCHECK, 0, 0) == BST_CHECKED;
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("Use444"), bUse444);
strTemp = GetCBText(GetDlgItem(hwndCurrentSettings, IDC_AUDIOCODEC));
String strTemp = GetCBText(GetDlgItem(hwndCurrentSettings, IDC_AUDIOCODEC));
AppConfig->SetString(TEXT("Audio Encoding"), TEXT("Codec"), strTemp);
strTemp = GetCBText(GetDlgItem(hwndCurrentSettings, IDC_AUDIOBITRATE));
@ -1619,6 +1643,20 @@ void OBS::ApplySettings()
AppConfig->SetInt (TEXT("Publish"), TEXT("SaveToFile"), bSaveToFile);
AppConfig->SetString(TEXT("Publish"), TEXT("SavePath"), strSavePath);
//------------------------------------------
DWORD stopStreamHotkey = (DWORD)SendMessage(GetDlgItem(hwndCurrentSettings, IDC_STOPSTREAMHOTKEY), HKM_GETHOTKEY, 0, 0);
AppConfig->SetInt(TEXT("Publish"), TEXT("StopStreamHotkey"), stopStreamHotkey);
if(App->stopStreamHotkeyID)
{
API->DeleteHotkey(App->stopStreamHotkeyID);
App->stopStreamHotkeyID = 0;
}
if(stopStreamHotkey)
App->stopStreamHotkeyID = API->CreateHotkey(stopStreamHotkey, OBS::StopStreamHotkey, NULL);
break;
}
@ -1680,7 +1718,10 @@ void OBS::ApplySettings()
AppConfig->SetInt(TEXT("Audio"), TEXT("PushToTalkHotkey"), hotkey);
if(App->pushToTalkHotkeyID)
{
API->DeleteHotkey(App->pushToTalkHotkeyID);
App->pushToTalkHotkeyID = 0;
}
if(App->bUsingPushToTalk && hotkey)
pushToTalkHotkeyID = API->CreateHotkey(hotkey, OBS::PushToTalkHotkey, NULL);
@ -1691,7 +1732,10 @@ void OBS::ApplySettings()
AppConfig->SetInt(TEXT("Audio"), TEXT("MuteMicHotkey"), hotkey);
if(App->muteMicHotkeyID)
{
API->DeleteHotkey(App->muteMicHotkeyID);
App->muteDesktopHotkeyID = 0;
}
if(hotkey)
muteMicHotkeyID = API->CreateHotkey(hotkey, OBS::MuteMicHotkey, NULL);
@ -1702,7 +1746,10 @@ void OBS::ApplySettings()
AppConfig->SetInt(TEXT("Audio"), TEXT("MuteDesktopHotkey"), hotkey);
if(App->muteDesktopHotkeyID)
{
API->DeleteHotkey(App->muteDesktopHotkeyID);
App->muteDesktopHotkeyID = 0;
}
if(hotkey)
muteDesktopHotkeyID = API->CreateHotkey(hotkey, OBS::MuteDesktopHotkey, NULL);
@ -1712,6 +1759,11 @@ void OBS::ApplySettings()
case Settings_Advanced:
{
String strTemp = GetCBText(GetDlgItem(hwndCurrentSettings, IDC_PRESET));
AppConfig->SetString(TEXT("Video Encoding"), TEXT("Preset"), strTemp);
//--------------------------------------------------
BOOL bUseCustomX264Settings = SendMessage(GetDlgItem(hwndCurrentSettings, IDC_USEVIDEOENCODERSETTINGS), BM_GETCHECK, 0, 0) == BST_CHECKED;
String strCustomX264Settings = GetEditText(GetDlgItem(hwndCurrentSettings, IDC_VIDEOENCODERSETTINGS));

View File

@ -120,6 +120,10 @@
#define IDC_SENDBUFFERSIZE 1089
#define IDC_CLEARMUTEDESKTOP 1090
#define IDC_LIST1 1090
#define IDC_CUSTOM1 1093
#define IDC_STOPSTREAMHOTKEY 1093
#define IDC_CLEARHOTKEY 1094
#define IDC_STOPSTREAMHOTKEY_STATIC 1095
#define IDA_SOURCE_MOVEUP 40018
#define IDA_SOURCE_MOVEDOWN 40019
#define IDA_SOURCE_MOVETOTOP 40020
@ -148,7 +152,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 134
#define _APS_NEXT_COMMAND_VALUE 40042
#define _APS_NEXT_CONTROL_VALUE 1091
#define _APS_NEXT_CONTROL_VALUE 1096
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,4 +1,4 @@
Add "Добави"
Add "Добави"
Apply "Приложи"
Browse "Търси"
Cancel "Откажи"
@ -9,6 +9,7 @@ Disable "Деактивирай"
EnterName "Моля въведете име"
GlobalSources "Глобални Източници"
NameExists "'$1' вече съществува. Моля въведете различно име"
None "Никакво"
OK "OK"
Plugins "Плъгини"
Scene "Сцена"
@ -68,8 +69,6 @@ Settings.Encoding.Audio.Format "Формат:"
Settings.Encoding.Video.BufferSize "Размер на бъфер (kbit):"
Settings.Encoding.Video.MaxBitRate "Макс битрейт (kb/s):"
Settings.Encoding.Video.Quality "Качество:"
Settings.Encoding.Video.Tradeoff "CPU настройка:"
Settings.Encoding.Video.UseI444 "Използвай YUV 4:4:4"
Settings.General.Language "Език:"
Settings.General.Restart "Сменянето на езика изисква рестарт на OBS.\r\n\r\n..Но предполагам че щом сменяш езика не можеш да разбереш това."
@ -94,9 +93,7 @@ Settings.Video.Monitor "Монитор:"
Settings.Video.Recommended "(Препоръчано ако снимате)"
Settings.Video.Resolution "Базова резолюция:"
Settings.Video.Downscale.None "Никакво"
Sources.BitmapSource "Битмап"
Sources.GlobalSource "Глобален източник"
Sources.BitmapSource.Empty "Няма избран битмап. Моля селектирайте валиден битмап файл."
Sources.BitmapSource.Empty "Няма избран битмап. Моля селектирайте валиден битмап файл."

View File

@ -1,4 +1,4 @@
Add "Hinzufügen"
Add "Hinzufügen"
Apply "Übernehmen"
Browse "Durchsuchen"
Cancel "Abbrechen"
@ -9,6 +9,7 @@ Disable "Deaktivieren"
EnterName "Bitte geben sie einen Namen ein"
GlobalSources "Globale Quellen"
NameExists "'$1' ist bereits in Benutzung, bitte benutzen sie einen anderen Namen."
None "Keine"
OK "OK"
Plugins "Plugins"
Scene "Szene"
@ -68,8 +69,6 @@ Settings.Encoding.Audio.Format "Format:"
Settings.Encoding.Video.BufferSize "Buffer Größe (kbit):"
Settings.Encoding.Video.MaxBitRate "Max Bitrate (kb/s):"
Settings.Encoding.Video.Quality "Qualität:"
Settings.Encoding.Video.Tradeoff "CPU Preset:"
Settings.Encoding.Video.UseI444 "Use YUV 4:4:4"
Settings.General.Language "Sprache:"
Settings.General.Restart "Um die Sprache zu ändern müssen sie OBS neustarten."
@ -93,9 +92,7 @@ Settings.Video.FPS "FPS:"
Settings.Video.Monitor "Monitor:"
Settings.Video.Resolution "Basis Auflösung:"
Settings.Video.Downscale.None "Keine"
Sources.BitmapSource "Bitmap"
Sources.GlobalSource "Globale Quelle"
Sources.BitmapSource.Empty "keine Bitmap angegeben. Bitte wählen sie eine Bitmap aus."
Sources.BitmapSource.Empty "keine Bitmap angegeben. Bitte wählen sie eine Bitmap aus."

View File

@ -1,4 +1,4 @@
Add "Προσθήκη"
Add "Προσθήκη"
Apply "Εφαρμογή"
Browse "Αναζήτηση"
Cancel "Ακύρωση"
@ -9,6 +9,7 @@ Disable "Απενεργοποίηση"
EnterName "Παρακαλούμε εισάγετε το όνομά σας"
GlobalSources "Καθολικές Πηγές"
NameExists "'$1' υπάρχει ήδη. Παρακαλούμε επιλέξτε ένα άλλο όνομα"
None "Κανένα"
OK "OK"
Plugins "Πρόσθετα"
Scene "Σκηνή"
@ -68,8 +69,6 @@ Settings.Encoding.Audio.Format "Διαμόρφωση (Format):"
Settings.Encoding.Video.BufferSize "Μέγεθος προσωρινής μνήμης (Buffer) (kbit):"
Settings.Encoding.Video.MaxBitRate "Μέγιστο Bitrate (kb/s):"
Settings.Encoding.Video.Quality "Ποιότητα:"
Settings.Encoding.Video.Tradeoff "Προκαθορισμένη CPU:"
Settings.Encoding.Video.UseI444 "Χρήση YUV 4:4:4"
Settings.General.Language "Γλώσσα:"
Settings.General.Restart "Η αλλαγή γλώσσας προαπαιτεί επανεκκίνηση του OBS.\r\n\r\n... Αν και υποθέτω οτι αν ανλλάξετε την γλώσσα δεν θα μπορείτε να καταλάβετε το μήνυμα πλέον"
@ -93,10 +92,8 @@ Settings.Video.FPS "Καρέ ανά δευτερόλεπτο (FPS):"
Settings.Video.Monitor "Οθόνη:"
Settings.Video.Resolution "Βασική Ανάλυση:"
Settings.Video.Downscale.None "Κανένα"
Sources.BitmapSource "Bitmap"
Sources.DesktopSource "Σύλληψη Επιφάνειας Εργασίας"
Sources.GlobalSource "Καθολική Πηγή"
Sources.BitmapSource.Empty "Δεν έχει επιλεχθεί εικόνα bitmap. Παρακαλούμε κάντε αναζήτηση και επιλέξτε μια εικόνα bitmap"
Sources.BitmapSource.Empty "Δεν έχει επιλεχθεί εικόνα bitmap. Παρακαλούμε κάντε αναζήτηση και επιλέξτε μια εικόνα bitmap"

View File

@ -10,6 +10,7 @@ Disable "Disable"
EnterName "Please enter a name"
GlobalSources "Global Sources"
NameExists "'$1' already exists. Please enter a different name"
None "None"
OK "OK"
Plugins "Plugins"
Reconnecting "Reconnecting..."
@ -74,14 +75,16 @@ Settings.SaveChangesPrompt "Would you like to save and apply your changes?"
Settings.SaveChangesTitle "Apply settings?"
Settings.Video "Video"
Settings.Advanced.Network "Network"
Settings.Advanced.SendBufferSize "Send Buffer Size:"
Settings.Advanced.UseSendBuffer "Use Send Buffer"
Settings.Advanced.UseSendBufferTooltip "The send buffer causes all network data to be buffered to specific packet sizes before sending. Using this greatly increases network throughput, but will make the stream a bit more delayed.\r\n\r\nRecommended: On, at 32768"
Settings.Advanced.UseSyncFix "Use Video/Audio Sync Fix"
Settings.Advanced.UseSyncFixTooltip "In rare cases, certain CPUs and motherboards have timing bugs. Using this fix ensures that audio/video sync will always be correct, but is less accurate than proper timing. Due to that fact, do not use this unless you are having audio/video sync issues."
Settings.Advanced.VideoEncoderSettings "Custom x264 Encoder Settings"
Settings.Advanced.VideoEncoderSettingsTooltip "This allows you to set custom x264 encoder settings. In the form of [parameter]=[value] (e.g. \"vbv-maxrate=1000 vbv-bufsize=1000\")."
Settings.Advanced.Network "Network"
Settings.Advanced.SendBufferSize "Send Buffer Size:"
Settings.Advanced.UseSendBuffer "Use Send Buffer"
Settings.Advanced.UseSendBufferTooltip "The send buffer causes all network data to be buffered to specific packet sizes before sending. Using this greatly increases network throughput, but will make the stream a bit more delayed.\r\n\r\nRecommended: On, at 32768"
Settings.Advanced.UseSyncFix "Use Video/Audio Sync Fix"
Settings.Advanced.UseSyncFixTooltip "In rare cases, certain CPUs and motherboards have timing bugs. Using this fix ensures that audio/video sync will always be correct, but is less accurate than proper timing. Due to that fact, do not use this unless you are having audio/video sync issues."
Settings.Advanced.VideoEncoderCPUTradeoff "x264 CPU Preset:"
Settings.Advanced.VideoEncoderCPUTradeoffToolTip "Setting this value higher reduces CPU usage by sacrificing certain aspects of quality. On the other hand, setting this value lower increases quality at the cost of more CPU.\r\n\r\nRecommended: Very Fast"
Settings.Advanced.VideoEncoderSettings "Custom x264 Encoder Settings"
Settings.Advanced.VideoEncoderSettingsTooltip "This allows you to set custom x264 encoder settings. In the form of [parameter]=[value] (e.g. \"vbv-maxrate=1000 vbv-bufsize=1000\")."
Settings.Audio.Device "Microphone/Auxilary Audio Device:"
Settings.Audio.MuteDesktopHotkey "Mute/Unmute Desktop Hotkey:"
@ -96,13 +99,11 @@ Settings.Encoding.Audio.Codec "Codec:"
Settings.Encoding.Audio.Format "Format:"
Settings.Encoding.Video.BufferSize "Buffer Size (kbit):"
Settings.Encoding.Video.BufferSizeTooltip "The buffer size determines how much data is buffered before being sent. Setting this to a higher value than your bitrate can improve motion quality, but can also cause the data rate to become less consistent, with the possibility of sending out more data than you may be able to handle at once.\r\n\r\nRecommended: Same as or less than your bitrate."
Settings.Encoding.Video.BufferSizeTooltip "The buffer size determines how much data is buffered. This value particularly affects high motion scenes. If you don't know what to use, set it to the same as your bitrate. See the help file for more information."
Settings.Encoding.Video.MaxBitRate "Max Bitrate (kb/s):"
Settings.Encoding.Video.MaxBitRateTooltip "This sets the maximum bitrate used for video. Note that although your average bitrate will be at this value, this value is based on your buffer size. You generally want to set this to a value below your upload bitrate.\r\n\r\nUse a site such as speedtest.net to determine your upload bitrate."
Settings.Encoding.Video.Quality "Quality:"
Settings.Encoding.Video.QualityTooltip "This settings will attempt to target a certain quality depending on your bitrate and buffer size. Setting this to a high value with a low bitrate it will sacrifice the quality of high motion scenes in favor of non-moving scenes, causing inconsistent quality."
Settings.Encoding.Video.Tradeoff "CPU Preset:"
Settings.Encoding.Video.TradeoffTooltip "Setting this value higher reduces CPU usage by sacrificing certain aspects of quality. On the other hand, setting this value lower increases quality at the cost of more CPU.\r\n\r\nRecommended: Very Fast"
Settings.General.Add "Add New"
Settings.General.ConfirmDelete "Are you sure you wish to remove the profile '$1'?"
@ -123,6 +124,7 @@ Settings.Publish.SavePath "File Path:"
Settings.Publish.SaveToFile "Save to file:"
Settings.Publish.Server "Server:"
Settings.Publish.Service "Streaming Service:"
Settings.Publish.StopStreamHotkey "Stop Stream Hotkey:"
Settings.Publish.Username "User Name (if any):"
Settings.Publish.Mode.FileOnly "File Output Only"
@ -137,8 +139,6 @@ Settings.Video.FPS "FPS:"
Settings.Video.Monitor "Monitor:"
Settings.Video.Resolution "Base Resolution:"
Settings.Video.Downscale.None "None"
Sources.BitmapSource "Bitmap"
Sources.GlobalSource "Global Source"
Sources.SoftwareCaptureSource "Software Capture Source"

View File

@ -1,4 +1,4 @@
Add "Lisa"
Add "Lisa"
Apply "Rakenda muutused"
Browse "Sirvi"
Cancel "Katkesta"
@ -9,6 +9,7 @@ Disable "Vaigista"
EnterName "Palun sisesta nimi"
GlobalSources "Globaalsed allikad"
NameExists "'$1' on olemas juba. Palun sisesta teistsugune nimi."
None "Puudub"
OK "OK"
Plugins "Pluginad"
Scene "Stseen"
@ -68,8 +69,6 @@ Settings.Encoding.Audio.Format "Formaat:"
Settings.Encoding.Video.BufferSize "Puhvri suurus (kbit):"
Settings.Encoding.Video.MaxBitRate "Maksimaalne bitikiirus (kb/s):"
Settings.Encoding.Video.Quality "Kvaliteet:"
Settings.Encoding.Video.Tradeoff "CPU valmisprofiil:"
Settings.Encoding.Video.UseI444 "Kasuta YUV 4:4:4"
Settings.General.Language "Keel:"
Settings.General.Restart "Keele vahetamine nõuab OBS taaskäivitust."
@ -94,9 +93,7 @@ Settings.Video.Monitor "Monitor:"
Settings.Video.Recommended "(Soovitatav, kui lindistad)"
Settings.Video.Resolution "Baasresolutsioon:"
Settings.Video.Downscale.None "Puudub"
Sources.BitmapSource "Bitikaart"
Sources.GlobalSource "Globaalne allikas"
Sources.BitmapSource.Empty "Bitikaart pole sisestatud. Palun sisesta bitikaart."
Sources.BitmapSource.Empty "Bitikaart pole sisestatud. Palun sisesta bitikaart."

View File

@ -1,4 +1,4 @@
Add "Ajouter"
Add "Ajouter"
Apply "Appliquer"
Browse "Naviger"
Cancel "Annuler"
@ -9,6 +9,7 @@ Disable "Désactiver"
EnterName "Entrer un nom"
GlobalSources "Ressources globales"
NameExists "'$1' existe déja. entrez un nom différent"
None "Aucune"
OK "OK"
Plugins "Plugins"
Scene "Scene"
@ -68,8 +69,6 @@ Settings.Encoding.Audio.Format "Format:"
Settings.Encoding.Video.BufferSize "Taille du Buffer (kbit):"
Settings.Encoding.Video.MaxBitRate "Bitrate Max (kb/s):"
Settings.Encoding.Video.Quality "Qualitée:"
Settings.Encoding.Video.Tradeoff " Préraglage CPU:"
Settings.Encoding.Video.UseI444 "Utiliser YUV 4:4:4"
Settings.General.Language "Langue:"
Settings.General.Restart "Changer le langage requiert un redémarage de OBS.\r\n\r\n..Mais je suppose que si vous changez le langage vous ne comprendrez pas ça"
@ -93,9 +92,7 @@ Settings.Video.FPS "FPS:"
Settings.Video.Monitor "Ecran:"
Settings.Video.Resolution "Résolution de base:"
Settings.Video.Downscale.None "Aucune"
Sources.BitmapSource "Bitmap"
Sources.GlobalSource "Source Globale"
Sources.BitmapSource.Empty "Aucune bitmap entrée. Veuillez choisir une bitmap"
Sources.BitmapSource.Empty "Aucune bitmap entrée. Veuillez choisir une bitmap"

View File

@ -1,4 +1,4 @@
Add "追加"
Add "追加"
Apply "適用"
Browse "参照"
Cancel "キャンセル"
@ -10,6 +10,7 @@ Disable "無効にする"
EnterName "名前を入力してください"
GlobalSources "グローバル ソース"
NameExists "'$1'という項目は既にあります。別の名前を入力してください"
None "なし"
OK "OK"
Plugins "プラグイン"
Reconnecting "再接続しています"
@ -74,11 +75,13 @@ Settings.SaveChangesPrompt "設定を保存しますか?"
Settings.SaveChangesTitle "保存しますか?"
Settings.Video "動画"
Settings.Advanced.Network "ネットワーク"
Settings.Advanced.SendBufferSize "送信バッファー大きさ:"
Settings.Advanced.UseSendBuffer "送信バッファーを使う"
Settings.Advanced.UseSyncFix "サウンドと動画の同期解決"
Settings.Advanced.VideoEncoderSettings "x264詳細設定"
Settings.Advanced.Network "ネットワーク"
Settings.Advanced.SendBufferSize "送信バッファー大きさ:"
Settings.Advanced.UseSendBuffer "送信バッファーを使う"
Settings.Advanced.UseSyncFix "サウンドと動画の同期解決"
Settings.Advanced.VideoEncoderCPUTradeoff "x264のCPUプリセット:"
Settings.Advanced.VideoEncoderCPUTradeoffTooltip "CPUの利用を調整するための設定です。「superfast」や「ultrafast」を使ってはCPU使用を減らすために品質を犠牲にするのです。一方、「faster」や「fast」以下はCPU利用を増やしますことで品質を優先しようとします。\r\n\r\n推奨:「veryfast」"
Settings.Advanced.VideoEncoderSettings "x264詳細設定"
Settings.Audio.Device "マイク/他のサウンド デバイス:"
Settings.Audio.MuteDesktopHotkey "デスクトップをミュートするホットキー:"
@ -92,11 +95,9 @@ Settings.Encoding.Audio.Bitrate "ビットレート:"
Settings.Encoding.Audio.Codec "コーデック:"
Settings.Encoding.Audio.Format "フォーマット:"
Settings.Encoding.Video.BufferSize "バッファー 大きさ (kbit):"
Settings.Encoding.Video.MaxBitRate "ビットレート 最大限 (kbit/秒):"
Settings.Encoding.Video.Quality "動画質:"
Settings.Encoding.Video.Tradeoff "CPU プリセット:"
Settings.Encoding.Video.TradeoffTooltip "CPUの利用を調整するための設定です。「superfast」や「ultrafast」を使ってはCPU使用を減らすために品質を犠牲にする。一方、「faster」や「fast」以下はCPU利用を増やしますことで品質を優先しようとします。\r\n\r\n推奨:「veryfast」"
Settings.Encoding.Video.BufferSize "バッファー 大きさ (kbit):"
Settings.Encoding.Video.MaxBitRate "ビットレート 最大限 (kbit/秒):"
Settings.Encoding.Video.Quality "動画質:"
Settings.General.Add "追加"
Settings.General.ConfirmDelete "'$1'を削除してよろしいですか?"
@ -117,6 +118,7 @@ Settings.Publish.SavePath "ファイル パス:"
Settings.Publish.SaveToFile "ファイルを保存:"
Settings.Publish.Server "サーバー:"
Settings.Publish.Service "サービス:"
Settings.Publish.StopStreamHotkey "ストリームを停止するホットキー:"
Settings.Publish.Username "ユーザ名 (もしあれば):"
Settings.Publish.Mode.FileOnly "ファイル出力だけ"
@ -130,8 +132,6 @@ Settings.Video.FPS "FPS:"
Settings.Video.Monitor "画面:"
Settings.Video.Resolution "解像度:"
Settings.Video.Downscale.None "なし"
Sources.BitmapSource "ビットマップ画像"
Sources.GlobalSource "グローバル ソース"
Sources.SoftwareCaptureSource "ソフトウェア キャプチャー ソース"

View File

@ -1,9 +1,9 @@
Add "Legg til"
Add "Legg til"
Apply "Bruk"
Browse "Bla gjennom"
Browse "Bla i gjennom"
Cancel "Avbryt"
Default "Forhdsvalg"
DeleteConfirm "Er du sikker pat du vil forkaste de valgte elementene?"
Default "Forhåndsvalg"
DeleteConfirm "Er du sikker på at du vil forkaste de valgte elementene?"
Desktop "Skrivebord"
Disable "Skru av"
EnterName "Vennligst skriv inn ditt navn"
@ -17,7 +17,9 @@ StreamReport "Stream-rapportering"
DeleteConfirm.Title "Slette valgte elementer?"
GlobalSources.DeleteConfirm "Hvis du sletter en global kilde, vil den bli fjernet fra hvilken som helst scene som benytter den. Er du sikker p・at du vil fortsette?"
DesktopImageSource.CannotDuplicate "Kan ikke ha mer enn én skrivebordsbildekilde i scenen om gangen"
GlobalSources.DeleteConfirm "Hvis du sletter en global kilde, vil den bli fjernet fra hvilken som helst scene som benytter den. Er du sikker på at du vil fortsette?"
Listbox.Add "Legg til $1"
Listbox.Center "Sentrer"
@ -28,7 +30,7 @@ Listbox.MoveToTop "Flytt til topp"
Listbox.MoveUp "Flytt opp"
Listbox.Remove "Fjern"
Listbox.Rename "Rediger navn"
Listbox.ResetSize "Tilbakestill st<EFBFBD>relse"
Listbox.ResetSize "Tilbakestill størrelse"
MainWindow.Exit "Lukk"
MainWindow.Plugins "Programvareutvidelse"
@ -37,20 +39,17 @@ MainWindow.Scenes "Scener:"
MainWindow.Sources "Kilder:"
MainWindow.StartStream "Start streamingen"
MainWindow.StopStream "Stopp streamingen"
MainWindow.StopTest "Stopp test"
MainWindow.TestStream "Test stream"
Plugins.Configure "Konfigurer"
Plugins.Description "Beskrivelse:"
Plugins.Filename "Filnavn:"
Scene.MissingSources "Mislyktes i ・laste alle bildekildene p・grunn av enten feilinnstillinger eller frav誡ende programvareutvidelser"
Scene.MissingSources "Mislyktes i å laste alle bildekildene på grunn av enten feilinnstillinger eller fraværende programvareutvidelser"
Settings.Audio "Lyd"
Settings.Encoding "Koding"
Settings.General "Generelt"
Settings.Hotkeys "Tastatursnarveier"
Settings.Info "Disse instillingene vil ikke gjelde f<> neste gang du starter ・streame"
Settings.Info "Disse instillingene vil ikke gjelde før neste gang du starter å streame"
Settings.Publish "Instillinger for kringkasting"
Settings.SaveChangesPrompt "Vil du lagre og bruke dine endringer?"
Settings.SaveChangesTitle "Bruk instillinger?"
@ -65,38 +64,39 @@ Settings.Encoding.Audio.Bitrate "Bitrate:"
Settings.Encoding.Audio.Codec "Codec:"
Settings.Encoding.Audio.Format "Format:"
Settings.Encoding.Video.BufferSize "Bufferst<EFBFBD>relse (kbit):"
Settings.Encoding.Video.BufferSize "Bufferstørrelse (kbit):"
Settings.Encoding.Video.MaxBitRate "Maks bitrate (kb/s):"
Settings.Encoding.Video.Quality "Kvalitet:"
Settings.Encoding.Video.Tradeoff "CPU forh蚣dsinnstilling:"
Settings.Encoding.Video.UseI444 "Bruk YUV 4:4:4"
Settings.General.Language "Spr:"
Settings.General.Language "Språk:"
Settings.General.Restart "Changing the language will require restarting OBS.\r\n\r\n..Though I suppose if you're changing the language you can't understand this"
Settings.General.Restart "Spr虧endring vil kreve en ny oppstart av OBS.\r\n\r\n.. Men om du vil forandre spr虧 skj<6B>ner du vel ikke dette"
Settings.General.Restart "Språkendring vil kreve en ny oppstart av OBS.\r\n\r\n.. Men om du vil forandre språk skjønner du vel ikke dette"
Settings.Publish.ChannelName "Kanalnavn:"
Settings.Publish.Mode "Modus:"
Settings.Publish.Password "Eventuelt passord:"
Settings.Publish.Playpath "Kj<EFBFBD> Path/Stream-Key (hvis det er noen):"
Settings.Publish.Playpath "Kjør Path/Stream-Key (hvis det er noen):"
Settings.Publish.Server "Server:"
Settings.Publish.Service "Streamingapparat:"
Settings.Publish.Username "Brukernavn (hvis det er et):"
Settings.Publish.Mode.BandwidthInfo "B蚣dbreddeinformasjon"
Settings.Publish.Mode.LiveStream "Direkte stream"
Settings.Publish.Mode.Serve "Lokal RTMP Server"
Settings.Video.Custom "Spesiell:"
Settings.Video.DisableAero "Skru av Aero ved oppstart:"
Settings.Video.Downscale "Nedskaler oppl<EFBFBD>ning:"
Settings.Video.Downscale "Nedskaler oppløsning:"
Settings.Video.FPS "Bilder per sekund:"
Settings.Video.Monitor "Skjerm:"
Settings.Video.Resolution "Grunnoppl<70>ning"
Settings.Video.Recommended "(Høyt rekommendert hvis opptak)"
Settings.Video.Resolution "Grunnoppløsning"
Settings.Video.Downscale.None "Ingen"
Sources.BitmapSource "Bitmap"
Sources.DesktopSource "Skrivebordsopptak"
Sources.GlobalSource "Global kilde"
Sources.BitmapSource.Empty "Ingen bitmap skrivd inn. Vennligst bla gjennom og velg bitmap"
Sources.BitmapSource.Empty "Ingen bitmap skrivd inn. Vennligst bla i gjennom og velg bitmap"
Sources.BitmapSource.ResetSize "Gjenninnstill størrelse"
Sources.DesktopSource.Monitor "Opptaksskjerm:"

View File

@ -1,4 +1,4 @@
Add "Добавить"
Add "Добавить"
Apply "Применить"
Browse "Найти"
Cancel "Отменить"
@ -10,6 +10,7 @@ Disable "Отключено"
EnterName "Пожалуйста введите имя"
GlobalSources "Глобальные источники"
NameExists "'$1' уже занято. Пожалуйста введите другое имя"
None "Отсутствует"
OK "OK"
Plugins "Плагины"
Scene "Сцену"
@ -69,6 +70,9 @@ Settings.SaveChangesPrompt "Сохранить и применить измен
Settings.SaveChangesTitle "Применить настройки?"
Settings.Video "Видео"
Settings.Advanced.VideoEncoderCPUTradeoff "CPU пресет:"
Settings.Advanced.VideoEncoderCPUTradeoffTooltip "Установка более быстрого (высокого) значения уменьшает нагрузку процессора, жертвуя некоторыми акпектами качества. С другой стороны, установка медленного (низкого) значения повышает качество за счет увеличения нагрузки на процессор.\r\n\r\nРекомендуется: Very Fast"
Settings.Audio.Device "Микрофон:"
Settings.Encoding.Audio "Кодирование Аудио"
@ -84,9 +88,6 @@ Settings.Encoding.Video.MaxBitRate "Максимальный битре
Settings.Encoding.Video.MaxBitRateTooltip "Установка максимального значения битрейта для видео. Напрямую зависит от вашей исходящей скорости интернета. Отметим, что заданный битрейт будет средним значением, но так же на него будет влиять размера буфера.\r\n\r\nВоспользуйтесь сайтом, например speedtest.net, чтобы узнать свою исходящую скорость интернета."
Settings.Encoding.Video.Quality "Качество:"
Settings.Encoding.Video.QualityTooltip "Эта опция будет подстраивать качество в зависимости от установленных битрейта и буфера. При установки высокого значения и низкого битрейта будет жертвоваться качеством в динамичных сценах в пользу статичных."
Settings.Encoding.Video.Tradeoff "CPU пресет:"
Settings.Encoding.Video.TradeoffTooltip "Установка более быстрого (высокого) значения уменьшает нагрузку процессора, жертвуя некоторыми акпектами качества. С другой стороны, установка медленного (низкого) значения повышает качество за счет увеличения нагрузки на процессор.\r\n\r\nРекомендуется: Very Fast"
Settings.Encoding.Video.UseI444 "Использовать YUV 4:4:4"
Settings.General.Add "Добавить"
Settings.General.ConfirmDelete "Вы уверены, что хотите удалить профиль '$1'?"
@ -115,8 +116,6 @@ Settings.Video.FPS "Кадры в секунду (FPS):"
Settings.Video.Monitor "Монитор:"
Settings.Video.Resolution "Базовое разрешение:"
Settings.Video.Downscale.None "Отсутствует"
Sources.BitmapSource "Изображение"
Sources.GlobalSource "Глобальный источник"
Sources.SoftwareCaptureSource "Программный источник захвата"