New upstream version 0.16.2+dfsg1

This commit is contained in:
Sebastian Ramacher 2016-10-10 21:01:40 +02:00
parent 67704ac59c
commit 6efda2859e
377 changed files with 7938 additions and 696 deletions

View file

@ -11,6 +11,14 @@ if(WIN32)
add_subdirectory(win-mf)
add_subdirectory(obs-qsv11)
add_subdirectory(vlc-video)
option(BUILD_AMF_ENCODER "Build AMD Advanced Media Framework encoder module" OFF)
if (BUILD_AMF_ENCODER)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/enc-amf/CMakeLists.txt")
add_subdirectory(enc-amf)
else()
message(STATUS "enc-amf submodule not found! Please fetch submodules. enc-amf plugin disabled.")
endif()
endif()
elseif(APPLE)
add_subdirectory(coreaudio-encoder)
add_subdirectory(mac-avcapture)
@ -19,6 +27,7 @@ elseif(APPLE)
add_subdirectory(mac-syphon)
add_subdirectory(decklink/mac)
add_subdirectory(vlc-video)
add_subdirectory(linux-jack)
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
add_subdirectory(linux-capture)
add_subdirectory(linux-pulseaudio)
@ -34,6 +43,17 @@ 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)
else()
message(STATUS "obs-browser submodule not found! Please fetch submodules. obs-browser plugin disabled.")
endif()
endif()
endif()
add_subdirectory(image-source)
add_subdirectory(obs-x264)
add_subdirectory(obs-libfdk)
@ -41,5 +61,6 @@ add_subdirectory(obs-ffmpeg)
add_subdirectory(obs-outputs)
add_subdirectory(obs-filters)
add_subdirectory(obs-transitions)
add_subdirectory(obs-text)
add_subdirectory(rtmp-services)
add_subdirectory(text-freetype2)

View file

@ -0,0 +1,3 @@
CoreAudioAAC="מקודד AAC של CoreAudio"
Bitrate="קצב ביטים"

View file

@ -2,4 +2,5 @@ CoreAudioAAC="CoreAudio AAC-kodare"
Bitrate="Bithastighet"
AllowHEAAC="Tillåt HE-AAC"
OutputSamplerate="Samplingsfrekvens för utmatning"
UseInputSampleRate="Använd inmatningens (OBS) samplingshastighet (kan lista bithastigheter som inte stöds)"

View file

@ -0,0 +1,6 @@
CoreAudioAAC="CoreAudio AAC енкодер"
Bitrate="Бітрейт"
AllowHEAAC="Дозволити HE-AAC"
OutputSamplerate="Частота дискретизації виводу"
UseInputSampleRate="Використати частоту дискретизації вводу (OBS) (може відображатися непідтримуваний бітрейт)"

View file

@ -1,6 +1,6 @@
BlackmagicDevice="Blackmagic 장치"
Device="장치"
Mode="모드"
Mode="방식"
Buffering="버퍼링 사용"
PixelFormat="픽셀 형식"

View file

@ -0,0 +1,6 @@
BlackmagicDevice="Blackmagic пристрій"
Device="Пристрій"
Mode="Режим"
Buffering="Увімкнути буферизацію"
PixelFormat="Формат пікселів"

View file

@ -2,4 +2,14 @@ ImageInput="Billede"
File="Billedfil"
UnloadWhenNotShowing="Fjern billede fra hukommelsen når det ikke vises"
SlideShow="Billede diasshow"
SlideShow.TransitionSpeed="Overgangshastighed (millisekunder)"
SlideShow.SlideTime="Tid mellem dias (millisekunder)"
SlideShow.Files="Billedfiler"
SlideShow.Randomize="Tilfældig afspilning"
SlideShow.Transition="Overgang"
SlideShow.Transition.Cut="Klip"
SlideShow.Transition.Fade="Overgang"
SlideShow.Transition.Swipe="Stryg"
SlideShow.Transition.Slide="Glide"

View file

@ -2,14 +2,14 @@ ImageInput="Imagem"
File="Arquivo de Imagem"
UnloadWhenNotShowing="Descarregar imagem quando não estiver em exibição"
SlideShow="Imagens em Deslize"
SlideShow.TransitionSpeed="Velocidade de transição (milissegundos)"
SlideShow.SlideTime="Tempo entre Deslizes (milissegundos)"
SlideShow="Apresentação de Slides"
SlideShow.TransitionSpeed="Velocidade de Transição (em milissegundos)"
SlideShow.SlideTime="Tempo Entre cada Slide (em milissegundos)"
SlideShow.Files="Arquivos de Imagem"
SlideShow.Randomize="Reprodução aleatória"
SlideShow.Transition="Transição"
SlideShow.Transition.Cut="Cortar"
SlideShow.Transition.Fade="Desvanecer"
SlideShow.Transition.Swipe="Deslizar"
SlideShow.Transition.Slide="Deslize"
SlideShow.Transition.Cut="Corte"
SlideShow.Transition.Fade="Esmaecer"
SlideShow.Transition.Swipe="Arrastar"
SlideShow.Transition.Slide="Deslizar"

View file

@ -0,0 +1,15 @@
ImageInput="Зображення"
File="Файл зображення"
UnloadWhenNotShowing="Вивантажи зображення, коли не відображається"
SlideShow="Слайд-шоу"
SlideShow.TransitionSpeed="Тривалість відео-переходу (мілісекунд)"
SlideShow.SlideTime="Час між слайдами (мілісекунд)"
SlideShow.Files="Файли зображень"
SlideShow.Randomize="Випадкове відтворення"
SlideShow.Transition="Відео-перехід"
SlideShow.Transition.Cut="Cut"
SlideShow.Transition.Fade="Fade"
SlideShow.Transition.Swipe="Swipe"
SlideShow.Transition.Slide="Slide"

View file

@ -207,7 +207,7 @@ static void image_source_tick(void *data, float seconds)
time_t t = get_modified_timestamp(context->file);
context->update_time_elapsed = 0.0f;
if (context->file_timestamp < t) {
if (context->file_timestamp != t) {
image_source_load(context);
}
}

View file

