New upstream version 26.1.0+dfsg1
This commit is contained in:
parent
040dcc3fc2
commit
013818c4af
594 changed files with 19576 additions and 4478 deletions
|
|
@ -1,2 +1,3 @@
|
|||
add_subdirectory(decklink-output-ui)
|
||||
add_subdirectory(frontend-tools)
|
||||
add_subdirectory(decklink-captions)
|
||||
|
|
|
|||
44
UI/frontend-plugins/decklink-captions/CMakeLists.txt
Normal file
44
UI/frontend-plugins/decklink-captions/CMakeLists.txt
Normal 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)
|
||||
0
UI/frontend-plugins/decklink-captions/data/.keepme
Normal file
0
UI/frontend-plugins/decklink-captions/data/.keepme
Normal file
159
UI/frontend-plugins/decklink-captions/decklink-captions.cpp
Normal file
159
UI/frontend-plugins/decklink-captions/decklink-captions.cpp
Normal 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;
|
||||
}
|
||||
30
UI/frontend-plugins/decklink-captions/decklink-captions.h
Normal file
30
UI/frontend-plugins/decklink-captions/decklink-captions.h
Normal 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;
|
||||
}
|
||||
115
UI/frontend-plugins/decklink-captions/forms/captions.ui
Normal file
115
UI/frontend-plugins/decklink-captions/forms/captions.ui
Normal 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>
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -33,13 +33,13 @@ RemoveScripts="Skripte entfernen"
|
|||
ReloadScripts="Skripte neu laden"
|
||||
Reload="Neu laden"
|
||||
OpenFileLocation="Dateipfad öffnen"
|
||||
PythonSettings="Python‐Einstellungen"
|
||||
PythonSettings.PythonInstallPath32bit="Python‐Installationspfad (32bit)"
|
||||
PythonSettings.PythonInstallPath64bit="Python‐Installationspfad (64bit)"
|
||||
PythonSettings.BrowsePythonPath="Python‐Pfad ö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 Standard‐Webbrowser öffnen?"
|
||||
ScriptDescriptionLink.Text="Diesen Link in Ihrem Standard-Webbrowser öffnen?"
|
||||
ScriptDescriptionLink.Text.Url="URL: %1"
|
||||
ScriptDescriptionLink.OpenURL="URL öffnen"
|
||||
|
||||
|
|
|
|||
|
|
@ -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="Κρυπτογραφημένο αρχείο δέσμης ενεργειών"
|
||||
|
|
|
|||
48
UI/frontend-plugins/frontend-tools/data/locale/eo-UY.ini
Normal file
48
UI/frontend-plugins/frontend-tools/data/locale/eo-UY.ini
Normal 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"
|
||||
|
||||
|
|
@ -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?"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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="همهی فایل ها"
|
||||
|
|
|
|||
48
UI/frontend-plugins/frontend-tools/data/locale/kab-KAB.ini
Normal file
48
UI/frontend-plugins/frontend-tools/data/locale/kab-KAB.ini
Normal 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"
|
||||
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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@
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue