New upstream version 25.0.3+dfsg1

This commit is contained in:
Sebastian Ramacher 2020-03-25 09:07:22 +01:00
parent 04fe0efc67
commit 8b2e5f2130
569 changed files with 62491 additions and 5875 deletions

View file

@ -48,20 +48,20 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
add_subdirectory(linux-jack)
endif()
if(WIN32 OR APPLE)
option(BUILD_BROWSER "Build browser plugin" OFF)
if (BUILD_BROWSER)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser/CMakeLists.txt")
add_subdirectory(obs-browser)
set(BROWSER_AVAILABLE_INTERNAL ON CACHE BOOL "Interal global cmake variable" FORCE)
else()
message(STATUS "obs-browser submodule not found! Please fetch submodules. obs-browser plugin disabled.")
set(BROWSER_AVAILABLE_INTERNAL OFF CACHE BOOL "Interal global cmake variable" FORCE)
endif()
option(BUILD_BROWSER "Build browser plugin" OFF)
if (BUILD_BROWSER)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser/CMakeLists.txt")
add_subdirectory(obs-browser)
set(BROWSER_AVAILABLE_INTERNAL ON CACHE BOOL "Internal global cmake variable" FORCE)
else()
set(BROWSER_AVAILABLE_INTERNAL OFF CACHE BOOL "Interal global cmake variable" FORCE)
message(STATUS "obs-browser submodule not found! Please fetch submodules. obs-browser plugin disabled.")
set(BROWSER_AVAILABLE_INTERNAL OFF CACHE BOOL "Internal global cmake variable" FORCE)
endif()
else()
set(BROWSER_AVAILABLE_INTERNAL OFF CACHE BOOL "Internal global cmake variable" FORCE)
endif()
if(WIN32 OR APPLE)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/obs-vst/CMakeLists.txt")
add_subdirectory(obs-vst)
else()

View file

@ -1,4 +1,5 @@
CoreAudioAAC="Кодер CoreAudio AAC"
Bitrate="Битрейт"
AllowHEAAC="Позволи HE-AAC"
AllowHEAAC="Позволяване на HE-AAC"
OutputSamplerate="Изходна честота на дискретизация"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC-encoder"
Bitrate="Bit-hastighed"
Bitrate="Bithastighed"
AllowHEAAC="Tillad HE-AAC"
OutputSamplerate="Output Samplingsfrekvens"
UseInputSampleRate="Benyt Input (OBS) Samplingsfrekvens (kan vise uunderstøttede bit-hastigheder)"
UseInputSampleRate="Benyt Input (OBS) Samplingsfrekvens (kan vise uunderstøttede bithastigheder)"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC Kodierer"
CoreAudioAAC="CoreAudioAACKodierer"
Bitrate="Bitrate"
AllowHEAAC="Erlaube HEAAC"
OutputSamplerate="Ausgabeabtastrate"
UseInputSampleRate="Verwenden Sie Eingabe (OBS) Abtastrate (kann nicht unterstützte Bitraten auflisten)"
AllowHEAAC="HEAAC erlauben"
OutputSamplerate="AusgabeSampleRate"
UseInputSampleRate="EingabeSampleRate (OBS) verwenden (Listet möglicherweise nicht unterstützte Bitraten auf.)"

View file

@ -1,4 +1,6 @@
CoreAudioAAC="هسته صدا کدگذاری AAC"
Bitrate="نرخ بیت"
OutputSamplerate="نرخ صدای نمونه"
UseInputSampleRate="استفاده از ورودی (OBS) میزان نمونه (پشتیبانی نشده bitrates لیست ممکن است)"
AllowHEAAC="اجازه AAC با راندمان بالا"
OutputSamplerate="نرخ نمونه خروجی"
UseInputSampleRate="استفاده از ورودی (OBS) نرخ نمونه (ممکن است بیت ریت های پشتیبانی نشده را لیست کند)ممکن است بیت ریت های پشتیبانی نشده را لیست کند"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC enkodér"
Bitrate="Dátový tok"
Bitrate="Bitrate"
AllowHEAAC="Povoliť HE-AAC"
OutputSamplerate="Vzorkovacia frekvencia výstupu"
UseInputSampleRate="Použiť vstupnú (OBS) vzorkovaciu frekvenciu (môže obsahovať nepodporované dátové toky)"
UseInputSampleRate="Použiť vstupnú (OBS) vzorkovaciu frekvenciu (môže obsahovať nepodporované bitraty)"

View file

@ -1,4 +1,6 @@
CoreAudioAAC="Bộ mã hóa CoreAudio AAC"
Bitrate="Bitrate"
AllowHEAAC="Cho phép HE-AAC"
OutputSamplerate="Tốc độ lấy mẫu đầu ra"
UseInputSampleRate="Sử dụng tốc độ lấy mẫu đầu vào của (OBS) (bitrate được liệt kê có thể không hỗ trợ)"

View file

@ -1,6 +1,6 @@
#include "audio-repack.h"
#include <emmintrin.h>
#include <util/sse-intrin.h>
int check_buffer(struct audio_repack *repack, uint32_t frame_count)
{

View file

@ -2,4 +2,21 @@ BlackmagicDevice="Blackmagic устройство"
Device="Устройство"
Mode="Режим"
Buffering="Използвай буфериране"
PixelFormat="Формат на пиксела"
ColorSpace="Цветово пространство"
ColorSpace.Default="По подразбиране"
ColorRange="Цветови обхват"
ColorRange.Default="По подразбиране"
ColorRange.Partial="Частично"
ColorRange.Full="Пълно"
ChannelFormat="Канал"
ChannelFormat.None="Без"
ChannelFormat.2_0ch="2 канала"
ChannelFormat.2_1ch="2.1 канала"
ChannelFormat.4_0ch="4 канала"
ChannelFormat.4_1ch="4.1 канала"
ChannelFormat.5_1ch="5.1 канала"
ChannelFormat.7_1ch="7.1 канала"
DeactivateWhenNotShowing="Изключване, когато не се показва"
AutoStart="Автоматично започване при пускане"

View file

@ -11,7 +11,7 @@ ColorRange.Partial="Parcial"
ColorRange.Full="Complet"
ChannelFormat="Canal"
ChannelFormat.None="Cap"
ChannelFormat.2_0ch="Estèreo "
ChannelFormat.2_0ch="Estèreo"
ChannelFormat.2_1ch="Canals 2.1"
ChannelFormat.4_0ch="4"
ChannelFormat.4_1ch="4.1"

View file

@ -1,7 +1,7 @@
BlackmagicDevice="BlackmagicGerät"
Device="Gerät"
Mode="Modus"
Buffering="Puffern benutzen"
Buffering="Pufferung benutzen"
PixelFormat="Pixelformat"
ColorSpace="Farbraum"
ColorSpace.Default="Standard"
@ -17,7 +17,7 @@ ChannelFormat.4_0ch="4Kanal"
ChannelFormat.4_1ch="4.1Kanal"
ChannelFormat.5_1ch="5.1Kanal"
ChannelFormat.7_1ch="7.1Kanal"
DeactivateWhenNotShowing="Deaktivieren, wenn die Quelle nicht angezeigt wird"
DeactivateWhenNotShowing="Deaktivieren, wenn Quelle nicht gezeigt"
AutoStart="Automatisch beim Öffnen starten"
SwapFC-LFE="FC und LFE tauschen"
SwapFC-LFE.Tooltip="Vorderen FrontCenterKanal und LFEKanal tauschen"

View file

@ -11,7 +11,7 @@ ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
ChannelFormat="Canal"
ChannelFormat.None="Ninguno"
ChannelFormat.2_0ch="Estéreo "
ChannelFormat.2_0ch="Estéreo"
ChannelFormat.2_1ch="2.1 canales"
ChannelFormat.4_0ch="4 canales"
ChannelFormat.4_1ch="4.1 canales"

View file

@ -17,4 +17,6 @@ ChannelFormat.5_1ch="5.1ch"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Desativar quando não visível"
AutoStart="Iniciar automaticamente ao arrancar"
VideoConnection="Conexão de Vídeo"
AudioConnection="Conexão de Audio"

View file

@ -2,7 +2,7 @@ BlackmagicDevice="Blackmagic naprave"
Device="Naprava"
Mode="Način"
Buffering="Uporabi medpomnilnik"
PixelFormat="Oblika sl. točk"
PixelFormat="Format piksla"
ColorSpace="Barvni prostor"
ColorSpace.Default="Privzeto"
ColorRange="Barvni razpon"
@ -11,12 +11,12 @@ ColorRange.Partial="Delno"
ColorRange.Full="Polno"
ChannelFormat="Kanal"
ChannelFormat.None="Brez"
ChannelFormat.2_0ch="2 kan."
ChannelFormat.2_1ch="2.1 kan."
ChannelFormat.4_0ch="4 kan."
ChannelFormat.4_1ch="4.1 kan."
ChannelFormat.5_1ch="5.1 kan."
ChannelFormat.7_1ch="7.1 kan."
ChannelFormat.2_0ch="2 kanala"
ChannelFormat.2_1ch="2.1 kanalov"
ChannelFormat.4_0ch="4 kanali"
ChannelFormat.4_1ch="4.1 kanalov"
ChannelFormat.5_1ch="5.1 kanalov"
ChannelFormat.7_1ch="7.1 kanalov"
DeactivateWhenNotShowing="Onemogoči, ko ni prikazano"
AutoStart="Samodejno zaženi ob zagonu"
SwapFC-LFE="Zamenjaj SS in nizke tone"

View file

@ -19,6 +19,8 @@ ChannelFormat.5_1ch="5.1ch"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Gösterilmediğinde devre dışı bırak"
AutoStart="Açılışta otomatik olarak başlat"
SwapFC-LFE="FC ve LFE'yi değiştir"
SwapFC-LFE.Tooltip="Ön Merkez Kanalı ve LFE Kanalı Değişimi"
VideoConnection="Video Bağlantısı"
AudioConnection="Ses Bağlantısı"

View file

@ -1,5 +1,11 @@
BlackmagicDevice="Thiết bị Blackmagic"
Device="Thiết bị"
Mode="Chế độ"
Buffering="Dùng đệm"
PixelFormat="Định dạng điểm ảnh"
ColorSpace="Không gian màu"
ColorSpace.Default="Mặc định"
ColorRange="Phạm vi màu"
ColorRange.Default="Mặc định"
ColorRange.Partial="Một phần"
ColorRange.Full="Đầy đủ"
@ -11,4 +17,10 @@ ChannelFormat.4_0ch="4ch"
ChannelFormat.4_1ch="4.1ch"
ChannelFormat.5_1ch="5.1ch"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Tắt khi không hiển thị"
AutoStart="Tự bắt đầu khi khởi động"
SwapFC-LFE="Tráo đổi FC và LFE"
SwapFC-LFE.Tooltip="Tráo đổi kênh âm Front Center và LFE"
VideoConnection="Kết nối video"
AudioConnection="Kết nối Audio"

View file

@ -22,7 +22,7 @@ static void *decklink_output_create(obs_data_t *settings, obs_output_t *output)
decklinkOutput->deviceHash = obs_data_get_string(settings, DEVICE_HASH);
decklinkOutput->modeID = obs_data_get_int(settings, MODE_ID);
decklinkOutput->keyerMode = obs_data_get_int(settings, KEYER);
decklinkOutput->keyerMode = (int)obs_data_get_int(settings, KEYER);
return decklinkOutput;
}
@ -33,7 +33,7 @@ static void decklink_output_update(void *data, obs_data_t *settings)
decklink->deviceHash = obs_data_get_string(settings, DEVICE_HASH);
decklink->modeID = obs_data_get_int(settings, MODE_ID);
decklink->keyerMode = obs_data_get_int(settings, KEYER);
decklink->keyerMode = (int)obs_data_get_int(settings, KEYER);
}
static bool decklink_output_start(void *data)
@ -46,6 +46,9 @@ static bool decklink_output_start(void *data)
return false;
}
if (!decklink->deviceHash || !*decklink->deviceHash)
return false;
decklink->audio_samplerate = aoi.samples_per_sec;
decklink->audio_planes = 2;
decklink->audio_size =
@ -74,7 +77,9 @@ static bool decklink_output_start(void *data)
obs_output_set_video_conversion(decklink->GetOutput(), &to);
device->SetKeyerMode(decklink->keyerMode);
decklink->Activate(device, decklink->modeID);
if (!decklink->Activate(device, decklink->modeID))
return false;
struct audio_convert_info conversion = {};
conversion.format = AUDIO_FORMAT_16BIT;