@ -64,6 +64,8 @@ struct alsa_data {
};
static const char * alsa_get_name(void *);
static bool alsa_devices_changed(obs_properties_t *props,
obs_property_t *p, obs_data_t *settings);
static obs_properties_t * alsa_get_properties(void *);
static void * alsa_create(obs_data_t *, obs_source_t *);
static void alsa_destroy(void *);
@ -119,7 +121,12 @@ void * alsa_create(obs_data_t *settings, obs_source_t *source)
data->listen_thread = 0;
data->reopen_thread = 0;
data->device = bstrdup(obs_data_get_string(settings, "device_id"));
const char *device = obs_data_get_string(settings, "device_id");
if (strcmp(device, "__custom__") == 0)
device = obs_data_get_string(settings, "custom_pcm");
data->device = bstrdup(device);
data->rate = obs_data_get_int(settings, "rate");
if (os_event_init(&data->abort_event, OS_EVENT_TYPE_MANUAL) != 0) {
@ -179,6 +186,10 @@ void alsa_update(void *vptr, obs_data_t *settings)
bool reset = false;
device = obs_data_get_string(settings, "device_id");
if (strcmp(device, "__custom__") == 0)
device = obs_data_get_string(settings, "custom_pcm");
if (strcmp(data->device, device) != 0) {
bfree(data->device);
data->device = bstrdup(device);
@ -215,9 +226,28 @@ const char * alsa_get_name(void *unused)
void alsa_get_defaults(obs_data_t *settings)
{
obs_data_set_default_string(settings, "device_id", "default");
obs_data_set_default_string(settings, "custom_pcm", "default");
obs_data_set_default_int(settings, "rate", 44100);
}
static bool alsa_devices_changed(obs_properties_t *props,
obs_property_t *p, obs_data_t *settings)
{
UNUSED_PARAMETER(p);
bool visible = false;
const char *device_id = obs_data_get_string(settings, "device_id");
if (strcmp(device_id, "__custom__") == 0)
visible = true;
obs_property_t *custom_pcm = obs_properties_get(props, "custom_pcm");
obs_property_set_visible(custom_pcm, visible);
obs_property_modified(custom_pcm, settings);
return true;
}
obs_properties_t * alsa_get_properties(void *unused)
{
void **hints;
@ -240,10 +270,15 @@ obs_properties_t * alsa_get_properties(void *unused)
obs_property_list_add_string(devices, "Default", "default");
obs_properties_add_text(props, "custom_pcm",
obs_module_text("PCM"), OBS_TEXT_DEFAULT);
rate = obs_properties_add_list(props, "rate",
obs_module_text("Rate"), OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_INT);
obs_property_set_modified_callback(devices, alsa_devices_changed);
obs_property_list_add_int(rate, "32000 Hz", 32000);
obs_property_list_add_int(rate, "44100 Hz", 44100);
obs_property_list_add_int(rate, "48000 Hz", 48000);
@ -277,6 +312,8 @@ obs_properties_t * alsa_get_properties(void *unused)
obs_property_list_add_string(devices, descr, name);
obs_property_list_add_string(devices, "Custom", "__custom__");
next:
if (name != NULL)
free(name), name = NULL;

View file

@ -0,0 +1,3 @@
AlsaInput="Аудіо пристрій (ALSA)"
Device="Пристрій"

View file

@ -2,7 +2,7 @@ X11SharedMemoryScreenInput="画面キャプチャ (XSHM)"
Screen="画面"
CaptureCursor="カーソルをキャプチャ"
AdvancedSettings="高度な設定"
XServer="X サーバ"
XServer="X サーバ"
XCCapture="ウィンドウキャプチャ (Xcomposite)"
Window="ウィンドウ"
CropTop="上部クロップ (ピクセル)"
@ -10,7 +10,7 @@ CropLeft="左側クロップ (ピクセル)"
CropRight="右側クロップ (ピクセル)"
CropBottom="下部クロップ (ピクセル)"
SwapRedBlue="赤と青を入れ替え"
LockX="キャプチャ時にXサーバをロック"
IncludeXBorder="Xウンドウの境界を含める"
LockX="キャプチャ時にXサーバをロック"
IncludeXBorder="Xウンドウの境界を含める"
ExcludeAlpha="アルファなしテクスチャ形式を使用 (Mesaの回避策)"

View file

@ -0,0 +1,16 @@
X11SharedMemoryScreenInput="Захват екрану (XSHM)"
Screen="Екран"
CaptureCursor="Захват курсору"
AdvancedSettings="Розширені параметри"
XServer="X-сервер"
XCCapture="Захват вікна (Xcomposite)"
Window="Вікно"
CropTop="Обрізати зверху (пікселі)"
CropLeft="Обрізати зліва (пікселі)"
CropRight="Обрізати зправа (пікселі)"
CropBottom="Обрізати знизу (пікселі)"
SwapRedBlue="Поміняти червоний і синій"
LockX="Блокувати X-сервер під час захвату"
IncludeXBorder="Захоплювати край X вікна"
ExcludeAlpha="Використовувати формат текстур без альфа-каналу (для Mesa)"

View file

@ -0,0 +1,4 @@
StartJACKServer="Запустити JACK-сервер"
Channels="Кількість каналів"
JACKInput="Клієнт JACK вводу"

View file

@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "jack-wrapper.h"
#include <pthread.h>
#include <util/threading.h>
#include <stdio.h>
#include <util/platform.h>

View file

@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <jack/jack.h>
#include <obs.h>
#include <pthread.h>
#include <util/threading.h>
struct jack_data {
obs_source_t *source;

View file

@ -0,0 +1,4 @@
PulseInput="Захват Аудіо входу (PulseAudio)"
PulseOutput="Захват Аудіо виводу (PulseAudio)"
Device="Пристрій"

View file

@ -183,7 +183,13 @@ static void pulse_source_info(pa_context *c, const pa_source_info *i, int eol,
{
UNUSED_PARAMETER(c);
PULSE_DATA(userdata);
if (eol != 0)
// An error occured
if (eol < 0) {
data->format = PA_SAMPLE_INVALID;
goto skip;
}
// Terminating call for multi instance callbacks
if (eol > 0)
goto skip;
blog(LOG_INFO, "Audio format: %s, %"PRIu32" Hz"
@ -242,6 +248,10 @@ static int_fast32_t pulse_start_recording(struct pulse_data *data)
blog(LOG_ERROR, "Unable to get source info !");
return -1;
}
if (data->format == PA_SAMPLE_INVALID) {
blog(LOG_ERROR, "An error occurred while getting the source info!");
return -1;
}
pa_sample_spec spec;
spec.format = data->format;
@ -507,11 +517,7 @@ static void *pulse_create(obs_data_t *settings, obs_source_t *source)
pulse_init();
pulse_update(data, settings);
if (data->stream)
return data;
pulse_destroy(data);
return NULL;
return data;
}
struct obs_source_info pulse_input_capture = {

View file

@ -1,2 +1,11 @@
V4L2Input="Відео пристрій (V4L2)"
Device="Пристрій"
Input="Вхід"
VideoFormat="Формат відео"
VideoStandard="Відео стандарт"
DVTiming="DV таймінг"
Resolution="Роздільна здатність"
FrameRate="Частота кадрів"
LeaveUnchanged="Залишити без змін"
UseBuffering="Увімкнути буферизацію"

View file

@ -0,0 +1,14 @@
AVCapture="התקן לכידת וידאו"
Device="התקן"
UsePreset="השתמש בקבוע מראש"
Preset="קבוע מראש"
Buffering="השתמש בחוצץ"
FrameRate="קצב פריימים"
InputFormat="תבנית קלט"
ColorSpace="מרחב צבע"
VideoRange="טווח וידאו"
VideoRange.Partial="חלקי"
VideoRange.Full="מלא"
Auto="אוטומטי"
Unknown="לא ידוע ($1)"

View file

@ -1,2 +1,14 @@
AVCapture="Відео пристрій"
Device="Пристрій"
UsePreset="Використовувати шаблон"
Preset="Пресет"
Buffering="Увімкнути буферизацію"
FrameRate="Частота кадрів"
InputFormat="Вхідний формат"
ColorSpace="Колірний простір"
VideoRange="Колірний діапазон"
VideoRange.Partial="Частковий"
VideoRange.Full="Повний"
Auto="Автовизначення"
Unknown="Невідомо ($1)"

View file

@ -0,0 +1,21 @@
CoreAudio.InputCapture="לכידת קלט קולי"
CoreAudio.OutputCapture="לכידת פלט קולי"
CoreAudio.Device="התקן"
CoreAudio.Device.Default="ברירת מחדל"
DisplayCapture="הצג לכידת מסך"
DisplayCapture.Display="תצוגה"
DisplayCapture.ShowCursor="הצג סמן"
WindowCapture="לכידת חלון"
WindowCapture.ShowShadow="הצג את צל החלון"
WindowUtils.Window="חלון"
WindowUtils.ShowEmptyNames="הצג חלונות עם שמות ריקים"
CropMode="חתוך"
CropMode.None="ללא"
CropMode.Manual="מדריך משתמש"
CropMode.ToWindow="לחלון"
CropMode.ToWindowAndManual="לחלון ומדריך משתמש"
Crop.origin.x="חתוך שמאלה"
Crop.origin.y="חתוך למעלה"
Crop.size.width="חתוך ימינה"
Crop.size.height="חתוך למטה"

View file

@ -6,14 +6,14 @@ DisplayCapture="画面キャプチャ"
DisplayCapture.Display="ディスプレイ"
DisplayCapture.ShowCursor="カーソルを表示"
WindowCapture="ウィンドウキャプチャ"
WindowCapture.ShowShadow="ウンドウの影を表示"
WindowCapture.ShowShadow="ウンドウの影を表示"
WindowUtils.Window="ウィンドウ"
WindowUtils.ShowEmptyNames="空の名前でウィンドウを表示"
CropMode="クロップ"
CropMode.None="未設定"
CropMode.Manual="手動"
CropMode.ToWindow="ウィンドウにあわせる"
CropMode.ToWindowAndManual="ウンドウに合わせて手動"
CropMode.ToWindowAndManual="ウンドウに合わせて手動"
Crop.origin.x="左をクロップ"
Crop.origin.y="上をクロップ"
Crop.size.width="右をクロップ"

View file

@ -16,6 +16,6 @@ CropMode.ToWindow="윈도우에 맞추기"
CropMode.ToWindowAndManual="윈도우에 맞추고 수동"
Crop.origin.x="왼쪽 자르기"
Crop.origin.y="위쪽 자르기"
Crop.size.width="우측 자르기"
Crop.size.width="오른쪽 자르기"
Crop.size.height="아래 자르기"

View file

@ -0,0 +1,21 @@
CoreAudio.InputCapture="Захват Аудіо входу"
CoreAudio.OutputCapture="Захват Аудіо виводу"
CoreAudio.Device="Пристрій"
CoreAudio.Device.Default="За замовчанням"
DisplayCapture="Захват екрану"
DisplayCapture.Display="Екран"
DisplayCapture.ShowCursor="Показати курсор"
WindowCapture="Захват вікна"
WindowCapture.ShowShadow="Показати віконну тінь"
WindowUtils.Window="Вікно"
WindowUtils.ShowEmptyNames="Показати вікна без назв"
CropMode="Кадрування"
CropMode.None="Не вказано"
CropMode.Manual="Вручну"
CropMode.ToWindow="По вікно"
CropMode.ToWindowAndManual="По вікно та вручну"
Crop.origin.x="Обрізати зліва"
Crop.origin.y="Обрізати зверху"
Crop.size.width="Обрізати зправа"
Crop.size.height="Обрізати знизу"

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

@ -5,8 +5,10 @@ Bitrate="Bithastighet"
UseMaxBitrate="Begränsa bithastighet"
MaxBitrate="Maximal bithastighet"
MaxBitrateWindow="Maximalt bithastighetsfönster (sekunder)"
KeyframeIntervalSec="Intervall för keyframes (sekunder, 0=automatisk)"
Profile="Profil"
None="(Ingen)"
DefaultEncoder="(Standardkodare)"
UseBFrames="Använd B-bildrutor"

View file

@ -0,0 +1,14 @@
VTH264EncHW="Apple VT H264 апаратний енкодер"
VTH264EncSW="Apple VT H264 програмний енкодер"
VTEncoder="VideoToolbox енкодер"
Bitrate="Бітрейт"
UseMaxBitrate="Обмежити бітрейт"
MaxBitrate="Максимальний бітрейт"
MaxBitrateWindow="Вікно для максимального бітрейту (секунд)"
KeyframeIntervalSec="Інтервал ключових кадрів (секунд, 0 = авто)"
Profile="Профіль"
None="(Немає)"
DefaultEncoder="(Енкодер за замовчанням)"
UseBFrames="Використовувати B-кадри"

View file

@ -6,6 +6,8 @@ RateControl="Rate Control"
KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
Lossless="Lossless"
BFrames="B-frames"
NVENC.Use2Pass="Use Two-Pass Encoding"
NVENC.Preset.default="Default"
NVENC.Preset.hq="High Quality"

View file

@ -2,17 +2,18 @@ FFmpegOutput="Saída do FFmpeg"
FFmpegAAC="Codificador AAC Padrão do FFmpeg"
Bitrate="Taxa de Bits"
Preset="Predefinição"
RateControl="Controle de Taxa"
KeyframeIntervalSec="Intervalo do keyframe (segundos, 0=automático)"
RateControl="Controle da Taxa de Bits"
KeyframeIntervalSec="Intervalo de Keyframe (segundos, 0=auto)"
Lossless="Sem perdas"
NVENC.Preset.default="Predefinido"
NVENC.Use2Pass="Utilizar a codificação em dois passos"
NVENC.Preset.default="Padrão"
NVENC.Preset.hq="Alta Qualidade"
NVENC.Preset.hp="Alto Desempenho"
NVENC.Preset.hp="Alta Performance"
NVENC.Preset.bd="Bluray"
NVENC.Preset.ll="Baixa latência"
NVENC.Preset.llhq="Baixa latência Alta Qualidade"
NVENC.Preset.llhp="Baixa latência Alto Desempenho"
NVENC.Preset.ll="Baixa Latência"
NVENC.Preset.llhq="Baixa Latência e Alta Qualidade"
NVENC.Preset.llhp="Baixa latência e Alta Performance"
NVENC.Level="Nível"
FFmpegSource="Fonte de mídia"

View file

@ -3,6 +3,7 @@ FFmpegAAC="AAC-kodare (FFmpeg standard)"
Bitrate="Bithastighet"
Preset="Förinställning"
RateControl="Hastighetskontroll"
KeyframeIntervalSec="Intervall för keyframes (sekunder, 0=automatisk)"
Lossless="Förlustfri"
NVENC.Use2Pass="Använd tvåpassavkodning"

View file

@ -0,0 +1,49 @@
FFmpegOutput="Вивід FFmpeg"
FFmpegAAC="FFmpeg AAC енкодер за замовчанням"
Bitrate="Бітрейт"
Preset="Шаблон"
RateControl="Керування потоком"
KeyframeIntervalSec="Інтервал ключових кадрів (секунд, 0 = авто)"
Lossless="Без втрат"
NVENC.Use2Pass="Використовувати двопрохідне кодування"
NVENC.Preset.default="Стандартний"
NVENC.Preset.hq="Висока якість"
NVENC.Preset.hp="Висока продуктивність"
NVENC.Preset.bd="Blu-ray"
NVENC.Preset.ll="З низькою затримкою"
NVENC.Preset.llhq="З низькою затримкою, висока Якість"
NVENC.Preset.llhp="З низькою затримкою, висока Продуктивність"
NVENC.Level="Рівень"
FFmpegSource="Мультимедіа"
LocalFile="Локальний файл"
Looping="Повторювати"
Input="Вхід"
InputFormat="Вхідний формат"
ForceFormat="Примусове перетворення формату"
HardwareDecode="Використовувати апаратне декодування, за наявності"
ClearOnMediaEnd="Не відображати джерело, коли відтворення завершено"
Advanced="Розширені параметри"
AudioBufferSize="Розмір аудіо буфера, (кадрів)"
VideoBufferSize="Розмір відео буфера, (кадрів)"
FrameDropping="Вид пропущених кадрів"
DiscardNone="Немає"
DiscardDefault="За замовчанням (лише збійні пакети)"
DiscardNonRef="Всі крім опорних кадрів"
DiscardBiDir="Лише В-кадри"
DiscardNonIntra="Всі крім I-кадрів"
DiscardNonKey="Всі крім ключових кадрів"
DiscardAll="Всі кадри (Обережно!)"
RestartWhenActivated="Грати з початку, коли джерело стає активним"
ColorRange="YUV, колірний діапазон"
ColorRange.Auto="Автовизначення"
ColorRange.Partial="Частковий"
ColorRange.Full="Повний"
MediaFileFilter.AllMediaFiles="Файли мультимедіа"
MediaFileFilter.VideoFiles="Відео"
MediaFileFilter.AudioFiles="Аудіо"
MediaFileFilter.AllFiles="Всі файли"

View file

@ -274,7 +274,7 @@ static void ffmpeg_mux_stop(void *data, uint64_t ts)
{
struct ffmpeg_muxer *stream = data;
if (capturing(stream)) {
if (capturing(stream) || ts == 0) {
stream->stop_ts = (int64_t)ts / 1000LL;
os_atomic_set_bool(&stream->stopping, true);
os_atomic_set_bool(&stream->capturing, false);

View file

@ -54,6 +54,7 @@ struct nvenc_encoder {
int height;
bool first_packet;
bool initialized;
};
static const char *nvenc_getname(void *unused)
@ -113,6 +114,8 @@ static bool nvenc_init_codec(struct nvenc_encoder *enc)
return false;
}
enc->initialized = true;
*((AVPicture*)enc->vframe) = enc->dst_picture;
return true;
}
@ -138,6 +141,7 @@ static bool nvenc_update(void *data, obs_data_t *settings)
bool twopass = obs_data_get_bool(settings, "2pass");
int gpu = (int)obs_data_get_int(settings, "gpu");
bool cbr_override = obs_data_get_bool(settings, "cbr");
int bf = (int)obs_data_get_int(settings, "bf");
video_t *video = obs_encoder_video(enc->encoder);
const struct video_output_info *voi = video_output_get_info(video);
@ -159,7 +163,7 @@ static bool nvenc_update(void *data, obs_data_t *settings)
nvenc_video_info(enc, &info);
av_opt_set_int(enc->context->priv_data, "cbr", false, 0);
av_opt_set(enc->context->priv_data, "profile", profile, 0);
av_opt_set(enc->context->priv_data, "preset", preset, 0);
if (astrcmpi(rc, "cqp") == 0) {
@ -198,6 +202,7 @@ static bool nvenc_update(void *data, obs_data_t *settings)
AVCOL_SPC_BT709 : AVCOL_SPC_BT470BG;
enc->context->color_range = info.range == VIDEO_RANGE_FULL ?
AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
enc->context->max_b_frames = bf;
if (keyint_sec)
enc->context->gop_size = keyint_sec * voi->fps_num /
@ -232,6 +237,20 @@ static void nvenc_destroy(void *data)
{
struct nvenc_encoder *enc = data;
if (enc->initialized) {
AVPacket pkt = {0};
int r_pkt = 1;
while (r_pkt) {
if (avcodec_encode_video2(enc->context, &pkt, NULL,
&r_pkt) < 0)
break;
if (r_pkt)
av_free_packet(&pkt);
}
}
avcodec_close(enc->context);
av_frame_free(&enc->vframe);
avpicture_free(&enc->dst_picture);
@ -363,6 +382,7 @@ static void nvenc_defaults(obs_data_t *settings)
obs_data_set_default_string(settings, "level", "auto");
obs_data_set_default_bool(settings, "2pass", true);
obs_data_set_default_int(settings, "gpu", 0);
obs_data_set_default_int(settings, "bf", 2);
}
static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
@ -472,6 +492,9 @@ static obs_properties_t *nvenc_properties(void *unused)
obs_module_text("NVENC.Use2Pass"));
obs_properties_add_int(props, "gpu", obs_module_text("GPU"), 0, 8, 1);
obs_properties_add_int(props, "bf", obs_module_text("BFrames"),
0, 4, 1);
return props;
}

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Clau de color"
SharpnessFilter="Agudesa"
ScaleFilter="Escala/Relació d'Aspecte"
NoiseGate="Porta de soroll"
NoiseSuppress="Supressió de soroll"
Gain="Guany"
DelayMs="Retard (en mil·lisegons)"
Type="Tipus"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Punt"
ScaleFiltering.Bilinear="Bilineal"
ScaleFiltering.Bicubic="Bicúbic"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Nivell de supressió (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Klíč barvy"
SharpnessFilter="Ostření"
ScaleFilter="Škálování/poměr stran"
NoiseGate="Šumová brána"
NoiseSuppress="Potlačení šumu"
Gain="Zisk"
DelayMs="Zpoždění (ms)"
Type="Typ"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Bod"
ScaleFiltering.Bilinear="Bilineární"
ScaleFiltering.Bicubic="Bikubický"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Úroveň potlačení (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Color Key"
SharpnessFilter="Schärfen"
ScaleFilter="Skalierung/Seitenverhältnis"
NoiseGate="Noise Gate"
NoiseSuppress="Rauschunterdrückung"
Gain="Gain"
DelayMs="Verzögerung (Millisekunden)"
Type="Art"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Unterdrückungspegel (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Filtro de color"
SharpnessFilter="Filtro de enfoque"
ScaleFilter="Escala/Relación de Aspecto"
NoiseGate="Puerta anti-ruidos"
NoiseSuppress="Eliminación de ruido"
Gain="Ganancia"
DelayMs="Retardo (milisegundos)"
Type="Tipo"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineal"
ScaleFiltering.Bicubic="Bicúbico"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Nivel de eliminación de ruido (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Kolore gakoa"
SharpnessFilter="Enfokea"
ScaleFilter="Eskala/Aspektu-erlazioa"
NoiseGate="Zarata atalasea"
NoiseSuppress="Zarata kendu"
Gain="Irabazia"
DelayMs="Atzerapena (milisegundo)"
Type="Mota"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Puntua"
ScaleFiltering.Bilinear="Bilineala"
ScaleFiltering.Bicubic="Bikubikoa"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Kenketaren maila (dB)"

View file

@ -1,11 +1,14 @@
ColorFilter="Värinkorjaus"
MaskFilter="Kuvamaski/Sekoitus"
AsyncDelayFilter="Kuvan viive (Async)"
CropFilter="Rajaa"
ScrollFilter="Vieritä"
ChromaKeyFilter="Läpinäkyvä tausta"
ColorKeyFilter="Väriavain"
SharpnessFilter="Terävöitä"
ScaleFilter="Skaalaus/Kuvasuhde"
NoiseGate="Noise Gate"
NoiseSuppress="Melunvaimennus"
Gain="Vahvistus"
DelayMs="Viive (millisekuntia)"
Type="Tyyppi"
@ -50,4 +53,12 @@ NoiseGate.HoldTime="Pitoaika (millisekuntia)"
NoiseGate.ReleaseTime="Vapautumisaika (millisekuntia)"
Gain.GainDB="Vahvistus (dB)"
StretchImage="Venytä kuvaa (Ohita kuvasuhde)"
Resolution="Resoluutio"
None="Ei mitään"
ScaleFiltering="Skaalauksen suodatus"
ScaleFiltering.Point="Piste"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Vaimennustaso (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Couleur d'incrustation"
SharpnessFilter="Accentuer"
ScaleFilter="Mise à léchelle / Ratio d'affichage"
NoiseGate="Noise Gate"
NoiseSuppress="Suppression du bruit"
Gain="Gain"
DelayMs="Retard (en millisecondes)"
Type="Type "
@ -59,4 +60,5 @@ ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinéaire"
ScaleFiltering.Bicubic="Bicubique"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Seuil de suppression (en dB)"

View file

@ -1,11 +1,14 @@
ColorFilter="Promena boja"
MaskFilter="Slika maske i stapanja"
AsyncDelayFilter="Video pauza (asinhrono)"
CropFilter="Odsecanje/okvir"
ScrollFilter="Pomeranje"
ChromaKeyFilter="Ključ providnosti"
ColorKeyFilter="Ključ boje"
SharpnessFilter="Izoštravanje"
ScaleFilter="Uvećanje/Odnos"
NoiseGate="Kapija šuma"
NoiseSuppress="Suzbijanje šuma"
Gain="Pojačanje"
DelayMs="Pauza (milisekunde)"
Type="Vrsta"
@ -50,4 +53,12 @@ NoiseGate.HoldTime="Vreme zadržavanja (milisekunde)"
NoiseGate.ReleaseTime="Vreme otpuštanja (milisekunde)"
Gain.GainDB="Pojačanje (dB)"
StretchImage="Istegni sliku (zanemari odnos visine i širine slike)"
Resolution="Rezolucija"
None="Nijedno"
ScaleFiltering="Filter uvećanja"
ScaleFiltering.Point="Tačka"
ScaleFiltering.Bilinear="Bilinearno"
ScaleFiltering.Bicubic="Bikubično"
ScaleFiltering.Lanczos="Lankoz"
NoiseSuppress.SuppressLevel="Nivo suzbijanja (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Színkulcs"
SharpnessFilter="Élesítés"
ScaleFilter="Méretezés/Képarány"
NoiseGate="Zajgát"
NoiseSuppress="Zajcsökkentés"
Gain="Erősítés"
DelayMs="Késleltetés (ezredmásodperc)"
Type="Típus"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Pont"
ScaleFiltering.Bilinear="Bilineáris"
ScaleFiltering.Bicubic="Kettős köbös"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Csökkentési szint (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Chiave Colore"
SharpnessFilter="Nitidizza"
ScaleFilter="Ridimensionamento/Aspect Ratio"
NoiseGate="Noise Gate"
NoiseSuppress="Soppressione rumore"
Gain="Incremento"
DelayMs="Ritardo (millisecondi)"
Type="Tipo"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineare"
ScaleFiltering.Bicubic="Bicubico"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Livello di soppressione (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="カラーキー"
SharpnessFilter="シャープ"
ScaleFilter="スケーリング/アスペクト比"
NoiseGate="ノイズゲート"
NoiseSuppress="ノイズ抑制"
Gain="ゲイン"
DelayMs="遅延時間 (ミリ秒)"
Type="種別"
@ -59,4 +60,5 @@ ScaleFiltering.Point="ポイント"
ScaleFiltering.Bilinear="バイリニア"
ScaleFiltering.Bicubic="バイキュービック"
ScaleFiltering.Lanczos="ランチョス"
NoiseSuppress.SuppressLevel="抑制レベル (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="색상 키"
SharpnessFilter="선명하게"
ScaleFilter="비례축소/가로세로 비율"
NoiseGate="노이즈 게이트"
NoiseSuppress="소음 억제"
Gain="증폭"
DelayMs="지연 (밀리초)"
Type="형식"
@ -29,8 +30,8 @@ KeyColor="키 색상"
Similarity="유사성 (1-1000)"
Smoothness="매끄러움 (1-1000)"
ColorSpillReduction="키 색상 유출 감소 (1-1000)"
Crop.Left="좌측"
Crop.Right="우측"
Crop.Left="왼쪽"
Crop.Right="오른쪽"
Crop.Top="상단"
Crop.Bottom="하단"
Crop.Width="너비"
@ -59,4 +60,5 @@ ScaleFiltering.Point="점"
ScaleFiltering.Bilinear="이중선형"
ScaleFiltering.Bicubic="쌍삼차"
ScaleFiltering.Lanczos="란초스"
NoiseSuppress.SuppressLevel="억제 세기 (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Color Key"
SharpnessFilter="Verscherpen"
ScaleFilter="Schalen/Aspect Ratio"
NoiseGate="Noise Gate"
NoiseSuppress="Ruisonderdrukking"
Gain="Gain"
DelayMs="Vertraging (milliseconden)"
Type="Type"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Onderdrukkingsniveau (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Kluczowanie koloru (kolor)"
SharpnessFilter="Wyostrzanie"
ScaleFilter="Skalowanie/proporcje"
NoiseGate="Bramka szumów"
NoiseSuppress="Tłumienie hałasu"
Gain="Poziom"
DelayMs="Opóźnienie (milisekundy)"
Type="Typ"
@ -59,4 +60,5 @@ ScaleFiltering.Point="Punktowe"
ScaleFiltering.Bilinear="Dwuliniowe"
ScaleFiltering.Bicubic="Dwusześcienne"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Poziom tłumienia (dB)"

View file

@ -5,7 +5,9 @@ ScrollFilter="Rolagem"
ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Color Key"
SharpnessFilter="Nitidez"
ScaleFilter="Dimensionamento/proporção"
NoiseGate="Filtro de Rúido"
NoiseSuppress="Redução de ruídos"
Gain="Ganho"
DelayMs="Atraso (milissegundos)"
Type="Tipo"
@ -50,4 +52,12 @@ NoiseGate.HoldTime="Tempo de Bloqueio (milissegundos)"
NoiseGate.ReleaseTime="Tempo de libertação (milissegundos)"
Gain.GainDB="Ganho (dB)"
StretchImage="Esticar a Imagem (descartar aspecto da imagem)"
Resolution="Resolução"
None="Nenhum"
ScaleFiltering="Filtragem de escala"
ScaleFiltering.Point="Ponto"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicúbico"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Nível de redução (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="Цветовой ключ"
SharpnessFilter="Увеличить резкость"
ScaleFilter="Коэффициент Масштабирования/Аспект"
NoiseGate="Подавление шума"
NoiseSuppress="Шумоподавление"
Gain="Усиление"
DelayMs="Задержка (миллисекунд)"
Type="Тип"
@ -58,5 +59,6 @@ ScaleFiltering="Масштаб Фильтрации"
ScaleFiltering.Point="Точечная"
ScaleFiltering.Bilinear="Билинейная"
ScaleFiltering.Bicubic="Бикубическая"
ScaleFiltering.Lanczos="Ланцошная"
ScaleFiltering.Lanczos="Метод Ланцоша"
NoiseSuppress.SuppressLevel="Уровень подавления (дБ)"

View file

@ -1,11 +1,14 @@
ColorFilter="Promena boja"
MaskFilter="Slika maske i stapanja"
AsyncDelayFilter="Video pauza (asinhrono)"
CropFilter="Odsecanje/okvir"
ScrollFilter="Pomeranje"
ChromaKeyFilter="Ključ providnosti"
ColorKeyFilter="Ključ boje"
SharpnessFilter="Izoštravanje"
ScaleFilter="Uvećanje/Odnos"
NoiseGate="Kapija šuma"
NoiseSuppress="Suzbijanje šuma"
Gain="Pojačanje"
DelayMs="Pauza (milisekunde)"
Type="Vrsta"
@ -50,4 +53,12 @@ NoiseGate.HoldTime="Vreme zadržavanja (milisekunde)"
NoiseGate.ReleaseTime="Vreme otpuštanja (milisekunde)"
Gain.GainDB="Pojačanje (dB)"
StretchImage="Istegni sliku (zanemari odnos visine i širine slike)"
Resolution="Rezolucija"
None="Nijedno"
ScaleFiltering="Filter uvećanja"
ScaleFiltering.Point="Tačka"
ScaleFiltering.Bilinear="Bilinearno"
ScaleFiltering.Bicubic="Bikubično"
ScaleFiltering.Lanczos="Lankoz"
NoiseSuppress.SuppressLevel="Nivo suzbijanja (dB)"

View file

@ -1,11 +1,14 @@
ColorFilter="Промена боја"
MaskFilter="Слика маске и стапања"
AsyncDelayFilter="Видео пауза (асинхроно)"
CropFilter="Одсецање/оквир"
ScrollFilter="Померање"
ChromaKeyFilter="Кључ провидности"
ColorKeyFilter="Кључ боје"
SharpnessFilter="Изоштравање"
ScaleFilter="Увећање/однос"
NoiseGate="Капија шума"
NoiseSuppress="Сузбијање шума"
Gain="Појачање"
DelayMs="Пауза (милисекунде)"
Type="Врста"
@ -50,4 +53,12 @@ NoiseGate.HoldTime="Време задржавања (милисекунде)"
NoiseGate.ReleaseTime="Време отпуштања (милисекунде)"
Gain.GainDB="Појачање (dB)"
StretchImage="Истегни слику (занемари однос висине и ширине слике)"
Resolution="Резолуција"
None="Ниједно"
ScaleFiltering="Филтер увећања"
ScaleFiltering.Point="Тачка"
ScaleFiltering.Bilinear="Билинеарно"
ScaleFiltering.Bicubic="Бикубично"
ScaleFiltering.Lanczos="Ланкоз"
NoiseSuppress.SuppressLevel="Ниво сузбијања (dB)"

View file

@ -1,12 +1,14 @@
ColorFilter="Färgkorrigering"
MaskFilter="Bild Mask/Blandning"
AsyncDelayFilter="Videofördröjning (Async)"
CropFilter="Beskär/Fyll ut"
ScrollFilter="Scrollning"
ChromaKeyFilter="Kromafilter"
ColorKeyFilter="Färgfilter"
SharpnessFilter="Skärpa"
ScaleFilter="Skalning/Bildförhållande"
NoiseGate="Brusblockering"
NoiseSuppress="Brusreducering"
Gain="Förstärkning"
DelayMs="Fördröjning (millisekunder)"
Type="Typ"
@ -54,7 +56,9 @@ StretchImage="Sträck bild (ignorera bildförhållandet)"
Resolution="Upplösning"
None="Ingen"
ScaleFiltering="Skalningsfiltrering"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilinjär"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Brusreduceringsnivå (dB)"

View file

@ -0,0 +1,64 @@
ColorFilter="Коригування кольору"
MaskFilter="Маска до зображення"
AsyncDelayFilter="Затримка відео (асинхронна)"
CropFilter="Кадрування"
ScrollFilter="Фільтр прокрутки"
ChromaKeyFilter="Зелений екран"
ColorKeyFilter="Фільтрування за кольором"
SharpnessFilter="Різкість"
ScaleFilter="Масштабування/пропорції"
NoiseGate="Пороговий шумопонижувач"
NoiseSuppress="Подавлення шуму"
Gain="Підсилення"
DelayMs="Затримка (мілісекунд)"
Type="Тип"
MaskBlendType.MaskColor="Альфа-маска (з каналу кольору)"
MaskBlendType.MaskAlpha="Альфа-маска (з альфа-каналу)"
MaskBlendType.BlendMultiply="Змішування (множення)"
MaskBlendType.BlendAddition="Змішування (додавання)"
MaskBlendType.BlendSubtraction="Змішування (віднімання)"
Path="Шлях"
Color="Колір"
Opacity="Непрозорість"
Contrast="Контрастність"
Brightness="Яскравість"
Gamma="Гамма-корекція"
BrowsePath.Images="Файли зображень"
BrowsePath.AllFiles="Всі файли"
KeyColorType="Вид кольору для фільтрування"
KeyColor="Колір що фільтрується"
Similarity="Подібність (1-1000)"
Smoothness="Плавність (1-1000)"
ColorSpillReduction="Зменшення проникнення кольору (1-1000)"
Crop.Left="Ліворуч"
Crop.Right="Праворуч"
Crop.Top="Зверху"
Crop.Bottom="Знизу"
Crop.Width="Ширина"
Crop.Height="Висота"
Crop.Relative="Відносні"
ScrollFilter.SpeedX="Горизонтальна швидкість"
ScrollFilter.SpeedY="Вертикальна швидкість"
ScrollFilter.LimitWidth="Обмежити ширину"
ScrollFilter.LimitHeight="Обмежити висоту"
CustomColor="Колір за користувачем"
Red="Червоний"
Green="Зелений"
Blue="Синій"
Magenta="Пурпуровий"
NoiseGate.OpenThreshold="Поріг відкриття (дБ)"
NoiseGate.CloseThreshold="Поріг закриття (дБ)"
NoiseGate.AttackTime="Тривалість фронту сигналу (мілісекунд)"
NoiseGate.HoldTime="Тривалість сигналу (мілісекунд)"
NoiseGate.ReleaseTime="Тривалість спаду сигналу (мілісекунд)"
Gain.GainDB="Підсилення (дБ)"
StretchImage="Розтягнути зображення (ігнорувати пропорції зображення)"
Resolution="Новий розмір"
None="Не вказано"
ScaleFiltering="Фільтр масштабування"
ScaleFiltering.Point="Ступінчастий"
ScaleFiltering.Bilinear="Білінійний"
ScaleFiltering.Bicubic="Бікубічний"
ScaleFiltering.Lanczos="Ланцош"
NoiseSuppress.SuppressLevel="Рівень подавлення (дБ)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="色值"
SharpnessFilter="锐化"
ScaleFilter="缩放比例"
NoiseGate="噪音阈值"
NoiseSuppress="噪声抑制"
Gain="增益"
DelayMs="延迟(毫秒)"
Type="类型"
@ -59,4 +60,5 @@ ScaleFiltering.Point="点"
ScaleFiltering.Bilinear="双线性算法"
ScaleFiltering.Bicubic="双立方算法"
ScaleFiltering.Lanczos="兰索斯算法"
NoiseSuppress.SuppressLevel="抑制程度 (dB)"

View file

@ -8,6 +8,7 @@ ColorKeyFilter="色彩鍵"
SharpnessFilter="銳化"
ScaleFilter="縮放/長寬比"
NoiseGate="噪音閾"
NoiseSuppress="雜訊抑制"
Gain="增益"
DelayMs="延遲 (毫秒)"
Type="類型"
@ -59,4 +60,5 @@ ScaleFiltering.Point="點"
ScaleFiltering.Bilinear="雙線性插值"
ScaleFiltering.Bicubic="雙三次插值"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="抑制標準 (dB)"

View file

@ -277,7 +277,7 @@ static obs_properties_t *noise_suppress_properties(void *data)
obs_properties_t *ppts = obs_properties_create();
obs_properties_add_int_slider(ppts, S_SUPPRESS_LEVEL,
TEXT_SUPPRESS_LEVEL, SUP_MIN, SUP_MAX, 0);
TEXT_SUPPRESS_LEVEL, SUP_MIN, SUP_MAX, 1);
UNUSED_PARAMETER(data);
return ppts;

View file

@ -0,0 +1,4 @@
LibFDK="libfdk AAC енкодер"
Bitrate="Бітрейт"
Afterburner="Увімкнути AAC форсаж"

View file

@ -2,4 +2,5 @@ RTMPStream="Flux RTMP"
RTMPStream.DropThreshold="Llindar d'abandonament (en mil·lisegons)"
FLVOutput="Sortida del fitxer FLV"
FLVOutput.FilePath="Camí del fitxer"
Default="Per defecte"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP Stream"
RTMPStream.DropThreshold="Práh ztrát (milisekundy)"
FLVOutput="Výstup do FLV souboru"
FLVOutput.FilePath="Cesta k souboru"
Default="Výchozí"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP Stream"
RTMPStream.DropThreshold="Drop Threshold (Millisekunden)"
FLVOutput="FLV Dateiausgabe"
FLVOutput.FilePath="Dateipfad"
Default="Standard"

View file

@ -2,4 +2,5 @@ RTMPStream="Retransmisión RTMP"
RTMPStream.DropThreshold="Umbral límite (milisegundos)"
FLVOutput="Archivo de salida FLV"
FLVOutput.FilePath="Ruta de archivo"
Default="Por defecto"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP Jarioa"
RTMPStream.DropThreshold="Galera atalasea (milisegundoak)"
FLVOutput="FLV irteera fitxategia"
FLVOutput.FilePath="Fitxategiaren bidea"
Default="Lehenetsia"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP-virtaus"
RTMPStream.DropThreshold="Pudotuskynnys (millisekuntia)"
FLVOutput="FLV-tiedosto ulostulo"
FLVOutput.FilePath="Tiedostopolku"
Default="Oletusarvo"

View file

@ -2,4 +2,5 @@ RTMPStream="Flux RTMP"
RTMPStream.DropThreshold="Seuil de baisse (en millisecondes)"
FLVOutput="Fichier FLV sortant"
FLVOutput.FilePath="Chemin du fichier"
Default="Interface par défaut"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP strim"
RTMPStream.DropThreshold="Tolerancija ispuštanja (milisekunde)"
FLVOutput="Izlaz u FLV datoteku"
FLVOutput.FilePath="Putanja datoteke"
Default="Podrazumevani"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP stream"
RTMPStream.DropThreshold="Ejtési küszöb (ezredmásodperc)"
FLVOutput="FLV kimeneti fájl"
FLVOutput.FilePath="Fájl elérési útja"
Default="Alapértelmezett"

View file

@ -2,4 +2,5 @@ RTMPStream="Stream RTMP"
RTMPStream.DropThreshold="Abbassa il limite (millisecondi)"
FLVOutput="Uscita file FLV"
FLVOutput.FilePath="Destinazione file"
Default="Predefinito"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP ストリーム"
RTMPStream.DropThreshold="ドロップしきい値 (ミリ秒)"
FLVOutput="FLV ファイル出力"
FLVOutput.FilePath="ファイルのパス"
Default="既定"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP 스트림"
RTMPStream.DropThreshold="드롭 역치값 (밀리세컨드)"
FLVOutput="FLV 파일 출력"
FLVOutput.FilePath="파일 경로"
Default="기본값"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP Stream"
RTMPStream.DropThreshold="Uitvaldrempel (milliseconden)"
FLVOutput="FLV Bestandsuitvoer"
FLVOutput.FilePath="Bestandspad"
Default="Standaard"

View file

@ -2,4 +2,5 @@ RTMPStream="Strumień RTMP"
RTMPStream.DropThreshold="Próg odrzucania (w milisekundach)"
FLVOutput="Wyjście do pliku FLV"
FLVOutput.FilePath="Scieżka do pliku"
Default="Domyślne"

View file

@ -2,4 +2,5 @@ RTMPStream="Stream RTMP"
RTMPStream.DropThreshold="Limiar de Corte (milissegundos)"
FLVOutput="Arquivo de Saída FLV"
FLVOutput.FilePath="Caminho do Arquivo"
Default="Padrão"

View file

@ -2,4 +2,5 @@ RTMPStream="Поток RTMP"
RTMPStream.DropThreshold="Нижний порог (мс)"
FLVOutput="Выходной файл FLV"
FLVOutput.FilePath="Путь к файлу"
Default="По умолчанию"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP strim"
RTMPStream.DropThreshold="Tolerancija ispuštanja (milisekunde)"
FLVOutput="Izlaz u FLV datoteku"
FLVOutput.FilePath="Putanja datoteke"
Default="Podrazumevani"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP стрим"
RTMPStream.DropThreshold="Толеранција испуштања (milisekunde)"
FLVOutput="Излаз у FLV датотеку"
FLVOutput.FilePath="Путања датотеке"
Default="Подразумевана"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP-ström"
RTMPStream.DropThreshold="Tappgräns (ms)"
FLVOutput="FLV-filutmatning"
FLVOutput.FilePath="Sökväg"
Default="Standard"

View file

@ -1,2 +1,6 @@
RTMPStream="RTMP потік"
RTMPStream.DropThreshold="Поріг втрат (мілісекунд)"
FLVOutput="Вивід FLV файлу"
FLVOutput.FilePath="Шлях до файлу"
Default="За замовчанням"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP 流"
RTMPStream.DropThreshold="Drop阈值(毫秒)"
FLVOutput="FLV 文件输出"
FLVOutput.FilePath="文件路径"
Default="默认"

View file

@ -2,4 +2,5 @@ RTMPStream="RTMP 串流"
RTMPStream.DropThreshold="丟棄閾值 (毫秒)"
FLVOutput="FLV 檔案輸出"
FLVOutput.FilePath="檔案路徑"
Default="預設"

View file

@ -695,10 +695,10 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
goto finish;
}
// they should come back in OS preferred order
// prefer ipv4 results, since lots of ISPs have broken ipv6 connectivity
for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
{
if (ptr->ai_family == AF_INET || ptr->ai_family == AF_INET6)
if (ptr->ai_family == AF_INET)
{
memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
*addrlen = (socklen_t)ptr->ai_addrlen;
@ -706,6 +706,19 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
}
}
if (!*addrlen)
{
for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
{
if (ptr->ai_family == AF_INET6)
{
memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
*addrlen = (socklen_t)ptr->ai_addrlen;
break;
}
}
}
freeaddrinfo(result);
if (service->ss_family == AF_UNSPEC || *addrlen == 0)
@ -3091,7 +3104,10 @@ HandleInvoke(RTMP *r, const char *body, unsigned int nBodySize)
{
RTMP_Log(RTMP_LOGERROR, "rtmp server requested close");
RTMP_Close(r);
#if defined(CRYPTO) || defined(USE_ONLY_MD5)
// disabled this for now, if the server sends an rtmp close message librtmp
// will enter an infinite loop here until stack is exhausted.
#if 0 && (defined(CRYPTO) || defined(USE_ONLY_MD5))
if ((r->Link.protocol & RTMP_FEATURE_WRITE) &&
!(r->Link.pFlags & RTMP_PUB_CLEAN) &&
( !(r->Link.pFlags & RTMP_PUB_NAME) ||

View file

@ -42,11 +42,23 @@
#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__)
#define OPT_DROP_THRESHOLD "drop_threshold_ms"
#define OPT_PFRAME_DROP_THRESHOLD "pframe_drop_threshold_ms"
#define OPT_MAX_SHUTDOWN_TIME_SEC "max_shutdown_time_sec"
#define OPT_BIND_IP "bind_ip"
//#define TEST_FRAMEDROPS
#ifdef TEST_FRAMEDROPS
#define DROPTEST_MAX_KBPS 3000
#define DROPTEST_MAX_BYTES (DROPTEST_MAX_KBPS * 1000 / 8)
struct droptest_info {
uint64_t ts;
size_t size;
};
#endif
struct rtmp_stream {
obs_output_t *output;
@ -66,6 +78,7 @@ struct rtmp_stream {
os_sem_t *send_sem;
os_event_t *stop_event;
uint64_t stop_ts;
uint64_t shutdown_timeout_ts;
struct dstr path, key;
struct dstr username, password;
@ -75,6 +88,8 @@ struct rtmp_stream {
/* frame drop variables */
int64_t drop_threshold_usec;
int64_t min_drop_dts_usec;
int64_t pframe_drop_threshold_usec;
int64_t pframe_min_drop_dts_usec;
int min_priority;
int64_t last_dts_usec;
@ -82,6 +97,11 @@ struct rtmp_stream {
uint64_t total_bytes_sent;
int dropped_frames;
#ifdef TEST_FRAMEDROPS
struct circlebuf droptest_info;
size_t droptest_size;
#endif
RTMP rtmp;
};
@ -172,6 +192,9 @@ static void rtmp_stream_destroy(void *data)
os_sem_destroy(stream->send_sem);
pthread_mutex_destroy(&stream->packets_mutex);
circlebuf_free(&stream->packets);
#ifdef TEST_FRAMEDROPS
circlebuf_free(&stream->droptest_info);
#endif
bfree(stream);
}
}
@ -203,7 +226,7 @@ static void rtmp_stream_stop(void *data, uint64_t ts)
{
struct rtmp_stream *stream = data;
if (stopping(stream))
if (stopping(stream) && ts != 0)
return;
if (connecting(stream))
@ -212,6 +235,10 @@ static void rtmp_stream_stop(void *data, uint64_t ts)
stream->stop_ts = ts / 1000ULL;
os_event_signal(stream->stop_event);
if (ts)
stream->shutdown_timeout_ts = ts +
(uint64_t)stream->max_shutdown_time_sec * 1000000000ULL;
if (active(stream)) {
if (stream->stop_ts == 0)
os_sem_post(stream->send_sem);
@ -285,6 +312,40 @@ static bool discard_recv_data(struct rtmp_stream *stream, size_t size)
return true;
}
#ifdef TEST_FRAMEDROPS
static void droptest_cap_data_rate(struct rtmp_stream *stream, size_t size)
{
uint64_t ts = os_gettime_ns();
struct droptest_info info;
info.ts = ts;
info.size = size;
circlebuf_push_back(&stream->droptest_info, &info, sizeof(info));
stream->droptest_size += size;
if (stream->droptest_info.size) {
circlebuf_peek_front(&stream->droptest_info,
&info, sizeof(info));
if (stream->droptest_size > DROPTEST_MAX_BYTES) {
uint64_t elapsed = ts - info.ts;
if (elapsed < 1000000000ULL) {
elapsed = 1000000000ULL - elapsed;
os_sleepto_ns(ts + elapsed);
}
while (stream->droptest_size > DROPTEST_MAX_BYTES) {
circlebuf_pop_front(&stream->droptest_info,
&info, sizeof(info));
stream->droptest_size -= info.size;
}
}
}
}
#endif
static int send_packet(struct rtmp_stream *stream,
struct encoder_packet *packet, bool is_header, size_t idx)
{
@ -306,9 +367,11 @@ static int send_packet(struct rtmp_stream *stream,
}
flv_packet_mux(packet, &data, &size, is_header);
#ifdef TEST_FRAMEDROPS
os_sleep_ms(rand() % 40);
droptest_cap_data_rate(stream, size);
#endif
ret = RTMP_Write(&stream->rtmp, (char*)data, (int)size, (int)idx);
bfree(data);
@ -320,6 +383,19 @@ static int send_packet(struct rtmp_stream *stream,
static inline bool send_headers(struct rtmp_stream *stream);
static inline bool can_shutdown_stream(struct rtmp_stream *stream,
struct encoder_packet *packet)
{
uint64_t cur_time = os_gettime_ns();
bool timeout = cur_time >= stream->shutdown_timeout_ts;
if (timeout)
info("Stream shutdown timeout reached (%d second(s))",
stream->max_shutdown_time_sec);
return timeout || packet->sys_dts_usec >= (int64_t)stream->stop_ts;
}
static void *send_thread(void *data)
{
struct rtmp_stream *stream = data;
@ -337,7 +413,7 @@ static void *send_thread(void *data)
continue;
if (stopping(stream)) {
if (packet.sys_dts_usec >= (int64_t)stream->stop_ts) {
if (can_shutdown_stream(stream, &packet)) {
obs_free_encoder_packet(&packet);
break;
}
@ -586,18 +662,7 @@ static int try_connect(struct rtmp_stream *stream)
RTMP_EnableWrite(&stream->rtmp);
dstr_copy(&stream->encoder_name, "FMLE/3.0 (compatible; obs-studio/");
#ifdef HAVE_OBSCONFIG_H
dstr_cat(&stream->encoder_name, OBS_VERSION);
#else
dstr_catf(&stream->encoder_name, "%d.%d.%d",
LIBOBS_API_MAJOR_VER,
LIBOBS_API_MINOR_VER,
LIBOBS_API_PATCH_VER);
#endif
dstr_cat(&stream->encoder_name, "; FMSc/1.0)");
dstr_copy(&stream->encoder_name, "FMLE/3.0 (compatible; FMSc/1.0)");
set_rtmp_dstr(&stream->rtmp.Link.pubUser, &stream->username);
set_rtmp_dstr(&stream->rtmp.Link.pubPasswd, &stream->password);
@ -652,6 +717,8 @@ static bool init_connect(struct rtmp_stream *stream)
obs_service_t *service;
obs_data_t *settings;
const char *bind_ip;
int64_t drop_p;
int64_t drop_b;
if (stopping(stream))
pthread_join(stream->send_thread, NULL);
@ -675,11 +742,17 @@ static bool init_connect(struct rtmp_stream *stream)
dstr_copy(&stream->password, obs_service_get_password(service));
dstr_depad(&stream->path);
dstr_depad(&stream->key);
stream->drop_threshold_usec =
(int64_t)obs_data_get_int(settings, OPT_DROP_THRESHOLD) * 1000;
drop_b = (int64_t)obs_data_get_int(settings, OPT_DROP_THRESHOLD);
drop_p = (int64_t)obs_data_get_int(settings, OPT_PFRAME_DROP_THRESHOLD);
stream->max_shutdown_time_sec =
(int)obs_data_get_int(settings, OPT_MAX_SHUTDOWN_TIME_SEC);
if (drop_p < (drop_b + 200))
drop_p = drop_b + 200;
stream->drop_threshold_usec = 1000 * drop_b;
stream->pframe_drop_threshold_usec = 1000 * drop_p;
bind_ip = obs_data_get_string(settings, OPT_BIND_IP);
dstr_copy(&stream->bind_ip, bind_ip);
@ -741,14 +814,18 @@ static inline size_t num_buffered_packets(struct rtmp_stream *stream)
return stream->packets.size / sizeof(struct encoder_packet);
}
static void drop_frames(struct rtmp_stream *stream)
static void drop_frames(struct rtmp_stream *stream, const char *name,
int highest_priority, int64_t *p_min_dts_usec)
{
struct circlebuf new_buf = {0};
int drop_priority = 0;
uint64_t last_drop_dts_usec = 0;
int num_frames_dropped = 0;
debug("Previous packet count: %d", (int)num_buffered_packets(stream));
#ifdef _DEBUG
int start_packets = (int)num_buffered_packets(stream);
#else
UNUSED_PARAMETER(name);
#endif
circlebuf_reserve(&new_buf, sizeof(struct encoder_packet) * 8);
@ -760,56 +837,71 @@ static void drop_frames(struct rtmp_stream *stream)
/* do not drop audio data or video keyframes */
if (packet.type == OBS_ENCODER_AUDIO ||
packet.drop_priority == OBS_NAL_PRIORITY_HIGHEST) {
packet.drop_priority >= highest_priority) {
circlebuf_push_back(&new_buf, &packet, sizeof(packet));
} else {
if (drop_priority < packet.drop_priority)
drop_priority = packet.drop_priority;
num_frames_dropped++;
obs_free_encoder_packet(&packet);
}
}
circlebuf_free(&stream->packets);
stream->packets = new_buf;
stream->min_priority = drop_priority;
stream->min_drop_dts_usec = last_drop_dts_usec;
stream->packets = new_buf;
if (stream->min_priority < highest_priority)
stream->min_priority = highest_priority;
*p_min_dts_usec = last_drop_dts_usec;
stream->dropped_frames += num_frames_dropped;
debug("New packet count: %d", (int)num_buffered_packets(stream));
#ifdef _DEBUG
debug("Dropped %s, prev packet count: %d, new packet count: %d",
name,
start_packets,
(int)num_buffered_packets(stream));
#endif
}
static void check_to_drop_frames(struct rtmp_stream *stream)
static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes)
{
struct encoder_packet first;
int64_t buffer_duration_usec;
size_t num_packets = num_buffered_packets(stream);
const char *name = pframes ? "p-frames" : "b-frames";
int priority = pframes ?
OBS_NAL_PRIORITY_HIGHEST : OBS_NAL_PRIORITY_HIGH;
int64_t *p_min_dts_usec = pframes ?
&stream->pframe_min_drop_dts_usec :
&stream->min_drop_dts_usec;
int64_t drop_threshold = pframes ?
stream->pframe_drop_threshold_usec :
stream->drop_threshold_usec;
if (num_buffered_packets(stream) < 5)
if (num_packets < 5)
return;
circlebuf_peek_front(&stream->packets, &first, sizeof(first));
/* do not drop frames if frames were just dropped within this time */
if (first.dts_usec < stream->min_drop_dts_usec)
if (first.dts_usec < *p_min_dts_usec)
return;
/* if the amount of time stored in the buffered packets waiting to be
* sent is higher than threshold, drop frames */
buffer_duration_usec = stream->last_dts_usec - first.dts_usec;
if (buffer_duration_usec > stream->drop_threshold_usec) {
drop_frames(stream);
debug("dropping %" PRId64 " worth of frames",
buffer_duration_usec);
if (buffer_duration_usec > drop_threshold) {
debug("buffer_duration_usec: %lld", buffer_duration_usec);
drop_frames(stream, name, priority, p_min_dts_usec);
}
}
static bool add_video_packet(struct rtmp_stream *stream,
struct encoder_packet *packet)
{
check_to_drop_frames(stream);
check_to_drop_frames(stream, false);
check_to_drop_frames(stream, true);
/* if currently dropping frames, drop packets until it reaches the
* desired priority */
@ -855,8 +947,9 @@ static void rtmp_stream_data(void *data, struct encoder_packet *packet)
static void rtmp_stream_defaults(obs_data_t *defaults)
{
obs_data_set_default_int(defaults, OPT_DROP_THRESHOLD, 600);
obs_data_set_default_int(defaults, OPT_MAX_SHUTDOWN_TIME_SEC, 5);
obs_data_set_default_int(defaults, OPT_DROP_THRESHOLD, 500);
obs_data_set_default_int(defaults, OPT_PFRAME_DROP_THRESHOLD, 800);
obs_data_set_default_int(defaults, OPT_MAX_SHUTDOWN_TIME_SEC, 30);
obs_data_set_default_string(defaults, OPT_BIND_IP, "default");
}

View file

@ -0,0 +1,21 @@
if (NOT WIN32)
return()
endif()
project(obs-text)
if(WIN32)
set(obs-text_PLATFORM_SOURCES
gdiplus/obs-text.cpp)
set(obs-text_PLATFORM_DEPS
gdiplus)
endif()
add_library(obs-text MODULE
${obs-text_PLATFORM_SOURCES}
${obs-text_PLATFORM_HEADERS})
target_link_libraries(obs-text
libobs
${obs-text_PLATFORM_DEPS})
install_obs_plugin_with_data(obs-text data)

View file

@ -0,0 +1,30 @@
TextGDIPlus="Text (GDI+)"
Font="Font"
Text="Text"
ReadFromFile="Llegeix del fitxer"
TextFile="Fitxer de text (UTF-8)"
Filter.TextFiles="Arxius de text"
Filter.AllFiles="Tots els fitxers"
Color="Color"
Opacity="Opacitat"
BkColor="Color de fons"
BkOpacity="Opacitat del fons"
Alignment="Alineació"
Alignment.Left="Esquerra"
Alignment.Center="Centre"
Alignment.Right="Dreta"
Vertical="Vertical"
VerticalAlignment="Alineació vertical"
VerticalAlignment.Top="Superior"
VerticalAlignment.Bottom="Inferior"
Outline="Contorn"
Outline.Size="Mida del contorn"
Outline.Color="Color del contorn"
Outline.Opacity="Opacitat del contorn"
ChatlogMode="Mode xat"
ChatlogMode.Lines="Límit de la línia de xat"
UseCustomExtents="Utilitza extensions de text personalitzat"
UseCustomExtents.Wrap="Ajusta"
Width="Amplada"
Height="Alçada"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Text (GDI+)"
Font="Písmo"
Text="Text"
ReadFromFile="Ze souboru"
TextFile="Textový soubor (UTF-8)"
Filter.TextFiles="Textové soubory"
Filter.AllFiles="Všechny soubory"
Color="Barva"
Opacity="Krytí"
BkColor="Barva pozadí"
BkOpacity="Průhlednost pozadí"
Alignment="Zarovnání"
Alignment.Left="Vlevo"
Alignment.Center="Uprostřed"
Alignment.Right="Vpravo"
Vertical="Vertikálně"
VerticalAlignment="Vertikální zarovnání"
VerticalAlignment.Top="Nahoře"
VerticalAlignment.Bottom="Dole"
Outline="Obtáhnout"
Outline.Size="Síla obtažení"
Outline.Color="Barva obtažení"
Outline.Opacity="Krytí obtažení"
ChatlogMode="Režim chatu"
ChatlogMode.Lines="Limit řádků režimu chatu"
UseCustomExtents="Použít vlastní rozsah textu"
UseCustomExtents.Wrap="Zalomit"
Width="Šířka"
Height="Výška"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Text (GDI+)"
Font="Schriftart"
Text="Text"
ReadFromFile="Aus Datei lesen"
TextFile="Textdatei (UTF-8)"
Filter.TextFiles="Textdateien"
Filter.AllFiles="Alle Dateien"
Color="Farbe"
Opacity="Deckkraft"
BkColor="Hintergrundfarbe"
BkOpacity="Hintergrunddeckkraft"
Alignment="Ausrichtung"
Alignment.Left="Linksbündig"
Alignment.Center="Zentriert"
Alignment.Right="Rechtsbündig"
Vertical="Vertikal"
VerticalAlignment="Vertikal ausrichten"
VerticalAlignment.Top="Oben"
VerticalAlignment.Bottom="Unten"
Outline="Kontur"
Outline.Size="Konturgröße"
Outline.Color="Konturfarbe"
Outline.Opacity="Deckkraft der Kontur"
ChatlogMode="Chatlog-Modus"
ChatlogMode.Lines="Chatlog Zeilenlimit"
UseCustomExtents="Nutze benutzerdefinierten Textbereich"
UseCustomExtents.Wrap="Umbruch"
Width="Breite"
Height="Höhe"

View file

@ -0,0 +1,33 @@
TextGDIPlus="Text (GDI+)"
Font="Font"
Text="Text"
ReadFromFile="Read from file"
TextFile="Text File (UTF-8)"
Filter.TextFiles="Text Files"
Filter.AllFiles="All Files"
Color="Color"
Opacity="Opacity"
Gradient="Gradient"
Gradient.Color="Gradient Color"
Gradient.Opacity="Gradient Opacity"
Gradient.Direction="Gradient Direction"
BkColor="Background Color"
BkOpacity="Background Opacity"
Alignment="Alignment"
Alignment.Left="Left"
Alignment.Center="Center"
Alignment.Right="Right"
Vertical="Vertical"
VerticalAlignment="Vertical Alignment"
VerticalAlignment.Top="Top"
VerticalAlignment.Bottom="Bottom"
Outline="Outline"
Outline.Size="Outline Size"
Outline.Color="Outline Color"
Outline.Opacity="Outline Opacity"
ChatlogMode="Chatlog Mode"
ChatlogMode.Lines="Chatlog Line Limit"
UseCustomExtents="Use Custom Text Extents"
UseCustomExtents.Wrap="Wrap"
Width="Width"
Height="Height"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Texto (GDI+)"
Font="Fuente"
Text="Texto"
ReadFromFile="Leer desde archivo"
TextFile="Archivo de texto (UTF-8)"
Filter.TextFiles="Archivos de texto"
Filter.AllFiles="Todos los archivos"
Color="Color"
Opacity="Opacidad"
BkColor="Color del fondo"
BkOpacity="Opacidad del fondo"
Alignment="Alineamiento"
Alignment.Left="Izquierda"
Alignment.Center="Centrado"
Alignment.Right="Derecha"
Vertical="Vertical"
VerticalAlignment="Alineación vertical"
VerticalAlignment.Top="Arriba"
VerticalAlignment.Bottom="Abajo"
Outline="Contorno"
Outline.Size="Tamaño del borde"
Outline.Color="Color del borde"
Outline.Opacity="Opacidad del borde"
ChatlogMode="Modo chat"
ChatlogMode.Lines="Límite de la línea de chat"
UseCustomExtents="Usar extensiones de texto personalizado"
UseCustomExtents.Wrap="Ajustar"
Width="Ancho"
Height="Alto"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Testua (GDI+)"
Font="Letra-tipoa"
Text="Testua"
ReadFromFile="Irakurri fitxategitik"
TextFile="Testu fitxategia (UTF-8)"
Filter.TextFiles="Testu fitxategiak"
Filter.AllFiles="Fitxategi guztiak"
Color="Kolorea"
Opacity="Opakutasuna"
BkColor="Atzeko planoaren kolorea"
BkOpacity="Atzeko planoaren opakutasuna"
Alignment="Lerrokatzea"
Alignment.Left="Ezkerrean"
Alignment.Center="Erdian"
Alignment.Right="Eskuinean"
Vertical="Bertikala"
VerticalAlignment="Lerrokatze bertikala"
VerticalAlignment.Top="Goian"
VerticalAlignment.Bottom="Behean"
Outline="Ertza"
Outline.Size="Ertzaren zabalera"
Outline.Color="Ertzaren kolorea"
Outline.Opacity="Ertzaren opakutasuna"
ChatlogMode="Berriketa modua"
ChatlogMode.Lines="Berriketa lerroaren limitea"
UseCustomExtents="Erabili testu hedapen pertsonalak"
UseCustomExtents.Wrap="Egokitu"
Width="Zabalera"
Height="Altuera"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Teksti (GDI+)"
Font="Fontti"
Text="Teksti"
ReadFromFile="Lue tiedostosta"
TextFile="Tekstitiedosto (UTF-8)"
Filter.TextFiles="Tekstitiedostot"
Filter.AllFiles="Kaikki tiedostot"
Color="Väri"
Opacity="Läpinäkyvyys"
BkColor="Taustaväri"
BkOpacity="Taustan läpinäkyvyys"
Alignment="Sijoittelu"
Alignment.Left="Vasen"
Alignment.Center="Keskitetty"
Alignment.Right="Oikea"
Vertical="Pystysuunnassa"
VerticalAlignment="Pystysijoittelu"
VerticalAlignment.Top="Ylös"
VerticalAlignment.Bottom="Alas"
Outline="Reunaviiva"
Outline.Size="Reunaviivan koko"
Outline.Color="Reunaviivan väri"
Outline.Opacity="Reunaviivan läpinäkyvyys"
ChatlogMode="Chatlog-tila"
ChatlogMode.Lines="Chatlog riviraja"
UseCustomExtents="Käytä valinnaisia fonttilaajennuksia"
UseCustomExtents.Wrap="Sido"
Width="Leveys"
Height="Korkeus"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Texte (GDI+)"
Font="Police"
Text="Texte"
ReadFromFile="Lire depuis un fichier"
TextFile="Fichier texte (UTF-8)"
Filter.TextFiles="Fichiers texte"
Filter.AllFiles="Tous les fichiers"
Color="Couleur"
Opacity="Opacité"
BkColor="Couleur de l'arrière-plan"
BkOpacity="Transparence de l'arrière-plan"
Alignment="Alignement"
Alignment.Left="À gauche"
Alignment.Center="Centré"
Alignment.Right="À droite"
Vertical="Vertical"
VerticalAlignment="Alignement vertical"
VerticalAlignment.Top="En haut"
VerticalAlignment.Bottom="En bas"
Outline="Contour"
Outline.Size="Épaisseur du contour"
Outline.Color="Couleur du contour"
Outline.Opacity="Opacité du contour"
ChatlogMode="Mode discussion"
ChatlogMode.Lines="Lignes de discussion"
UseCustomExtents="Utiliser une taille personnalisée"
UseCustomExtents.Wrap="Retour à la ligne automatique"
Width="Largeur"
Height="Hauteur"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Szöveg (GDI+)"
Font="Betűtípus"
Text="Szöveg"
ReadFromFile="Fájlból olvasás"
TextFile="Szövegfájl (UTF-8)"
Filter.TextFiles="Szöveges fájlok"
Filter.AllFiles="Minden fájl"
Color="Szín"
Opacity="Áttetszőség"
BkColor="Háttérszín"
BkOpacity="Háttér áttetszőség"
Alignment="Pozíció"
Alignment.Left="Balra"
Alignment.Center="Középre"
Alignment.Right="Jobbra"
Vertical="Függőleges"
VerticalAlignment="Függőleges igazítás"
VerticalAlignment.Top="Fent"
VerticalAlignment.Bottom="Lent"
Outline="Körvonal"
Outline.Size="Körvonal mérete"
Outline.Color="Körvonal színe"
Outline.Opacity="Körvonal áttetszőség"
ChatlogMode="Csevegőnapló mód"
ChatlogMode.Lines="Csevegőnapló sorlimit"
UseCustomExtents="Egyedi szövegdoboz használata"
UseCustomExtents.Wrap="Sortörés"
Width="Szélesség"
Height="Magasság"

View file

@ -0,0 +1,30 @@
TextGDIPlus="テキスト (GDI+)"
Font="フォント"
Text="テキスト"
ReadFromFile="ファイルからの読み取り"
TextFile="テキストファイル (UTF-8)"
Filter.TextFiles="テキストファイル"
Filter.AllFiles="すべてのファイル"
Color="色"
Opacity="不透明度"
BkColor="背景色"
BkOpacity="背景の不透明度"
Alignment="位置揃え"
Alignment.Left="左"
Alignment.Center="中央"
Alignment.Right="右"
Vertical="垂直方向"
VerticalAlignment="垂直位置揃え"
VerticalAlignment.Top="上"
VerticalAlignment.Bottom="下"
Outline="輪郭"
Outline.Size="輪郭のサイズ"
Outline.Color="輪郭の色"
Outline.Opacity="輪郭の不透明度"
ChatlogMode="チャットログモード"
ChatlogMode.Lines="チャットログ行の制限"
UseCustomExtents="テキスト領域の範囲を指定する"
UseCustomExtents.Wrap="折り返す"
Width="幅"
Height="高さ"

View file

@ -0,0 +1,30 @@
TextGDIPlus="텍스트 (GDI+)"
Font="글꼴"
Text="텍스트"
ReadFromFile="파일에서 불러들이기"
TextFile="텍스트 파일 (UTF-8)"
Filter.TextFiles="텍스트 파일"
Filter.AllFiles="모든 파일"
Color="색"
Opacity="투명도"
BkColor="배경 색상"
BkOpacity="배경 불투명도"
Alignment="정렬"
Alignment.Left="왼쪽"
Alignment.Center="가운데"
Alignment.Right="오른쪽"
Vertical="수직"
VerticalAlignment="수직 정렬"
VerticalAlignment.Top="위"
VerticalAlignment.Bottom="아래"
Outline="외곽선"
Outline.Size="외곽선 크기"
Outline.Color="외곽선 색"
Outline.Opacity="외곽선 투명도"
ChatlogMode="채팅기록 모드"
ChatlogMode.Lines="채팅기록 줄 제한"
UseCustomExtents="사용자 정의 텍스트 설정"
UseCustomExtents.Wrap="자동 줄 바꿈"
Width="너비"
Height="높이"

View file

@ -0,0 +1,28 @@
TextGDIPlus="Tekst (GDI+)"
Font="Lettertype"
Text="Tekst"
ReadFromFile="Lees uit bestand"
TextFile="Tekstbestand (UTF-8)"
Filter.TextFiles="Tekstbestanden"
Filter.AllFiles="Alle bestanden"
Color="Kleur"
Opacity="Dekking"
Alignment="Uitlijning"
Alignment.Left="Links"
Alignment.Center="Midden"
Alignment.Right="Rechts"
Vertical="Verticaal"
VerticalAlignment="Verticale uitlijning"
VerticalAlignment.Top="Boven"
VerticalAlignment.Bottom="Onder"
Outline="Contour"
Outline.Size="Contourgrootte"
Outline.Color="Contourkleur"
Outline.Opacity="Contourdekking"
ChatlogMode="Chatlogmodus"
ChatlogMode.Lines="Chatlog regel-limiet"
UseCustomExtents="Aangepaste tekst-extents gebruiken"
UseCustomExtents.Wrap="Terugloop"
Width="Breedte"
Height="Hoogte"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Tekst (GDI +)"
Font="Czcionka"
Text="Tekst"
ReadFromFile="Czytaj z pliku"
TextFile="Plik tekstowy (UTF-8)"
Filter.TextFiles="Pliki tekstowe"
Filter.AllFiles="Wszystkie pliki"
Color="Kolor"
Opacity="Przezroczystość"
BkColor="Kolor tła"
BkOpacity="Przezroczystość tła"
Alignment="Wyrównanie"
Alignment.Left="Do lewej"
Alignment.Center="Wyśrodkuj"
Alignment.Right="Do prawej"
Vertical="Pionowo"
VerticalAlignment="Wyrównanie w pionie"
VerticalAlignment.Top="Do góry"
VerticalAlignment.Bottom="Do dołu"
Outline="Kontur"
Outline.Size="Rozmiar konturu"
Outline.Color="Kolor konturu"
Outline.Opacity="Przezroczystość konturu"
ChatlogMode="Tryb podglądu czatu"
ChatlogMode.Lines="Limit linii czatu"
UseCustomExtents="Użyj niestandardowego zakresu tekstu"
UseCustomExtents.Wrap="Zawiń"
Width="Szerokość"
Height="Wysokość"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Текст (GDI+)"
Font="Шрифт"
Text="Текст"
ReadFromFile="Чтение из файла"
TextFile="Текстовый файл (UTF-8)"
Filter.TextFiles="Текстовые файлы"
Filter.AllFiles="Все файлы"
Color="Цвет"
Opacity="Непрозрачность"
BkColor="Цвет фона"
BkOpacity="Непрозрачность фона"
Alignment="Выравнивание"
Alignment.Left="По левому краю"
Alignment.Center="По центру"
Alignment.Right="По правому краю"
Vertical="Вертикальный"
VerticalAlignment="Вертикальное выравнивание"
VerticalAlignment.Top="Сверху"
VerticalAlignment.Bottom="Снизу"
Outline="Обводка"
Outline.Size="Размер обводки"
Outline.Color="Цвет обводки"
Outline.Opacity="Непрозрачность контура"
ChatlogMode="Режим чат-лога"
ChatlogMode.Lines="Лимит кол-ва строк чата"
UseCustomExtents="Свои размеры текстового поля"
UseCustomExtents.Wrap="Перенос строк"
Width="Ширина"
Height="Высота"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Text (GDI+)"
Font="Typsnitt"
Text="Text"
ReadFromFile="Läs från fil"
TextFile="Textfil (UTF-8)"
Filter.TextFiles="Textfiler"
Filter.AllFiles="Alla filer"
Color="Färg"
Opacity="Opacitet"
BkColor="Bakgrundsfärg"
BkOpacity="Bakgrundsopacitet"
Alignment="Justering"
Alignment.Left="Vänster"
Alignment.Center="Centrerad"
Alignment.Right="Höger"
Vertical="Vertikal"
VerticalAlignment="Vertikal justering"
VerticalAlignment.Top="Överkant"
VerticalAlignment.Bottom="Nederkant"
Outline="Kontur"
Outline.Size="Konturstorlek"
Outline.Color="Konturfärg"
Outline.Opacity="Konturopacitet"
ChatlogMode="Chattloggsläge"
ChatlogMode.Lines="Radgräns för chattlogg"
UseCustomExtents="Använd anpassade textmått"
UseCustomExtents.Wrap="Radbryt"
Width="Bredd"
Height="Höjd"

View file

@ -0,0 +1,30 @@
TextGDIPlus="Текст (GDI+)"
Font="Шрифт"
Text="Текст"
ReadFromFile="Текст з файлу"
TextFile="Текстовий файл (UTF-8)"
Filter.TextFiles="Текстові файли"
Filter.AllFiles="Всі файли"
Color="Колір"
Opacity="Непрозорість"
BkColor="Колір фону"
BkOpacity="Непрозорість фону"
Alignment="Вирівнювання"
Alignment.Left="Ліворуч"
Alignment.Center="Центр"
Alignment.Right="Праворуч"
Vertical="Вертикально"
VerticalAlignment="Вертикальне вирівнювання"
VerticalAlignment.Top="Вверху"
VerticalAlignment.Bottom="Внизу"
Outline="Контур"
Outline.Size="Розмір контуру"
Outline.Color="Колір контуру"
Outline.Opacity="Непрозорість контуру"
ChatlogMode="Режим чат-журналу"
ChatlogMode.Lines="Кількість рядків чат-журналу"
UseCustomExtents="Особливі властивості текстового блоку"
UseCustomExtents.Wrap="Перенос слів"
Width="Ширина"
Height="Висота"

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