Imported Upstream version 0.14.2+dfsg1

This commit is contained in:
Sebastian Ramacher 2016-05-24 21:53:01 +02:00
parent fb3990e9e5
commit 41a01dbf05
529 changed files with 25112 additions and 2336 deletions

View file

@ -9,6 +9,7 @@ if(WIN32)
add_subdirectory(win-capture)
add_subdirectory(decklink/win)
add_subdirectory(win-mf)
add_subdirectory(obs-qsv11)
elseif(APPLE)
add_subdirectory(coreaudio-encoder)
add_subdirectory(mac-avcapture)
@ -21,6 +22,7 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
add_subdirectory(linux-pulseaudio)
add_subdirectory(linux-v4l2)
add_subdirectory(linux-jack)
add_subdirectory(linux-alsa)
add_subdirectory(decklink/linux)
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
add_subdirectory(linux-capture)

View file

@ -0,0 +1,6 @@
CoreAudioAAC="مرمّز CoreAudio AAC"
Bitrate="معدّل البِت"
AllowHEAAC="السماح بـ HE-AAC"
OutputSamplerate="معدل عينة الإخراج"
UseInputSampleRate="استخدم مدخل معدل عينة (OBS) (قد تيم إدراج معدلات بت غير معتمدة)"

View file

@ -1,4 +1,6 @@
CoreAudioAAC="Codificador CoreAudio AAC"
Bitrate="Taxa de bits"
AllowHEAAC="Permet HE-AAC"
OutputSamplerate="Freqüència de mostreig de sortida"
UseInputSampleRate="Utilitzar les taxa de mostra de l'entrada d'OBS (pot mostrar taxes de bits no compatibles)"

View file

@ -0,0 +1,6 @@
CoreAudioAAC="CoreAudio AAC encoder"
Bitrate="Bitrate"
AllowHEAAC="Tillad HE-AAC"
OutputSamplerate="Output Sample Rate"
UseInputSampleRate="Brug Input (OBS) Sample Rate (kan vise ikke-understøttede bithastigheder)"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC kodeatzailea"
Bitrate="Bitneurria"
CoreAudioAAC="CoreAudio AAC kodetzailea"
Bitrate="Bit-tasa"
AllowHEAAC="Ahalbidetu HE-AAC"
OutputSamplerate="Irteera Lagin Neurria"
UseInputSampleRate="Erabili Sarrerako (OBS) Lagin Neurria (badaiteke sostengugabeko bitneurriak zerrendatea)"
OutputSamplerate="Irteera lagin-emaria"
UseInputSampleRate="Erabili sarrerako (OBS) lagin-emaria (sostengurik gabeko bit-tasak ager daitezke zerrendan)"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC kódoló"
Bitrate="Bitráta"
AllowHEAAC="HE-AAC Engedélyezése"
OutputSamplerate="Kimeneti Mintavételráta"
UseInputSampleRate="Beviteli (OBS) Minta Rátájának használata (kilistázza a nem támogatott bitrátákat)"
AllowHEAAC="HE-AAC engedélyezése"
OutputSamplerate="Kimeneti mintavételráta"
UseInputSampleRate="Beviteli (OBS) mintaráta használata (kilistázza a nem támogatott bitrátákat)"

View file

@ -2,5 +2,5 @@ CoreAudioAAC="CoreAudio AAC エンコーダ"
Bitrate="ビットレート"
AllowHEAAC="HE-AAC を許可"
OutputSamplerate="出力のサンプルレート"
UseInputSampleRate="(OBSで) 入力したサンプルレートを使用(サポートされていないビットレートをリストする可能性があります)"
UseInputSampleRate="(OBSで) 入力したサンプルレートを使用 (サポートされていないビットレートをリストする可能性があります)"

View file

@ -1,4 +1,6 @@
CoreAudioAAC="Codec de AAC CoreAudio"
Bitrate="Bitrate"
AllowHEAAC="Permitir HE-AAC"
OutputSamplerate="Taxa de Amostragem de Saída"
UseInputSampleRate="Utilize a Taxa de Amostrarem de Entrada (OBS) (pode mostrar bitrates não-suportados)"

View file

@ -1,6 +1,6 @@
CoreAudioAAC="CoreAudio AAC Encoder"
Bitrate="Rata biti / Bitrate"
CoreAudioAAC="Cofificator AAC CoreAudio"
Bitrate="Rată de biți"
AllowHEAAC="Permite HE-AAC"
OutputSamplerate="Mostra Ratei de Output"
UseInputSampleRate="Utilizeaza Mostra de Rata (OBS) ca Input (pot enumera bitrate-uri neacceptate)"
OutputSamplerate="Rată de eșantionare a ieșirii"
UseInputSampleRate="Folosește rata de eșantionare (OBS) ca intrare (poate lista rate de biți neacceptate)"

View file

@ -1,4 +1,6 @@
CoreAudioAAC="Кодировщик CoreAudio AAC"
Bitrate="Битрейт"
AllowHEAAC="Разрешить HE-AAC"
OutputSamplerate="Выходная Частота Дискретизации"
UseInputSampleRate="Использование Входной (OBS) Частоты Дискретизации (может иметь список не поддерживаемых битрейтом)"

View file

@ -1,4 +1,5 @@
CoreAudioAAC="CoreAudio AAC-kodare"
Bitrate="Bitrate"
Bitrate="Bithastighet"
AllowHEAAC="Tillåt HE-AAC"
OutputSamplerate="Samplingsfrekvens för utmatning"

View file

@ -0,0 +1,4 @@
Bitrate="பிட்விகிதம்"
AllowHEAAC="HE-AACஐ அனுமதி"
OutputSamplerate="வெளியீடுக்கான மாதிரி விகிதம்"

View file

@ -1,4 +1,5 @@
CoreAudioAAC="CoreAudio AAC kodlayıcısı"
Bitrate="Bit hızı"
AllowHEAAC="HE-ACC'ye izin ver"
OutputSamplerate=ıkış örnek hızı"

View file

@ -0,0 +1,6 @@
BlackmagicDevice="جهاز Blackmagic"
Device="الجهاز"
Mode="الوضع"
Buffering="استخدام التخزين المؤقت"
PixelFormat="صيغة البكسل"

View file

@ -2,4 +2,5 @@ BlackmagicDevice="Blackmagic enhed"
Device="Enhed"
Mode="Tilstand"
Buffering="Brug buffering"
PixelFormat="Pixel format"

View file

@ -1,4 +1,6 @@
BlackmagicDevice="Συσκευή Blackmagic"
Device="Συσκευή"
Mode="Λειτουργία"
Buffering="Χρήση ενδιάμεσης μνήμης"
PixelFormat="Μορφή pixel"

View file

@ -1,6 +1,6 @@
BlackmagicDevice="Blackmagic Gailua"
BlackmagicDevice="Blackmagic gailua"
Device="Gailua"
Mode="Modua"
Buffering="Erabili Bufferreratzea"
PixelFormat="Pixel Heuskarria"
PixelFormat="Pixel formatua"

View file

@ -0,0 +1,6 @@
BlackmagicDevice="התקן Blackmagic"
Device="התקן"
Mode="מצב"
Buffering="השתמש באוגר"
PixelFormat="תבנית פיקסלים"

View file

@ -1,6 +1,6 @@
BlackmagicDevice="BlackMagic Eszköz"
BlackmagicDevice="BlackMagic eszköz"
Device="Eszköz"
Mode="Mód"
Buffering="Pufferelés Használata"
PixelFormat="Képpont Formátum"
Buffering="Pufferelés használata"
PixelFormat="Képpont formátum"

View file

@ -2,4 +2,5 @@ BlackmagicDevice="Dispositivo Blackmagic"
Device="Dispositivo"
Mode="Modo"
Buffering="Utilizar Buffering"
PixelFormat="Formato de Pixel"

View file

@ -1,6 +1,6 @@
BlackmagicDevice="Dispozitiv Blackmagic"
Device="Dispozitiv"
Mode="Mod"
Buffering="Utilizaţi Tampon/Buffer"
PixelFormat="Format pixeli"
Buffering="Folosește buffering"
PixelFormat="Formatul pixelilor"

View file

@ -2,4 +2,5 @@ BlackmagicDevice="Blackmagicenhet"
Device="Enhet"
Mode="Läge"
Buffering="Använd buffert"
PixelFormat="Bildpunktsformat"

View file

@ -72,8 +72,13 @@ bool DeckLinkDevice::Init()
if (result != S_OK)
return true;
/* http://forum.blackmagicdesign.com/viewtopic.php?f=12&t=33967
* BMDDeckLinkTopologicalID for older devices
* BMDDeckLinkPersistentID for newer ones */
int64_t value;
if (attributes->GetInt(BMDDeckLinkPersistentID, &value) != S_OK)
if (attributes->GetInt(BMDDeckLinkPersistentID, &value) != S_OK &&
attributes->GetInt(BMDDeckLinkTopologicalID, &value) != S_OK)
return true;
std::ostringstream os;

View file

@ -1,3 +1,4 @@
ImageInput="الصورة"
File="ملف الصورة"
UnloadWhenNotShowing="إلغاء تحميل الصورة إذا لم تظهر"

View file

@ -1,4 +1,4 @@
ImageInput="Irudia"
File="Irudi Agiria"
UnloadWhenNotShowing="Desgertatu irudia erakusten ez denean"
File="Irudi-fitxategia"
UnloadWhenNotShowing="Ez kargatu irudia erakusten ez denean"

View file

@ -0,0 +1,4 @@
ImageInput="תמונה"
File="קובץ תמונה"
UnloadWhenNotShowing="הסר טעינת תמונה כאשר לא נראה"

View file

@ -1,4 +1,4 @@
ImageInput="Imagem"
File="Ficheiro de Imagem"
File="Ficheiro de imagem"
UnloadWhenNotShowing="Descarregar imagem quando não estiver em visualização"

View file

@ -1,4 +1,4 @@
ImageInput="Imagine"
File="Fișier Imagine"
UnloadWhenNotShowing="Descarca imaginea din memorie cand nu este utilizata"
File="Fișier imagine"
UnloadWhenNotShowing="Eliberează din memorie imaginea când nu este afișată"

View file

@ -1,4 +1,4 @@
ImageInput="Bild"
File="Bildfil"
UnloadWhenNotShowing="Ta bort bild från VRAM när den inte visas"
UnloadWhenNotShowing="Ta bort bild när den inte visas"

View file

@ -1,6 +1,7 @@
#include <obs-module.h>
#include <graphics/image-file.h>
#include <util/platform.h>
#include <util/dstr.h>
#include <sys/stat.h>
#define blog(log_level, format, ...) \
@ -30,7 +31,8 @@ struct image_source {
static time_t get_modified_timestamp(const char *filename)
{
struct stat stats;
stat(filename, &stats);
if (os_stat(filename, &stats) != 0)
return -1;
return stats.st_mtime;
}
@ -196,17 +198,29 @@ static const char *image_filter =
"JPEG Files (*.jpeg *.jpg);;"
"GIF Files (*.gif)";
static obs_properties_t *image_source_properties(void *unused)
static obs_properties_t *image_source_properties(void *data)
{
UNUSED_PARAMETER(unused);
struct image_source *s = data;
struct dstr path = {0};
obs_properties_t *props = obs_properties_create();
if (s && s->file && *s->file) {
const char *slash;
dstr_copy(&path, s->file);
dstr_replace(&path, "\\", "/");
slash = strrchr(path.array, '/');
if (slash)
dstr_resize(&path, slash - path.array + 1);
}
obs_properties_add_path(props,
"file", obs_module_text("File"),
OBS_PATH_FILE, image_filter, NULL);
OBS_PATH_FILE, image_filter, path.array);
obs_properties_add_bool(props,
"unload", obs_module_text("UnloadWhenNotShowing"));
dstr_free(&path);
return props;
}

View file

@ -0,0 +1,34 @@
project(linux-alsa)
if(DISABLE_ALSA)
message(STATUS "ALSA support disabled")
return()
endif()
find_package(ALSA)
if(NOT ALSA_FOUND AND ENABLE_ALSA)
message(FATAL_ERROR "ALSA not found but set as enabled")
elseif(NOT ALSA_FOUND)
message(STATUS "ALSA not found, disabling ALSA plugin")
return()
endif()
include_directories(
SYSTEM "${CMAKE_SOURCE_DIR}/libobs"
${ALSA_INCLUDE_DIR}
)
set(linux-alsa_SOURCES
linux-alsa.c
alsa-input.c
)
add_library(linux-alsa MODULE
${linux-alsa_SOURCES}
)
target_link_libraries(linux-alsa
libobs
${ALSA_LIBRARY}
)
install_obs_plugin_with_data(linux-alsa data)

View file

@ -0,0 +1,599 @@
/*
Copyright (C) 2015. Guillermo A. Amaral B. <g@maral.me>
Based on Pulse Input plugin by Leonhard Oelke.
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 <util/bmem.h>
#include <util/platform.h>
#include <util/threading.h>
#include <obs-module.h>
#include <alsa/asoundlib.h>
#include <alsa/pcm.h>
#include <pthread.h>
#define blog(level, msg, ...) blog(level, "alsa-input: " msg, ##__VA_ARGS__)
#define NSEC_PER_SEC 1000000000LL
#define NSEC_PER_MSEC 1000000L
#define STARTUP_TIMEOUT_NS (500 * NSEC_PER_MSEC)
#define REOPEN_TIMEOUT 1000UL
#define SHUTDOWN_ON_DEACTIVATE false
struct alsa_data {
obs_source_t *source;
#if SHUTDOWN_ON_DEACTIVATE
bool active;
#endif
/* user settings */
char *device;
/* pthread */
pthread_t listen_thread;
pthread_t reopen_thread;
os_event_t *abort_event;
volatile bool listen;
volatile bool reopen;
/* alsa */
snd_pcm_t *handle;
snd_pcm_format_t format;
snd_pcm_uframes_t period_size;
unsigned int channels;
unsigned int rate;
unsigned int sample_size;
uint8_t *buffer;
uint64_t first_ts;
};
static const char * alsa_get_name(void *);
static obs_properties_t * alsa_get_properties(void *);
static void * alsa_create(obs_data_t *, obs_source_t *);
static void alsa_destroy(void *);
static void alsa_activate(void *);
static void alsa_deactivate(void *);
static void alsa_get_defaults(obs_data_t *);
static void alsa_update(void *, obs_data_t *);
struct obs_source_info alsa_input_capture = {
.id = "alsa_input_capture",
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_AUDIO,
.create = alsa_create,
.destroy = alsa_destroy,
#if SHUTDOWN_ON_DEACTIVATE
.activate = alsa_activate,
.deactivate = alsa_deactivate,
#endif
.update = alsa_update,
.get_defaults = alsa_get_defaults,
.get_name = alsa_get_name,
.get_properties = alsa_get_properties
};
static bool _alsa_try_open(struct alsa_data *);
static bool _alsa_open(struct alsa_data *);
static void _alsa_close(struct alsa_data *);
static bool _alsa_configure(struct alsa_data *);
static void _alsa_start_reopen(struct alsa_data *);
static void _alsa_stop_reopen(struct alsa_data *);
static void * _alsa_listen(void *);
static void * _alsa_reopen(void *);
static enum audio_format _alsa_to_obs_audio_format(snd_pcm_format_t);
static enum speaker_layout _alsa_channels_to_obs_speakers(unsigned int);
/*****************************************************************************/
void * alsa_create(obs_data_t *settings, obs_source_t *source)
{
struct alsa_data *data = bzalloc(sizeof(struct alsa_data));
data->source = source;
#if SHUTDOWN_ON_DEACTIVATE
data->active = false;
#endif
data->buffer = NULL;
data->device = NULL;
data->first_ts = 0;
data->handle = NULL;
data->listen = false;
data->reopen = false;
data->listen_thread = 0;
data->reopen_thread = 0;
data->device = bstrdup(obs_data_get_string(settings, "device_id"));
data->rate = obs_data_get_int(settings, "rate");
if (os_event_init(&data->abort_event, OS_EVENT_TYPE_MANUAL) != 0) {
blog(LOG_ERROR, "Abort event creation failed!");
goto cleanup;
}
#if !SHUTDOWN_ON_DEACTIVATE
_alsa_try_open(data);
#endif
return data;
cleanup:
if (data->device)
bfree(data->device);
bfree(data);
return NULL;
}
void alsa_destroy(void *vptr)
{
struct alsa_data *data = vptr;
if (data->handle)
_alsa_close(data);
os_event_destroy(data->abort_event);
bfree(data->device);
bfree(data);
}
#if SHUTDOWN_ON_DEACTIVATE
void alsa_activate(void *vptr)
{
struct alsa_data *data = vptr;
data->active = true;
_alsa_try_open(data);
}
void alsa_deactivate(void *vptr)
{
struct alsa_data *data = vptr;
_alsa_stop_reopen(data);
_alsa_close(data);
data->active = false;
}
#endif
void alsa_update(void *vptr, obs_data_t *settings)
{
struct alsa_data *data = vptr;
const char *device;
unsigned int rate;
bool reset = false;
device = obs_data_get_string(settings, "device_id");
if (strcmp(data->device, device) != 0) {
bfree(data->device);
data->device = bstrdup(device);
reset = true;
}
rate = obs_data_get_int(settings, "rate");
if (data->rate != rate) {
data->rate = rate;
reset = true;
}
#if SHUTDOWN_ON_DEACTIVATE
if (reset && data->handle)
_alsa_close(data);
if (data->active && !data->handle)
_alsa_try_open(data);
#else
if (reset) {
if (data->handle)
_alsa_close(data);
_alsa_try_open(data);
}
#endif
}
const char * alsa_get_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("AlsaInput");
}
void alsa_get_defaults(obs_data_t *settings)
{
obs_data_set_default_string(settings, "device_id", "default");
obs_data_set_default_int(settings, "rate", 44100);
}
obs_properties_t * alsa_get_properties(void *unused)
{
void **hints;
void **hint;
char *name = NULL;
char *descr = NULL;
char *io = NULL;
char *descr_i;
obs_properties_t *props;
obs_property_t *devices;
obs_property_t *rate;
UNUSED_PARAMETER(unused);
props = obs_properties_create();
devices = obs_properties_add_list(props, "device_id",
obs_module_text("Device"), OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_STRING);
obs_property_list_add_string(devices, "Default", "default");
rate = obs_properties_add_list(props, "rate",
obs_module_text("Rate"), OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_INT);
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);
if (snd_device_name_hint(-1, "pcm", &hints) < 0)
return props;
hint = hints;
while (*hint != NULL) {
/* check if we're dealing with an Input */
io = snd_device_name_get_hint(*hint, "IOID");
if (io != NULL && strcmp(io, "Input") != 0)
goto next;
name = snd_device_name_get_hint(*hint, "NAME");
if (name == NULL || strstr(name, "front:") == NULL)
goto next;
descr = snd_device_name_get_hint(*hint, "DESC");
if (!descr)
goto next;
descr_i = descr;
while (*descr_i) {
if (*descr_i == '\n') {
*descr_i = '\0';
break;
}
else ++descr_i;
}
obs_property_list_add_string(devices, descr, name);
next:
if (name != NULL)
free(name), name = NULL;
if (descr != NULL)
free(descr), descr = NULL;
if (io != NULL)
free(io), io = NULL;
++hint;
}
snd_device_name_free_hint(hints);
return props;
}
/*****************************************************************************/
bool _alsa_try_open(struct alsa_data *data)
{
_alsa_stop_reopen(data);
if (_alsa_open(data))
return true;
_alsa_start_reopen(data);
return false;
}
bool _alsa_open(struct alsa_data *data)
{
pthread_attr_t attr;
int err;
err = snd_pcm_open(&data->handle, data->device,
SND_PCM_STREAM_CAPTURE, 0);
if (err < 0) {
blog(LOG_ERROR, "Failed to open '%s': %s",
data->device, snd_strerror(err));
return false;
}
if (!_alsa_configure(data))
goto cleanup;
if (snd_pcm_state(data->handle) != SND_PCM_STATE_PREPARED) {
blog(LOG_ERROR, "Device not prepared: '%s'",
data->device);
goto cleanup;
}
/* start listening */
err = snd_pcm_start(data->handle);
if (err < 0) {
blog(LOG_ERROR, "Failed to start '%s': %s",
data->device, snd_strerror(err));
goto cleanup;
}
/* create capture thread */
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
err = pthread_create(&data->listen_thread, &attr, _alsa_listen, data);
if (err) {
pthread_attr_destroy(&attr);
blog(LOG_ERROR,
"Failed to create capture thread for device '%s'.",
data->device);
goto cleanup;
}
pthread_attr_destroy(&attr);
return true;
cleanup:
_alsa_close(data);
return false;
}
void _alsa_close(struct alsa_data *data)
{
if (data->listen_thread) {
os_atomic_set_bool(&data->listen, false);
pthread_join(data->listen_thread, NULL);
data->listen_thread = 0;
}
if (data->handle) {
snd_pcm_drop(data->handle);
snd_pcm_close(data->handle), data->handle = NULL;
}
if (data->buffer)
bfree(data->buffer), data->buffer = NULL;
}
bool _alsa_configure(struct alsa_data *data)
{
snd_pcm_hw_params_t *hwparams;
int err;
int dir;
snd_pcm_hw_params_alloca(&hwparams);
err = snd_pcm_hw_params_any(data->handle, hwparams);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_any failed: %s",
snd_strerror(err));
return false;
}
err = snd_pcm_hw_params_set_access(data->handle, hwparams,
SND_PCM_ACCESS_RW_INTERLEAVED);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_set_access failed: %s",
snd_strerror(err));
return false;
}
data->format = SND_PCM_FORMAT_S16;
err = snd_pcm_hw_params_set_format(data->handle, hwparams,
data->format);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_set_format failed: %s",
snd_strerror(err));
return false;
}
err = snd_pcm_hw_params_set_rate_near(data->handle, hwparams,
&data->rate, 0);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_set_rate_near failed: %s",
snd_strerror(err));
return false;
}
blog(LOG_INFO, "PCM '%s' rate set to %d", data->device, data->rate);
err = snd_pcm_hw_params_get_channels(hwparams, &data->channels);
if (err < 0)
data->channels = 2;
err = snd_pcm_hw_params_set_channels_near(data->handle, hwparams,
&data->channels);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_set_channels_near failed: %s",
snd_strerror(err));
return false;
}
blog(LOG_INFO, "PCM '%s' channels set to %d",
data->device, data->channels);
err = snd_pcm_hw_params(data->handle, hwparams);
if (err < 0) {
blog(LOG_ERROR, "snd_pcm_hw_params failed: %s",
snd_strerror(err));
return false;
}
err = snd_pcm_hw_params_get_period_size(hwparams, &data->period_size,
&dir);
if (err < 0) {
blog(LOG_ERROR,
"snd_pcm_hw_params_get_period_size failed: %s",
snd_strerror(err));
return false;
}
data->sample_size = (data->channels
* snd_pcm_format_physical_width(data->format)) / 8;
if (data->buffer)
bfree(data->buffer);
data->buffer = bzalloc(data->period_size * data->sample_size);
return true;
}
void _alsa_start_reopen(struct alsa_data *data)
{
pthread_attr_t attr;
int err;
if (os_atomic_load_bool(&data->reopen))
return;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
err = pthread_create(&data->reopen_thread, &attr, _alsa_reopen, data);
if (err) {
blog(LOG_ERROR,
"Failed to create reopen thread for device '%s'.",
data->device);
}
pthread_attr_destroy(&attr);
}
void _alsa_stop_reopen(struct alsa_data *data)
{
if (os_atomic_load_bool(&data->reopen))
os_event_signal(data->abort_event);
if (data->reopen_thread) {
pthread_join(data->reopen_thread, NULL);
data->reopen_thread = 0;
}
os_event_reset(data->abort_event);
}
void * _alsa_listen(void *attr)
{
struct alsa_data *data = attr;
struct obs_source_audio out;
blog(LOG_DEBUG, "Capture thread started.");
out.data[0] = data->buffer;
out.format = _alsa_to_obs_audio_format(data->format);
out.speakers = _alsa_channels_to_obs_speakers(data->channels);
out.samples_per_sec = data->rate;
os_atomic_set_bool(&data->listen, true);
do {
snd_pcm_sframes_t frames = snd_pcm_readi(data->handle,
data->buffer, data->period_size);
if (!os_atomic_load_bool(&data->listen))
break;
if (frames <= 0) {
frames = snd_pcm_recover(data->handle, frames, 0);
if (frames <= 0) {
snd_pcm_wait(data->handle, 100);
continue;
}
}
out.frames = frames;
out.timestamp = os_gettime_ns()
- ((frames * NSEC_PER_SEC) / data->rate);
if (!data->first_ts)
data->first_ts = out.timestamp + STARTUP_TIMEOUT_NS;
if (out.timestamp > data->first_ts)
obs_source_output_audio(data->source, &out);
} while (os_atomic_load_bool(&data->listen));
blog(LOG_DEBUG, "Capture thread is about to exit.");
pthread_exit(NULL);
return NULL;
}
void * _alsa_reopen(void *attr)
{
struct alsa_data *data = attr;
unsigned long timeout = REOPEN_TIMEOUT;
blog(LOG_DEBUG, "Reopen thread started.");
os_atomic_set_bool(&data->reopen, true);
while (os_event_timedwait(data->abort_event, timeout) == ETIMEDOUT) {
if (_alsa_open(data))
break;
if (timeout < (REOPEN_TIMEOUT * 5))
timeout += REOPEN_TIMEOUT;
}
os_atomic_set_bool(&data->reopen, false);
blog(LOG_DEBUG, "Reopen thread is about to exit.");
pthread_exit(NULL);
return NULL;
}
enum audio_format _alsa_to_obs_audio_format(snd_pcm_format_t format)
{
switch (format) {
case SND_PCM_FORMAT_U8: return AUDIO_FORMAT_U8BIT;
case SND_PCM_FORMAT_S16_LE: return AUDIO_FORMAT_16BIT;
case SND_PCM_FORMAT_S32_LE: return AUDIO_FORMAT_32BIT;
case SND_PCM_FORMAT_FLOAT_LE: return AUDIO_FORMAT_FLOAT;
default: break;
}
return AUDIO_FORMAT_UNKNOWN;
}
enum speaker_layout _alsa_channels_to_obs_speakers(unsigned int channels)
{
switch(channels) {
case 1: return SPEAKERS_MONO;
case 2: return SPEAKERS_STEREO;
case 3: return SPEAKERS_2POINT1;
case 4: return SPEAKERS_SURROUND;
case 5: return SPEAKERS_4POINT1;
case 6: return SPEAKERS_5POINT1;
case 8: return SPEAKERS_7POINT1;
}
return SPEAKERS_UNKNOWN;
}

View file

@ -0,0 +1,3 @@
AlsaInput="جهاز التقاط الصوت (ALSA)"
Device="الجهاز"

View file

@ -0,0 +1,3 @@
AlsaInput="Dispositiu de captura d'àudio (ALSA)"
Device="Dispositiu"

View file

@ -0,0 +1,3 @@
AlsaInput="Zaznamenávací zařízení zvuku (ALSA)"
Device="Zařízení"

View file

@ -0,0 +1,3 @@
AlsaInput="Lyd-optagelsesenhed (ALSA)"
Device="Enhed"

View file

@ -0,0 +1,3 @@
AlsaInput="Audioaufnahmegerät (ALSA)"
Device="Gerät"

View file

@ -0,0 +1,2 @@
AlsaInput="Audio Capture Device (ALSA)"
Device="Device"

View file

@ -0,0 +1,3 @@
AlsaInput="Dispositivo de captura de audio (ALSA)"
Device="Dispositivo"

View file

@ -0,0 +1,3 @@
AlsaInput="Audio kapturako gailua (ALSA)"
Device="Gailua"

View file

@ -0,0 +1,3 @@
AlsaInput="Äänenkaappauslaite (ALSA)"
Device="Laite"

View file

@ -0,0 +1,3 @@
AlsaInput="Périphérique de capture audio (ALSA)"
Device="Périphérique"

View file

@ -0,0 +1,3 @@
AlsaInput="Dispositivo de captura de audio (ALSA)"
Device="Dispositivo"

View file

@ -0,0 +1,3 @@
AlsaInput="Ulazni zvučni uređaj (ALSA)"
Device="Uređaj"

View file

@ -0,0 +1,3 @@
AlsaInput="Hangrögzítő eszköz (ALSA)"
Device="Eszköz"

View file

@ -0,0 +1,3 @@
AlsaInput="音声キャプチャデバイス (ALSA)"
Device="デバイス"

View file

@ -0,0 +1,3 @@
AlsaInput="오디오 캡쳐 장치 (ALSA)"
Device="장치"

View file

@ -0,0 +1,3 @@
AlsaInput="Audio-opnameapparaat (ALSA)"
Device="Apparaat"

View file

@ -0,0 +1,3 @@
AlsaInput="Urządzenie przechwytujące dźwięk (ALSA)"
Device="Urządzenie"

View file

@ -0,0 +1,3 @@
AlsaInput="Dispositivo de Captura de Áudio (ALSA)"
Device="Dispositivo"

View file

@ -0,0 +1,3 @@
AlsaInput="Dispozitiv de captură audio (ALSA)"
Device="Dispozitiv"

View file

@ -0,0 +1,3 @@
AlsaInput="Устройство захвата аудио (ALSA)"
Device="Устройство"

View file

@ -0,0 +1,3 @@
AlsaInput="Ulazni zvučni uređaj (ALSA)"
Device="Uređaj"

View file

@ -0,0 +1,3 @@
AlsaInput="Улазни звучни уређај (ALSA)"
Device="Уређај"

View file

@ -0,0 +1,3 @@
AlsaInput="Ljudinspelningsenhet (ALSA)"
Device="Enhet"

View file

@ -0,0 +1,3 @@
AlsaInput="Ses yakalama cihazı (ALSA)"
Device="Cihaz"

View file

@ -0,0 +1,3 @@
AlsaInput="音频捕获设备 (ALSA)"
Device="设备"

View file

@ -0,0 +1,3 @@
AlsaInput="音訊擷取裝置ALSA"
Device="裝置"

View file

@ -0,0 +1,29 @@
/*
Copyright (C) 2015. Guillermo A. Amaral B. <g@maral.me>
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 <obs-module.h>
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("linux-alsa", "en-US")
extern struct obs_source_info alsa_input_capture;
bool obs_module_load(void)
{
obs_register_source(&alsa_input_capture);
return true;
}

View file

@ -1,6 +1,8 @@
X11SharedMemoryScreenInput="التقاط الشاشة (XSHM)"
Screen="الشاشة"
CaptureCursor="مؤشر الالتقاط"
AdvancedSettings="إعدادات متقدمة"
XServer="X Server"
XCCapture="التقاط النافذة (Xcomposite)"
Window="نافذة"
CropTop="الاقتطاع من الأعلى (بكسل)"

View file

@ -12,4 +12,5 @@ CropBottom="Escapçament inferior (en píxels)"
SwapRedBlue="Intercanvia els colors vermell i blau"
LockX="Bloca el servidor X quan s'estigui capturant"
IncludeXBorder="Inclou-hi la vora X"
ExcludeAlpha="Usar format de textura sense alpha (solució de Mesa)"

View file

@ -1,6 +1,6 @@
X11SharedMemoryScreenInput="Záznam obrazovky (XSHM)"
Screen="Obrazovka"
CaptureCursor="Snímat kurzor"
CaptureCursor="Zaznamenávat kurzor"
AdvancedSettings="Rozšířená nastavení"
XServer="Server X"
XCCapture="Záznam okna (Xcomposite)"
@ -12,4 +12,5 @@ CropBottom="Oříznout spodek (px)"
SwapRedBlue="Prohodit červenou a modrou"
LockX="Zamknout server X při záznamu"
IncludeXBorder="Zahrnout hranice X"
ExcludeAlpha="Použít formát textury bez alpha kanálu (Mesa workaround)"

View file

@ -1,15 +1,16 @@
X11SharedMemoryScreenInput="Indfang Skærm (XSHM)"
X11SharedMemoryScreenInput="Indfang skærm (XSHM)"
Screen="Skærm"
CaptureCursor="Indfang markøren"
AdvancedSettings="Avancerede indstillinger"
XServer="X Server"
XCCapture="Indfang Vindue (Xcomposite)"
XCCapture="Indfang vindue (Xcomposite)"
Window="Vindue"
CropTop="Beskær Top (pixels)"
CropLeft="Beskær Venstre (pixels)"
CropRight="Beskær Højre (pixels)"
CropTop="Beskær top (pixels)"
CropLeft="Beskær venstre (pixels)"
CropRight="Beskær højre (pixels)"
CropBottom="Beskær bund (pixels)"
SwapRedBlue="Swap rød og blå"
LockX="Lås X server ved optagelse"
IncludeXBorder="Inkluder X kant"
ExcludeAlpha="Brug alpha-mindre tekstur format (Mesa løsning)"

View file

@ -12,4 +12,5 @@ CropBottom="Unten abschneiden (Pixel)"
SwapRedBlue="Rot und Blau tauschen"
LockX="X Server sperren während der Aufnahme"
IncludeXBorder="X Rahmen anzeigen"
ExcludeAlpha="Verwenden von alphalosem Texturformat (Mesa Problemumgehung)"

View file

@ -12,3 +12,4 @@ CropBottom="Crop Bottom (pixels)"
SwapRedBlue="Swap red and blue"
LockX="Lock X server when capturing"
IncludeXBorder="Include X Border"
ExcludeAlpha="Use alpha-less texture format (Mesa workaround)"

View file

@ -12,4 +12,5 @@ CropBottom="Recortar abajo (píxeles)"
SwapRedBlue="Intercambiar rojo y azúl"
LockX="Fijar X server mientras se captura"
IncludeXBorder="Incluir borde de ventana X"
ExcludeAlpha="Usar formato de textura sin alpha (Arreglo para Mesa)"

View file

@ -1,15 +1,16 @@
X11SharedMemoryScreenInput="Ikusleiho Harpena (XSHM)"
Screen="Ikusleihoa"
CaptureCursor="Hartu Kurtsorea"
AdvancedSettings="Ezarpen Aurreratuak"
X11SharedMemoryScreenInput="Pantaila-kaptura (XSHM)"
Screen="Pantaila"
CaptureCursor="Kapturatu kurtsorea"
AdvancedSettings="Ezarpen aurreratuak"
XServer="X Zerbitzaria"
XCCapture="Leiho Harpena (Xcomposite)"
XCCapture="Leiho-kaptura (Xcomposite)"
Window="Leihoa"
CropTop="Moztu Goitik (pixel)"
CropLeft="Moztu Ezkerretik (pixel)"
CropRight="Moztu Eskuinetik (pixel)"
CropBottom="Moztu Behetik (pixel)"
CropTop="Moztu goitik (pixel)"
CropLeft="Moztu ezkerretik (pixel)"
CropRight="Moztu eskuinetik (pixel)"
CropBottom="Moztu behetik (pixel)"
SwapRedBlue="Aldatu gorria eta urdina"
LockX="Blokeatu X zerbitzaria harpenean"
IncludeXBorder="Barneratu X Hertza"
LockX="Blokeatu X zerbitzaria kapturatzean"
IncludeXBorder="Sartu X ertza"
ExcludeAlpha="Alfarik gabeko testura formatua (Mesarako konponbidea)"

View file

@ -12,4 +12,5 @@ CropBottom="Rajaa alhaalta (pikselit)"
SwapRedBlue="Vaihda punainen ja sininen"
LockX="Lukitse X Server kaappauksen aikana"
IncludeXBorder="Sisällytä X-reunus"
ExcludeAlpha="Käytä tekstuuriformaattia ilman alpha-kanavaa (Mesa-yhteensopiva)"

View file

@ -1,15 +1,16 @@
X11SharedMemoryScreenInput="Capture d'écran (XSHM)"
Screen="Écran"
CaptureCursor="Enregistrer le Curseur"
CaptureCursor="Capturer le curseur"
AdvancedSettings="Paramètres avancés"
XServer="Serveur X"
XCCapture="Capture de la fenêtre (Xcomposite)"
Window="Fenêtre"
CropTop="Rogner en Haut (pixels)"
CropLeft="Rogner à Gauche (pixels)"
CropRight="Rogner à Droite (pixels)"
CropBottom="Rogner en Bas (pixels)"
CropTop="Rogner en haut (pixels)"
CropLeft="Rogner à gauche (pixels)"
CropRight="Rogner à droite (pixels)"
CropBottom="Rogner en bas (pixels)"
SwapRedBlue="Intervertir le rouge et le bleu"
LockX="Verrouiller le serveur X lors de la capture"
IncludeXBorder="Inclure la bordure de X"
ExcludeAlpha="Utiliser un format de texture sans alpha (contournement pour Mesa)"

View file

@ -0,0 +1,15 @@
X11SharedMemoryScreenInput="לכידת מסך (XSHM)"
Screen="מסך"
CaptureCursor="לכוד סמן"
AdvancedSettings="הגדרות מתקדמות"
XServer="שרת X"
XCCapture="לכידת חלון (Xcomposite)"
Window="חלון"
CropTop="חיתוך עליון (פיקסלים)"
CropLeft="חיתוך שמאל (פיקסלים)"
CropRight="חיתוך ימין (פיקסלים)"
CropBottom="חיתוך תחתון (פיקסלים)"
SwapRedBlue="החלף אדום וכחול"
LockX="נעל שרת X בעת לכידה"
IncludeXBorder="כלול קצה שרת X"

View file

@ -12,4 +12,5 @@ CropBottom="Odseci odozdo (pikseli)"
SwapRedBlue="Zameni crvenu i plavu"
LockX="Zaključaj X server u toku snimanja"
IncludeXBorder="Uključujući i X okvir"
ExcludeAlpha="Koristi neprovidni format teksture (zaobilaženje Mesa problema)"

View file

@ -1,15 +1,16 @@
X11SharedMemoryScreenInput="Képernyő Felvétel (XSHM)"
X11SharedMemoryScreenInput="Képernyő felvétel (XSHM)"
Screen="Képernyő"
CaptureCursor="Kurzor Rögztítése"
AdvancedSettings="Speciális Beállítások"
CaptureCursor="Kurzor felvétele"
AdvancedSettings="Speciális beállítások"
XServer="X Szerver"
XCCapture="Ablak Felvétel (Xcomposite)"
XCCapture="Ablak felvétel (Xcomposite)"
Window="Ablak"
CropTop="Felső Levágása (pixelek)"
CropLeft="Bal Levágása (pixelek)"
CropRight="Jobb Levágása (pixelek)"
CropBottom="Alsó Levágása (pixelek)"
SwapRedBlue="Piros és Kék Cseréje"
LockX="X Szerver Zárolása Rögzítéskor"
CropTop="Felső levágása (pixelek)"
CropLeft="Bal levágása (pixelek)"
CropRight="Jobb levágása (pixelek)"
CropBottom="Alsó levágása (pixelek)"
SwapRedBlue="Piros és kék cseréje"
LockX="X Szerver zárolása rögzítéskor"
IncludeXBorder="X Kerettel"
ExcludeAlpha="Alfa-mentesebb textúra formátum használata (Mesa áthidalás)"

View file

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

View file

@ -12,4 +12,5 @@ CropBottom="아래 자르기 (픽셀)"
SwapRedBlue="적청 교환"
LockX="캡쳐 시 X 서버를 잠금"
IncludeXBorder="X 윈도우 경계를 포함"
ExcludeAlpha="알파가 없는 텍스쳐 형식 사용 (Mesa 방법)"

View file

@ -1,4 +1,4 @@
X11SharedMemoryScreenInput="Schermcapture (XSHM)"
X11SharedMemoryScreenInput="Schermopname (XSHM)"
Screen="Scherm"
CaptureCursor="Cursor Opnemen"
AdvancedSettings="Geavanceerde instellingen"
@ -12,4 +12,5 @@ CropBottom="Onder Bijsnijden (pixels)"
SwapRedBlue="Rood en blauw omwisselen"
LockX="X server vergrendelen tijdens het opnemen"
IncludeXBorder="Inclusief X-schermranden"
ExcludeAlpha="Gebruik textuurformaat zonder alpha (alternatief voor Mesa)"

View file

@ -12,4 +12,5 @@ CropBottom="Przytnij od spodu (piksele)"
SwapRedBlue="Zamień czerwony i niebieski"
LockX="Zablokuj serwer X podczas przechwytywania"
IncludeXBorder="Dołącz ramkę okna"
ExcludeAlpha="Użyj tekstur bez kanału alpha (obejście problemu Mesa)"

View file

@ -12,4 +12,5 @@ CropBottom="Cortar em Baixo (Pixels)"
SwapRedBlue="Trocar Vermelho com Azul"
LockX="Bloquear servidor X durante a captura"
IncludeXBorder="Incluir X Borda"
ExcludeAlpha="Utilizar formato de texture sem Alpha (solução para Mesa)"

View file

@ -1,15 +1,15 @@
X11SharedMemoryScreenInput="Captura de tela (XSHM)"
Screen="Tela"
CaptureCursor="Capturar o Cursor"
X11SharedMemoryScreenInput="Captura de ecrã (XSHM)"
Screen="Ecrã"
CaptureCursor="Capturar cursor"
AdvancedSettings="Definições avançadas"
XServer="X Server"
XCCapture="Captura de janela (Xcomposite)"
Window="Janela"
CropTop="Cortar em Cima (Pixels)"
CropLeft="Cortar à Esquerda (Pixels)"
CropRight="Cortar à direita (Pixels)"
CropBottom="Cortar em Baixo (Pixels)"
CropTop="Cortar em cima (píxeis)"
CropLeft="Cortar à esquerda (píxeis)"
CropRight="Cortar à direita (píxeis)"
CropBottom="Cortar em baixo (píxeis)"
SwapRedBlue="Trocar vermelho e azul"
LockX="Bloquear servidor X durante a captura"
LockX="Bloquear X Server durante a captura"
IncludeXBorder="Incluir X Border"

View file

@ -1,15 +1,16 @@
X11SharedMemoryScreenInput="Captură de ecran (XSHM)"
Screen="Ecran"
CaptureCursor="Capturează cursorul"
AdvancedSettings="Setări Avansate"
AdvancedSettings="Setări avansate"
XServer="X Server"
XCCapture="Captură Fereastră (Xcomposite)"
XCCapture="Captură de fereastră (Xcomposite)"
Window="Fereastră"
CropTop="Taie Sus (pixeli)"
CropLeft="Taie stânga (pixeli)"
CropRight="Taie Dreapta (pixeli)"
CropBottom="Taie jos (pixeli)"
SwapRedBlue="Schimbă Roșu cu Albastru"
LockX="Blochează server X atunci când se capturează"
CropTop="Trunchiază partea superioară (pixeli)"
CropLeft="Trunchiază stânga (pixeli)"
CropRight="Trunchiază dreapta (pixeli)"
CropBottom="Trunchiază partea inferioară (pixeli)"
SwapRedBlue="Schimbă roșu cu albastru"
LockX="Blochează serverul X atunci când se capturează"
IncludeXBorder="Include marginea cu X"
ExcludeAlpha="Folosește formatul de texturi fără alpha (soluție de evitare Mesa)"

View file

@ -12,4 +12,5 @@ CropBottom="Обрезать снизу (пикселей)"
SwapRedBlue="Поменять местами красный и синий"
LockX="Блокировать X-сервер при захвате"
IncludeXBorder="Включить захват границы"
ExcludeAlpha="Использовать формат текстур без прозрачности (обходной путь для Mesa)"

View file

@ -12,4 +12,5 @@ CropBottom="Одсеци одоздо (пиксели)"
SwapRedBlue="Замени црвену и плаву"
LockX="Закључај X сервер у току снимања"
IncludeXBorder="Uključujući i X okvir"
ExcludeAlpha="Koristi neprovidni format teksture (zaobilaženje Mesa problema)"

View file

@ -12,4 +12,5 @@ CropBottom="Odseci odozdo (pikseli)"
SwapRedBlue="Zameni crvenu i plavu"
LockX="Zaključaj X server u toku snimanja"
IncludeXBorder="Укључујући и X оквир"
ExcludeAlpha="Користи непровидни формат текстуре (заобилажење Меса проблема)"

View file

@ -12,4 +12,5 @@ CropBottom="裁剪下部(像素)"
SwapRedBlue="交换红色和蓝色"
LockX="当捕获时锁定X server"
IncludeXBorder="包括 X 边框"
ExcludeAlpha="使用阿尔法少纹理格式 (Mesa 变通办法)"

View file

@ -86,6 +86,9 @@ obs_properties_t *XCompcapMain::properties()
obs_properties_add_bool(props, "include_border",
obs_module_text("IncludeXBorder"));
obs_properties_add_bool(props, "exclude_alpha",
obs_module_text("ExcludeAlpha"));
return props;
}
@ -100,6 +103,7 @@ void XCompcapMain::defaults(obs_data_t *settings)
obs_data_set_default_bool(settings, "lock_x", false);
obs_data_set_default_bool(settings, "show_cursor", true);
obs_data_set_default_bool(settings, "include_border", false);
obs_data_set_default_bool(settings, "exclude_alpha", false);
}
@ -142,6 +146,7 @@ struct XCompcapMain_private
bool swapRedBlue;
bool lockX;
bool include_border;
bool exclude_alpha;
uint32_t width;
uint32_t height;
@ -287,6 +292,7 @@ void XCompcapMain::updateSettings(obs_data_t *settings)
p->swapRedBlue = obs_data_get_bool(settings, "swap_redblue");
p->show_cursor = obs_data_get_bool(settings, "show_cursor");
p->include_border = obs_data_get_bool(settings, "include_border");
p->exclude_alpha = obs_data_get_bool(settings, "exclude_alpha");
} else {
p->win = prevWin;
}
@ -323,6 +329,10 @@ void XCompcapMain::updateSettings(obs_data_t *settings)
gs_color_format cf = GS_RGBA;
if (p->exclude_alpha) {
cf = GS_BGRX;
}
p->border = attr.border_width;
if (p->include_border) {

View file

@ -0,0 +1,3 @@
StartJACKServer="بدء خادم JACK"
Channels="عدد القنوات"

View file

@ -1,4 +1,4 @@
StartJACKServer="Hasi JACK Zerbitzaria"
Channels="Bide Zenbatekoa"
JACKInput="JACK Sarrera Bezeroa"
StartJACKServer="Abiatu JACK zerbitzaria"
Channels="Kanal kopurua"
JACKInput="JACK sarrera bezeroa"

View file

@ -0,0 +1,4 @@
StartJACKServer="התחל שרת JACK"
Channels="מספר ערוצים"
JACKInput="לקוח קלט JACK"

View file

@ -1,4 +1,4 @@
StartJACKServer="JACK Kiszolgáló indítása"
StartJACKServer="JACK kiszolgáló indítása"
Channels="Csatornák száma"
JACKInput="JACK Csatlakozó Ügyfél"
JACKInput="JACK csatlakozó ügyfél"

View file

@ -1,4 +1,4 @@
StartJACKServer="JACKサーバーを開始"
StartJACKServer="JACK サーバーを開始"
Channels="チャンネル数"
JACKInput="JACK入力クライアント"
JACKInput="JACK 入力クライアント"

View file

@ -1,4 +1,4 @@
StartJACKServer="Porneste Serverul JACK"
Channels="Numar de canale"
JACKInput="Clientul de input JACK"
StartJACKServer="Pornește serverul JACK"
Channels="Număr de canale"
JACKInput="Client de intrare JACK"

View file

@ -1,4 +1,4 @@
PulseInput="Indfang Lyd ind (PulseAudio)"
PulseOutput="Indfang Lyd Ud (PulseAudio)"
PulseInput="Indfang lyd ind (PulseAudio)"
PulseOutput="Indfang lyd Ud (PulseAudio)"
Device="Enhed"

View file

@ -1,4 +1,4 @@
PulseInput="Audio Sarrera Harpena (PulseAudio)"
PulseOutput="Audio Irteera Harpena (PulseAudio)"
PulseInput="Audioa kapturatzeko gailua (PulseAudio)"
PulseOutput="Audio irteeraren kaptura (PulseAudio)"
Device="Gailua"

View file

@ -1,4 +1,4 @@
PulseInput="Capture d'Audio Entrant (PulseAudio)"
PulseOutput="Capture d'Audio Sortant (PulseAudio)"
PulseInput="Capture de l'audio entrant (PulseAudio)"
PulseOutput="Capture de l'audio sortant (PulseAudio)"
Device="Périphérique"

View file

@ -0,0 +1,4 @@
PulseInput="לכידת קלט שמע (PulseAudio)"
PulseOutput="לכידת פלט שמע (PulseAudio)"
Device="התקן"

View file

@ -1,4 +1,4 @@
PulseInput="Bemeneti Hangrögzítő (PulseAudio)"
PulseOutput="Kimeneti Hangrögzítő (PulseAudio)"
PulseInput="Bemeneti hangrögzítő (PulseAudio)"
PulseOutput="Kimeneti hangrögzítő (PulseAudio)"
Device="Eszköz"

View file

@ -1,4 +1,4 @@
PulseInput="Audioinvoer-capture (PulseAudio)"
PulseOutput="Audiouitvoer-capture (PulseAudio)"
PulseInput="Audioinvoer-opname (PulseAudio)"
PulseOutput="Audiouitvoer-opname (PulseAudio)"
Device="Apparaat"

View file

@ -1,4 +1,4 @@
PulseInput="Captură Intrare Audio (PulseAudio)"
PulseOutput="Captură Ieşire Audio (PulseAudio)"
PulseInput="Captură de intrare audio (PulseAudio)"
PulseOutput="Captură de ieșire audio (PulseAudio)"
Device="Dispozitiv"

View file

@ -1,4 +1,4 @@
PulseInput="音频输入捕获(脉冲音频)"
PulseOutput="音频输出捕获(脉冲音频)"
PulseInput="音频输入捕获(PulseAudio)"
PulseOutput="音频输出捕获(PulseAudio)"
Device="设备"

View file

@ -1,11 +1,11 @@
V4L2Input="Zařízení pro záznam (V4L2)"
V4L2Input="Zaznamenávací zařízení obrazu (V4L2)"
Device="Zařízení"
Input="Vstup"
VideoFormat="Formát videa"
VideoStandard="Standard videa"
DVTiming="Časování DV"
Resolution="Rozlišení"
FrameRate="Frekvence snímkování"
FrameRate="Snímkovací frekvence"
LeaveUnchanged="Ponechat nezměněné"
UseBuffering="Použít vyrovnávací paměť"

View file

@ -1,11 +1,11 @@
V4L2Input="Bideo Harpen Gailua (V4L2)"
V4L2Input="Bideoa kapturatzeko gailua (V4L2)"
Device="Gailua"
Input="Sarrera"
VideoFormat="Bideo Heuskarria"
VideoFormat="Bideo formatua"
VideoStandard="Bideo Estandarra"
DVTiming="DV Denborapena"
DVTiming="DV sinkronizazioa"
Resolution="Bereizmena"
FrameRate="Frame Neurria"
LeaveUnchanged="Utzi Aldatugabe"
UseBuffering="Erabili Bufferreratzea"
FrameRate="Fotograma emaria"
LeaveUnchanged="Utzi aldatu gabe"
UseBuffering="Erabili bufferreratzea"

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