View file

@ -342,6 +342,7 @@ struct obs_source_info create_decklink_source_info()
decklink_source_info.update = decklink_update;
decklink_source_info.show = decklink_show;
decklink_source_info.hide = decklink_hide;
decklink_source_info.icon_type = OBS_ICON_TYPE_CAMERA;
return decklink_source_info;
}

View file

@ -2,19 +2,23 @@
#if defined(_WIN32)
#include <DeckLinkAPI.h>
#include "win/decklink-sdk/DeckLinkAPIVersion.h"
typedef BOOL decklink_bool_t;
typedef BSTR decklink_string_t;
IDeckLinkDiscovery *CreateDeckLinkDiscoveryInstance(void);
IDeckLinkIterator *CreateDeckLinkIteratorInstance(void);
#define IUnknownUUID IID_IUnknown
typedef REFIID CFUUIDBytes;
#define CFUUIDGetUUIDBytes(x) x
#elif defined(__APPLE__)
#include "mac/decklink-sdk/DeckLinkAPI.h"
#include "mac/decklink-sdk/DeckLinkAPIVersion.h"
#include <CoreFoundation/CoreFoundation.h>
typedef bool decklink_bool_t;
typedef CFStringRef decklink_string_t;
#elif defined(__linux__)
#include "linux/decklink-sdk/DeckLinkAPI.h"
#include "linux/decklink-sdk/DeckLinkAPIVersion.h"
typedef bool decklink_bool_t;
typedef const char *decklink_string_t;
#endif

View file

@ -14,8 +14,43 @@ struct obs_source_info decklink_source_info;
extern struct obs_output_info create_decklink_output_info();
struct obs_output_info decklink_output_info;
void log_sdk_version()
{
IDeckLinkIterator *deckLinkIterator;
IDeckLinkAPIInformation *deckLinkAPIInformation;
HRESULT result;
deckLinkIterator = CreateDeckLinkIteratorInstance();
if (deckLinkIterator == NULL) {
blog(LOG_WARNING,
"A DeckLink iterator could not be created. The DeckLink drivers may not be installed");
return;
}
result = deckLinkIterator->QueryInterface(
IID_IDeckLinkAPIInformation, (void **)&deckLinkAPIInformation);
if (result == S_OK) {
decklink_string_t deckLinkVersion;
deckLinkAPIInformation->GetString(BMDDeckLinkAPIVersion,
&deckLinkVersion);
blog(LOG_INFO, "Decklink API Compiled version %s",
BLACKMAGIC_DECKLINK_API_VERSION_STRING);
std::string versionString;
DeckLinkStringToStdString(deckLinkVersion, versionString);
blog(LOG_INFO, "Decklink API Installed version %s",
versionString.c_str());
deckLinkAPIInformation->Release();
}
}
bool obs_module_load(void)
{
log_sdk_version();
deviceEnum = new DeckLinkDeviceDiscovery();
if (!deviceEnum->Init())
return true;

View file

@ -11,6 +11,15 @@ IDeckLinkDiscovery *CreateDeckLinkDiscoveryInstance(void)
return result == S_OK ? instance : nullptr;
}
IDeckLinkIterator *CreateDeckLinkIteratorInstance(void)
{
IDeckLinkIterator *iterator;
const HRESULT result =
CoCreateInstance(CLSID_CDeckLinkIterator, nullptr, CLSCTX_ALL,
IID_IDeckLinkIterator, (void **)&iterator);
return result == S_OK ? iterator : nullptr;
}
bool DeckLinkStringToStdString(decklink_string_t input, std::string &output)
{
if (input == nullptr)

View file

@ -99,24 +99,50 @@ static uint32_t color_source_getheight(void *data)
return context->height;
}
static void color_source_defaults(obs_data_t *settings)
static void color_source_defaults_v1(obs_data_t *settings)
{
obs_data_set_default_int(settings, "color", 0xFFFFFFFF);
obs_data_set_default_int(settings, "width", 400);
obs_data_set_default_int(settings, "height", 400);
}
struct obs_source_info color_source_info = {
static void color_source_defaults_v2(obs_data_t *settings)
{
obs_data_set_default_int(settings, "color", 0xFFFFFFFF);
obs_data_set_default_int(settings, "width", 1920);
obs_data_set_default_int(settings, "height", 1080);
}
struct obs_source_info color_source_info_v1 = {
.id = "color_source",
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW |
OBS_SOURCE_CAP_OBSOLETE,
.create = color_source_create,
.destroy = color_source_destroy,
.update = color_source_update,
.get_name = color_source_get_name,
.get_defaults = color_source_defaults_v1,
.get_width = color_source_getwidth,
.get_height = color_source_getheight,
.video_render = color_source_render,
.get_properties = color_source_properties,
.icon_type = OBS_ICON_TYPE_COLOR,
};
struct obs_source_info color_source_info_v2 = {
.id = "color_source",
.version = 2,
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW,
.create = color_source_create,
.destroy = color_source_destroy,
.update = color_source_update,
.get_name = color_source_get_name,
.get_defaults = color_source_defaults,
.get_defaults = color_source_defaults_v2,
.get_width = color_source_getwidth,
.get_height = color_source_getheight,
.video_render = color_source_render,
.get_properties = color_source_properties,
.icon_type = OBS_ICON_TYPE_COLOR,
};

View file

@ -16,18 +16,18 @@ SlideShow.Transition.Fade="Überblenden"
SlideShow.Transition.Swipe="Swipe"
SlideShow.Transition.Slide="Slide"
SlideShow.PlaybackBehavior="Sichtbarkeitsverhalten"
SlideShow.PlaybackBehavior.StopRestart="Anhalten, wenn nicht sichtbar, neustarten, wenn sichtbar"
SlideShow.PlaybackBehavior.PauseUnpause="Pausieren, wenn nicht sichtbar, fortsetzen, wenn sichtbar"
SlideShow.PlaybackBehavior.StopRestart="Anhalten, wenn nicht sichtbar; neustarten, wenn sichtbar"
SlideShow.PlaybackBehavior.PauseUnpause="Pausieren, wenn nicht sichtbar; fortsetzen, wenn sichtbar"
SlideShow.PlaybackBehavior.AlwaysPlay="Immer abspielen, auch wenn nicht sichtbar"
SlideShow.SlideMode="Diashowmodus"
SlideShow.SlideMode.Auto="Automatisch"
SlideShow.SlideMode.Manual="Manuell (Hotkeys verwenden, um Diashow zu steuern)"
SlideShow.SlideMode.Manual="Manuell (Hotkeys für die Steuerung der Diashow verwenden)"
SlideShow.PlayPause="Abspielen/pausieren"
SlideShow.Restart="Neustarten"
SlideShow.Stop="Stop"
SlideShow.Stop="Stoppen"
SlideShow.NextSlide="Nächstes Bild"
SlideShow.PreviousSlide="Vorheriges Bild"
SlideShow.HideWhenDone="Verbergen, wenn die Diashow vorbei ist"
SlideShow.HideWhenDone="Verbergen, wenn Diashow vorbei"
ColorSource="Farbquelle"
ColorSource.Color="Farbe"

View file

@ -1,6 +1,6 @@
ImageInput="Imagen"
File="Archivo de imagen"
UnloadWhenNotShowing="Descargar la imagen mientras no se muestre"
UnloadWhenNotShowing="Descarga la imagen de la memoria cuando no se muestre"
SlideShow="Galería de imágenes"
SlideShow.TransitionSpeed="Velocidad de la transición (milisegundos)"

View file

@ -6,7 +6,7 @@ SlideShow="Diaporama"
SlideShow.TransitionSpeed="Velocidade da transición (milisegundos)"
SlideShow.SlideTime="Tempo entre diapositivas (milisegundos)"
SlideShow.Files="Ficheiros de imaxe"
SlideShow.CustomSize="Límite do tamaño/relación de aspecto"
SlideShow.CustomSize="Límite do tamaño/proporción do aspecto"
SlideShow.CustomSize.Auto="Automático"
SlideShow.Randomize="Reproducir ao chou"
SlideShow.Loop="Bucle"

View file

@ -0,0 +1,4 @@
ImageInput="ਤਸਵੀਰ"

View file

@ -15,9 +15,13 @@ SlideShow.Transition.Fade="Desvanecer"
SlideShow.Transition.Swipe="Deslizar"
SlideShow.Transition.Slide="Deslize"
SlideShow.PlaybackBehavior.AlwaysPlay="Reproduzir sempre, mesmo quando não está visível"
SlideShow.SlideMode="Modo de Slide"
SlideShow.SlideMode.Auto="Automático"
SlideShow.PlayPause="Play/Pausa"
SlideShow.Restart="Reiniciar"
SlideShow.Stop="Stop"
SlideShow.NextSlide="Próximo Slide"
SlideShow.PreviousSlide="Slide Anterior"
ColorSource.Color="Cor"
ColorSource.Width="Largura"

View file

@ -265,7 +265,9 @@ static struct obs_source_info image_source_info = {
.get_height = image_source_getheight,
.video_render = image_source_render,
.video_tick = image_source_tick,
.get_properties = image_source_properties};
.get_properties = image_source_properties,
.icon_type = OBS_ICON_TYPE_IMAGE,
};
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("image-source", "en-US")
@ -275,12 +277,14 @@ MODULE_EXPORT const char *obs_module_description(void)
}
extern struct obs_source_info slideshow_info;
extern struct obs_source_info color_source_info;
extern struct obs_source_info color_source_info_v1;
extern struct obs_source_info color_source_info_v2;
bool obs_module_load(void)
{
obs_register_source(&image_source_info);
obs_register_source(&color_source_info);
obs_register_source(&color_source_info_v1);
obs_register_source(&color_source_info_v2);
obs_register_source(&slideshow_info);
return true;
}

View file

@ -64,7 +64,7 @@
extern uint64_t image_source_get_memory_usage(void *data);
#define BYTES_TO_MBYTES (1024 * 1024)
#define MAX_MEM_USAGE (250 * BYTES_TO_MBYTES)
#define MAX_MEM_USAGE (400 * BYTES_TO_MBYTES)
struct image_file_data {
char *path;
@ -940,4 +940,5 @@ struct obs_source_info slideshow_info = {
.get_height = ss_height,
.get_defaults = ss_defaults,
.get_properties = ss_properties,
.icon_type = OBS_ICON_TYPE_SLIDESHOW,
};

View file

@ -88,6 +88,7 @@ struct obs_source_info alsa_input_capture = {
.get_defaults = alsa_get_defaults,
.get_name = alsa_get_name,
.get_properties = alsa_get_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_INPUT,
};
static bool _alsa_try_open(struct alsa_data *);

View file

@ -1,2 +1,3 @@
AlsaInput="Naprava za zajemanje zvoka (ALSA)"
Device="Naprava"

View file

@ -1,14 +1,15 @@
X11SharedMemoryScreenInput="صفحه نمایش ضبط (XSHM)"
X11SharedMemoryScreenInput="ضبط صفحه نمایش(XSHM)"
Screen="صفحه نمایش"
CaptureCursor="گرفتن مکان نما"
CaptureCursor="ضبط مکان نمای ماوس"
AdvancedSettings="تنظیمات پیشرفته"
XServer="سرویس دهنده"
XCCapture="ضبط پنجره (Xcomposite)"
Window="ویندوز"
Window="پنجره"
CropTop="برش بالا (پیکسل)"
CropLeft="برش چپ (پیکسل)"
CropRight="برش راست (پیکسل)"
CropBottom="برش پایین (پیکسل)"
SwapRedBlue="قرمز و آبی را تعویض کنید"
LockX="سرور اکس قفل هنگام گرفتن"
IncludeXBorder="شامل X مرز"
ExcludeAlpha="استفاده از فرمت های بافت آلفا کمتر (مسا حلی)"

View file

@ -2,14 +2,15 @@ X11SharedMemoryScreenInput="Zajemanje zaslona (XSHM)"
Screen="Zaslon"
CaptureCursor="Zajemi kazalec"
AdvancedSettings="Napredne nastavitve"
XServer="X Server"
XServer="X strežnik"
XCCapture="Zajemanje okna (Xcomposite)"
Window="Okno"
CropTop="Obreži zgoraj (pixels)"
CropLeft="Obreži levo (pixels)"
CropRight="Obreži desno (pixels)"
CropBottom="Obreži spodaj (pixels)"
CropTop="Obreži zgoraj (sl. točke)"
CropLeft="Obreži levo (sl. točke)"
CropRight="Obreži desno (sl. točke)"
CropBottom="Obreži spodaj (sl. točke)"
SwapRedBlue="Zamenjaj modro in rdečo"
LockX="Zakleni X server med zajemanjem"
IncludeXBorder="Vključujejo X meje"
LockX="Zakleni X sstrežnik med zajemanjem"
IncludeXBorder="Vključi obrobo X"
ExcludeAlpha="Uporabi format za teksture, ki je brez alfa kanala (Mesa obvod)"

View file

@ -1,7 +1,7 @@
X11SharedMemoryScreenInput="Quay màn hỉnh (XSHM)"
Screen="Màn hình"
CaptureCursor="Quay cả con trỏ"
AdvancedSettings="Cài đặt nâng cao"
AdvancedSettings="Thiết đặt nâng cao"
XServer="X Server"
XCCapture="Quay cửa sổ (Xcomposite)"
Window="Cửa sổ"

View file

@ -1,7 +1,7 @@
X11SharedMemoryScreenInput="截取螢幕XSHM"
Screen="螢幕"
CaptureCursor="捕捉游標"
AdvancedSettings="進階設定 "
AdvancedSettings="進階設定"
XServer="X server"
XCCapture="截取視窗Xcomposite"
Window="視窗"

View file

@ -82,6 +82,7 @@ extern "C" void xcomposite_load(void)
sinfo.video_render = xcompcap_video_render;
sinfo.get_width = xcompcap_getwidth;
sinfo.get_height = xcompcap_getheight;
sinfo.icon_type = OBS_ICON_TYPE_WINDOW_CAPTURE,
obs_register_source(&sinfo);
}

View file

@ -104,6 +104,22 @@ bool randr_is_active(xcb_connection_t *xcb)
return true;
}
static bool randr_has_monitors(xcb_connection_t *xcb)
{
xcb_randr_query_version_cookie_t ver_c;
xcb_randr_query_version_reply_t *ver_r;
ver_c = xcb_randr_query_version(xcb, XCB_RANDR_MAJOR_VERSION,
XCB_RANDR_MINOR_VERSION);
ver_r = xcb_randr_query_version_reply(xcb, ver_c, 0);
if (!ver_r)
return 0;
bool ret = ver_r->major_version > 1 || ver_r->minor_version >= 5;
free(ver_r);
return ret;
}
int randr_screen_count(xcb_connection_t *xcb)
{
if (!xcb)
@ -111,6 +127,19 @@ int randr_screen_count(xcb_connection_t *xcb)
xcb_screen_t *screen;
screen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
if (randr_has_monitors(xcb)) {
xcb_randr_get_monitors_cookie_t mon_c;
xcb_randr_get_monitors_reply_t *mon_r;
mon_c = xcb_randr_get_monitors(xcb, screen->root, true);
mon_r = xcb_randr_get_monitors_reply(xcb, mon_c, 0);
if (!mon_r)
return 0;
int count = xcb_randr_get_monitors_monitors_length(mon_r);
free(mon_r);
return count;
}
xcb_randr_get_screen_resources_cookie_t res_c;
xcb_randr_get_screen_resources_reply_t *res_r;
@ -124,11 +153,58 @@ int randr_screen_count(xcb_connection_t *xcb)
int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
int_fast32_t *x, int_fast32_t *y, int_fast32_t *w,
int_fast32_t *h, xcb_screen_t **rscreen)
int_fast32_t *h, xcb_screen_t **rscreen, char **name)
{
xcb_screen_t *xscreen;
xscreen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
if (randr_has_monitors(xcb)) {
xcb_randr_get_monitors_cookie_t mon_c;
xcb_randr_get_monitors_reply_t *mon_r;
mon_c = xcb_randr_get_monitors(xcb, xscreen->root, true);
mon_r = xcb_randr_get_monitors_reply(xcb, mon_c, 0);
if (!mon_r)
return 0;
int monitors = xcb_randr_get_monitors_monitors_length(mon_r);
if (screen < 0 || screen >= monitors) {
free(mon_r);
goto fail;
}
xcb_randr_monitor_info_iterator_t mon_i;
mon_i = xcb_randr_get_monitors_monitors_iterator(mon_r);
int s;
for (s = 0; s < screen; s++)
xcb_randr_monitor_info_next(&mon_i);
xcb_randr_monitor_info_t *mon = mon_i.data;
*x = mon->x;
*y = mon->y;
*w = mon->width;
*h = mon->height;
if (rscreen)
*rscreen = xscreen;
if (mon->name && name) {
xcb_get_atom_name_cookie_t atom_c;
xcb_get_atom_name_reply_t *atom_r;
atom_c = xcb_get_atom_name(xcb, mon->name);
atom_r = xcb_get_atom_name_reply(xcb, atom_c, 0);
if (atom_r) {
*name = strndup(
xcb_get_atom_name_name(atom_r),
xcb_get_atom_name_name_length(atom_r));
free(atom_r);
}
}
free(mon_r);
return 0;
}
xcb_randr_get_screen_resources_cookie_t res_c;
xcb_randr_get_screen_resources_reply_t *res_r;

View file

@ -94,7 +94,7 @@ int randr_screen_count(xcb_connection_t *xcb);
*/
int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
int_fast32_t *x, int_fast32_t *y, int_fast32_t *w,
int_fast32_t *h, xcb_screen_t **rscreen);
int_fast32_t *h, xcb_screen_t **rscreen, char **name);
/**
* Get screen geometry for a X11 screen

View file

@ -104,7 +104,7 @@ static int_fast32_t xshm_update_geometry(struct xshm_data *data)
if (data->use_randr) {
if (randr_screen_geo(data->xcb, data->screen_id, &data->x_org,
&data->y_org, &data->width, &data->height,
&data->xcb_screen) < 0) {
&data->xcb_screen, NULL) < 0) {
return -1;
}
} else if (data->use_xinerama) {
@ -308,21 +308,31 @@ static bool xshm_server_changed(obs_properties_t *props, obs_property_t *p,
: xcb_setup_roots_length(xcb_get_setup(xcb));
for (int_fast32_t i = 0; i < count; ++i) {
char *name;
char name_tmp[12];
int_fast32_t x, y, w, h;
x = y = w = h = 0;
name = NULL;
if (randr)
randr_screen_geo(xcb, i, &x, &y, &w, &h, NULL);
randr_screen_geo(xcb, i, &x, &y, &w, &h, NULL, &name);
else if (xinerama)
xinerama_screen_geo(xcb, i, &x, &y, &w, &h);
else
x11_screen_geo(xcb, i, &w, &h);
if (name == NULL) {
sprintf(name_tmp, "%" PRIuFAST32, i);
name = name_tmp;
}
dstr_printf(&screen_info,
"Screen %" PRIuFAST32 " (%" PRIuFAST32
"x%" PRIuFAST32 " @ %" PRIuFAST32 ",%" PRIuFAST32
")",
i, w, h, x, y);
"Screen %s (%" PRIuFAST32 "x%" PRIuFAST32
" @ %" PRIuFAST32 ",%" PRIuFAST32 ")",
name, w, h, x, y);
if (name != name_tmp)
free(name);
if (h > 0 && w > 0)
obs_property_list_add_int(screens, screen_info.array,
@ -508,4 +518,5 @@ struct obs_source_info xshm_input = {
.video_render = xshm_video_render,
.get_width = xshm_getwidth,
.get_height = xshm_getheight,
.icon_type = OBS_ICON_TYPE_DESKTOP_CAPTURE,
};

View file

@ -1,3 +1,4 @@
StartJACKServer="شروع JACK سرور"
Channels="تعداد کانال"
StartJACKServer="شروع درگاه سرور"
Channels="تعداد کانال ها"
JACKInput="درگاه ورودی کلاینت"

View file

@ -1,4 +1,4 @@
StartJACKServer="Vklopi JACK Server"
StartJACKServer="Zaženi JACK strežnik"
Channels="Število kanalov"
JACKInput="JACK vhodni odjemalec"

View file

@ -147,4 +147,5 @@ struct obs_source_info jack_output_capture = {
.update = jack_update,
.get_defaults = jack_input_defaults,
.get_properties = jack_input_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_OUTPUT,
};

View file

@ -594,6 +594,7 @@ struct obs_source_info pulse_input_capture = {
.update = pulse_update,
.get_defaults = pulse_defaults,
.get_properties = pulse_input_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_INPUT,
};
struct obs_source_info pulse_output_capture = {
@ -607,4 +608,5 @@ struct obs_source_info pulse_output_capture = {
.update = pulse_update,
.get_defaults = pulse_defaults,
.get_properties = pulse_output_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_OUTPUT,
};

View file

@ -31,6 +31,7 @@ include_directories(
set(linux-v4l2_SOURCES
linux-v4l2.c
v4l2-controls.c
v4l2-input.c
v4l2-helpers.c
${linux-v4l2-udev_SOURCES}

View file

@ -7,7 +7,7 @@ DVTiming="DVTiming"
Resolution="Auflösung"
FrameRate="Bildrate"
LeaveUnchanged="Unverändert lassen"
UseBuffering="Puffern benutzen"
UseBuffering="Pufferung benutzen"
ColorRange="Farbbereich"
ColorRange.Default="Standard"
ColorRange.Partial="Begrenzt"

View file

@ -1,14 +1,15 @@
V4L2Input="دستگاه ضبط ویدئویی (V4L2)"
Device="دستگاه"
Input="ورودی"
VideoFormat="فرمت های تصویری"
VideoStandard="استاندارد های تصویری"
DVTiming="زمان بندی دی وی"
Resolution="اندازه تصویر"
VideoFormat="فرمت ویدئو"
VideoStandard="استاندارد ویدئو"
DVTiming="زمان بندی فیلم دیجیتال"
Resolution="وضوح"
FrameRate="نرخ فریم"
LeaveUnchanged="ترک بدون تغییر"
UseBuffering="استفاده از بافرینگ"
ColorRange="طیف رنگ"
LeaveUnchanged="رفتن بدون تغییر"
UseBuffering="استفاده از بافر کردن"
ColorRange="محدوده رنگ"
ColorRange.Default="پیش فرض"
ColorRange.Partial="جزئی"
ColorRange.Full="کامل"

View file

@ -9,6 +9,7 @@ FrameRate="Bildefrekvens"
LeaveUnchanged="La stå uendret"
UseBuffering="Bruk bufring"
ColorRange="Fargespekter"
ColorRange.Default="Standard"
ColorRange.Partial="Delvis"
ColorRange.Full="Full"

View file

@ -8,4 +8,8 @@ Resolution="Resolução"
FrameRate="Taxa de fotogramas"
LeaveUnchanged="Deixar inalterado"
UseBuffering="Utilizar Buffering"
ColorRange="Gama de Cores"
ColorRange.Default="Pré-definido"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"

View file

@ -9,6 +9,7 @@ FrameRate="Frekvencia snímok"
LeaveUnchanged="Ponechať bez zmeny"
UseBuffering="Použiť vyrovnávaciu pamäť"
ColorRange="Farebný rozsah"
ColorRange.Default="Predvolený"
ColorRange.Partial="Čiastočný"
ColorRange.Full="Plný"

View file

@ -8,4 +8,8 @@ Resolution="Resolucija"
FrameRate="Slike na sekundo"
LeaveUnchanged="Pusti nespremenjeno"
UseBuffering="Uporabi medpomnilnik"
ColorRange="Barvni razpon"
ColorRange.Default="Privzeti"
ColorRange.Partial="Delni"
ColorRange.Full="Polni"

View file

@ -0,0 +1,153 @@
/*
Copyright (C) 2019 by Gary Kramlich <grim@reaperworld.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, see <http://www.gnu.org/licenses/>.
*/
#include <fcntl.h>
#include <linux/videodev2.h>
#include <libv4l2.h>
#include "v4l2-controls.h"
#define blog(level, msg, ...) blog(level, "v4l2-controls: " msg, ##__VA_ARGS__)
#if defined(__LP64__)
#define UINT_TO_POINTER(val) ((void *)(unsigned long)(val))
#define POINTER_TO_UINT(p) ((unsigned int)(unsigned long)(p))
#else
#define UINT_TO_POINTER(val) ((void *)(unsigned int)(val))
#define POINTER_TO_UINT(p) ((unsigned int)(unsigned int)(p))
#endif
static bool v4l2_control_changed(void *data, obs_properties_t *props,
obs_property_t *prop, obs_data_t *settings)
{
int dev = v4l2_open(obs_data_get_string(settings, "device_id"),
O_RDWR | O_NONBLOCK);
bool ret = false;
(void)props;
if (dev == -1)
return false;
struct v4l2_control control;
control.id = POINTER_TO_UINT(data);
control.value = obs_data_get_int(settings, obs_property_name(prop));
if (0 != v4l2_ioctl(dev, VIDIOC_S_CTRL, &control)) {
ret = true;
}
v4l2_close(dev);
return ret;
}
static int_fast32_t v4l2_update_controls_menu(int_fast32_t dev,
obs_properties_t *props,
struct v4l2_queryctrl *qctrl)
{
obs_property_t *prop;
struct v4l2_querymenu qmenu;
prop = obs_properties_add_list(props, (char *)qctrl->name,
(char *)qctrl->name, OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_INT);
obs_property_set_modified_callback2(prop, v4l2_control_changed,
UINT_TO_POINTER(qctrl->id));
memset(&qmenu, 0, sizeof(qmenu));
qmenu.id = qctrl->id;
for (qmenu.index = qctrl->minimum;
qmenu.index <= (uint32_t)qctrl->maximum;
qmenu.index += qctrl->step) {
if (0 == v4l2_ioctl(dev, VIDIOC_QUERYMENU, &qmenu)) {
obs_property_list_add_int(prop, (char *)qmenu.name,
qmenu.value);
}
}
return 0;
}
#define INVALID_CONTROL_FLAGS \
(V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_READ_ONLY | \
V4L2_CTRL_FLAG_VOLATILE)
static inline bool valid_control(struct v4l2_queryctrl *qctrl)
{
return (qctrl->flags & INVALID_CONTROL_FLAGS) == 0;
}
static inline bool add_control_property(obs_properties_t *props,
obs_data_t *settings, int_fast32_t dev,
struct v4l2_queryctrl *qctrl)
{
obs_property_t *prop = NULL;
if (!valid_control(qctrl)) {
return;
}
switch (qctrl->type) {
case V4L2_CTRL_TYPE_INTEGER:
prop = obs_properties_add_int_slider(
props, (char *)qctrl->name, (char *)qctrl->name,
qctrl->minimum, qctrl->maximum, qctrl->step);
obs_data_set_default_int(settings, (char *)qctrl->name,
qctrl->default_value);
obs_property_set_modified_callback2(prop, v4l2_control_changed,
UINT_TO_POINTER(qctrl->id));
break;
case V4L2_CTRL_TYPE_BOOLEAN:
prop = obs_properties_add_bool(props, (char *)qctrl->name,
(char *)qctrl->name);
obs_data_set_default_bool(settings, (char *)qctrl->name,
qctrl->default_value);
obs_property_set_modified_callback2(prop, v4l2_control_changed,
UINT_TO_POINTER(qctrl->id));
break;
case V4L2_CTRL_TYPE_MENU:
case V4L2_CTRL_TYPE_INTEGER_MENU:
v4l2_update_controls_menu(dev, props, qctrl);
obs_data_set_default_int(settings, (char *)qctrl->name,
qctrl->default_value);
blog(LOG_INFO, "setting default for %s to %d",
(char *)qctrl->name, qctrl->default_value);
break;
}
}
int_fast32_t v4l2_update_controls(int_fast32_t dev, obs_properties_t *props,
obs_data_t *settings)
{
struct v4l2_queryctrl qctrl;
if (!dev || !props)
return -1;
memset(&qctrl, 0, sizeof(qctrl));
qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
while (0 == v4l2_ioctl(dev, VIDIOC_QUERYCTRL, &qctrl)) {
add_control_property(props, settings, dev, &qctrl);
qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
}
return 0;
}

View file

@ -0,0 +1,40 @@
/*
Copyright (C) 2019 by Gary Kramlich <grim@reaperworld.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, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <obs-module.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* Update a devices properties to include all v4l controls that it supports.
*
* @param dev handle to the v4l2 device
* @param props properties for the device
* @param data the settings for the source
*
* @return negative on failure
*/
int_fast32_t v4l2_update_controls(int_fast32_t dev, obs_properties_t *props,
obs_data_t *settings);
#ifdef __cplusplus
}
#endif

View file

@ -35,6 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <util/platform.h>
#include <obs-module.h>
#include "v4l2-controls.h"
#include "v4l2-helpers.h"
#if HAVE_UDEV
@ -579,6 +580,7 @@ static bool device_selected(obs_properties_t *props, obs_property_t *p,
obs_property_t *prop = obs_properties_get(props, "input");
v4l2_input_list(dev, prop);
v4l2_update_controls(dev, props, settings);
v4l2_close(dev);
obs_property_modified(prop, settings);
@ -1005,4 +1007,5 @@ struct obs_source_info v4l2_input = {
.update = v4l2_update,
.get_defaults = v4l2_defaults,
.get_properties = v4l2_properties,
.icon_type = OBS_ICON_TYPE_CAMERA,
};

View file

@ -2194,6 +2194,7 @@ bool obs_module_load(void)
.get_defaults = av_capture_defaults,
.get_properties = av_capture_properties,
.update = av_capture_update,
.icon_type = OBS_ICON_TYPE_CAMERA,
};
obs_register_source(&av_capture_info);

View file

