Imported Upstream version 0.14.2+dfsg1
This commit is contained in:
parent
fb3990e9e5
commit
41a01dbf05
529 changed files with 25112 additions and 2336 deletions
|
|
@ -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)
|
||||
|
|
|
|||
6
plugins/coreaudio-encoder/data/locale/ar-SA.ini
Normal file
6
plugins/coreaudio-encoder/data/locale/ar-SA.ini
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
CoreAudioAAC="مرمّز CoreAudio AAC"
|
||||
Bitrate="معدّل البِت"
|
||||
AllowHEAAC="السماح بـ HE-AAC"
|
||||
OutputSamplerate="معدل عينة الإخراج"
|
||||
UseInputSampleRate="استخدم مدخل معدل عينة (OBS) (قد تيم إدراج معدلات بت غير معتمدة)"
|
||||
|
||||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
6
plugins/coreaudio-encoder/data/locale/da-DK.ini
Normal file
6
plugins/coreaudio-encoder/data/locale/da-DK.ini
Normal 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)"
|
||||
|
||||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@ CoreAudioAAC="CoreAudio AAC エンコーダ"
|
|||
Bitrate="ビットレート"
|
||||
AllowHEAAC="HE-AAC を許可"
|
||||
OutputSamplerate="出力のサンプルレート"
|
||||
UseInputSampleRate="(OBSで) 入力したサンプルレートを使用(サポートされていないビットレートをリストする可能性があります)"
|
||||
UseInputSampleRate="(OBSで) 入力したサンプルレートを使用 (サポートされていないビットレートをリストする可能性があります)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
CoreAudioAAC="Кодировщик CoreAudio AAC"
|
||||
Bitrate="Битрейт"
|
||||
AllowHEAAC="Разрешить HE-AAC"
|
||||
OutputSamplerate="Выходная Частота Дискретизации"
|
||||
UseInputSampleRate="Использование Входной (OBS) Частоты Дискретизации (может иметь список не поддерживаемых битрейтом)"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
CoreAudioAAC="CoreAudio AAC-kodare"
|
||||
Bitrate="Bitrate"
|
||||
Bitrate="Bithastighet"
|
||||
AllowHEAAC="Tillåt HE-AAC"
|
||||
OutputSamplerate="Samplingsfrekvens för utmatning"
|
||||
|
||||
|
|
|
|||
4
plugins/coreaudio-encoder/data/locale/ta-IN.ini
Normal file
4
plugins/coreaudio-encoder/data/locale/ta-IN.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
Bitrate="பிட்விகிதம்"
|
||||
AllowHEAAC="HE-AACஐ அனுமதி"
|
||||
OutputSamplerate="வெளியீடுக்கான மாதிரி விகிதம்"
|
||||
|
||||
|
|
@ -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ı"
|
||||
|
||||
|
|
|
|||
6
plugins/decklink/data/locale/ar-SA.ini
Normal file
6
plugins/decklink/data/locale/ar-SA.ini
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
BlackmagicDevice="جهاز Blackmagic"
|
||||
Device="الجهاز"
|
||||
Mode="الوضع"
|
||||
Buffering="استخدام التخزين المؤقت"
|
||||
PixelFormat="صيغة البكسل"
|
||||
|
||||
|
|
@ -2,4 +2,5 @@ BlackmagicDevice="Blackmagic enhed"
|
|||
Device="Enhed"
|
||||
Mode="Tilstand"
|
||||
Buffering="Brug buffering"
|
||||
PixelFormat="Pixel format"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
BlackmagicDevice="Συσκευή Blackmagic"
|
||||
Device="Συσκευή"
|
||||
Mode="Λειτουργία"
|
||||
Buffering="Χρήση ενδιάμεσης μνήμης"
|
||||
PixelFormat="Μορφή pixel"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
BlackmagicDevice="Blackmagic Gailua"
|
||||
BlackmagicDevice="Blackmagic gailua"
|
||||
Device="Gailua"
|
||||
Mode="Modua"
|
||||
Buffering="Erabili Bufferreratzea"
|
||||
PixelFormat="Pixel Heuskarria"
|
||||
PixelFormat="Pixel formatua"
|
||||
|
||||
|
|
|
|||
6
plugins/decklink/data/locale/he-IL.ini
Normal file
6
plugins/decklink/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
BlackmagicDevice="התקן Blackmagic"
|
||||
Device="התקן"
|
||||
Mode="מצב"
|
||||
Buffering="השתמש באוגר"
|
||||
PixelFormat="תבנית פיקסלים"
|
||||
|
||||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,4 +2,5 @@ BlackmagicDevice="Dispositivo Blackmagic"
|
|||
Device="Dispositivo"
|
||||
Mode="Modo"
|
||||
Buffering="Utilizar Buffering"
|
||||
PixelFormat="Formato de Pixel"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,4 +2,5 @@ BlackmagicDevice="Blackmagicenhet"
|
|||
Device="Enhet"
|
||||
Mode="Läge"
|
||||
Buffering="Använd buffert"
|
||||
PixelFormat="Bildpunktsformat"
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
ImageInput="الصورة"
|
||||
File="ملف الصورة"
|
||||
UnloadWhenNotShowing="إلغاء تحميل الصورة إذا لم تظهر"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
4
plugins/image-source/data/locale/he-IL.ini
Normal file
4
plugins/image-source/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
ImageInput="תמונה"
|
||||
File="קובץ תמונה"
|
||||
UnloadWhenNotShowing="הסר טעינת תמונה כאשר לא נראה"
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
ImageInput="Imagem"
|
||||
File="Ficheiro de Imagem"
|
||||
File="Ficheiro de imagem"
|
||||
UnloadWhenNotShowing="Descarregar imagem quando não estiver em visualização"
|
||||
|
||||
|
|
|
|||
|
|
@ -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ă"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
34
plugins/linux-alsa/CMakeLists.txt
Normal file
34
plugins/linux-alsa/CMakeLists.txt
Normal 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)
|
||||
599
plugins/linux-alsa/alsa-input.c
Normal file
599
plugins/linux-alsa/alsa-input.c
Normal 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;
|
||||
}
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ar-SA.ini
Normal file
3
plugins/linux-alsa/data/locale/ar-SA.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="جهاز التقاط الصوت (ALSA)"
|
||||
Device="الجهاز"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ca-ES.ini
Normal file
3
plugins/linux-alsa/data/locale/ca-ES.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Dispositiu de captura d'àudio (ALSA)"
|
||||
Device="Dispositiu"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/cs-CZ.ini
Normal file
3
plugins/linux-alsa/data/locale/cs-CZ.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Zaznamenávací zařízení zvuku (ALSA)"
|
||||
Device="Zařízení"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/da-DK.ini
Normal file
3
plugins/linux-alsa/data/locale/da-DK.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Lyd-optagelsesenhed (ALSA)"
|
||||
Device="Enhed"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/de-DE.ini
Normal file
3
plugins/linux-alsa/data/locale/de-DE.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Audioaufnahmegerät (ALSA)"
|
||||
Device="Gerät"
|
||||
|
||||
2
plugins/linux-alsa/data/locale/en-US.ini
Normal file
2
plugins/linux-alsa/data/locale/en-US.ini
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
AlsaInput="Audio Capture Device (ALSA)"
|
||||
Device="Device"
|
||||
3
plugins/linux-alsa/data/locale/es-ES.ini
Normal file
3
plugins/linux-alsa/data/locale/es-ES.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Dispositivo de captura de audio (ALSA)"
|
||||
Device="Dispositivo"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/eu-ES.ini
Normal file
3
plugins/linux-alsa/data/locale/eu-ES.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Audio kapturako gailua (ALSA)"
|
||||
Device="Gailua"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/fi-FI.ini
Normal file
3
plugins/linux-alsa/data/locale/fi-FI.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Äänenkaappauslaite (ALSA)"
|
||||
Device="Laite"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/fr-FR.ini
Normal file
3
plugins/linux-alsa/data/locale/fr-FR.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Périphérique de capture audio (ALSA)"
|
||||
Device="Périphérique"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/gl-ES.ini
Normal file
3
plugins/linux-alsa/data/locale/gl-ES.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Dispositivo de captura de audio (ALSA)"
|
||||
Device="Dispositivo"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/hr-HR.ini
Normal file
3
plugins/linux-alsa/data/locale/hr-HR.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Ulazni zvučni uređaj (ALSA)"
|
||||
Device="Uređaj"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/hu-HU.ini
Normal file
3
plugins/linux-alsa/data/locale/hu-HU.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Hangrögzítő eszköz (ALSA)"
|
||||
Device="Eszköz"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ja-JP.ini
Normal file
3
plugins/linux-alsa/data/locale/ja-JP.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="音声キャプチャデバイス (ALSA)"
|
||||
Device="デバイス"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ko-KR.ini
Normal file
3
plugins/linux-alsa/data/locale/ko-KR.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="오디오 캡쳐 장치 (ALSA)"
|
||||
Device="장치"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/nl-NL.ini
Normal file
3
plugins/linux-alsa/data/locale/nl-NL.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Audio-opnameapparaat (ALSA)"
|
||||
Device="Apparaat"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/pl-PL.ini
Normal file
3
plugins/linux-alsa/data/locale/pl-PL.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Urządzenie przechwytujące dźwięk (ALSA)"
|
||||
Device="Urządzenie"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/pt-BR.ini
Normal file
3
plugins/linux-alsa/data/locale/pt-BR.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Dispositivo de Captura de Áudio (ALSA)"
|
||||
Device="Dispositivo"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ro-RO.ini
Normal file
3
plugins/linux-alsa/data/locale/ro-RO.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Dispozitiv de captură audio (ALSA)"
|
||||
Device="Dispozitiv"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/ru-RU.ini
Normal file
3
plugins/linux-alsa/data/locale/ru-RU.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Устройство захвата аудио (ALSA)"
|
||||
Device="Устройство"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/sr-CS.ini
Normal file
3
plugins/linux-alsa/data/locale/sr-CS.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Ulazni zvučni uređaj (ALSA)"
|
||||
Device="Uređaj"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/sr-SP.ini
Normal file
3
plugins/linux-alsa/data/locale/sr-SP.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Улазни звучни уређај (ALSA)"
|
||||
Device="Уређај"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/sv-SE.ini
Normal file
3
plugins/linux-alsa/data/locale/sv-SE.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Ljudinspelningsenhet (ALSA)"
|
||||
Device="Enhet"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/tr-TR.ini
Normal file
3
plugins/linux-alsa/data/locale/tr-TR.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="Ses yakalama cihazı (ALSA)"
|
||||
Device="Cihaz"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/zh-CN.ini
Normal file
3
plugins/linux-alsa/data/locale/zh-CN.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="音频捕获设备 (ALSA)"
|
||||
Device="设备"
|
||||
|
||||
3
plugins/linux-alsa/data/locale/zh-TW.ini
Normal file
3
plugins/linux-alsa/data/locale/zh-TW.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
AlsaInput="音訊擷取裝置(ALSA)"
|
||||
Device="裝置"
|
||||
|
||||
29
plugins/linux-alsa/linux-alsa.c
Normal file
29
plugins/linux-alsa/linux-alsa.c
Normal 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;
|
||||
}
|
||||
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
X11SharedMemoryScreenInput="التقاط الشاشة (XSHM)"
|
||||
Screen="الشاشة"
|
||||
CaptureCursor="مؤشر الالتقاط"
|
||||
AdvancedSettings="إعدادات متقدمة"
|
||||
XServer="X Server"
|
||||
XCCapture="التقاط النافذة (Xcomposite)"
|
||||
Window="نافذة"
|
||||
CropTop="الاقتطاع من الأعلى (بكسل)"
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
15
plugins/linux-capture/data/locale/he-IL.ini
Normal file
15
plugins/linux-capture/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
X11SharedMemoryScreenInput="לכידת מסך (XSHM)"
|
||||
Screen="מסך"
|
||||
CaptureCursor="לכוד סמן"
|
||||
AdvancedSettings="הגדרות מתקדמות"
|
||||
XServer="שרת X"
|
||||
XCCapture="לכידת חלון (Xcomposite)"
|
||||
Window="חלון"
|
||||
CropTop="חיתוך עליון (פיקסלים)"
|
||||
CropLeft="חיתוך שמאל (פיקסלים)"
|
||||
CropRight="חיתוך ימין (פיקסלים)"
|
||||
CropBottom="חיתוך תחתון (פיקסלים)"
|
||||
SwapRedBlue="החלף אדום וכחול"
|
||||
LockX="נעל שרת X בעת לכידה"
|
||||
IncludeXBorder="כלול קצה שרת X"
|
||||
|
||||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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の回避策)"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ CropBottom="아래 자르기 (픽셀)"
|
|||
SwapRedBlue="적청 교환"
|
||||
LockX="캡쳐 시 X 서버를 잠금"
|
||||
IncludeXBorder="X 윈도우 경계를 포함"
|
||||
ExcludeAlpha="알파가 없는 텍스쳐 형식 사용 (Mesa 방법)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ CropBottom="Обрезать снизу (пикселей)"
|
|||
SwapRedBlue="Поменять местами красный и синий"
|
||||
LockX="Блокировать X-сервер при захвате"
|
||||
IncludeXBorder="Включить захват границы"
|
||||
ExcludeAlpha="Использовать формат текстур без прозрачности (обходной путь для Mesa)"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ CropBottom="Одсеци одоздо (пиксели)"
|
|||
SwapRedBlue="Замени црвену и плаву"
|
||||
LockX="Закључај X сервер у току снимања"
|
||||
IncludeXBorder="Uključujući i X okvir"
|
||||
ExcludeAlpha="Koristi neprovidni format teksture (zaobilaženje Mesa problema)"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ CropBottom="Odseci odozdo (pikseli)"
|
|||
SwapRedBlue="Zameni crvenu i plavu"
|
||||
LockX="Zaključaj X server u toku snimanja"
|
||||
IncludeXBorder="Укључујући и X оквир"
|
||||
ExcludeAlpha="Користи непровидни формат текстуре (заобилажење Меса проблема)"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ CropBottom="裁剪下部(像素)"
|
|||
SwapRedBlue="交换红色和蓝色"
|
||||
LockX="当捕获时锁定X server"
|
||||
IncludeXBorder="包括 X 边框"
|
||||
ExcludeAlpha="使用阿尔法少纹理格式 (Mesa 变通办法)"
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
3
plugins/linux-jack/data/locale/ar-SA.ini
Normal file
3
plugins/linux-jack/data/locale/ar-SA.ini
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
StartJACKServer="بدء خادم JACK"
|
||||
Channels="عدد القنوات"
|
||||
|
||||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
4
plugins/linux-jack/data/locale/he-IL.ini
Normal file
4
plugins/linux-jack/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
StartJACKServer="התחל שרת JACK"
|
||||
Channels="מספר ערוצים"
|
||||
JACKInput="לקוח קלט JACK"
|
||||
|
||||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
StartJACKServer="JACKサーバーを開始"
|
||||
StartJACKServer="JACK サーバーを開始"
|
||||
Channels="チャンネル数"
|
||||
JACKInput="JACK入力クライアント"
|
||||
JACKInput="JACK 入力クライアント"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
4
plugins/linux-pulseaudio/data/locale/he-IL.ini
Normal file
4
plugins/linux-pulseaudio/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
PulseInput="לכידת קלט שמע (PulseAudio)"
|
||||
PulseOutput="לכידת פלט שמע (PulseAudio)"
|
||||
Device="התקן"
|
||||
|
||||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
PulseInput="Audioinvoer-capture (PulseAudio)"
|
||||
PulseOutput="Audiouitvoer-capture (PulseAudio)"
|
||||
PulseInput="Audioinvoer-opname (PulseAudio)"
|
||||
PulseOutput="Audiouitvoer-opname (PulseAudio)"
|
||||
Device="Apparaat"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
PulseInput="音频输入捕获(脉冲音频)"
|
||||
PulseOutput="音频输出捕获(脉冲音频)"
|
||||
PulseInput="音频输入捕获(PulseAudio)"
|
||||
PulseOutput="音频输出捕获(PulseAudio)"
|
||||
Device="设备"
|
||||
|
||||
|
|
|
|||
|
|
@ -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ěť"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue