New upstream version 26.1.0+dfsg1

This commit is contained in:
Sebastian Ramacher 2020-12-22 18:32:50 +01:00
parent 040dcc3fc2
commit 013818c4af
594 changed files with 19576 additions and 4478 deletions

View file

@ -1,2 +1,3 @@
add_subdirectory(decklink-output-ui)
add_subdirectory(frontend-tools)
add_subdirectory(decklink-captions)

View file

@ -0,0 +1,44 @@
project(decklink-captions)
if(APPLE)
find_library(COCOA Cocoa)
include_directories(${COCOA})
endif()
if(UNIX AND NOT APPLE)
find_package(X11 REQUIRED)
link_libraries(${X11_LIBRARIES})
include_directories(${X11_INCLUDE_DIR})
endif()
set(decklink-captions_HEADERS
decklink-captions.h
)
set(decklink-captions_SOURCES
decklink-captions.cpp
)
set(decklink-captions_UI
forms/captions.ui
)
if(APPLE)
set(decklink-captions_PLATFORM_LIBS
${COCOA})
endif()
qt5_wrap_ui(decklink-captions_UI_HEADERS
${decklink-captions_UI})
add_library(decklink-captions MODULE
${decklink-captions_HEADERS}
${decklink-captions_SOURCES}
${decklink-captions_UI_HEADERS}
)
target_link_libraries(decklink-captions
${frontend-tools_PLATFORM_LIBS}
obs-frontend-api
Qt5::Widgets
libobs)
set_target_properties(decklink-captions PROPERTIES FOLDER "plugins/decklink")
install_obs_plugin_with_data(decklink-captions data)

View file

@ -0,0 +1,159 @@
#include <obs-frontend-api.h>
#include <QMainWindow>
#include <QAction>
#include <obs.hpp>
#include "decklink-captions.h"
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("decklink-captons", "en-US")
struct obs_captions {
std::string source_name;
OBSWeakSource source;
void start();
void stop();
obs_captions();
inline ~obs_captions() { stop(); }
};
obs_captions::obs_captions() {}
static obs_captions *captions = nullptr;
DecklinkCaptionsUI::DecklinkCaptionsUI(QWidget *parent)
: QDialog(parent), ui(new Ui_CaptionsDialog)
{
ui->setupUi(this);
setSizeGripEnabled(true);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
auto cb = [this](obs_source_t *source) {
uint32_t caps = obs_source_get_output_flags(source);
QString name = obs_source_get_name(source);
if (caps & OBS_SOURCE_CEA_708)
ui->source->addItem(name);
OBSWeakSource weak = OBSGetWeakRef(source);
if (weak == captions->source)
ui->source->setCurrentText(name);
return true;
};
using cb_t = decltype(cb);
ui->source->blockSignals(true);
ui->source->addItem(QStringLiteral(""));
ui->source->setCurrentIndex(0);
obs_enum_sources(
[](void *data, obs_source_t *source) {
return (*static_cast<cb_t *>(data))(source);
},
&cb);
ui->source->blockSignals(false);
}
void DecklinkCaptionsUI::on_source_currentIndexChanged(int)
{
captions->stop();
captions->source_name = ui->source->currentText().toUtf8().constData();
captions->source = GetWeakSourceByName(captions->source_name.c_str());
captions->start();
}
static void caption_callback(void *param, obs_source_t *source,
const struct obs_source_cea_708 *captions)
{
UNUSED_PARAMETER(param);
UNUSED_PARAMETER(source);
obs_output *output = obs_frontend_get_streaming_output();
if (output) {
if (obs_frontend_streaming_active() &&
obs_output_active(output)) {
obs_output_caption(output, captions);
}
obs_output_release(output);
}
}
void obs_captions::start()
{
OBSSource s = OBSGetStrongRef(source);
if (!s) {
//warn("Source invalid");
return;
}
obs_source_add_caption_callback(s, caption_callback, nullptr);
}
void obs_captions::stop()
{
OBSSource s = OBSGetStrongRef(source);
if (s)
obs_source_remove_caption_callback(s, caption_callback,
nullptr);
}
static void save_decklink_caption_data(obs_data_t *save_data, bool saving,
void *)
{
if (saving) {
obs_data_t *obj = obs_data_create();
obs_data_set_string(obj, "source",
captions->source_name.c_str());
obs_data_set_obj(save_data, "decklink_captions", obj);
obs_data_release(obj);
} else {
captions->stop();
obs_data_t *obj =
obs_data_get_obj(save_data, "decklink_captions");
if (!obj)
obj = obs_data_create();
captions->source_name = obs_data_get_string(obj, "source");
captions->source =
GetWeakSourceByName(captions->source_name.c_str());
obs_data_release(obj);
captions->start();
}
}
void addOutputUI(void)
{
QAction *action = (QAction *)obs_frontend_add_tools_menu_qaction(
obs_module_text("Decklink Captions"));
captions = new obs_captions;
auto cb = []() {
obs_frontend_push_ui_translation(obs_module_get_string);
QWidget *window = (QWidget *)obs_frontend_get_main_window();
DecklinkCaptionsUI dialog(window);
dialog.exec();
obs_frontend_pop_ui_translation();
};
obs_frontend_add_save_callback(save_decklink_caption_data, nullptr);
action->connect(action, &QAction::triggered, cb);
}
bool obs_module_load(void)
{
addOutputUI();
return true;
}