@ -1,8 +1,8 @@
AVCapture="Videoaufnahmegerät"
Device="Gerät"
UsePreset="Benutze Voreinstellung"
UsePreset="Voreinstellung benutzen"
Preset="Voreinstellung"
Buffering="Puffern benutzen"
Buffering="Pufferung benutzen"
FrameRate="Bildrate"
InputFormat="Eingabeformat"
ColorSpace="Farbraum"

View file

@ -3,4 +3,12 @@ Device="Naprava"
UsePreset="Uporabi prednastavljeno"
Preset="Prednastavljeno"
Buffering="Uporabi medpomnilnik"
FrameRate="Hitrost sličic"
InputFormat="Vhodni format"
ColorSpace="Barvni prostor"
VideoRange="Video razpon"
VideoRange.Partial="Delni"
VideoRange.Full="Polni"
Auto="Samodejni"
Unknown="Neznano ($1)"

View file

@ -817,6 +817,7 @@ struct obs_source_info coreaudio_input_capture_info = {
.update = coreaudio_update,
.get_defaults = coreaudio_defaults,
.get_properties = coreaudio_input_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_INPUT,
};
struct obs_source_info coreaudio_output_capture_info = {
@ -830,4 +831,5 @@ struct obs_source_info coreaudio_output_capture_info = {
.update = coreaudio_update,
.get_defaults = coreaudio_defaults,
.get_properties = coreaudio_output_properties,
.icon_type = OBS_ICON_TYPE_AUDIO_OUTPUT,
};

View file

@ -658,4 +658,5 @@ struct obs_source_info display_capture_info = {
.get_defaults = display_capture_defaults,
.get_properties = display_capture_properties,
.update = display_capture_update,
.icon_type = OBS_ICON_TYPE_DESKTOP_CAPTURE,
};

View file

@ -32,12 +32,7 @@ static CGImageRef get_image(struct window_capture *wc)
kCGWindowListOptionIncludingWindow, wc->window.window_id);
[arr autorelease];
if (arr.count)
return CGWindowListCreateImage(
CGRectNull, kCGWindowListOptionIncludingWindow,
wc->window.window_id, wc->image_option);
if (!find_window(&wc->window, NULL, false))
if (!arr.count && !find_window(&wc->window, NULL, false))
return NULL;
return CGWindowListCreateImage(CGRectNull,
@ -235,4 +230,5 @@ struct obs_source_info window_capture_info = {
.get_defaults = window_capture_defaults,
.get_properties = window_capture_properties,
.update = window_capture_update,
.icon_type = OBS_ICON_TYPE_WINDOW_CAPTURE,
};

View file

@ -0,0 +1,13 @@
Syphon="Клиент Syphon"
Source="Източник"
LaunchSyphonInject="Пускане на SyphonInject"
Inject="Вмъкване"
Application="Приложение"
SyphonLicense="Лиценз на Syphon"
Crop="Изрязване"
Crop.origin.x="Изрязване отляво"
Crop.origin.y="Изрязване отгоре"
Crop.size.width="Изрязване отдясно"
Crop.size.height="Изрязване отдолу"
AllowTransparency="Позволяване на прозиране"

View file

@ -1,3 +1,4 @@
Syphon="سیفون کلاینت"
Source="منبع"
LaunchSyphonInject="راه اندازی SyphonInject"
Inject="تزریق"

View file

@ -2,7 +2,7 @@ Syphon="Cliente Syphon"
Source="Fonte"
LaunchSyphonInject="Iniciar SyphonInject"
Inject="Inxectar"
Application="Aplicativo"
Application="Aplicación"
SyphonLicense="Licenza Syphon"
Crop="Recortar"
Crop.origin.x="Recortar pola esquerda"

View file

@ -1,3 +1,4 @@
Syphon="Cliente Syphon"
Source="Fonte"
LaunchSyphonInject="Iniciar SyphonInject"
Inject="Injetar"

View file

@ -1,3 +1,4 @@
Syphon="Syphon odjemalec"
Source="Vir"
LaunchSyphonInject="Zaženi SyphonInject"
Inject="Vstavi"

View file

@ -1281,4 +1281,5 @@ struct obs_source_info syphon_info = {
.get_height = syphon_get_height,
.update = syphon_update,
.save = syphon_save,
.icon_type = OBS_ICON_TYPE_GAME_CAPTURE,
};

View file

@ -3,7 +3,7 @@ VTH264EncSW="AppleVTH264SoftwareKodierer"
VTEncoder="VideoToolboxKodierer"
Bitrate="Bitrate"
UseMaxBitrate="Limitiere Bitrate"
MaxBitrate="Max. Bitrate"
MaxBitrate="Maximale Bitrate"
MaxBitrateWindow="Maximales Bitratenfenster (Sekunden)"
KeyframeIntervalSec="Keyframeintervall in Sek. (0=automatisch)"
Profile="Profil"

View file

@ -1,10 +1,10 @@
VTH264EncHW="Apple VT H264 Hardware Enkodér"
VTH264EncSW="Apple VT H264 Software Enkodér"
VTEncoder="VideoToolbox Enkodér"
Bitrate="Dátový tok"
UseMaxBitrate="Obmedziť dátový tok"
MaxBitrate="Maximálny dátový tok"
MaxBitrateWindow="Maximálny dátový tok okna (v sekundách)"
Bitrate="Bitrate"
UseMaxBitrate="Obmedziť bitrate"
MaxBitrate="Maximálny bitrate"
MaxBitrateWindow="Maximálny bitrate okna (v sekundách)"
KeyframeIntervalSec="Interval kľúčových snímok (sekúnd, 0 = automaticky)"
Profile="Profil"
None="(Žiadny)"

View file

@ -0,0 +1,14 @@
VTH264EncHW="Apple VT H264 strojni kodirnik"
VTH264EncSW="Apple VT H264 strojni kodirnik"
VTEncoder="VideoToolbox kodirnik"
Bitrate="Bitna hitrost"
UseMaxBitrate="Omeji bitno hitrost"
MaxBitrate="Največja bitna hitrost"
MaxBitrateWindow="Okno največje bitne hitrosti (sekunde)"
KeyframeIntervalSec="Razmik med ključnimi sličicami (sekunde, 0=samodejni)"
Profile="Profil"
None="(brez)"
DefaultEncoder="(privzeti kodirnik)"
UseBFrames="Uporabi B-sličice"

View file

@ -1,5 +1,6 @@
#include <obs-module.h>
#include <util/darray.h>
#include <obs-avc.h>
#include <CoreFoundation/CoreFoundation.h>
#include <VideoToolbox/VideoToolbox.h>
@ -671,6 +672,8 @@ static bool is_sample_keyframe(CMSampleBufferRef buffer)
static bool parse_sample(struct vt_h264_encoder *enc, CMSampleBufferRef buffer,
struct encoder_packet *packet, CMTime off)
{
int type;
CMTime pts = CMSampleBufferGetPresentationTimeStamp(buffer);
CMTime dts = CMSampleBufferGetDecodeTimeStamp(buffer);
@ -703,6 +706,37 @@ static bool parse_sample(struct vt_h264_encoder *enc, CMSampleBufferRef buffer,
packet->size = enc->packet_data.num;
packet->keyframe = keyframe;
// VideoToolbox produces packets with priority lower than the RTMP code
// expects, which causes it to be unable to recover from frame drops.
// Fix this by manually adjusting the priority.
uint8_t *start = enc->packet_data.array;
uint8_t *end = start + enc->packet_data.num;
start = (uint8_t *)obs_avc_find_startcode(start, end);
while (true) {
while (start < end && !*(start++))
;
if (start == end)
break;
type = start[0] & 0x1F;
if (type == OBS_NAL_SLICE_IDR || type == OBS_NAL_SLICE) {
uint8_t prev_type = (start[0] >> 5) & 0x3;
start[0] &= ~(3 << 5);
if (type == OBS_NAL_SLICE_IDR)
start[0] |= OBS_NAL_PRIORITY_HIGHEST << 5;
else if (type == OBS_NAL_SLICE &&
prev_type != OBS_NAL_PRIORITY_DISPOSABLE)
start[0] |= OBS_NAL_PRIORITY_HIGH << 5;
else
start[0] |= prev_type << 5;
}
start = (uint8_t *)obs_avc_find_startcode(start, end);
}
CFRelease(buffer);
return true;
@ -929,6 +963,8 @@ void encoder_list_create()
da_push_back(vt_encoders, &enc);
#undef VT_DICTSTR
}
CFRelease(encoder_list);
}
void encoder_list_destroy()

View file

@ -22,7 +22,7 @@ set(obs-ffmpeg_config_HEADERS
set(obs-ffmpeg_HEADERS
obs-ffmpeg-formats.h
obs-ffmpeg-compat.h
closest-pixel-format.h)
ffmpeg-encoded-output.h)
set(obs-ffmpeg_SOURCES
obs-ffmpeg.c
@ -30,6 +30,7 @@ set(obs-ffmpeg_SOURCES
obs-ffmpeg-nvenc.c
obs-ffmpeg-output.c
obs-ffmpeg-mux.c
ffmpeg-encoded-output.c
obs-ffmpeg-source.c)
if(UNIX AND NOT APPLE)

View file

@ -1,94 +0,0 @@
#pragma once
static const enum AVPixelFormat i420_formats[] = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_NV12, AV_PIX_FMT_NV21,
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE};
static const enum AVPixelFormat nv12_formats[] = {
AV_PIX_FMT_NV12, AV_PIX_FMT_NV21, AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE};
static const enum AVPixelFormat i444_formats[] = {
AV_PIX_FMT_YUV444P, AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_NV12,
AV_PIX_FMT_NV21, AV_PIX_FMT_NONE};
static const enum AVPixelFormat yuy2_formats[] = {
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_NV12,
AV_PIX_FMT_NV21, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE};
static const enum AVPixelFormat uyvy_formats[] = {
AV_PIX_FMT_UYVY422, AV_PIX_FMT_YUYV422, AV_PIX_FMT_NV12,
AV_PIX_FMT_NV21, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE};
static const enum AVPixelFormat rgba_formats[] = {
AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_NV12,
AV_PIX_FMT_NV21, AV_PIX_FMT_NONE};
static const enum AVPixelFormat bgra_formats[] = {
AV_PIX_FMT_BGRA, AV_PIX_FMT_RGBA, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_YUYV422, AV_PIX_FMT_UYVY422, AV_PIX_FMT_NV12,
AV_PIX_FMT_NV21, AV_PIX_FMT_NONE};
static enum AVPixelFormat get_best_format(const enum AVPixelFormat *best,
const enum AVPixelFormat *formats)
{
while (*best != AV_PIX_FMT_NONE) {
enum AVPixelFormat best_format = *best;
const enum AVPixelFormat *cur_formats = formats;
while (*cur_formats != AV_PIX_FMT_NONE) {
enum AVPixelFormat avail_format = *cur_formats;
if (best_format == avail_format)
return best_format;
cur_formats++;
}
best++;
}
return AV_PIX_FMT_NONE;
}
static inline enum AVPixelFormat
get_closest_format(enum AVPixelFormat format, const enum AVPixelFormat *formats)
{
enum AVPixelFormat best_format = AV_PIX_FMT_NONE;
if (!formats || formats[0] == AV_PIX_FMT_NONE)
return format;
switch ((int)format) {
case AV_PIX_FMT_YUV444P:
best_format = get_best_format(i444_formats, formats);
break;
case AV_PIX_FMT_YUV420P:
best_format = get_best_format(i420_formats, formats);
break;
case AV_PIX_FMT_NV12:
best_format = get_best_format(nv12_formats, formats);
break;
case AV_PIX_FMT_YUYV422:
best_format = get_best_format(yuy2_formats, formats);
break;
case AV_PIX_FMT_UYVY422:
best_format = get_best_format(uyvy_formats, formats);
break;
case AV_PIX_FMT_RGBA:
best_format = get_best_format(rgba_formats, formats);
break;
case AV_PIX_FMT_BGRA:
best_format = get_best_format(bgra_formats, formats);
break;
}
return (best_format == AV_PIX_FMT_NONE) ? formats[0] : best_format;
}

View file

@ -19,7 +19,7 @@ NVENC.Preset.llhp="Ниска латентност, висока произво
NVENC.LookAhead="Предопределяне"
NVENC.CQLevel="Ниво CQ"
FFmpegSource="Източник на медия"
FFmpegSource="Източник на медията"
LocalFile="Локален файл"
Looping="Преповтаряне"
Input="Вход"
@ -31,7 +31,18 @@ CloseFileWhenInactive="Затваряне на файла при неактив
ColorRange.Auto="Автоматично"
ColorRange.Partial="Частично"
ColorRange.Full="Пълно"
RestartMedia="Рестартиране"
SpeedPercentage="Скорост"
Play="Пускане"
Pause="Пауза"
Stop="Спиране"
MediaFileFilter.AllMediaFiles="Всички медийни файлове"
MediaFileFilter.VideoFiles="Видеофайлове"
MediaFileFilter.AudioFiles="Звукови файлове"
MediaFileFilter.AllFiles="Всички файлове"
ReplayBuffer="Буфер за повторение"
ReplayBuffer.Save="Записване на повторението"

View file

@ -40,9 +40,12 @@ ColorRange="Gamma de color YUV"
ColorRange.Auto="Automàtic"
ColorRange.Partial="Parcial"
ColorRange.Full="Màxim"
RestartMedia="Reinicia els mitjans"
RestartMedia="Reinicia"
SpeedPercentage="Velocitat"
Seekable="Cercable"
Play="Reprodueix"
Pause="Pausa"
Stop="Atura"
MediaFileFilter.AllMediaFiles="Tots els arxius multimèdia"
MediaFileFilter.VideoFiles="Arxius de vídeo"

View file

@ -40,9 +40,12 @@ ColorRange="Rozsah barev YUV"
ColorRange.Auto="Automatický"
ColorRange.Partial="Částečný"
ColorRange.Full="Celkový"
RestartMedia="Restartovat mediální zdroj"
RestartMedia="Restartovat"
SpeedPercentage="Rychlost"
Seekable="Posouvatelné"
Play="Přehrát"
Pause="Pozastavit"
Stop="Zastavit"
MediaFileFilter.AllMediaFiles="Všechny mediální soubory"
MediaFileFilter.VideoFiles="Video soubory"

View file

@ -40,9 +40,12 @@ ColorRange="YUV-farveområde"
ColorRange.Auto="Auto"
ColorRange.Partial="Delvis"
ColorRange.Full="Fuld"
RestartMedia="Genstart Media"
RestartMedia="Genstart"
SpeedPercentage="Hastighed"
Seekable="Søgbar"
Play="Afspil"
Pause="Pause"
Stop="Stop"
MediaFileFilter.AllMediaFiles="Alle mediefiler"
MediaFileFilter.VideoFiles="Videofiler"

View file

@ -4,7 +4,7 @@ FFmpegOpus="FFmpegOpusKodierer"
Bitrate="Bitrate"
MaxBitrate="Max. Bitrate"
Preset="Voreinstellung"
RateControl="Qualitäts Regulierungsmethode"
RateControl="Qualitätsregulierungsmethode"
KeyframeIntervalSec="Keyframeintervall in Sek. (0=automatisch)"
Lossless="Verlustfrei"
@ -16,12 +16,12 @@ NVENC.Preset.hq="Qualität"
NVENC.Preset.hp="Max. Leistung"
NVENC.Preset.mq="Max. Qualität"
NVENC.Preset.ll="Niedrige Latenz"
NVENC.Preset.llhq="Niedrige Latenz + Qualität"
NVENC.Preset.llhp="Niedrige Latenz + Leistung"
NVENC.LookAhead="Lookahead"
NVENC.LookAhead.ToolTip="Aktiviert dynamische BFrames.\n\nWenn deaktiviert, wird der Kodierer immer die Anzahl der BFrames verwenden, die in der „Max BFrames“Einstellung angegeben sind.\n\nWenn aktiviert, wird er die visuelle Qualität erhöhen, indem nur so viele BFrames verwendet werden wie benötigt, bis zum Maximum,\nzu den Kosten einer erhöhten GPUNutzung."
NVENC.Preset.llhq="Niedrige Latenz und Qualität"
NVENC.Preset.llhp="Niedrige Latenz und Leistung"
NVENC.LookAhead="Lookahead"
NVENC.LookAhead.ToolTip="Aktiviert dynamische BFrames.\n\nWenn deaktiviert, wird der Kodierer immer die Anzahl der BFrames verwenden, die in der Einstellung „Max. BFrames“ angegeben sind.\n\nWenn aktiviert, wird die visuelle Qualität erhöht, indem nur so viele BFrames bis zum Maximum verwendet werden, wie benötigt.\n(Resultiert in eine höhere GPUNutzung.)"
NVENC.PsychoVisualTuning="Psycho Visual Tuning"
NVENC.PsychoVisualTuning.ToolTip="Aktiviert Kodierereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung, zu Kosten einer erhöhten GPUNutzung."
NVENC.PsychoVisualTuning.ToolTip="Aktiviert Kodierereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung.\n(Resultiert in eine höhere GPUNutzung.)"
NVENC.CQLevel="CQLevel"
FFmpegSource="Medienquelle"
@ -33,26 +33,29 @@ BufferingMB="Netzwerkpufferung"
HardwareDecode="Hardwaredekodierung verwenden, falls verfügbar"
ClearOnMediaEnd="Nichts anzeigen, wenn Wiedergabe endet"
Advanced="Erweitert"
RestartWhenActivated="Wiedergabe erneut starten, wenn Quelle aktiviert wird"
RestartWhenActivated="Wiedergabe bei Quellenaktivierung erneut starten"
CloseFileWhenInactive="Datei schließen, wenn inaktiv"
CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder der Aufnahme nicht angezeigt wird.\nDies ermöglicht, dass die Datei geändert werden kann.\nDafür können aber Startverzögerungen auftreten, wenn die Quelle reaktiviert wird."
ColorRange="YUVFarbmatrix"
CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder in der Aufnahme nicht angezeigt wird.\nDies ermöglicht Änderungen an der Datei vorzunehmen,\nwas aber zu Reaktivierungsverzögerungen führen kann."
ColorRange="YUVFarbbereich"
ColorRange.Auto="Automatisch"
ColorRange.Partial="Teilweise"
ColorRange.Full="Voll"
RestartMedia="Medium neustarten"
RestartMedia="Neustarten"
SpeedPercentage="Geschwindigkeit"
Seekable="Durch­such­bar"
Play="Abspielen"
Pause="Pausieren"
Stop="Stoppen"
MediaFileFilter.AllMediaFiles="Alle Mediendateien"
MediaFileFilter.VideoFiles="Videodateien"
MediaFileFilter.AudioFiles="Audiodateien"
MediaFileFilter.AllFiles="Alle Dateien"
ReplayBuffer="ReplayPuffer"
ReplayBuffer.Save="Replay speichern"
ReplayBuffer="Wiederholungspuffer"
ReplayBuffer.Save="Wiederholung speichern"
HelperProcessFailed="Der AufnahmeHelferProzess kann nicht gestartet werden. Überprüfen Sie, ob OBSDateien nicht von einer DrittanbieterAntiviren/Sicherheitssoftware blockiert oder entfernt werden."
UnableToWritePath="Kann nicht zu %1 schreiben. Vergewissern Sie sich, dass Sie einen Aufnahmepfad verwenden, für das Ihr Benutzerkonto Schreibrechte hat und dass genügend Speicherplatz zur Verfügung steht."
WarnWindowsDefender="Wenn Windows10RansomwareSchutz aktiviert ist, kann dies auch den Fehler auslösen. Versuchen Sie, den überwachten Ordnerzugriff in WindowsSicherheit → Viren & Bedrohungsschutz auszuschalten."
UnableToWritePath="Kann nicht zu %1 schreiben. Vergewissern Sie sich, dass Sie einen Aufnahmepfad verwenden, für den Ihr Benutzerkonto Schreibrechte hat und dass genügend Speicherplatz zur Verfügung steht."
WarnWindowsDefender="Wenn Windows10RansomwareSchutz aktiviert ist, kann dies auch den Fehler auslösen. Versuchen Sie, den überwachten Ordnerzugriff in „WindowsSicherheit“„Viren & Bedrohungsschutz“ auszuschalten."

View file

@ -25,7 +25,6 @@ ColorRange="Χώρος Χρωμάτων YUV"
ColorRange.Auto="Αυτόματο"
ColorRange.Partial="Μερικός"
ColorRange.Full="Πλήρης"
RestartMedia="Επανεκκίνηση Πολυμέσων"
Seekable="Παρεχόμενη"
MediaFileFilter.AllMediaFiles="Όλα τα αρχεία πολυμέσων"

View file

@ -40,9 +40,12 @@ ColorRange="YUV Color Range"
ColorRange.Auto="Auto"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
RestartMedia="Restart Media"
RestartMedia="Restart"
SpeedPercentage="Speed"
Seekable="Seekable"
Play="Play"
Pause="Pause"
Stop="Stop"
MediaFileFilter.AllMediaFiles="All Media Files"
MediaFileFilter.VideoFiles="Video Files"

View file

@ -40,9 +40,12 @@ ColorRange="Gama de Color YUV"
ColorRange.Auto="Automatico"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
RestartMedia="Reiniciar Medio"
RestartMedia="Reiniciar"
SpeedPercentage="Velocidad"
Seekable="Buscable"
Play="Reproducir"
Pause="Pausa"
Stop="Detener"
MediaFileFilter.AllMediaFiles="Todos los archivos multimedia"
MediaFileFilter.VideoFiles="Archivos de vídeo"

View file

@ -1,12 +1,17 @@
FFmpegOutput="FFmpeg väljund"
FFmpegAAC="FFmpeg vaike AAC kodeerija"
Bitrate="Bitikiirus"
MaxBitrate="Maksimaalne bitikiirus"
Preset="Eelseadistus"
KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
Lossless="Kadudeta"
NVENC.Use2Pass="Kasuta Two-Pass kodeeringut"
NVENC.Preset.default="Jõudlus"
NVENC.Preset.hq="Kvaliteet"
NVENC.Preset.hp="Maksimaalne jõudlus"
NVENC.Preset.mq="Makimaalne kvaliteet"
NVENC.Preset.ll="Madal-viivitus"
FFmpegSource="Meedia allikas"

View file

@ -40,9 +40,12 @@ ColorRange="YUV kolore-barrutia"
ColorRange.Auto="Auto"
ColorRange.Partial="Partziala"
ColorRange.Full="Osoa"
RestartMedia="Berrabiarazi euskarria"
RestartMedia="Berrabiarazi"
SpeedPercentage="Abiadura"
Seekable="Bilagai"
Play="Erreproduzitu"
Pause="Pausatu"
Stop="Gelditu"
MediaFileFilter.AllMediaFiles="Multimedia-fitxategi guztiak"
MediaFileFilter.VideoFiles="Bideo-fitxategiak"

View file

@ -27,7 +27,6 @@ InputFormat="فرمت های ورودی"
ColorRange.Auto="خودکار"
ColorRange.Partial="جزئی"
ColorRange.Full="کامل"
RestartMedia="راه اندازی مجدد رسانه ها"
Seekable="جستجوگر"
MediaFileFilter.AllMediaFiles="تمامی فایل های رسانه"

View file

@ -29,6 +29,7 @@ LocalFile="Paikallinen tiedosto"
Looping="Toista jatkuvasti"
Input="Sisääntulo"
InputFormat="Sisääntulon muoto"
BufferingMB="Verkon puskurointi"
HardwareDecode="Käytä laitteistotason purkua, kun mahdollista"
ClearOnMediaEnd="Älä näytä mitään kun toisto päättyy"
Advanced="Lisäasetukset"
@ -39,8 +40,12 @@ ColorRange="YUV värialue"
ColorRange.Auto="Automaattinen"
ColorRange.Partial="Osittainen"
ColorRange.Full="Täysi"
RestartMedia="Uudelleenkäynnistä media"
RestartMedia="Toista uudelleen"
SpeedPercentage="Nopeus"
Seekable="Haettava"
Play="Toista"
Pause="Tauko"
Stop="Pysäytä"
MediaFileFilter.AllMediaFiles="Kaikki mediatiedostot"
MediaFileFilter.VideoFiles="Videotiedostot"

View file

@ -25,7 +25,6 @@ ColorRange="Antas ng kulay ng YUV"
ColorRange.Auto="I-Auto"
ColorRange.Partial="I-Partial"
ColorRange.Full="Buo"
RestartMedia="Simulan muli ang Media"
Seekable="I-Seekable"
MediaFileFilter.AllMediaFiles="Lahat ng Media Files"

View file

@ -26,15 +26,15 @@ NVENC.CQLevel="Niveau CQ"
FFmpegSource="Source média"
LocalFile="Fichier local"
Looping="En boucle"
Looping="Lire en boucle"
Input="Entrée"
InputFormat="Format d'entrée"
BufferingMB="Tampon réseau (Mo)"
HardwareDecode="Utiliser le décodage matériel si possible"
HardwareDecode="Utiliser le décodage matériel (si disponible)"
ClearOnMediaEnd="Ne rien afficher lorsque la lecture se termine"
Advanced="Options avancées"
RestartWhenActivated="Reprendre la lecture quand la source est active"
CloseFileWhenInactive="Fermer fichier lorsquil est inactif"
RestartWhenActivated="Reprendre depuis le début quand cette source redevient active"
CloseFileWhenInactive="Fermer le fichier quand cette source est inactive"
CloseFileWhenInactive.ToolTip="Ferme le fichier lorsque la source ne s'affiche pas sur le stream ou \nl'enregistrement. Cela permet de modifier le fichier lorsque la source n'est pas active, \nmais il peut y avoir un délai de démarrage lorsque la source se réactive."
ColorRange="Gamme de couleurs YUV"
ColorRange.Auto="Auto"
@ -43,6 +43,9 @@ ColorRange.Full="Complète"
RestartMedia="Reprendre depuis le début"
SpeedPercentage="Vitesse"
Seekable="Navigable"
Play="Lecture"
Pause="Pause"
Stop="Arrêter"
MediaFileFilter.AllMediaFiles="Tous les fichiers multimédias"
MediaFileFilter.VideoFiles="Fichiers vidéo"

View file

@ -33,7 +33,6 @@ ColorRange="Rainse dhathan YUV"
ColorRange.Auto="Fèin-obrachail"
ColorRange.Partial="Leth-phàirteach"
ColorRange.Full="Làn"
RestartMedia="Ath-thòisich am meadhan"
Seekable="Gabhaidh sireadh ann"
MediaFileFilter.AllMediaFiles="A h-uile faidhle meadhain"

View file

@ -30,7 +30,7 @@ Looping="Bucle"
Input="Entrada"
InputFormat="Formato de entrada"
BufferingMB="Memoria intermedia de rede"
HardwareDecode="Utilizar a descodificación por hárdware cando estiver dispoñible"
HardwareDecode="Utilizar a descodificación por hárdware cando estiver dispoñíbel"
ClearOnMediaEnd="Non amosar nada ao rematar a reprodución"
Advanced="Avanzado"
RestartWhenActivated="Reiniciar a reprodución cando fonte estea activa"
@ -40,9 +40,12 @@ ColorRange="Gama de cor YUV"
ColorRange.Auto="Automático"
ColorRange.Partial="Parcial"
ColorRange.Full="Total"
RestartMedia="Reiniciar multimedia"
RestartMedia="Reiniciar"
SpeedPercentage="Velocidade"
Seekable="Buscábel"
Play="Reproducir"
Pause="Pausa"
Stop="Parar"
MediaFileFilter.AllMediaFiles="Todos os ficheiros multimedia"
MediaFileFilter.VideoFiles="Ficheiros de vídeo"

View file

@ -40,9 +40,12 @@ ColorRange="YUV színtartomány"
ColorRange.Auto="Auto"
ColorRange.Partial="Részleges"
ColorRange.Full="Teljes"
RestartMedia="Media újraindítása"
RestartMedia="Újraindítás"
SpeedPercentage="Sebesség"
Seekable="Kereshető"
Play="Lejátszás"
Pause="Szünet"
Stop="Leállítás"
MediaFileFilter.AllMediaFiles="Minden médiafájl"
MediaFileFilter.VideoFiles="Videofájlok"

View file

@ -40,9 +40,12 @@ ColorRange="Gamma di colore YUV"
ColorRange.Auto="Automatico"
ColorRange.Partial="Parziale"
ColorRange.Full="Intero"
RestartMedia="Riavvia media dall'inizio"
RestartMedia="Riavvia"
SpeedPercentage="Velocità"
Seekable="Ricercabile"
Play="Avvia"
Pause="Pausa"
Stop="Stop"
MediaFileFilter.AllMediaFiles="Tutti i file multimediali"
MediaFileFilter.VideoFiles="File video"

View file

@ -40,9 +40,12 @@ ColorRange="YUV 色範囲"
ColorRange.Auto="自動"
ColorRange.Partial="一部"
ColorRange.Full="全部"
RestartMedia="メディアを再開する"
RestartMedia="再開"
SpeedPercentage="速度"
Seekable="シーク可能"
Play="再生"
Pause="一時停止"
Stop="停止"
MediaFileFilter.AllMediaFiles="すべてのメディアファイル"
MediaFileFilter.VideoFiles="ビデオファイル"

View file

@ -5,7 +5,7 @@ Bitrate="ბიტური სიხშირე"
MaxBitrate="უმაღლესი დასაშვები ბიტური სიხშირე"
Preset="მზა პარამეტრები"
RateControl="სიხშირის მართვა"
KeyframeIntervalSec="საკვანძო კადრებს შორის შუალედი (წამი, 0=თვითშერჩევა)"
KeyframeIntervalSec="საკვანძო კადრების შუალედი (წამი, 0=თვითშერჩევა)"
Lossless="უდანაკარგო"
BFrames="B-კადრების დასაშვები რაოდენობა"
@ -40,9 +40,12 @@ ColorRange="YUV ფერთა გამა"
ColorRange.Auto="ავტომატური"
ColorRange.Partial="ნაწილობრივი"
ColorRange.Full="სრული"
RestartMedia="მასალის ხელახლა გაშვება"
RestartMedia="თავიდან ჩართვა"
SpeedPercentage="სიჩქარე"
Seekable="გადახვევით"
Play="გაშვება"
Pause="შეჩერება"
Stop="შეწყვეტა"
MediaFileFilter.AllMediaFiles="ყველა მასალა"
MediaFileFilter.VideoFiles="ვიდეოფაილები"

View file

@ -40,9 +40,12 @@ ColorRange="YUV 색상 범위"
ColorRange.Auto="자동"
ColorRange.Partial="부분"
ColorRange.Full="전체"
RestartMedia="미디어 다시재생"
RestartMedia="재시작"
SpeedPercentage="속도"
Seekable="탐색 가능"
Play="재생"
Pause="일시정지"
Stop="중단"
MediaFileFilter.AllMediaFiles="모든 미디어 파일"
MediaFileFilter.VideoFiles="비디오 파일"

View file

@ -29,6 +29,7 @@ LocalFile="Lokal fil"
Looping="Repeter"
Input="Inngang"
InputFormat="Inngangsformat"
BufferingMB="Nettverksbuffer"
HardwareDecode="Bruk maskinvaredekoding når tilgjengelig"
ClearOnMediaEnd="Vis ingenting når avspillingen slutter"
Advanced="Avansert"
@ -39,7 +40,7 @@ ColorRange="YUV fargerom"
ColorRange.Auto="Automatisk"
ColorRange.Partial="Delvis"
ColorRange.Full="Hel"
RestartMedia="Start media på nytt"
SpeedPercentage="Hastighet"
Seekable="Søkbar"
MediaFileFilter.AllMediaFiles="Alle mediefiler"

View file

@ -40,9 +40,12 @@ ColorRange="YUV Kleurbereik"
ColorRange.Auto="Automatisch"
ColorRange.Partial="Gedeeltelijk"
ColorRange.Full="Volledig"
RestartMedia="Media herstarten"
RestartMedia="Herstart"
SpeedPercentage="Snelheid"
Seekable="Zoekbaar"
Play="Speel"
Pause="Pauze"
Stop="Stop"
MediaFileFilter.AllMediaFiles="Alle mediabestanden"
MediaFileFilter.VideoFiles="Videobestanden"

View file

@ -40,9 +40,12 @@ ColorRange="Zakres kolorów YUV"
ColorRange.Auto="Automatycznie"
ColorRange.Partial="Częściowy"
ColorRange.Full="Pełny"
RestartMedia="Zrestartuj plik audio-wideo"
RestartMedia="Zrestartuj"
SpeedPercentage="Szybkość"
Seekable="Przeszukiwalny"
Play="Odtwórz"
Pause="Pauza"
Stop="Zatrzymaj"
MediaFileFilter.AllMediaFiles="Wszystkie pliki multimedialne"
MediaFileFilter.VideoFiles="Pliki video"

View file

@ -40,9 +40,12 @@ ColorRange="Intervalo de Cores YUV"
ColorRange.Auto="Auto"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
RestartMedia="Reiniciar Mídia"
RestartMedia="Reiniciar"
SpeedPercentage="Velocidade"
Seekable="Procurável"
Play="Iniciar"
Pause="Pausar"
Stop="Parar"
MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
MediaFileFilter.VideoFiles="Arquivos de Vídeo"

View file

@ -16,13 +16,19 @@ NVENC.Preset.hq="Qualidade"
NVENC.Preset.hp="Máximo Desempenho"
NVENC.Preset.mq="Qualidade Máxima"
NVENC.Preset.ll="Baixa latência"
NVENC.Preset.llhq="Qualidade com baixa latência"
NVENC.Preset.llhp="Perfomance com baixa latência"
NVENC.LookAhead.ToolTip="Ativa as B-frames dinâmicas.\n\nSe desativado, o codificador usará sempre o número de B-Frames especificado na definição 'Max B-frames'.\n\nSe ativado, aumentará a qualidade visual usando somente quantos quadros B forem necessários, até ao máximo,\ncom o custo na utilização da GPU."
NVENC.CQLevel="Nível CQ"
FFmpegSource="Fonte de multimédia"
LocalFile="Ficheiro local"
Looping="Repetir"
Input="Entrada"
InputFormat="Formato de entrada"
BufferingMB="Buffering de Rede"
HardwareDecode="Utilizar descodificação de hardware quando disponível"
ClearOnMediaEnd="Não mostrar nada quando a reprodução terminar"
Advanced="Avançado"
RestartWhenActivated="Reiniciar reprodução quando a fonte se torna ativo"
CloseFileWhenInactive="Fechar ficheiro quando inativo"
@ -30,6 +36,8 @@ ColorRange="Gama de cor YUV"
ColorRange.Auto="Auto"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
SpeedPercentage="Velocidade"
Seekable="Pesquisável"
MediaFileFilter.AllMediaFiles="Todos os Arquivos de Media"
MediaFileFilter.VideoFiles="Arquivos de Vídeo"
@ -37,4 +45,7 @@ MediaFileFilter.AudioFiles="Arquivos de Áudio"
MediaFileFilter.AllFiles="Todos os ficheiros"
HelperProcessFailed="Não foi possível iniciar o processo auxiliar de gravação. Verifique se os ficheiros do OBS não bloqueados ou removidos por qualquer software de segurança ou antivírus de terceiros."
UnableToWritePath="Não foi possível gravar em %1. Certifique-se de que está a usar um caminho de gravação no qual sua conta de utilizador tem permissão para escrever e que há espaço suficiente em disco."
WarnWindowsDefender="Se a proteção contra Ransomware estiver habilitada no Windows 10, pode ser essa a causa deste erro. Tente desativar o acesso controlado a pastas nas configurações de segurança do Windows ou nas definições de proteção contra ameaças e vírus."

View file

@ -40,9 +40,12 @@ ColorRange="Цветовой диапазон YUV"
ColorRange.Auto="Автоматически"
ColorRange.Partial="Частичный"
ColorRange.Full="Полный"
RestartMedia="Перезапустить медиа"
RestartMedia="Перезапустить"
SpeedPercentage="Скорость"
Seekable="Перематываемый"
Play="Запустить"
Pause="Приостановить"
Stop="Остановить"
MediaFileFilter.AllMediaFiles="Все медиа-файлы"
MediaFileFilter.VideoFiles="Видеофайлы"

View file

@ -2,21 +2,36 @@ FFmpegOutput="Výstup FFmpeg"
FFmpegAAC="Predvolený FFmpeg AAC enkodér"
FFmpegOpus="FFmpeg Opus enkodér"
Bitrate="Bitrate"
MaxBitrate="Max. bitrate"
Preset="Predvoľba"
RateControl="Riadenie toku"
KeyframeIntervalSec="Interval kľúčových snímok (sekúnd, 0 = automaticky)"
Lossless="Bezstratová"
BFrames="Maximum B-snímkov"
NVENC.Use2Pass="Použiť dvojfázové enkódovanie"
NVENC.Preset.default="Výkon"
NVENC.Preset.hq="Kvalita"
NVENC.Preset.hp="Maximálny Výkon"
NVENC.Preset.mq="Maximálna Kvalita"
NVENC.Preset.ll="Nízka odozva"
NVENC.Preset.llhq="Kvalita pri nízkej odozve"
NVENC.Preset.llhp="Výkon pri nízkej odozve"
NVENC.LookAhead="Look-ahead"
NVENC.LookAhead.ToolTip="Aktivuje dynamické B-snímky.\n\nKeď sú vypnuté, enkodér bude vždy používať počet snímkov špecifikovaný v nastavení 'Maximum B-snímkov'.\n\nKeď sú zapnuté, zvýši sa vizuálna kvalita tým, že bude používať iba toľko B-snímkov, koľko je potrebné, až do maxima,\nna úkor zvýšeného používania GPU."
NVENC.PsychoVisualTuning="Psycho Visual Tuning"
NVENC.PsychoVisualTuning.ToolTip="Povolí nastavenia enkodéra, ktoré optimalizujú využitie bitrate pre vylepšenú vnímanú vizuálnu kvalitu,\nhlavne v situáciách s veľkým množstvom pohybu, na úkor zvýšenia používania GPU."
NVENC.CQLevel="CQ Level"
FFmpegSource="Zdroj médií"
LocalFile="Lokálny súbor"
Looping="Slučka"
Input="Vstup"
InputFormat="Vstupný formát"
BufferingMB="Vyrovnávacia pamäť siete"
HardwareDecode="Použiť hardvérové dekódovanie podľa dostupnosti"
ClearOnMediaEnd="Po skončení prehrávania neukazovať nič"
Advanced="Rozšírené"
RestartWhenActivated="Obnoviť prehrávanie pri aktivovaní zdroja"
CloseFileWhenInactive="Zatvoriť súbor pri neaktivite"
@ -25,8 +40,12 @@ ColorRange="Rozsah farieb YUV"
ColorRange.Auto="Automaticky"
ColorRange.Partial="Čiastočný"
ColorRange.Full="Plný"
RestartMedia="Reštartuj mediálny zdroj"
RestartMedia="Reštartovať"
SpeedPercentage="Rýchlosť"
Seekable="Posúvateľný"
Play="Prehrať"
Pause="Pause"
Stop="Zastaviť"
MediaFileFilter.AllMediaFiles="Všetky mediálne súbory"
MediaFileFilter.VideoFiles="Video súbory"
@ -38,4 +57,5 @@ ReplayBuffer.Save="Uložiť záznam"
HelperProcessFailed="Nepodarilo sa spustiť pomocný proces nahrávania. Skontrolujte, či neboli súbory OBS zablokované alebo odstránené zabezpečovacím softvérom/antivírusom tretej strany."
UnableToWritePath="Nedá sa zapisovať do %1. Uistite sa, že v ceste nahrávania má váš používateľský účet právo na zápis a že máte dostatok miesta na disku."
WarnWindowsDefender="Ak je ochrana proti Ransomwaru Windows 10 zapnutá, tak to môže taktiež spôsobiť túto chybu. Skúste vypnúť kontrolovaný prístup do priečinkov vo Windows Zabezpečení / Ochrana pred vírusmi a hrozbami."

View file

@ -5,7 +5,7 @@ Bitrate="Bitna hitrost"
MaxBitrate="Največja bitna hitrost"
Preset="Prednastavitev"
RateControl="Nadzor hitrosti"
KeyframeIntervalSec="Razmik med ključnimi sličicami (s, 0=samodejno)"
KeyframeIntervalSec="Razmik med ključnimi sličicami (ssekunde, 0=samodejno)"
Lossless="Brezizgubno"
BFrames="Največje št. sličic B"
@ -28,7 +28,7 @@ FFmpegSource="Predstavnostni vir"
LocalFile="Lokalna datoteka"
Looping="Ponavljaj"
Input="Vhod"
InputFormat="Oblika vhoda"
InputFormat="Vhodni format"
BufferingMB="Omrežno medpomnenje"
HardwareDecode="Uporabi strojno odkodiranje, ko je na voljo"
ClearOnMediaEnd="Ne prikaži ničesar, ko se predvajanje konča"
@ -40,17 +40,20 @@ ColorRange="Barvni razpon YUV"
ColorRange.Auto="Samodejno"
ColorRange.Partial="Delno"
ColorRange.Full="Polno"
RestartMedia="Pon. zaženi predstavnost"
RestartMedia="Ponovno zaženi"
SpeedPercentage="Hitrost"
Seekable="Omogoči iskanje"
Play="Predvajaj"
Pause="Premor"
Stop="Ustavi"
MediaFileFilter.AllMediaFiles="Vse predstavne datoteke"
MediaFileFilter.VideoFiles="Videodatoteke"
MediaFileFilter.AudioFiles="Zvočne datoteke"
MediaFileFilter.AllFiles="Vse datoteke"
ReplayBuffer="Medpomn. za pon. predv."
ReplayBuffer.Save="Shrani pon. predv."
ReplayBuffer="Medpomn. za ponovitev"
ReplayBuffer.Save="Shrani ponovitev"
HelperProcessFailed="Pomožnega opravila za snemanje ni bilo mogoče začeti. Preverite, da protivirusni/varnostni program ni blokiral ali odstranil datotek OBS."
UnableToWritePath="Ni mogoče pisati v %1. Prepričajte se, da uporabljate pot za snemanje, na katero lahko vaš uporabniški račun zapisuje in da imate dovolj prostora na disku."

Some files were not shown because too many files have changed in this diff Show more