View file

@ -0,0 +1,30 @@
#include <QDialog>
#include <obs-module.h>
#include <util/platform.h>
#include <obs.hpp>
#include <memory>
#include "ui_captions.h"
class DecklinkCaptionsUI : public QDialog {
Q_OBJECT
private:
public:
std::unique_ptr<Ui_CaptionsDialog> ui;
DecklinkCaptionsUI(QWidget *parent);
public slots:
void on_source_currentIndexChanged(int idx);
};
static inline OBSWeakSource GetWeakSourceByName(const char *name)
{
OBSWeakSource weak;
obs_source_t *source = obs_get_source_by_name(name);
if (source) {
weak = obs_source_get_weak_source(source);
obs_weak_source_release(weak);
obs_source_release(source);
}
return weak;
}

View file

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CaptionsDialog</class>
<widget class="QDialog" name="CaptionsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>519</width>
<height>104</height>
</rect>
</property>
<property name="windowTitle">
<string>Captions</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Captions.Source</string>
</property>
<property name="buddy">
<cstring>source</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="source">
<property name="insertPolicy">
<enum>QComboBox::InsertAlphabetically</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="accept">
<property name="text">
<string>OK</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>accept</sender>
<signal>clicked()</signal>
<receiver>CaptionsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>268</x>
<y>331</y>
</hint>
<hint type="destinationlabel">
<x>229</x>
<y>-11</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -81,21 +81,19 @@ if(WIN32)
auto-scene-switcher-win.cpp
frontend-tools.rc)
if(BUILD_CAPTIONS)
set(frontend-tools_PLATFORM_SOURCES
${frontend-tools_PLATFORM_SOURCES}
captions.cpp
captions-handler.cpp
captions-mssapi.cpp
captions-mssapi-stream.cpp)
set(frontend-tools_PLATFORM_HEADERS
captions.hpp
captions-handler.hpp
captions-mssapi.hpp
captions-mssapi-stream.hpp)
set(frontend-tools_PLATFORM_UI
forms/captions.ui)
endif()
set(frontend-tools_PLATFORM_SOURCES
${frontend-tools_PLATFORM_SOURCES}
captions.cpp
captions-handler.cpp
captions-mssapi.cpp
captions-mssapi-stream.cpp)
set(frontend-tools_PLATFORM_HEADERS
captions.hpp
captions-handler.hpp
captions-mssapi.hpp
captions-mssapi-stream.hpp)
set(frontend-tools_PLATFORM_UI
forms/captions.ui)
elseif(APPLE)
set(frontend-tools_PLATFORM_SOURCES
auto-scene-switcher-osx.mm)

View file

@ -1,6 +1,48 @@
SceneSwitcher="Avtomatik Səhnə Dəyişdirici"
SceneSwitcher.OnNoMatch="Heç bir pəncərəyə uyğun gəlməyəndə:"
SceneSwitcher.OnNoMatch.DontSwitch="Dəyişdirmə"
SceneSwitcher.OnNoMatch.SwitchTo="Dəyişdir:"
SceneSwitcher.CheckInterval="Aktiv pəncərə başlığını yoxla:"
SceneSwitcher.ActiveOrNotActive="Səhnə Dəyişdirici:"
InvalidRegex.Title="Etibarsız Müntəzəm İfadə"
InvalidRegex.Text="Daxil etdiyiniz müntəzəm ifadə etibarsızdır."
Active="Aktiv"
Inactive="Qeyri aktiv"
Start="Başlat"
Stop="Dayandır"
Captions="Altyazılar (Təcrübi)"
Captions.AudioSource="Səs mənbəsi"
Captions.CurrentSystemLanguage="Hazırki Sistem Dili (%1)"
Captions.Provider="Təchizatçı"
Captions.Error.GenericFail="Altyazı başladılmadı"
OutputTimer=ıxış Vaxtölçəni"
OutputTimer.Stream="Yayımı dayandır:"
OutputTimer.Record="Yazmanı dayandır:"
OutputTimer.Stream.StoppingIn="Yayım dayandırılır:"
OutputTimer.Record.StoppingIn="Yazma dayandırılır:"
OutputTimer.Stream.EnableEverytime="Hər dəfə yayım vaxtölçənini fəallaşdır"
OutputTimer.Record.EnableEverytime="Hər dəfə yazma vaxtölçənini fəallaşdır"
OutputTimer.Record.PauseTimer="Yazmaya fasilə veriləndə vaxtölçənə də fasilə ver"
Scripts="Skriptlər"
LoadedScripts="Yüklənmiş skriptlər"
AddScripts="Skript əlavə et"
RemoveScripts="Skripti çıxart"
ReloadScripts="Skripti yenidən yüklə"
Reload="Yenidən yüklə"
OpenFileLocation="Fayl yerləşməsini aç"
PythonSettings="Python Tənzimləmələri"
PythonSettings.PythonInstallPath32bit="Python Quraşdırma Yolu (32 bit)"
PythonSettings.PythonInstallPath64bit="Python Quraşdırma Yolu (64 bit)"
PythonSettings.BrowsePythonPath="Python yoluna nəzər yetir"
ScriptLogWindow="Sktript jurnalı"
Description="Açıqlama"
ScriptDescriptionLink.Text="Bu bağlantı ilkin veb səyyahında açılsın?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="URL-ni aç"
FileFilter.ScriptFiles="Skript faylları"
FileFilter.AllFiles="Bütün fayllar"

View file

@ -33,13 +33,13 @@ RemoveScripts="Skripte entfernen"
ReloadScripts="Skripte neu laden"
Reload="Neu laden"
OpenFileLocation="Dateipfad öffnen"
PythonSettings="PythonEinstellungen"
PythonSettings.PythonInstallPath32bit="PythonInstallationspfad (32bit)"
PythonSettings.PythonInstallPath64bit="PythonInstallationspfad (64bit)"
PythonSettings.BrowsePythonPath="PythonPfad öffnen"
PythonSettings="Python-Einstellungen"
PythonSettings.PythonInstallPath32bit="Python-Installationspfad (32bit)"
PythonSettings.PythonInstallPath64bit="Python-Installationspfad (64bit)"
PythonSettings.BrowsePythonPath="Python-Pfad öffnen"
ScriptLogWindow="Skriptlog"
Description="Beschreibung"
ScriptDescriptionLink.Text="Diesen Link in Ihrem StandardWebbrowser öffnen?"
ScriptDescriptionLink.Text="Diesen Link in Ihrem Standard-Webbrowser öffnen?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="URL öffnen"

View file

@ -31,6 +31,8 @@ LoadedScripts="Φορτωμένες δέσμες ενεργειών"
AddScripts="Προσθήκη δεσμών ενεργειών"
RemoveScripts="Αφαίρεση δεσμών ενεργειών"
ReloadScripts="Επαναφόρτωση δεσμών ενεργειών"
Reload="Επαναφόρτωση"
OpenFileLocation="Άνοιγμα τοποθεσίας αρχείου"
PythonSettings="Ρυθμίσεις Python"
PythonSettings.PythonInstallPath32bit="Χώρος εγκατάστασης Python (32bit)"
PythonSettings.PythonInstallPath64bit="Χώρος εγκατάστασης Python (64bit)"
@ -38,6 +40,7 @@ PythonSettings.BrowsePythonPath="Περιήγηση τού χώρου εγκατ
ScriptLogWindow="Script Log"
Description="Περιγραφή"
ScriptDescriptionLink.Text="Ανοίξτε αυτόν τον σύνδεσμο με το προκαθορισμένο πρόγραμα περιήγησης;"
ScriptDescriptionLink.Text.Url="Σύνδεσμος: %1"
ScriptDescriptionLink.OpenURL="Άνοιγμα Συνδέσμων"
FileFilter.ScriptFiles="Κρυπτογραφημένο αρχείο δέσμης ενεργειών"

View file

@ -0,0 +1,48 @@
SceneSwitcher="Aŭtomata scen-ŝanĝilo"
SceneSwitcher.OnNoMatch="Kiam neniu fenestro kongruas:"
SceneSwitcher.OnNoMatch.DontSwitch="Ne ŝanĝu"
SceneSwitcher.OnNoMatch.SwitchTo="Ŝanĝu al:"
SceneSwitcher.CheckInterval="Kontrolu aktivan fenestro-titolon ĉiu(j)n:"
SceneSwitcher.ActiveOrNotActive="Scen-ŝanĝilo estas:"
InvalidRegex.Title="Nevalida regula esprimo"
InvalidRegex.Text="La regula esprimo, kiun vi enigis, estas nevalida."
Active="Aktiva"
Inactive="Neaktiva"
Start="Startigi"
Stop="Ĉesigi"
Captions="Subtekstoj (eksperimenta)"
Captions.AudioSource="Sonfonto"
Captions.CurrentSystemLanguage="Aktuala sistem-lingvo (%1)"
Captions.Provider="Provizanto"
Captions.Error.GenericFail="Malsukcesis startigi subtekstojn"
OutputTimer="Elig-prokrastilo"
OutputTimer.Stream="Ĉesi elsendi post:"
OutputTimer.Record="Ĉesi registri post:"
OutputTimer.Stream.StoppingIn="Elsendado ĉesos en:"
OutputTimer.Record.StoppingIn="Registrado ĉesos en:"
OutputTimer.Stream.EnableEverytime="Ebligi elsend-prokrastilon ĉiun fojon"
OutputTimer.Record.EnableEverytime="Ebligi registro-prokrastilon ĉiun fojon"
OutputTimer.Record.PauseTimer="Paŭzigi prokrastilon kiam registrado estas paŭzigita"
Scripts="Skriptoj"
LoadedScripts="Ŝargitaj skriptoj"
AddScripts="Aldoni skriptojn"
RemoveScripts="Forigi skriptojn"
ReloadScripts="Reŝargi skriptojn"
Reload="Reŝargi"
OpenFileLocation="Malfermi dosierlokon"
PythonSettings="Python-agordoj"
PythonSettings.PythonInstallPath32bit="Instal-loko de Python (32-bita)"
PythonSettings.PythonInstallPath64bit="Instal-loko de Python (64-bita)"
PythonSettings.BrowsePythonPath="Malfermi Python-indikon"
ScriptLogWindow="Skript-protokolo"
Description="Priskribo"
ScriptDescriptionLink.Text="Ĉu malfermi tiun ĉi ligilon en via defaŭlta retfoliumilon?"
ScriptDescriptionLink.Text.Url="Retadreso: %1"
ScriptDescriptionLink.OpenURL="Malfermi retadreson"
FileFilter.ScriptFiles="Skript-dosieroj"
FileFilter.AllFiles="Ĉiuj dosieroj"

View file

@ -34,9 +34,9 @@ ReloadScripts="Recargar Scripts"
Reload="Recargar"
OpenFileLocation="Abrir ubicación del archivo"
PythonSettings="Configuración de Python"
PythonSettings.PythonInstallPath32bit="Dirección de la instalación de Python (32bit)"
PythonSettings.PythonInstallPath64bit="Dirección de la instalación de Python (64bit)"
PythonSettings.BrowsePythonPath="Buscar Ruta de Phyton"
PythonSettings.PythonInstallPath32bit="Ruta de la instalación de Python (32 bits)"
PythonSettings.PythonInstallPath64bit="Ruta de la instalación de Python (64 bits)"
PythonSettings.BrowsePythonPath="Explorar ruta de Python"
ScriptLogWindow="Registro de secuencia de comandos"
Description="Descripción"
ScriptDescriptionLink.Text="¿Abrir este enlace en su navegador predeterminado?"

View file

@ -25,5 +25,11 @@ OutputTimer.Stream.EnableEverytime="Lülita voogedastuse taimer alati sisse"
OutputTimer.Record.EnableEverytime="Lülita salvestus taimer alati sisse"
Scripts="Skriptid"
Reload="Lae uuesti"
Description="Kirjeldus"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Ava URL"
FileFilter.ScriptFiles="Skriptifailid"
FileFilter.AllFiles="Kõik failid"

View file

@ -31,12 +31,17 @@ LoadedScripts="Kargatutako script-ak"
AddScripts="Gehitu script-ak"
RemoveScripts="Kendu script-ak"
ReloadScripts="Birkargatu script-ak"
Reload="Berriro kargatu"
OpenFileLocation="Artxiboaren kokapena ireki"
PythonSettings="Python ezarpenak"
PythonSettings.PythonInstallPath32bit="Python instalazioaren bide-izena (32bit)"
PythonSettings.PythonInstallPath64bit="Python instalazioaren bide-izena (64bit)"
PythonSettings.BrowsePythonPath="Arakatu Python-en bide-izena"
ScriptLogWindow="Script-aren erregistroa"
Description="Deskribapena"
ScriptDescriptionLink.Text="Ireki esteka hau zure nabigatzaile lehenetsian?"
ScriptDescriptionLink.Text.Url="URLa: %1"
ScriptDescriptionLink.OpenURL="Ireki web-helbidea"
FileFilter.ScriptFiles="Script-aren fitxategiak"
FileFilter.AllFiles="Fitxategi guztiak"

View file

@ -1,24 +1,47 @@
SceneSwitcher="تغییر صحنه خودکار"
SceneSwitcher.OnNoMatch="وقتی هیچ پنجره‌ای همخوانی نداشت:"
SceneSwitcher.OnNoMatch.DontSwitch="سوییچ نکن"
SceneSwitcher.OnNoMatch.SwitchTo="سویچ کن به:"
SceneSwitcher.CheckInterval="عنوان پنجره فعال را هر بار بررسی کنید:"
SceneSwitcher.ActiveOrNotActive="تغییر صحنه:"
InvalidRegex.Title="عبارت منظم نامعتبر است"
InvalidRegex.Text="عبارت منظمی که وارد کرده اید نامعتبر است."
Active="فعال"
Inactive="غیر فعال"
Start="شروع"
Stop="توقف"
Captions="زیرنویس ها (تجربی)"
Captions.AudioSource="منبع صدا"
Captions.CurrentSystemLanguage="زبان سیستم فعلی (%1)"
Captions.Provider="ارائه دهنده"
Captions.Error.GenericFail="زیرنویس شروع نشد"
OutputTimer="تایمر خروجی"
OutputTimer.Stream="توقف پخش جریانی بعد از:"
OutputTimer.Record="توقف ضبط بعد از:"
OutputTimer.Stream.StoppingIn="توقف پخش جریان در:"
OutputTimer.Record.StoppingIn="متوقف کردن ضبط در:"
OutputTimer.Stream.EnableEverytime="هربار زمان سنج پخش جریانی را فعال کنید"
OutputTimer.Record.EnableEverytime="هربار زمان سنج ضبط را فعال کنید"
OutputTimer.Record.PauseTimer="هنگام مکث ضبط، تایمر مکث کند"
Scripts="اسکریپت ها"
LoadedScripts="اسکریپت های بارگیری شده"
AddScripts="اضافه کردن اسکریپت ها"
RemoveScripts="پاک کردن اسکریپت ها"
ReloadScripts="بارگیری مجدد اسکریپت ها"
Reload="تازه‌سازی"
OpenFileLocation="بازکردن مکان فایل"
PythonSettings="تنظیمات پایتون"
PythonSettings.PythonInstallPath32bit="مسیر نصب پایتون (32 بیت)"
PythonSettings.PythonInstallPath64bit="مسیر نصب پایتون (64 بیت)"
PythonSettings.BrowsePythonPath="مرور مسیر پایتون"
ScriptLogWindow="اسکریپت نویسی"
Description="توضیحات"
ScriptDescriptionLink.Text="این پیوند را در مرورگر وب پیش فرض خود باز می کنید?"
ScriptDescriptionLink.Text.Url="نشانی: %1"
ScriptDescriptionLink.OpenURL="باز کردن نشانی"
FileFilter.ScriptFiles="فایل های اسکریپت"
FileFilter.AllFiles="همه‌ی فایل ها"

View file

@ -0,0 +1,48 @@
SceneSwitcher="Asenfal awurman n usayes"
SceneSwitcher.OnNoMatch="Ma ulac asfaylu inmeɣran:"
SceneSwitcher.OnNoMatch.DontSwitch="Ur senfal ara"
SceneSwitcher.OnNoMatch.SwitchTo="Senfel ɣer:"
SceneSwitcher.CheckInterval="Selken azwel n usfaylu urmid yal:"
SceneSwitcher.ActiveOrNotActive="Asenfal n usayes:"
InvalidRegex.Title="Tanfalit talugant d tarmeɣtut"
InvalidRegex.Text="Tanfalit talugant i tsekcmeḍ d tarmeɣtut."
Active="Yermed"
Inactive="Yensa"
Start="Sekker"
Stop="Seḥbes"
Captions="Iduzwilen (d tarmit)"
Captions.AudioSource="Aɣbalu n umeslaw"
Captions.CurrentSystemLanguage="Tutlayt tamirant n unagraw (%1)"
Captions.Provider="Aseǧǧaw"
Captions.Error.GenericFail="Asekker n twaṭṭfiwin ur yeddi ara"
OutputTimer="Amakud n tuffɣa"
OutputTimer.Stream="Ḥbes asuddem mbaɛd:"
OutputTimer.Record="Ḥbes asekles mbaɛd:"
OutputTimer.Stream.StoppingIn="Asuddem ad iḥbes di:"
OutputTimer.Record.StoppingIn="Asekles ad iḥbes di:"
OutputTimer.Stream.EnableEverytime="Sermed amakud n usuddem yal tikkelt"
OutputTimer.Record.EnableEverytime="Sermed amakud n usekles yal tikkelt"
OutputTimer.Record.PauseTimer="Ḥbes amakud ticki yeḥbes usekles"
Scripts="Iskripten"
LoadedScripts="Iskripten yulin"
AddScripts="Rnu iskripten"
RemoveScripts="Kkes iskripten"
ReloadScripts="Ales asali n yiskripten"
Reload="Ales asali"
OpenFileLocation="Ldi adig n ufaylu"
PythonSettings="Iɣewwaren n Python"
PythonSettings.PythonInstallPath32bit="Abrid n usbeddi n Python (32bit)"
PythonSettings.PythonInstallPath64bit="Abrid n usbeddi n Python (64bit)"
PythonSettings.BrowsePythonPath="Snirem abrid n Python"
ScriptLogWindow="Aɣmis n uskript"
Description="Aglam"
ScriptDescriptionLink.Text="Ad teldiḍ aseɣwen-agi deg yiminig n web inek m n lexṣas?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Ldi URL"
FileFilter.ScriptFiles="Ifuyla n uskript"
FileFilter.AllFiles="Akk ifuyla"

View file

@ -31,12 +31,17 @@ LoadedScripts="Innlastede skripter"
AddScripts="Legg til skripter"
RemoveScripts="Fjern skripter"
ReloadScripts="Last inn skripter på nytt"
Reload="Oppdater"
OpenFileLocation="Åpne filplassering"
PythonSettings="Python-innstillinger"
PythonSettings.PythonInstallPath32bit="Python-installasjonsfilbane (32-bit)"
PythonSettings.PythonInstallPath64bit="Python-installasjonsfilbane (64-bit)"
PythonSettings.BrowsePythonPath="Finn Python-filbanen"
ScriptLogWindow="Skripthistorikk"
Description="Beskrivelse"
ScriptDescriptionLink.Text="Åpne denne lenken i standard nettleser?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Åpne URL"
FileFilter.ScriptFiles="Skriptfiler"
FileFilter.AllFiles="Alle filer"

View file

@ -24,7 +24,7 @@ OutputTimer.Stream.StoppingIn="Zatrzymanie streamu za:"
OutputTimer.Record.StoppingIn="Zatrzymanie nagrywania za:"
OutputTimer.Stream.EnableEverytime="Włącz timer streamu za każdym razem"
OutputTimer.Record.EnableEverytime="Włącz timer nagrywania za każdym razem"
OutputTimer.Record.PauseTimer="Zatrzymaj czas, gdy nagrywanie jest spauzowane"
OutputTimer.Record.PauseTimer="Zatrzymaj czas, gdy nagrywanie jest zapauzowane"
Scripts="Skrypty"
LoadedScripts="Wczytane skrypty"

View file

@ -4,16 +4,16 @@ SceneSwitcher.OnNoMatch.DontSwitch="Não alternar"
SceneSwitcher.OnNoMatch.SwitchTo="Alternar para:"
SceneSwitcher.CheckInterval="Checar o título da janela ativa a cada:"
SceneSwitcher.ActiveOrNotActive="O alternador de cenas está:"
InvalidRegex.Title="Expressão Regular inválida"
InvalidRegex.Title="Expressão regular inválida"
InvalidRegex.Text="A expressão regular que você inseriu é inválida."
Active="Ligado"
Inactive="Desligado"
Start="Iniciar"
Stop="Parar"
Captions="Legendas (Experimental)"
Captions.AudioSource="Fonte de Áudio"
Captions.CurrentSystemLanguage="Idioma Atual do Sistema (%1)"
Captions="Legendas (experimental)"
Captions.AudioSource="Fonte de áudio"
Captions.CurrentSystemLanguage="Idioma atual do sistema (%1)"
Captions.Provider="Provedor"
Captions.Error.GenericFail="Falha ao iniciar legendas"
@ -27,22 +27,22 @@ OutputTimer.Record.EnableEverytime="Ativar o timer de gravação o tempo todo"
OutputTimer.Record.PauseTimer="Pausar o temporizador quando a gravação é pausada"
Scripts="Scripts"
LoadedScripts="Scripts Carregados"
AddScripts="Adicionar Scripts"
RemoveScripts="Remover Scripts"
ReloadScripts="Recarregar Scripts"
LoadedScripts="Scripts carregados"
AddScripts="Adicionar scripts"
RemoveScripts="Remover scripts"
ReloadScripts="Recarregar scripts"
Reload="Recarregar"
OpenFileLocation="Abrir local do arquivo"
PythonSettings="Configurações Python"
PythonSettings.PythonInstallPath32bit="Caminho de Instalação Python (32 bits)"
PythonSettings.PythonInstallPath64bit="Caminho de Instalação Python (64 bits)"
PythonSettings.BrowsePythonPath="Procurar Caminho do Python"
ScriptLogWindow="Log dos Scripts"
PythonSettings="Configurações do Python"
PythonSettings.PythonInstallPath32bit="Caminho de instalação do Python (32 bits)"
PythonSettings.PythonInstallPath64bit="Caminho de instalação do Python (64 bits)"
PythonSettings.BrowsePythonPath="Procurar caminho do Python"
ScriptLogWindow="Log de scripts"
Description="Descrição"
ScriptDescriptionLink.Text="Abrir este link no seu navegador padrão?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Abrir URL"
FileFilter.ScriptFiles="Arquivos de Scripts"
FileFilter.AllFiles="Todos os Arquivos"
FileFilter.ScriptFiles="Arquivos de scripts"
FileFilter.AllFiles="Todos os arquivos"

View file

@ -31,12 +31,15 @@ LoadedScripts="Scripts Carregados"
AddScripts="Adicionar Scripts"
RemoveScripts="Remover Scripts"
ReloadScripts="Recarregar Scripts"
Reload="Recarregar"
OpenFileLocation="Abrir local do ficheiro"
PythonSettings="Definições do Python"
PythonSettings.PythonInstallPath32bit="Caminho da Instalação do Python (32bits)"
PythonSettings.PythonInstallPath64bit="Caminho da Instalação do Python (64bits)"
PythonSettings.BrowsePythonPath="Procurar o Caminho Python"
ScriptLogWindow="Log do Script"
Description="Descrição"
ScriptDescriptionLink.Text="Abrir este link no teu navegador padrão?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Abrir URL"

View file

@ -5,7 +5,7 @@ SceneSwitcher.OnNoMatch.SwitchTo="Schimbă la:"
SceneSwitcher.CheckInterval="Verifică titlul ferestrei active la fiecare:"
SceneSwitcher.ActiveOrNotActive="Schimbătorul de scene este:"
InvalidRegex.Title="Expresie regulată invalidă"
InvalidRegex.Text="Expresia obișnuită pe care ați introdus-o este invalidă."
InvalidRegex.Text="Expresia regulată pe care ai introdus-o este nevalidă."
Active="Activ"
Inactive="Inactiv"
Start="Pornește"
@ -39,10 +39,10 @@ PythonSettings.PythonInstallPath64bit="Calea instalării Python (64bit)"
PythonSettings.BrowsePythonPath="Răsfoiește calea Python"
ScriptLogWindow="Jurnalul scripturilor"
Description="Descriere"
ScriptDescriptionLink.Text="Deschideți acest link în browser-ul web implicit?"
ScriptDescriptionLink.Text="Deschizi acest link în browserul web implicit?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Deschide URL-ul"
FileFilter.ScriptFiles="Fișiere Script"
FileFilter.ScriptFiles="Fișiere de script"
FileFilter.AllFiles="Toate fișierele"

View file

@ -31,6 +31,8 @@ LoadedScripts="Naloženi skripti"
AddScripts="Dodaj skripte"
RemoveScripts="Odstrani skripte"
ReloadScripts="Ponovno naloži skripte"
Reload="Ponovno naloži"
OpenFileLocation="Odpri lokacijo datoteke"
PythonSettings="Nastavitve Python"
PythonSettings.PythonInstallPath32bit="Namestitvena pot Pythona (32-bitni)"
PythonSettings.PythonInstallPath64bit="Namestitvena pot Pythona (64-bitni)"

View file

@ -2,7 +2,7 @@ SceneSwitcher="Automatisk scenbytare"
SceneSwitcher.OnNoMatch="När inget fönster matchar:"
SceneSwitcher.OnNoMatch.DontSwitch="Byt inte"
SceneSwitcher.OnNoMatch.SwitchTo="Byt till:"
SceneSwitcher.CheckInterval="Kontrollera aktiv fönstertitel varje:"
SceneSwitcher.CheckInterval="Kontrollera titel på aktivt fönster varje:"
SceneSwitcher.ActiveOrNotActive="Scenbytaren är:"
InvalidRegex.Title="Ogiltigt reguljärt uttryck"
InvalidRegex.Text="Det reguljära uttrycket du angav är ogiltigt."
@ -18,9 +18,9 @@ Captions.Provider="Tillhandahållare"
Captions.Error.GenericFail="Det gick inte att starta undertexter"
OutputTimer="Utdatatimer"
OutputTimer.Stream="Sluta streama efter:"
OutputTimer.Stream="Stoppa strömmen efter:"
OutputTimer.Record="Stoppa inspelningen efter:"
OutputTimer.Stream.StoppingIn="Streamen stoppas om:"
OutputTimer.Stream.StoppingIn="Strömmen stoppas om:"
OutputTimer.Record.StoppingIn="Inspelningen stoppas om:"
OutputTimer.Stream.EnableEverytime="Aktivera strömtimer varje gång"
OutputTimer.Record.EnableEverytime="Aktivera inspelningstimer varje gång"

View file

@ -24,18 +24,24 @@ OutputTimer.Stream.StoppingIn="Stream sẽ dừng trong:"
OutputTimer.Record.StoppingIn="Quay video sẽ dừng trong:"
OutputTimer.Stream.EnableEverytime="Bật hẹn giờ phát luồng mỗi lần"
OutputTimer.Record.EnableEverytime="Bật hẹn giờ phát mỗi lần"
OutputTimer.Record.PauseTimer="Dừng bấm giờ khi ghi hình tạm dừng"
Scripts="Kịch bản"
LoadedScripts="Kịch bản đã nạp"
AddScripts="Thêm script"
RemoveScripts="Gỡ bỏ kịch bản"
ReloadScripts="Nạp lại kịch bản"
Reload="Tải lại"
OpenFileLocation="Mở vị trí tệp"
PythonSettings="Thiết đặt Python"
PythonSettings.PythonInstallPath32bit="Đường dẫn cài đặt Python (32bit)"
PythonSettings.PythonInstallPath64bit="Đường dẫn cài đặt Python (64bit)"
PythonSettings.BrowsePythonPath="Duyệt đường dẫn Python"
ScriptLogWindow="Bản ghi kịch bản"
Description="Mô tả"
ScriptDescriptionLink.Text="Mở liên kết trên trình duyệt web mặc định?"
ScriptDescriptionLink.Text.Url="URL: %1"
ScriptDescriptionLink.OpenURL="Mở URL"
FileFilter.ScriptFiles="Tập tin script"
FileFilter.AllFiles="Tất cả tập tin"

View file

@ -16,7 +16,6 @@
#define OFF 0
#endif
#define BUILD_CAPTIONS @BUILD_CAPTIONS@
#define ENABLE_SCRIPTING @SCRIPTING_ENABLED@
#define COMPILE_LUA @COMPILE_LUA@
#define COMPILE_PYTHON @COMPILE_PYTHON@

View file

@ -7,7 +7,7 @@ OBS_MODULE_USE_DEFAULT_LOCALE("frontend-tools", "en-US")
void InitSceneSwitcher();
void FreeSceneSwitcher();
#if defined(_WIN32) && BUILD_CAPTIONS
#if defined(_WIN32)
void InitCaptions();
void FreeCaptions();
#endif
@ -22,7 +22,7 @@ void FreeScripts();
bool obs_module_load(void)
{
#if defined(_WIN32) && BUILD_CAPTIONS
#if defined(_WIN32)
InitCaptions();
#endif
InitSceneSwitcher();
@ -35,7 +35,7 @@ bool obs_module_load(void)
void obs_module_unload(void)
{
#if defined(_WIN32) && BUILD_CAPTIONS
#if defined(_WIN32)
FreeCaptions();
#endif
FreeSceneSwitcher();