Overview
Request 4507 (accepted)
- Update %post script for new desktop file name.
- Include appdata in files list.
- Include obs-ffmpeg-mux in files list.
- Update to version 23.2.0:
* libobs: Update version to 23.2.0
* Update translations from Crowdin
* UI: Make two-auth message a bit friendlier
* UI: Use better link for Twitch two-factor warning
* win-capture: Add discord to game capture blacklist
* UI: Fix transition A/B labels on macOS/Linux
* UI: Add two-factor authentication warning for Twitch
* UI: Add ability to use rich text in warning dialogs
* UI: Fix output icon size. Add padding to settings list items
* UI/updater: Update some text for clarity
* UI/updater: Add marquee progress bar for existing file check
* UI/updater: Add manifest file for DPI awareness
* UI: Revert Dark theme Scenes font change
* CI: Fix travis test on OSX
* CI: Build CEF with OS X 10.11 target
* UI: Ensure frontend event is removed on object deletion
* win-wasapi: Speaker enum fixes
* UI: Fix "Toggle Preview" hotkeys duplicating
* GitHub: Add funding buttons
* libobs-d3d11: Bad indices in log output
* libobs: Pair encoders only when output actually starts
* UI: Fix issue where rec time left would show negative time
* libobs: Remove unreachable YUV decode paths
* obs-filters: Remove unused key_rgb shader variable
* obs-filters: Remove unused variable for color key
- Created by boombatower almost 6 years ago
- In state accepted
-
Package maintainers:
boombatower,
darix, and
frispete
obs-studio.changes
Changed
-------------------------------------------------------------------
+Thu Jun 13 01:27:07 UTC 2019 - Jimmy Berry <jimmy@boombatower.com>
+
+- Update %post script for new desktop file name.
+- Include appdata in files list.
+- Include obs-ffmpeg-mux in files list.
+
+-------------------------------------------------------------------
+Thu Jun 13 00:57:19 UTC 2019 - jimmy@boombatower.com
+
+- Update to version 23.2.0:
+ * libobs: Update version to 23.2.0
+ * Update translations from Crowdin
+ * UI: Make two-auth message a bit friendlier
+ * UI: Use better link for Twitch two-factor warning
+ * win-capture: Add discord to game capture blacklist
+ * UI: Fix transition A/B labels on macOS/Linux
+ * UI: Add two-factor authentication warning for Twitch
+ * UI: Add ability to use rich text in warning dialogs
+ * UI: Fix output icon size. Add padding to settings list items
+ * UI/updater: Update some text for clarity
+ * UI/updater: Add marquee progress bar for existing file check
+ * UI/updater: Add manifest file for DPI awareness
+ * UI: Revert Dark theme Scenes font change
+ * CI: Fix travis test on OSX
+ * CI: Build CEF with OS X 10.11 target
+ * UI: Ensure frontend event is removed on object deletion
+ * win-wasapi: Speaker enum fixes
+ * UI: Fix "Toggle Preview" hotkeys duplicating
+ * GitHub: Add funding buttons
+ * libobs-d3d11: Bad indices in log output
+ * libobs: Pair encoders only when output actually starts
+ * UI: Fix issue where rec time left would show negative time
+ * libobs: Remove unreachable YUV decode paths
+ * obs-filters: Remove unused key_rgb shader variable
+ * obs-filters: Remove unused variable for color key
+ * libobs: Remove saturate from RGB -> YUV conversion
+ * UI: Remove unused helper function renderVB
+ * obs-browser: Close browser panels early
+ * UI: Remove 5 file limit for drag & drop
+ * libobs: Fix lockup when an encode call fails
+ * UI: Dark theme consistency for Scenes vs Sources
+ * UI: Remove unused hotkey qss items
+ * UI: Fix theme issues with hotkey icons
+ * UI: Add hover color to hotkey icons
+ * UI: Add Transition Previews
+ * libobs: Add transition and showing counter functions
+ * README.rst: Add contributing/donating link
+ * obs-ffmpeg: Fix VAAPI CBR
+ * libobs: UI: Remove Qt usage from graphics thread
+ * obs-outputs: Fix undefined MSG_NOSIGNAL
+ * libobs: Restore casts to fix Clang warnings
+ * obs-qsv: Update libmfx, fix QSV with new DCH drivers
+ * UI: Block SIGPIPE in all threads
+ * obs-outputs: Return error instead emitting SIGPIPE
+ * obs-frontend-api: Add func to trigger a Studio Mode transition
+ * obs-frontend-api: Add methods to get/set transition duration
+ * libobs: Fix various alpha issues
+ * UI: Change fader type to log
+ * UI: Make volume faders more precise
+ * UI: Change volume to dB in adv audio properties
+ * UI: Use escaped html for about dialog
+ * UI: Add Patreon contributors to About dialog
+ * win-dshow: fix issue decoding some H.264 stream
+ * UI: Fix system tray not working
+ * UI: Hide Alpha channel field from the color picker
+ * UI: fix crash due to NULL dereference
+ * rtmp-services: Update GameTips.tv
+ * libobs: Fix crashes from wrong types
+ * CI: Use swig 3.0.12 on OSX
+ * UI: Fix theme showing incorrect theme when on Dark
+ * CI: Use swig 3.04 on OSX
+ * obs-ffmpeg: Fix jim-nvenc initial DTS for fractional FPS
+ * UI: Add ability to set properties spinbox suffix
+ * libobs: Add ability to set spinbox property suffix
+ * UI: Use icons for hotkey buttons
+ * UI: Truncate text in hotkeys interface
+ * UI: Remove icons from settings button box
+ * UI: Improve look of Dark theme
+ * UI: Remove settings horizontal lines
+ * UI: Remove mac browser workarounds, improve stability
+ * UI: Only execute "What's New" code on win32
+ * UI: Check for valid systen tray pointer
+ * UI: Increment bitrates by 50
+ * libobs: Use RTLD_FIRST when loading libraries on macOS
+ * UI: Fix theme issues with vis/lock checkboxes
+ * obs-ffmpeg: Move ffmpeg-mux to executable dir
+ * libobs/util: Add function to get executable path
+ * obs-filters: Use int sliders for opacity
+ * obs-filters: Fix opacity on image mask/blend filter
+ * libobs: Support limited color range for RGB/Y800 sources
+ * decklink, win-dshow: Use obs_source_output_video2
+ * libobs: Add better default source color range handling
+ * Revert "libobs: libobs-d3d11: obs-filters: No excess alpha"
+ * UI: Fix theme bug when updating from older versions
+ * UI: Add ability to copy/paste scene filters
+ * UI: Fix unable to escape when renaming scene
+ * UI: Fix group checkbox icons not working in Dark theme
+ * UI: Simplify locked/visibility checkboxes
+ * UI: Change icons to svg
+ * UI: Fix preview/program label alignment
+ * libobs: Fix GS_UNSIGNED_LONG definition
+ * obs-outputs: Fix leak with certs for rtmp
+ * UI: Rename UI files for consistency
+ * UI: Fix whitespace issues with "ignore wheel" widgets
+ * UI: Do not remove focus on mouse leave events
+ * win-wasapi: Unapply/reapply audio monitoring on reconnect
+ * win-wasapi: Fix audio capture after unplugging device
+ * win-wasapi: Call CoInitializeEx in reconnect thread
+ * decklink-output-ui: Fix memory leak
+ * rtmp-services: Update Mixer keyframe interval
+ * UI: Do not allow mouse wheel for volume slider
+ * libobs: UI: Fix rotated line scale
+ * obs-ffmpeg: Add logging of last error for passing to UI
+ * libobs: Allow Win32 pipes to pass STDERR for logging of errors
+ * UI: Update error message severity levels and show additional info
+ * UI: Add warning / critical QMessageBox wrappers
+ * Use proper capitalization for string
+ * UI: Add support for property groups
+ * libobs: Add property groups
+ * Decklink: inital preview out work
+ * UI: Use theme colors setting for Projectors too
+ * UI: Correct custom property implementation
+ * vlc-video: Enable subtitle track selection
+ * UI: Add default color for the preview background
+ * UI: Fix Linux build without PulseAudio
+ * UI: Estimate recording time left until disk is full
+ * libobs: Fix shader for GLSL
+ * UI: Add Linux AppStream metadata
+ * UI: Add hotkey to toggle preview
+ * win-capture/graphics-hook: Check if mutex abandoned
+ * UI: Remove SourceListWidget
+ * UI: Ignore wheelEvent for properties
+ * rtmp-services: Add OnlyFans streaming service
+ * CONTRIBUTING.rst: Improve commit guidelines
+ * UI: Fix remux dialog ignoring filename changes
+ * UI: Separate delegate class into header file
+ * UI: Show a message in the empty source list
+ * deps/media-playback: YUV444P support
+ * libobs: Simplify YUV conversion
+ * UI: Add null check for rename of default theme
+ * UI: Don't hide cursor over multiview
+ * UI: Add ability to center items vertically/horizontally
+ * UI: Rename Default theme to System
+ * libobs: Add additional effect debugging information
+ * Remove double spaces from localization
+ * UI: Fix size of output icon
+ * vlc-video: Enable audio track selection
+ * UI: Add text autoselect for source rename
+ * UI: Add text autoselect on scene rename
+ * libobs: UI: Use graphics debug markers
+ * libobs/graphics: Support debug markers
+ * libobs: Fix move assignment operator for ComPtr
+ * libobs: libobs-d3d11: obs-filters: No excess alpha
+ * UI: Don't update stats dock if hidden
+ * UI: Fix bandwidth test flag being saved to stream key
+ * cmake: Generate obs.rc out-of-tree
+ * libobs: Add function to remove properties
+ * linux-capture: Add randr support
+ * obs-frontend-api: Access system tray icon from API
+ * UI: Fix incorrect padding usage in Rachni theme
+ * UI: Show correct version in about dialog
+ * UI: Log group items on startup
+ * UI, libobs, text-freetype2: Add missing pragma once in header files
+ * libobs: Add support for F25-F35 hotkeys on Linux
+ * UI: Hide border for Output Settings container
+ * UI: Hide border for General Settings container
+ * UI: Refactor Audio Settings tab structure
+ * plugins: Clear all compiler warnings
+ * libobs: Clear all compiler warnings
+ * UI: Fix Q_PROPERTY compiling warnings
+ * libobs-opengl: Clear some conversion and uncaught switch cases warnings
+ * image-source: Set default size of color source to canvas size
+ * CI: Build caption output support on OSX by default
+ * deps/obs-scripting: Expose obs_output_output_caption_text1 to scripts
+ * Improve locales
+ * obs-filters: Add luma key filter
+ * libobs: Add minimum display duration to caption data
+ * UI: Show output's last error in failure dialog
+ * libobs: Initialize service before starting output
+ * UI: Fix unencoded stream failure
+ * obs-ffmpeg: Bind network buffer size in the UI
+
+-------------------------------------------------------------------
Sat Apr 6 16:14:42 UTC 2019 - Jimmy Berry <jimmy@boombatower.com>
- Add libqt5-qtsvg-devel as a build dependency.
obs-studio.spec
Changed
Name: obs-studio
-Version: 23.1.0
+Version: 23.2.0
Release: 0
Summary: A recording/broadcasting program
Group: Productivity/Multimedia/Video/Editors and Convertors
%install
%cmake_install
-%suse_update_desktop_file obs
+%suse_update_desktop_file com.obsproject.Studio
%post
/sbin/ldconfig
%files
%defattr(-, root, root)
%{_bindir}/obs
+%{_bindir}/obs-ffmpeg-mux
# Upstream forces libs dir regardless of arch and building plugins is encumbered
# by moving them to the proper directory.
%{_libexecdir}/obs-plugins
%{_libexecdir}/libobs-scripting.so
%{_libexecdir}/obs-scripting
%{_libexecdir}/libobsglad.so.0
-%{_datadir}/applications/obs.desktop
-%{_datadir}/icons/hicolor/256x256/apps/obs.png
+%dir %{_datadir}/metainfo
+%{_datadir}/metainfo/com.obsproject.Studio.appdata.xml
+%{_datadir}/applications/com.obsproject.Studio.desktop
+%{_datadir}/icons/hicolor/256x256/apps/com.obsproject.Studio.png
%{_datadir}/obs
%files devel
_service
Changed
<services>
<service name="tar_scm" mode="disabled">
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">refs/tags/23.1.0</param>
+ <param name="revision">refs/tags/23.2.0</param>
<param name="url">git://github.com/jp9000/obs-studio.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
_servicedata
Changed
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/jp9000/obs-studio.git</param>
- <param name="changesrevision">6550c0dfaaf3b02da6c58bcdde7735682daf2dce</param>
+ <param name="changesrevision">0d4d7f617c3f9a51ae04057ab78c4c7e4c78034b</param>
</service>
</servicedata>
obs-studio-23.1.0.tar.xz/UI/data/themes/Default.qss
Deleted
-/* Intentionnally left blank */
-/* Themes are created using Qt CSS, you can visit */
-/* http://doc.qt.io/qt-5/stylesheet-reference.html and */
-/* http://doc.qt.io/qt-5/stylesheet-examples.html for examples. */
-
-/* OBS will use the theme filename for the settings. */
-/* You can ship images using relative paths in qss. */
-/* Dark Theme is a good place to start if you need */
-/* a template. */
-
-
-/* We need to set back the icons, or the preview wont stick. */
-
-* [themeID="addIconSmall"] {
- qproperty-icon: url(:/res/images/add.png);
-}
-
-* [themeID="removeIconSmall"] {
- qproperty-icon: url(:/res/images/list_remove.png);
-}
-
-* [themeID="propertiesIconSmall"] {
- qproperty-icon: url(:/res/images/properties.png);
-}
-
-* [themeID="configIconSmall"] {
- qproperty-icon: url(:/res/images/configuration21_16.png);
-}
-
-* [themeID="upArrowIconSmall"] {
- qproperty-icon: url(:/res/images/up.png);
-}
-
-* [themeID="refreshIconSmall"] {
- qproperty-icon: url(:/res/images/refresh.png);
-}
-
-* [themeID="downArrowIconSmall"] {
- qproperty-icon: url(:/res/images/down.png);
-}
-
-MuteCheckBox {
- outline: none;
-}
-
-MuteCheckBox::indicator:checked {
- image: url(:/res/images/mute.png);
-}
-
-MuteCheckBox::indicator:unchecked {
- image: url(:/res/images/unmute.png);
-}
-
-SourceTreeSubItemCheckBox {
- background: transparent;
- outline: none;
-}
-
-SourceTreeSubItemCheckBox::indicator {
- width: 10px;
- height: 10px;
-}
-
-SourceTreeSubItemCheckBox::indicator:checked {
- image: url(:/res/images/expand.png);
-}
-
-SourceTreeSubItemCheckBox::indicator:unchecked {
- image: url(:/res/images/collapse.png);
-}
-
-OBSHotkeyLabel[hotkeyPairHover=true] {
- color: red;
-}
-
-
-/* Volume Control */
-
-VolumeMeter {
- qproperty-backgroundNominalColor: rgb(15, 100, 15);
- qproperty-backgroundWarningColor: rgb(100, 100, 15);
- qproperty-backgroundErrorColor: rgb(100, 15, 15);
- qproperty-foregroundNominalColor: rgb(50, 200, 50);
- qproperty-foregroundWarningColor: rgb(255, 200, 50);
- qproperty-foregroundErrorColor: rgb(200, 50, 50);
- qproperty-magnitudeColor: rgb(0, 0, 0);
- qproperty-majorTickColor: rgb(0, 0, 0);
- qproperty-minorTickColor: rgb(50, 50, 50);
-}
-
-
-/* Label warning/error */
-
-QLabel#warningLabel {
- color: rgb(192, 128, 0);
- font-weight: bold;
-}
-
-QLabel#errorLabel {
- color: rgb(192, 0, 0);
- font-weight: bold;
-}
-
-* [themeID="warning"] {
- color: rgb(192, 128, 0);
- font-weight: bold;
-}
-
-* [themeID="error"] {
- color: rgb(192, 0, 0);
- font-weight: bold;
-}
-
-* [themeID="good"] {
- color: rgb(0, 128, 0);
- font-weight: bold;
-}
-
-/* About dialog */
-
-* [themeID="aboutName"] {
- font-size: 36px;
- font-weight: bold;
-}
-
-* [themeID="aboutVersion"] {
- font-size: 16px;
- margin-bottom: 20px;
-}
-
-* [themeID="aboutInfo"] {
- margin-bottom: 20px;
-}
-
-* [themeID="aboutHLayout"] {
- background-color: #DCD9D7;
-}
-
-/* Preview background color */
-
-* [themeID="displayBackgroundColor"] {
- qproperty-displayBackgroundColor: rgb(76, 76, 76);
-}
-
-/* Preview/Program labels */
-
-* [themeID="previewProgramLabels"] {
- font-size: 18px;
- font-weight: bold;
- color: rgb(122,121,122);
-}
-
-/* Settings Icons */
-
-OBSBasicSettings {
- qproperty-generalIcon: url(:settings/images/settings/general.svg);
- qproperty-streamIcon: url(:settings/images/settings/stream.svg);
- qproperty-outputIcon: url(:settings/images/settings/output.svg);
- qproperty-audioIcon: url(:settings/images/settings/audio.svg);
- qproperty-videoIcon: url(:settings/images/settings/video.svg);
- qproperty-hotkeysIcon: url(:settings/images/settings/hotkeys.svg);
- qproperty-advancedIcon: url(:settings/images/settings/advanced.svg);
-}
obs-studio-23.1.0.tar.xz/UI/dist
Deleted
-(directory)
obs-studio-23.1.0.tar.xz/UI/dist/obs.desktop
Deleted
-[Desktop Entry]
-Version=1.0
-Name=OBS Studio
-GenericName=Streaming/Recording Software
-GenericName[fr]=Logiciel d'enregistrement/diffusion
-Comment=Free and Open Source Streaming/Recording Software
-Comment[fr]=Logiciel libre d'enregistrement et de diffusion sur Internet
-Comment[ru]=Бесплатная программа с открытым кодом для записи/трансляции видео
-Exec=obs
-Icon=obs
-Terminal=false
-Type=Application
-Categories=AudioVideo;Recorder;
-StartupNotify=true
obs-studio-23.1.0.tar.xz/UI/locked-checkbox.cpp
Deleted
-#include <QPaintEvent>
-#include <QPixmap>
-#include <QPainter>
-#include "locked-checkbox.hpp"
-
-#include <util/c99defs.h>
-
-LockedCheckBox::LockedCheckBox() : QCheckBox()
-{
- QString lockedFile;
- QString unlockedFile;
- if (devicePixelRatio() >= 2) {
- lockedFile = ":/res/images/locked_mask_2x.png";
- unlockedFile = ":/res/images/unlocked_mask_2x.png";
- } else {
- lockedFile = ":/res/images/locked_mask.png";
- unlockedFile = ":/res/images/unlocked_mask.png";
- }
- lockedImage = QPixmap::fromImage(QImage(lockedFile));
- unlockedImage = QPixmap::fromImage(QImage(unlockedFile));
- setMinimumSize(16, 16);
-
- setStyleSheet("outline: none;");
-}
-
-void LockedCheckBox::paintEvent(QPaintEvent *event)
-{
- UNUSED_PARAMETER(event);
-
- QPixmap &pixmap = isChecked() ? lockedImage : unlockedImage;
- QImage image(pixmap.size(), QImage::Format_ARGB32);
-
- QPainter draw(&image);
- draw.setCompositionMode(QPainter::CompositionMode_Source);
- draw.drawPixmap(0, 0, pixmap.width(), pixmap.height(), pixmap);
- draw.setCompositionMode(QPainter::CompositionMode_SourceIn);
- draw.fillRect(QRectF(QPointF(0.0f, 0.0f), pixmap.size()),
- palette().color(foregroundRole()));
-
- QPainter p(this);
- p.drawPixmap(0, 0, 16, 16, QPixmap::fromImage(image));
-}
obs-studio-23.1.0.tar.xz/UI/source-list-widget.cpp
Deleted
-#include <QMouseEvent>
-
-#include <vector>
-
-#include "qt-wrappers.hpp"
-#include "source-list-widget.hpp"
-
-Q_DECLARE_METATYPE(OBSSceneItem);
-
-void SourceListWidget::mouseDoubleClickEvent(QMouseEvent *event)
-{
- if (event->button() == Qt::LeftButton)
- QListWidget::mouseDoubleClickEvent(event);
-}
-
-void SourceListWidget::dropEvent(QDropEvent *event)
-{
- QListWidget::dropEvent(event);
- if (!event->isAccepted() || !count())
- return;
-
- auto GetSceneItem = [&](int i)
- {
- return item(i)->data(Qt::UserRole).value<OBSSceneItem>();
- };
-
- std::vector<obs_sceneitem_t*> newOrder;
- newOrder.reserve(count());
- for (int i = count() - 1; i >= 0; i--)
- newOrder.push_back(GetSceneItem(i));
-
- auto UpdateOrderAtomically = [&](obs_scene_t *scene)
- {
- ignoreReorder = true;
- obs_scene_reorder_items(scene, newOrder.data(),
- newOrder.size());
- ignoreReorder = false;
- };
- using UpdateOrderAtomically_t = decltype(UpdateOrderAtomically);
-
- auto scene = obs_sceneitem_get_scene(GetSceneItem(0));
- obs_scene_atomic_update(scene, [](void *data, obs_scene_t *scene)
- {
- (*static_cast<UpdateOrderAtomically_t*>(data))(scene);
- }, static_cast<void*>(&UpdateOrderAtomically));
-}
obs-studio-23.1.0.tar.xz/UI/source-list-widget.hpp
Deleted
-#pragma once
-
-#include <QListWidget>
-
-class QMouseEvent;
-
-class SourceListWidget : public QListWidget {
- Q_OBJECT
-
- bool ignoreReorder = false;
-public:
- inline SourceListWidget(QWidget *parent = nullptr)
- : QListWidget(parent)
- {
- }
-
- bool IgnoreReorder() const { return ignoreReorder; }
-
-protected:
- virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
- virtual void dropEvent(QDropEvent *event) override;
-};
obs-studio-23.1.0.tar.xz/UI/visibility-checkbox.cpp
Deleted
-#include <QPaintEvent>
-#include <QPixmap>
-#include <QPainter>
-#include "visibility-checkbox.hpp"
-
-#include <util/c99defs.h>
-
-VisibilityCheckBox::VisibilityCheckBox() : QCheckBox()
-{
- QString checkedFile;
- QString uncheckedFile;
- if (devicePixelRatio() >= 2) {
- checkedFile = ":/res/images/visible_mask_2x.png";
- uncheckedFile = ":/res/images/invisible_mask_2x.png";
- } else {
- checkedFile = ":/res/images/visible_mask.png";
- uncheckedFile = ":/res/images/invisible_mask.png";
- }
- checkedImage = QPixmap::fromImage(QImage(checkedFile));
- uncheckedImage = QPixmap::fromImage(QImage(uncheckedFile));
- setMinimumSize(16, 16);
-
- setStyleSheet("outline: none;");
-}
-
-void VisibilityCheckBox::paintEvent(QPaintEvent *event)
-{
- UNUSED_PARAMETER(event);
-
- QPixmap &pixmap = isChecked() ? checkedImage : uncheckedImage;
- QImage image(pixmap.size(), QImage::Format_ARGB32);
-
- QPainter draw(&image);
- draw.setCompositionMode(QPainter::CompositionMode_Source);
- draw.drawPixmap(0, 0, pixmap.width(), pixmap.height(), pixmap);
- draw.setCompositionMode(QPainter::CompositionMode_SourceIn);
- draw.fillRect(QRectF(QPointF(0.0f, 0.0f), pixmap.size()),
- palette().color(foregroundRole()));
-
- QPainter p(this);
- p.drawPixmap(0, 0, 16, 16, QPixmap::fromImage(image));
-}
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/premultiplied.inc
Deleted
-float4 convert_pmalpha(float4 color)
-{
- float4 ret = color;
- if (color.a >= 0.001)
- ret.xyz /= color.a;
- else
- ret = float4(0.0, 0.0, 0.0, 0.0);
- return ret;
-}
obs-studio-23.2.0.tar.xz/.github
Added
+(directory)
obs-studio-23.2.0.tar.xz/.github/FUNDING.yml
Added
+open_collective: obsproject
+patreon: obsproject
obs-studio-23.1.0.tar.xz/AUTHORS -> obs-studio-23.2.0.tar.xz/AUTHORS
Changed
wayne wang
Translators:
-Gol D. Ace (goldace)
-ynetwork
-medicmomcilo
-SuslikV
-Gige
-shousa
-grocal
-georgianizator
-Jaime Muñoz Martín (jmmartin_5)
-Anton R (FirePhoenix)
-Arkkis (j)
-Bob Liu (Akagi201)
-Jirka 'Venty' Michel (VentyCZ)
-NCAA
-Alexander Gabilondo (alexgabi)
-Eric Bataille (ThoNohT)
-TzeKei Lee (chikei)
-Shaolin (admshao)
-GunChleoc
-Manfre#9262 (manfre)
-Vainock (ivo.lemmert)
-Alek Nirov (dectanova)
-Kenta Takumi (kenta0644)
-Michael Fabian Dirks (Xaymar)
-Marcos Vidal Martinez (M4RK22)
-dodgepong
-amirsher
-Imre Kristoffer Eilertsen (DandelionSprout)
-Luki (luki1412)
-pkviet
-Johnny “max20091” Utah (boostyourprogram)
-Cristian Silaghi (stelistcristi)
-jermel
-banrek
-dandalion
-Ali Kömesöğütlü (Mobile46) (byzlo685)
-shamuntohamd
-LordShadow95
-dwaeji-aizelle
-Albakham (albakham)
-Taesh (magnusmbratteng)
-radzaquiel
-Jaime Martinez Rincon (mrjaime1999)
-Jens Hyllegaard (Hyllegaard)
-anto27
-j3dy
-nyakayed
-Erik Bročko (ericek111)
-Vainbot
-Jarska
-Katerina (katerinaramm)
-Marocco2
-Stéphane Lepin (Palakis)
-MartinEwing
-Xesús M. Mosquera Carregal (xesusmosquera)
-Ev1lbl0w
-wwj402_github
-Scourgemcdak
-Roberto Lorenzo (HonzoNebro)
-ZILZAL
-Loyd Stephen Jayme (loydjayme25)
-Sigge Stjärnholm (Kladdy)
-amsyar ZeRo (amsyarminer555)
-imcesca
-jbeguna04
-Hưng Nguyễn (hoyostudio)
-lonelywolf11
-omer.karagoz (mrkaragoz)
-Tocram2 (tocram2)
-Michel Snippe (michelsnippe)
-Matt Gajownik (WizardCM)
-philiparniebinag
-Nunzio Conte (nunzioconte54)
-Benet R. i Camps (BennyBeat) (BennyBeat)
-Greendweller
-kristjan.krusic (krusic22)
-smart2128
-Mepharees
-jmontane
-Monsteer
-Nil Campamà (Soifam)
-Ramon Mendes (rbrgameplays)
-Benjamin Cambour (lesinfox)
-Abdullah AL-Qahtani (Za7ef_SA)
-Osoitz
-srdjan_m
-MZ MAXIMUM (mahdigamermax)
-Pavel (Shevalie)
-Fabio Madia (Shaolin)
-Zakxaev68
-VNGXR
-begjan
-Chien-Yu Lin (u900011)
-Patrick Williamson (wpatrick59)
-majdcomp
-Dalia Sofía Magallón Páramo (SweetSofiMC)
-MaltahlGaming (maltahlgaming)
-Justas Vilimas (tyntas)
-Yberion
-Hexcolyte
-AthlonHD
-Ján M (longmoped)
-Anders G. Jørgensen (spirit55555)
-Léo (leeo97one)
-Tiwi90 (tiwi90)
-Mats Edvin Aarø (matsedvin)
-Coen (Trigstur)
-ngoisaosang
-André Biscaia (LazP)
-Alex E. D. B. (alexedb)
-Julian_Lai
-Pikana
-kalmarin
-Tasos Sahanidis (tatokis)
-Alireza Firouzi (pikhoshorg)
-EG Gamer (eggamer131)
-Vassamo (jotpl69)
-George T. (tzikas97)
-RisedSky (THEMINECRAFT951)
-Tomás Antunes (tomasantunes)
-AndresTraks
-pan93412
-Seyhan Halil (yildirim17)
-exeldro
-Cemal Dursun (cmldrs)
-Michael Yeh (hinet60613)
-BoboopTeam
-Hisashi
-Laccy IEST (Laccy)
-DoK_-
-Sven Kirschbaum (fallobst22) (fallobst22)
-Andrei Ionescu (abcdedjdmddx)
-Bugo
-David Kuo (s50407s)
-Pilar G. (TheMadnessLady)
-Michele (ScrappyCocco)
-Guilherme Dias (ThisGuy)
-myjourney in Steemit (myjourney)
-joaofvieira
-Danny (Dkamps18)
-Nicole (Dutchess_Nicole)
-peymanr34
-Licardo
-areedw
-PabloLiu (719018105)
-BlakeNowah
-Gregor Bigalke (gregtcltk)
-The Syntox (TheSyntox)
-xNaii (lyrikas5)
-aaakjt
-LittleGirl_WithPonyTail (alexs1320)
-Aredio Vani (aredio.vani)
-You-Ruei Tzeng (e222et)
-joaoboia
-Michał Durak (micechal)
-Anton Lokaj (anlo)
-DarckCrystale
-Manuel (ElectronicWar)
-Savas Tokmak (Laserist)
-alexandre433
-Dennis Giebert (Isegrim) (isegrimderwolf)
-robbert0891 (robbertoorschot38)
-MG lolenstine (mglolenstine)
-Sasasu
-mgKaiztra
-Tommaso Cammelli (tomganguz) (tomganguz)
-Umut kılıç (kilic190787)
-Ben Turner (ben-turner)
-Tim (robske_110) (robske110)
-Matthew Hatcher (MatthewSH)
-TFSThiagoBR98
-WeingHong
-Andrei Stepanov (adem4ik)
-Drake Strike (phjtieudoc)
-Gustav Ekner (ekner)
-Tommy (nwgat)
-Runicar (dajtisina)
-Albin Pllana (albinnpllanaa)
-Tero Keso (tero.keso)
-DarkInFire
-Aleix Vidal i Gaya (leixet)
-CaioWzy
-Syver Stensholt (sssandum)
-Martazza
-ScemEnzo
-mizifih
-Theguiguix
-Jasper J (JassieJ)
-Alex Thomassen (Decicus)
-Oddbjørn Grytdal (Fooshi)
-Damian Korcz (damikiller)
-Martin Georgiev (DivideByNone)
-Richard Stanway (r1ch)
-Murat Karagöz (anemon_1994)
-鲜童 (xiananjyzy)
-Youtubeur FR│Giaco35 (Giaco35)
-Edoardo Macrì (edomacri)
-Dremski
-André Gama (ToeOficial)
-Łukasz Wójcik (lwojcik)
-sakuhanachan* (sakuhanachanloli)
-Victor Paul (corvinpaul)
-Kryštof Černý (cleverline1mc)
-fromgate
-Strange Grey Cat (StrangeGreyCat)
-معتصم دعنا (rozana-media)
-Wildrage
-Sergey (LegionAnon)
-Skellytone
-cai_miao
-mdod
-craftwar
-clr0dr1g
-aalonsomb
-Daniel Wieczorek (Kennyluz)
-Red Dayao (steemitph)
-steve_fr
-Andy (anry025)
-Acamicamacaraca
-Thomas (thomassth)
-EduCare Razmik Badalyan (badalyanrazmik)
-Opportunity (OpportunityLiu)
-Maximiliano Schtroumpftech Pena-Roig (som2tokmynam)
-MarsYoung
-Sander Skjegstad (r530er)
-Mihai G (babasghenciu)
-Rana Awais (ehtisham)
-ธีรภัทร์ โยชนา (Gataro)
-Sakia Normal Human (arcanaarcana5)
-Benjamin Klettbach (benklett)
-Mateusz (Silesianek)
-kyllian (tardigradeus)
-Edoardo “OfficialDJMela” Macrì (agersforum)
-Forbidden (cptbl00dra1n)
-Jonas Otto (jottosmail)
-Carlos Plata (carlosesgenial33)
-RedditRook
-Inku Xuan (inkuxuan)
-Jonatan Nyberg (sweuser)
-Alex Kalles (alexakis1997)
-Юрій (Devinit)
-Silpheel
-Pyscowicz
-Bond-009
-OsteHovel
-ibnehayati
-Hà Phi Hùng (haphihungcom)
-gianni morandi (strabbioboy)
-Anders Urban (minikaliffen)
-Chemi
-Saleh Luxmaroc (salehoukiki)
-gecebekcisi1
-WurstOnAir
-GANGAT Naeem (zboggum)
-Grimpy
-Viktor Kitov (viktorkitov)
-markpc
-txaro
-Andrea-M3
-IoeCmcomc (Ioe2015) (hopdaigia2004)
-henrycontreras
-Serge Sklyarov (sergesklyarov)
-Uri Ben Yossef (uribenyossef)
-yunluzhang
-Grisou2907
-Omer Kurdish (OmerKurd)
-lebaston100.de
-eskaidom (sergiomalagonmartin)
-BaguetteDePain_
-Marcos Vidal (markitos.maki22)
-Tensai
-Ruben Deig Ramos (rdeigramos)
-eZ_KrieG3R | Der Fabse (fabian.schwarz.26.06.1998)
-Fisherozzo
-copyliu
-Olle Dahström (odahlstrom)
-Deski_
-Mustafa2018
-F_Producktions
-Stoyan Stoyanov (sstoyanov)
-Bilguun Ochirbat (Bil0203)
-LoLLy Nka (lollynka279)
-opl
-Boyuan Yang (073plan)
-SneakyFish5
-Sergio Beneduce (sbeneduce)
-Light1c3
-eemiroj
-Nurul Huda (nurulhuda859)
-Obama (Obama44)
-OfficialwobY
-Ndalabo Taema (hake_bsowq)
-Ray (Ipsumry)
-Kiznoh
-makiza1 (micosil_2)
-Stanislav_Evtimov
-djsavta
-epic_ziver_D
-illusdidi
-Watson Tsai (ashaneba)
-Alessandro Sarto (alesarto03)
-Legend27
-b__dm
-Han-Jen Cheng (notexist)
-Inndy.Lin (inndy)
-Mathieu Hautebas (matteyeux)
-🌠 DarK | #Hello 🌠 (DarKTV_FR)
-Maky (the.real.maky)
-Sawanyo
-Jong Kwon Choi (dailypro)
-Harm van den Hoek (harm27)
-David Sonico (davidsubsonico)
-Adam Liszkai (adamos42)
-jkcoaster
-iosifidis
-Vlad (KoTmaxHo)
-manjotsingh0202
-mustafaa
-Eleazar Córcoles (MtrElee3)
-Yolopix
-tburette
-Gabriel Dugny (Gabigabigo)
-បងមាន តែអូន (cheaiphone267)
-Adrien “GameZone Tv” de Decker (redcraft007)
-Palana
-SkyLion
-Marque Ziqulr (lugtelort)
-chaironeko
-Samuel Nthoroane (Samuel_Nthoroane)
-etxondoko
-Hani Sweileh (hno.sweileh)
-Mixaill
-Zalki
-BWU Wheelman (Wheelman)
-Raylir
-盛凤阁 (execzero)
-nongnoobjung (kitcharuk_4)
-Jonathan (macburgerjunior)
-Bing Feng (fengbing123)
-McGuygnol
-ArcaneWater
-geimfis
-vargag159
-Charlie W. (wallichc)
-Johan Keller Jensen (JKeller)
-科技小白堂 (lipeng0820)
-FC Barcelona HD (kurdnews)
-Enderdrache LP (enderdrachelp)
-Sergei Fug1t1v3 (fug)
-ak-47root
-Runoff Screen (glebpozbnakov62)
-Meng Hao Li (GazCore)
-andymidside
-Append Huang (append)
-Santiago Pereyra (SannttVIII)
-L1Q
-Khedi
-Bo Alsemgeest (bo.alsemgeest.wausie)
-Themis T. (Deminho)
-powerdef
-Alexis Brandner (Alexinfos)
-TheOver (upmeboost)
-WeiYuanStudio
-DevilLorde
-Ivan (SKDown)
-Camille Nury (kamsdu30)
-Walt Gee (vovanych)
-HeroGamers (Fido2603)
-Prince_of_Raop
-NoPressure
-flor.com (florretardada)
-Robin Hielscher (Jack0r)
-Patrick Frings (Ragnos)
-Pere O. (gotrunks)
-Noi (Noi_noel2647)
-Hydroboost
-JackYeah
-Christian Henriksen (cnhenriksen)
-Henrik Mattsson-Mårn (rchk)
-WaterOtaku
-yair (5shekel)
-神成フィルム (kami00nari)
-JorRy
-Alican Gultekin (Vitaefinis)
-Vũ Hải Tây (tayngungo1999)
-Ramon Gonzalez (ramon200000)
-Esdras Tarsis (esdrastarsis)
-SandoBY
-אפיק רוזנר (afikr333)
-Federico Tensi (habby1337)
-Yuri Mihaqlov (yurijmi)
-Md Arafat (zonoiko)
-ghsi
-Mnsor The-Ghost (mnsor1722011)
-Julian Meijboom (julianmeijboom)
-Türker Yıldırım (turkeryildirim)
-Maksym Tymoshyk (maximillian_)
-Warchamp7
-FaZe Fakay (fazefakay)
-abydosan (abydoshun)
-Bob Wei (BobWaver)
-OYYZ
-Ville Närhi (daimaah)
-Tal Machani (talmachani)
-曹恩逢 (nelson22768384)
-Julia Drewniak (ewagsi)
-Jonas Svensson (jonassanojj99)
-RyyzQ
-antome
-basakbk
-Rodrigo Ipince (ipince)
-Jimmy Huang (f56112000)
-AndreLeonardo (andreleonardoyt)
-wordlessWind (wordlesswind)
-JustMaffie
-Aniol Pagès (aniolpages)
-Daniel Aundal (aundal)
-Alessandro Iepure (alessandro_iepure)
-SkylixX
-Hannes Blåman (thebluis)
-TR1D
-BoJustus
-ncb
-Mats Andreassen (MatsA)
-tomoe-musashi
-TacticalKebab
-Kuji Kitamura (KujiKita)
-cylin
-MUHADDIS MEDIA (muhaddismedia)
-Alex Shafer (enzanki-ars)
-Nicolai (Nicolai9852)
-Yuki Yu (Yukiyu)
-Michał Lewczak (michal200507)
-Patryk Kunda (ner.i.ol)
-Tiim
+Afrikaans:
+ - Samuel Nthoroane (Samuel_Nthoroane)
+Albanian:
+ - Albin Pllana (albinnpllanaa)
+ - Aredio Vani (aredio.vani)
+Arabic:
+ - ZILZAL
+ - Abdullah AL-Qahtani (Za7ef_SA)
+ - majdcomp
+ - aaakjt
+ - Gol D. Ace (goldace)
+ - BWU Wheelman (Wheelman)
+ - Saleh Luxmaroc (salehoukiki)
+ - معتصم دعنا (rozana-media)
+ - Hani Sweileh (hno.sweileh)
+ - Mustafa2018
+ - Tensai
+ - Vainock (ivo.lemmert)
+ - Mnsor The-Ghost (mnsor1722011)
+ - FC Barcelona HD (kurdnews)
+ - Ndalabo Taema (hake_bsowq)
+ - dodgepong
+ - chaironeko
+Azerbaijani:
+ - Shahin Farzaliyev (Khan27)
+Basque:
+ - Alexander Gabilondo (alexgabi)
+ - Osoitz (Osoitz)
+ - Gol D. Ace (goldace)
+ - txaro (txaro)
+ - EG Gamer (eggamer131)
+ - etxondoko
+ - Vainock (ivo.lemmert)
+ - dodgepong
+Bengali:
+ - shamuntohamd
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Nurul Huda (nurulhuda859)
+ - Md Arafat (zonoiko)
+Bulgarian:
+ - j3dy
+ - kalmarin
+ - Zakxaev68
+ - Seyhan Halil (yildirim17)
+ - Dremski
+ - Martin Georgiev (DivideByNone)
+ - Viktor Kitov (viktorkitov)
+ - Stanislav_Evtimov
+ - Stoyan Stoyanov (sstoyanov)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Ivan (SKDown)
+ - Warchamp7
+Catalan:
+ - Jaime Muñoz Martín (jmmartin_5)
+ - jmontane
+ - Nil Campamà (Soifam)
+ - Benet R. i Camps (BennyBeat) (BennyBeat)
+ - Aleix Vidal i Gaya (leixet)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Pere O. (gotrunks)
+ - Aniol Pagès (aniolpages)
+Chinese Simplified:
+ - Bob Liu (Akagi201)
+ - AlexGuo1998 (AlexGuo1998)
+ - wwj402_github
+ - PabloLiu (719018105)
+ - Gol D. Ace (goldace)
+ - Licardo (Licardo)
+ - AthlonHD (AthlonHD)
+ - Hexcolyte (Hexcolyte)
+ - Sasasu (Sasasu)
+ - cai_miao
+ - Boyuan Yang (073plan)
+ - David Kuo (s50407s)
+ - 鲜童 (xiananjyzy)
+ - Opportunity (OpportunityLiu)
+ - Forbidden (cptbl00dra1n)
+ - yunluzhang
+ - Inku Xuan (inkuxuan)
+ - copyliu
+ - Bing Feng (fengbing123)
+ - pan93412
+ - WeiYuanStudio
+ - 科技小白堂 (lipeng0820)
+ - Richard Stanway (r1ch)
+ - WaterOtaku
+ - dodgepong
+ - MarsYoung
+ - sorayuki
+ - cylin
+ - Vainock (ivo.lemmert)
+ - 赵杭灵 (h1679083640)
+ - wordlessWind (wordlesswind)
+ - OYYZ
+ - FaZe Fakay (fazefakay)
+ - Bob Wei (BobWaver)
+Chinese Traditional:
+ - TzeKei Lee (chikei)
+ - dodgepong
+ - Julian_Lai
+ - Chien-Yu Lin (u900011)
+ - pan93412
+ - David Kuo (s50407s)
+ - Michael Yeh (hinet60613)
+ - You-Ruei Tzeng (e222et)
+ - myjourney in Steemit (myjourney)
+ - craftwar
+ - Gol D. Ace (goldace)
+ - Inndy.Lin (inndy)
+ - Han-Jen Cheng (notexist)
+ - Watson Tsai (ashaneba)
+ - Meng Hao Li (GazCore)
+ - abc0922001
+ - Thomas (thomassth)
+ - louis921222
+ - ak-47root
+ - Jimmy Huang (f56112000)
+ - cai_miao
+ - Append Huang (append)
+ - 曹恩逢 (nelson22768384)
+ - Vainock (ivo.lemmert)
+ - xixiaofan (Hs0)
+ - tomoe-musashi
+ - FaZe Fakay (fazefakay)
+ - chaironeko
+ - JackYeah
+Croatian:
+ - medicmomcilo
+ - srdjan_m
+ - Runicar (dajtisina)
+ - OfficialwobY
+ - Gol D. Ace (goldace)
+ - Wildrage
+ - Maky (the.real.maky)
+ - Vainock (ivo.lemmert)
+ - dodgepong
+Czech:
+ - Jirka 'Venty' Michel (VentyCZ)
+ - Kryštof Černý (cleverline1mc)
+ - Sawanyo
+ - Kiznoh
+ - Gol D. Ace (goldace)
+ - Erik Bročko (ericek111)
+ - Vainock (ivo.lemmert)
+ - dodgepong
+Danish:
+ - NCAA (NCAA)
+ - Jens Hyllegaard (Hyllegaard)
+ - Anders G. Jørgensen (spirit55555)
+ - MaltahlGaming (maltahlgaming)
+ - Gol D. Ace (goldace)
+ - Anders Urban (minikaliffen)
+ - Richard Stanway (r1ch)
+ - Johan Keller Jensen (JKeller)
+ - Christian Henriksen (cnhenriksen)
+ - Vainock (ivo.lemmert)
+ - Marque Ziqulr (lugtelort)
+ - HeroGamers (Fido2603)
+ - Nicolai (Nicolai9852)
+ - Daniel Aundal (aundal)
+Dutch:
+ - Eric Bataille (ThoNohT)
+ - Michel Snippe (michelsnippe)
+ - Greendweller
+ - Coen (Trigstur)
+ - exeldro (exeldro)
+ - Nicole (Dutchess_Nicole)
+ - robbert0891 (robbertoorschot38)
+ - Danny (Dkamps18)
+ - Gol D. Ace (goldace)
+ - Albakham (albakham)
+ - Jasper J (JassieJ)
+ - Bond-009
+ - b__dm
+ - F_Producktions
+ - Harm van den Hoek (harm27)
+ - markpc
+ - JorRy
+ - Julian Meijboom (julianmeijboom)
+ - Bo Alsemgeest (bo.alsemgeest.wausie)
+ - andymidside
+ - JustMaffie (JustMaffie)
+ - RyyzQ
+ - Vainock (ivo.lemmert)
+Estonian:
+ - MartinEwing
+ - AndresTraks
+ - Gol D. Ace (goldace)
+Filipino:
+ - dwaeji-aizelle (dwaeji-aizelle)
+ - jermel
+ - nyakayed (nyakayed)
+ - Loyd Stephen Jayme (loydjayme25)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Raylir
+Finnish:
+ - Arkkis (j)
+ - Jarska
+ - dodgepong
+ - Pyscowicz (Pyscowicz)
+ - Gol D. Ace (goldace)
+ - Obama (Obama44)
+ - Tero Keso (tero.keso)
+ - Vainock (ivo.lemmert)
+ - chaironeko
+ - Ville Närhi (daimaah)
+French:
+ - radzaquiel
+ - pkviet
+ - Stéphane Lepin (Palakis)
+ - Yberion
+ - Tocram2 (tocram2)
+ - DoK_-
+ - BoboopTeam
+ - Léo (leeo97one)
+ - Benjamin Cambour (lesinfox)
+ - RisedSky (THEMINECRAFT951)
+ - DarkInFire
+ - Youtubeur FR│Giaco35 (Giaco35)
+ - Pikana (Pikana)
+ - steve_fr
+ - Ben Turner (ben-turner)
+ - Deski_ (Deski_)
+ - DarckCrystale
+ - Gol D. Ace (goldace)
+ - Grisou2907
+ - Theguiguix
+ - Gabriel Dugny (Gabigabigo)
+ - McGuygnol
+ - Yolopix
+ - GANGAT Naeem (zboggum)
+ - kyllian (tardigradeus)
+ - BaguetteDePain_
+ - Richard Stanway (r1ch)
+ - Mathieu Hautebas (matteyeux)
+ - Zalki
+ - dodgepong
+ - 🌠 DarK | #Hello 🌠 (DarKTV_FR)
+ - Vainock (ivo.lemmert)
+ - illusdidi
+ - Adrien “GameZone Tv” de Decker (redcraft007)
+ - Warchamp7
+ - Albakham (albakham)
+ - SkylixX
+ - chaironeko
+ - Camille Nury (kamsdu30)
+ - Alexis Brandner (Alexinfos)
+ - tburette
+Galician:
+ - Xesús M. Mosquera Carregal (xesusmosquera)
+ - Gol D. Ace (goldace)
+ - chaironeko
+ - Vainock (ivo.lemmert)
+Georgian:
+ - georgianizator
+ - EduCare Razmik Badalyan (badalyanrazmik)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+German:
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Michael Fabian Dirks (Xaymar)
+ - dodgepong
+ - Dennis Giebert (Isegrim) (isegrimderwolf)
+ - Benjamin Klettbach (benklett)
+ - Gregor Bigalke (gregtcltk)
+ - Sven Kirschbaum (fallobst22) (fallobst22)
+ - Manuel (ElectronicWar)
+ - eZ_KrieG3R | Der Fabse (fabian.schwarz.26.06.1998)
+ - Palana
+ - Tim (robske_110) (robske110)
+ - Jonas Otto (jottosmail)
+ - mdod
+ - Jonathan (macburgerjunior)
+ - Prince_of_Raop
+ - Enderdrache LP (enderdrachelp)
+ - Robin Hielscher (Jack0r)
+ - lebaston100.de
+ - Richard Stanway (r1ch)
+ - Patrick Frings (Ragnos)
+ - WurstOnAir
+ - BoJustus
+ - AndreLeonardo (andreleonardoyt)
+ - Tiim
+Greek:
+ - Scourgemcdak
+ - Mepharees
+ - Katerina (katerinaramm)
+ - Tasos Sahanidis (tatokis)
+ - George T. (tzikas97)
+ - Alex Kalles (alexakis1997)
+ - iosifidis
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - dodgepong
+ - Themis T. (Deminho)
+ - chaironeko
+Hebrew:
+ - amirsher
+ - lonelywolf11
+ - Chemi (Chemi)
+ - epic_ziver_D (epic_ziver_D)
+ - Uri Ben Yossef (uribenyossef)
+ - Gol D. Ace (goldace)
+ - Light1c3
+ - ghsi
+ - yair (5shekel)
+ - TheOver (upmeboost)
+ - djsavta
+ - אפיק רוזנר (afikr333)
+ - Vainock (ivo.lemmert)
+ - Tal Machani (talmachani)
+Hindi:
+ - SneakyFish5
+ - shamuntohamd
+Hungarian:
+ - Gige
+ - Gol D. Ace (goldace)
+ - Adam Liszkai (adamos42)
+ - abydosan (abydoshun)
+ - dodgepong
+ - vargag159
+ - Vainock (ivo.lemmert)
+Italian:
+ - Manfre#9262 (manfre)
+ - LordShadow95
+ - Marocco2
+ - smart2128
+ - Tiwi90 (tiwi90)
+ - dodgepong
+ - imcesca
+ - Michele (ScrappyCocco)
+ - Edoardo Macrì (edomacri)
+ - ScemEnzo
+ - Tommaso Cammelli (tomganguz) (tomganguz)
+ - Edoardo “OfficialDJMela” Macrì (agersforum)
+ - Martazza (Martazza)
+ - Gol D. Ace (goldace)
+ - gianni morandi (strabbioboy)
+ - Fisherozzo
+ - Alessandro Sarto (alesarto03)
+ - Sergio Beneduce (sbeneduce)
+ - Albakham (albakham)
+ - Andrea-M3
+ - SkyLion
+ - Vainock (ivo.lemmert)
+ - Federico Tensi (habby1337)
+ - Silpheel
+ - Alessandro Iepure (alessandro_iepure)
+ - riccardotornesello
+Japanese:
+ - shousa
+ - Kenta Takumi (kenta0644)
+ - dodgepong
+ - SplatRT
+ - Gol D. Ace (goldace)
+ - 神成フィルム (kami00nari)
+ - ato lash (hal_shu_sato)
+ - Noi (Noi_noel2647)
+ - CKK COBALT (CKKCOBALT)
+ - Yuki Yu (Yukiyu)
+ - chaironeko
+ - Bob Liu (Akagi201)
+ - Alex Shafer (enzanki-ars)
+ - Vainock (ivo.lemmert)
+Khmer:
+ - បងមាន តែអូន (cheaiphone267)
+Korean:
+ - ynetwork (ynetwork)
+ - Gol D. Ace (goldace)
+ - RedditRook
+ - Jong Kwon Choi (dailypro)
+ - antome
+Kurdish:
+ - Omer Kurdish (OmerKurd)
+Lithuanian:
+ - Justas Vilimas (tyntas)
+ - xNaii (lyrikas5)
+ - Vainock (ivo.lemmert)
+ - Gol D. Ace (goldace)
+Malay:
+ - amsyar ZeRo (amsyarminer555)
+ - WeingHong
+ - Gol D. Ace (goldace)
+ - dodgepong
+ - Vainock (ivo.lemmert)
+Mongolian:
+ - begjan
+ - Vainock (ivo.lemmert)
+Nigerian Pidgin:
+Norwegian Bokmal:
+ - Taesh (magnusmbratteng)
+ - Imre Kristoffer Eilertsen (DandelionSprout)
+ - dodgepong
+ - Oddbjørn Grytdal (Fooshi)
+ - Tommy (nwgat)
+ - Patrick Williamson (wpatrick59)
+ - Mats Edvin Aarø (matsedvin)
+ - mgKaiztra
+ - Syver Stensholt (sssandum)
+ - Alex Thomassen (Decicus)
+ - OsteHovel
+ - areedw
+ - Sander Skjegstad (r530er)
+ - Gol D. Ace (goldace)
+ - Legend27
+ - Vainock (ivo.lemmert)
+ - chaironeko
+ - Mats Andreassen (MatsA)
+Norwegian Nynorsk:
+ - Imre Kristoffer Eilertsen (DandelionSprout)
+Persian:
+ - MZ MAXIMUM (mahdigamermax)
+ - Alireza Firouzi (pikhoshorg)
+ - peymanr34
+Pirate English:
+ - Matt Gajownik (WizardCM)
+ - Uaiquqjwnsns
+ - Matthew Hatcher (MatthewSH)
+ - jkcoaster
+ - Emu-Phoenix
+ - Coen (Trigstur)
+ - Charlie W. (wallichc)
+ - Vainock (ivo.lemmert)
+ - chaironeko
+ - Gol D. Ace (goldace)
+ - ncb
+Polish:
+ - grocal (grocal)
+ - Michał Durak (micechal)
+ - The Syntox (TheSyntox)
+ - Vassamo (jotpl69)
+ - Damian Korcz (damikiller)
+ - opl
+ - Gol D. Ace (goldace)
+ - Łukasz Wójcik (lwojcik)
+ - Daniel Wieczorek (Kennyluz)
+ - Albakham (albakham)
+ - popek069
+ - sebek1pan
+ - Mateusz (Silesianek)
+ - Julia Drewniak (ewagsi)
+ - dodgepong
+ - Vainock (ivo.lemmert)
+ - Patryk Kunda (ner.i.ol)
+ - Michał Lewczak (michal200507)
+Portuguese:
+ - André Biscaia (LazP)
+ - Ev1lbl0w
+ - dodgepong
+ - joaofvieira
+ - Tomás Antunes (tomasantunes)
+ - joaoboia
+ - Albakham (albakham)
+ - alexandre433
+ - Gol D. Ace (goldace)
+Portuguese, Brazilian:
+ - Shaolin (admshao)
+ - Ramon Mendes (rbrgameplays)
+ - Fabio Madia (Shaolin)
+ - TFSThiagoBR98
+ - CaioWzy
+ - clr0dr1g
+ - aalonsomb
+ - André Gama (ToeOficial)
+ - Gol D. Ace (goldace)
+ - Emanoel Lopes (emanoelopes)
+ - mizifih
+ - DevilLorde
+ - flor.com (florretardada)
+ - Vainock (ivo.lemmert)
+ - dodgepong
+ - Esdras Tarsis (esdrastarsis)
+ - Ramon Gonzalez (ramon200000)
+Punjabi:
+ - manjotsingh0202
+Romanian:
+ - Cristian Silaghi (stelistcristi)
+ - banrek
+ - Hisashi
+ - BlakeNowah
+ - Andrei Ionescu (abcdedjdmddx)
+ - Victor Paul (corvinpaul)
+ - Skellytone
+ - Mihai G (babasghenciu)
+ - Gol D. Ace (goldace)
+ - dodgepong
+ - chaironeko
+ - Vainock (ivo.lemmert)
+Russian:
+ - Alek Nirov (dectanova)
+ - Pavel (Shevalie)
+ - dodgepong
+ - VNGXR
+ - Gol D. Ace (goldace)
+ - Bugo (Bugo)
+ - Andy (anry025)
+ - Strange Grey Cat (StrangeGreyCat)
+ - Yaroslav (MrYadro)
+ - Andrei Stepanov (adem4ik)
+ - fromgate (fromgate)
+ - Vlad (KoTmaxHo)
+ - Runoff Screen (glebpozbnakov62)
+ - Mixaill
+ - Vainock (ivo.lemmert)
+ - Sergei Fug1t1v3 (fug)
+ - Walt Gee (vovanych)
+ - Serge Sklyarov (sergesklyarov)
+ - Yuri Mihaqlov (yurijmi)
+ - MUHADDIS MEDIA (muhaddismedia)
+ - TR1D
+ - Sigge Stjärnholm (Kladdy)
+ - SandoBY
+ - Kuji Kitamura (KujiKita)
+Scottish Gaelic:
+ - GunChleoc
+ - Vainock (ivo.lemmert)
+Serbian (Cyrillic):
+ - medicmomcilo
+ - Acamicamacaraca
+ - Gol D. Ace (goldace)
+ - dodgepong
+ - LittleGirl_WithPonyTail (alexs1320)
+ - Vainock (ivo.lemmert)
+Serbian (Latin):
+ - medicmomcilo
+ - LittleGirl_WithPonyTail (alexs1320)
+ - Gol D. Ace (goldace)
+ - Rale Sarcevic (ralesarcevic)
+ - dodgepong
+ - Vainock (ivo.lemmert)
+Slovak:
+ - Luki (luki1412)
+ - Ján M (longmoped)
+ - Erik Bročko (ericek111)
+ - Anton Lokaj (anlo)
+ - LoLLy Nka (lollynka279)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+Slovenian:
+ - kristjan.krusic (krusic22)
+ - MG lolenstine (mglolenstine)
+ - Grimpy
+ - Gol D. Ace (goldace)
+ - ArcaneWater
+ - Vainock (ivo.lemmert)
+ - dodgepong
+Southern Sotho:
+ - Samuel Nthoroane (Samuel_Nthoroane)
+Spanish:
+ - Roberto Lorenzo (HonzoNebro)
+ - Jaime Martinez Rincon (mrjaime1999)
+ - Marcos Vidal Martinez (M4RK22)
+ - Jaime Muñoz Martín (jmmartin_5)
+ - EG Gamer (eggamer131)
+ - Dalia Sofía Magallón Páramo (SweetSofiMC)
+ - Gol D. Ace (goldace)
+ - Monsteer
+ - Pilar G. (TheMadnessLady)
+ - Maximiliano Schtroumpftech Pena-Roig (som2tokmynam)
+ - Carlos Plata (carlosesgenial33)
+ - Ruben Deig Ramos (rdeigramos)
+ - Marcos Vidal (markitos.maki22)
+ - eskaidom (sergiomalagonmartin)
+ - Alex E. D. B. (alexedb)
+ - Santiago Pereyra (SannttVIII)
+ - Eleazar Córcoles (MtrElee3)
+ - eemiroj
+ - Ray (Ipsumry)
+ - makiza1 (micosil_2)
+ - Sigge Stjärnholm (Kladdy)
+ - henrycontreras
+ - Vainock (ivo.lemmert)
+ - chaironeko
+ - dodgepong
+ - amssusgameplays (willifake052)
+ - Rodrigo Ipince (ipince)
+ - David Sonico (davidsubsonico)
+Swedish:
+ - Anton R (FirePhoenix)
+ - Sigge Stjärnholm (Kladdy)
+ - Laccy IEST (Laccy)
+ - Olle Dahström (odahlstrom)
+ - Gustav Ekner (ekner)
+ - Gol D. Ace (goldace)
+ - Jonatan Nyberg (sweuser)
+ - Henrik Mattsson-Mårn (rchk)
+ - chaironeko
+ - Vainock (ivo.lemmert)
+ - Jonas Svensson (jonassanojj99)
+ - TacticalKebab
+ - Hannes Blåman (thebluis)
+Tagalog:
+ - dandalion
+ - philiparniebinag
+ - jermel
+ - jbeguna04
+ - Red Dayao (steemitph)
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Raylir
+Tamil:
+ - anto27
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+Thai:
+ - sakuhanachan* (sakuhanachanloli)
+ - ธีรภัทร์ โยชนา (Gataro)
+ - Sakia Normal Human (arcanaarcana5)
+ - 盛凤阁 (execzero)
+ - nongnoobjung (kitcharuk_4)
+ - Vainock (ivo.lemmert)
+ - dodgepong
+ - Gol D. Ace (goldace)
+Turkish:
+ - Ali Kömesöğütlü (Mobile46) (byzlo685)
+ - omer.karagoz (mrkaragoz)
+ - Cemal Dursun (cmldrs)
+ - Savas Tokmak (Laserist)
+ - Murat Karagöz (anemon_1994)
+ - BruhSoundeffect2 (DoomerDoge)
+ - gecebekcisi1
+ - Gol D. Ace (goldace)
+ - Umut kılıç (kilic190787)
+ - berkcan uçan (ibnehayati)
+ - Khedi
+ - mustafaa
+ - Richard Stanway (r1ch)
+ - Hydroboost (Hydroboost)
+ - Vainock (ivo.lemmert)
+ - Türker Yıldırım (turkeryildirim)
+ - chaironeko
+ - basakbk
+ - Alican Gultekin (Vitaefinis)
+Ukrainian:
+ - SuslikV
+ - Юрій (Devinit)
+ - Andy (anry025)
+ - Sergey (LegionAnon)
+ - L1Q
+ - Gol D. Ace (goldace)
+ - Vainock (ivo.lemmert)
+ - Maksym Tymoshyk (maximillian_)
+ - NoPressure
+ - powerdef
+ - geimfis
+ - បងមាន តែអូន (cheaiphone267)
+Urdu (Pakistan):
+ - Rana Awais (ehtisham)
+ - tahirsada
+ - shamuntohamd
+Vietnamese:
+ - Johnny “max20091” Utah (boostyourprogram)
+ - Hưng Nguyễn (hoyostudio)
+ - ngoisaosang (ngoisaosang)
+ - Drake Strike (phjtieudoc)
+ - Gol D. Ace (goldace)
+ - IoeCmcomc (Ioe2015) (hopdaigia2004)
+ - BIGO - 지혜 (parkjihye96)
+ - Hà Phi Hùng (haphihungcom)
+ - Vainock (ivo.lemmert)
+ - Vũ Hải Tây (tayngungo1999)
+ - NCAA (NCAA)
+ - dodgepong
obs-studio-23.1.0.tar.xz/CI/before-script-osx.sh -> obs-studio-23.2.0.tar.xz/CI/before-script-osx.sh
Changed
-DVLCPath=$PWD/../../vlc-3.0.4 \
-DBUILD_BROWSER=ON \
-DBROWSER_DEPLOY=ON \
+-DBUILD_CAPTIONS=ON \
-DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
obs-studio-23.1.0.tar.xz/CI/install-dependencies-linux-ubuntu16.sh -> obs-studio-23.2.0.tar.xz/CI/install-dependencies-linux-ubuntu16.sh
Changed
libvlc-dev \
libx11-dev \
libx264-dev \
+ libxcb-randr0-dev \
libxcb-shm0-dev \
libxcb-xinerama0-dev \
libxcomposite-dev \
obs-studio-23.1.0.tar.xz/CI/install-dependencies-linux.sh -> obs-studio-23.2.0.tar.xz/CI/install-dependencies-linux.sh
Changed
libvlc-dev \
libx11-dev \
libx264-dev \
+ libxcb-randr0-dev \
libxcb-shm0-dev \
libxcb-xinerama0-dev \
libxcomposite-dev \
obs-studio-23.1.0.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-23.2.0.tar.xz/CI/install-dependencies-osx.sh
Changed
# Echo all commands before executing
set -v
-if [ -v "$TRAVIS" ]; then
+if [[ $TRAVIS ]]; then
git fetch --unshallow
fi
brew update
#Base OBS Deps and ccache
-brew install jack speexdsp ccache swig mbedtls
+brew install jack speexdsp ccache mbedtls
brew install https://gist.githubusercontent.com/DDRBoxman/b3956fab6073335a4bf151db0dcbd4ad/raw/ed1342a8a86793ea8c10d8b4d712a654da121ace/qt.rb
+brew install https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb
export PATH=/usr/local/opt/ccache/libexec:$PATH
ccache -s || echo "CCache is not available."
cd ./cef_binary_${CEF_BUILD_VERSION}_macosx64
# remove a broken test
sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
+# target 10.11
+sed -i '.orig' s/\"10.9\"/\"10.11\"/ ./cmake/cef_variables.cmake
mkdir build
cd ./build
cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 ..
obs-studio-23.1.0.tar.xz/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/CMakeLists.txt
Changed
include(ObsCpack)
include(GNUInstallDirs)
-if(WIN32)
- string(REPLACE "-" ";" UI_VERSION_SPLIT ${OBS_VERSION})
- list(GET UI_VERSION_SPLIT 0 UI_VERSION)
- string(REPLACE "." ";" UI_VERSION_SEMANTIC ${UI_VERSION})
- list(GET UI_VERSION_SEMANTIC 0 UI_VERSION_MAJOR)
- list(GET UI_VERSION_SEMANTIC 1 UI_VERSION_MINOR)
- list(GET UI_VERSION_SEMANTIC 2 UI_VERSION_PATCH)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/UI/obs.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/UI/obs.rc)
-endif()
-
# Must be a string in the format of "x.x.x-rcx"
if(DEFINED RELEASE_CANDIDATE)
set(OBS_VERSION "${RELEASE_CANDIDATE}")
set(OBS_RELEASE_CANDIDATE 0)
endif()
+# Binary Versioning for Windows
+if(WIN32)
+ string(REPLACE "-" ";" UI_VERSION_SPLIT ${OBS_VERSION})
+ list(GET UI_VERSION_SPLIT 0 UI_VERSION)
+ string(REPLACE "." ";" UI_VERSION_SEMANTIC ${UI_VERSION})
+ list(GET UI_VERSION_SEMANTIC 0 UI_VERSION_MAJOR)
+ list(GET UI_VERSION_SEMANTIC 1 UI_VERSION_MINOR)
+ list(GET UI_VERSION_SEMANTIC 2 UI_VERSION_PATCH)
+ configure_file(UI/obs.rc.in ${PROJECT_BINARY_DIR}/obs.rc)
+endif()
+
if(MSVC AND NOT EXISTS "${CMAKE_BINARY_DIR}/ALL_BUILD.vcxproj.user")
file(GENERATE
OUTPUT "${CMAKE_BINARY_DIR}/ALL_BUILD.vcxproj.user"
obs-studio-23.1.0.tar.xz/CONTRIBUTING.rst -> obs-studio-23.2.0.tar.xz/CONTRIBUTING.rst
Changed
- Make sure commit titles are always in present tense, and are not
followed by punctuation.
- - Prefix commit titles with the module name, followed by a colon and a
- space (unless modifying a file in the base directory). When
- modifying cmake modules, prefix with "cmake". So for example, if you
- are modifying the obs-ffmpeg plugin::
+ - Prefix each commit's titles with the module name, followed by a colon
+ and a space (unless modifying a file in the base directory). After
+ that, the first word should be capitalized.
+
+ So for example, if you are modifying the obs-ffmpeg plugin::
obs-ffmpeg: Fix bug with audio output
libobs: Fix source not displaying
+ Note: When modifying cmake modules, just prefix with "cmake".
+
- If you still need examples, please view the commit history.
obs-studio-23.1.0.tar.xz/README.rst -> obs-studio-23.2.0.tar.xz/README.rst
Changed
- Developer/API Documentation: https://obsproject.com/docs
+ - Donating/backing/sponsoring: https://obsproject.com/contribute
+
- Bug Tracker: https://obsproject.com/mantis/
(Note: The bug tracker is linked to forum accounts. To use the bug
Contributing
------------
+ - If you would like to help fund or sponsor the project, you can do so
+ via `Patreon <https://www.patreon.com/obsproject>`_, `OpenCollective
+ <https://opencollective.com/obsproject>`_, or `PayPal
+ <https://www.paypal.me/obsproject>`_. See our `contribute page
+ <https://obsproject.com/contribute>`_ for more information.
+
- If you wish to contribute code to the project, please make sure to
read the coding and commit guidelines:
https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst
obs-studio-23.1.0.tar.xz/UI/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/UI/CMakeLists.txt
Changed
set(FIND_MODE QUIET)
endif()
-if(BROWSER_AVAILABLE_INTERNAL AND WIN32)
+if(BROWSER_AVAILABLE_INTERNAL)
add_definitions(-DBROWSER_AVAILABLE)
endif()
win-update/update-window.cpp
win-update/win-update.cpp
win-update/win-update-helpers.cpp
- obs.rc)
+ ${obs-studio_BINARY_DIR}/obs.rc)
set(obs_PLATFORM_HEADERS
win-update/update-window.hpp
win-update/win-update.hpp
focus-list.cpp
menu-button.cpp
double-slider.cpp
+ slider-ignorewheel.cpp
+ combobox-ignorewheel.cpp
+ spinbox-ignorewheel.cpp
volume-control.cpp
adv-audio-control.cpp
item-widget-helpers.cpp
- visibility-checkbox.cpp
- locked-checkbox.cpp
horizontal-scroll-area.cpp
vertical-scroll-area.cpp
visibility-item-widget.cpp
slider-absoluteset-style.cpp
- source-list-widget.cpp
qt-display.cpp
crash-report.cpp
hotkey-edit.cpp
display-helpers.hpp
balance-slider.hpp
double-slider.hpp
+ slider-ignorewheel.hpp
+ combobox-ignorewheel.hpp
+ spinbox-ignorewheel.hpp
focus-list.hpp
menu-button.hpp
mute-checkbox.hpp
vertical-scroll-area.hpp
visibility-item-widget.hpp
slider-absoluteset-style.hpp
- source-list-widget.hpp
qt-display.hpp
crash-report.hpp
hotkey-edit.hpp
install_obs_data_file(obs ../AUTHORS obs-studio/authors)
if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
- install(FILES dist/obs.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
- install(FILES forms/images/obs.png
- DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/256x256/apps)
+ add_subdirectory(xdg-data)
endif()
add_subdirectory(frontend-plugins)
obs-studio-23.1.0.tar.xz/UI/adv-audio-control.cpp -> obs-studio-23.2.0.tar.xz/UI/adv-audio-control.cpp
Changed
#define NSEC_PER_MSEC 1000000
#endif
+#define MIN_DB -96.0
+#define MAX_DB 26.0
+
OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
: source(source_)
{
labelL = new QLabel();
labelR = new QLabel();
nameLabel = new QLabel();
- volume = new QSpinBox();
+ volume = new QDoubleSpinBox();
forceMono = new QCheckBox();
balance = new BalanceSlider();
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
nameLabel->setText(QT_UTF8(sourceName));
nameLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- volume->setMinimum(0);
- volume->setMaximum(2000);
- volume->setValue(int(vol * 100.0f));
+ volume->setMinimum(MIN_DB - 0.1);
+ volume->setMaximum(MAX_DB);
+ volume->setSingleStep(0.1);
+ volume->setDecimals(1);
+ volume->setSuffix(" dB");
+ volume->setValue(obs_mul_to_db(vol));
+
+ if (volume->value() < MIN_DB)
+ volume->setSpecialValueText("-inf dB");
forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
mixerContainer->layout()->addWidget(mixer5);
mixerContainer->layout()->addWidget(mixer6);
- QWidget::connect(volume, SIGNAL(valueChanged(int)),
- this, SLOT(volumeChanged(int)));
+ QWidget::connect(volume, SIGNAL(valueChanged(double)),
+ this, SLOT(volumeChanged(double)));
QWidget::connect(forceMono, SIGNAL(clicked(bool)),
this, SLOT(downmixMonoChanged(bool)));
QWidget::connect(balance, SIGNAL(valueChanged(int)),
void OBSAdvAudioCtrl::SourceVolumeChanged(float value)
{
volume->blockSignals(true);
- volume->setValue(int(round(value * 100.0f)));
+ volume->setValue(obs_mul_to_db(value));
volume->blockSignals(false);
}
/* ------------------------------------------------------------------------- */
/* Qt control callbacks */
-void OBSAdvAudioCtrl::volumeChanged(int percentage)
+void OBSAdvAudioCtrl::volumeChanged(double db)
{
- float val = float(percentage) / 100.0f;
+ if (db < MIN_DB) {
+ volume->setSpecialValueText("-inf dB");
+ db = -INFINITY;
+ }
+
+ float val = obs_db_to_mul(db);
obs_source_set_volume(source, val);
}
obs-studio-23.1.0.tar.xz/UI/adv-audio-control.hpp -> obs-studio-23.2.0.tar.xz/UI/adv-audio-control.hpp
Changed
#include <obs.hpp>
#include <QWidget>
#include <QPointer>
+#include <QDoubleSpinBox>
#include "balance-slider.hpp"
class QGridLayout;
QPointer<QWidget> balanceContainer;
QPointer<QLabel> nameLabel;
- QPointer<QSpinBox> volume;
+ QPointer<QDoubleSpinBox> volume;
QPointer<QCheckBox> forceMono;
QPointer<BalanceSlider>balance;
QPointer<QLabel> labelL;
void SourceSyncChanged(int64_t offset);
void SourceMixersChanged(uint32_t mixers);
- void volumeChanged(int percentage);
+ void volumeChanged(double db);
void downmixMonoChanged(bool checked);
void balanceChanged(int val);
void syncOffsetChanged(int milliseconds);
obs-studio-23.1.0.tar.xz/UI/api-interface.cpp -> obs-studio-23.2.0.tar.xz/UI/api-interface.cpp
Changed
return (void*)main->winId();
}
+ void *obs_frontend_get_system_tray(void) override
+ {
+ return (void*)main->trayIcon.data();
+ }
+
void obs_frontend_get_scenes(
struct obs_frontend_source_list *sources) override
{
Q_ARG(OBSSource, OBSSource(transition)));
}
+ int obs_frontend_get_transition_duration(void) override
+ {
+ return main->ui->transitionDuration->value();
+ }
+
+ void obs_frontend_set_transition_duration(int duration) override
+ {
+ QMetaObject::invokeMethod(main->ui->transitionDuration, "setValue",
+ Q_ARG(int, duration));
+ }
+
void obs_frontend_get_scene_collections(
std::vector<std::string> &strings) override
{
main->SetPreviewProgramMode(enable);
}
+ void obs_frontend_preview_program_trigger_transition(void) override
+ {
+ QMetaObject::invokeMethod(main, "TransitionClicked");
+ }
+
bool obs_frontend_preview_enabled(void) override
{
return main->previewEnabled;
obs-studio-23.1.0.tar.xz/UI/audio-encoders.hpp -> obs-studio-23.2.0.tar.xz/UI/audio-encoders.hpp
Changed
+#pragma once
+
#include <obs.hpp>
#include <map>
obs-studio-23.1.0.tar.xz/UI/auth-oauth.cpp -> obs-studio-23.2.0.tar.xz/UI/auth-oauth.cpp
Changed
if (bwtest && strcmp(this->service(), "Twitch") == 0)
obs_data_set_string(settings, "key",
- key_.append("?bandwidthtest=true").c_str());
+ (key_ + "?bandwidthtest=true").c_str());
else
obs_data_set_string(settings, "key", key_.c_str());
obs-studio-23.1.0.tar.xz/UI/auth-twitch.cpp -> obs-studio-23.2.0.tar.xz/UI/auth-twitch.cpp
Changed
std::string output;
std::string error;
+ long error_code = 0;
bool success = false;
"https://api.twitch.tv/kraken/channel",
output,
error,
- nullptr,
+ &error_code,
"application/json",
nullptr,
headers,
func,
QTStr("Auth.LoadingChannel.Title"),
QTStr("Auth.LoadingChannel.Text").arg(service()));
+ if (error_code == 403) {
+ OBSMessageBox::warning(OBSBasic::Get(),
+ Str("TwitchAuth.TwoFactorFail.Title"),
+ Str("TwitchAuth.TwoFactorFail.Text"),
+ true);
+ blog(LOG_WARNING, "%s: %s",
+ __FUNCTION__,
+ "Got 403 from Twitch, user probably does not "
+ "have two-factor authentication enabled on "
+ "their account");
+ return false;
+ }
+
if (!success || output.empty())
throw ErrorInfo("Failed to get text from remote", error);
obs-studio-23.2.0.tar.xz/UI/combobox-ignorewheel.cpp
Added
+#include "combobox-ignorewheel.hpp"
+
+ComboBoxIgnoreScroll::ComboBoxIgnoreScroll(QWidget *parent) : QComboBox(parent)
+{
+ setFocusPolicy(Qt::StrongFocus);
+}
+
+void ComboBoxIgnoreScroll::wheelEvent(QWheelEvent *event)
+{
+ if (!hasFocus())
+ event->ignore();
+ else
+ QComboBox::wheelEvent(event);
+}
obs-studio-23.2.0.tar.xz/UI/combobox-ignorewheel.hpp
Added
+#pragma once
+
+#include <QComboBox>
+#include <QInputEvent>
+#include <QtCore/QObject>
+
+class ComboBoxIgnoreScroll : public QComboBox {
+ Q_OBJECT
+
+public:
+ ComboBoxIgnoreScroll(QWidget *parent = nullptr);
+
+protected:
+ virtual void wheelEvent(QWheelEvent *event) override;
+};
obs-studio-23.1.0.tar.xz/UI/data/locale/ar-SA.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ar-SA.ini
Changed
VerticalLayout="تنسيق عمودي"
Group="مجموعة"
DoNotShowAgain="عدم الإظهار مرة أخرى"
+Default="(الافتراضي)"
+Calculating="جاري حساب الوقت..."
AlreadyRunning.Title="البرنامج قيد التشغيل بالفعل"
AlreadyRunning.Text="أوبس قيد التشغيل بالفعل! إلا إذا كنت تريد القيام بذلك، يرجى إيقاف أية مثيلات موجودة من للبرنامج قبل محاولة تشغيله من جديد. إذا كان لديك أوبس تعيين لتقليل إلى علبة النظام، يرجى التحقق لمعرفة ما إذا كان لا يزال قيد التشغيل هناك."
DockCloseWarning.Title="إغلاق إطار قابل للإرساء"
DockCloseWarning.Text="لقد قمت بإغلاق إطار قابل للإرساء. إذا كنت ترغب في إظهاره مرة أخرى، استخدم قائمة عرض ← أرصفة من شريط القوائم."
+Auth.Authing.Title="جاري المصادقة..."
+Auth.Authing.Text="جارٍ المصادقة مع %1, الرجاء الانتظار..."
Auth.AuthFailure.Title="فشل المصادقة"
Auth.AuthFailure.Text="فشل في المصادقة مع %1:\n\n%2: %3"
Auth.InvalidScope.Title="مطلوب المصادقة"
Auth.InvalidScope.Text="متطلبات المصادقة ل %1 تغيرت. قد لا تعمل بعض الميزات."
+Auth.LoadingChannel.Title="جارٍ تحميل معلومات القناة..."
+Auth.LoadingChannel.Text="جارٍ تحميل معلومات القناة من%1, الرجاء الانتظار..."
Auth.ChannelFailure.Title="فشل تحميل معلومات القناة"
Auth.ChannelFailure.Text="فشل في تحميل معلومات القناة %1\n\n%2: %3"
Auth.Chat="الدردشة"
Auth.StreamInfo="معلومات البث"
TwitchAuth.Stats="إحصائيات Twitch"
+TwitchAuth.TwoFactorFail.Title="لم نتمكن من الاستعلام عن مفتاح البث"
Copy.Filters="نسخ الفلتر"
Paste.Filters="لصق الفلتر"
+BrowserPanelInit.Title="جارٍ بدء المستعرض..."
+BrowserPanelInit.Text="جارٍ بدء المستعرض, الرجاء الانتظار..."
BandwidthTest.Region="منطقة"
BandwidthTest.Region.US="الولايات المتحدة"
BandwidthTest.Region.Asia="آسيا"
BandwidthTest.Region.Other="\"غير ذلك\""
-Basic.FirstStartup.RunWizard="هل تريد تشغيل معالج التكوين التلقائي؟ يمكنك أيضا يدوياً تكوين الإعدادات الخاصة بك بواسطة النقر فوق زر \"إعدادات\" في الواجهة الرئيسية."
+Basic.FirstStartup.RunWizard="هل تريد تشغيل معالج التكوين التلقائي؟ يمكنك أيضا يدوياً تكوين الإعدادات الخاصة بك بواسطة النقر فوق زر \"إعدادات\" في الواجهة الرئيسية."
Basic.FirstStartup.RunWizard.NoClicked="إذا قمت بتغيير رأيك، يمكنك تشغيل معالج التكوين التلقائي في أي وقت مرة أخرى من قائمة أدوات."
Basic.AutoConfig="معالج التكوين التلقائي"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="تفضيل استخدام الترميز بواسطة الهاردوير"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="استخدام الترميز بالهاردوير يلغي الحاجة الى معظم موارد المعالج, لكن قد يحتاج الى معدل بث أعلى للحفاظ على نفس مستوى الجودة."
Basic.AutoConfig.StreamPage.StreamWarning.Title="تحذير يتعلق بالبث"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="اختبار مستوى التدفق على وشك بدأ عرض مباشر لبيانات من فيديو عشوائي بدون صوت للقناة الخاصة بك. إذا أمكنك، يوصى بإيقاف حفظ فيديو للعرض المباشر مؤقتا وتعيين خصوصية العرض المباشر ل خاص إلى أن بكتمل الاختبار. هل تريد المتابعة؟"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="اختبار مستوى التدفق على وشك بدأ عرض مباشر لبيانات من فيديو عشوائي بدون صوت للقناة الخاصة بك. إذا أمكنك، يوصى بإيقاف حفظ فيديو للعرض المباشر مؤقتا وتعيين خصوصية العرض المباشر ل خاص إلى أن بكتمل الاختبار. هل تريد المتابعة؟"
Basic.AutoConfig.TestPage="النتيجة النهائية"
Basic.AutoConfig.TestPage.SubTitle.Testing="يقوم البرنامج الآن بتنفيذ مجموعة من الإختبارات لتقدير الإعدادات الأكثر مثالية"
Basic.AutoConfig.TestPage.SubTitle.Complete="انتهى الاختبار"
Basic.AutoConfig.TestPage.TestingBandwidth="إجراء اختبار النطاق الترددي، قد يستغرق هذا بضع دقائق..."
Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="الاتصال ب1:%..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="فشل الاتصال بأي سيرفر، رجاءا تحقق من اتصالك بالانترنت وأعد المحاولة."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="اختبار التدفق لـ: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="اختبار التدفق لـ: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="جاري فحص برمجية ترميز البث، قد تستغرق هذه العملية دقيقة..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="جاري فحص برمجية ترميز تسجيل الفيديو، قد تستغرق هذه العملية دقيقة..."
Basic.AutoConfig.TestPage.TestingRes="اختبار الدِّقة (الأَبعاد)، قد يستغرق هذا بضع دقائق..."
Basic.Stats.DroppedFrames="الاطارات المفقودة (بسبب الشبكة)"
Basic.Stats.MegabytesSent="إجمالي البيانات الصادرة"
Basic.Stats.Bitrate="معدل النقل"
+Basic.Stats.DiskFullIn="سيمتلىء القرص خلال (تقريباً)"
ResetUIWarning.Title="هل أنت متأكد أنك تريد إعادة تعيين واجهة المستخدم ؟"
ResetUIWarning.Text="إعادة تعيين واجهة المستخدم سيخفي المربعات الاضافية. سيتوجب عليك إظهارها من قائمة \"عرض\" اذا اردت ذلك.\n\nهل أنت متأكد انك تريد إعادة تعيين واجهة المستخدم ؟"
Updater.NoUpdatesAvailable.Text="لا توجد تحديثات متوفرة حاليا"
Updater.FailedToLaunch="فشل في تشغيل التحديث"
Updater.GameCaptureActive.Title="إلتقاط الألعاب نشط"
+Updater.GameCaptureActive.Text="مكتبة شبك التقاط الألعاب مشغولة حالياً. الرجاء اغلاء اي لعبة/برنامج يتم إلتقاطه (تصويره) حالياً (أو قم بإعادة تشغيل ويندوز) و حاول مرة أخرى."
QuickTransitions.SwapScenes="التبديل بين مشهدي المعاينة و الاخراج بعد عملية الانتقال"
QuickTransitions.SwapScenesTT="يقوم بتبديل مشهد المعاينة مع مشهد الاخراج بعد عملية الانتقال بين المشاهد (اذا كان مشهد الاخراج الاصلي لازال موجوداً) \n هذا لن يقوم بالتراجع عن اي تغييرات قمت بها على مشهد الاخراج الأصلي."
ConfirmStop.Title="ايقاف البث؟"
ConfirmStop.Text="هل أنت متأكد انك تريد ايقاف البث؟"
+ConfirmBWTest.Title="بدء فحص سرعة التدفق؟"
+ConfirmBWTest.Text="OBS لديك معد في وضع فحص تدفق السرعة. هذا الوضع يسمح لك بفحص الشبكة بدون ان تظهر في بث مباشر على قناتك. بمجرد انتهاء الفحص يجب عليك تعطيله لكي يستطيع مشاهدوك من رؤية البث.\n\nهل تريد الاستمرار ؟"
ConfirmExit.Title="الخروج من OBS ؟"
ConfirmExit.Text="OBS حالياً نشط، كافة عمليات البث/التسجيلات سيتم إيقافها، هل أنت متأكد من رغبتك في الخروج ؟"
Output.StartStreamFailed="فشل في بدء البث"
Output.StartRecordingFailed="فشل في بدء التسجيل"
Output.StartReplayFailed="فشل بدء التخزين المؤقت للإعادة"
+Output.StartFailedGeneric="فشل بدء الإخراج. الرجاء مراجعة السجل للتفاصيل.\n\nملاحظة: اذا كنت تستخدم مُرَمِز NVENC أو مُرَمِز AMD, تأكد من أن تعريف بطاقة الشاشة لديك محدَّث."
+
Output.ConnectFail.Title="فشل في الاتصال"
Output.ConnectFail.BadPath="مسار أو رابط الاتصال غير صالح. الرجاء التحقق من الإعدادات للتحقق من كونه صالح."
Output.ConnectFail.ConnectFailed="فشل الاتصال بالسيرفر"
Output.ConnectFail.InvalidStream="تعذر الوصول إلى القناة أو مفتاح البث المحدد، الرجاء أعد التحقق من صحة مفتاح البث الخاص بك، أما إذا كان صحيحاً، قد تكون المشكلة في الاتصال بالخادم."
-Output.ConnectFail.Error="حدث خطأ غير متوقع عند محاولة الاتصال بالخادم. مزيد من المعلومات في ملف السجل."
+Output.ConnectFail.Error="حدث خطأ غير متوقع عند محاولة الاتصال بالخادم. مزيد من المعلومات في ملف السجل."
Output.ConnectFail.Disconnected="تم قطع الاتصال من السيرفر."
+Output.StreamEncodeError.Title="خطأ في الترميز"
+Output.StreamEncodeError.Msg="حدث خطأ في الترميز أثناء البث."
+
Output.RecordFail.Title="فشل في بدء التسجيل"
-Output.RecordFail.Unsupported="تنسيق الإخراج أما غير معتمد أو لا يدعم أكثر من مسار للصوت. الرجاء التحقق من الإعدادات الخاصة بك وحاول مرة أخرى."
+Output.RecordFail.Unsupported="تنسيق الإخراج أما غير معتمد أو لا يدعم أكثر من مسار للصوت. الرجاء التحقق من الإعدادات الخاصة بك وحاول مرة أخرى."
Output.RecordNoSpace.Title="مساحة القرص غير كافية"
Output.RecordNoSpace.Msg="لا توجد مساحة كافية على القرص لمتابعة التسجيل."
Output.RecordError.Title="خطأ في التسجيل"
Output.RecordError.Msg="حدث خطأ غير محدد أثناء التسجيل."
+Output.RecordError.EncodeErrorMsg="حدث خطأ في الترميز أثناء التسجيل."
Output.ReplayBuffer.NoHotkey.Title="لم يتم تعيين مفتاح اختصار!"
Output.ReplayBuffer.NoHotkey.Msg="لم يتم تعيين مفتاح اختصار لحفظ التخزين المؤقَت للإعادة. الرجاء قم بتعيين مفتاح \"حفظ\" لاستخدامها في حفظ تسجيلات الإعادات."
Output.BadPath.Title="مسار الملف غير صحيح"
-Output.BadPath.Text="مسار الإخراج ملف تكوين غير صالح. الرجاء التحقق من الإعدادات الخاصة بك للتأكد من أنه تم تعيين مسار ملف صحيح."
+Output.BadPath.Text="مسار الإخراج ملف تكوين غير صالح. الرجاء التحقق من الإعدادات الخاصة بك للتأكد من أنه تم تعيين مسار ملف صحيح."
LogReturnDialog="تم رفع السجل بنجاح"
LogReturnDialog.CopyURL="نسخ الرابط"
Remux.FileExistsTitle="الملف الهدف موجود"
Remux.FileExists="الملفات التالية موجودة فعليا. هل ترغب في استبدالها؟"
Remux.ExitUnfinishedTitle="تقدم عملية التحويل"
-Remux.ExitUnfinished="إيقاف عميلة التحويل الآن قد تجعل الملف غير قابل للاستخدام./n هل أنت متأكد أنك تريد إيقاف عملية التحويل؟"
+Remux.ExitUnfinished="إيقاف عميلة التحويل الآن قد تجعل الملف غير قابل للاستخدام./n هل أنت متأكد أنك تريد إيقاف عملية التحويل؟"
UpdateAvailable="تحديث جديد متوفر"
UpdateAvailable.Text="الإصدار %1.%2.%3 متوفر الآن. <a href='%4'>انقر هنا للتتحميل</a>"
Basic.Main.PreviewConextMenu.Enable="تمكين المعاينة"
+Basic.Main.Preview.Disable="تعطيل المعاينه"
+
ScaleFiltering="مقياس التصفية"
ScaleFiltering.Point="نقطة"
ScaleFiltering.Bilinear="ثنائي خطي"
Basic.TransformWindow.BoundsType.ScaleToHeight="مقياس للارتفاع الحدود"
Basic.TransformWindow.BoundsType.Stretch="تمتد إلى الحدود"
-Basic.Main.AddSourceHelp.Title="لا يمكن إضافة المصدر"
+Basic.Main.AddSourceHelp.Title="لا يمكن إضافة المصدر"
Basic.Main.AddSourceHelp.Text="تحتاج إلى أن يكون على الأقل مشهد واحد لإضافة مصدر."
Basic.Main.Scenes="المشاهد"
Basic.MainMenu.Edit.Transform.FitToScreen="تمديد الشاشة (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="تمتد إلى الشاشة (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="وسط الشاشة (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="توسيط عامودي"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="توسيط أفقي"
Basic.MainMenu.Edit.Order="الترتيب (&O)"
Basic.MainMenu.Edit.Order.MoveUp="التحرك للأعلى (&U)"
Basic.MainMenu.Edit.Order.MoveDown="التحرك للأسفل (&D)"
Basic.Settings.Video.Numerator="البسط"
Basic.Settings.Video.Denominator="قاسم"
Basic.Settings.Video.Renderer="العارض"
-Basic.Settings.Video.InvalidResolution="قيمة الأبعاد غير صالحة. يجب أن يكون [العرض] x [الطول] (مثال. 1920 × 1080)"
+Basic.Settings.Video.InvalidResolution="قيمة الأبعاد غير صالحة. يجب أن يكون [العرض] x [الطول] (مثال. 1920 × 1080)"
Basic.Settings.Video.CurrentlyActive="إخراج الفيديو نشط حاليا. الرجاء إيقاف كل الإخراجات لتغيير إعدادات الفيديو."
Basic.Settings.Video.DisableAero="تعطيل Aero"
Basic.Settings.Audio="الصوت"
Basic.Settings.Audio.SampleRate="معدل العينات"
Basic.Settings.Audio.Channels="قنوات"
-Basic.Settings.Audio.DesktopDevice="جهاز صوت سطح المكتب"
-Basic.Settings.Audio.DesktopDevice2="جهاز صوت سطح المكتب 2"
-Basic.Settings.Audio.AuxDevice="جهاز صوت Mic/Auxiliary"
-Basic.Settings.Audio.AuxDevice2="جهاز صوت Mic/Auxiliary 2"
-Basic.Settings.Audio.AuxDevice3="جهاز صوت Mic/Auxiliary 3"
+Basic.Settings.Audio.Devices="الأجهزة"
+Basic.Settings.Audio.DesktopDevice="صوت سطح المكتب"
+Basic.Settings.Audio.DesktopDevice2="صوت سطح المكتب 2"
Basic.Settings.Audio.UnknownAudioDevice="[الجهاز غير متصل أو غير متوفر]"
Basic.Settings.Advanced="متقدم"
Basic.Settings.Advanced.General.ProcessPriority.Normal="عادي"
Basic.Settings.Advanced.General.ProcessPriority.Idle="خامل"
Basic.Settings.Advanced.Video.ColorFormat="تنسيق اللون"
-Basic.Settings.Advanced.Video.ColorSpace="مساحة ألوان YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="جزئي"
Basic.Settings.Advanced.Video.ColorRange.Full="كامل"
+NoSources.Label="لا يوجد لديك اي مصادر.\nاضغط على اشارة الـ+ في الأسفل,\nأو انقر هنا بالزر الأيمن للفأرة لإضافة واحد."
+
obs-studio-23.1.0.tar.xz/UI/data/locale/bg-BG.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/bg-BG.ini
Changed
Browse="Преглед"
Mono="Моно"
Stereo="Стерео"
-DroppedFrames="Изпуснати кадри %1 (%2%)"
+DroppedFrames="Изпуснати кадри %1 (%2%)"
StudioProgramProjector="Прожектиране на цял екран (от Програмата)"
PreviewProjector="Прожектиране на цял екран (Предварителен преглед)"
SceneProjector="Прожектиране на цял екран (Сцена)"
BandwidthTest.Region.Asia="Азия"
BandwidthTest.Region.Other="Друг"
-Basic.FirstStartup.RunWizard="Искате ли да изпълните съветника за автоматично конфигуриране? Можете също ръчно да конфигурирате настройките, като щракнете върху бутона настройки в главния прозорец."
+Basic.FirstStartup.RunWizard="Искате ли да изпълните съветника за автоматично конфигуриране? Можете също ръчно да конфигурирате настройките, като щракнете върху бутона настройки в главния прозорец."
Basic.FirstStartup.RunWizard.NoClicked="Ако промените решението си, можете да стартирате съветника за автоматично конфигуриране отново от меню \"Инструменти\"."
Basic.AutoConfig="Съветник за автоматично конфигуриране"
Updater.NoUpdatesAvailable.Text="Няма текущи обновявания на разположение"
Updater.FailedToLaunch="Неуспешно стартиране на обновителя"
Updater.GameCaptureActive.Title="Записването на Игра е активно"
-Updater.GameCaptureActive.Text="Библиотеката със куки за Записване на Игра се ползва. Моля затворете игрите/програмите които се записват (или пуснете операционната система наново) и опитайте отново."
QuickTransitions.SwapScenes="Смени сцените Преглед/Продукция след Преминаване"
QuickTransitions.SwapScenesTT="Сменя сцените за Преглед и Продукция след преминаването (ако все още съществува оригиналната сцена).\n Това няма да отмени промените, които може да са направени в оригиналната сцена на изхода."
Output.StartReplayFailed="Неуспешно включване на Буферa за повторение"
Output.StartFailedGeneric="Започването на изкарване на кадри неуспешно. Моля проверете списъка за подробности. \n\n Бележка: Ако ползвате кодиране NVENC или AMD, моля проверете дали версията на драйвъри за видео картата е актуална."
+
Output.ConnectFail.Title="Неуспешно свързване"
Output.ConnectFail.BadPath="Невалиден път или URL. Проверете дали настройките ви са валидни."
Output.ConnectFail.ConnectFailed="Неуспешна връзка със сървъра"
Output.ConnectFail.InvalidStream="Неуспешно сързване към посоченият канал или ключ за предаване, моля проверете повторно вашия ключ. Ако е верен, може би има проблем със всъзката към сървъра."
-Output.ConnectFail.Error="Неочаквана грешка при опит за връзка със сървъра. Повече информация в \"log\" файла."
+Output.ConnectFail.Error="Неочаквана грешка при опит за връзка със сървъра. Повече информация в \"log\" файла."
Output.ConnectFail.Disconnected="Изключен от сървъра."
+
Output.RecordFail.Title="Неуспешно стартиране на запис"
Output.RecordFail.Unsupported="Формата на записа или не е подържа или не подържа повече от една писта за звук. Моля проверете настройките си и опитайте отново."
Output.RecordNoSpace.Title="Недостатъчно място на диска"
Remux.HelpText="Пуснете файловете чрез влачене в този прозорец, за да ги преобразувате или изберете празна \"OBS Recording\" клетка, за да отворите прозореца за търсене на файл."
UpdateAvailable="Има нова актуализация"
-UpdateAvailable.Text="Версия %1.%2.%3 е налична. <a href='%4'> Щракнете тук, за да изтеглите</a>"
+UpdateAvailable.Text="Версия %1.%2.%3 е налична. <a href='%4'> Щракнете тук, за да изтеглите</a>"
Basic.DesktopDevice1="Аудио - работен плот"
Basic.DesktopDevice2="Аудио - работен плот 2"
Basic.Main.PreviewConextMenu.Enable="Разреши преглед"
+
ScaleFiltering="Мащабно Филтриране"
ScaleFiltering.Point="Точково"
ScaleFiltering.Bilinear="Двулинейно"
Basic.PropertiesWindow.SelectColor="Избор на цвят"
Basic.PropertiesWindow.SelectFont="Избор на шрифт"
Basic.PropertiesWindow.ConfirmTitle="Настройките са променени"
-Basic.PropertiesWindow.Confirm="Има незаписани промени. Искате ли да ги запишете?"
+Basic.PropertiesWindow.Confirm="Има незаписани промени. Искате ли да ги запишете?"
Basic.PropertiesWindow.NoProperties="Без налични характеристики"
Basic.PropertiesWindow.AddFiles="Добавяне на файлове"
Basic.PropertiesWindow.AddDir="Добави директория"
Basic.Settings.ProgramRestart="Програмата трябва да бъде рестартирана, за да влязат в сила тези настройки."
Basic.Settings.ConfirmTitle="Потвърди промените"
-Basic.Settings.Confirm="Имате незаписани промени. Запиши промените?"
+Basic.Settings.Confirm="Имате незаписани промени. Запиши промените?"
Basic.Settings.General="Основни"
Basic.Settings.General.Theme="Теми"
Basic.Settings.Audio="Аудио"
Basic.Settings.Audio.SampleRate="Честота на дискретизацията"
Basic.Settings.Audio.Channels="Канали"
-Basic.Settings.Audio.MeterDecayRate="Брой за Звуков Разпад"
Basic.Settings.Audio.MeterDecayRate.Fast="Бързо"
Basic.Settings.Audio.MeterDecayRate.Medium="Средно (ТИП I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Бавно (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Ако предавате, проверете дали вашата услуга за стрийминг поддържа едновременно приемане на съраунд звук и възпроизвеждане на съраунд звук. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast са примери, при които съраунд звукът е напълно поддържан. Въпреки че, Facebook Live и YouTube Live подържат и приемат съраунд, Facebook Live пемиксира към стерео звук, а YouTube Live възпроизвежда само два канала.\n\nЗвуковите филтъри на OBS подържат съраунд звук, въпреки това VST поддръжката не е гарантирана."
Basic.Settings.Audio.MultichannelWarning.Title="Включи записването на съраунд звук?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Сигурни ли сте че искате да включите записването на съраунд звук?"
-Basic.Settings.Audio.DesktopDevice="Аудио устройство (Работен плот)"
-Basic.Settings.Audio.DesktopDevice2="Аудио устройство 2 (Работен плот)"
-Basic.Settings.Audio.AuxDevice="Микрофон/Вторично аудио устройство"
-Basic.Settings.Audio.AuxDevice2="Микрофон/Вторично аудио устройство 2"
-Basic.Settings.Audio.AuxDevice3="Микрофон/Вторично аудио устройство 3"
-Basic.Settings.Audio.AuxDevice4="Микрофон/Вторично аудио устройство 4"
Basic.Settings.Audio.EnablePushToMute="Включи Натисни-за-да-заглуши"
Basic.Settings.Audio.PushToMuteDelay="Натисни-за-да-заглуши забавяне"
Basic.Settings.Audio.EnablePushToTalk="Включи Натисни-за-говорене"
Basic.Settings.Advanced.FormatWarning="Предупреждение: Цветните формати освен NV12 се ползват главно при записи и не са препоръчани при предаване. Предаването може да упражни завишено ползване на Процесора поради прекодиране на форматите."
Basic.Settings.Advanced.Audio.BufferingTime="Време за буфериране на звук"
Basic.Settings.Advanced.Video.ColorFormat="Формат на цвета"
-Basic.Settings.Advanced.Video.ColorSpace="YUV Цветно Пространство"
-Basic.Settings.Advanced.Video.ColorRange="YUV Цветен Обсег"
Basic.Settings.Advanced.Video.ColorRange.Partial="Частично"
Basic.Settings.Advanced.Video.ColorRange.Full="Пълен"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство за Звуково възпроизвеждане"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="По подразбиране"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Изключи намалянето на звука при разговори"
Basic.Settings.Advanced.StreamDelay="Забавяне на Предаването"
Basic.AdvAudio="Допълнителни Звукови Характеристики"
Basic.AdvAudio.Name="Име"
-Basic.AdvAudio.Volume="Сила на звука (%)"
Basic.AdvAudio.Mono="Премиксирай към Mono звук"
Basic.AdvAudio.Balance="Баланс"
Basic.AdvAudio.SyncOffset="Забавяне (мс)"
ResizeOutputSizeOfSource.Text="Базата и изходната резолюция ще бъдат преоразмерени до размера на текущия източник."
ResizeOutputSizeOfSource.Continue="Желаете ли да продължите?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/bn-BD.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/bn-BD.ini
Changed
Enable="সচল"
DisableOSXVSync="OSX ভি-সমকালীন নিষ্ক্রিয় করা হবে"
ResetOSXVSyncOnExit="প্রস্থান করার সময় ভি-সমকালীন OSX রিসেট করুন"
-HighResourceUsage="এনকোডিং overloaded! ভিডিও সেটিংস ডাউন বাঁক বা দ্রুত এনকোডিং প্রিসেট ব্যবহার করে বিবেচনা করুন."
+HighResourceUsage="এনকোডিং overloaded! ভিডিও সেটিংস ডাউন বাঁক বা দ্রুত এনকোডিং প্রিসেট ব্যবহার করে বিবেচনা করুন."
Transition="স্থানান্তর"
QuickTransitions="দ্রুত অবস্থান্তর"
Left="বামদিকে"
Updater.NoUpdatesAvailable.Text="কোন আধুনিকীকরণ বর্তমানে পাওয়া যায়।"
Updater.FailedToLaunch="হালনাগাদকারী আরম্ভ করতে ব্যর্থ"
Updater.GameCaptureActive.Title="খেলার অধিগ্রহণ সক্রিয়"
-Updater.GameCaptureActive.Text="খেলার অধিগ্রহণ হুক লাইব্রেরী বর্তমানে ব্যবহার করা হচ্ছে। দয়া করে দখল করা কোন গেম/প্রোগ্রাম বন্ধ করুন (অথবা windows পুনর্সূচনা করুন) এবং পুনরায় চেষ্টা করুন."
+Updater.GameCaptureActive.Text="খেলার অধিগ্রহণ হুক লাইব্রেরী বর্তমানে ব্যবহার করা হচ্ছে। দয়া করে দখল করা কোন গেম/প্রোগ্রাম বন্ধ করুন (অথবা Windows পুনর্সূচনা করুন) এবং পুনরায় চেষ্টা করুন."
QuickTransitions.SwapScenes="প্রাক-দৃশ্য/আউটপুট দৃশ্য হলে পরে প্রক্রিয়াতে অদলবদল"
QuickTransitions.SwapScenesTT="যদি (আউটপুট মূল দৃশ্য এখনো বিদ্যমান আছে) প্রাক্-বীক্ষণ এবং আউটপুট দৃশ্য হলে পরে প্রক্রিয়াতে swaps। \nThis যে আউটপুট মূল দৃশ্যের জন্য তৈরি করা হয়েছে যাতে কোন পরিবর্তন বাতিল হবে না."
ConfirmExit.Title="OBS প্রস্থান করুন?"
-ConfirmExit.Text="OBS বর্তমানে সক্রিয় আছে। সব নদী/রেকর্ডিং বন্ধ হয়ে যাবে। আপনি কি নিশ্চিত যে আপনি প্রস্থান করতে চান?"
+ConfirmExit.Text="OBS বর্তমানে সক্রিয় আছে। সব নদী/রেকর্ডিং বন্ধ হয়ে যাবে। আপনি কি নিশ্চিত যে আপনি প্রস্থান করতে চান?"
ConfirmRemove.Title="টেমপ্লেট সংরক্ষণ করো"
ConfirmRemove.Text="আপনি কি নিশ্চিত যে আপনি '$1' মুছে ফেলতে চান?"
Output.StartStreamFailed="স্ট্রীমিং চালু করতে ব্যর্থ হয়েছে"
Output.StartRecordingFailed="রেকর্ড আরম্ভ করতে ব্যর্থ"
Output.StartReplayFailed="রিপ্লে বাফার আরম্ভ করতে ব্যর্থ"
-Output.StartFailedGeneric="আউটপুট শুরু করতে ব্যর্থ হয়েছে। Details.\n\nNote জন্য লগ চেক করুন: NVENC অথবা এএমডি encoders ব্যবহার করলে আপনার ভিডিও ড্রাইভার আপ-টু-ডেট রয়েছে নিশ্চিত করুন."
+Output.StartFailedGeneric="আউটপুট শুরু করতে ব্যর্থ হয়েছে। Details.\n\nNote জন্য লগ চেক করুন: NVENC অথবা এএমডি encoders ব্যবহার করলে আপনার ভিডিও ড্রাইভার আপ-টু-ডেট রয়েছে নিশ্চিত করুন."
+
Output.ConnectFail.Title="সংযোগ করতে ব্যর্থ হয়েছে"
-Output.ConnectFail.BadPath="ত্রুটিপূর্ণ URL পথ বা সংযোগ। দয়া করে সেগুলো কার্যকর নিশ্চিত করতে আপনার সেটিংস চেক করুন."
+Output.ConnectFail.BadPath="ত্রুটিপূর্ণ URL পথ বা সংযোগ। দয়া করে সেগুলো কার্যকর নিশ্চিত করতে আপনার সেটিংস চেক করুন."
Output.ConnectFail.ConnectFailed="সার্ভারের সাথে সংযোগ স্থাপন করতে ব্যর্থ"
-Output.ConnectFail.InvalidStream="উল্লেখিত চ্যানেল বা ধারা কী, এ প্রবেশ করা যাচ্ছে না দয়া করে আপনার স্ট্রিম কী পরীক্ষা। যদি সঠিক হয়, সমস্যা হতে পারে সার্ভারের সাথে সংযোগ স্থাপন করা হচ্ছে."
-Output.ConnectFail.Error="সার্ভারের সাথে সংযোগ করার চেষ্টা করার সময় একটি অপ্রত্যাশিত ত্রুটি সংঘটিত হয়েছে। লগ ফাইল আরও তথ্য."
+Output.ConnectFail.InvalidStream="উল্লেখিত চ্যানেল বা ধারা কী, এ প্রবেশ করা যাচ্ছে না দয়া করে আপনার স্ট্রিম কী পরীক্ষা। যদি সঠিক হয়, সমস্যা হতে পারে সার্ভারের সাথে সংযোগ স্থাপন করা হচ্ছে."
+Output.ConnectFail.Error="সার্ভারের সাথে সংযোগ করার চেষ্টা করার সময় একটি অপ্রত্যাশিত ত্রুটি সংঘটিত হয়েছে। লগ ফাইল আরও তথ্য."
Output.ConnectFail.Disconnected="সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়েছে."
+
Output.RecordFail.Title="রেকর্ড আরম্ভ করতে ব্যর্থ"
-Output.RecordFail.Unsupported="আউটপুট ফরম্যাট হয়। অসমর্থিত বা একাধিক অডিও ট্র্যাক সমর্থন করে না। অনুগ্রহ করে আপনার সেটিংস পরীক্ষা করুন এবং আবার চেষ্টা করুন."
+Output.RecordFail.Unsupported="আউটপুট ফরম্যাট হয়। অসমর্থিত বা একাধিক অডিও ট্র্যাক সমর্থন করে না। অনুগ্রহ করে আপনার সেটিংস পরীক্ষা করুন এবং আবার চেষ্টা করুন."
Output.RecordNoSpace.Title="অপর্যাপ্ত ডিস্ক পরিসর"
Output.RecordNoSpace.Msg="না চালিয়ে রেকর্ড করার জন্য পর্যাপ্ত ডিস্ক পরিসর নেই."
Output.RecordError.Title="রেকর্ড করার ত্রুটির"
Output.RecordError.Msg="রেকর্ড করার সময় একটি অনির্দিষ্ট ত্রুটি সংঘটিত হয়েছে."
Output.ReplayBuffer.NoHotkey.Title="কোন hotkey সেট!"
-Output.ReplayBuffer.NoHotkey.Msg="কোন রিপ্লে বাফারের জন্য সেট hotkey ছাড়া। \"সংরক্ষণ\" hotkey রিপ্লে রেকর্ডিং সংরক্ষণের জন্য ব্যবহার করতে সেট করুন."
+Output.ReplayBuffer.NoHotkey.Msg="কোন রিপ্লে বাফারের জন্য সেট hotkey ছাড়া। \"সংরক্ষণ\" hotkey রিপ্লে রেকর্ডিং সংরক্ষণের জন্য ব্যবহার করতে সেট করুন."
Output.BadPath.Title="খারাপ পার্ট অনুসন্ধানname"
-Output.BadPath.Text="কনফিগার ফাইল আউটপুট পথটি সঠিক নয়। অনুগ্রহ করে একটি কার্যকর পথ তৈরি করা হয়েছে নিশ্চিত করতে, আপনার সেটিংস পরীক্ষা করুন."
+Output.BadPath.Text="কনফিগার ফাইল আউটপুট পথটি সঠিক নয়। অনুগ্রহ করে একটি কার্যকর পথ তৈরি করা হয়েছে নিশ্চিত করতে, আপনার সেটিংস পরীক্ষা করুন."
LogReturnDialog="সফলভাবে আপলোড লগ"
LogReturnDialog.CopyURL="URL অনুলিপি করুন"
Remux.ExitUnfinished="Remuxing শেষ হয় না, এখন বন্ধ হতে পারে যেন গন্তব্য ফাইলটি ব্যবহারের অযোগ্য। আপনি কি নিশ্চিত যে আপনি remuxing বন্ধ করতে \nAre?"
UpdateAvailable="নতুন আপডেট পাওয়া যাবে"
-UpdateAvailable.Text="সংস্করণ %1.%2.%3 পাওয়া যায়। <a href='%4'> ডাউনলোড করতে এখানে ক্লিক করুন।</a>"
+UpdateAvailable.Text="সংস্করণ %1.%2.%3 পাওয়া যায়। <a href='%4'> ডাউনলোড করতে এখানে ক্লিক করুন।</a>"
Basic.DesktopDevice1="ডেস্কটপ অডিও"
Basic.DesktopDevice2="ডেস্কটপ অডিও 2"
Basic.Main.PreviewConextMenu.Enable="প্রাকদর্শন সক্রিয় করুন"
+
ScaleFiltering="ফিল্টারিং এর আকার পরিবর্তন করো"
ScaleFiltering.Point="বিন্দু"
ScaleFiltering.Bilinear="Bilinear"
Basic.PropertiesWindow.SelectColor="রঙ নির্বাচন করুন"
Basic.PropertiesWindow.SelectFont="ফন্ট নির্বাচন করুন"
Basic.PropertiesWindow.ConfirmTitle="বৈশিষ্ট্য পরিবর্তিত হয়েছে"
-Basic.PropertiesWindow.Confirm="এতে পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে। আপনি তাদের রেখে দিতে চান?"
+Basic.PropertiesWindow.Confirm="এতে পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে। আপনি তাদের রেখে দিতে চান?"
Basic.PropertiesWindow.NoProperties="কোন বৈশিষ্ট্য সুপ্রাপ্য নয়"
Basic.PropertiesWindow.AddFiles="ফাইল যোগ করুন"
Basic.PropertiesWindow.AddDir="ডিরেক্টরিটি যোগ করুন"
Basic.Settings.ProgramRestart="এই প্রোগ্রামটি এই সেটিংস প্রভাবী করতে পুনর্সূচনা করা আবশ্যক."
Basic.Settings.ConfirmTitle="পরিবর্তন করুন"
-Basic.Settings.Confirm="পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে। পরিবর্তন সংরক্ষণ করব?"
+Basic.Settings.Confirm="পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে। পরিবর্তন সংরক্ষণ করব?"
Basic.Settings.General="সাধারণ"
Basic.Settings.General.Theme="থিম"
Basic.Settings.Output.ReplayBuffer.SecondsMax="সর্বোচ্চ রিপ্লে সময় (সেকেন্ড)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="সর্বোচ্চ স্মৃতি (মেগাবাইট)"
Basic.Settings.Output.ReplayBuffer.Estimate="ব্যবহার করা: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="স্মৃতি ব্যবহার অনুমান করতে পারে না। অনুগ্রহ করে স্মৃতি সর্বোচ্চ সীমা নির্ধারণ করুন."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="স্মৃতি ব্যবহার অনুমান করতে পারে না। অনুগ্রহ করে স্মৃতি সর্বোচ্চ সীমা নির্ধারণ করুন."
Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="আউটপুট ফাইল"
Basic.Settings.Video.Numerator="লব।"
Basic.Settings.Video.Denominator="হর"
Basic.Settings.Video.Renderer="রূপায়ন।"
-Basic.Settings.Video.InvalidResolution="অবৈধ প্রস্তাব মান। [width]x[height] (অর্থাৎ 1920 x 1080) থাকতে হবে"
-Basic.Settings.Video.CurrentlyActive="ভিডিও আউটপুট বর্তমানে সক্রিয় আছে। ভিডিও বিন্যাসনসমূহ পরিবর্তন করতে কোন ভয়েস থেকে চালু করুন।."
+Basic.Settings.Video.InvalidResolution="অবৈধ প্রস্তাব মান। [width]x[height] (অর্থাৎ 1920 x 1080) থাকতে হবে"
+Basic.Settings.Video.CurrentlyActive="ভিডিও আউটপুট বর্তমানে সক্রিয় আছে। ভিডিও বিন্যাসনসমূহ পরিবর্তন করতে কোন ভয়েস থেকে চালু করুন।."
Basic.Settings.Video.DisableAero="এরো নিষ্ক্রিয় করুন"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (সবচেয়ে দ্রুত, কিন্তু ঘোলাটে হলে স্কেল)"
Basic.Settings.Audio="অডিও"
Basic.Settings.Audio.SampleRate="নমুনা হার"
Basic.Settings.Audio.Channels="চ্যানেলসমূহ"
-Basic.Settings.Audio.DesktopDevice="ডেস্কটপ অডিও ডিভাইস"
-Basic.Settings.Audio.DesktopDevice2="ডেস্কটপ অডিও ডিভাইস"
-Basic.Settings.Audio.AuxDevice="মাইক/সহযোগী অডিও ডিভাইস"
-Basic.Settings.Audio.AuxDevice2="মাইক/সহযোগী অডিও ডিভাইস"
-Basic.Settings.Audio.AuxDevice3="মাইক/সহযোগী অডিও ডিভাইস"
Basic.Settings.Audio.EnablePushToMute="মৌন করার ধাক্কা সক্রিয় করা হবে"
Basic.Settings.Audio.PushToMuteDelay="মৌন করার ধাক্কা বিলম্ব"
Basic.Settings.Audio.EnablePushToTalk="পুশ করার কথা সক্রিয় করা হবে"
Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="স্বাভাবিকের উপরে"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="নিষ্ক্রিয়"
-Basic.Settings.Advanced.FormatWarning="সতর্কতা: রং বিন্যাস ছাড়া NV12 রেকর্ডিং-এর জন্য প্রাথমিকভাবে উদ্দেশ্যে করা হয়, এবং স্ট্রীমিং-এর সময় সুপারিশকৃত নয়। এর রং বিন্যাস রূপান্তরের ফলে সিপিইউ ব্যবহার বৃদ্ধি ভয়ংকর হতে পারে।."
+Basic.Settings.Advanced.FormatWarning="সতর্কতা: রং বিন্যাস ছাড়া NV12 রেকর্ডিং-এর জন্য প্রাথমিকভাবে উদ্দেশ্যে করা হয়, এবং স্ট্রীমিং-এর সময় সুপারিশকৃত নয়। এর রং বিন্যাস রূপান্তরের ফলে সিপিইউ ব্যবহার বৃদ্ধি ভয়ংকর হতে পারে।."
Basic.Settings.Advanced.Audio.BufferingTime="অডিও বাফারিং সময়"
Basic.Settings.Advanced.Video.ColorFormat="রঙ বিন্যাস"
-Basic.Settings.Advanced.Video.ColorSpace="YUV কালার-স্পেস"
-Basic.Settings.Advanced.Video.ColorRange="YUV রং বিন্যাস"
Basic.Settings.Advanced.Video.ColorRange.Partial="আংশিক"
Basic.Settings.Advanced.Video.ColorRange.Full="পূর্ণ"
-Basic.Settings.Advanced.Audio.MonitoringDevice="অডিও মনিটরিং ডিভাইস"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="পূর্ব-নির্ধারিত"
Basic.Settings.Advanced.StreamDelay="স্ট্রিম বিলম্ব"
Basic.Settings.Advanced.StreamDelay.Duration="দৈর্ঘ্য (সেকেন্ড)"
Basic.SystemTray.Show="প্রদর্শন করা হবে"
Basic.SystemTray.Hide="সরিয়ে রাখ"
-Basic.SystemTray.Message.Reconnecting="বিচ্ছিন্ন হয়ে গেছে। পুনরায় সংযোগ করা হচ্ছে..."
+Basic.SystemTray.Message.Reconnecting="বিচ্ছিন্ন হয়ে গেছে। পুনরায় সংযোগ করা হচ্ছে..."
Hotkeys.Insert="প্রবেশ করান"
Hotkeys.Delete="মুছে ফেলা"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ca-ES.ini
Changed
VerticalLayout="Disposició vertical"
Group="Grup"
DoNotShowAgain="No tornis a mostrar"
+Default="(Per defecte)"
+Calculating="S'està calculant..."
AlreadyRunning.Title="L'OBS ja s'està executant"
AlreadyRunning.Text="L'OBS ja s'està executant! A no ser que vulgueu fer això, tanqueu totes les finestres de l'OBS abans d'intentar iniciar una nova. Si teniu configurat OBS perquè es minimitzi a la barra de tasques, proveu a veure si segueix executant-se aquí."
Auth.StreamInfo="Informació de la transmissió"
TwitchAuth.Stats="Estat del Twitch"
TwitchAuth.Feed="Activitat del mur del Twitch"
+TwitchAuth.TwoFactorFail.Title="No s'ha pogut consultar la clau de la transmissió"
+TwitchAuth.TwoFactorFail.Text="L'OBS no ha pogut connectar amb el vostre compte del Twitch. Assegureu-vos que l'autenticació en 2 passos està habilitada a les <a href='https://www.twitch.tv/settings/security'>opcions de seguretat del Twitch</a>, atès que és un requeriment per retransmetre."
Copy.Filters="Copia els filtres"
Paste.Filters="Enganxa els filtres"
Basic.Stats.DroppedFrames="Fotogrames perduts (xarxa)"
Basic.Stats.MegabytesSent="Sortida de dades total"
Basic.Stats.Bitrate="Tassa de bits"
+Basic.Stats.DiskFullIn="Disc ple en (aprox.)"
ResetUIWarning.Title="Esteu segur que voleu reiniciar la interfície d'usuari?"
ResetUIWarning.Text="En reiniciar la interfície d'usuari s'amagaran els acobladors addicionals. Heu d'habilitar aquests acobladors des del menú Visualitza perquè siguin visibles. \n\nSegur que voleu reiniciar la interfície d'usuari?"
ConfirmBWTest.Text="Heu configurat l'OBS en mode Test d'amplada de banda. Aquest mode us permet analitzar la connexió sense cap retransmissió en directe. Una vegada finalitzada l'anàlisi, inhabiliteu aquest mode perquè el públic pugui veure la retransmissió.\n\nVoleu continuar?"
ConfirmExit.Title="Voleu sortir de l'OBS?"
-ConfirmExit.Text="OBS és actualment actiu. Tots els directes/gravacions s'aturaran. Esteu segur que voleu sortir?"
+ConfirmExit.Text="OBS és actualment actiu. Tots els directes/gravacions s'aturaran. Esteu segur que voleu sortir?"
ConfirmRemove.Title="Confirmeu la supressió"
ConfirmRemove.Text="Esteu segur que voleu suprimir «$1»?"
Output.StartReplayFailed="No s'ha pogut iniciar la memòria intermèdia de reproducció"
Output.StartFailedGeneric="Error en iniciar la sortida. Comproveu el registre per més detalls.\n\nAvís: Si utilitzeu els codificadors NVENC o AMD, assegureu-vos que els controladors de vídeo estan actualitzats."
+
Output.ConnectFail.Title="Error en connectar"
-Output.ConnectFail.BadPath="Ruta o adreça URL no vàlida. Si us plau, comproveu la configuració per confirmar que són vàlids."
+Output.ConnectFail.BadPath="Ruta o adreça URL no vàlida. Si us plau, comproveu la configuració per confirmar que són vàlids."
Output.ConnectFail.ConnectFailed="No ha pogut connectar al servidor"
Output.ConnectFail.InvalidStream="No pot accedir a la clau del canal especificat o de la transmissió, per favor comprovar dues vegades la seva clau de transmissió. Si és correcte, pot haver-hi un problema connectant-se al servidor."
-Output.ConnectFail.Error="S'ha produït un error inesperat quan s'intentava connectar amb el servidor. Més informació al fitxer de registre."
+Output.ConnectFail.Error="S'ha produït un error inesperat quan s'intentava connectar amb el servidor. Més informació al fitxer de registre."
Output.ConnectFail.Disconnected="Desconnectat del servidor."
+Output.StreamEncodeError.Title="Error de codificació"
+Output.StreamEncodeError.Msg="S'ha produït un error del codificador durant la transmissió."
+
Output.RecordFail.Title="Error en iniciar la gravació"
-Output.RecordFail.Unsupported="El format de sortida és o no compatible o no admet més d'una pista d'àudio. Comproveu la configuració i torneu-ho a provar."
+Output.RecordFail.Unsupported="El format de sortida és o no compatible o no admet més d'una pista d'àudio. Comproveu la configuració i torneu-ho a provar."
Output.RecordNoSpace.Title="Espai de disc insuficient"
Output.RecordNoSpace.Msg="No hi ha prou espai de disc per continuar la gravació."
Output.RecordError.Title="Error en l'enregistrament"
Output.RecordError.Msg="S'ha produït un error desconegut mentre es gravava."
+Output.RecordError.EncodeErrorMsg="S'ha produït un error del codificador durant la gravació."
Output.ReplayBuffer.NoHotkey.Title="Cap tecla d'accés ràpid!"
Output.ReplayBuffer.NoHotkey.Msg="Cap tecla d'accés ràpid establerta per la memòria intermèdia de reproducció. Configureu la tecla d'accés \"Desa\" per desar els enregistraments de reproducció."
Output.BadPath.Title="Ruta de l'arxiu incorrecta"
-Output.BadPath.Text="La ruta configurada pel fitxer de sortida no és vàlida. Si us plau, comproveu la configuració per confirmar que s'ha creat una ruta de fitxer vàlida."
+Output.BadPath.Text="La ruta configurada pel fitxer de sortida no és vàlida. Si us plau, comproveu la configuració per confirmar que s'ha creat una ruta de fitxer vàlida."
LogReturnDialog="Registre carregat amb èxit"
LogReturnDialog.CopyURL="Copia l'URL"
Remux.HelpText="Arrossegueu fitxers en aquesta finestra per convertir-los o seleccioneu una cel·la buida a «Enregistrament OBS» per cercar un fitxer."
UpdateAvailable="Hi ha disponible una actualització"
-UpdateAvailable.Text="La versió %1.%2.%3 està disponible. <a href='%4'> feu clic aquí per a baixar-la</a>"
+UpdateAvailable.Text="La versió %1.%2.%3 està disponible. <a href='%4'> feu clic aquí per a baixar-la</a>"
Basic.DesktopDevice1="Àudio de l'escriptori"
Basic.DesktopDevice2="Àudio de l'escriptori 2"
Basic.Main.PreviewConextMenu.Enable="Habilita la visualització prèvia"
+Basic.Main.Preview.Disable="Desactiva la vista prèvia"
+
ScaleFiltering="Escala de filtratge"
ScaleFiltering.Point="Punt"
ScaleFiltering.Bilinear="Bilineal"
Basic.PropertiesWindow.SelectColor="Seleccioneu un color"
Basic.PropertiesWindow.SelectFont="Seleccioneu un tipus de lletra"
Basic.PropertiesWindow.ConfirmTitle="Configuració canviada"
-Basic.PropertiesWindow.Confirm="Hi ha canvis no desats. Voleu mantenir-los?"
+Basic.PropertiesWindow.Confirm="Hi ha canvis no desats. Voleu mantenir-los?"
Basic.PropertiesWindow.NoProperties="No hi ha propietats disponibles"
Basic.PropertiesWindow.AddFiles="Afegeix fitxers"
Basic.PropertiesWindow.AddDir="Afegir directori"
Basic.MainMenu.Edit.Transform.FitToScreen="Ajusta a la pantalla (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="E&stira a la pantalla"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centra a la pantalla"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centra verticalment"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centra horitzontalment"
Basic.MainMenu.Edit.Order="&Ordre"
Basic.MainMenu.Edit.Order.MoveUp="Mo&u amunt"
Basic.MainMenu.Edit.Order.MoveDown="Mou avall (&D)"
Basic.Settings.ProgramRestart="El programa ha de ser re-iniciat per tal que aquesta configuració tingui efecte."
Basic.Settings.ConfirmTitle="Confirma els canvis"
-Basic.Settings.Confirm="Hi han canvis no desats. Voleu desar els canvis?"
+Basic.Settings.Confirm="Hi han canvis no desats. Voleu desar els canvis?"
Basic.Settings.General="General"
Basic.Settings.General.Theme="Tema"
Basic.Settings.Output.Simple.RecordingQuality.Small="Qualitat alta, mida d'arxiu mitjana"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualitat molt elevada, mida de fitxer gran"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qualitat sense pèrdues, mida de l'arxiu molt gran"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTÈNCIA: La transmissió del vídeo s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTÈNCIA: La transmissió d'àudio s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTÈNCIA: La transmissió del vídeo s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTÈNCIA: La transmissió d'àudio s'establirà a %1, que és el límit superior per al servei de streaming actual. Si està segur que vol anar per sobre de %1, activi les opcions avançades del codificador i desactivi \"Forçar límits de tassa de bits al servei d'streaming\"."
Basic.Settings.Output.Simple.Warn.Encoder="Advertiment: Gravar amb un software codificador en una qualitat diferent que el directe requerirà ús de CPU addicional si el directe i la gravació es fan a la vegada."
-Basic.Settings.Output.Simple.Warn.Lossless="Advertiment: La qualitat sense pèrdues genera mides d'arxiu gegantines! La qualitat sense pèrdues pot utilitzar un total de 7 gigabytes d'espai de disc per minut a alta resolució i FPS. Aquesta qualitat no és recomanable per a enregistraments llargs llevat que tingui una gran quantitat d'espai de disc disponible."
+Basic.Settings.Output.Simple.Warn.Lossless="Advertiment: La qualitat sense pèrdues genera mides d'arxiu gegantines! La qualitat sense pèrdues pot utilitzar un total de 7 gigabytes d'espai de disc per minut a alta resolució i FPS. Aquesta qualitat no és recomanable per a enregistraments llargs llevat que tingui una gran quantitat d'espai de disc disponible."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Esteu segur que voleu utilitzar qualitat sense pèrdues?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Advertiment de qualitat sense pèrdues!"
Basic.Settings.Output.Simple.Encoder.Software="Programari (x264)"
Basic.Settings.Video.Numerator="Numerador"
Basic.Settings.Video.Denominator="Denominador"
Basic.Settings.Video.Renderer="Renderitzador"
-Basic.Settings.Video.InvalidResolution="El valor de resolució no és vàlid. Ha de ser [amplada]x[alçada] (per exemple, 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="La sortida de vídeo és actualment activa. Si us plau desactiveu qualsevol sortida per canviar la configuració de vídeo."
+Basic.Settings.Video.InvalidResolution="El valor de resolució no és vàlid. Ha de ser [amplada]x[alçada] (per exemple, 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="La sortida de vídeo és actualment activa. Si us plau desactiveu qualsevol sortida per canviar la configuració de vídeo."
Basic.Settings.Video.DisableAero="Desactiva l'Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineal (més ràpida, però borrós si s'escala)"
Basic.Settings.Audio="Àudio"
Basic.Settings.Audio.SampleRate="Frequència de mostreig"
Basic.Settings.Audio.Channels="Canals"
-Basic.Settings.Audio.MeterDecayRate="Resposta del ràtio de l'audiòmetre"
+Basic.Settings.Audio.Meters="Metres"
+Basic.Settings.Audio.MeterDecayRate="Velocitat de descomposició"
Basic.Settings.Audio.MeterDecayRate.Fast="Ràpida"
Basic.Settings.Audio.MeterDecayRate.Medium="Mitja (PPM de tipus I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lenta (PPM de tipus II)"
Basic.Settings.Audio.MultichannelWarning="Si esteu retransmetent, verifiqueu que el servei triat suporta el so envoltant, tant a la reproducció d'entrada com de sortida. El Twitch, el Facebook 360 Live, el Mixer RTMP i el Smashcast són exemples on està completament suportat. Encara que el Facebook Live i el YouTube Live accepten l'entrada de so envoltant, el Facebook Live la converteix a estèreo i el YouTube Live la reprodueix només en 2 canals.\n\nEls filtres d'àudio de l'OBS són compatibles amb el so envoltant, encara que no es garanteix la compatibilitat amb connectors VST."
Basic.Settings.Audio.MultichannelWarning.Title="Voleu habilitar el so envoltant?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Segur que voleu habilitar el so envoltant?"
-Basic.Settings.Audio.DesktopDevice="Dispositiu d'àudio d'escriptori"
-Basic.Settings.Audio.DesktopDevice2="Dispositiu d'àudio d'escriptori 2"
-Basic.Settings.Audio.AuxDevice="Micròfon/Dispositiu d'àudio auxiliar"
-Basic.Settings.Audio.AuxDevice2="Micròfon/Dispositiu d'àudio auxiliar 2"
-Basic.Settings.Audio.AuxDevice3="Micròfon/Dispositiu d'àudio auxiliar 3"
-Basic.Settings.Audio.AuxDevice4="Micròfon/Dispositiu auxiliar d'àudio 4"
+Basic.Settings.Audio.Devices="Dispositius"
+Basic.Settings.Audio.DesktopDevice="Àudio de l'escriptori"
+Basic.Settings.Audio.DesktopDevice2="Àudio de l'escriptori 2"
+Basic.Settings.Audio.AuxDevice="Dispositiu d'àudio mic/auxiliar"
+Basic.Settings.Audio.AuxDevice2="Dispositiu d'àudio mic/auxiliar 2"
+Basic.Settings.Audio.AuxDevice3="Dispositiu d'àudio mic/auxiliar 3"
+Basic.Settings.Audio.AuxDevice4="Dispositiu d'àudio mic/auxiliar 4"
Basic.Settings.Audio.EnablePushToMute="Activa \"prémer-per-silenciar\""
Basic.Settings.Audio.PushToMuteDelay="Retard \"prémer-per-silenciar\""
Basic.Settings.Audio.EnablePushToTalk="Activa \"prémer-per-parlar\""
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Per sota del normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Inactiva"
-Basic.Settings.Advanced.FormatWarning="Advertiment: Els formats de color diferents de NV12 estan destinats principalment per a la gravació i no són recomanables quan es fa un directe. Fer un directe pot comportar un major ús de CPU a causa de la conversió de format de color."
+Basic.Settings.Advanced.FormatWarning="Advertiment: Els formats de color diferents de NV12 estan destinats principalment per a la gravació i no són recomanables quan es fa un directe. Fer un directe pot comportar un major ús de CPU a causa de la conversió de format de color."
Basic.Settings.Advanced.Audio.BufferingTime="Temps de buffer d'àudio"
Basic.Settings.Advanced.Video.ColorFormat="Format del color"
-Basic.Settings.Advanced.Video.ColorSpace="Espai de color YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gamma de color YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Espai de color"
+Basic.Settings.Advanced.Video.ColorRange="Gamma de colors"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
Basic.Settings.Advanced.Video.ColorRange.Full="Màxima"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositiu de monitorització d'àudio"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositiu de monitorització"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Per defecte"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Desactiva la reducció d'àudio de Windows"
Basic.Settings.Advanced.StreamDelay="Retard del directe"
Basic.AdvAudio="&Propietats avançades d'àudio"
Basic.AdvAudio.Name="Nom"
-Basic.AdvAudio.Volume="Volum (%)"
+Basic.AdvAudio.Volume="Volum"
Basic.AdvAudio.Mono="Mescla a Mono"
Basic.AdvAudio.Balance="Balanç"
Basic.AdvAudio.SyncOffset="Correcció de sincronització (ms)"
NoSources.Title="Cap font"
NoSources.Text="Sembla que encara no heu afegit cap font de vídeo, de manera que només es mostrarà una pantalla en blanc. Esteu segur que voleu fer això?"
NoSources.Text.AddSource="Podeu afegir fonts fent clic a la icona «+» sota el quadre Fonts de la finestra principal en qualsevol moment."
+NoSources.Label="No teniu cap font.\nFeu clic al botó + que hi ha a continuació \no bé feu clic aquí per afegir-ne una."
ChangeBG="Estableix el color"
CustomColor="Color personalitzat"
ResizeOutputSizeOfSource.Text="La resolució base i de sortida es canviarà a la mida de la font actual."
ResizeOutputSizeOfSource.Continue="Voleu continuar?"
+PreviewTransition="Previsualitza la transició"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/cs-CZ.ini
Changed
VerticalLayout="Vertikální rozložení"
Group="Skupina"
DoNotShowAgain="Znovu nezobrazovat"
+Default="(Výchozí)"
+Calculating="Počítám..."
AlreadyRunning.Title="OBS je již spuštěno"
AlreadyRunning.Text="OBS již běží! Pokud jste to opravdu nechtěli udělat, tak prosím ukončete ostatní běžící instance programu OBS před spuštěním nové. Pokud máte nastavenu minimalizaci do lišty, tak se prosím podívejte, zda neběží tam."
Auth.StreamInfo="Informace o vysílání"
TwitchAuth.Stats="Statistiky služby Twitch"
TwitchAuth.Feed="Informační kanál služby Twitch"
+TwitchAuth.TwoFactorFail.Title="Nepovedlo se získat vysílací klíč"
+TwitchAuth.TwoFactorFail.Text="OBS se nemohl připojit k vašemu Twitch účtu. Zkontrolujte, zda máte nastaveno dvoufázové ověření ve vašem <a href='https://www.twitch.tv/settings/security'>nastavení bezpečnosti</a>, jelikož je to pro vysílání nutné."
Copy.Filters="Kopírovat filtry"
Paste.Filters="Vložit filtry"
Basic.Stats.DroppedFrames="Ztracené snímky (síť)"
Basic.Stats.MegabytesSent="Celkový datový výstup"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Disk bude plný za cca."
ResetUIWarning.Title="Opravdu si přejete resetovat rozhraní ?"
ResetUIWarning.Text="Resetování rozhraním budou skryty přídavné doky. Pro zobrazení těchto doků je budete muset povolit v menu.\n\nOpravdu si přejete resetovat rozhraní ?"
Output.StartReplayFailed="Chyba při spouštění nahrávání do paměti"
Output.StartFailedGeneric="Nastala chyba při začátku nahrávání. Zkontrolujte, prosím, textový záznam pro další podrobnosti.\n\nPoznámka: Pokud používáte enkodér NVENC či AMD, zkontrolujte zda používáte aktuální verzi grafického ovladače."
+
Output.ConnectFail.Title="Spojení se nezdařilo"
Output.ConnectFail.BadPath="Chybná cesta nebo adresa připojení. Zkontrolujte, prosím, správnost svých nastavení."
Output.ConnectFail.ConnectFailed="K serveru se nepodařilo připojit"
Output.ConnectFail.InvalidStream="K nastavenému kanálu či klíči nelze přistoupit. Zkontrolujte, zda je vysílací klíč správný. Pokud ano, může být problém s připojením k serveru."
-Output.ConnectFail.Error="Při pokusu o připojení k serveru došlo k neočekávané chybě. Další informace v záznamovém souboru."
+Output.ConnectFail.Error="Při pokusu o připojení k serveru došlo k neočekávané chybě. Další informace v záznamovém souboru."
Output.ConnectFail.Disconnected="Odpojen od serveru."
+Output.StreamEncodeError.Title="Chyba kodéru"
+Output.StreamEncodeError.Msg="Při vysílání došlo k chybě kodéru."
+
Output.RecordFail.Title="Chyba při spouštění nahrávání"
Output.RecordFail.Unsupported="Výstupní formát není podporovaný nebo nepodporuje více než jednu zvukovou stopu. Zkontrolujte nastavení a zkuste to znovu."
Output.RecordNoSpace.Title="Nedostatek místa na disku"
Output.RecordNoSpace.Msg="Pro pokračování nahrávání není dostatek místa na disku."
Output.RecordError.Title="Chyba při nahrávání"
Output.RecordError.Msg="Při nahrávání došlo k nespecifikované chybě."
+Output.RecordError.EncodeErrorMsg="Při nahrávání došlo k chybě kodéru."
Output.ReplayBuffer.NoHotkey.Title="Nepřiřazena žádná klávesová zkratka!"
Output.ReplayBuffer.NoHotkey.Msg="Není nastavena žádná klávesová zkratka pro uložení záznamu. Nastavte ji prosím, abyste jej mohli ukládat."
Remux.HelpText="Natáhněte soubory do tohoto okna k převodu nebo vyberte prázdné pole \"OBS nahrávka\" pro výběr souboru."
UpdateAvailable="K dispozici je nová verze"
-UpdateAvailable.Text="Verze %1.%2.%3 je nyní k dispozici. <a href='%4'>Stáhnout</a>"
+UpdateAvailable.Text="Verze %1.%2.%3 je nyní k dispozici. <a href='%4'>Stáhnout</a>"
Basic.DesktopDevice1="Zvuk plochy"
Basic.DesktopDevice2="Zvuk plochy 2"
Basic.Main.PreviewConextMenu.Enable="Povolit náhled"
+Basic.Main.Preview.Disable="Vypnout náhled"
+
ScaleFiltering="Filter škálování"
ScaleFiltering.Point="Bod"
ScaleFiltering.Bilinear="Bilineární"
Basic.MainMenu.Edit.Transform.FitToScreen="Přizpůsobit obrazovce (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Roztáhnout na obrazovku (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Vy¢rovat"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Vycentrovat svisle"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Vycentrovat vodorovně"
Basic.MainMenu.Edit.Order="P&ořadí"
Basic.MainMenu.Edit.Order.MoveUp="Posunout výše (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Posunout níže (&D)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY Rok, 4 číslice\n%YY Rok, 2 poslední číslice (00-99)\n%MM Měsíc, číslo (01-12)\n%DD Den v měsíci, 2 číslice (01-31)\n%hh Hodina ve 24h formátu (00-23)\n%mm Minuta (00-59)\n%ss Vteřina (00-61)\n%% Znak %\n%a Zkratka dne v týdnu\n%A Den v týdnu\n%b Zkratka měsíce\n%B Měsíc\n%d Den v měsíci, 2 číslice (01-31)\n%H Hodina ve 24h formátu (00-23)\n%I Hodina ve 12h formátu (01-12)\n%m Měsíc, číslo (01-12)\n%M Minuta (00-59)\n%p AM / PM\n%S Vteřina (00-61)\n%y Rok, 2 poslední číslice (00-99)\n%Y Rok\n%z ISO 8601 časový posun od UTC nebo časového pásma\n - název nebo zkratka\n%Z Zkratka nebo název časového pásma\n"
+FilenameFormatting.TT="%CCYY Rok, čtyři číslice\n%YY Rok, poslední dvě číslice (00-99)\n%MM Měsíc, číslem (01-12)\n%DD Den v měsíci, dvě číslice (01-31)\n%hh Hodina ve 24h formátu (00-23)\n%mm Minuta (00-59)\n%ss Vteřina (00-61)\n%% Znak %\n%a Zkrácený název dne v týdnu\n%A Název dne v týdnu\n%b Zkrácený název měsíce\n%B Název měsíce\n%d Den měsíce, dvě číslice (01-31)\n%H Hodina ve 24h formátu (00-23)\n%I Hodina ve 12h formátu (01-12)\n%m Měsíc, číslem (01-12)\n%M Minuta (00-59)\n%p AM / PM\n%S Vteřina (00-61)\n%y Rok, poslední dvě číslice (00-99)\n%Y Rok\n%z ISO 8601 posun od UTC v časové zóně\n%Z Název či zkratka časové zóny\n"
Basic.Settings.Video="Obraz"
Basic.Settings.Video.Adapter="Grafická karta"
Basic.Settings.Audio="Zvuk"
Basic.Settings.Audio.SampleRate="Vzorkovací frekvence"
Basic.Settings.Audio.Channels="Kanály"
-Basic.Settings.Audio.MeterDecayRate="Rychlost útlumu snímače zvuku"
+Basic.Settings.Audio.Meters="Měřiče"
+Basic.Settings.Audio.MeterDecayRate="Rychlost rozpadu"
Basic.Settings.Audio.MeterDecayRate.Fast="Rychle"
Basic.Settings.Audio.MeterDecayRate.Medium="Střední (typ I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Pomalu (typ II PPM)"
Basic.Settings.Audio.MultichannelWarning="Předtím než začnete vysílat si zkontrolujte, zda vaše vysílací služba podporuje příjem a přehrávání prostorového zvuku. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast jsou příklady služeb, které jej plně podporují. I když Facebook Live a YouTube Live oba podporují příjem prostorového zvuku, Facebook Live jej převede na stereo a YouTube Live přehrává pouze dva kanály.\n\nOBS filtry zvuku jej plně podporují, ale podpora u pluginu VST není garantována."
Basic.Settings.Audio.MultichannelWarning.Title="Povolit prostorový zvuk?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Jste si jisti, že chcete povolit prostorový zvuk?"
-Basic.Settings.Audio.DesktopDevice="Zařízení zvuku plochy"
-Basic.Settings.Audio.DesktopDevice2="Zařízení zvuku plochy 2"
-Basic.Settings.Audio.AuxDevice="Zvukové zařízení - mikrofon/AUX"
-Basic.Settings.Audio.AuxDevice2="Zvukové zařízení - mikrofon/AUX 2"
-Basic.Settings.Audio.AuxDevice3="Zvukové zařízení - mikrofon/AUX 3"
-Basic.Settings.Audio.AuxDevice4="Zvukové zařízení - mikrofon/AUX 4"
+Basic.Settings.Audio.Devices="Zařízení"
+Basic.Settings.Audio.DesktopDevice="Zvuk plochy"
+Basic.Settings.Audio.DesktopDevice2="Zvuk plochy 2"
+Basic.Settings.Audio.AuxDevice="Mikrofon/AUX"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/AUX 2"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/AUX 3"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/AUX 4"
Basic.Settings.Audio.EnablePushToMute="Povolit Ztlumit podržením"
Basic.Settings.Audio.PushToMuteDelay="Zpoždění"
Basic.Settings.Audio.EnablePushToTalk="Povolit Naslouchat podržením"
Basic.Settings.Advanced.FormatWarning="Varování: Jiné formáty barev než je NV12 jsou primárně určeny pro nahrávání a neměly by být použity pro vysílání. Použití při vysílání zvýší využití CPU."
Basic.Settings.Advanced.Audio.BufferingTime="Čas vyrovnávací paměti zvuku"
Basic.Settings.Advanced.Video.ColorFormat="Formát barev"
-Basic.Settings.Advanced.Video.ColorSpace="Barevný prostor YUV"
-Basic.Settings.Advanced.Video.ColorRange="Oblast barev YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Barevný prostor"
+Basic.Settings.Advanced.Video.ColorRange="Rozsah barev"
Basic.Settings.Advanced.Video.ColorRange.Partial="Částečné"
Basic.Settings.Advanced.Video.ColorRange.Full="Plné"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Zařízení pro monitorování zvuku"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Sledovací zařízení"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Výchozí"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Zakázat Windows výchozí utlumování zvuku"
Basic.Settings.Advanced.StreamDelay="Zpoždění vysílání"
Basic.AdvAudio="Rozšířené vlastnosti zvuku"
Basic.AdvAudio.Name="Název"
-Basic.AdvAudio.Volume="Hlasitost (%)"
+Basic.AdvAudio.Volume="Hlasitost"
Basic.AdvAudio.Mono="Převést na Mono"
Basic.AdvAudio.Balance="Vyvážení"
Basic.AdvAudio.SyncOffset="Zpoždění synchronizace (ms)"
NoSources.Title="Žádné zdroje"
NoSources.Text="Vypadá to, že jste zatím nepřidali žádné zdroje obrazu, takže budete vysílat černou obrazovku. Opravdu chcete pokračovat ?"
NoSources.Text.AddSource="Zdroje můžete kdykoliv přidat tlačítkem + pod seznamem Zdroje v hlavním okně."
+NoSources.Label="Nepřidali jste žádné zdroj.\nKlikněte na tlačítko + níže, nebo klikněte zde pravým tlačítkem, pro přidání nového zdroje."
ChangeBG="Nastavit barvu"
CustomColor="Vlastní barva"
ResizeOutputSizeOfSource.Text="Základní a výstupní rozlišení budou změněna na velikost aktuálního zdroje."
ResizeOutputSizeOfSource.Continue="Chcete pokračovat ?"
+PreviewTransition="Náhled přechodu"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/da-DK.ini
Changed
Browse="Gennemse"
Mono="Mono"
Stereo="Stereo"
-DroppedFrames="Tabte billeder %1 (%2%)"
+DroppedFrames="Tabte billeder (frames) %1 (%2%)"
StudioProgramProjector="Fuldskærmsprojektering (program)"
PreviewProjector="Fuldskærmsprojektering (forhåndsvisning)"
SceneProjector="Fuldskærmsprojektering (scene)"
SourceProjector="Fuldskærmsprojektering (kilde)"
StudioProgramWindow="Vinduesprojektering (program)"
PreviewWindow="Vinduesprojektering (forhåndsvisning)"
-SceneWindow="Vinduesprojektering (Scene)"
+SceneWindow="Vinduesprojektering (scene)"
SourceWindow="Vinduesprojektering (kilde)"
MultiviewProjector="Multiview (fuldskærm)"
MultiviewWindowed="Multiview (i vindue)"
Clear="Ryd"
-Revert="Gendan"
+Revert="Tilbagefør"
Show="Vis"
Hide="Skjul"
UnhideAll="Vis alle"
ResetOSXVSyncOnExit="Nulstil OSX V-Sync ved afslutning"
HighResourceUsage="Encodingproces overbelastet! Overvej at reducere videoressourceforbruget eller benytte et hurtigere encoding-forvalg."
Transition="Overgang"
-QuickTransitions="Hurtig overgange"
+QuickTransitions="Hurtige overgange"
Left="Venstre"
Right="Højre"
Top="Top"
VerticalLayout="Lodret layout"
Group="Gruppér"
DoNotShowAgain="Vis ikke igen"
+Default="(Standard)"
+Calculating="Beregner..."
AlreadyRunning.Title="OBS kører allerede"
AlreadyRunning.Text="OBS kører allerede! Medmindre dette er tilsigtet, så bør du lukke enhver eksisterende OBS-proces, inden du forsøger at køre en ny. Hvis du har OBS opsat til at minimeres sig til systembakken, så tjek om den stadig kører dér."
AlreadyRunning.LaunchAnyway="Start alligevel"
DockCloseWarning.Title="Lukker dokbart vindue"
-DockCloseWarning.Text="Du har netop lukket et dokbart vindue. Hvis du vil vise det igen, skal du enytte menuen Vis → Doks på menulinjen."
+DockCloseWarning.Text="Du har netop lukket et dokbart vindue. Hvis du vil vise det igen, skal du benytte menuen Vis → Doks på menulinjen."
Auth.Authing.Title="Godkender..."
Auth.Authing.Text="Godkender med %1, afvent venligst..."
Auth.LoadingChannel.Title="Indlæser kanalinformation..."
Auth.LoadingChannel.Text="Indlæser kanalinformation for %1, afvent venligst..."
Auth.ChannelFailure.Title="Mislykkedes at indlæse kanal"
-Auth.ChannelFailure.Text="Mislykkedes at indlæse kanalinformation for%1\n\n%2: %3"
+Auth.ChannelFailure.Text="Mislykkedes at indlæse kanalinformation for %1\n\n%2: %3"
Auth.Chat="Chat"
Auth.StreamInfo="Streaminformation"
TwitchAuth.Stats="Twitch-statistikker"
TwitchAuth.Feed="Twitch-aktivitetsfeed"
+TwitchAuth.TwoFactorFail.Title="Stream-nøgle kunne ikke forespørges"
+TwitchAuth.TwoFactorFail.Text="OBS kunne ikke forbinde til din Twitch-konto. Tjek, at tofaktorgodkendelse er opsat i dine <a href='https://www.twitch.tv/settings/security'>Twitch-sikkerhedsindstillinger</a>, da dette er nødvendigt for at streame."
Copy.Filters="Kopiér filtre"
Paste.Filters="Indsæt filtre"
BandwidthTest.Region.Asia="Asien"
BandwidthTest.Region.Other="Anden"
-Basic.FirstStartup.RunWizard="Vil du at køre auto-opsætningsguiden? Du kan også opsætte dine indstillinger manuelt, ved at klikke på knappen Indstillinger i hovedvinduet."
+Basic.FirstStartup.RunWizard="Vil du at køre auto-opsætningsguiden? Du kan også opsætte dine indstillinger manuelt ved at klikke på knappen Indstillinger i hovedvinduet."
Basic.FirstStartup.RunWizard.NoClicked="Skifter du mening, så kan du altid køre auto-opsætningsguiden igen fra menuen Værktøjer."
Basic.AutoConfig="Auto-opsætningsguide"
Basic.AutoConfig.StartPage.PrioritizeRecording="Optimér kun til optagelse, jeg vil ikke foretage streaming"
Basic.AutoConfig.VideoPage="Videoindstillinger"
Basic.AutoConfig.VideoPage.SubTitle="Angiv de videoindstillinger du gerne vil benytte"
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Brug aktuel (%1x%2)"
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Benyt aktuelle (%1x%2)"
Basic.AutoConfig.VideoPage.BaseResolution.Display="Skærm %1 (%2x%3)"
-Basic.AutoConfig.VideoPage.FPS.UseCurrent="Brug aktuel (%1)"
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Benyt aktuelle (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Enten 60 eller 30, men foretræk 60 når muligt"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Enten 60 eller 30, men foretræk høj opløsning"
-Basic.AutoConfig.VideoPage.CanvasExplanation="Bemærk: Lærredets (basis-) opløsning er ikke nødvendigvis identisk med den opløsning, du vil streame med eller optage i. Din aktuelle stream-/optagelsesopløsning kan blive nedskaleret fra lærredsopløsningen for at reducere ressourceforbrug eller krav til bithastighed."
+Basic.AutoConfig.VideoPage.CanvasExplanation="Bemærk: Lærredets (basis-) opløsning er ikke nødvendigvis identisk med den opløsning, du vil streame med eller optage i. Din aktuelle stream-/optagelsesopløsning kan blive nedskaleret fra lærredsopløsningen for at reducere ressourceforbrug eller bit-hastighedskrav."
Basic.AutoConfig.StreamPage="Streamoplysninger"
Basic.AutoConfig.StreamPage.SubTitle="Angiv dine streamoplysninger"
Basic.AutoConfig.StreamPage.ConnectAccount="Forbind konto (valfrit)"
Basic.AutoConfig.StreamPage.Server="Server"
Basic.AutoConfig.StreamPage.StreamKey="Streamnøgle"
Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
-Basic.AutoConfig.StreamPage.PerformBandwidthTest="Beregn bithastigheden vha. en båndbreddetest (kan tage et par minutter)"
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Foretræk hardware-encodning"
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-encoding fjerner det meste CPU-forbrug, men kan kræve højere bithastighed for at opnå samme kvalitetsniveau."
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimér bit-hastigheden vha. en båndbreddetest (kan tage et par minutter)"
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Foretræk hardwarekodning"
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarekodning fjerner det meste CPU-forbrug, men kan kræve højere bit-hastighed for at opnå samme kvalitetsniveau."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamadvarsel"
Basic.AutoConfig.StreamPage.StreamWarning.Text="Båndbreddetesten er ved at streame tilfældige videodata uden lyd til din kanal. Det anbefales, hvis muligheden foreligger, midlertidigt at fravælger at gemme streams samt at angive streamen som privat indtil testen er fuldført. Fortsæt?"
Basic.AutoConfig.TestPage="Endelige resultater"
-Basic.AutoConfig.TestPage.SubTitle.Testing="Programmet udfører nu en række tests for at beregne de idélle indstillinger"
+Basic.AutoConfig.TestPage.SubTitle.Testing="Programmet udfører nu en række tests for at estimere de bedste indstillinger"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testning fuldført"
Basic.AutoConfig.TestPage.TestingBandwidth="Udfører båndbreddetest, kan tage nogle få minutter..."
Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Forbinder til: %1..."
Basic.AutoConfig.TestPage.TestingRes.Resolution="Tester %1x%2 %3 FPS..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming-encoder"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Optagelses-encoder"
-Basic.AutoConfig.TestPage.Result.Header="Programmet har fastslået, at disse beregnede indstillinger er de mest idéelle for dig:"
+Basic.AutoConfig.TestPage.Result.Header="Programmet har fastslået, at disse estimerede indstillinger er de mest idéelle for dig:"
Basic.AutoConfig.TestPage.Result.Footer="Klik på Anvend indstillinger for at benytte denne opsætning. Klik på Tilbage for at genopsætte guiden og forsøge igen. For at opsætte manuelt, så klik på Annullér og åbn Indstillinger."
Basic.Stats="Statistikker"
Basic.Stats.HDDSpaceAvailable="Tilgængelig diskplads"
Basic.Stats.MemoryUsage="Hukommelsesforbrug"
Basic.Stats.AverageTimeToRender="Gennemsnitstid for billedrendering"
-Basic.Stats.SkippedFrames="Oversprang billeder grundet encoder-forsinkelse"
+Basic.Stats.SkippedFrames="Oversprang billeder grundet kodningsforsinkelse"
Basic.Stats.MissedFrames="Billeder tabt grundet renderingsforsinkelse"
Basic.Stats.Output.Stream="Stream"
Basic.Stats.Output.Recording="Optagelse"
Basic.Stats.Status.Inactive="Inaktiv"
Basic.Stats.DroppedFrames="Tabte billeder (netværk)"
Basic.Stats.MegabytesSent="Samlet Dataoutput"
-Basic.Stats.Bitrate="Bithastighed"
+Basic.Stats.Bitrate="Bit-hastighed"
+Basic.Stats.DiskFullIn="Disk fuld om (ca.)"
ResetUIWarning.Title="Sikker på, at du vil nulstille UI'en?"
-ResetUIWarning.Text="Nulstilling af UI'en vil skjule ekstra dokker. Du skal synliggøre disse dokker i visningsmenuen, hvis du ønsker at se dem.\n\nSikker på, at du vil nulstille UI'en?"
+ResetUIWarning.Text="Nulstilling af UI'en vil skjule ekstra dok'er. Du skal synliggøre disse dok'er i visningsmenuen, hvis du ønsker at se dem.\n\nSikker på, at du vil nulstille UI'en?"
Updater.Title="Ny opdatering tilgængelig"
Updater.Text="Der er en ny opdatering tilgængelig:"
Updater.UpdateNow="Opdatér nu"
Updater.RemindMeLater="Påmind mig senere"
Updater.Skip="Overspring version"
-Updater.Running.Title="Program aktuelt aktivt"
-Updater.Running.Text="Outputs er aktuelt aktive. Luk alle aktive outputs inden forsøg på opdatering"
+Updater.Running.Title="Program pt. aktivt"
+Updater.Running.Text="Outputs er pt. aktive. Luk alle aktive outputs inden forsøg på opdatering"
Updater.NoUpdatesAvailable.Title="Ingen opdateringer tilgængelige"
Updater.NoUpdatesAvailable.Text="Ingen opdateringer er pt. tilgængelige"
Updater.FailedToLaunch="Mislykkedes at starte opdatering"
Output.StartReplayFailed="Mislykkedes at starte genafspilnings-buffer"
Output.StartFailedGeneric="Start af output mislykkedes. Tjek loggen for oplysninger.\n\nBemærk: Benytter du NVENC- eller AMD-encodere, så sørg for at dine videodrivere er opdaterede."
+
Output.ConnectFail.Title="Mislykkedes at forbinde"
-Output.ConnectFail.BadPath="Ugyldig sti eller forbindelses-URL. Tjek dine indstillinger for at bekræfte, at de er gyldige."
+Output.ConnectFail.BadPath="Ugyldig sti eller forbindelses-URL. Tjek dine indstillinger for at bekræfte, at de er gyldige."
Output.ConnectFail.ConnectFailed="Mislykkedes at forbinde til server"
-Output.ConnectFail.InvalidStream="Kunne ikke tilgå den angivne kanel eller streamnøgle, tjek din streamnøgle. Hvis den er korrekt, kan der være problemer med at forbinde til serveren."
-Output.ConnectFail.Error="En uventet fejl opstod, da du forsøgte at forbinde til serveren. Se yderligere oplysninger i logfilen."
+Output.ConnectFail.InvalidStream="Kunne ikke tilgå den angivne kanel eller streamnøgle. Tjek din streamnøgle. Er den korrekt, kan der være et problemer med at forbinde til serveren."
+Output.ConnectFail.Error="En uventet fejl opstod, under forsøgtet på at forbinde til serveren. Se yderligere info i logfilen."
Output.ConnectFail.Disconnected="Afbrudt fra serveren."
+Output.StreamEncodeError.Title="Kodningsfejl"
+Output.StreamEncodeError.Msg="En kodningsfejl opstod under streamingen."
+
Output.RecordFail.Title="Mislykkedes at starte optagelse"
Output.RecordFail.Unsupported="Outputformatet er enten uunderstøttet eller understøtter ikke flere end ét lydspor. Tjek dine indstillinger og forsøg igen."
Output.RecordNoSpace.Title="Utilstrækkelig diskplads"
-Output.RecordNoSpace.Msg="Der er ikke tilstrækkelig diskplads til at fortsætte optagelse."
+Output.RecordNoSpace.Msg="Utilstrækkelig diskplads til at fortsætte optagelse."
Output.RecordError.Title="Optagelsesfejl"
Output.RecordError.Msg="En uspecificeret fejl opstod under optagelse."
-Output.ReplayBuffer.NoHotkey.Title="Ingen genvejstast angivet!"
-Output.ReplayBuffer.NoHotkey.Msg="Ingen Gem-genvejstast angivet til genafspilnings-buffer. Angiv en \"Gem\"-genvejstast til brug for at gemme genafspilningsoptagelser."
+Output.RecordError.EncodeErrorMsg="En kodningsfejl opstod under optagelsen."
+Output.ReplayBuffer.NoHotkey.Title="Ingen genvejstast opsat!"
+Output.ReplayBuffer.NoHotkey.Msg="Ingen Gem-genvejstast opsat til genafspilnings-buffer. Opsæt en \"Gem\"-genvejstast til brug for at gemme genafspilningsoptagelser."
Output.BadPath.Title="Ugyldig filsti"
-Output.BadPath.Text="Den opsatte outputsti er ugyldig. Tjek indstillinger for at bekræfte, at en gyldig filsti er opsat."
+Output.BadPath.Text="Den opsatte filoutputsti er ugyldig, så tjek at en gyldig er opsat i Indstillinger."
LogReturnDialog="Log er uploadet"
LogReturnDialog.CopyURL="Kopiér URL"
-LogReturnDialog.ErrorUploadingLog="Fejl under uploadi af logfil"
+LogReturnDialog.ErrorUploadingLog="Fejl under upload af logfil"
Remux.SourceFile="OBS-optagelse"
Remux.TargetFile="Destinationsfil"
Remux.FileExists="Flg. destinationsfiler findes allerede. Erstat disse?"
Remux.ExitUnfinishedTitle="Remuxing i gang"
Remux.ExitUnfinished="Remuxing er ikke færdig. Stopper du nu, kan det gøre destinationsfilen ubrugelig.\nSikker på, at du vil stoppe remuxing?"
-Remux.HelpText="Slip filer i vinduet for at remuxe eller vælg en tom \"OBS-optagelse\"-celle for at søge efter en fil."
+Remux.HelpText="Slip filer i vinduet for at remuxe eller vælg en tom \"OBS-optagelse\" celle for at søge efter en fil."
UpdateAvailable="Ny opdatering tilgængelig"
-UpdateAvailable.Text="Version %1.%2.%3 er nu tilgængelig. <a href='%4'>Klik her for at downloade</a>"
+UpdateAvailable.Text="Version %1.%2.%3 er nu tilgængelig. <a href='%4'>Klik her for at downloade</a>"
Basic.DesktopDevice1="Computerlyd"
Basic.DesktopDevice2="Computerlyd 2"
Basic.Main.PreviewConextMenu.Enable="Aktivér forhåndsvisning"
+Basic.Main.Preview.Disable="Deaktivér forhåndsvisning"
+
ScaleFiltering="Skaleringsfiltrering"
ScaleFiltering.Point="Punkt"
-ScaleFiltering.Bilinear="Bilinear"
+ScaleFiltering.Bilinear="Bilineær"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Område"
Deinterlacing.Discard="Kassér"
Deinterlacing.Retro="Retro"
Deinterlacing.Blend="Bland"
-Deinterlacing.Blend2x="Blend 2x"
+Deinterlacing.Blend2x="Bland 2x"
Deinterlacing.Linear="Lineær"
Deinterlacing.Linear2x="Lineær 2x"
Deinterlacing.Yadif="Yadif"
Deinterlacing.TopFieldFirst="Øverste felt først"
Deinterlacing.BottomFieldFirst="Nederste felt først"
-VolControl.SliderUnmuted="Lydstyrkeskyder for '%1': %2"
-VolControl.SliderMuted="Lydstyrkeskyder for '%1': %2 (pt. på lydløs)"
-VolControl.Mute="Gør '%1' tavs"
+VolControl.SliderUnmuted="Lydstyrkeskyder til '%1': %2"
+VolControl.SliderMuted="Lydstyrkeskyder til '%1': %2 (pt. på lydløs)"
+VolControl.Mute="Gør '%1' lydløs"
VolControl.Properties="Egenskaber for '%1'"
-Basic.Main.AddSceneDlg.Title="Tilføje scene"
+Basic.Main.AddSceneDlg.Title="Tilføj scene"
Basic.Main.AddSceneDlg.Text="Angiv navnet på scenen"
Basic.Main.DefaultSceneName.Text="Scene %1"
Basic.SourceSelect="Opret/Vælg kilde"
Basic.SourceSelect.CreateNew="Opret ny"
Basic.SourceSelect.AddExisting="Tilføj eksisterende"
-Basic.SourceSelect.AddVisible="Gør kilden synlig"
+Basic.SourceSelect.AddVisible="Gør kilde synlig"
Basic.PropertiesWindow="Egenskaber for '%1'"
Basic.PropertiesWindow.AutoSelectFormat="%1 (auto-vælg: %2)"
Basic.PropertiesWindow.SelectColor="Vælg farve"
Basic.PropertiesWindow.SelectFont="Vælg skrifttype"
Basic.PropertiesWindow.ConfirmTitle="Indstillinger ændret"
-Basic.PropertiesWindow.Confirm="Der er ændringer, som ikke er gemt. Skal de gemmes?"
+Basic.PropertiesWindow.Confirm="Der er ændringer, som ikke er gemt. Skal de gemmes?"
Basic.PropertiesWindow.NoProperties="Ingen egenskaber tilgængelige"
Basic.PropertiesWindow.AddFiles="Tilføj filer"
Basic.PropertiesWindow.AddDir="Tilføj mappe"
Basic.PropertiesView.FPS.Rational="Rationelle FPS-værdier"
Basic.PropertiesView.FPS.ValidFPSRanges="Gyldige FPS-områder:"
-Basic.InteractionWindow="Interagere med '%1'"
+Basic.InteractionWindow="Interagerer med '%1'"
-Basic.StatusBar.Reconnecting="Afbrudt, gentilslutter om %2 sekund(-er) (forsøg %1)"
+Basic.StatusBar.Reconnecting="Afbrudt, genforbinder om %2 sekund(-er) (forsøg %1)"
Basic.StatusBar.AttemptingReconnect="Forsøger at genforbinde... (forsøg %1)"
Basic.StatusBar.ReconnectSuccessful="Genforbundet nu"
-Basic.StatusBar.Delay="Forsinkelse (%1 sek)"
-Basic.StatusBar.DelayStartingIn="Forsinkelse (starter om %1 sek)"
-Basic.StatusBar.DelayStoppingIn="Forsinkelse (stopper om %1 sek)"
-Basic.StatusBar.DelayStartingStoppingIn="Forsinkelse (stopper om %1 sek, starter om %2 sek)"
+Basic.StatusBar.Delay="Forsinkelse (%1 sek.)"
+Basic.StatusBar.DelayStartingIn="Forsinkelse (starter om %1 sek.)"
+Basic.StatusBar.DelayStoppingIn="Forsinkelse (stopper om %1 sek.)"
+Basic.StatusBar.DelayStartingStoppingIn="Forsinkelse (stopper om %1 sek., starter om %2 sek.)"
Basic.Filters="Filtre"
Basic.Filters.AsyncFilters="Lyd-/videofiltre"
Basic.Filters.AudioFilters="Lydfiltre"
Basic.Filters.EffectFilters="Effektfiltre"
-Basic.Filters.Title="Filtre for '%1'"
+Basic.Filters.Title="Filtre til '%1'"
Basic.Filters.AddFilter.Title="Filternavn"
Basic.Filters.AddFilter.Text="Angiv navnet på filteret"
Basic.MainMenu.File="&Fil"
Basic.MainMenu.File.Export="&Eksport"
Basic.MainMenu.File.Import="&Import"
-Basic.MainMenu.File.ShowRecordings="Vis optagelse (&R)"
+Basic.MainMenu.File.ShowRecordings="Vis optagelse&r"
Basic.MainMenu.File.Remux="Re&mux optagelser"
Basic.MainMenu.File.Settings="Ind&stillinger"
Basic.MainMenu.File.ShowSettingsFolder="Vis Indstillingsmappe"
Basic.MainMenu.AlwaysOnTop="&Altid øverst"
Basic.MainMenu.File.Exit="Afslut (&X)"
-Basic.MainMenu.Edit="R&edigere"
+Basic.MainMenu.Edit="R&edigér"
Basic.MainMenu.Edit.Undo="Fortryd (&U)"
Basic.MainMenu.Edit.Redo="Gendan (&R)"
Basic.MainMenu.Edit.UndoAction="Fortryd $1 (&U)"
Basic.MainMenu.Edit.Transform.FitToScreen="Tilpas til skærm (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="&Stræk til skærm"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centér på skærm"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrér vertikalt"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrér horisontalt"
Basic.MainMenu.Edit.Order="Rækkefølge (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Flyt Op (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Flyt Ne&d"
Basic.MainMenu.View="&Vis"
Basic.MainMenu.View.Toolbars="Værk&tøjslinjer"
-Basic.MainMenu.View.Docks="Dokker"
+Basic.MainMenu.View.Docks="Dok'er"
Basic.MainMenu.View.Docks.ResetUI="Nulstil UI"
Basic.MainMenu.View.Docks.LockUI="Lås UI"
Basic.MainMenu.View.Toolbars.Listboxes="&Listebokse"
Basic.MainMenu.Help.Website="Besøg &Websted"
Basic.MainMenu.Help.Discord="Tilmeld til &Discord-server"
Basic.MainMenu.Help.Logs="&Logfiler"
-Basic.MainMenu.Help.Logs.ShowLogs="Vi&s log-filer"
+Basic.MainMenu.Help.Logs.ShowLogs="Vi&s logfiler"
Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload aktuel logfil (&C)"
Basic.MainMenu.Help.Logs.UploadLastLog="Upload seneste &logfil"
Basic.MainMenu.Help.Logs.ViewCurrentLog="&Vis aktuel log"
Basic.MainMenu.Help.About="Om (&A)"
Basic.Settings.ProgramRestart="Programmet skal genstartes, for at effektuere disse indstillinger."
-Basic.Settings.ConfirmTitle="Bekræfte ændringer"
-Basic.Settings.Confirm="Du har ugemte ændringer. Gem ændringer?"
+Basic.Settings.ConfirmTitle="Bekræft ændringer"
+Basic.Settings.Confirm="Du har ugemte ændringer, gem dem nu?"
Basic.Settings.General="Generelt"
Basic.Settings.General.Theme="Tema"
Basic.Settings.General.RecordWhenStreaming="Optag automatisk ved streaming"
Basic.Settings.General.KeepRecordingWhenStreamStops="Fortsæt med at optage når stream stopper"
Basic.Settings.General.ReplayBufferWhileStreaming="Start automatisk genafsplinings-buffer ved streaming"
-Basic.Settings.General.KeepReplayBufferStreamStops="Bibehold genafsplinings-buffer aktiv når stream stopper"
+Basic.Settings.General.KeepReplayBufferStreamStops="Behold genafsplinings-buffer aktiv når stream stopper"
Basic.Settings.General.SysTray="Systembakke"
-Basic.Settings.General.SysTrayWhenStarted="Minimér til systembakke ved start"
+Basic.Settings.General.SysTrayWhenStarted="Minimér til systembakke når startet"
Basic.Settings.General.SystemTrayHideMinimize="Minimér altid til systembakke i stedet for opgavebjælke"
Basic.Settings.General.SaveProjectors="Gem projektorer ved afslutning"
Basic.Settings.General.Preview="Forhåndsvisning"
Basic.Settings.General.Multiview.MouseSwitch="Klik for at skifte mellem scener"
Basic.Settings.General.Multiview.DrawSourceNames="Vis scenenavne"
Basic.Settings.General.Multiview.DrawSafeAreas="Tegn sikre områder (EBU R 95)"
-Basic.Settings.General.MultiviewLayout="Multivisningslayout"
+Basic.Settings.General.MultiviewLayout="Multiview-layout"
Basic.Settings.General.MultiviewLayout.Horizontal.Top="Vandret, øverst (8 scener)"
Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Vandret, nederst (8 scener)"
Basic.Settings.General.MultiviewLayout.Vertical.Left="Lodret, venstre (8 scener)"
Basic.Settings.Output.Encoder="Encoder"
Basic.Settings.Output.SelectDirectory="Vælg optagelsesmappe"
Basic.Settings.Output.SelectFile="Vælg optagelsesfil"
-Basic.Settings.Output.EnforceBitrate="Håndhæv streamingtjenestes bithastighedsbegrænsninger"
+Basic.Settings.Output.EnforceBitrate="Håndhæv streamingtjenestes bit-hastighedsbegrænsninger"
Basic.Settings.Output.Mode="Outputtilstand"
Basic.Settings.Output.Mode.Simple="Simpel"
Basic.Settings.Output.Mode.Adv="Avanceret"
Basic.Settings.Output.UseReplayBuffer="Aktivér Genafspilnings-buffer"
Basic.Settings.Output.ReplayBuffer.SecondsMax="Maksimal genafspilningstid (sek.)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maksimal hukommelse (MB)"
-Basic.Settings.Output.ReplayBuffer.Estimate="Anslået hukommelsesforbrug: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Ikke kan beregne hukommelsesforbrug. Angiv en maks. hukommelsesgrænse."
+Basic.Settings.Output.ReplayBuffer.Estimate="Estimeret hukommelsesforbrug: %1 MB"
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Ikke kan estimere hukommelsesforbrug. Angiv en maks. hukommelsesgrænse."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Bemærk: Sørg for at opsætte en genvejstast til genafspilnings-bufferen i afsnittet for genvejstaster)"
Basic.Settings.Output.ReplayBuffer.Prefix="Genafspilnings-buffer, filnavnpræfiks"
Basic.Settings.Output.ReplayBuffer.Suffix="Endelse"
Basic.Settings.Output.Simple.RecordingQuality="Optagelseskvalitet"
Basic.Settings.Output.Simple.RecordingQuality.Stream="Samme som stream"
Basic.Settings.Output.Simple.RecordingQuality.Small="Høj kvalitet, medium filstørrelse"
-Basic.Settings.Output.Simple.RecordingQuality.HQ="Identisk kvalitet, stor filstørrelse"
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Synlig identisk kvalitet, stor filstørrelse"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tabsfri kvalitet, enorm stor filstørrelse"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Videostreamingbithastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bithastighedsbegrænsninger\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Audiostreamingbithastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bithastighedsbegrænsninger\"."
-Basic.Settings.Output.Simple.Warn.Encoder="Advarsel: Optagelse med en software-encoder i en anden kvalitet end det streamede vil medføre ekstra CPU-forbrug, hvis du streamer og optager samtidigt."
-Basic.Settings.Output.Simple.Warn.Lossless="Advarsel: Tabsfri kvalitet genererer gevaldigt store filstørrelser! Tabsfri kvalitet kan bruge op til 7 GB diskplads pr. minut ved høje opløsninger og billedhastigheder. Tabsfri tilstand anbefales ikke til lange optagelser, medmindre du har en meget stor mængde tilgængelig diskplads."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Videostreamingbit-hastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bit-hastighedsbegrænsninger\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Audiostreamingbit-hastigheden sættes til %1, som er den øvre grænse for den aktuelle streamingtjeneste. Er du sikker på, at du vil at gå over %1, så aktivér avancerede encoder-valg og afmarkér \"Gennemtving streamingtjenestes bit-hastighedsbegrænsninger\"."
+Basic.Settings.Output.Simple.Warn.Encoder="Advarsel: Optagelse med en software-encoder i en anden kvalitet end den streamede vil medføre ekstra CPU-forbrug, hvis du streamer og optager samtidigt."
+Basic.Settings.Output.Simple.Warn.Lossless="Advarsel: Tabsfri kvalitet genererer gevaldigt store filstørrelser! Tabsfri kvalitet kan forbruge op til 7 GB diskplads pr. minut ved høje opløsninger og billedhastigheder. Tabsfri tilstand anbefales ikke til lange optagelser, medmindre du har masser af tilgængelig diskplads."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sikker på, at du vil benytte tabsfri kvalitet?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Tabsfri kvalitet-advarsel!"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 lavt, forvalgt CPU-forbrug, øger filstørrelsen)"
-Basic.Settings.Output.VideoBitrate="Videobithastighed"
-Basic.Settings.Output.AudioBitrate="Audiobithastighed"
+Basic.Settings.Output.VideoBitrate="Videobit-hastighed"
+Basic.Settings.Output.AudioBitrate="Audiobit-hastighed"
Basic.Settings.Output.Reconnect="Automatisk gentilslutning"
-Basic.Settings.Output.RetryDelay="Forsøg igen-forsinkelse (sekunder)"
+Basic.Settings.Output.RetryDelay="Forsøg igen-forsinkelse (sek.)"
Basic.Settings.Output.MaxRetries="Maks. antal forsøg"
Basic.Settings.Output.Advanced="Aktivér avancerede Encoder-indstillinger"
-Basic.Settings.Output.EncoderPreset="Encoderforvalg"
+Basic.Settings.Output.EncoderPreset="Encoder-forvalg"
Basic.Settings.Output.CustomEncoderSettings="Tilpasset Encoder-indstillinger"
Basic.Settings.Output.CustomMuxerSettings="Tilpasset Muxer-indstillinger"
Basic.Settings.Output.NoSpaceFileName="Generér filnavn uden mellemrum"
-Basic.Settings.Output.Adv.Rescale="Omskaleringsoutput"
+Basic.Settings.Output.Adv.Rescale="Omskalér output"
Basic.Settings.Output.Adv.AudioTrack="Lydspor"
Basic.Settings.Output.Adv.Streaming="Streaming"
Basic.Settings.Output.Adv.ApplyServiceSettings="Håndhæv streamingtjenestes encoder-indstillinger"
Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe-Interval (billeder)"
Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Vis alle codecs (selv potentielt inkompatible)"
-FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
+FilenameFormatting.completer="%CCYY-%DD-%MM %hh-%mm-%ss\n%DD-%MM-%YY %hh-%mm-%ss\n%d-%m-%Y %H-%M-%S\n%d-%m-%y %H-%M-%S\n%a %d-%m-%Y %H-%M-%S\n%A %d-%m-%Y %H-%M-%S\n%d-%b-%Y %H-%M-%S\n%d-%B-%Y %H-%M-%S\n%d-%m-%Y %I-%M-%S-%p\n%d-%m-%Y %H-%M-%S-%z\n%d-%m-%Y %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY år, fire cifre\n%YY år, sidste to cifre (00-99)\n%MM måned som tal (01-12)\n%DD dag i måneden, foranstillet nul (01-31)\n%hh time i 24t format (00-23)\n%mm minut (00-59)\n%ss sekund (00-61)\n%% et % tegn\n%a forkortet ugedagsnavn\n%A helt ugedagsnavn\n%b forkortet månedsnavn\n%B helt månedsnavn\n%d dag i åneden, foranstillet nul (01-31)\n%H time i 24t format (00-23)\n%I time i 12t format (01-12)\n%m måned som et tal (01-12)\n%M minut (00-59)\n%p am eller pm angivelse\n%S sekund (00-61)\n%y år, sidste to cifre (00-99)\n%Y år\n%z ISO 8601 offset fra UTC eller tidszone\n navn eller forkortelse\n%Z tidszone navn eller forkortelse\n"
+FilenameFormatting.TT="%CCYY År, fire cifre\n%YY År, sidste to cifre (00-99)\n%MM Måned i decimaltalsform (01-12)\n%DD Månedsdag, nul-foranstillet (01-31)\n%hh Time i 24-timersformat (00-23)\n%mm Minut (00-59)\n%ss Sekund (00-61)\n%% Et %-tegn\n%a Forkortet ugedagsnavn\n%A Fuldt ugedagsnavn\n%b Forkortet månedsnavn\n%B Fuldt månedsnavn\n%d Månedsdag, nul-foranstillet (01-31)\n%H Time i 24-timersformat (00-23)\n%I Time i 12-timersformat (01-12)\n%m Måned i decimaltalsform (01-12)\n%M Minut (00-59)\n%p AM-/PM-betegnelse\n%S Sekund (00-61)\n%y År, sidste to cifre (00-99)\n%Y År\n%z ISO 8601-forskudt fra UTC i tidszone\n%Z Tidszonenavn eller -forkortelse\n"
Basic.Settings.Video="Video"
Basic.Settings.Video.Adapter="Skærmkort"
Basic.Settings.Video.Numerator="Tæller"
Basic.Settings.Video.Denominator="Nævner"
Basic.Settings.Video.Renderer="Gengiver"
-Basic.Settings.Video.InvalidResolution="Ugyldig opløsningsværdi. Skal være [width]x[height] (dvs. 1.920x1.080)"
-Basic.Settings.Video.CurrentlyActive="Videooutput erpt. aktivt. Slå evt. outputs fra for at ændre videoindstillinger."
+Basic.Settings.Video.InvalidResolution="Ugyldig opløsningsværdi. Skal være [width]x[height] (f.eks. 1.920x1.080)"
+Basic.Settings.Video.CurrentlyActive="Videooutput erpt. aktivt. Afbryd evt. outputs fra for at ændre videoindstillinger."
Basic.Settings.Video.DisableAero="Deaktivér Aero"
-Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (hurtigst, men sløret ved skalering)"
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinær (hurtigst, men sløret ved skalering)"
Basic.Settings.Video.DownscaleFilter.Bicubic="Bikubisk (skarp skalering, 16 samples)"
Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (skarp skalering, 32 samples)"
Basic.Settings.Audio="Lyd"
-Basic.Settings.Audio.SampleRate="Samplehastighed"
+Basic.Settings.Audio.SampleRate="Samplingshastighed"
Basic.Settings.Audio.Channels="Kanaler"
-Basic.Settings.Audio.MeterDecayRate="Lydmålerudstyring, faldhastighed"
+Basic.Settings.Audio.Meters="Udstyringsmålere"
+Basic.Settings.Audio.MeterDecayRate="Aftagelseshastighed"
Basic.Settings.Audio.MeterDecayRate.Fast="Hurtig"
Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Langsom (Type II PPM)"
Basic.Settings.Audio.PeakMeterType="Peak Meter-type"
-Basic.Settings.Audio.PeakMeterType.SamplePeak="Intervalspidsværdi"
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Samplingsspidsværdi"
Basic.Settings.Audio.PeakMeterType.TruePeak="Sand spidsværdi (højere CPU-belastning)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="ADVARSEL: Surround Sound-lyd er aktiveret."
Basic.Settings.Audio.MultichannelWarning="Tjek ifm. streaming om din streamingtjeneste understøtter både Surround Sound-input og -afspilning. Twitch, Facebook 360 Live, Mixer RTMP og Smashcast er eksempler, hvor surroundlyd understøttes fuldt ud. Selvom Facebook Live og YouTube Live begge accepterer surround input, nedmikser Facebook Live til stereo, og YouTube Live afspiller kun to kanaler.\n\nOBS-lydfiltre er kompatible med surroundlyd, dog er VST-pluginsupport ikke garanteret."
Basic.Settings.Audio.MultichannelWarning.Title="Aktivér Surround Sound-lyd?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Sikker på, at du vil aktivere Surround Sound-lyd?"
-Basic.Settings.Audio.DesktopDevice="Computerlydenhed"
-Basic.Settings.Audio.DesktopDevice2="Computerlydenhed 2"
-Basic.Settings.Audio.AuxDevice="Mic/Auxiliary-lydenhed"
-Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary-lydenhed 2"
-Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary-lydenhed 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/ekstra lydenhed 4"
-Basic.Settings.Audio.EnablePushToMute="Aktivér tryk-for-stilhed"
-Basic.Settings.Audio.PushToMuteDelay="Tryk-for-stilhed forsinkelse"
+Basic.Settings.Audio.Devices="Enheder"
+Basic.Settings.Audio.DesktopDevice="Computerlyd"
+Basic.Settings.Audio.DesktopDevice2="Computerlyd 2"
+Basic.Settings.Audio.AuxDevice="Mic/Aux Lydenhed"
+Basic.Settings.Audio.AuxDevice2="Mic/Aux Lydenhed 2"
+Basic.Settings.Audio.AuxDevice3="Mic/Aux Lydenhed 3"
+Basic.Settings.Audio.AuxDevice4="Mic/Aux Lydenhed 4"
+Basic.Settings.Audio.EnablePushToMute="Aktivér tryk-gør-tavs"
+Basic.Settings.Audio.PushToMuteDelay="Tryk-gør-tavs forsinkelse"
Basic.Settings.Audio.EnablePushToTalk="Aktivér tryk-for-tale"
-Basic.Settings.Audio.PushToTalkDelay="Tryk-for-at-tale forsinkelse"
+Basic.Settings.Audio.PushToTalkDelay="Tryk-for-tale forsinkelse"
Basic.Settings.Audio.UnknownAudioDevice="[Enhed ikke tilsluttet eller utilgængelig]"
Basic.Settings.Audio.Disabled="Deaktiveret"
Basic.Settings.Advanced.FormatWarning="Advarsel: Farveformater ud over NV12 er primært beregnet til optagelse, og de anbefales ikke under streaming. Streaming kan medføre øget CPU-forbrug grundet farveformatkonvertering."
Basic.Settings.Advanced.Audio.BufferingTime="Lyd-bufferinterval"
Basic.Settings.Advanced.Video.ColorFormat="Farveformat"
-Basic.Settings.Advanced.Video.ColorSpace="YUV farverum"
-Basic.Settings.Advanced.Video.ColorRange="YUV farveområde"
+Basic.Settings.Advanced.Video.ColorSpace="Farverum"
+Basic.Settings.Advanced.Video.ColorRange="Farveområde"
Basic.Settings.Advanced.Video.ColorRange.Partial="Delvis"
Basic.Settings.Advanced.Video.ColorRange.Full="Fuld"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Lyd overvågningsenhed"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Moniteringsenhed"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
-Basic.Settings.Advanced.Audio.DisableAudioDucking="Deaktiver Windows lyddæmpning"
-Basic.Settings.Advanced.StreamDelay="Stream forsinkelse"
-Basic.Settings.Advanced.StreamDelay.Duration="Varighed (sekunder)"
-Basic.Settings.Advanced.StreamDelay.Preserve="Bevar afskæringspunkt (forøg forsinkelse) ved forbindelsesgendannelse"
-Basic.Settings.Advanced.StreamDelay.MemoryUsage="Anslået hukommelsesbrug: %1 MB"
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Deaktivér Windows-lyddæmpning"
+Basic.Settings.Advanced.StreamDelay="Streamforsinkelse"
+Basic.Settings.Advanced.StreamDelay.Duration="Varighed (sek.)"
+Basic.Settings.Advanced.StreamDelay.Preserve="Bevar afskæringspunkt (forøg forsinkelse) ved gentilslutning"
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Estimeret hukommelsesforbrug: %1 MB"
Basic.Settings.Advanced.Network="Netværk"
Basic.Settings.Advanced.Network.BindToIP="Bind til IP"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="Aktivér ny netværkskode"
Basic.AdvAudio="Avancerede lydegenskaber"
Basic.AdvAudio.Name="Navn"
-Basic.AdvAudio.Volume="Volumen (%)"
+Basic.AdvAudio.Volume="Lydstyrke"
Basic.AdvAudio.Mono="Nedmix til Mono"
Basic.AdvAudio.Balance="Balance"
Basic.AdvAudio.SyncOffset="Synkr-forskydning (ms)"
Basic.AdvAudio.Monitoring="Lydovervågning"
-Basic.AdvAudio.Monitoring.None="Overvågning fra"
-Basic.AdvAudio.Monitoring.MonitorOnly="Kun overvågning (mute output)"
+Basic.AdvAudio.Monitoring.None="Overvågning Fra"
+Basic.AdvAudio.Monitoring.MonitorOnly="Kun overvågning (gør output tavs)"
Basic.AdvAudio.Monitoring.Both="Overvåg og output"
Basic.AdvAudio.AudioTracks="Spor"
Basic.Settings.Hotkeys="Genvejstaster"
Basic.Settings.Hotkeys.Pair="Tastekombinationer delt med '%1' fungerer som omskiftere"
-Basic.Settings.Hotkeys.Filter="Filter"
+Basic.Settings.Hotkeys.Filter="Filtrér"
Basic.Hotkeys.SelectScene="Skift til scene"
Basic.SystemTray.Show="Vis"
Basic.SystemTray.Hide="Skjul"
-Basic.SystemTray.Message.Reconnecting="Afbrudt. Forbinder igen..."
+Basic.SystemTray.Message.Reconnecting="Afbrudt. Genforbinder..."
Hotkeys.Insert="Insert"
Hotkeys.Delete="Delete"
Hotkeys.Menu="Menu"
Hotkeys.Space="Mellemrum"
Hotkeys.NumpadNum="Numerisk %1"
-Hotkeys.NumpadMultiply="Numeriske tastatur gange"
-Hotkeys.NumpadDivide="Numeriske tastatur dividere"
-Hotkeys.NumpadAdd="Numeriske tastatur plus"
-Hotkeys.NumpadSubtract="Numeriske tastatur minus"
-Hotkeys.NumpadDecimal="Numeriske tastatur komma"
-Hotkeys.AppleKeypadNum="%1 (numeriske tastatur)"
-Hotkeys.AppleKeypadMultiply="* (numeriske tastatur)"
-Hotkeys.AppleKeypadDivide="/ (numeriske tastatur)"
-Hotkeys.AppleKeypadAdd="+ (numeriske tastatur)"
-Hotkeys.AppleKeypadSubtract="- (numeriske tastatur)"
-Hotkeys.AppleKeypadDecimal=", (numeriske tastatur)"
-Hotkeys.AppleKeypadEqual="= (numeriske tastatur)"
+Hotkeys.NumpadMultiply="Numerisk, multiplicér"
+Hotkeys.NumpadDivide="Numerisk, dividér"
+Hotkeys.NumpadAdd="Numerisk, addér"
+Hotkeys.NumpadSubtract="Numerisk, subtrahér"
+Hotkeys.NumpadDecimal="Numerisk, decimaltegn"
+Hotkeys.AppleKeypadNum="%1 (numerisk)"
+Hotkeys.AppleKeypadMultiply="* (numerisk)"
+Hotkeys.AppleKeypadDivide="/ (numerisk)"
+Hotkeys.AppleKeypadAdd="+ (numerisk)"
+Hotkeys.AppleKeypadSubtract="- (numerisk)"
+Hotkeys.AppleKeypadDecimal=", (numerisk)"
+Hotkeys.AppleKeypadEqual="= (numerisk)"
Hotkeys.MouseButton="Mus %1"
Hotkeys.Escape="Esc"
Mute="Lyd fra"
Unmute="Lyd til"
-Push-to-mute="Tryk-for-lydløs"
+Push-to-mute="Tryk-gør-tavs"
Push-to-talk="Tryk-for-tale"
SceneItemShow="Vis '%1'"
OutputWarnings.NoTracksSelected="Du skal vælge minimum ét spor"
OutputWarnings.MultiTrackRecording="Advarsel: Visse formater (såsom FLV) understøtter ikke flere spor pr. optagelse"
-OutputWarnings.MP4Recording="Advarsel: MP4-/MOV-optagelser vil ikke kunne genoprettes, såfremt filen ikke kan færdiggøres (som følge af f.eks. BSOD'er, strømafbrydelse mv.). Vil du optage flere lydspor, så overvej at benytte MKV, og remuxe optagelsen til MP4, efter at den er færdiggjort (Fil → Remux optagelser)"
+OutputWarnings.MP4Recording="Advarsel: MP4-/MOV-optagelser vil ikke kunne genoprettes, såfremt filen ikke kan færdiggøres (grundet f.eks. BSOD'er, strømafbrydelse mv.). Vil du optage flere lydspor, så overvej at benytte MKV, og remuxe optagelsen til MP4, efter at den er færdiggjort (Fil → Remux optagelser)"
FinalScene.Title="Slet scene"
-FinalScene.Text="Der kræves mindst én scene."
+FinalScene.Text="Mindst én scene kræves."
NoSources.Title="Ingen kilder"
-NoSources.Text="Det ser ud til, at du ikke har tilføjet nogen videokilder endnu, så dit output bliver en blank/tom skærm. Sikker på, at du vil gøre dette?"
+NoSources.Text="Det ser ud til, at du endnu ikke har tilføjet nogle videokilder, så dit output bliver en blank/tom skærm. Sikker på, at du vil gøre dette?"
NoSources.Text.AddSource="Du kan til enhver tid tilføje kilder ved at klikke på +-ikonet under feltet Kilder i hovedvinduet."
+NoSources.Label="Du har ingen kilder.\nKlik på knappen + nedenfor,\neller højreklik hér for at tilføje en."
ChangeBG="Sæt farve"
-CustomColor="Brugerdefineret farve"
+CustomColor="Tilpasset farve"
BrowserSource.EnableHardwareAcceleration="Aktivér Browser Source-hardwareacceleration"
About.Contribute="Støt OBS-projektet"
ResizeOutputSizeOfSource="Tilpas størrelse for output (kildestørrelse)"
-ResizeOutputSizeOfSource.Text="Grund- og outputopløsningsstørrelser tilpasses den aktuelle kildes størrelse."
-ResizeOutputSizeOfSource.Continue="Vil du fortsætte?"
+ResizeOutputSizeOfSource.Text="Grund- og outputopløsningerne tilpasses den aktuelle kildes størrelse."
+ResizeOutputSizeOfSource.Continue="Fortsæt?"
+
+PreviewTransition="Overgangsforhåndsvisning"
obs-studio-23.1.0.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/de-DE.ini
Changed
Enable="Aktivieren"
DisableOSXVSync="OSX V-Sync deaktivieren"
ResetOSXVSyncOnExit="OSX V-Sync beim Beenden zurücksetzen"
-HighResourceUsage="Codierung überlastet! Erwägen Sie Ihre Videoeinstellungen zu verringern oder benutzen Sie eine schnellere Codierervoreinstellung."
+HighResourceUsage="Kodierung überlastet! Erwägen Sie Ihre Videoeinstellungen zu verringern oder benutzen Sie eine schnellere Kodierervoreinstellung."
Transition="Übergang"
-QuickTransitions="Schnelle Übergänge"
+QuickTransitions="Schnellübergänge"
Left="Links"
Right="Rechts"
Top="Oben"
Minutes="Minute(n)"
Seconds="Sekunde(n)"
Deprecated="Veraltet"
-ReplayBuffer="Replaypuffer"
+ReplayBuffer="Replay-Puffer"
Import="Importieren"
Export="Exportieren"
Copy="Kopieren"
VerticalLayout="Vertikales Layout"
Group="Gruppe"
DoNotShowAgain="Nicht nochmal anzeigen"
+Default="(Standard)"
+Calculating="Berechne …"
AlreadyRunning.Title="OBS wird bereits ausgeführt"
-AlreadyRunning.Text="OBS wird bereits ausgeführt! Bitte beenden Sie alle vorhandenen OBS-Instanzen, bevor Sie eine neue Instanz starten, außer Sie tun dies absichtlich. Wenn Sie OBS so eingestellt haben, dass es sich zum Benachrichtigungsfeld minimiert, überprüfen Sie bitte, ob es dort läuft."
+AlreadyRunning.Text="OBS wird bereits ausgeführt! Bitte beenden Sie alle vorhandenen OBS-Instanzen, bevor Sie eine neue Instanz starten, außer Sie tun dies absichtlich. Wenn Sie OBS so eingestellt haben, dass es sich zum Infobereich minimiert, überprüfen Sie bitte, ob es dort läuft."
AlreadyRunning.LaunchAnyway="Trotzdem starten"
DockCloseWarning.Title="Dockbares Fenster schließen"
Auth.StreamInfo="Streaminformation"
TwitchAuth.Stats="Twitch-Statistiken"
TwitchAuth.Feed="Twitch-Aktivitätsfeed"
+TwitchAuth.TwoFactorFail.Title="Streamschlüssel konnte nicht abgefragt werden"
+TwitchAuth.TwoFactorFail.Text="OBS konnte sich nicht mit Ihrem Twitch-Konto verbinden. Bitte stellen Sie sicher, dass die Zwei-Faktor-Authentifizierung in Ihren <a href='https://www.twitch.tv/settings/security'>Twitch-Sicherheitseinstellungen</a> eingerichtet ist, da diese für das Sreamen benötigt wird."
Copy.Filters="Filter kopieren"
Paste.Filters="Filter einfügen"
Basic.AutoConfig.StartPage.PrioritizeRecording="Für das Aufnehmen optimieren, Streamen ist zweitrangig"
Basic.AutoConfig.VideoPage="Videoeinstellungen"
Basic.AutoConfig.VideoPage.SubTitle="Geben Sie die gewünschten Videoeinstellungen an, die Sie verwenden möchten"
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Aktuelle verwenden (%1x%2)"
-Basic.AutoConfig.VideoPage.BaseResolution.Display="Bildschirm %1 (%2x%3)"
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Aktuelle verwenden (%1×%2)"
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Bildschirm %1 (%2×%3)"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Aktuelle verwenden (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Entweder 60 oder 30, aber wenn möglich 60 bevorzugen"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Entweder 60 oder 30, aber hohe Auflösung bevorzugen"
Basic.AutoConfig.StreamPage.StreamKey="Streamschlüssel"
Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bitrate mit Bandbreitentest schätzen (kann einige Minuten dauern)"
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardwarecodierung bevorzugen"
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarecodierung beseitigt die meiste CPU-Auslastung, kann aber mehr Bitrate erfordern, um das gleiche Maß an Qualität zu erhalten."
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardwarekodierung bevorzugen"
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarekodierung beseitigt die meiste CPU-Auslastung, kann aber mehr Bitrate erfordern, um das gleiche Maß an Qualität zu erhalten."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamwarnung"
Basic.AutoConfig.StreamPage.StreamWarning.Text="Der Bandbreitentest streamt randomisierte Videodaten ohne Ton zu Ihrem Kanal. Wenn Sie in der Lage sind, empfiehlt es sich, vorübergehend das Speichern von Videos zu deaktivieren und den Stream privat zu schalten, bis der Test abgeschlossen ist. Fortfahren?"
Basic.AutoConfig.TestPage="Endergebnisse"
Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Verbinde zu: %1 …"
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Keine Verbindung zu den Servern möglich, bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut."
Basic.AutoConfig.TestPage.TestingBandwidth.Server="Teste Bandbreite für: %1"
-Basic.AutoConfig.TestPage.TestingStreamEncoder="Teste Streamcodierer, dies kann einige Minuten dauern …"
-Basic.AutoConfig.TestPage.TestingRecordingEncoder="Teste Aufnahmecodierer, dies kann einige Minuten dauern …"
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Teste Streamkodierer, dies kann einige Minuten dauern …"
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Teste Aufnahmekodierer, dies kann einige Minuten dauern …"
Basic.AutoConfig.TestPage.TestingRes="Teste Auflösungen, dies kann einige Minuten dauern …"
-Basic.AutoConfig.TestPage.TestingRes.Fail="Fehler beim Starten des Codierers"
-Basic.AutoConfig.TestPage.TestingRes.Resolution="Teste Auflösung %1x%2 mit %3 FPS …"
-Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streamcodierer"
-Basic.AutoConfig.TestPage.Result.RecordingEncoder="Aufnahmecodierer"
+Basic.AutoConfig.TestPage.TestingRes.Fail="Fehler beim Starten des Kodierers"
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Teste Auflösung %1×%2 mit %3 FPS …"
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streamkodierer"
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Aufnahmekodierer"
Basic.AutoConfig.TestPage.Result.Header="Das Programm hat festgestellt, dass diese geschätzten Einstellungen für Sie am besten sind:"
Basic.AutoConfig.TestPage.Result.Footer="Um den Assistenten neu zu konfigurieren und es erneut zu versuchen, klicken Sie auf „Zurück“. Um die Einstellungen selbst anzupassen, klicken Sie auf „Abbrechen“ und öffnen Sie die Einstellungen."
Basic.Stats.HDDSpaceAvailable="Speicherplatz verfügbar"
Basic.Stats.MemoryUsage="Speicherauslastung"
Basic.Stats.AverageTimeToRender="Durchschnittliche Zeit, um Frame zu rendern"
-Basic.Stats.SkippedFrames="Übersprungene Frames durch Codierungsverzögerung"
+Basic.Stats.SkippedFrames="Übersprungene Frames durch Kodierungsverzögerung"
Basic.Stats.MissedFrames="Ausgelassene Frames durch Renderingverzögerung"
Basic.Stats.Output.Stream="Stream"
Basic.Stats.Output.Recording="Aufnahme"
Basic.Stats.DroppedFrames="Ausgelassene Frames (Netzwerk)"
Basic.Stats.MegabytesSent="Insgesamte Datenausgabe"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Datenträger voll in ugf."
ResetUIWarning.Title="Sind Sie sicher, dass Sie die Benutzeroberfläche zurücksetzen möchten?"
ResetUIWarning.Text="Das Zurücksetzen der Benutzeroberfläche wird zusätzliche Docks ausblenden. Sie müssen diese Docks im „Ansicht“-Menü wieder aktivieren, wenn sie sichtbar sein sollen.\n\nSind Sie sicher, dass Sie die Benutzeroberfläche zurücksetzen möchten?"
Updater.NoUpdatesAvailable.Text="Zurzeit sind keine Updates verfügbar"
Updater.FailedToLaunch="Konnte den Updater nicht starten"
Updater.GameCaptureActive.Title="Spielaufnahme aktiv"
-Updater.GameCaptureActive.Text="Spielaufnahme Hook Bibliothek wird zurzeit verwendet. Bitte schließen Sie alle derzeitigen Spiele / Programme die aufgenommen werden (oder starten Sie Windows neu) und versuchen Sie es erneut."
+Updater.GameCaptureActive.Text="Die Spielaufnahmen-Hook-Bibliothek wird zurzeit verwendet. Bitte schließen Sie alle derzeit aufgenommenen Programme und Spiele (oder starten Sie Windows neu) und versuchen Sie es erneut."
QuickTransitions.SwapScenes="Vorschau-/Ausgabeszene nach Übergang tauschen"
-QuickTransitions.SwapScenesTT="Vertauscht die Vorschau- und Ausgabe-Szenen nach dem Übergang (falls die ursprüngliche Ausgabe-Szene noch vorhanden ist).\nEventuelle Änderungen an der original Ausgabe-Szene werden hierbei nicht rückgängig gemacht."
+QuickTransitions.SwapScenesTT="Vertauscht die Vorschau- und Ausgabeszenen nach dem Übergang (falls die ursprüngliche Ausgabeszene noch vorhanden ist).\nEventuelle Änderungen an der originalen Ausgabeszene werden nicht rückgängig gemacht."
QuickTransitions.DuplicateScene="Szene duplizieren"
-QuickTransitions.DuplicateSceneTT="Ermöglicht das Bearbeiten von Transformationen und der Sichtbarkeit von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nAktivieren Sie „Szene duplizieren“, um die Eigenschaften von Quellen zu bearbeiten, ohne die Ausgabe zu verändern.\nDas Ändern dieses Wertes wird die derzeitige Ausgabe-Szene zurücksetzen (falls sie noch existiert)."
+QuickTransitions.DuplicateSceneTT="Ermöglicht das Bearbeiten von Transformationen und der Sichtbarkeit von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nAktivieren Sie „Szene duplizieren“, um die Eigenschaften von Quellen zu bearbeiten, ohne die Ausgabe zu verändern.\nDas Ändern dieses Wertes wird die derzeitige Ausgabeszene zurücksetzen (falls sie noch existiert)."
QuickTransitions.EditProperties="Quellen duplizieren"
-QuickTransitions.EditPropertiesTT="Ermöglicht das Bearbeiten der Eigenschaften von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nDies kann nur verwendet werden, wenn „Szene duplizieren“ aktiviert ist.\nBestimmte Quellen (wie Aufnahme- oder Medienquellen) unterstützen dies nicht und können nicht separat bearbeitet werden.\nDas Ändern dieses Wertes wird die derzeitige Ausgabe-Szene zurücksetzen (falls sie noch existiert).\n\nWarnung: Da Quellen dupliziert werden, könnte dies zusätzliche System- oder Videoressourcen verbrauchen."
-QuickTransitions.HotkeyName="Schneller Übergang: %1"
+QuickTransitions.EditPropertiesTT="Ermöglicht das Bearbeiten der Eigenschaften von Quellen, ohne die Ausgabe zu verändern, wenn dieselbe Szene bearbeitet wird.\nDies kann nur verwendet werden, wenn „Szene duplizieren“ aktiviert ist.\nBestimmte Quellen (wie Aufnahme- oder Medienquellen) unterstützen dies nicht und können nicht separat bearbeitet werden.\nDas Ändern dieses Wertes wird die derzeitige Ausgabeszene zurücksetzen (falls sie noch existiert).\n\nWarnung: Da Quellen dupliziert werden, könnte dies zusätzliche System- oder Videoressourcen verbrauchen."
+QuickTransitions.HotkeyName="Schnellübergang: %1"
Basic.AddTransition="Konfigurierbaren Übergang hinzufügen"
Basic.RemoveTransition="Konfigurierbaren Übergang entfernen"
Output.StartStreamFailed="Fehler beim Starten des Streams"
Output.StartRecordingFailed="Fehler beim Starten der Aufnahme"
Output.StartReplayFailed="Fehler beim Starten des Replaypuffers"
-Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Protokolldatei für Details.\n\nHinweis: Wenn Sie die NVENC- oder AMD-Codierer verwenden, stellen Sie sicher, dass Ihre Videotreiber aktuell sind."
+Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Protokolldatei für Details.\n\nHinweis: Wenn Sie die NVENC- oder AMD-Kodierer verwenden, stellen Sie sicher, dass Ihre Videotreiber aktuell sind."
+
Output.ConnectFail.Title="Verbindung fehlgeschlagen"
Output.ConnectFail.BadPath="Ungültiger Pfad oder Verbindungs-URL. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass diese korrekt sind."
Output.ConnectFail.Error="Ein unerwarteter Fehler ist beim Verbindungsversuch zum Server aufgetreten. Mehr Informationen finden Sie in der Protokolldatei."
Output.ConnectFail.Disconnected="Verbindung zum Server getrennt."
+Output.StreamEncodeError.Title="Kodierungsfehler"
+Output.StreamEncodeError.Msg="Ein Kodierungsfehler ist beim Streaming aufgetreten."
+
Output.RecordFail.Title="Fehler beim Starten der Aufnahme"
Output.RecordFail.Unsupported="Das Ausgabeformat wird entweder nicht unterstützt oder unterstützt nicht mehrere Audiospuren. Bitte überprüfen Sie Ihre Einstellungen und versuchen Sie es erneut."
Output.RecordNoSpace.Title="Nicht genügend Speicherplatz"
Output.RecordNoSpace.Msg="Es gibt nicht genügend Speicherplatz, um die Aufnahme fortzusetzen."
Output.RecordError.Title="Aufnahmefehler"
Output.RecordError.Msg="Während der Aufnahme ist ein unbekannter Fehler aufgetreten."
-Output.ReplayBuffer.NoHotkey.Title="Kein Hotkey festgelegt!"
+Output.RecordError.EncodeErrorMsg="Ein Kodierungsfehler ist beim Aufnehmen aufgetreten."
+Output.ReplayBuffer.NoHotkey.Title="Kein Hotkey festgelegt"
Output.ReplayBuffer.NoHotkey.Msg="Kein „Replay speichern“-Hotkey für Replaypuffer festgelegt. Legen Sie bitte den „Speichern“-Hotkey fest, der zum Speichern der Replayaufnahmen verwendet werden soll."
Output.BadPath.Title="Ungültiger Dateipfad"
Remux.FileExistsTitle="Zieldateien existieren bereits"
Remux.FileExists="Die folgenden Zieldateien existieren bereits. Möchten Sie diese ersetzen?"
Remux.ExitUnfinishedTitle="Remuxen in Bearbeitung"
-Remux.ExitUnfinished="Das Remuxen ist noch nicht fertig. Wenn Sie jetzt stoppen, kann die Zieldatei unbrauchbar werden. \nSind Sie sicher, dass Sie das Remuxen beenden möchten?"
+Remux.ExitUnfinished="Das Remuxen ist noch nicht beendet. Wenn Sie jetzt stoppen, kann die Zieldatei unbrauchbar werden.\nSind Sie sicher, dass Sie das Remuxen beenden möchten?"
Remux.HelpText="Legen Sie Dateien in diesem Fenster ab, um sie zu remuxen oder wählen Sie eine leere „OBS-Aufnahme“-Zelle aus, um nach einer Datei zu suchen."
UpdateAvailable="Neues Update verfügbar"
Basic.Main.PreviewConextMenu.Enable="Vorschau aktivieren"
+Basic.Main.Preview.Disable="Vorschau deaktivieren"
+
ScaleFiltering="Skalierungsfilterung"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
Deinterlacing.BottomFieldFirst="Unteres Feld zuerst"
VolControl.SliderUnmuted="Lautstärkeschieberegler für „%1“: %2"
-VolControl.SliderMuted="Lautstärkeschieberegler für „%1“: %2 (derzeit stumm geschaltet)"
-VolControl.Mute="„%1“ stumm schalten"
+VolControl.SliderMuted="Lautstärkeschieberegler für „%1“: %2 (derzeit stummgeschaltet)"
+VolControl.Mute="„%1“ stummschalten"
VolControl.Properties="Eigenschaften von „%1“"
Basic.Main.AddSceneDlg.Title="Szene hinzufügen"
-Basic.Main.AddSceneDlg.Text="Bitte geben Sie einen Namen für die Szene ein"
+Basic.Main.AddSceneDlg.Text="Bitte geben Sie den Namen der Szene ein"
Basic.Main.DefaultSceneName.Text="Szene %1"
RenameProfile.Title="Profil umbenennen"
Basic.Main.MixerRename.Title="Audioquelle umbenennen"
-Basic.Main.MixerRename.Text="Bitte geben Sie einen Namen für die Audioquelle ein"
+Basic.Main.MixerRename.Text="Bitte geben Sie den Namen der Audioquelle ein"
Basic.Main.PreviewDisabled="Vorschau ist derzeit deaktiviert"
Basic.Filters.AddFilter.Title="Filtername"
Basic.Filters.AddFilter.Text="Bitte geben Sie einen Namen für den Filter ein"
-Basic.TransformWindow="Szenen-Element-Transformation"
+Basic.TransformWindow="Szenen-Elementtransformation"
Basic.TransformWindow.Position="Position"
Basic.TransformWindow.Rotation="Drehung"
Basic.TransformWindow.Size="Größe"
Basic.TransformWindow.BoundsType.ScaleToHeight="Auf die Höhe der Begrenzungen skalieren"
Basic.TransformWindow.BoundsType.Stretch="Bis zu den Begrenzungen strecken"
-Basic.Main.AddSourceHelp.Title="Konnte Quelle nicht hinzufügen"
+Basic.Main.AddSourceHelp.Title="Quelle konnte nicht hinzugefügt werden"
Basic.Main.AddSourceHelp.Text="Sie müssen mindestens 1 Szene besitzen, um eine Quelle hinzuzufügen."
Basic.Main.Scenes="Szenen"
Basic.MainMenu.Edit.LockPreview="Vorschau sperren (&L)"
Basic.MainMenu.Edit.Scale="Vorschau&skalierung"
Basic.MainMenu.Edit.Scale.Window="An Fenstergröße anpassen"
-Basic.MainMenu.Edit.Scale.Canvas="Leinwand (%1x%2)"
-Basic.MainMenu.Edit.Scale.Output="Ausgabe (%1x%2)"
+Basic.MainMenu.Edit.Scale.Canvas="Leinwand (%1×%2)"
+Basic.MainMenu.Edit.Scale.Output="Ausgabe (%1×%2)"
Basic.MainMenu.Edit.Transform="&Transformieren"
Basic.MainMenu.Edit.Transform.EditTransform="Transformation b&earbeiten …"
Basic.MainMenu.Edit.Transform.CopyTransform="Transformation kopieren"
Basic.MainMenu.Edit.Transform.FitToScreen="An Bildschirmgröße anpassen (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Auf Bildschirmgröße &strecken"
Basic.MainMenu.Edit.Transform.CenterToScreen="Auf dem Bildschirm zentrieren (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Vertikal zentrieren"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Horizontal zentrieren"
Basic.MainMenu.Edit.Order="Reihenf&olge"
Basic.MainMenu.Edit.Order.MoveUp="Nach oben bewegen (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Nach unten bewegen (&D)"
Basic.MainMenu.Help.CrashLogs.UploadLastLog="Neusten Absturzbericht hoch&laden"
Basic.MainMenu.Help.About="Über OBS Studio (&A)"
-Basic.Settings.ProgramRestart="Das Programm muss neu gestartet werden, damit die Änderungen wirksam werden."
+Basic.Settings.ProgramRestart="Das Programm muss neugestartet werden, damit die Änderungen wirksam werden."
Basic.Settings.ConfirmTitle="Änderungen bestätigen"
Basic.Settings.Confirm="Sie haben ungespeicherte Änderungen. Änderungen speichern?"
Basic.Settings.General.KeepReplayBufferStreamStops="Replaypuffer weiter aktiv lassen, wenn der Stream stoppt"
Basic.Settings.General.SysTray="Infobereich"
Basic.Settings.General.SysTrayWhenStarted="Beim Start zum Infobereich minimieren"
-Basic.Settings.General.SystemTrayHideMinimize="Immer zum Infobereich. statt zur Taskleiste minimieren"
+Basic.Settings.General.SystemTrayHideMinimize="Immer zum Infobereich anstatt zur Taskleiste minimieren"
Basic.Settings.General.SaveProjectors="Projektoren beim Beenden speichern"
Basic.Settings.General.Preview="Vorschau"
Basic.Settings.General.OverflowHidden="Überlauf verstecken"
Basic.Settings.General.OverflowAlwaysVisible="Überlauf immer anzeigen"
Basic.Settings.General.OverflowSelectionHidden="Überlauf trotz unsichtbarer Quelle anzeigen"
Basic.Settings.General.SwitchOnDoubleClick="Übergang zur Szene beim Doppelklicken"
-Basic.Settings.General.StudioPortraitLayout="Porträt/vertikales Layout aktivieren"
+Basic.Settings.General.StudioPortraitLayout="Porträt/Vertikales Layout aktivieren"
Basic.Settings.General.TogglePreviewProgramLabels="Vorschau-/Programmbeschriftung anzeigen"
Basic.Settings.General.Multiview="Multiview"
Basic.Settings.General.Multiview.MouseSwitch="Klicken, um zwischen den Szenen umzuschalten"
Basic.Settings.Output="Ausgabe"
Basic.Settings.Output.Format="Aufnahmeformat"
-Basic.Settings.Output.Encoder="Codierer"
+Basic.Settings.Output.Encoder="Kodierer"
Basic.Settings.Output.SelectDirectory="Aufnahmeordner auswählen"
Basic.Settings.Output.SelectFile="Aufnahmedatei auswählen"
Basic.Settings.Output.EnforceBitrate="Bitratenlimit des Streamingdienstes erzwingen"
Basic.Settings.Output.Simple.RecordingQuality.Small="Hohe Qualität, mittelgroße Dateien"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Ununterscheidbare Qualität, große Dateien"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Verlustfreie Qualität, enorm große Dateien"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Warnung: Die Videobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Codierereinstellungen."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Warnung: Die Audiobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Codierereinstellungen."
-Basic.Settings.Output.Simple.Warn.Encoder="Warnung: Mit einem Software-Codierer in einer anderen Qualität als der des Streams aufzunehmen erfordert zusätzliche CPU-Auslastung, wenn Sie gleichzeitig streamen und aufnehmen."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Warnung: Die Videobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Kodierereinstellungen."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Warnung: Die Audiobitrate beim Streamen wird auf %1 festgelegt, was der Obergrenze des aktuellen Streamingdienstes entspricht. Falls Sie sicher sind, dass Sie %1 überschreiten wollen, deaktivieren Sie „Bitratenlimit des Streamingdienstes erzwingen“ in den erweiterten Kodierereinstellungen."
+Basic.Settings.Output.Simple.Warn.Encoder="Warnung: Mit einem Software-Kodierer in einer anderen Qualität als der des Streams aufzunehmen erfordert zusätzliche CPU-Auslastung, wenn Sie gleichzeitig streamen und aufnehmen."
Basic.Settings.Output.Simple.Warn.Lossless="Warnung: Verlustfreie Qualität erzeugt enorm große Dateien! Verlustfreie Qualität kann mehr als 7 Gigabyte Speicherplatz pro Minute bei hohen Auflösungen und Frameraten in Anspruch nehmen. Verlustfrei ist für lange Aufnahmen nicht empfohlen, es sei denn, Sie haben eine sehr große Menge an Speicherplatz zur Verfügung."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sind Sie sicher, dass Sie verlustfreie Qualität verwenden möchten?"
-Basic.Settings.Output.Simple.Warn.Lossless.Title="Verlustfreie Qualität-Warnung!"
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Verlustfreie Qualitäts-Warnung"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
-Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 niedrige CPU-Auslastung Voreinstellung, erhöht die Dateigröße)"
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 niedrige CPU-Auslastungsvoreinstellung, erhöht die Dateigröße)"
Basic.Settings.Output.VideoBitrate="Videobitrate"
Basic.Settings.Output.AudioBitrate="Audiobitrate"
Basic.Settings.Output.Reconnect="Automatisch wiederverbinden"
Basic.Settings.Output.RetryDelay="Wiederverbindungsverzögerung (Sekunden)"
Basic.Settings.Output.MaxRetries="Maximale Wiederholungsversuche"
-Basic.Settings.Output.Advanced="Erweiterte Codierereinstellungen aktivieren"
-Basic.Settings.Output.EncoderPreset="Codierervoreinstellung"
-Basic.Settings.Output.CustomEncoderSettings="Benutzerdefinierte Codierer-Einstellungen"
+Basic.Settings.Output.Advanced="Erweiterte Kodierereinstellungen aktivieren"
+Basic.Settings.Output.EncoderPreset="Kodierervoreinstellung"
+Basic.Settings.Output.CustomEncoderSettings="Benutzerdefinierte Kodierer-Einstellungen"
Basic.Settings.Output.CustomMuxerSettings="Benutzerdefinierte Muxereinstellungen"
Basic.Settings.Output.NoSpaceFileName="Dateinamen ohne Leerzeichen generieren"
Basic.Settings.Output.Adv.Rescale="Ausgabe umskalieren"
Basic.Settings.Output.Adv.AudioTrack="Audiospur"
Basic.Settings.Output.Adv.Streaming="Streaming"
-Basic.Settings.Output.Adv.ApplyServiceSettings="Streamingdienst-Codierereinstellungen erzwingen"
+Basic.Settings.Output.Adv.ApplyServiceSettings="Streamingdienst-Kodierereinstellungen erzwingen"
Basic.Settings.Output.Adv.Audio.Track1="Spur 1"
Basic.Settings.Output.Adv.Audio.Track2="Spur 2"
Basic.Settings.Output.Adv.Audio.Track3="Spur 3"
Basic.Settings.Output.Adv.Recording.Type="Art"
Basic.Settings.Output.Adv.Recording.Type.Standard="Normal"
Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Benutzerdefinierte Ausgabe (FFmpeg)"
-Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Streamcodierer verwenden)"
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Streamkodierer verwenden)"
Basic.Settings.Output.Adv.Recording.Filename="Dateinameformatierung"
Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Überschreiben, wenn die Datei vorhanden ist"
Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg-Ausgabetyp"
Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Standardformat"
Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Container-Formatbeschreibung"
Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio-/Videocodec wird aus Dateipfad oder URL gebildet"
-Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Standardcodierer"
-Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Codierer deaktivieren"
-Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videocodierer"
-Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videocodierereinstellungen (falls angegeben)"
-Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audiocodierer"
-Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audiocodierereinstellungen (falls angegeben)"
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Standardkodierer"
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Kodierer deaktivieren"
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videokodierer"
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Videokodierereinstellungen (falls angegeben)"
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audiokodierer"
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audiokodierereinstellungen (falls angegeben)"
Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer-Einstellungen (falls angegeben)"
Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframeintervall (Frames)"
-Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Zeige alle Codecs (auch wenn möglicherweise nicht kompatibel)"
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Zeige alle Codecs (auch wenn möglicherweise inkompatibel)"
FilenameFormatting.completer="%DD. %MM. %CCYY %hh-%mm-%ss\n%DD. %MM. %YY %hh-%mm-%ss\n%d. %m. %Y %H-%M-%S\n%d. %m. %y %H-%M-%S"
-FilenameFormatting.TT="%CCYY Jahr, vier Ziffern\n%YY Jahr, letzte zwei Ziffern (00-99)\n%MM Monat als Dezimalzahl (01-12)\n%DD Tag des Monats, mit Nullen aufgefüllt (01-31)\n%hh Stunden im 24-Stunden-Format (00-23)\n%mm Minute (00-59)\n%ss Sekunde (00-61)\n%% Ein %-Zeichen\n%a Abgekürzter Wochentagsname\n%A Voller Wochentagsname\n%b Abgekürzer Monatsname\n%B Voller Monatsname\n%d Tag des Monats, mit Nullen aufgefüllt (01-31)\n%H Stunden im 24-Stunden-Format (00-23)\n%I Stunden im 12-Stunden-Format (01-12)\n%m Monat als Dezimalzahl (01-12)\n%M Minute (00-59)\n%p Vormittags- oder nachmittags-Angabe\n%S Sekunde (00-61)\n%y Jahr, letzte zwei Ziffern (00-99)\n%Y Jahr\n%z ISO-8601-Verschiebung von UTC oder Zeitzone\n%Z Zeitzonenname oder Abkürzung\n"
+FilenameFormatting.TT="%CCYY Jahr, vier Ziffern\n%YY Jahr, letzte zwei Ziffern (00–99)\n%MM Monat als Dezimalzahl (01–12)\n%DD Tag des Monats, mit Nullen aufgefüllt (01–31)\n%hh Stunden im 24-Stunden-Format (00–23)\n%mm Minute (00–59)\n%ss Sekunde (00–61)\n%% Ein %-Zeichen\n%a Abgekürzter Wochentagsname\n%A Voller Wochentagsname\n%b Abgekürzer Monatsname\n%B Voller Monatsname\n%d Tag des Monats, mit Nullen aufgefüllt (01–31)\n%H Stunden im 24-Stunden-Format (00–23)\n%I Stunden im 12-Stunden-Format (01–12)\n%m Monat als Dezimalzahl (01–12)\n%M Minute (00–59)\n%p Vormittags- oder nachmittags-Angabe\n%S Sekunde (00–61)\n%y Jahr, letzte zwei Ziffern (00–99)\n%Y Jahr\n%z ISO-8601-Verschiebung von UTC oder Zeitzone\n%Z Zeitzonenname oder Abkürzung"
Basic.Settings.Video="Video"
Basic.Settings.Video.Adapter="Grafikkarte"
Basic.Settings.Video.BaseResolution="Basis-(Leinwand-)Auflösung"
-Basic.Settings.Video.ScaledResolution="(Skalierte) Ausgabe-Auflösung"
+Basic.Settings.Video.ScaledResolution="(Skalierte) Ausgabeauflösung"
Basic.Settings.Video.DownscaleFilter="Skalierungsfilter"
Basic.Settings.Video.DisableAeroWindows="Aero deaktivieren (nur Windows)"
Basic.Settings.Video.FPS="FPS"
Basic.Settings.Video.Numerator="Zähler"
Basic.Settings.Video.Denominator="Nenner"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Ungültige Auflösung. Muss [width]x[height] sein (z.B. 1920x1080)"
+Basic.Settings.Video.InvalidResolution="Ungültige Auflösung. Korrekte Formatierung: [Breite]x[Höhe] (z. B. 1920x1080)"
Basic.Settings.Video.CurrentlyActive="Videoausgabe ist derzeit aktiv. Bitte schalten Sie alle Ausgaben ab, um die Videoeinstellungen zu ändern."
Basic.Settings.Video.DisableAero="Aero deaktivieren"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Abtastrate"
Basic.Settings.Audio.Channels="Kanäle"
-Basic.Settings.Audio.MeterDecayRate="Aussteuerungsmesserverfallsrate"
+Basic.Settings.Audio.Meters="Meter"
+Basic.Settings.Audio.MeterDecayRate="Zerfallsrate"
Basic.Settings.Audio.MeterDecayRate.Fast="Schnell"
Basic.Settings.Audio.MeterDecayRate.Medium="Mittel (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Langsam (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Überprüfen Sie beim Streaming, ob Ihr Streamingdienst sowohl die Einspeisung von Surround-Sound als auch die Surround-Sound-Wiedergabe unterstützt. Twitch, Facebook 360 Live, Mixer RTMP und Smashcast sind Beispiele, bei denen Surround-Sound voll unterstützt wird. Obwohl Facebook Live und YouTube Live beide die Surround-Einspeisung akzeptieren, wird Facebook Live auf Stereo heruntergemischt und YouTube Live spielt nur zwei Kanäle ab.\n\nOBS-Audiofilter sind mit Surround-Sound kompatibel, obwohl die VST-Pluginunterstützung nicht garantiert ist."
Basic.Settings.Audio.MultichannelWarning.Title="Surround-Sound-Audio aktivieren?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Sind Sie sicher, dass Sie Surround-Sound-Audio wirklich aktivieren möchten?"
-Basic.Settings.Audio.DesktopDevice="Desktop-Audiogerät"
-Basic.Settings.Audio.DesktopDevice2="Desktop-Audiogerät 2"
-Basic.Settings.Audio.AuxDevice="Mikrofon/Externes Audiogerät"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Externes Audiogerät 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Externes Audiogerät 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/Externes Audiogerät 4"
+Basic.Settings.Audio.Devices="Geräte"
+Basic.Settings.Audio.DesktopDevice="Desktop-Audio"
+Basic.Settings.Audio.DesktopDevice2="Desktop-Audio 2"
+Basic.Settings.Audio.AuxDevice="Mikrofon/Audiogerät"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/Audiogerät 2"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/Audiogerät 3"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/Audiogerät 4"
Basic.Settings.Audio.EnablePushToMute="Push-To-Mute aktivieren"
Basic.Settings.Audio.PushToMuteDelay="Push-To-Mute-Verzögerung"
Basic.Settings.Audio.EnablePushToTalk="Push-To-Talk aktivieren"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Niedriger als normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Niedrig"
Basic.Settings.Advanced.FormatWarning="Warnung: Andere Farbformate als NV12 sind in erster Linie für die Aufnahme bestimmt und sind für Streaming nicht zu empfehlen. Die erforderliche Farbformatkonvertierung kann eine erhöhte CPU-Auslastung hervorrufen."
-Basic.Settings.Advanced.Audio.BufferingTime="Audio Pufferungszeit"
+Basic.Settings.Advanced.Audio.BufferingTime="Audiopufferungszeit"
Basic.Settings.Advanced.Video.ColorFormat="Farbformat"
-Basic.Settings.Advanced.Video.ColorSpace="YUV-Farbmatrix"
-Basic.Settings.Advanced.Video.ColorRange="YUV-Farbbereich"
+Basic.Settings.Advanced.Video.ColorSpace="Farbraum"
+Basic.Settings.Advanced.Video.ColorRange="Farbbereich"
Basic.Settings.Advanced.Video.ColorRange.Partial="Begrenzt"
Basic.Settings.Advanced.Video.ColorRange.Full="Voll"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Audiomonitoringgerät"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring-Gerät"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
-Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows Audioducking deaktivieren"
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows-Audioducking deaktivieren"
Basic.Settings.Advanced.StreamDelay="Streamverzögerung"
Basic.Settings.Advanced.StreamDelay.Duration="Dauer (Sekunden)"
Basic.Settings.Advanced.StreamDelay.Preserve="Lückenloses Wiederverbinden (erhöht Verzögerung, um Videoverlust zu vermeiden)"
Basic.AdvAudio="Erweiterte Audioeigenschaften"
Basic.AdvAudio.Name="Name"
-Basic.AdvAudio.Volume="Lautstärke (%)"
+Basic.AdvAudio.Volume="Lautstärke"
Basic.AdvAudio.Mono="Heruntermischen zu Mono"
Basic.AdvAudio.Balance="Balance"
-Basic.AdvAudio.SyncOffset="Sync Verschiebung (ms)"
-Basic.AdvAudio.Monitoring="Audiomonitoring"
+Basic.AdvAudio.SyncOffset="Sync-Verschiebung (ms)"
+Basic.AdvAudio.Monitoring="Audio-Monitoring"
Basic.AdvAudio.Monitoring.None="Monitor aus"
-Basic.AdvAudio.Monitoring.MonitorOnly="Nur Monitor (Ausgabe stumm schalten)"
+Basic.AdvAudio.Monitoring.MonitorOnly="Nur Monitor (Ausgabe stummschalten)"
Basic.AdvAudio.Monitoring.Both="Monitor und Ausgabe"
Basic.AdvAudio.AudioTracks="Spuren"
SceneItemHide="„%1“ verstecken"
OutputWarnings.NoTracksSelected="Sie müssen mindestens eine Spur auswählen"
-OutputWarnings.MultiTrackRecording="Warnung: Bestimmte Formate (z.B. FLV) unterstüzen nicht mehrere Spuren pro Aufnahme"
-OutputWarnings.MP4Recording="Warnung: Aufnahmen, die in MP4/MOV gespeichert werden, sind nicht wiederherstellbar, wenn die Datei nicht abgeschlossen werden konnte (z.B. als Folge von BSODs, Stromausfällen, etc.). Wenn Sie mehrere Audiospuren aufnehmen möchten, sollten Sie MKV verwenden und die Aufnahme zu MP4/MOV remuxen, nachdem sie fertig ist (Datei → Aufnahmen remuxen)."
+OutputWarnings.MultiTrackRecording="Warnung: Bestimmte Formate (z. B. FLV) unterstüzen nicht mehrere Spuren pro Aufnahme"
+OutputWarnings.MP4Recording="Warnung: Aufnahmen, die in MP4/MOV gespeichert werden, sind nicht wiederherstellbar, wenn die Datei nicht abgeschlossen werden konnte (z. B. als Folge von BSODs, Stromausfällen, etc.). Wenn Sie mehrere Audiospuren aufnehmen möchten, sollten Sie MKV verwenden und die Aufnahme zu MP4/MOV remuxen, nachdem sie fertig ist (Datei → Aufnahmen remuxen)."
FinalScene.Title="Szene löschen"
FinalScene.Text="Es muss mindestens eine Szene vorhanden sein."
NoSources.Title="Keine Quellen"
NoSources.Text="Offenbar haben Sie noch keine Videoquellen hinzugefügt, sodass nur ein leerer Bildschirm ausgegeben wird. Sind Sie sicher, dass Sie das wollen?"
-NoSources.Text.AddSource="Sie können jederzeit Quellen hinzufügen, indem Sie auf das „+“-Symbol unter dem Quellenfeld im Hauptfenster klicken."
+NoSources.Text.AddSource="Sie können jederzeit Quellen hinzufügen, indem Sie auf das +-Symbol unter dem Quellenfeld im Hauptfenster klicken."
+NoSources.Label="Sie haben bis jetzt keine Quellen hinzugefügt.\nKlicken Sie auf das +-Symbol oder\nrechtsklicken Sie hier, um eine hinzuzufügen."
ChangeBG="Farbe auswählen"
CustomColor="Benutzerdefinierte Farbe"
-BrowserSource.EnableHardwareAcceleration="Browser Hardwarebeschleunigung aktivieren"
+BrowserSource.EnableHardwareAcceleration="Browser-Hardwarebeschleunigung aktivieren"
About="Über OBS Studio"
-About.Info="OBS Studio ist eine kostenlose und Open-Source-Videoaufnahme- und Livestreaming-Software."
+About.Info="OBS Studio ist eine freie und Open-Source-Videoaufnahme- und Livestreaming-Software."
About.Donate="Beitrag leisten"
About.GetInvolved="Mitwirken"
About.Authors="Autoren"
ResizeOutputSizeOfSource.Text="Die Basis- und Ausgabeauflösung wird auf die Größe der aktuellen Quelle geändert."
ResizeOutputSizeOfSource.Continue="Möchten Sie fortfahren?"
+PreviewTransition="Übergangsvorschau"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/el-GR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/el-GR.ini
Changed
BandwidthTest.Region.Asia="Ασία"
BandwidthTest.Region.Other="Άλλη"
-Basic.FirstStartup.RunWizard="Θα θέλατε να εκτελέσετε τον Οδηγό αυτόματης ρύθμισης παραμέτρων; Μπορείτε επίσης να κάνετε ρύθμιση παραμέτρων χειροκίνητα, κάνοντας κλικ στο κουμπί ρυθμίσεις στο κύριο παράθυρο."
+Basic.FirstStartup.RunWizard="Θα θέλατε να εκτελέσετε τον Οδηγό αυτόματης ρύθμισης παραμέτρων; Μπορείτε επίσης να κάνετε ρύθμιση παραμέτρων χειροκίνητα, κάνοντας κλικ στο κουμπί ρυθμίσεις στο κύριο παράθυρο."
Basic.FirstStartup.RunWizard.NoClicked="Εάν αλλάξετε γνώμη, μπορείτε να εκτελέσετε τον Οδηγό αυτόματης ρύθμισης παραμέτρων οποιαδήποτε στιγμή ξανά, από το μενού Εργαλεία."
Basic.AutoConfig="Οδηγός αυτόματης ρύθμισης παραμέτρων"
Output.StartReplayFailed="Αποτυχία εκκίνησης της προσωρινής μνήμης των επαναλήψεων"
Output.StartFailedGeneric="Αποτυχία εκκίνησης εξόδου. Παρακαλούμε ελέγξτε το αρχείο καταγραφής για λεπτομέρειες.\n\nΣημείωση: Εάν χρησιμοποιείτε τους κωδικοποιητές NVENC ή AMD, βεβαιωθείτε ότι τα προγράμματα οδήγησης της κάρτας γραφικών σας είναι ενημερωμένα."
+
Output.ConnectFail.Title="Η σύνδεση απέτυχε"
-Output.ConnectFail.BadPath="Μη έγκυρη Διαδρομή ή URL Σύνδεσης. Παρακαλώ ελέγξτε τις ρυθμίσεις σας και επιβεβαιώστε ότι είναι έγκυρες."
+Output.ConnectFail.BadPath="Μη έγκυρη Διαδρομή ή URL Σύνδεσης. Παρακαλώ ελέγξτε τις ρυθμίσεις σας και επιβεβαιώστε ότι είναι έγκυρες."
Output.ConnectFail.ConnectFailed="Απέτυχε η σύνδεση στον διακομιστή"
Output.ConnectFail.InvalidStream="Δεν μπορέσαμε να αποκτήσουμε πρόσβαση στο συγκεκριμένο κανάλι ή κλειδί ροής, παρακαλούμε ελέγξτε ξανά το κλειδί ροής σας. Εάν είναι σωστό, μπορεί να υπάρχει πρόβλημα στη σύνδεση με τον διακομιστή."
-Output.ConnectFail.Error="Παρουσιάστηκε μη αναμενόμενο σφάλμα κατά την προσπάθεια σύνδεσης με τον διακομιστή. Περισσότερες πληροφορίες στο αρχείο καταγραφής."
+Output.ConnectFail.Error="Παρουσιάστηκε μη αναμενόμενο σφάλμα κατά την προσπάθεια σύνδεσης με τον διακομιστή. Περισσότερες πληροφορίες στο αρχείο καταγραφής."
Output.ConnectFail.Disconnected="Αποσυνδεθήκατε από τον διακομιστή."
+
Output.RecordFail.Title="Αποτυχία εκκίνησης της καταγραφής"
-Output.RecordFail.Unsupported="Η μορφή εξόδου είτε δεν υποστηρίζεται ή δεν υποστηρίζει παραπάνω από ένα κομμάτι ήχου. Παρακαλώ ελέγξτε τις ρυθμίσεις σας και δοκιμάστε ξανά."
+Output.RecordFail.Unsupported="Η μορφή εξόδου είτε δεν υποστηρίζεται ή δεν υποστηρίζει παραπάνω από ένα κομμάτι ήχου. Παρακαλώ ελέγξτε τις ρυθμίσεις σας και δοκιμάστε ξανά."
Output.RecordNoSpace.Title="Ανεπαρκής χώρος στον δίσκο"
Output.RecordNoSpace.Msg="Δεν υπάρχει επαρκής χώρος στο δίσκο για να συνεχιστεί η καταγραφή."
Output.RecordError.Title="Σφάλμα καταγραφής"
Output.RecordError.Msg="Παρουσιάστηκε ένα αδιευκρίνιστο σφάλμα κατά την καταγραφή."
Output.ReplayBuffer.NoHotkey.Title="Δεν έχουν επιλεγεί πλήκτρα συντόμευσης!"
-Output.ReplayBuffer.NoHotkey.Msg="Δεν έχει οριστεί πλήκτρο συντόμευσης για την επανάληψη προσωρινής μνήμης. Παρακαλώ ορίστε συντόμευση για «Αποθήκευση» και χρήση για την αποθήκευση επανάληψης καταγραφών."
+Output.ReplayBuffer.NoHotkey.Msg="Δεν έχει οριστεί πλήκτρο συντόμευσης για την επανάληψη προσωρινής μνήμης. Παρακαλώ ορίστε συντόμευση για «Αποθήκευση» και χρήση για την αποθήκευση επανάληψης καταγραφών."
Output.BadPath.Title="Λάθος Διαδρομή Αρχείου"
Output.BadPath.Text="Η προκαθορισμένη διαδρομή αρχείου δεν ειναι έγκυρη. Παρακαλώ ελέγξτε τις ρυθμίσεις σας για να επιβεβαιώσετε ότι έχει οριστεί μια έγκυρη διαδρομή αρχείου."
Basic.Main.PreviewConextMenu.Enable="Ενεργοποίηση Προεπισκόπησης"
+
ScaleFiltering="Κλίμακα Φίλτρου"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
Basic.PropertiesWindow.SelectColor="Επιλέξτε χρώμα"
Basic.PropertiesWindow.SelectFont="Επιλέξτε γραμματοσειρά"
Basic.PropertiesWindow.ConfirmTitle="Άλλαξαν οι Ρυθμίσεις"
-Basic.PropertiesWindow.Confirm="Υπάρχουν μη αποθηκευμένες αλλαγές. Θέλετε να τις κρατήσετε;"
+Basic.PropertiesWindow.Confirm="Υπάρχουν μη αποθηκευμένες αλλαγές. Θέλετε να τις κρατήσετε;"
Basic.PropertiesWindow.NoProperties="Δεν υπάρχουν διαθέσιμες ιδιότητες"
Basic.PropertiesWindow.AddFiles="Προσθήκη Αρχείων"
Basic.PropertiesWindow.AddDir="Προσθήκη Φακέλου"
Basic.Settings.ProgramRestart="Το πρόγραμμα πρέπει να επανεκκινηθεί για να εφαρμοστούν αυτές οι ρυθμίσεις."
Basic.Settings.ConfirmTitle="Επιβεβαίωση Αλλαγών"
-Basic.Settings.Confirm="Έχετε μη αποθηκευμένες αλλαγές. Αποθήκευση αλλαγών;"
+Basic.Settings.Confirm="Έχετε μη αποθηκευμένες αλλαγές. Αποθήκευση αλλαγών;"
Basic.Settings.General="Γενικά"
Basic.Settings.General.Theme="Θέμα"
Basic.Settings.Output.Simple.RecordingQuality.Small="Υψηλής Ποιότητας, Μεσαίου Μεγέθους Αρχείο"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Δυσδιάκριτης Ποιότητας, Μεγάλου Μεγέθους Αρχείο"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Ποιότητας Χωρίς Απώλειες, Εξαιρετικά Μεγάλου Μεγέθους Αρχείο"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Προειδοποίηση: Το βίντεο ροής ρυθμού μετάδοσης bit θα οριστεί σε %1, που είναι το ανώτερο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Προειδοποίηση: Ο ρυθμος μετάδοσης bit του ήχου ροής θα οριστεί στο %1, που είναι το ανώτατο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Προειδοποίηση: Το βίντεο ροής ρυθμού μετάδοσης bit θα οριστεί σε %1, που είναι το ανώτερο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Προειδοποίηση: Ο ρυθμος μετάδοσης bit του ήχου ροής θα οριστεί στο %1, που είναι το ανώτατο όριο για την τρέχουσα υπηρεσία συνεχούς ροής. Εάν είστε βέβαιοι ότι θέλετε να υπερβείτε το %1, ενεργοποιήστε τις επιλογές του κωδικοποιητή για προχωρημένους και αποεπιλέξτε την επιλογή «Επιβολή υπηρεσίας ροής στα όρια ρυθμού μετάδοσης bit»."
Basic.Settings.Output.Simple.Warn.Encoder="Προειδοποίηση: Η καταγραφή με χρήση κωδικοποιητή λογισμικού σε διαφορετική ποιότητα από την ροή θα απαιτήσει πρόσθετη χρήση της CPU, αν πραγματοποιήσετε ταυτόχρονα μετάδοση ροής και καταγραφή."
-Basic.Settings.Output.Simple.Warn.Lossless="Προειδοποίηση: Η ποιότητα χωρίς απώλειες αυξάνει πολύ το μέγεθος των αρχείων! Η ποιότητα χωρίς απώλειες ποιότητας θα καταλάβει 7 gigabyte χώρο στον σκληρό δίσκο ανά λεπτό, σε υψηλές αναλύσεις και ρυθμό καρέ. Η επιλογή χωρίς απώλειες δεν συνιστάται για μεγάλες σε διάρκεια καταγραφές, εκτός και αν έχετε πολύ ελεύθερο χώρο διαθέσιμο στο σκληρό σας δίσκο."
+Basic.Settings.Output.Simple.Warn.Lossless="Προειδοποίηση: Η ποιότητα χωρίς απώλειες αυξάνει πολύ το μέγεθος των αρχείων! Η ποιότητα χωρίς απώλειες ποιότητας θα καταλάβει 7 gigabyte χώρο στον σκληρό δίσκο ανά λεπτό, σε υψηλές αναλύσεις και ρυθμό καρέ. Η επιλογή χωρίς απώλειες δεν συνιστάται για μεγάλες σε διάρκεια καταγραφές, εκτός και αν έχετε πολύ ελεύθερο χώρο διαθέσιμο στο σκληρό σας δίσκο."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Είστε σίγουρος ότι θέλετε να χρησιμοποιήσετε την επιλογή ποιότητα χωρίς απώλειες;"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Προειδοποίηση ποιότητας χωρίς απώλειες!"
Basic.Settings.Output.Simple.Encoder.Software="Λογισμικό (x264)"
Basic.Settings.Audio="Ήχος"
Basic.Settings.Audio.SampleRate="Ρυθμός Δειγματοληψίας"
Basic.Settings.Audio.Channels="Κανάλια"
-Basic.Settings.Audio.MeterDecayRate="Συντελεστής απόσβεσης ήχου μέτρησης"
Basic.Settings.Audio.MeterDecayRate.Fast="Γρήγορος"
Basic.Settings.Audio.MeterDecayRate.Medium="Μεσαίος (τύπος Ι PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Αργός (Τύπος ΙΙ PPM)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="Δείγμα Αιχμής"
Basic.Settings.Audio.PeakMeterType.TruePeak="Πραγματική Αιχμή (Υψηλότερη χρήση της CPU)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="Προειδοποίηση: Ο ήχος Surround είναι ενεργοποιημένος."
-Basic.Settings.Audio.MultichannelWarning="Κατά τη ροή, ελέγξτε αν η υπηρεσία ροής υποστηρίζει ήχο surround και ήχο surround αναπαραγωγής. Το Twitch, το Facebook 360 Live, το Mixer RTMP καί το Smashcast αποτελούν παραδείγματα όπου ο surround ήχος υποστηρίζεται πλήρως. Αν και το Facebook Live και το YouTube Live αποδέχονται τον ήχο surround, το Facebook Live τον υποβιβάζει σε stereo, και το YouTube Live παίζει μόνο σε δύο κανάλια.\n\nΤα φίλτρα ήχου του OBS είναι συμβατά με ήχο surround, αν καί δεν είναι εγγυημένη η υποστήριξη για plugins VST."
+Basic.Settings.Audio.MultichannelWarning="Κατά τη ροή, ελέγξτε αν η υπηρεσία ροής υποστηρίζει ήχο surround και ήχο surround αναπαραγωγής. Το Twitch, το Facebook 360 Live, το Mixer RTMP καί το Smashcast αποτελούν παραδείγματα όπου ο surround ήχος υποστηρίζεται πλήρως. Αν και το Facebook Live και το YouTube Live αποδέχονται τον ήχο surround, το Facebook Live τον υποβιβάζει σε stereo, και το YouTube Live παίζει μόνο σε δύο κανάλια.\n\nΤα φίλτρα ήχου του OBS είναι συμβατά με ήχο surround, αν καί δεν είναι εγγυημένη η υποστήριξη για plugins VST."
Basic.Settings.Audio.MultichannelWarning.Title="Ενεργοποίηση ήχου surround;"
Basic.Settings.Audio.MultichannelWarning.Confirm="Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε τον ήχο surround;"
-Basic.Settings.Audio.DesktopDevice="Συσκευή Ήχου Επιφάνειας"
-Basic.Settings.Audio.DesktopDevice2="Συσκευή Ήχου Επιφάνειας 2"
-Basic.Settings.Audio.AuxDevice="Μικρόφωνο/Αuxillary Συσκευή Ήχου"
-Basic.Settings.Audio.AuxDevice2="Μικρόφωνο/Αuxillary Συσκευή Ήχου 2"
-Basic.Settings.Audio.AuxDevice3="Μικρόφωνο/Αuxillary Συσκευή Ήχου 3"
-Basic.Settings.Audio.AuxDevice4="Μικρόφωνο/Βοηθητική Συσκευή ήχου 4"
Basic.Settings.Audio.EnablePushToMute="Ενεργοποίηση της Πίεσης-για-σίγαση"
Basic.Settings.Audio.PushToMuteDelay="Καθυστέρηση Πίεσης-για-σίγαση"
Basic.Settings.Audio.EnablePushToTalk="Ενεργοποίηση Πίεσης-για-ομιλία"
Basic.Settings.Advanced.FormatWarning="Προειδοποίηση: Μορφές χρώματος εκτός του NV12 προορίζονται κυρίως για καταγραφή, και δεν συνιστώνται κατά τη ροή. Ενδέχεται να υπάρξει αυξημένη χρήση της CPU λόγω μετατροπής μορφής χρώματος."
Basic.Settings.Advanced.Audio.BufferingTime="Χρόνος Προσωρινής Μνήμης Ήχου"
Basic.Settings.Advanced.Video.ColorFormat="Μορφή Χρώματος"
-Basic.Settings.Advanced.Video.ColorSpace="Χώρος χρωμάτων YUV"
-Basic.Settings.Advanced.Video.ColorRange="Εύρος Χρωμάτων YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Μερικό"
Basic.Settings.Advanced.Video.ColorRange.Full="Πλήρες"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Συσκευή Παρακολούθησης Ήχου"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Προεπιλεγμένη"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Απενεργοποίηση Σίγασης Ήχου Windows"
Basic.Settings.Advanced.StreamDelay="Καθυστέρηση Ροής"
Basic.AdvAudio="Ιδιότητες Ήχου για Προχωρημένους"
Basic.AdvAudio.Name="Όνομα"
-Basic.AdvAudio.Volume="Ένταση (%)"
Basic.AdvAudio.Mono="Υποβίβαση σε Μονοφωνικό"
Basic.AdvAudio.Balance="Εξισορρόπηση"
Basic.AdvAudio.SyncOffset="Μετατόπιση Συγχρονισμού (ms)"
Basic.SystemTray.Show="Εμφάνιση"
Basic.SystemTray.Hide="Απόκρυψη"
-Basic.SystemTray.Message.Reconnecting="Έγινε αποσύνδεση. Γίνεται επανασύνδεση..."
+Basic.SystemTray.Message.Reconnecting="Έγινε αποσύνδεση. Γίνεται επανασύνδεση..."
Hotkeys.Insert="Insert"
Hotkeys.Delete="Διαγραφή"
ResizeOutputSizeOfSource.Text="Η βασική ανάλυση και η ανάλυση εξόδου θα μεταβληθούν σύμφωνα με τις διαστάσεις της τρέχουσας πηγής."
ResizeOutputSizeOfSource.Continue="Θέλετε να συνεχίσετε;"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/en-US.ini
Changed
# Note to translators: *DO NOT* translate this file directly. Instead, visit http://crowdin.com/project/obs-studio and submit your translations there.
-# Pull requests for translations outside of CrowdIn will not be accepted.
+# Pull requests for translations outside of Crowdin will not be accepted.
# Read this forum post for more instructions on submitting translations: https://obsproject.com/forum/threads/how-to-contribute-translations-for-obs.16327/
# Language and language region of this file
Enable="Enable"
DisableOSXVSync="Disable OSX V-Sync"
ResetOSXVSyncOnExit="Reset OSX V-Sync on Exit"
-HighResourceUsage="Encoding overloaded! Consider turning down video settings or using a faster encoding preset."
+HighResourceUsage="Encoding overloaded! Consider turning down video settings or using a faster encoding preset."
Transition="Transition"
QuickTransitions="Quick Transitions"
Left="Left"
VerticalLayout="Vertical Layout"
Group="Group"
DoNotShowAgain="Do not show again"
+Default="(Default)"
+Calculating="Calculating..."
# warning if program already open
AlreadyRunning.Title="OBS is already running"
-AlreadyRunning.Text="OBS is already running! Unless you meant to do this, please shut down any existing instances of OBS before trying to run a new instance. If you have OBS set to minimize to the system tray, please check to see if it's still running there."
+AlreadyRunning.Text="OBS is already running! Unless you meant to do this, please shut down any existing instances of OBS before trying to run a new instance. If you have OBS set to minimize to the system tray, please check to see if it's still running there."
AlreadyRunning.LaunchAnyway="Launch Anyway"
-# warning when closing docks. it's frustrating that we actually need this.
+# warning when closing docks. it's frustrating that we actually need this.
DockCloseWarning.Title="Closing Dockable Window"
DockCloseWarning.Text="You just closed a dockable window. If you'd like to show it again, use the View → Docks menu on the menu bar."
Auth.AuthFailure.Title="Authentication Failure"
Auth.AuthFailure.Text="Failed to authenticate with %1:\n\n%2: %3"
Auth.InvalidScope.Title="Authentication Required"
-Auth.InvalidScope.Text="The authentication requirements for %1 have changed. Some features may not be available."
+Auth.InvalidScope.Text="The authentication requirements for %1 have changed. Some features may not be available."
Auth.LoadingChannel.Title="Loading channel information..."
Auth.LoadingChannel.Text="Loading channel information for %1, please wait..."
Auth.ChannelFailure.Title="Failed to load channel"
Auth.StreamInfo="Stream Information"
TwitchAuth.Stats="Twitch Stats"
TwitchAuth.Feed="Twitch Activity Feed"
+TwitchAuth.TwoFactorFail.Title="Could not query stream key"
+TwitchAuth.TwoFactorFail.Text="OBS was unable to connect to your Twitch account. Please make sure two-factor authentication is set up in your <a href='https://www.twitch.tv/settings/security'>Twitch security settings</a> as this is required to stream."
# copy filters
Copy.Filters="Copy Filters"
BandwidthTest.Region.Other="Other"
# first time startup
-Basic.FirstStartup.RunWizard="Would you like to run the auto-configuration wizard? You can also manually configure your settings by clicking the Settings button in the main window."
+Basic.FirstStartup.RunWizard="Would you like to run the auto-configuration wizard? You can also manually configure your settings by clicking the Settings button in the main window."
Basic.FirstStartup.RunWizard.NoClicked="If you change your mind, you can run the auto-configuration wizard any time again from the Tools menu."
# auto config wizard
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Use Current (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Either 60 or 30, but prefer 60 when possible"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Either 60 or 30, but prefer high resolution"
-Basic.AutoConfig.VideoPage.CanvasExplanation="Note: The canvas (base) resolution is not necessarily the same as the resolution you will stream or record with. Your actual stream/recording resolution may be scaled down from the canvas resolution to reduce resource usage or bitrate requirements."
+Basic.AutoConfig.VideoPage.CanvasExplanation="Note: The canvas (base) resolution is not necessarily the same as the resolution you will stream or record with. Your actual stream/recording resolution may be scaled down from the canvas resolution to reduce resource usage or bitrate requirements."
Basic.AutoConfig.StreamPage="Stream Information"
Basic.AutoConfig.StreamPage.SubTitle="Please enter your stream information"
Basic.AutoConfig.StreamPage.ConnectAccount="Connect Account (optional)"
Basic.AutoConfig.StreamPage.DisconnectAccount="Disconnect Account"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Disconnect Account?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?"
Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key"
Basic.AutoConfig.StreamPage.Service="Service"
Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefer hardware encoding"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware Encoding eliminates most CPU usage, but may require more bitrate to obtain the same level of quality."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Stream warning"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="The bandwidth test is about to stream randomized video data without audio to your channel. If you're able, it's recommended to temporarily turn off saving videos of streams and set the stream to private until after the test has completed. Continue?"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="The bandwidth test is about to stream randomized video data without audio to your channel. If you're able, it's recommended to temporarily turn off saving videos of streams and set the stream to private until after the test has completed. Continue?"
Basic.AutoConfig.TestPage="Final Results"
Basic.AutoConfig.TestPage.SubTitle.Testing="The program is now executing a set of tests to estimate the most ideal settings"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testing complete"
Basic.AutoConfig.TestPage.TestingBandwidth="Performing bandwidth test, this may take a few minutes..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Connecting to: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Connecting to: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Failed to connect to any servers, please check your internet connection and try again."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testing bandwidth for: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testing bandwidth for: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="Testing stream encoder, this may take a minute..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testing recording encoder, this may take a minute..."
Basic.AutoConfig.TestPage.TestingRes="Testing resolutions, this may take a few minutes..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming Encoder"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Recording Encoder"
Basic.AutoConfig.TestPage.Result.Header="The program has determined that these estimated settings are the most ideal for you:"
-Basic.AutoConfig.TestPage.Result.Footer="To use these settings, click Apply Settings. To reconfigure the wizard and try again, click Back. To manually configure settings yourself, click Cancel and open Settings."
+Basic.AutoConfig.TestPage.Result.Footer="To use these settings, click Apply Settings. To reconfigure the wizard and try again, click Back. To manually configure settings yourself, click Cancel and open Settings."
# stats
Basic.Stats="Stats"
Basic.Stats.DroppedFrames="Dropped Frames (Network)"
Basic.Stats.MegabytesSent="Total Data Output"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Disk full in (approx.)"
ResetUIWarning.Title="Are you sure you want to reset the UI?"
-ResetUIWarning.Text="Resetting the UI will hide additional docks. You will need to unhide these docks from the view menu if you want them to be visible.\n\nAre you sure you want to reset the UI?"
+ResetUIWarning.Text="Resetting the UI will hide additional docks. You will need to unhide these docks from the view menu if you want them to be visible.\n\nAre you sure you want to reset the UI?"
# updater
Updater.Title="New update available"
Updater.NoUpdatesAvailable.Text="No updates are currently available"
Updater.FailedToLaunch="Failed to launch updater"
Updater.GameCaptureActive.Title="Game capture active"
-Updater.GameCaptureActive.Text="Game capture hook library is currently in use. Please close any games/programs being captured (or restart windows) and try again."
+Updater.GameCaptureActive.Text="Game capture hook library is currently in use. Please close any games/programs being captured (or restart Windows) and try again."
# quick transitions
QuickTransitions.SwapScenes="Swap Preview/Output Scenes After Transitioning"
# confirm exit dialog box
ConfirmExit.Title="Exit OBS?"
-ConfirmExit.Text="OBS is currently active. All streams/recordings will be shut down. Are you sure you wish to exit?"
+ConfirmExit.Text="OBS is currently active. All streams/recordings will be shut down. Are you sure you wish to exit?"
# confirm delete dialog box
ConfirmRemove.Title="Confirm Remove"
Output.StartStreamFailed="Failed to start streaming"
Output.StartRecordingFailed="Failed to start recording"
Output.StartReplayFailed="Failed to start replay buffer"
-Output.StartFailedGeneric="Starting the output failed. Please check the log for details.\n\nNote: If you are using the NVENC or AMD encoders, make sure your video drivers are up to date."
+Output.StartFailedGeneric="Starting the output failed. Please check the log for details.\n\nNote: If you are using the NVENC or AMD encoders, make sure your video drivers are up to date."
+
# output connect messages
Output.ConnectFail.Title="Failed to connect"
-Output.ConnectFail.BadPath="Invalid Path or Connection URL. Please check your settings to confirm that they are valid."
+Output.ConnectFail.BadPath="Invalid Path or Connection URL. Please check your settings to confirm that they are valid."
Output.ConnectFail.ConnectFailed="Failed to connect to server"
-Output.ConnectFail.InvalidStream="Could not access the specified channel or stream key, please double-check your stream key. If it is correct, there may be a problem connecting to the server."
-Output.ConnectFail.Error="An unexpected error occurred when trying to connect to the server. More information in the log file."
+Output.ConnectFail.InvalidStream="Could not access the specified channel or stream key, please double-check your stream key. If it is correct, there may be a problem connecting to the server."
+Output.ConnectFail.Error="An unexpected error occurred when trying to connect to the server. More information in the log file."
Output.ConnectFail.Disconnected="Disconnected from server."
+# output streaming-related messages
+Output.StreamEncodeError.Title="Encoding error"
+Output.StreamEncodeError.Msg="An encoder error occurred while streaming."
+
# output recording-related messages
Output.RecordFail.Title="Failed to start recording"
-Output.RecordFail.Unsupported="The output format is either unsupported or does not support more than one audio track. Please check your settings and try again."
+Output.RecordFail.Unsupported="The output format is either unsupported or does not support more than one audio track. Please check your settings and try again."
Output.RecordNoSpace.Title="Insufficient disk space"
Output.RecordNoSpace.Msg="There is not sufficient disk space to continue recording."
Output.RecordError.Title="Recording error"
Output.RecordError.Msg="An unspecified error occurred while recording."
+Output.RecordError.EncodeErrorMsg="An encoder error occurred while recording."
Output.ReplayBuffer.NoHotkey.Title="No hotkey set!"
-Output.ReplayBuffer.NoHotkey.Msg="No save hotkey set for replay buffer. Please set the \"Save\" hotkey to use for saving replay recordings."
+Output.ReplayBuffer.NoHotkey.Msg="No save hotkey set for replay buffer. Please set the \"Save\" hotkey to use for saving replay recordings."
# output recording messages
Output.BadPath.Title="Bad File Path"
-Output.BadPath.Text="The configured file output path is invalid. Please check your settings to confirm that a valid file path has been set."
+Output.BadPath.Text="The configured file output path is invalid. Please check your settings to confirm that a valid file path has been set."
# log upload dialog text and messages
LogReturnDialog="Log Upload Successful"
# update dialog
UpdateAvailable="New Update Available"
-UpdateAvailable.Text="Version %1.%2.%3 is now available. <a href='%4'>Click here to download</a>"
+UpdateAvailable.Text="Version %1.%2.%3 is now available. <a href='%4'>Click here to download</a>"
# audio device names
Basic.DesktopDevice1="Desktop Audio"
# display context menu
Basic.Main.PreviewConextMenu.Enable="Enable Preview"
+# disable preview
+Basic.Main.Preview.Disable="Disable Preview"
+
# scale filtering
ScaleFiltering="Scale Filtering"
ScaleFiltering.Point="Point"
Basic.PropertiesWindow.SelectColor="Select color"
Basic.PropertiesWindow.SelectFont="Select font"
Basic.PropertiesWindow.ConfirmTitle="Settings Changed"
-Basic.PropertiesWindow.Confirm="There are unsaved changes. Do you want to keep them?"
+Basic.PropertiesWindow.Confirm="There are unsaved changes. Do you want to keep them?"
Basic.PropertiesWindow.NoProperties="No properties available"
Basic.PropertiesWindow.AddFiles="Add Files"
Basic.PropertiesWindow.AddDir="Add Directory"
Basic.MainMenu.Edit.Transform.FitToScreen="&Fit to screen"
Basic.MainMenu.Edit.Transform.StretchToScreen="&Stretch to screen"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Center to screen"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Center Vertically"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Center Horizontally"
Basic.MainMenu.Edit.Order="&Order"
Basic.MainMenu.Edit.Order.MoveUp="Move &Up"
Basic.MainMenu.Edit.Order.MoveDown="Move &Down"
# basic mode settings dialog
Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
Basic.Settings.ConfirmTitle="Confirm Changes"
-Basic.Settings.Confirm="You have unsaved changes. Save changes?"
+Basic.Settings.Confirm="You have unsaved changes. Save changes?"
# basic mode 'general' settings
Basic.Settings.General="General"
Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximum Replay Time (Seconds)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximum Memory (Megabytes)"
Basic.Settings.Output.ReplayBuffer.Estimate="Estimated memory usage: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Note: Make sure to set a hotkey for the replay buffer in the hotkeys section)"
Basic.Settings.Output.ReplayBuffer.Prefix="Replay Buffer Filename Prefix"
Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
Basic.Settings.Output.Simple.RecordingQuality.Small="High Quality, Medium File Size"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Tremendously Large File Size"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"."
Basic.Settings.Output.Simple.Warn.Encoder="Warning: Recording with a software encoder at a different quality than the stream will require extra CPU usage if you stream and record at the same time."
-Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 gigabytes of disk space per minute at high resolutions and framerates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available."
+Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 gigabytes of disk space per minute at high resolutions and framerates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are you sure you want to use lossless quality?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warning!"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
# basic mode 'output' settings - advanced section - recording subsection - TT
-FilenameFormatting.TT="%CCYY Year, four digits\n%YY Year, last two digits (00-99)\n%MM Month as a decimal number (01-12)\n%DD Day of the month, zero-padded (01-31)\n%hh Hour in 24h format (00-23)\n%mm Minute (00-59)\n%ss Second (00-61)\n%% A % sign\n%a Abbreviated weekday name\n%A Full weekday name\n%b Abbreviated month name\n%B Full month name\n%d Day of the month, zero-padded (01-31)\n%H Hour in 24h format (00-23)\n%I Hour in 12h format (01-12)\n%m Month as a decimal number (01-12)\n%M Minute (00-59)\n%p AM or PM designation\n%S Second (00-61)\n%y Year, last two digits (00-99)\n%Y Year\n%z ISO 8601 offset from UTC or timezone\n name or abbreviation\n%Z Timezone name or abbreviation\n"
+FilenameFormatting.TT="%CCYY Year, four digits\n%YY Year, last two digits (00-99)\n%MM Month as a decimal number (01-12)\n%DD Day of the month, zero-padded (01-31)\n%hh Hour in 24h format (00-23)\n%mm Minute (00-59)\n%ss Second (00-61)\n%% A % sign\n%a Abbreviated weekday name\n%A Full weekday name\n%b Abbreviated month name\n%B Full month name\n%d Day of the month, zero-padded (01-31)\n%H Hour in 24h format (00-23)\n%I Hour in 12h format (01-12)\n%m Month as a decimal number (01-12)\n%M Minute (00-59)\n%p AM or PM designation\n%S Second (00-61)\n%y Year, last two digits (00-99)\n%Y Year\n%z ISO 8601 offset from UTC in timezone\n%Z Timezone name or abbreviation\n"
# basic mode 'video' settings
Basic.Settings.Video="Video"
Basic.Settings.Video.Numerator="Numerator"
Basic.Settings.Video.Denominator="Denominator"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Invalid resolution value. Must be [width]x[height] (i.e. 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="Video output is currently active. Please turn off any outputs to change video settings."
+Basic.Settings.Video.InvalidResolution="Invalid resolution value. Must be [width]x[height] (i.e. 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="Video output is currently active. Please turn off any outputs to change video settings."
Basic.Settings.Video.DisableAero="Disable Aero"
# scale filters
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Sample Rate"
Basic.Settings.Audio.Channels="Channels"
-Basic.Settings.Audio.MeterDecayRate="Audio Meter Decay Rate"
+Basic.Settings.Audio.Meters="Meters"
+Basic.Settings.Audio.MeterDecayRate="Decay Rate"
Basic.Settings.Audio.MeterDecayRate.Fast="Fast"
Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Slow (Type II PPM)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="Sample Peak"
Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (Higher CPU usage)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="WARNING: Surround sound audio is enabled."
-Basic.Settings.Audio.MultichannelWarning="If streaming, check to see if your streaming service supports both surround sound ingest and surround sound playback. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast are examples where surround sound is fully supported. Although Facebook Live and YouTube Live both accept surround ingest, Facebook Live downmixes to stereo, and YouTube Live plays only two channels.\n\nOBS audio filters are compatible with surround sound, though VST plugin support isn't guaranteed."
+Basic.Settings.Audio.MultichannelWarning="If streaming, check to see if your streaming service supports both surround sound ingest and surround sound playback. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast are examples where surround sound is fully supported. Although Facebook Live and YouTube Live both accept surround ingest, Facebook Live downmixes to stereo, and YouTube Live plays only two channels.\n\nOBS audio filters are compatible with surround sound, though VST plugin support isn't guaranteed."
Basic.Settings.Audio.MultichannelWarning.Title="Enable surround sound audio?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Are you sure you want to enable surround sound audio?"
-Basic.Settings.Audio.DesktopDevice="Desktop Audio Device"
-Basic.Settings.Audio.DesktopDevice2="Desktop Audio Device 2"
-Basic.Settings.Audio.AuxDevice="Mic/Auxiliary Audio Device"
-Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio Device 2"
-Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio Device 3"
-Basic.Settings.Audio.AuxDevice4="Mic/Auxiliary Audio Device 4"
+Basic.Settings.Audio.Devices="Devices"
+Basic.Settings.Audio.DesktopDevice="Desktop Audio"
+Basic.Settings.Audio.DesktopDevice2="Desktop Audio 2"
+Basic.Settings.Audio.AuxDevice="Mic/Auxiliary Audio"
+Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio 2"
+Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio 3"
+Basic.Settings.Audio.AuxDevice4="Mic/Auxiliary Audio 4"
Basic.Settings.Audio.EnablePushToMute="Enable Push-to-mute"
Basic.Settings.Audio.PushToMuteDelay="Push-to-mute delay"
Basic.Settings.Audio.EnablePushToTalk="Enable Push-to-talk"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Below Normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Idle"
-Basic.Settings.Advanced.FormatWarning="Warning: Color formats other than NV12 are primarily intended for recording, and are not recommended when streaming. Streaming may incur increased CPU usage due to color format conversion."
+Basic.Settings.Advanced.FormatWarning="Warning: Color formats other than NV12 are primarily intended for recording, and are not recommended when streaming. Streaming may incur increased CPU usage due to color format conversion."
Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
Basic.Settings.Advanced.Video.ColorFormat="Color Format"
-Basic.Settings.Advanced.Video.ColorSpace="YUV Color Space"
-Basic.Settings.Advanced.Video.ColorRange="YUV Color Range"
+Basic.Settings.Advanced.Video.ColorSpace="Color Space"
+Basic.Settings.Advanced.Video.ColorRange="Color Range"
Basic.Settings.Advanced.Video.ColorRange.Partial="Partial"
Basic.Settings.Advanced.Video.ColorRange.Full="Full"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Audio Monitoring Device"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring Device"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Disable Windows audio ducking"
Basic.Settings.Advanced.StreamDelay="Stream Delay"
# advanced audio properties
Basic.AdvAudio="Advanced Audio Properties"
Basic.AdvAudio.Name="Name"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
Basic.AdvAudio.Mono="Downmix to Mono"
Basic.AdvAudio.Balance="Balance"
Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
Basic.SystemTray.Hide="Hide"
# system tray messages
-Basic.SystemTray.Message.Reconnecting="Disconnected. Reconnecting..."
+Basic.SystemTray.Message.Reconnecting="Disconnected. Reconnecting..."
# hotkeys that may lack translation on certain operating systems
Hotkeys.Insert="Insert"
NoSources.Title="No Sources"
NoSources.Text="It looks like you haven't added any video sources yet, so you will only be outputting a blank screen. Are you sure you want to do this?"
NoSources.Text.AddSource="You can add sources by clicking the + icon under the Sources box in the main window at any time."
+NoSources.Label="You don't have any sources.\nClick the + button below,\nor right click here to add one."
# Scene item color selection
ChangeBG="Set Color"
ResizeOutputSizeOfSource="Resize output (source size)"
ResizeOutputSizeOfSource.Text="The base and output resolutions will be resized to the size of the current source."
ResizeOutputSizeOfSource.Continue="Do you want to continue?"
+
+PreviewTransition="Preview Transition"
obs-studio-23.1.0.tar.xz/UI/data/locale/es-ES.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/es-ES.ini
Changed
VerticalLayout="Interfaz Vertical"
Group="Grupo"
DoNotShowAgain="No mostrar de nuevo"
+Default="(Por defecto)"
+Calculating="Calculando..."
AlreadyRunning.Title="OBS ya se está ejecutando"
AlreadyRunning.Text="¡OBS ya se está ejecutando! A no ser que quieras hacer esto, por favor, cierra todas las ventanas de OBS antes de intentar iniciar una nueva. Si tienes configurado OBS para que se minimice a la barra de tareas, comprueba si sigue ejecutándose ahí."
Auth.AuthFailure.Title="Fallo de autenticación"
Auth.AuthFailure.Text="Error al autentificar con %1:\n\n%2: %3"
Auth.InvalidScope.Title="Se requiere autentificación"
-Auth.InvalidScope.Text="Los requisitos de autenticación para %1 han cambiado. Algunas características pueden no estar disponibles."
+Auth.InvalidScope.Text="Los requisitos de autenticación para %1 han cambiado. Algunas características pueden no estar disponibles."
Auth.LoadingChannel.Title="Cargando información del canal..."
Auth.LoadingChannel.Text="Cargando información del canal para %1, por favor espere..."
Auth.ChannelFailure.Title="Error al cargar canal"
Auth.StreamInfo="Información de Stream"
TwitchAuth.Stats="Estadísticas de Twitch"
TwitchAuth.Feed="Fuente de actividades de Twitch"
+TwitchAuth.TwoFactorFail.Title="No se pudo obtener la clave de transmisión"
+TwitchAuth.TwoFactorFail.Text="OBS no pudo conectarse a su cuenta de Twitch. Por favor, asegúrese de que la autenticación en dos pasos está configurada en su configuración de seguridad <a href='https://www.twitch.tv/settings/security'>Configuración de seguridad de Twitch</a> ya que esto es necesario para transmitir."
Copy.Filters="Copiar filtros"
Paste.Filters="Pegar filtros"
BandwidthTest.Region.Other="Otros"
Basic.FirstStartup.RunWizard="¿Deseas ejecutar el asistente de configuración automática? También puedes configurar tus ajustes manualmente al hacer clic en el botón \"Configuración\" de la ventana principal."
-Basic.FirstStartup.RunWizard.NoClicked="Si cambias tu mente, puede ejecutar al asistente de configuración automática cualquier momento desde el menú \"Herramientas\"."
+Basic.FirstStartup.RunWizard.NoClicked="Si cambia de opinión, puede ejecutar al asistente de configuración automática en cualquier momento desde el menú \"Herramientas\"."
Basic.AutoConfig="Asistente de configuración automática"
Basic.AutoConfig.ApplySettings="Aplicar configuración"
Basic.Stats.HDDSpaceAvailable="Espacio en disco disponible"
Basic.Stats.MemoryUsage="Uso de memoria"
Basic.Stats.AverageTimeToRender="Tiempo de media para procesar un fotograma"
-Basic.Stats.SkippedFrames="Fotogramas saltados por retraso de procesamiento"
+Basic.Stats.SkippedFrames="Fotogramas omitidos por retraso en la codificación"
Basic.Stats.MissedFrames="Fotogramas perdidos por retraso de procesamiento"
Basic.Stats.Output.Stream="Transmisión"
Basic.Stats.Output.Recording="Grabación"
Basic.Stats.DroppedFrames="Fotogramas Perdidos (Red)"
Basic.Stats.MegabytesSent="Salida de datos total"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Disco lleno en (aprox.)"
ResetUIWarning.Title="¿Está seguro de que desea restablecer la interfáz?"
-ResetUIWarning.Text="Restablecer la interfáz ocultará los docks adicionales. Necesitarás eliminar estos docks del menú de vista si quieres que sean visibles.\n\n¿Estás seguro de que quieres restablecer la interfáz?"
+ResetUIWarning.Text="Restablecer la interfaz ocultará los docks adicionales. Necesitarás eliminar estos docks del menú de vista si quieres que sean visibles.\n\n¿Estás seguro de que quieres restablecer la interfaz?"
Updater.Title="Nueva actualización disponible"
Updater.Text="Hay una nueva versión disponible:"
Updater.NoUpdatesAvailable.Text="No hay actualizaciones disponibles actualmente"
Updater.FailedToLaunch="No se pudo iniciar el actualizador"
Updater.GameCaptureActive.Title="Captura de juego activa"
-Updater.GameCaptureActive.Text="La libreria de captura de juegos esta actualmente en uso. Por favor, cierra cualquier juego/programa que este siendo capturado (o reinicia windows) e intentalo de nuevo."
+Updater.GameCaptureActive.Text="La biblioteca de captura de juegos está actualmente en uso. Cierre los juegos o programas que se capturan (o reinicie Windows) e inténtelo de nuevo."
-QuickTransitions.SwapScenes="Cambiar vista previa y salida escenas después de la transición"
-QuickTransitions.SwapScenesTT="Cambia la vista previa y salida escenas después de la transición (si todavía existe la escena original de la salida). \nEsto no deshará cualquier cambio que pueda haber hecho a la escena original de la salida."
+QuickTransitions.SwapScenes="Cambiar las escenas Vista previa/Programa después de la transición"
+QuickTransitions.SwapScenesTT="Intercambia las escenas vista previa y programa después de la transición (si todavía existe la escena original de programa).\nEsto no deshará cualquier cambio que pueda haber hecho a la escena original de programa."
QuickTransitions.DuplicateScene="Duplicar escena"
-QuickTransitions.DuplicateSceneTT="Al editar la misma escena, permite editar la transformación/visibilidad de las fuentes sin modificar la salida. \nPara editar propiedades de fuentes sin modificar la salida, habilita 'Duplicar fuentes'. \n Cambiando este valor restablecerá la escena actual de salida (si todavía existe)."
+QuickTransitions.DuplicateSceneTT="Al editar la misma escena, permite editar la transformación/visibilidad de las fuentes sin modificar la salida.\nPara editar propiedades de fuentes sin modificar la salida, habilita 'Duplicar fuentes'.\nCambiando este valor restablecerá la escena actual de salida (si todavía existe)."
QuickTransitions.EditProperties="Duplicar fuentes"
-QuickTransitions.EditPropertiesTT="Al editar la misma escena, permite editar propiedades de fuentes sin modificar la salida.\n Esto sólo se puede utilizar si está activado 'Duplicar escena'.\nCiertas fuentes (de captura o multimedia) no son compatibles y no se pueden editar por separado.\nCambiando este valor restablecerá la escena actual de salida (si todavía existe).\n\nAdvertencia: debido a que las fuentes se duplicarán, esto puede requerir recursos adicionales del sistema o de vídeo."
+QuickTransitions.EditPropertiesTT="Al editar la misma escena, permite editar propiedades de fuentes sin modificar la salida.\nEsto sólo se puede utilizar si está activado 'Duplicar escena'.\nCiertas fuentes (de captura o multimedia) no son compatibles y no se pueden editar por separado.\nCambiando este valor restablecerá la escena actual de salida (si todavía existe).\n\nAdvertencia: Debido a que las fuentes se duplicarán, esto puede requerir recursos adicionales del sistema o de vídeo."
QuickTransitions.HotkeyName="Transición Rápida: %1"
Basic.AddTransition="Añadir transición configurable"
Output.StartReplayFailed="No se pudo iniciar el buffer de replay"
Output.StartFailedGeneric="No se pudo iniciar la salida. Por favor compruebe los logs para mas detalles. \n\nNota: Si estas usando los codificadores de NVENC o AMD, asegúrate que tus drivers de vídeo están actualizados."
+
Output.ConnectFail.Title="Error al conectarse"
-Output.ConnectFail.BadPath="URL ruta de acceso o conexión no válida. Por favor, compruebe su configuración para confirmar que está correcta."
+Output.ConnectFail.BadPath="URL ruta de acceso o conexión no válida. Por favor, compruebe su configuración para confirmar que está correcta."
Output.ConnectFail.ConnectFailed="No se pudo conectar al servidor"
Output.ConnectFail.InvalidStream="No se pudo acceder al canal especificado o clave de transmisión, por favor compruebe su clave de transmisión. Si es correcta, puede haber un problema al conectar al servidor."
-Output.ConnectFail.Error="Se ha producido un error inesperado al intentar conectar con el servidor. Más información en el archivo de registro."
+Output.ConnectFail.Error="Se ha producido un error inesperado al intentar conectar con el servidor. Más información en el archivo de registro."
Output.ConnectFail.Disconnected="Desconectado del servidor."
+Output.StreamEncodeError.Title="Error de codificación"
+Output.StreamEncodeError.Msg="Un error de codificación se produjo durante el Streaming."
+
Output.RecordFail.Title="No se pudo iniciar grabación"
Output.RecordFail.Unsupported="El formato de salida no está soportado o no soporta más de una pista de audio. Por favor, comprueba tus ajustes e inténtalo de nuevo."
Output.RecordNoSpace.Title="No hay suficiente espacio en disco"
Output.RecordNoSpace.Msg="No hay suficiente espacio en disco para continuar grabando."
Output.RecordError.Title="Error en la grabación"
Output.RecordError.Msg="Se ha producido un error no especificado durante la grabación."
+Output.RecordError.EncodeErrorMsg="Un error de codificación se produjo mientras se grababa."
Output.ReplayBuffer.NoHotkey.Title="¡Sin tecla de acceso rápido!"
Output.ReplayBuffer.NoHotkey.Msg="Sin tecla de acceso rápido establecida para el búfer de reproducción. Configure la tecla de acceso \"Guardar\" para guardar las grabaciones de reproducción."
Output.BadPath.Title="Ruta de archivo incorrecta"
-Output.BadPath.Text="La ruta de salida de archivos establecida no es válida. Por favor, compruebe su configuración para confirmar que se ha establecido una ruta de archivos válida."
+Output.BadPath.Text="La ruta de salida de archivos establecida no es válida. Por favor, compruebe su configuración para confirmar que se ha establecido una ruta de archivos válida."
LogReturnDialog="Carga de registro exitosa"
LogReturnDialog.CopyURL="Copiar dirección URL"
Remux.HelpText="Suelta los archivos en esta ventana para convertirlos, o selecciona una celda vacía \"OBS Recording\" para buscar un archivo."
UpdateAvailable="Nueva actualización disponible"
-UpdateAvailable.Text="Versión %1.%2.%3 disponible. <a href='%4'> Haga clic aquí para descargarla</a>"
+UpdateAvailable.Text="Versión %1.%2.%3 disponible. <a href='%4'> Haga clic aquí para descargarla</a>"
Basic.DesktopDevice1="Audio del escritorio"
Basic.DesktopDevice2="Audio del escritorio 2"
Basic.Main.PreviewConextMenu.Enable="Habilitar previsualización"
+Basic.Main.Preview.Disable="Deshabilitar previsualización"
+
ScaleFiltering="Escala de filtrado"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineal"
Basic.MainMenu.Edit.Transform.FitToScreen="Ajustar a la pantalla (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="E&stirar a la pantalla"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrar en la pantalla"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrar Verticalmente"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrar Horizontalmente"
Basic.MainMenu.Edit.Order="&Ordenar"
Basic.MainMenu.Edit.Order.MoveUp="Mover arriba (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Mover abajo (&D)"
Basic.Settings.ProgramRestart="El programa debe reiniciarse para que esta configuración surta efecto."
Basic.Settings.ConfirmTitle="Confirmar cambios"
-Basic.Settings.Confirm="Hay cambios sin guardar. ¿Guardar los cambios?"
+Basic.Settings.Confirm="Hay cambios sin guardar. ¿Guardar los cambios?"
Basic.Settings.General="General"
Basic.Settings.General.Theme="Tema"
Basic.Settings.Output.Simple.RecordingQuality.Small="Alta calidad, tamaño de archivo medio"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Tamaño de archivo grande, calidad indistinguible"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tamaño del archivo sin pérdida de calidad, tremendamente grande"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTENCIA: El streaming de vídeo se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTENCIA: El streaming de audio se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="ADVERTENCIA: El streaming de vídeo se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="ADVERTENCIA: El streaming de audio se establecerá a %1, que es el límite superior para el servicio de streaming actual. Si estás seguro que quieres ir por encima de %1, active las opciones avanzadas del codificador y desactive \"Forzar limites de bitrate en el servicio de streaming\"."
Basic.Settings.Output.Simple.Warn.Encoder="ADVERTENCIA: Grabar con un codificador de software de una calidad diferente a la de la transmisión requerirá un uso adicional de la CPU si transmite y graba al mismo tiempo."
-Basic.Settings.Output.Simple.Warn.Lossless="ADVERTENCIA: ¡La calidad sin perdidas genera tamaños de archivo muy grandes! La calidad sin pérdidas puede utilizar más de 7 gigabytes de espacio en disco por minuto en alta resolución y con alta tasa de fotogramas. La calidad sin pérdidas no se recomienda para grabaciones largas, a menos que tenga una gran cantidad de espacio en disco disponible."
+Basic.Settings.Output.Simple.Warn.Lossless="ADVERTENCIA: ¡La calidad sin perdidas genera tamaños de archivo muy grandes! La calidad sin pérdidas puede utilizar más de 7 gigabytes de espacio en disco por minuto en alta resolución y con alta tasa de fotogramas. La calidad sin pérdidas no se recomienda para grabaciones largas, a menos que tenga una gran cantidad de espacio en disco disponible."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="¿Confirma que desea utilizar calidad sin perdidas?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="¡Atención de calidad sin pérdidas!"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
Basic.Settings.Video.Numerator="Numerador"
Basic.Settings.Video.Denominator="Denominador"
Basic.Settings.Video.Renderer="Renderizador"
-Basic.Settings.Video.InvalidResolution="Valor de la resolución no válido. Debe ser [ancho] x [altura] (por ejemplo, 1920 x 1080)"
-Basic.Settings.Video.CurrentlyActive="La salida de vídeo está actualmente activa. Por favor apague cualquier salida para cambiar la configuración de vídeo."
+Basic.Settings.Video.InvalidResolution="Valor de la resolución no válido. Debe ser [ancho] x [altura] (por ejemplo, 1920 x 1080)"
+Basic.Settings.Video.CurrentlyActive="La salida de vídeo está actualmente activa. Por favor apague cualquier salida para cambiar la configuración de vídeo."
Basic.Settings.Video.DisableAero="Deshabilitar Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineal (más rápido, pero borroso si se escala la imagen)"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Frecuencia de muestreo"
Basic.Settings.Audio.Channels="Canales"
-Basic.Settings.Audio.MeterDecayRate="Tasa de decaimiento del medidor de audio"
+Basic.Settings.Audio.Meters="Medidores"
+Basic.Settings.Audio.MeterDecayRate="Velocidad de descomposición"
Basic.Settings.Audio.MeterDecayRate.Fast="Rápida"
Basic.Settings.Audio.MeterDecayRate.Medium="Media (PPM de tipo I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lenta (PPM de tipo II)"
Basic.Settings.Audio.MultichannelWarning="Si se está transmitiendo, compruebe si su servicio de transmisión admite la ingesta de sonido envolvente y la reproducción de sonido envolvente. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast son ejemplos en los que el sonido envolvente es totalmente compatible. Aunque Facebook Live y YouTube Live aceptan la ingesta surround, Facebook Live mezcla a estéreo y YouTube Live solo reproduce dos canales.\n\nLos filtros de audio OBS son compatibles con sonido envolvente, aunque no se garantiza el soporte de complementos VST."
Basic.Settings.Audio.MultichannelWarning.Title="¿Habilitar el audio de sonido envolvente?"
Basic.Settings.Audio.MultichannelWarning.Confirm="¿Seguro que quiere habilitar el audio de sonido envolvente?"
-Basic.Settings.Audio.DesktopDevice="Dispositivo de audio de escritorio"
-Basic.Settings.Audio.DesktopDevice2="Dispositivo de audio de escritorio 2"
+Basic.Settings.Audio.Devices="Dispositivos"
+Basic.Settings.Audio.DesktopDevice="Audio del escritorio"
+Basic.Settings.Audio.DesktopDevice2="Audio del escritorio 2"
Basic.Settings.Audio.AuxDevice="Dispositivo de audio Mic/auxiliar"
Basic.Settings.Audio.AuxDevice2="Dispositivo de audio Mic/auxiliar 2"
Basic.Settings.Audio.AuxDevice3="Dispositivo de audio Mic/auxiliar 3"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Por debajo de lo normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Inactiva"
-Basic.Settings.Advanced.FormatWarning="ADVERTENCIA: Formatos de Color que no sean NV12 están diseñados principalmente para la grabación y no se recomiendan al retransmitir. La retransmisión puede incurrir en mayor uso de la CPU debido a la conversión de formato de color."
+Basic.Settings.Advanced.FormatWarning="ADVERTENCIA: Formatos de Color que no sean NV12 están diseñados principalmente para la grabación y no se recomiendan al retransmitir. La retransmisión puede incurrir en mayor uso de la CPU debido a la conversión de formato de color."
Basic.Settings.Advanced.Audio.BufferingTime="Tiempo de búfer de audio"
Basic.Settings.Advanced.Video.ColorFormat="Formato de color"
-Basic.Settings.Advanced.Video.ColorSpace="Espacio de color YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gama de Color YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Espacio de color"
+Basic.Settings.Advanced.Video.ColorRange="Gama de colores"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de monitorización de audio"
Basic.AdvAudio="Propiedades de Audio avanzadas"
Basic.AdvAudio.Name="Nombre"
-Basic.AdvAudio.Volume="Volumen (%)"
+Basic.AdvAudio.Volume="Volumen"
Basic.AdvAudio.Mono="Remezclar a Mono"
Basic.AdvAudio.Balance="Balance"
Basic.AdvAudio.SyncOffset="Sincronización Offset (ms)"
NoSources.Title="Sin recursos"
NoSources.Text="Parece que no has añadido ningún recurso de vídeo aún, así que estarás emitiendo una pantalla en blanco. ¿Estás seguro de que quieres hacer esto?"
NoSources.Text.AddSource="Puedes añadir recursos haciendo click en el icono de \"+\" debajo del menú Recursos en la ventana principal en cualquier momento."
+NoSources.Label="No tienes ninguna fuente.\nHaz clic en el botón +,\no haz clic derecho aquí para añadir una."
ChangeBG="Establecer color"
CustomColor="Color personalizado"
ResizeOutputSizeOfSource.Text="La resolución base y de salida serán ajustadas al tamaño de la fuente actual."
ResizeOutputSizeOfSource.Continue="¿Quieres continuar?"
+PreviewTransition="Vista previa de la Transición"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/et-EE.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/et-EE.ini
Changed
Output.StartStreamFailed="Voogedastuse alustamine nurjus"
Output.StartRecordingFailed="Salvestamise alustamine nurjus"
+
Output.ConnectFail.Title="Ühendamine ei õnnestunud"
Output.ConnectFail.BadPath="Vigane rada või ühenduse URL. Palun veendu, et valitud sätted on õiged."
Output.ConnectFail.ConnectFailed="Serveriga ühendamine ebaõnnestus"
+
Output.RecordFail.Title="Salvestamise alustamine nurjus"
Output.RecordNoSpace.Title="Kettaruumi pole piisavalt"
Output.RecordNoSpace.Msg="Pole piisavalt kettaruumi, et jätkata salvestamist."
Remux.ExitUnfinished="Kodeerimine ei ole veel lõpetatud. Kui kodeerimine peatada, siis võib sihtfail olla kasutuskõlbmatu.\nKas soovid kindlasti kodeerimise peatada?"
UpdateAvailable="Värskendus on saadaval"
-UpdateAvailable.Text="Saadaval on version %1.%2.%3. <a href='%4'>Allalaadimiseks vajuta siia</a>"
+UpdateAvailable.Text="Saadaval on version %1.%2.%3. <a href='%4'>Allalaadimiseks vajuta siia</a>"
Basic.DesktopDevice1="Töölaua heli"
Basic.DesktopDevice2="Töölaua heli 2"
Basic.Main.PreviewConextMenu.Enable="Lülita eelvaade sisse"
+
ScaleFiltering.Point="Punkt"
Deinterlacing.Retro="Retro"
Basic.PropertiesWindow="'%1' omadused"
Basic.PropertiesWindow.SelectColor="Vali värv"
Basic.PropertiesWindow.SelectFont="Vali font"
-Basic.PropertiesWindow.Confirm="On salvestamata muutusi. Kas soovite neid säilitada?"
+Basic.PropertiesWindow.Confirm="On salvestamata muutusi. Kas soovite neid säilitada?"
Basic.PropertiesWindow.AddFiles="Lisa failid"
Basic.PropertiesWindow.AddDir="Lisa kataloog"
Basic.PropertiesWindow.AddURL="Lisa tee/URL"
Basic.Settings.ProgramRestart="Nende sätete jõustumiseks tuleb taaskäivitada programm."
Basic.Settings.ConfirmTitle="Kinnita muudatused"
-Basic.Settings.Confirm="Teil on salvestamata muutusi. Salvestame muudatused?"
+Basic.Settings.Confirm="Teil on salvestamata muutusi. Salvestame muudatused?"
Basic.Settings.General="Üldine"
Basic.Settings.General.Theme="Teema"
Basic.Settings.Output.Mode.Simple="Lihtne"
Basic.Settings.Output.Mode.Adv="Täpsemad seaded"
Basic.Settings.Output.Mode.FFmpeg="FFmpeg väljund"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Ei saa hinnata mälukasutust. Palun määrake maksimaalne piir."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Ei saa hinnata mälukasutust. Palun määrake maksimaalne piir."
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kadudeta kvaliteet, tohutult suur failimaht"
-Basic.Settings.Output.Simple.Warn.Lossless="Hoiatus: Kadudeta kvaliteet tekitab tohutult suuri faile! Kadudeta kvaliteet võib kasutada kuni 7 Gb kettaruumi minuti kohta, kõrge eraldusvõime ja kaadrisagedusega. Kadudeta kvaliteeti ei ole soovitatav kasutada pikkade salvestiste jaoks, kui teil just ei ole väga palju vaba kettaruumi."
+Basic.Settings.Output.Simple.Warn.Lossless="Hoiatus: Kadudeta kvaliteet tekitab tohutult suuri faile! Kadudeta kvaliteet võib kasutada kuni 7 Gb kettaruumi minuti kohta, kõrge eraldusvõime ja kaadrisagedusega. Kadudeta kvaliteeti ei ole soovitatav kasutada pikkade salvestiste jaoks, kui teil just ei ole väga palju vaba kettaruumi."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Kas soovite kindlasti kasutada kadudeta kvaliteeti?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Kadudeta kvaliteedi hoiatus!"
Basic.Settings.Output.Simple.Encoder.Software="Tarkvara (x264)"
Basic.Settings.Audio="Heli"
Basic.Settings.Audio.Channels="Kanalid"
-Basic.Settings.Audio.DesktopDevice="Töölaua heliseade"
-Basic.Settings.Audio.DesktopDevice2="Töölaua heliseade 2"
Basic.Settings.Audio.UnknownAudioDevice="[Seade ühendamata või pole saadaval]"
Basic.Settings.Advanced.General.ProcessPriority.High="Kõrge"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normaalne"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Tegevusetu"
Basic.Settings.Advanced.Video.ColorFormat="Värvi formaat"
-Basic.Settings.Advanced.Video.ColorRange="YUV värviruumi vahemik"
Basic.Settings.Advanced.Video.ColorRange.Partial="Osaline"
Basic.Settings.Advanced.Video.ColorRange.Full="Täielik"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Vaikeseade"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Madal-viivitus režiim"
Basic.AdvAudio.Name="Nimi"
-Basic.AdvAudio.Volume="Helitugevus (%)"
Basic.AdvAudio.Monitoring.None="Välja lülitatud"
Basic.AdvAudio.AudioTracks="Rajad"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/eu-ES.ini
Changed
SceneProjector="Pantaila osoko proiektorea (eszena)"
SourceProjector="Pantaila osoko proiektorea (iturburua)"
StudioProgramWindow="Leihoko proiektorea (programa)"
-PreviewWindow="Leihodun proiektorea (aurrebista)"
+PreviewWindow="Leiho proiektorea (aurrebista)"
SceneWindow="Leihodun proiektorea (Eszena)"
SourceWindow="Leihodun proiektorea (iturburua)"
MultiviewProjector="Ikuspegi anitza (pantaila osoan)"
HideMixer="Ezkutatu nahasgailuan"
TransitionOverride="Trantsizio mota"
None="Gabe"
-StudioMode.Preview="Aurreikusi"
+StudioMode.Preview="Aurrebista"
StudioMode.Program="Programa"
ShowInMultiview="Erakutsi ikuspegi anitzean"
VerticalLayout="Diseinu bertikala"
Group="Taldea"
DoNotShowAgain="Ez erakutsi berriro"
+Default="(Lehenetsia)"
+Calculating="Kalkulatzen..."
AlreadyRunning.Title="OBS dagoeneko martxan dago"
AlreadyRunning.Text="OBS dagoeneko martxan dago! Bestelakorik nahi ez baduzu Itxi irekita dagoen saioa beste saio bat ireki baino lehen. Ezarri baduzu OBS agertzea minimizatua sistemaren erretiluan begiratu eta oraindik exekutatzen ari den bertan."
DockCloseWarning.Title="Leiho moldagarria ixten"
DockCloseWarning.Text="Leiho moldagarri bat itxi berri duzu. Berriro bistaratu nahi baduzu, erabili menu barrako Ikusi → Leiho moldagarriak menua."
+Auth.Authing.Title="Egiaztatzen..."
+Auth.Authing.Text="%1(r) ekin egiaztatzen, itxaron..."
Auth.AuthFailure.Title="Autentifikazioak huts egin du"
Auth.AuthFailure.Text="Huts egin du %1:\n\n%2: %3 bidezko autentifikazioa"
Auth.InvalidScope.Title="Autentifikazioa derrigorrezkoa"
Auth.InvalidScope.Text="%1 autentifikatzeko eskakizunak aldatu dira. Eginbide batzuk ezingo dira erabili."
+Auth.LoadingChannel.Title="Kanalaren informazioa kargatzen..."
+Auth.LoadingChannel.Text="1% (e) tik kanalaren informazioa kargatzen, itxaron..."
Auth.ChannelFailure.Title="Huts egin du kanala kargatzen"
Auth.ChannelFailure.Text="Huts egin du %1\n\n%2: %3 kanalaren informazioa kargatzen"
Auth.Chat="Txata"
Auth.StreamInfo="Transmisioaren informazioa"
TwitchAuth.Stats="Twitch-estatistikak"
TwitchAuth.Feed="Twich aktibitateen jarioa"
+TwitchAuth.TwoFactorFail.Title="Ezin izan da transmisioaren gakoa galdetu"
+TwitchAuth.TwoFactorFail.Text="OBS-ek ez du lortu konektatzea zure Twitch kontuarekin. Egiazta ezazu bi urratsetako identifikazioa ezarrita dagoela zure <a href='https://www.twitch.tv/settings/security'>Twitch-eko segurtasun ezarpenetan</a> transmisiorako beharrezkoa da eta."
Copy.Filters="Kopiatu iragazkiak"
Paste.Filters="Itsatsi iragazkiak"
+BrowserPanelInit.Title="Nabigatzailea irekitzen..."
+BrowserPanelInit.Text="Nabigatzailea irekitzen, itxaron..."
BandwidthTest.Region="Eskualdea"
BandwidthTest.Region.US="Estatu Batuak"
Basic.Stats.DroppedFrames="Jaregindako fotogramak (Sarean)"
Basic.Stats.MegabytesSent="Datu irteera denetara"
Basic.Stats.Bitrate="Bit-emaria"
+Basic.Stats.DiskFullIn="Disko betea (gutxi gora behera)"
ResetUIWarning.Title="Ziur zaude interfaze grafikoa berrabiarazi nahi duzula?"
ResetUIWarning.Text="Interfaze grafikoa berrezartzeak ezkuta ditzake atrake gehigarriak. Atrakeak bistaratu nahi baduzu menuko Ikusi atalean agerrarazi beharko dituzu.\n\nZiur zaude interfaze grafikoa berrezarri nahi duzula?"
Updater.NoUpdatesAvailable.Text="Une honetan ez dago eguneraketarik eskuragarri"
Updater.FailedToLaunch="Huts egin du eguneratzailea abiarazten"
Updater.GameCaptureActive.Title="Jolasen kaptura aktiboa"
-Updater.GameCaptureActive.Text="Jolasen kapturaren liburutegia erabiltzen ari da. Itxi kapturatzen ari den jolasa/programa (edo berrabiarazi Windows) eta saiatu berriro."
+Updater.GameCaptureActive.Text="Jolasen kapturaren liburutegia erabiltzen ari da. Itxi kapturatzen ari den jolasa/programa (edo berrabiarazi Windows) eta saiatu berriro."
QuickTransitions.SwapScenes="Trukatu Aurrebista/Irteera-eszenak trantsizioen ondoren"
QuickTransitions.SwapScenesTT="Trukatu aurrebistak eta irteera-eszenak trantsizioen ondoren (baldin eta irteerakoaren jatorrizkoa eszena badago).\n Honek ez du desegingo irteerakoaren jatorrizko eszenari egindako aldaketak."
ConfirmBWTest.Text="OBS banda zabalera azterketa moduan duzu konfiguratua. Modu honek sareko azterketak egiteko aukera ematen du zure kanala aktibatu gabe. Behin azterketa egin ondoren, desaktibatu behar duzu ikusleek zure transmisioa ikus dezaten.\n\nJarraitu nahi duzu?"
ConfirmExit.Title="Irten OBS-tik?"
-ConfirmExit.Text="OBS jardunean dago. Transmisio/grabazio guztiak itzaliko dira. Ziur zaude irten nahi duzula?"
+ConfirmExit.Text="OBS jardunean dago. Transmisio/grabazio guztiak itzaliko dira. Ziur zaude irten nahi duzula?"
ConfirmRemove.Title="Baieztatu kentzea"
ConfirmRemove.Text="Ziur zaude '$1' kendu nahi duzula?"
Output.StartReplayFailed="Huts egin du erreprodukzio bufferrak"
Output.StartFailedGeneric="Huts egin du irteeraren abioak. Begiratu erregistroa zehaztasunak ikusteko.\n\nOharra: NVENC edo AMD kodetzaileak erabiltzen ari bazara segurtatu haien kontrolatzaileak eguneratuta daudela."
+
Output.ConnectFail.Title="Huts egin du konektatzean"
Output.ConnectFail.BadPath="Helburu edo konexio-URL okerra. Egiaztatu zure ezarpenak baliozkoak direla baieztatzeko."
Output.ConnectFail.ConnectFailed="Huts egin du zerbitzariarekin konektatzean"
Output.ConnectFail.Error="Ustekabeko akats bat gertatu da zerbitzariarekin konektatzen saiatzerakoan. Argibide gehiago egunkari-fitxategian."
Output.ConnectFail.Disconnected="Zerbitzaritik deskonektatuta."
+Output.StreamEncodeError.Title="Kodeketa errorea"
+Output.StreamEncodeError.Msg="Kodetzailearen errore bat gertatu da transmititzean."
+
Output.RecordFail.Title="Huts egin du grabazioa hastean"
Output.RecordFail.Unsupported="Irteera formatua ez da onartzen edo ez du audio pista bat baino gehiago onartzen. Egiaztatu zure ezarpenak eta saiatu berriro."
Output.RecordNoSpace.Title="Ez dago nahiko tokirik diskoan"
Output.RecordNoSpace.Msg="Ez dago nahikoa tokirik diskoan grabatzen jarraitzeko."
Output.RecordError.Title="Grabazio akatsa"
Output.RecordError.Msg="Zehaztugabeko akats bat gertatu da grabatzerakoan."
+Output.RecordError.EncodeErrorMsg="Kodetzailearen errore bat gertatu da grabatzean."
Output.ReplayBuffer.NoHotkey.Title="Laster tekla ezarri gabe!"
-Output.ReplayBuffer.NoHotkey.Msg="Ez da ezarri gordetzeko laster teklarik erreprodukzio bufferrerako. Ezarri \"Gorde\" laster tekla erreprodukzio bufferrak gordetzeko."
+Output.ReplayBuffer.NoHotkey.Msg="Ez da ezarri gordetzeko laster teklarik erreprodukzio bufferrerako. Ezarri \"Gorde\" laster tekla erreprodukzio bufferrak gordetzeko."
Output.BadPath.Title="Fitxategi-bide okerra"
Output.BadPath.Text="Ezarritako fitxategiaren irteera-bidea baliogabea da. Egiaztatu zure ezarpenak baieztatzeko baliozko fitxategi-bidea ezarri dela."
Remux.FinishedTitle="Bihurketa amaituta"
Remux.Finished="Grabazioa bihurtuta"
Remux.FinishedError="Grabazioa bihurtua, baina fitxategia osatu gabe egon daiteke"
+Remux.SelectRecording="OBS grabazio modua aukeratu..."
+Remux.SelectTarget="Helburu-fitxategia aukeratu..."
Remux.FileExistsTitle="Helburu-fitxategiak badaude"
Remux.FileExists="Dagoeneko ondorengo helburu-fitxategiak existitzen dira. Ordezkatu nahi dituzu?"
Remux.ExitUnfinishedTitle="Multiplexazioa martxan"
Remux.HelpText="Jaregin itzazu fitxategiak leiho honetan aldatzeko, edo hauta ezazu \"OBS Grabazioa\"-gelaxka huts bat fitxategia arakatzeko."
UpdateAvailable="Eguneraketa eskuragarria"
-UpdateAvailable.Text="%1.%2.%3 bertsioa eskuragarri dago. <a href='%4'>Klikatu hemen deskargatzeko</a>"
+UpdateAvailable.Text="%1.%2.%3 bertsioa eskuragarri dago. <a href='%4'>Klikatu hemen deskargatzeko</a>"
Basic.DesktopDevice1="Mahaigaineko audioa"
Basic.DesktopDevice2="Mahaigaineko audioa 2"
Basic.Main.PreviewConextMenu.Enable="Gaitu aurrebista"
+Basic.Main.Preview.Disable="Desgaitu aurrebista"
+
ScaleFiltering="Eskalaren iragazketa"
ScaleFiltering.Point="Puntua"
ScaleFiltering.Bilinear="Bilineala"
Basic.MainMenu.Edit.Transform.FitToScreen="Doitu pantailara (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Luzatu pantailara (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Erdiratu pantailan (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Erdiratu bertikalki"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Erdiratu horizontalki"
Basic.MainMenu.Edit.Order="&Ordenatu"
Basic.MainMenu.Edit.Order.MoveUp="M&ugitu gora"
Basic.MainMenu.Edit.Order.MoveDown="Mugitu behera (&D)"
Basic.Settings.Output.Simple.Warn.VideoBitrate="Kontuz: transmisioaren bideoaren bit-tasa %1 ean ezarriko da; hau izango da oraingo transmisio zerbitzuaren goiko muga. Seguru bazaude %1 aren gainetik nahi duzula, gaitu kodetze aukera aurreratuak eta desautatu \"Behartu transmisio zerbitzuaren bit-tasaren mugak\"."
Basic.Settings.Output.Simple.Warn.AudioBitrate="Kontuz: transmisioaren audioaren bit-tasa %1 ean ezarriko da; hau izango da oraingo transmisio zerbitzuaren goiko muga. Seguru bazaude %1 aren gainetik nahi duzula, gaitu kodetze aukera aurreratuak eta desautatu \"Behartu transmisio zerbitzuaren bit-tasaren mugak\"."
Basic.Settings.Output.Simple.Warn.Encoder="Oharra: Transmisioak duen kalitatea ez bestelako kalitate batez grabatzeak PUZ-ren aparteko erabilera eskatzen du une berean transmititzen eta grabatzen baduzu."
-Basic.Settings.Output.Simple.Warn.Lossless="Oharra: Galerarik gabeko kalitateak neurri izugarri handiko fitxategiak sortzen ditu! Galerarik gabeko kalitateak minutuko 7 gigabytetik gorako tokia erabili dezake diskoan bereizmen eta fotograma-emari handietan. Galerarik gabeko kalitatea ez dago gomendatua grabazio luzeetarako disko toki eskuragarri oso handi bat ez baduzu."
+Basic.Settings.Output.Simple.Warn.Lossless="Oharra: Galerarik gabeko kalitateak neurri izugarri handiko fitxategiak sortzen ditu! Galerarik gabeko kalitateak minutuko 7 gigabytetik gorako tokia erabili dezake diskoan bereizmen eta fotograma-emari handietan. Galerarik gabeko kalitatea ez dago gomendatua grabazio luzeetarako disko toki eskuragarri oso handi bat ez baduzu."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Ziur zaude galerarik gabeko kalitatea erabili nahi duzula?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Galerarik gabeko kalitateaz oharra!"
Basic.Settings.Output.Simple.Encoder.Software="Softwarea (x264)"
Basic.Settings.Audio="Audioa"
Basic.Settings.Audio.SampleRate="Lagin-maiztasuna"
Basic.Settings.Audio.Channels="Kanalak"
-Basic.Settings.Audio.MeterDecayRate="Audio neurtzailearen gutxiagotze-tasa"
+Basic.Settings.Audio.Meters="Neurgailuak"
+Basic.Settings.Audio.MeterDecayRate="Desintegrazio-tasa"
Basic.Settings.Audio.MeterDecayRate.Fast="Azkarra"
Basic.Settings.Audio.MeterDecayRate.Medium="Tartekoa (I motako PPMa)"
Basic.Settings.Audio.MeterDecayRate.Slow="Geldoa (II motako PPMa)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="Lagin-gailurra"
Basic.Settings.Audio.PeakMeterType.TruePeak="Benetako gailurra (CPUaren erabilera handiagoa)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="Kontu: soinu inguratzailea aktibatuta dago."
-Basic.Settings.Audio.MultichannelWarning="Transmititzen ari bazara, begiratu ea zure transmisio zerbitzuak onartzen duen soinu inguratzailea sarrerako soinuan zein irteerakoan. Twitch, Facebook 360 LIve, Mixer RTMP, Samashcast esate baterako guztiz onartzen dute soinu inguratzailea. Facebook Live eta Youtube Live sarrerako soinu inguratzailea onartzen badute ere, Facebook Livek estereo bihurtzen du, eta Youtube Livek bakarrik bi kanal erreproduzitzen ditu.\n\nOBS audio iragazkiak soinu inguratzailearekin bateragarriak badira ere, ezin da bermatu VST pluginaren bateragarritasuna."
+Basic.Settings.Audio.MultichannelWarning="Transmititzen ari bazara, begiratu ea zure transmisio zerbitzuak onartzen duen soinu inguratzailea sarrerako soinuan zein irteerakoan. Twitch, Facebook 360 LIve, Mixer RTMP, Samashcast esate baterako guztiz onartzen dute soinu inguratzailea. Facebook Live eta Youtube Live sarrerako soinu inguratzailea onartzen badute ere, Facebook Livek estereo bihurtzen du, eta Youtube Livek bakarrik bi kanal erreproduzitzen ditu.\n\nOBS audio iragazkiak soinu inguratzailearekin bateragarriak badira ere, ezin da bermatu VST pluginaren bateragarritasuna."
Basic.Settings.Audio.MultichannelWarning.Title="Nahi duzu soinu inguratzailea aktibatzea?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Seguru zaude soinu inguratzailea aktibatu nahi duzula?"
-Basic.Settings.Audio.DesktopDevice="Mahaigaineko audio gailua"
-Basic.Settings.Audio.DesktopDevice2="Mahaigaineko audio gailua 2"
-Basic.Settings.Audio.AuxDevice="Mik/Osagarri audio gailua"
-Basic.Settings.Audio.AuxDevice2="Mik/Osagarri audio gailua 2"
-Basic.Settings.Audio.AuxDevice3="Mik/Osagarri audio gailua 3"
-Basic.Settings.Audio.AuxDevice4="Mik/Osagarria audio gailua 4"
+Basic.Settings.Audio.Devices="Gailuak"
+Basic.Settings.Audio.DesktopDevice="Mahaigaineko audioa"
+Basic.Settings.Audio.DesktopDevice2="Mahaigaineko audioa 2"
+Basic.Settings.Audio.AuxDevice="Mik/Audio osagarria"
+Basic.Settings.Audio.AuxDevice2="Mik/Audio osagarria 2"
+Basic.Settings.Audio.AuxDevice3="Mik/Audio osagarria 3"
+Basic.Settings.Audio.AuxDevice4="Mik/Audio osagarria 4"
Basic.Settings.Audio.EnablePushToMute="Gaitu Sakatu-mututzeko"
Basic.Settings.Audio.PushToMuteDelay="Sakatu-mututzeko atzerapena"
Basic.Settings.Audio.EnablePushToTalk="Gaitu Sakatu-hitz-egiteko"
Basic.Settings.Advanced.FormatWarning="Oharra: NV12 ez diren kolore formatuak grabaziorako dira gehienbat, eta ez daude gomendatuta transmisiorako. Transmisioak PUZ erabilpena handitu dezake kolore formatu bihurketa dela medio."
Basic.Settings.Advanced.Audio.BufferingTime="Audio bufferratze denbora"
Basic.Settings.Advanced.Video.ColorFormat="Kolore formatua"
-Basic.Settings.Advanced.Video.ColorSpace="YUV kolore-espazioa"
-Basic.Settings.Advanced.Video.ColorRange="YUV kolore-barrutia"
+Basic.Settings.Advanced.Video.ColorSpace="Kolore-espazioa"
+Basic.Settings.Advanced.Video.ColorRange="Kolore tartea"
Basic.Settings.Advanced.Video.ColorRange.Partial="Partziala"
Basic.Settings.Advanced.Video.ColorRange.Full="Osoa"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Audioa kontrolatzeko gailua"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitorizazio gailua"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Lehenetsia"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Ezgaitu Windows audio ducking"
Basic.Settings.Advanced.StreamDelay="Transmisio-atzerapena"
Basic.AdvAudio="Audio propietate aurreratuak"
Basic.AdvAudio.Name="Izena"
-Basic.AdvAudio.Volume="Bolumena (%)"
+Basic.AdvAudio.Volume="Bolumena"
Basic.AdvAudio.Mono="Nahasketa monora murriztu"
Basic.AdvAudio.Balance="Balantzea"
Basic.AdvAudio.SyncOffset="Sinkronizazioaren desplazamendua (ms)"
-Basic.AdvAudio.Monitoring="Adioaren kontrola"
-Basic.AdvAudio.Monitoring.None="Audioa itzalita"
-Basic.AdvAudio.Monitoring.MonitorOnly="Kontrola bakarrik (irteera mututua)"
-Basic.AdvAudio.Monitoring.Both="Kontrola eta irteera"
+Basic.AdvAudio.Monitoring="Adioaren monitorizazioa"
+Basic.AdvAudio.Monitoring.None="Ez monitorizatu"
+Basic.AdvAudio.Monitoring.MonitorOnly="Monitorea bakarrik (irteera mututua)"
+Basic.AdvAudio.Monitoring.Both="Monitorea eta irteera"
Basic.AdvAudio.AudioTracks="Pistak"
Basic.Settings.Hotkeys="Laster-teklak"
NoSources.Title="Iturbururik ez dago"
NoSources.Text="Badirudi ez duzula gehitu bideo iturbururik oraindik, beraz emaitza pantaila huts bat izango da. Ziur zaude hau egin nahi duzula?"
NoSources.Text.AddSource="Gehitzen ahal duzu iturburuak Iturburuak kutxako azpiko aldeko + ikonoa klikatuz edozein unetan."
+NoSources.Label="Ez duzu iturbururik aukeratu.\nEgin klik beheko + botoian,\nedo eskuin klik bat gehitzeko."
ChangeBG="Ezarri kolorea"
CustomColor="Kolore pertsonalizatua"
ResizeOutputSizeOfSource.Text="Oinarrizko eta irteerako bereizmena uneko iturriaren tamainara egokituko da."
ResizeOutputSizeOfSource.Continue="Jarraitu nahi duzu?"
+PreviewTransition="Aurreikusi trantsizioa"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/fa-IR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/fa-IR.ini
Changed
Basic.AutoConfig.VideoPage.FPS.UseCurrent="استفاده از فعلی (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="یا ۶۰ یا ۳۰ ، اما ۶۰ را ترجیح می دهم"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="یا ۶۰ یا ۳۰ ، اما وضوح بالا را ترجیح می دهم"
-Basic.AutoConfig.VideoPage.CanvasExplanation="نکته : اندازه محیط (پایه) لزوما همان اندازه ای نیست که با آن پخش زنده یا ضبط می کنید . اندازه واقعی پخش زنده/ضبط شما ممکن است برای کاهش استفاده از منابع و یا میزان درخواست بیت بر ثانیه (بیت ریت) کمتر باشد ."
+Basic.AutoConfig.VideoPage.CanvasExplanation="نکته : اندازه محیط (پایه) لزوما همان اندازه ای نیست که با آن پخش زنده یا ضبط می کنید . اندازه واقعی پخش زنده/ضبط شما ممکن است برای کاهش استفاده از منابع و یا میزان درخواست بیت بر ثانیه (بیت ریت) کمتر باشد ."
Basic.AutoConfig.StreamPage="اطلاعات پخش زنده"
Basic.AutoConfig.StreamPage.SubTitle="لطفا اطلاعات پخش زنده خود را وارد کنید"
Basic.AutoConfig.StreamPage.UseStreamKey="کلید پخش زنده"
+
+
Remux.FileExistsTitle="فایل های مورد نظر وجود دارند"
Remux.FileExists="فایل های زیر از قبل وجود دارند. آیا می•خوهید آن•ها را جایگزین کنید؟"
+
AddProfile.Title="افزودن پروفایل"
RenameProfile.Title="تغییر نام پروفایل"
ResizeOutputSizeOfSource.Continue="آیا مایلید ادامه دهید؟"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/fi-FI.ini
Changed
VerticalLayout="Pystynäkymä"
Group="Ryhmitä"
DoNotShowAgain="Älä näytä uudestaan"
+Default="(Oletus)"
+Calculating="Lasketaan..."
AlreadyRunning.Title="OBS on jo käynnissä"
AlreadyRunning.Text="OBS on jo käynnissä! Ellet tarkoittanut tehdä näin, ole hyvä ja sulje aikaisemmat OBS-prosessit ennen uuden käynnistämistä. Jos olet asettanut OBS:n pienentymään ilmaisinalueelle, varmista ettei se ole siellä yhä päällä."
Auth.AuthFailure.Title="Varmennusvirhe"
Auth.AuthFailure.Text="Varmennus epäonnistui %1:n kanssa:\n\n%2: %3"
Auth.InvalidScope.Title="Varmennus vaaditaan"
-Auth.InvalidScope.Text="Todennus vaatimukset %1:iin ovat muuttuneet. Jotkin ominaisuuksista eivät välttämättä ole käytössä."
+Auth.InvalidScope.Text="Todennus vaatimukset %1:iin ovat muuttuneet. Jotkin ominaisuuksista eivät välttämättä ole käytössä."
Auth.LoadingChannel.Title="Ladataan kanavan tietoja..."
Auth.LoadingChannel.Text="Ladataan kanavan tietoja %1:stä, ole hyvä ja odota..."
Auth.ChannelFailure.Title="Kanavan lataus epäonnistui"
Basic.Stats.DroppedFrames="Pudotettuja frameja (verkko)"
Basic.Stats.MegabytesSent="Datan ulostulo yhteensä"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Levy täynnä ajassa (arvio)"
ResetUIWarning.Title="Haluatko varmasti nollata käyttöliittymän?"
ResetUIWarning.Text="Käyttöliittymän nollaus piilottaa lisätyt telakat. Sinun täytyy laittaa telakat näkyviin \"Näkymät\" -valikosta jos tahdot ne näkyviin.\n\nHaluatko varmasti nollata käyttöliittymän?"
Updater.NoUpdatesAvailable.Text="Päivityksiä ei ole tällä hetkellä saatavilla"
Updater.FailedToLaunch="Päivittäjän käynnistäminen epäonnistui"
Updater.GameCaptureActive.Title="Game capture on aktiivinen"
-Updater.GameCaptureActive.Text="Game capture -kirjasto on yhä käytössä. Sulje kaikki pelit/ohjelmat, joita on kaapattu tai käynnistä tietokone uudelleen."
+Updater.GameCaptureActive.Text="Game capture -kirjasto on yhä käytössä. Sulje kaikki pelit/ohjelmat, joita on kaapattu (tai käynnistä Windows uudelleen) ja yritä uudelleen."
QuickTransitions.SwapScenes="Vaihda esikatselu- ja ulostulo-skenet siirtymän jälkeen"
QuickTransitions.SwapScenesTT="Vaihda esikatselu- ja ulostulo-skenet siirtymän jälkeen (jos ulostulon alkuperäinen skene on yhä olemassa).\nTämä ei peruuta muutoksia joita on tehty alkuperäiseen skeneen."
ConfirmBWTest.Text="OBS on asetettu kaistan nopeustestitilaan. Tämä tila antaa sinun testata verkkoa ilman että kanava menee Live-tilaan. Kun olet valmis testauksen kanssa, sinun täytyy ottaa se pois käytöstä, jotta muut voivat nähdä lähetyksesi.\n\nHaluatko jatkaa?"
ConfirmExit.Title="Sulje OBS?"
-ConfirmExit.Text="OBS on aktiivinen. Kaikki lähetykset/tallennukset suljetaan. Haluatko varmasti sulkea ohjelman?"
+ConfirmExit.Text="OBS on aktiivinen. Kaikki lähetykset/tallennukset suljetaan. Haluatko varmasti sulkea ohjelman?"
ConfirmRemove.Title="Vahvista poisto"
ConfirmRemove.Text="Haluatko varmasti poistaa '$1'?"
Output.StartReplayFailed="Toistopuskurin käynnistäminen epäonnistui"
Output.StartFailedGeneric="Ulostulon käynnistäminen epäonnistui. Tarkista loki lisätietoja varten.\n\nHuomio: Jos käytät NVENC tai AMD -enkoodereita, varmista, että näytönohjaimen ajurit on päivitetty ajantasalle."
+
Output.ConnectFail.Title="Yhdistäminen epäonnistui"
-Output.ConnectFail.BadPath="Viallinen polku tai yhteysosoite. Tarkista, että asetuksesi ovat kunnossa."
+Output.ConnectFail.BadPath="Viallinen polku tai yhteysosoite. Tarkista, että asetuksesi ovat kunnossa."
Output.ConnectFail.ConnectFailed="Palvelimelle yhdistäminen epäonnistui"
Output.ConnectFail.InvalidStream="Kanavaa tai lähetysavainta ei voida käyttää. Tarkista lähetysavain varmuuden vuoksi. Jos se kuitenkin on oikein, vika saattaa olla yhdistettävässä palvelimessa."
-Output.ConnectFail.Error="Odottamaton virhe ilmeni palvelimeen yhdistäessä. Lisää tietoa saat lokitiedostosta."
+Output.ConnectFail.Error="Odottamaton virhe ilmeni palvelimeen yhdistäessä. Lisää tietoa saat lokitiedostosta."
Output.ConnectFail.Disconnected="Yhteys palvelimeen katkaistiin."
+
Output.RecordFail.Title="Tallennuksen aloittaminen epäonnistui"
Output.RecordFail.Unsupported="Ulostulon muoto ei ole tuettu tai se ei tue useampaa kuin yhtä ääniraitaa. Tarkista asetuksesi ja yritä uudelleen."
Output.RecordNoSpace.Title="Liian vähän levytilaa"
Output.ReplayBuffer.NoHotkey.Msg="Tallennuksen pikanäppäintä ei ole asetettu toistopuskurille. Aseta \"Tallenna\"-pikanäppäin tallentaaksesi uusinnat."
Output.BadPath.Title="Viallinen tiedostopolku"
-Output.BadPath.Text="Asetettu tiedostopolku on viallinen. Tarkista asetuksistasi, että tiedostopolku on asetettu oikein."
+Output.BadPath.Text="Asetettu tiedostopolku on viallinen. Tarkista asetuksistasi, että tiedostopolku on asetettu oikein."
LogReturnDialog="Lokitiedoston lähetys onnistui"
LogReturnDialog.CopyURL="Kopioi osoite"
Basic.Main.PreviewConextMenu.Enable="Näytä esikatselu"
+Basic.Main.Preview.Disable="Poista esikatselu käytöstä"
+
ScaleFiltering="Asteikko suodatus"
ScaleFiltering.Point="Piste"
ScaleFiltering.Bilinear="Bilinear"
Basic.MainMenu.Edit.Transform.FitToScreen="Sovita ikkunaan (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Venytä ikkunaan (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Keskitä ikkunaan (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Keskitä pystysuunnassa"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Keskitä vaakasuunnassa"
Basic.MainMenu.Edit.Order="Järjestä (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Siirrä ylös (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Siirrä alas (&D)"
Basic.Settings.ProgramRestart="Ohjelma on käynnistettävä uudelleen, jotta asetukset tulevat voimaan."
Basic.Settings.ConfirmTitle="Vahvista muutokset"
-Basic.Settings.Confirm="Sinulla on tallentamattomia muutoksia. Tallennetaanko?"
+Basic.Settings.Confirm="Sinulla on tallentamattomia muutoksia. Tallennetaanko?"
Basic.Settings.General="Yleiset"
Basic.Settings.General.Theme="Teema"
Basic.Settings.Output.ReplayBuffer.SecondsMax="Uusinnan pisin aika (Sekunteina)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="Muistiraja (Megatavuja)"
Basic.Settings.Output.ReplayBuffer.Estimate="Arvioitu muistinkäyttö: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Muistin käyttöä ei voida arvioida. Valitse muistiraja."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Muistin käyttöä ei voida arvioida. Valitse muistiraja."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Huomio: Varmista että toistopuskurin pikanäppäin on asetettuna asetuksista)"
Basic.Settings.Output.ReplayBuffer.Prefix="Toistopuskurin tiedostonimen etuliite"
Basic.Settings.Output.ReplayBuffer.Suffix="Pääte"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY vuosi, neljä numeroa\n%YY Vuosi, kaksi viimeistä numeroa (00-99)\n%MM Kuukausi, kymmenlukuna (01-12) \n%DD Päivä, nolla-etuliitteellä (01-31)\n%hh Tunti, 24-tunnin muodossa (00-23)\n%mm Minuutti (00-59) \n%ss Sekunti (00-61) \n%% %-merkki\n%a Lyhennetty viikonpäivän nimi\n%A Täysi viikonpäivän nimi\n%b Lyhennetty kuukauden nimi\n%B Täysi kuukauden nimi\n%d Kuukauden päivä, nolla-etuliitteellä (01-31)\n%H Tunti, 24-tunnin muodossa (00-23) \n%I Tunti, 12-tunnin muodossa (01-12)\n%m Kuukausi, kymmenlukuna (01-12)\n%M Minuutti (00-59) \n%p AM tai PM merkintä\n%S Sekunti (00-61)\n%y Vuosi, kaksi viimeistä numeroa (00-99)\n%Y Vuosi\n%z ISO 8601 standardin mukainen ajan esittämistapa, UTC tai aikavyöhykkeestä\n Nimi tai lyhennne\n%Z Aikavyöhykkeen nimi tai lyhenne\n"
+FilenameFormatting.TT="%CCYY Vuosi, neljä numeroa\n%YY Vuosi, kaksi viimeistä numeroa (00-99)\n%MM Vuosi desimaalilukuna (01-12)\n%DD Päivä, nolla-etuliitteellä (01-31)\n%hh Tunti 24-tunnin muodossa (00-23)\n%mm Minuutti (00-59)\n%ss Sekunti (00-61)\n%% %-merkki\n%a Viikonpäivä lyhennettynä\n%A Viikonpäivä\n%b Lyhennetty kuukausi\n%B Kuukausi\n%d Päivä, nolla-etuliitteellä (01-31)\n%H Tunti 24-tunnin muodossa (00-23)\n%I Tunti 12-tunnin muodossa (01-12)\n%m Kuukausi desimaalilukuna (01-12)\n%M Minuutti (00-59)\n%p AM tai PM määritys\n%S Sekunti (00-61)\n%y Vuosi, kaksi viimeistä numeroa (00-99)\n%Y Vuosi\n%z ISO 8601 standardin mukainen ajan esittämistapa, UTC tai aikavyöhykkeestä\n%Z Aikavyöhykkeen nimi tai lyhenne\n"
Basic.Settings.Video="Kuva"
Basic.Settings.Video.Adapter="Näytönohjain"
Basic.Settings.Video.Numerator="Osoittaja"
Basic.Settings.Video.Denominator="Nimittäjä"
Basic.Settings.Video.Renderer="Renderoija"
-Basic.Settings.Video.InvalidResolution="Vialliset resoluution asetus. Muodon pitää olla [leveys]x[korkeus] (esim. 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="Kuvan ulostulo on tällä hetkellä käytössä. Kytke pois kaikki ulostulot vaihtaaksesi kuva-asetuksia."
+Basic.Settings.Video.InvalidResolution="Vialliset resoluution asetus. Muodon pitää olla [leveys]x[korkeus] (esim. 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="Kuvan ulostulo on tällä hetkellä käytössä. Kytke pois kaikki ulostulot vaihtaaksesi kuva-asetuksia."
Basic.Settings.Video.DisableAero="Poista Aero käytöstä"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (nopein, mutta epätarkka skaalattaessa)"
Basic.Settings.Audio="Ääni"
Basic.Settings.Audio.SampleRate="Näytteenottotaajuus"
Basic.Settings.Audio.Channels="Kanavat"
-Basic.Settings.Audio.MeterDecayRate="Äänimittarin putoamisnopeus"
+Basic.Settings.Audio.Meters="Mittarit"
+Basic.Settings.Audio.MeterDecayRate="Madaltumisnopeus"
Basic.Settings.Audio.MeterDecayRate.Fast="Nopea"
Basic.Settings.Audio.MeterDecayRate.Medium="Keskinopea (Tyyppi I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Hidas (Tyyppi II PPM)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="Huippuarvon näyte"
Basic.Settings.Audio.PeakMeterType.TruePeak="Todellinen huippuarvo (Korkeampi CPU:n käyttö)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="VAROITUS: Monikanavaääni on käytössä."
-Basic.Settings.Audio.MultichannelWarning="Varmista lähettäessä että palvelu tukee sekä monikanavaäänen lähettämistä, että toistamista. Twitch, Facebook 360 Live, Mixer RTMP ja Smashcast ovat esimerkkejä palveluista joissa monikanavaääni on täysin tuettu. Vaikka Facebook Live ja YouTube Live hyväksyvät monikanavaäänen lähettämisen, Facebook Live miksaa äänen stereoksi ja YouTube Live toistaa vain kaksi kanavaa.\n\nOBS:n äänisuodattimet tukevat monikanavaääntä, mutta VST-liitännäiset eivät välttämättä tue."
+Basic.Settings.Audio.MultichannelWarning="Varmista lähettäessä että palvelu tukee sekä monikanavaäänen lähettämistä, että toistamista. Twitch, Facebook 360 Live, Mixer RTMP ja Smashcast ovat esimerkkejä palveluista joissa monikanavaääni on täysin tuettu. Vaikka Facebook Live ja YouTube Live hyväksyvät monikanavaäänen lähettämisen, Facebook Live miksaa äänen stereoksi ja YouTube Live toistaa vain kaksi kanavaa.\n\nOBS:n äänisuodattimet tukevat monikanavaääntä, mutta VST-liitännäiset eivät välttämättä tue."
Basic.Settings.Audio.MultichannelWarning.Title="Käytä monikanava-ääntä?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Haluatko varmasti käyttää monikanavaista ääntä?"
+Basic.Settings.Audio.Devices="Laitteet"
Basic.Settings.Audio.DesktopDevice="Äänentoistolaite"
Basic.Settings.Audio.DesktopDevice2="Äänentoistolaite 2"
Basic.Settings.Audio.AuxDevice="Mic/Aux -äänilaite"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Normaali"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Alle normaalin"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Pieni"
-Basic.Settings.Advanced.FormatWarning="Varoitus: Muut kuin NV12 väriformaatit ovat tarkoitettuja tallentamiseen, eikä niitä suositella lähettämiseen. Väriformaation konversio saattaa johtaa korkeampaan suorittimen käyttöön lähettämisessä."
+Basic.Settings.Advanced.FormatWarning="Varoitus: Muut kuin NV12 väriformaatit ovat tarkoitettuja tallentamiseen, eikä niitä suositella lähettämiseen. Väriformaation konversio saattaa johtaa korkeampaan suorittimen käyttöön lähettämisessä."
Basic.Settings.Advanced.Audio.BufferingTime="Äänen puskurointiaika"
Basic.Settings.Advanced.Video.ColorFormat="Väriformaatti"
-Basic.Settings.Advanced.Video.ColorSpace="YUV väriavaruus"
-Basic.Settings.Advanced.Video.ColorRange="YUV värialue"
+Basic.Settings.Advanced.Video.ColorSpace="Väriavaruus"
+Basic.Settings.Advanced.Video.ColorRange="Värialue"
Basic.Settings.Advanced.Video.ColorRange.Partial="Osittainen"
Basic.Settings.Advanced.Video.ColorRange.Full="Täysi"
Basic.Settings.Advanced.Audio.MonitoringDevice="Äänen monitorointilaite"
Basic.AdvAudio="Äänen lisäominaisuudet"
Basic.AdvAudio.Name="Nimi"
-Basic.AdvAudio.Volume="Äänenvoimakkuus (%)"
Basic.AdvAudio.Mono="Miksaa yksikanavaiseksi"
Basic.AdvAudio.Balance="Balanssi"
Basic.AdvAudio.SyncOffset="Synkronoinnin viivästys (ms)"
NoSources.Title="Ei lähteitä"
NoSources.Text="Näyttää siltä ettet ole vielä lisännyt yhtään kuvalähdettä, joten kuva on musta. Haluatko varmasti tehdä näin?"
NoSources.Text.AddSource="Voit lisätä lähteitä klikkaamalla \"+\"-kuvaketta \"Lähteet\"-alueen alapuolella."
+NoSources.Label="Sinulla ei ole lähteitä.\nKlikkaa + painiketta alapuolella,\ntai klikkaa tästä hiiren oikealla painikkeella lisätäksesi yhden."
ChangeBG="Aseta väri"
CustomColor="Mukautettu väri"
ResizeOutputSizeOfSource.Text="Piirtoalueen ja ulostulon resoluutio muutetaan valitun lähteen kokoiseksi."
ResizeOutputSizeOfSource.Continue="Haluatko jatkaa?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/fil-PH.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/fil-PH.ini
Changed
Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit"
Updater.FailedToLaunch="Nabigong ilunsad ang updater"
Updater.GameCaptureActive.Title="Kumuha ng laro na aktibo"
-Updater.GameCaptureActive.Text="Kasalukuyang nakukuha sa library ang pagkuha ng hook library. Mangyaring isara ang anumang mga laro / programa na nakukuha (o i-restart ang mga bintana) at subukang muli."
QuickTransitions.SwapScenes="Swap Preview / Output Scenes Pagkatapos Transitioning"
QuickTransitions.SwapScenesTT="Mag swap ng mga preview at output scenes matapos ang transitioning (Kung may orihinal na output scene na umiiral).\nIto ay hindi pwede baguhin ang orihinal na eksena."
Output.StartReplayFailed="Bigong simulang ang replay buffer"
Output.StartFailedGeneric="Bigong simulang ang output. Pakitingnan ang talaan ng mga detalye.\n\nNote: kung ikaw ay gumagamit ng NVENC or AMD encoders, siguraduhin na nag video drivers ay naka update."
+
Output.ConnectFail.Title="Bigung kumunekta"
Output.ConnectFail.BadPath="Hindi wasto ang Path or ang Connection URL. Pakitingnan ang settings para ma kumpirma na ito ay pwede."
Output.ConnectFail.ConnectFailed="Bigong kumunekta sa serber"
Output.ConnectFail.Error="Isang di-inaasahang error ng subukang kumunekta sa serber. Karagdagang impormasyon ay nasa log file."
Output.ConnectFail.Disconnected="Nadiskonek mula sa serber."
+
Output.RecordFail.Title="Bigong simulang ang pag record"
Output.RecordFail.Unsupported="Ang output format ay maaring di suportado or di sinusuportahan ang higit sa isang audio track. Pakitingnan ang iyong settings at simulan ulet."
Output.RecordNoSpace.Title="Hindi sapat ang iyong espasyo"
Remux.ExitUnfinished="Di pa tapos ang Remuxing, pag itigil ang render ang napiling file ay di magagamit.\nGusto mo bang huminto sa pag remuxing?"
UpdateAvailable="May bagong update na available"
-UpdateAvailable.Text="Ang Version %1.%2.%3 ay available na. <a href='%4'>Pindutin para i-download</a>"
+UpdateAvailable.Text="Ang Version %1.%2.%3 ay available na. <a href='%4'>Pindutin para i-download</a>"
Basic.DesktopDevice1="Ang Desktop Audio"
Basic.DesktopDevice2="Ang Desktop Audio 2"
Basic.Main.PreviewConextMenu.Enable="Ipakita muli ang Larawan"
+
ScaleFiltering="I-filter iskala"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilinear"
Basic.Settings.Video.Numerator="Numerator"
Basic.Settings.Video.Denominator="Denominator"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Ang Balyo ng resolusyong ay imbalido. Dapat ito [width]x[height] (i.e. 1920x1080)"
+Basic.Settings.Video.InvalidResolution="Ang Balyo ng resolusyong ay imbalido. Dapat ito [width]x[height] (i.e. 1920x1080)"
Basic.Settings.Video.CurrentlyActive="Ang kasulukuyang Bidyo output ay aktibo. Paki turn off ang anumang output para mabago ang bidyo settings."
Basic.Settings.Video.DisableAero="Hindi paganahin ang Aero"
Basic.Settings.Audio="Tunog"
Basic.Settings.Audio.SampleRate="Halimbawa ng Antas"
Basic.Settings.Audio.Channels="Mga Channel"
-Basic.Settings.Audio.MeterDecayRate="Ang Audio Meter Decay Rate"
Basic.Settings.Audio.MeterDecayRate.Fast="Pabilisin"
Basic.Settings.Audio.MeterDecayRate.Medium="Katamtaman (Tipo I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Tipo II PPM)"
Basic.Settings.Audio.MultichannelWarning="Kung nag streaming, paki tignan kung ang iyong streaming service ay parehong supportado ang surround sound ingest at surround sound playback. Twitch, Facebook, 360 Live, Mixer RTMP, Smashcast ay ang mga halimbawa kung saan ang surround sound ay ganap na suportado, pati YouTube Live umaandar lamang sa dawalang channels.\n\nOBS audio filters ay kompatibol lamang sa surround sound, pero hindi siguradong supportado ang VST plugin."
Basic.Settings.Audio.MultichannelWarning.Title="Paganahin ang surround sound audio?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba gusto mong paganahin ang surround sound audio?"
-Basic.Settings.Audio.DesktopDevice="Ang Kagamitan sa Desktop Audio"
-Basic.Settings.Audio.DesktopDevice2="Ang 2 Kagamitan sa Desktop Audio"
-Basic.Settings.Audio.AuxDevice="Mic / Auxiliary Audio Device"
-Basic.Settings.Audio.AuxDevice2="Mic / Auxiliary Audio Device 2"
-Basic.Settings.Audio.AuxDevice3="Mic / Auxiliary Audio Device 3"
Basic.Settings.Audio.EnablePushToMute="Paganahin ang Push-to-mute"
Basic.Settings.Audio.PushToMuteDelay="Push-to-mute delay"
Basic.Settings.Audio.EnablePushToTalk="Paganahin ang Push-to-talk"
Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng kulay maliban sa NV12 ay pangunahing inilaan para sa pag-record, at hindi inirerekomenda kapag nag-stream. Maaaring mapalawak ng streaming ang paggamit ng CPU dahil sa conversion ng format ng kulay."
Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
Basic.Settings.Advanced.Video.ColorFormat="Format ng Kulay"
-Basic.Settings.Advanced.Video.ColorSpace="Ang espasyong kulay ng YUV"
-Basic.Settings.Advanced.Video.ColorRange="Ang saklaw ng kulay ng YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Bahagyang"
Basic.Settings.Advanced.Video.ColorRange.Full="Buo"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Ang kagamitan para sa Audio Monitoring"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="I-Default"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang Windows audio ducking"
Basic.Settings.Advanced.StreamDelay="Ang Antala ng Stream"
Basic.AdvAudio="Ang aria-arian ng Advanced Audio"
Basic.AdvAudio.Name="Pangalan"
-Basic.AdvAudio.Volume="Kalakasan (%)"
Basic.AdvAudio.Mono="Downmix ito sa Mono"
Basic.AdvAudio.SyncOffset="Ang Sync Offset (ms)"
Basic.AdvAudio.Monitoring="Ang subaybay ng Audio"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/fr-FR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/fr-FR.ini
Changed
VerticalLayout="Disposition Verticale"
Group="Groupe"
DoNotShowAgain="Ne plus afficher"
+Default="(Défaut)"
+Calculating="Calcul en cours..."
AlreadyRunning.Title="OBS est déjà en cours d'exécution"
AlreadyRunning.Text="OBS est déjà en cours d'exécution. À moins que cela soit délibéré, veuillez quitter toute autre instance active d'OBS (y compris celles minimisées dans la zone de notifications) avant d'en ouvrir une nouvelle."
Auth.StreamInfo="Informations de la diffusion"
TwitchAuth.Stats="Statistiques de Twitch"
TwitchAuth.Feed="Flux d'activité Twitch"
+TwitchAuth.TwoFactorFail.Title="Impossible de trouver la clé de stream"
+TwitchAuth.TwoFactorFail.Text="OBS n'a pas pu se connecter à votre compte Twitch. Veuillez vous assurer que l'authentification à deux facteurs est configurée dans vos <a href='https://www.twitch.tv/settings/security'>paramètres de sécurité Twitch</a> car cela est nécessaire pour lancer un stream."
Copy.Filters="Copier les filtres"
Paste.Filters="Coller les filtres"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Garder tel quel (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ou 30, mais préférer 60 si possible"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ou 30, mais favoriser une résolution élevée"
-Basic.AutoConfig.VideoPage.CanvasExplanation="Remarque : la résolution (de base) du canevas n'est pas nécessairement la même que la résolution avec laquelle vous allez diffuser (stream) ou enregistrer. La résolution actuelle de stream/enregistrement peut être réduite à partir de la résolution du canevas afin de diminuer l'utilisation des ressources et de la bande passante."
+Basic.AutoConfig.VideoPage.CanvasExplanation="Remarque : la résolution (de base) du canevas n'est pas nécessairement la même que la résolution avec laquelle vous allez diffuser (stream) ou enregistrer. La résolution actuelle de stream/enregistrement peut être réduite à partir de la résolution du canevas afin de diminuer l'utilisation des ressources et de la bande passante."
Basic.AutoConfig.StreamPage="Informations de flux"
Basic.AutoConfig.StreamPage.SubTitle="Entrez vos informations de stream"
Basic.AutoConfig.StreamPage.ConnectAccount="Connecter un compte (optionnel)"
Basic.Stats.DroppedFrames="Images perdues (réseau)"
Basic.Stats.MegabytesSent="Données transmises (total)"
Basic.Stats.Bitrate="Débit"
+Basic.Stats.DiskFullIn="Disque plein dans (env.)"
ResetUIWarning.Title="Êtes-vous sûr de vouloir réinitialiser l'interface graphique ?"
ResetUIWarning.Text="Réinitialiser l'interface masquera vos docks supplémentaires. Vous devrez les réactiver depuis le menu Afficher si vous voulez qu'ils soient visibles.\n\nÊtes-vous sûr de vouloir réinitialiser l'interface ?"
Updater.NoUpdatesAvailable.Text="Aucune mise à jour n’est actuellement disponible"
Updater.FailedToLaunch="Impossible de démarrer la mise à jour"
Updater.GameCaptureActive.Title="Capture de jeu active"
-Updater.GameCaptureActive.Text="La bibliothèque de capture de jeu est en cours d'utilisation. Veuillez fermer tous les jeux/programmes en cours de capture (ou redémarrez Windows) et réessayez."
+Updater.GameCaptureActive.Text="La bibliothèque de capture de jeu (« hook ») est en cours d'utilisation. Veuillez fermer tous les jeux/programmes en cours de capture (ou redémarrez Windows) et réessayez."
QuickTransitions.SwapScenes="Permuter les scènes d'aperçu et de sortie après la transition"
QuickTransitions.SwapScenesTT="Permute les scènes d'aperçu et de sortie après la transition (si la scène d'origine de la sortie existe toujours). \nCela n'annulera pas les modifications qui auront pu être faites sur la scène d'origine de la sortie."
ConfirmBWTest.Text="Vous avez configuré OBS en mode \"test de bande passante\". Ce mode permet de tester le réseau sans que votre chaîne ne soit en direct. Une fois que vous aurez effectué les tests, vous devrez le désactiver afin que les spectateurs puissent voir votre stream.\n\nVoulez-vous continuer ?"
ConfirmExit.Title="Quitter OBS ?"
-ConfirmExit.Text="OBS est actuellement actif. Tous les streams/enregistrements vont être arrêtés. Êtes-vous sûr de vouloir quitter ?"
+ConfirmExit.Text="OBS est actuellement actif. Tous les streams/enregistrements vont être arrêtés. Êtes-vous sûr de vouloir quitter ?"
ConfirmRemove.Title="Confirmer la suppression"
ConfirmRemove.Text="Êtes-vous sûr de vouloir supprimer « $1 » ?"
Output.StartReplayFailed="Impossible de démarrer le tampon de relecture"
Output.StartFailedGeneric="Le démarrage de la sortie a échoué. Veuillez consulter le journal pour plus de détails.\n\nRemarque : si vous utilisez les encodeurs NVENC ou AMD, assurez-vous que vos pilotes vidéo soient à jour."
+
Output.ConnectFail.Title="Échec de la connexion"
Output.ConnectFail.BadPath="Adresse de connexion ou chemin invalide. Veuillez vérifier vos paramètres afin de confirmer leur validité."
Output.ConnectFail.ConnectFailed="Échec de la connexion au serveur"
Output.ConnectFail.Error="Une erreur inattendue s'est produite en essayant de se connecter au serveur. Plus d'informations dans le fichier journal."
Output.ConnectFail.Disconnected="Déconnecté du serveur."
+Output.StreamEncodeError.Title="Erreur d'encodage"
+Output.StreamEncodeError.Msg="L'encodeur a rencontré une erreur pendant la diffusion."
+
Output.RecordFail.Title="Impossible de démarrer l'enregistrement"
-Output.RecordFail.Unsupported="Le format de sortie n'est pas pris en charge ou ne supporte qu'une piste audio. Veuillez vérifier vos paramètres et réessayez."
+Output.RecordFail.Unsupported="Le format de sortie n'est pas pris en charge ou ne supporte qu'une piste audio. Veuillez vérifier vos paramètres et réessayez."
Output.RecordNoSpace.Title="Espace disque insuffisant"
Output.RecordNoSpace.Msg="Il n'y a pas suffisamment d'espace disque pour poursuivre l'enregistrement."
Output.RecordError.Title="Erreur d'enregistrement"
Output.RecordError.Msg="Une erreur non spécifiée s'est produite lors de l'enregistrement."
+Output.RecordError.EncodeErrorMsg="L'encodeur a rencontré une erreur pendant l'enregistrement."
Output.ReplayBuffer.NoHotkey.Title="Aucun raccourci clavier défini !"
Output.ReplayBuffer.NoHotkey.Msg="Aucun raccourci clavier défini pour le tampon de relecture. Veuillez en définir un pour utiliser cette fonction."
Basic.Main.PreviewConextMenu.Enable="Activer l'aperçu"
+Basic.Main.Preview.Disable="Désactiver l'aperçu"
+
ScaleFiltering="Filtre de mise à l'échelle"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinéaire"
Basic.MainMenu.Edit.Transform.FitToScreen="Adapter à l'écran (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Étirer à l'écran (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrer à l'écran"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrer Verticalement"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrer Horizontalement"
Basic.MainMenu.Edit.Order="&Ordonner"
Basic.MainMenu.Edit.Order.MoveUp="Monter d'&un cran"
Basic.MainMenu.Edit.Order.MoveDown="&Descendre d'un cran"
Basic.Settings.Output.Simple.Warn.VideoBitrate="Attention: le débit vidéo de streaming va être fixé à %1, qui est la limite maximale pour le service de streaming actuel. Si vous êtes surs de vouloir aller au delà de %1, activez les options avancées de l'encodeur & décochez \"Imposer les limites de débit du service de streaming\"."
Basic.Settings.Output.Simple.Warn.AudioBitrate="Attention: le débit audio de streaming va être fixé à %1, qui est la limite maximale pour le service de streaming actuel. Si vous êtes surs de vouloir aller au delà de %1, activez les options avancées de l'encodeur & décochez \"Imposer les limites de débit du service de streaming\"."
Basic.Settings.Output.Simple.Warn.Encoder="Attention : enregistrer via un encodeur logiciel avec une qualité autre que celle du stream sollicitera encore plus le CPU si vous streamez et enregistrez simultanément."
-Basic.Settings.Output.Simple.Warn.Lossless="Attention: la qualité sans perte génère des fichiers de taille énorme ! Elle peut utiliser jusqu'à 7 gigaoctets d'espace disque par minute pour de hautes résolutions et fréquences d'image. Cette qualité n'est pas recommandée pour de longs enregistrements à moins d'avoir énormément d'espace disque disponible."
+Basic.Settings.Output.Simple.Warn.Lossless="Attention: la qualité sans perte génère des fichiers de taille énorme ! Elle peut utiliser jusqu'à 7 gigaoctets d'espace disque par minute pour de hautes résolutions et fréquences d'image. Cette qualité n'est pas recommandée pour de longs enregistrements à moins d'avoir énormément d'espace disque disponible."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Êtes-vous certain de vouloir utiliser la qualité sans perte ?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Avertissement de qualité sans perte"
Basic.Settings.Output.Simple.Encoder.Software="Logiciel (x264)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY Année, 4 chiffres\n%YY Année, 2 derniers chiffres (00-99)\n%MM Mois en nombre (01-12)\n%DD Jour du mois(01-31)\n%hh Heure au format 24h (00-23)\n%mm Minute (00-59)\n%ss Seconde (00-61)\n%% Symbole %\n%a Jour de la semaine en abrégé\n%A Jour de la semaine\n%b Mois abrégé\n%B Mois\n%d Jour du mois (01-31)\n%H Heure au format 24h (00-23)\n%I Heure au format 12h (01-12)\n%m Mois en nombre (01-12)\n%M Minute (00-59)\n%p Désignation AM ou PM\n%S Seconde (00-61)\n%y Année, 2 derniers chiffres (00-99)\n%Y Année\n%z Nom ou abbréviation du fuseau horaire/n ou décalage ISO 8601 par rapport à l'UTC\n%Z Nom ou abbréviation du fuseau horaire\n"
+FilenameFormatting.TT="%CCYY Année, 4 chiffres\n%YY Année, 2 derniers chiffres (00-99)\n%MM Mois en nombre (01-12)\n%DD Jour du mois avec zéro d'alignement (01-31)\n%hh Heure au format 24 heures (00-23)\n%mm Minute (00-59)\n%ss Seconde (00-61)\n%% Symbole %\n%a Jour de la semaine en abrégé\n%A Jour de la semaine\n%b Mois en abrégé\n%B Mois\n%d Jour du mois avec zéro d'alignement (01-31)\n%H Heure au format 24 heures (00-23)\n%I Heure au format 12 heures (01-12)\n%m Mois en nombre (01-12)\n%M Minute (00-59)\n%p Désignation AM ou PM\n%S Seconde (00-61)\n%y Année, 2 derniers chiffres (00-99)\n%Y Année\n%z Décalage ISO 8601 par rapport à l'UTC\n%Z Nom ou abréviation du fuseau horaire\n"
Basic.Settings.Video="Vidéo"
Basic.Settings.Video.Adapter="Périphérique vidéo"
Basic.Settings.Video.Numerator="Numérateur"
Basic.Settings.Video.Denominator="Dénominateur"
Basic.Settings.Video.Renderer="Rendu"
-Basic.Settings.Video.InvalidResolution="Valeurs de résolution non-valides. Elles doivent être au format [largeur]x[hauteur] (par exemple 1920x1080)"
+Basic.Settings.Video.InvalidResolution="Valeurs de résolution non-valides. Elles doivent être au format [largeur]x[hauteur] (par exemple 1920x1080)"
Basic.Settings.Video.CurrentlyActive="La sortie vidéo est actuellement active. Veuillez éteindre toutes les sorties avant de modifier vos paramètres vidéo."
Basic.Settings.Video.DisableAero="Désactiver Aero"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Fréquence d'échantillonnage"
Basic.Settings.Audio.Channels="Canaux"
-Basic.Settings.Audio.MeterDecayRate="Vitesse de dégradation audiométrique"
+Basic.Settings.Audio.Meters="Mesures"
+Basic.Settings.Audio.MeterDecayRate="Vitesse de relâche"
Basic.Settings.Audio.MeterDecayRate.Fast="Rapide"
Basic.Settings.Audio.MeterDecayRate.Medium="Moyenne (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lente (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Pour de besoins de diffusion, vérifiez que votre service de diffusion supporte l'intégration et la lecture du son multicanal. Twitch, Facebook 360 Live, Mixer RTMP ou Smashcast sont des exemples de services où le son multicanal est entièrement supporté. Bien que Facebook Live et YouTube Live acceptent l'intégration de son multicanal, Facebook Live transcode en stéréo, et YouTube Live ne lit que deux canaux.\n\nLes filtres audio d'OBS sont compatibles avec le son multicanal, toutefois le support des plugins VST n'est pas garanti."
Basic.Settings.Audio.MultichannelWarning.Title="Activer le son multicanal ?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Êtes vous sûr de vouloir activer le son multicanal ?"
-Basic.Settings.Audio.DesktopDevice="Périphérique Audio du Bureau"
-Basic.Settings.Audio.DesktopDevice2="Périphérique Audio du Bureau 2"
-Basic.Settings.Audio.AuxDevice="Périphérique Audio Micro/Auxiliaire"
-Basic.Settings.Audio.AuxDevice2="Périphérique Audio Micro/Auxiliaire 2"
-Basic.Settings.Audio.AuxDevice3="Périphérique Audio Micro/Auxiliaire 3"
-Basic.Settings.Audio.AuxDevice4="Périphérique Audio Micro/Auxiliaire 4"
+Basic.Settings.Audio.Devices="Périphériques"
+Basic.Settings.Audio.DesktopDevice="Audio du Bureau"
+Basic.Settings.Audio.DesktopDevice2="Audio du Bureau 2"
+Basic.Settings.Audio.AuxDevice="Audio Micro/Auxiliaire"
+Basic.Settings.Audio.AuxDevice2="Audio Micro/Auxiliaire 2"
+Basic.Settings.Audio.AuxDevice3="Audio Micro/Auxiliaire 3"
+Basic.Settings.Audio.AuxDevice4="Audio Micro/Auxiliaire 4"
Basic.Settings.Audio.EnablePushToMute="Activer \"Appuyer-pour-désactiver\" (Push-to-mute)"
Basic.Settings.Audio.PushToMuteDelay="Délai du \"Appuyer-pour-désactiver\" (Push-to-mute)"
Basic.Settings.Audio.EnablePushToTalk="Activer le \"Appuyer-pour-parler\" (Push-to-talk)"
Basic.Settings.Advanced.FormatWarning="Attention : les formats de couleur autres que NV12 sont principalement destinés à l'enregistrement, et ne sont pas recommandés pour le streaming. Le streaming peut pâtir d'une utilisation élevée du CPU due à la conversion de format de couleur."
Basic.Settings.Advanced.Audio.BufferingTime="Temps de mise en mémoire tampon audio"
Basic.Settings.Advanced.Video.ColorFormat="Format de couleur"
-Basic.Settings.Advanced.Video.ColorSpace="Espace de couleur YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Espace de couleurs YUV"
Basic.Settings.Advanced.Video.ColorRange="Gamme de couleurs YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Partielle"
Basic.Settings.Advanced.Video.ColorRange.Full="Complète"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositif de Monitoring audio"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Périphérique de Monitoring Audio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Par défaut"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Désactiver l'atténuation audio de Windows (ducking)"
Basic.Settings.Advanced.StreamDelay="Retard du stream"
Basic.AdvAudio="Propriétés Audio Avancées"
Basic.AdvAudio.Name="Nom"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
Basic.AdvAudio.Mono="Convertir en mono"
Basic.AdvAudio.Balance="Balance"
Basic.AdvAudio.SyncOffset="Décalage de la synchronisation (ms)"
Hotkeys.AppleKeypadDecimal=". (Pavé numérique)"
Hotkeys.AppleKeypadEqual="= (Pavé numérique)"
Hotkeys.MouseButton="Souris %1"
-Hotkeys.Escape="Echap"
+Hotkeys.Escape="Esc"
Mute="Couper l'Audio"
Unmute="Restaurer l'Audio"
NoSources.Title="Aucune source"
NoSources.Text="Il semble que vous n'ayez pas ajouté de source vidéo pour le moment, vous aurez donc un écran noir. Êtes-vous sûr de vouloir continuer ?"
NoSources.Text.AddSource="Vous pouvez à tout moment ajouter des sources en cliquant sur l'icone + en bas du cadre Sources de la fenêtre principale."
+NoSources.Label="Vous n'avez aucune source.\nCliquez sur le bouton \"+\" ci-dessous,\nou cliquez avec le bouton droit ici pour en ajouter une."
ChangeBG="Définir la couleur"
CustomColor="Couleur personnalisée"
ResizeOutputSizeOfSource.Text="Les résolutions de base et de sortie seront redimensionnées à la taille de la source actuelle."
ResizeOutputSizeOfSource.Continue="Voulez-vous continuer ?"
+PreviewTransition="Prévisualiser la transition"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/gd-GB.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/gd-GB.ini
Changed
Output.StartReplayFailed="Cha deach leinn tòiseachadh air bufair na h-ath-chluiche"
Output.StartFailedGeneric="Cha deach leinn tòiseachadh air an às-chur. Thoir sùil air an loga airson barrachd fiosrachaidh.\n\nAn aire: Ma tha thu a’ cleachdadh inneal-còdachaidh NVENC no AMD, dèan cinneach gu bheil na draibhearan video agad cho ùr ’s a ghabhas."
+
Output.ConnectFail.Title="Cha deach leinn ceangal a dhèanamh"
Output.ConnectFail.BadPath="Tha slighe no URL a’ cheangail mì-dhligheach. Thoir sùil air na roghainnean agad feuch a bheil iad mar bu chòir."
Output.ConnectFail.ConnectFailed="Dh’fhàillig an ceangal ris an fhrithealaiche"
Output.ConnectFail.Error="Thachair mearachd ris nach robh dùil nuair a dh’fheuch sinn ri ceangal ris an fhrithealaiche. Tha barrachd fiosrachaidh ann am faidhle an loga."
Output.ConnectFail.Disconnected="Chaidh an ceangal dhan fhrithealaiche a bhriseadh."
+
Output.RecordFail.Title="Cha deach leinn tòiseachadh air a’ chlàradh"
Output.RecordFail.Unsupported="Cha chuirear taic ri fòrmat an às-chuir no cha chuir e taic ri corr is aon traca fuaime. Thoir sùil air na roghainnean agad is feuch ris a-rithist."
Output.RecordNoSpace.Title="Chan eil àite gu leòr air an diosga"
Basic.Main.PreviewConextMenu.Enable="Cuir an ro-shealladh an comas"
+
ScaleFiltering="Criathradh sgèilidh"
ScaleFiltering.Point="Puing"
ScaleFiltering.Bilinear="Dà-loidhneach"
Basic.Settings.Audio="Fuaim"
Basic.Settings.Audio.SampleRate="Reat shampallan"
Basic.Settings.Audio.Channels="Seanailean"
-Basic.Settings.Audio.MeterDecayRate="Reat crìonaidh a’ mheidheadair-fhuaime"
Basic.Settings.Audio.MeterDecayRate.Fast="Luath"
Basic.Settings.Audio.MeterDecayRate.Medium="Meadhanach (PPM seòrsa I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Slaodach (PPM seòrsa II)"
Basic.Settings.Audio.MultichannelWarning="Ma tha thu a’ dèanamh sruthadh, dearbh gun doir an t-seirbheis sruthaidh agad taic an dà chuid ri ion-chur is cluich fuaime cuairteachaidh. Mar eisimpleir, cuiridh Twitch, Facebook 360 Live, Mixer RTMP is Smashcast làn-taic ri fuaim cuairteachaidh. Ged a ghabhas Facebook Live is youTube Live ri sruthan fuaime cuairteachaidh, nì Facebook Live measgachadh sìos stereo dheth agus cha chluich YouTube live ach dà sheanail.\n\nTha criathragan fuaime OBS co-chòrdail ri fuaim cuairteachaidh ged nach doir sinn barantas gun obraich plugain VST."
Basic.Settings.Audio.MultichannelWarning.Title="A bheil thu airson fuaim cuairteachaidh a chur an comas?"
Basic.Settings.Audio.MultichannelWarning.Confirm="A bheil thu cinnteach gu bheil thu airson fuaim cuairteachaidh a chur an comas?"
-Basic.Settings.Audio.DesktopDevice="Uidheam fuaime an deasg"
-Basic.Settings.Audio.DesktopDevice2="Uidheam fuaime an deasg 2"
-Basic.Settings.Audio.AuxDevice="Uidheam fuaime micreofoin/taice"
-Basic.Settings.Audio.AuxDevice2="Uidheam fuaime micreofoin/taice 2"
-Basic.Settings.Audio.AuxDevice3="Uidheam fuaime micreofoin/taice 3"
-Basic.Settings.Audio.AuxDevice4="Uidheam fuaime micreofoin/taice 4"
Basic.Settings.Audio.EnablePushToMute="Cuir an comas brùth-airson-mùchadh"
Basic.Settings.Audio.PushToMuteDelay="Dàil air brùth-airson-mùchadh"
Basic.Settings.Audio.EnablePushToTalk="Cuir an comas brùth-airson-bruidhinn"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Àbhaisteach"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Nas ìsle na àbhaisteach"
Basic.Settings.Advanced.General.ProcessPriority.Idle="’Na tàmh"
-Basic.Settings.Advanced.FormatWarning="Rabhadh: Chaidh fòrmatan datha seach NV12 a dhealbhachadh a chum clàraidh agus cha molamaid airson sruthadh iad. Cleachdaidh an sruthadh barrachd dhen CPU ri linn iompachadh air fòrmat nan dathan."
+Basic.Settings.Advanced.FormatWarning="Rabhadh: Chaidh fòrmatan datha seach NV12 a dhealbhachadh a chum clàraidh agus cha molamaid airson sruthadh iad. Cleachdaidh an sruthadh barrachd dhen CPU ri linn iompachadh air fòrmat nan dathan."
Basic.Settings.Advanced.Audio.BufferingTime="Ùine bufair na fuaime"
Basic.Settings.Advanced.Video.ColorFormat="Fòrmat nan dathan"
-Basic.Settings.Advanced.Video.ColorSpace="Spàs dhathan YUV"
-Basic.Settings.Advanced.Video.ColorRange="Rainse dhathan YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Leth-phàirteach"
Basic.Settings.Advanced.Video.ColorRange.Full="Làn"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Uidheam sgrùdadh fuaime"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Tùsail"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Cuir à comas tumadh fuaime Windows"
Basic.Settings.Advanced.StreamDelay="Dàil an t-sruthaidh"
Basic.AdvAudio="Roghainnean adhartach na fuaime"
Basic.AdvAudio.Name="Ainm"
-Basic.AdvAudio.Volume="Àirde (%)"
Basic.AdvAudio.Mono="Measgaich sìos gu mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Frìth-àireamh an t-sioncronachaidh (ms)"
ResizeOutputSizeOfSource.Text="Thèid meud na dùmhlachd-bhreacaidh bunasaich ’s tè an às-chuir a shuidheachadh air meud an tùis làithrich."
ResizeOutputSizeOfSource.Continue="A bheil thu airson leantainn air adhart?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/gl-ES.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/gl-ES.ini
Changed
ConfirmRemove.Text="Tes a certeza de querer eliminar '$1'?"
+
Output.ConnectFail.Title="Erro ao se conectar"
Output.ConnectFail.BadPath="Camiño ou URL de conexión non válidos. Por favor, comproba a configuración para confirmar de que son correctos."
Output.ConnectFail.ConnectFailed="Erro ao conectar co servidor"
Output.ConnectFail.Error="Produciuse un erro inesperado ao tentar conectar co servidor. Máis información no ficheiro de rexistro."
Output.ConnectFail.Disconnected="Desconectado do servidor."
+
Output.RecordFail.Title="Erro ao iniciar a gravación"
Output.BadPath.Title="Camiño do ficheiro incorrecto"
Remux.ExitUnfinished="A conversión non rematou, detela agora podería provocar que o ficheiro final fose inutilizable.\nTes a certeza de querer deter a conversión?"
UpdateAvailable="Nova actualización dispoñible"
-UpdateAvailable.Text="Versión %1.%2.%3 xa dispoñible. <a href='%4'>Preme aquí para descargala</a>"
+UpdateAvailable.Text="Versión %1.%2.%3 xa dispoñible. <a href='%4'>Preme aquí para descargala</a>"
Basic.DesktopDevice1="Audio do escritorio"
Basic.DesktopDevice2="Audio do escritorio 2"
+
Basic.Main.AddSceneDlg.Title="Engadir escena"
Basic.Main.AddSceneDlg.Text="Por favor, insire un nome para a escena"
Basic.Settings.Video.Numerator="Numerador"
Basic.Settings.Video.Denominator="Denominador"
Basic.Settings.Video.Renderer="Procesador"
-Basic.Settings.Video.InvalidResolution="Valor da resolución non válido. Debe ser [width] x [height] (por exemplo, 1920 x 1080)"
-Basic.Settings.Video.CurrentlyActive="A saída de vídeo está actualmente activa. Por favor, apaga calquera saída para cambiar a configuración de vídeo."
+Basic.Settings.Video.InvalidResolution="Valor da resolución non válido. Debe ser [width] x [height] (por exemplo, 1920 x 1080)"
+Basic.Settings.Video.CurrentlyActive="A saída de vídeo está actualmente activa. Por favor, apaga calquera saída para cambiar a configuración de vídeo."
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (máis rápido, pero borroso de se escalar a imaxe)"
Basic.Settings.Video.DownscaleFilter.Bicubic="Bicúbico (escalamento fino, 16 mostras)"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Intervalo da mostra"
Basic.Settings.Audio.Channels="Canles"
-Basic.Settings.Audio.DesktopDevice="Dispositivo de audio de escritorio"
-Basic.Settings.Audio.DesktopDevice2="Dispositivo de audio de escritorio 2"
-Basic.Settings.Audio.AuxDevice="Dispositivo de audio mic./auxiliar"
-Basic.Settings.Audio.AuxDevice2="Dispositivo de audio mic./auxiliar 2"
-Basic.Settings.Audio.AuxDevice3="Dispositivo de audio mic./auxiliar 3"
Basic.Settings.Advanced="Avanzado"
Basic.Settings.Advanced.Audio.BufferingTime="Tempo do búfer de audio"
Basic.Settings.Advanced.Video.ColorFormat="Formato da cor"
-Basic.Settings.Advanced.Video.ColorSpace="Espazo de cor YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gama de cor YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
Basic.AdvAudio="Propiedades de audio avanzadas"
Basic.AdvAudio.Name="Nome"
-Basic.AdvAudio.Volume="Volume (%)"
Basic.AdvAudio.Mono="Remesturar a mono"
Basic.AdvAudio.SyncOffset="Sincronización Offset (ms)"
Basic.AdvAudio.AudioTracks="Pistas"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/he-IL.ini
Changed
Enable="אפשר"
DisableOSXVSync="בטל סנכרון אנכי OSX"
ResetOSXVSyncOnExit="איפוס סנכרון אנכי OSX ביציאה"
-HighResourceUsage="קידוד עמוס מידי! שקול להנמיך הגדרות וידאו או שימוש בקידוד מהיר יותר."
+HighResourceUsage="קידוד עמוס מידי! שקול להנמיך הגדרות וידאו או שימוש בקידוד מהיר יותר."
Transition="מעבר"
QuickTransitions="מעברים מהירים"
Left="שמאל"
Group="קבוצה"
AlreadyRunning.Title="OBS פועל כבר"
-AlreadyRunning.Text="OBS פועל כבר! אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש. אנא בדוק אם קיים מופע הגדר ממוזער במגש המערכת."
+AlreadyRunning.Text="OBS פועל כבר! אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש. אנא בדוק אם קיים מופע הגדר ממוזער במגש המערכת."
AlreadyRunning.LaunchAnyway="הפעל בכל מקרה"
BandwidthTest.Region.Asia="אסיה"
BandwidthTest.Region.Other="אחר"
-Basic.FirstStartup.RunWizard="האם ברצונך להפעיל את אשף קביעת התצורה האוטומטית? באפשרותך להגדיר את ההגדרות באופן ידני על ידי לחיצה על הלחצן ' קביעות ' בחלון הראשי."
+Basic.FirstStartup.RunWizard="האם ברצונך להפעיל את אשף קביעת התצורה האוטומטית? באפשרותך להגדיר את ההגדרות באופן ידני על ידי לחיצה על הלחצן ' קביעות ' בחלון הראשי."
Basic.FirstStartup.RunWizard.NoClicked="אם תשנה את דעתך, באפשרותך להפעיל שוב את אשף קביעת התצורה האוטומטית בכל עת מתפריט הכלים."
Basic.AutoConfig="אשף תצורה אוטומטית"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="השתמש בנוכחי (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 או 30, אבל העדף 60 כאשר אפשרי"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 או 30, אבל העדף רזולוציה גבוהה"
-Basic.AutoConfig.VideoPage.CanvasExplanation="הערה: רזוליית הבד (בסיס) הוא לא בהכרח זהה לרזולוצי ההזרמה או הקלטה. ייתכן שרזולוציית הזרמה/הקלטה תוקטן בכדי להפחית את דרישות קצב הנתונים או המשאבים."
+Basic.AutoConfig.VideoPage.CanvasExplanation="הערה: רזוליית הבד (בסיס) הוא לא בהכרח זהה לרזולוצי ההזרמה או הקלטה. ייתכן שרזולוציית הזרמה/הקלטה תוקטן בכדי להפחית את דרישות קצב הנתונים או המשאבים."
Basic.AutoConfig.StreamPage="מידע על הזרם"
Basic.AutoConfig.StreamPage.SubTitle="אנא הזן את פרטי הזרם"
Basic.AutoConfig.StreamPage.ConnectAccount="התחבר לחשבון (אופציונלי)"
Basic.AutoConfig.StreamPage.DisconnectAccount="נתק את חשבון"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="נתק את חשבון?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="שינוי זה יחול באופן מיידי. האם אתה בטוח שברצונך לנתק את החשבון שלך?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="שינוי זה יחול באופן מיידי. האם אתה בטוח שברצונך לנתק את החשבון שלך?"
Basic.AutoConfig.StreamPage.UseStreamKey="השתמש במפתח הזרמת נתונים"
Basic.AutoConfig.StreamPage.Service="שירות"
Basic.AutoConfig.StreamPage.Service.ShowAll="הצג הכל..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="מקודד זרימה"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="מקודד הקלטה"
Basic.AutoConfig.TestPage.Result.Header="התוכנית קבעה כי אלה ההגדרות המיטביות עבורך:"
-Basic.AutoConfig.TestPage.Result.Footer="כדי להשתמש בהגדרות אלה, לחץ על החל הגדרות. כדי להגדיר מחדש את האשף ולנסות שוב, לחץ על אחורה. להגדיר ידנית את הגדרות, לחץ על ביטול ולאחר מכן פתח את הגדרות."
+Basic.AutoConfig.TestPage.Result.Footer="כדי להשתמש בהגדרות אלה, לחץ על החל הגדרות. כדי להגדיר מחדש את האשף ולנסות שוב, לחץ על אחורה. להגדיר ידנית את הגדרות, לחץ על ביטול ולאחר מכן פתח את הגדרות."
Basic.Stats="סטטיסטיקות"
Basic.Stats.CPUUsage="שימוש במעבד"
Updater.NoUpdatesAvailable.Text="אין עדכונים זמינים כעת"
Updater.FailedToLaunch="נכשלה הפעלת העידכון"
Updater.GameCaptureActive.Title="לכידת משחק פעיל"
-Updater.GameCaptureActive.Text="לכידת משחק נמצאת כעת בשימוש. בבקשה סגור את המשחקים/תוכנות שנמצאים בלכידה (או הפעל מחדש את ווינדוס) ונסה שינת."
QuickTransitions.SwapScenes="החלף סצינות תצוגה מקדימה/פלט לאחר המעבר"
QuickTransitions.SwapScenesTT="החלף הסצינות של התצוגה המקדימה ושל הפלט לאחר המעבר (באם הסצינה המקורית של הפלט עדיין קיימת). \n פעולה זו לא תבטל כל שינוי שייתכן ובוצע לסצינה המקורית של הפלט."
ConfirmExit.Title="יציאה מ-OBS?"
-ConfirmExit.Text="תוכנת OBS פעילה כעת. כל הזרמת נתונים/הקלטות ייסגרו. האם אתה בטוח שאתה רוצה לצאת?"
+ConfirmExit.Text="תוכנת OBS פעילה כעת. כל הזרמת נתונים/הקלטות ייסגרו. האם אתה בטוח שאתה רוצה לצאת?"
ConfirmRemove.Title="אשר הסרה"
ConfirmRemove.Text="האם אתה בטוח שברצונך להסיר את '$1'?"
Output.StartReplayFailed="נכשלה הפעלת מאגר החוזר"
Output.StartFailedGeneric="הפלט נכשל. בבקשה בדוק את הרישומים עבור. \n\nNote: אם אתה משתמש בNVNEC או AMD מקודדים, הקפד שמנהלי ההתקן של הכרטיס מסך מעודכנים."
+
Output.ConnectFail.Title="ההתחברות נכשלה"
-Output.ConnectFail.BadPath="URL לא חוקי של נתיב או חיבור. נא בדוק את ההגדרות שלך כדי לוודא כי הם נכונים."
+Output.ConnectFail.BadPath="URL לא חוקי של נתיב או חיבור. נא בדוק את ההגדרות שלך כדי לוודא כי הם נכונים."
Output.ConnectFail.ConnectFailed="ההתחברות לשרת נכשלה"
Output.ConnectFail.InvalidStream="לא ניתן להתחבר לערוץ שצויין או למפתח זרם הנתונים, נא בדוק שנית את מפתח זרם הנתונים. אם הוא נכון, ככל הנראה יש בעיה בהתחברות לשרת."
-Output.ConnectFail.Error="אירעה שגיאה בלתי צפויה בעת ניסיון להתחבר לשרת. מידע נוסף בקובץ יומן הרישום."
+Output.ConnectFail.Error="אירעה שגיאה בלתי צפויה בעת ניסיון להתחבר לשרת. מידע נוסף בקובץ יומן הרישום."
Output.ConnectFail.Disconnected="התנתקת מהשרת."
+
Output.RecordFail.Title="התחלת ההקלטה נכשלה"
-Output.RecordFail.Unsupported="תבנית הפלט לא נתמכת או לא תומכת ביותר מרצועת שמע אחת. נא בדוק את ההגדרות ונסה שוב."
+Output.RecordFail.Unsupported="תבנית הפלט לא נתמכת או לא תומכת ביותר מרצועת שמע אחת. נא בדוק את ההגדרות ונסה שוב."
Output.RecordNoSpace.Title="אין די שטח דיסק"
Output.RecordNoSpace.Msg="אין די שטח דיסק כדי להמשיך הקלטה."
Output.RecordError.Title="שגיאה הקלטה"
Output.ReplayBuffer.NoHotkey.Msg="אין hotkey שמור למאגר החוזר. בבקשה הגדר את \"שמור\" hotkey לשימוש עבור שמירת מאגר חוזר להקלטות."
Output.BadPath.Title="נתיב קובץ לא תקין"
-Output.BadPath.Text="נתיב פלט הקובץ שהוגדר אינו חוקי. נא בדוק את הגדרות כדי לוודא שנתיב קובץ תקני נקבע."
+Output.BadPath.Text="נתיב פלט הקובץ שהוגדר אינו חוקי. נא בדוק את הגדרות כדי לוודא שנתיב קובץ תקני נקבע."
LogReturnDialog="עידכון יומן הצליח"
LogReturnDialog.CopyURL="העתק קישור"
Remux.ExitUnfinished="ההמרה לא הסתיימה, עצירה עכשיו עלולה להפוך את קובץ היעד לא שמיש. \n אתה בטוח שאתה רוצה לעצור את ההמרה?"
UpdateAvailable="עידכון חדש זמין"
-UpdateAvailable.Text="גירסה %1.%2.%3 זמין כעת. <a href='%4'> לחץ כאן כדי להוריד</a>"
+UpdateAvailable.Text="גירסה %1.%2.%3 זמין כעת. <a href='%4'> לחץ כאן כדי להוריד</a>"
Basic.DesktopDevice1="אודיו שולחן עבודה"
Basic.DesktopDevice2="אודיו שולחן עבודה 2"
Basic.Main.PreviewConextMenu.Enable="אפשר תצוגה מקדימה"
+
ScaleFiltering="מסנן קנה מידה"
ScaleFiltering.Point="נקודה"
ScaleFiltering.Bilinear="ביליניארי"
Basic.PropertiesWindow.SelectColor="בחר צבע"
Basic.PropertiesWindow.SelectFont="בחר גופן"
Basic.PropertiesWindow.ConfirmTitle="הגדרות שונו"
-Basic.PropertiesWindow.Confirm="יש שינויים שלא נשמרו. האם ברצונך לשמור אותם?"
+Basic.PropertiesWindow.Confirm="יש שינויים שלא נשמרו. האם ברצונך לשמור אותם?"
Basic.PropertiesWindow.NoProperties="אין מאפיינים זמינים"
Basic.PropertiesWindow.AddFiles="הוסף קבצים"
Basic.PropertiesWindow.AddDir="הוסף ספריה"
Basic.Settings.ProgramRestart="יש להפעיל מחדש את התוכנה בכדי שהגדרות האלה ייכנסו לתוקף."
Basic.Settings.ConfirmTitle="אשר את השינויים"
-Basic.Settings.Confirm="קיימים שינויים שלא נשמרו. האם לשמור שינויים?"
+Basic.Settings.Confirm="קיימים שינויים שלא נשמרו. האם לשמור שינויים?"
Basic.Settings.General="כללי"
Basic.Settings.General.Theme="ערכת עיצוב"
Basic.Settings.Output.ReplayBuffer.SecondsMax="זמן החוזר המרבי (בשניות)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="זיכרון מרבי (מגה-בתים)"
Basic.Settings.Output.ReplayBuffer.Estimate="הערך שימוש בזיכרון: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="אין אפשרות להעריך את השימוש בזיכרון. נא הגדר מגבלת זיכרון מירבי."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="אין אפשרות להעריך את השימוש בזיכרון. נא הגדר מגבלת זיכרון מירבי."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(הערה: הקפד להגדיר hotkey עבור מאגר החוזר במקטע מקשי הקיצור)"
Basic.Settings.Output.ReplayBuffer.Prefix="קידומת שם קובץ מאגר החוזר"
Basic.Settings.Output.ReplayBuffer.Suffix="סיומת"
Basic.Settings.Output.Simple.Warn.VideoBitrate="אזהרה: קצב הזרמת הוידאו יוגדר ל %1, כאשר זה הגבול העליון עבור שירות הזרמת הנתונים הנוכחי. אם אתה בטוח שאתה רוצה לעבור מעל %1, אפשר את אפשרויות קידוד מתקדמות ובטל סימון \"אכוף הגבלות קצב הזרמת נתונים\"."
Basic.Settings.Output.Simple.Warn.AudioBitrate="אזהרה: קצב הזרמת האודיו יוגדר ל %1, כאשר זה הגבול העליון עבור שירות הזרמת הנתונים הנוכחי. אם אתה בטוח שאתה רוצה לעבור מעל %1, אפשר את אפשרויות קידוד מתקדמות ובטל סימון \"אכוף הגבלות קצב הזרמת נתונים\"."
Basic.Settings.Output.Simple.Warn.Encoder="אזהרה: הקלטה עם מקודד תוכנה באיכות שונה מאשר זרם הנתונים ידרוש שימוש במשאבי מעבד נוספים אם מתבצעת הקלטה וזרם נתונים במקביל."
-Basic.Settings.Output.Simple.Warn.Lossless="אזהרה: איכות ללא אובדן יוצר גדלי קבצים גדולים מאוד! איכות ללא אובדן נתונים יכול להשתמש ביותר מ-7 ג'יגה-בתים של שטח דיסק לדקה ברזולוציות גבוהות ופריימים. שימוש באיכות ללא אובדן אינו מומלץ להקלטות ארוכות אלא אם קיים שטח דיסק פנוי גדול מאד."
+Basic.Settings.Output.Simple.Warn.Lossless="אזהרה: איכות ללא אובדן יוצר גדלי קבצים גדולים מאוד! איכות ללא אובדן נתונים יכול להשתמש ביותר מ-7 ג'יגה-בתים של שטח דיסק לדקה ברזולוציות גבוהות ופריימים. שימוש באיכות ללא אובדן אינו מומלץ להקלטות ארוכות אלא אם קיים שטח דיסק פנוי גדול מאד."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="האם אתה בטוח שברצונך להשתמש באיכות ללא אובדן איכות?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="אזהרה איכות ללא אובדן איכות!"
Basic.Settings.Output.Simple.Encoder.Software="תוכנה (x264)"
Basic.Settings.Video.Denominator="מכנה"
Basic.Settings.Video.Renderer="מעבד"
Basic.Settings.Video.InvalidResolution="ערך רזולוציה לא חוקי. חייב להיות [width]x[height] (לדוגמה 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="פלט וידאו פעיל כעת. נא כבה את כל הפלטים בכדי לשנות הגדרות וידאו."
+Basic.Settings.Video.CurrentlyActive="פלט וידאו פעיל כעת. נא כבה את כל הפלטים בכדי לשנות הגדרות וידאו."
Basic.Settings.Video.DisableAero="בטל את ממשק Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="דו-ליניארי (מהיר ביותר, מטושטש בשינוי קנה מידה)"
Basic.Settings.Audio="אודיו"
Basic.Settings.Audio.SampleRate="קצב דגימה"
Basic.Settings.Audio.Channels="ערוצים"
-Basic.Settings.Audio.MeterDecayRate="קצב דעיכה ממד שמע"
Basic.Settings.Audio.MeterDecayRate.Fast="מהיר"
Basic.Settings.Audio.MeterDecayRate.Medium="בינוני (סוג I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="איטי (סוג II PPM)"
Basic.Settings.Audio.MultichannelWarning="אם הזרימה, בדוק את הזרמת השירות תומך בסראונד סאונד להבלע ואת היקפי הסראונד פלייבק. טוויץ',פייסבוק,360 Liev, מיקסר RTMP, Smashcast דוגמאות לאיפה שסראונד סאונד הוא נתמך. למרות פייסבוק לייב ויוטיוב לייב שניהם מאפשרים סראונד להבלע, פייסבוק לייב משנה לסטריאו ויוטיוב לייב מפעיל בשני ערוצים. \n\nOBS Studio מסנן עם הסראונד סאונד, למרות תמיכת תוסף VST אינו מאובטח."
Basic.Settings.Audio.MultichannelWarning.Title="האם להפעיל שמע צליל היקפי?"
Basic.Settings.Audio.MultichannelWarning.Confirm="אתה בטוח שאתה רוצה לאפשר קול שמע מקיף?"
-Basic.Settings.Audio.DesktopDevice="התקן שמע בשולחן עבודה"
-Basic.Settings.Audio.DesktopDevice2="התקן שמע בשולחן עבודה 2"
-Basic.Settings.Audio.AuxDevice="התקן שמע מיקרופון/עזר"
-Basic.Settings.Audio.AuxDevice2="התקן שמע מיקרופון/עזר 2"
-Basic.Settings.Audio.AuxDevice3="התקן שמע מיקרופון/עזר 3"
Basic.Settings.Audio.EnablePushToMute="אפשר לחץ-להשתקה"
Basic.Settings.Audio.PushToMuteDelay="השהיית לחץ-להשתקה"
Basic.Settings.Audio.EnablePushToTalk="הפעל לחץ-כדי-לדבר"
Basic.Settings.Advanced.General.ProcessPriority.Normal="רגיל"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="מתחת לעדיפות רגילה"
Basic.Settings.Advanced.General.ProcessPriority.Idle="לא פעיל"
-Basic.Settings.Advanced.FormatWarning="אזהרה: תבניות צבע שונות מ-NV12 נועדו בעיקר עבור הקלטה, והם אינם מומלצות בעת הזרמת נתונים. הזרמת נתונים עלולה לגרום למשאבי עיבוד מוגברים כתוצאה מהמרת תבנית צבע."
+Basic.Settings.Advanced.FormatWarning="אזהרה: תבניות צבע שונות מ-NV12 נועדו בעיקר עבור הקלטה, והם אינם מומלצות בעת הזרמת נתונים. הזרמת נתונים עלולה לגרום למשאבי עיבוד מוגברים כתוצאה מהמרת תבנית צבע."
Basic.Settings.Advanced.Audio.BufferingTime="זמן אוגר שמע"
Basic.Settings.Advanced.Video.ColorFormat="תבנית צבע"
-Basic.Settings.Advanced.Video.ColorSpace="מרחב צבע YUV"
-Basic.Settings.Advanced.Video.ColorRange="טווח צבעים YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="חלקי"
Basic.Settings.Advanced.Video.ColorRange.Full="מלא"
-Basic.Settings.Advanced.Audio.MonitoringDevice="מכשיר ניטור אודיו"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="ברירת מחדל"
Basic.Settings.Advanced.Audio.DisableAudioDucking="בטל צימוד השמע של Windows"
Basic.Settings.Advanced.StreamDelay="השהיית זרם נתונים"
Basic.AdvAudio="מאפייני קול מתקדמים"
Basic.AdvAudio.Name="שם"
-Basic.AdvAudio.Volume="עוצמת קול (%)"
Basic.AdvAudio.Mono="הפוך למונו"
Basic.AdvAudio.Balance="איזון"
Basic.AdvAudio.SyncOffset="היסט סינכרון (מילישניות)"
Basic.SystemTray.Show="הצג"
Basic.SystemTray.Hide="הסתר"
-Basic.SystemTray.Message.Reconnecting="ההתקשרות נותקה. התחברות מחדש..."
+Basic.SystemTray.Message.Reconnecting="ההתקשרות נותקה. התחברות מחדש..."
Hotkeys.Insert="הוסף"
Hotkeys.Delete="מחק"
ResizeOutputSizeOfSource.Continue="האם אתה רוצה להמשיך?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/hi-IN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/hi-IN.ini
Changed
+
+
+
+
obs-studio-23.1.0.tar.xz/UI/data/locale/hr-HR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/hr-HR.ini
Changed
Group="Grupa"
AlreadyRunning.Title="OBS je već pokrenut"
-AlreadyRunning.Text="OBS je već pokrenut! Osim ako si mislio da biste to učinili, isključite sve postojeće pojave OBS prije nego što pokušate pokrenuti novu instancu. Ako imate OBS postavljen na smanjivanje u traku sustava, provjerite ako to još uvijek radi tamo."
+AlreadyRunning.Text="OBS je već pokrenut! Osim ako si mislio da biste to učinili, isključite sve postojeće pojave OBS prije nego što pokušate pokrenuti novu instancu. Ako imate OBS postavljen na smanjivanje u traku sustava, provjerite ako to još uvijek radi tamo."
AlreadyRunning.LaunchAnyway="Svejedno pokreni"
BandwidthTest.Region.Asia="Azija"
BandwidthTest.Region.Other="Ostalo"
-Basic.FirstStartup.RunWizard="Želite li pokrenuti čarobnjak za automatsku konfiguraciju? Možete također ručno konfigurirati postavke tako da kliknete gumb Postavke u glavnom prozoru."
+Basic.FirstStartup.RunWizard="Želite li pokrenuti čarobnjak za automatsku konfiguraciju? Možete također ručno konfigurirati postavke tako da kliknete gumb Postavke u glavnom prozoru."
Basic.FirstStartup.RunWizard.NoClicked="Ako se predomislite, možete pokrenuti čarobnjaka za automatsku konfiguraciju bilo kada opet u Alat meni."
Basic.AutoConfig="Čarobnjak za automatske konfiguraciju"
ConfirmRemove.TextMultiple="Jeste li sigurni da želite ukloniti %1 stavke?"
+
Output.ConnectFail.Title="Neuspješno povezivanje"
Output.ConnectFail.BadPath="Neispravna putanja ili URL veze. Provjerite jesu li Vam postavke ispravne."
Output.ConnectFail.ConnectFailed="Neuspješno povezivanje s poslužiteljem"
Output.ConnectFail.Error="Neočekivana greška u povezivanju s poslužiteljem. Više informacija nalazi se u zapisniku."
Output.ConnectFail.Disconnected="Prekinuta veza s poslužiteljem."
+
Output.RecordFail.Title="Neuspješno započinjanje snimanja"
Output.RecordFail.Unsupported="Izlazni format ili nije podržan ili ne podržava više od jedne zvučne trake. Provjerite postavke i pokušajte ponovno."
Output.RecordNoSpace.Title="Nedovoljno prostora na disku"
Remux.ExitUnfinished="Remux nije završen, ako sada zaustavite proces datoteka može biti neupotrebljiva.\nJeste li sigurni da želite zaustaviti remux?"
UpdateAvailable="Dostupno je novo ažuriranje"
-UpdateAvailable.Text="Verzija %1.%2.%3 je dostupna. <a href='%4'>Kliknite ovdje da ju preuzmete</a>"
+UpdateAvailable.Text="Verzija %1.%2.%3 je dostupna. <a href='%4'>Kliknite ovdje da ju preuzmete</a>"
Basic.DesktopDevice1="Zvuk s računala"
Basic.DesktopDevice2="Zvuk s računala 2"
Basic.Main.PreviewConextMenu.Enable="Omogući pregled"
+
ScaleFiltering="Filter uvećanja"
ScaleFiltering.Point="Točka"
ScaleFiltering.Bilinear="Bilinearno"
Basic.Settings.ProgramRestart="Program se mora ponovno pokrenuti da bi ova postavka stupila na snagu."
Basic.Settings.ConfirmTitle="Potvrdite promjene"
-Basic.Settings.Confirm="Niste spremili sve promjene. Spremiti?"
+Basic.Settings.Confirm="Niste spremili sve promjene. Spremiti?"
Basic.Settings.General="Općenito"
Basic.Settings.General.Theme="Tema"
Basic.Settings.Audio="Zvuk"
Basic.Settings.Audio.SampleRate="Protok"
Basic.Settings.Audio.Channels="Kanali"
-Basic.Settings.Audio.DesktopDevice="Zvuk sa računara"
-Basic.Settings.Audio.DesktopDevice2="Zvuk sa računara 2"
-Basic.Settings.Audio.AuxDevice="Mikrofon/Ulaz"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Ulaz 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Ulaz 3"
Basic.Settings.Audio.EnablePushToMute="Omogući stisni-za-mutiranje"
Basic.Settings.Audio.PushToMuteDelay="Stisni-za-mutiranje pauza"
Basic.Settings.Audio.EnablePushToTalk="Omogući Stisni-za-govor"
Basic.Settings.Advanced.FormatWarning="Upozorenje: Formati boja različiti od NV12 su prvenstveno namenjeni za snimanje i nisu preporučeni za strimovanje. Strimovanje može prouzrokovati povišeno zauzeće procesora zbog pretvaranja formata boja."
Basic.Settings.Advanced.Audio.BufferingTime="Vreme baferovanja zvuka"
Basic.Settings.Advanced.Video.ColorFormat="Format boja"
-Basic.Settings.Advanced.Video.ColorSpace="YUV prostor boja"
-Basic.Settings.Advanced.Video.ColorRange="YUV raspon boja"
Basic.Settings.Advanced.Video.ColorRange.Partial="Delimično"
Basic.Settings.Advanced.Video.ColorRange.Full="Potpuno"
Basic.Settings.Advanced.StreamDelay="Odlaganje strima"
Basic.AdvAudio="Napredna podešavanja zvuka"
Basic.AdvAudio.Name="Ime"
-Basic.AdvAudio.Volume="Glasnoća (%)"
Basic.AdvAudio.Mono="Spoji u mono"
Basic.AdvAudio.SyncOffset="Razlika u sinhronizaciji (ms)"
Basic.AdvAudio.AudioTracks="Izvori"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/hu-HU.ini
Changed
VerticalLayout="Függőleges elrendezés"
Group="Csoport"
DoNotShowAgain="Ne jelenjen meg többet"
+Default="(Alapértelmezett)"
+Calculating="Számítás..."
AlreadyRunning.Title="Az OBS már fut"
AlreadyRunning.Text="Az OBS már fut! Ha nem teljesen biztos benne mit tesz, akkor állítsa le az összes már futó OBS programot. Ha a programot úgy állította be, hogy rendszertálcára minimalizálódjon, akkor ellenőrizze, hogy ott megtalálható e."
Auth.StreamInfo="Stream információ"
TwitchAuth.Stats="Twitch statisztika"
TwitchAuth.Feed="Twitch Tevékenységnapló"
+TwitchAuth.TwoFactorFail.Title="Nem lehetett a stream kulcsot lekérni"
+TwitchAuth.TwoFactorFail.Text="Az OBS nem tudott kapcsolódni a Twitch felhasználódhoz. Kérem ellenőrizze, hogy a kétfaktoros authentikációja be van állítva a <a href='https://www.twitch.tv/settings/security'>Twitch biztonsági beállítások</a> között, hiszen az szükséges az adáshoz."
Copy.Filters="Szűrők másolása"
Paste.Filters="Szűrők beillesztése"
Basic.Stats.DroppedFrames="Képkockák ejtve (Hálózat)"
Basic.Stats.MegabytesSent="Összes kimeneti adat"
Basic.Stats.Bitrate="Bitsebesség"
+Basic.Stats.DiskFullIn="Megtelt a lemez (Körülbelül...)"
ResetUIWarning.Title="Biztosan alaphelyzetbe állítja a felületet?"
ResetUIWarning.Text="Az UI visszaállítása lefedi a további dokkokat. Önnek fel kell fednie ezeket a dokkokat a nézet menüből, amennyiben láthatóvá tenné ezeket.\n\nBiztos benne, hogy visszaállítja az UI-t?"
Updater.NoUpdatesAvailable.Text="Jelenleg nincs elérhető frissítés"
Updater.FailedToLaunch="Frissítő alkalmazás indítása sikertelen"
Updater.GameCaptureActive.Title="Játék felvétel aktív"
-Updater.GameCaptureActive.Text="Játékfelvétel hook könyvtár jelenleg használatban. Zárjon be minden játékot/programot, amelyet felvesz (vagy indítsa újra a számítógépét) és próbálkozzon újra."
+Updater.GameCaptureActive.Text="Játék felvétel kapcsolódó könyvtár még használatban van. Kérem zárjon be valamennyi játékot/programot, amely felvétel alatt áll (vagy indítsa újra a Windowst) és próbálja újra."
QuickTransitions.SwapScenes="Előnézeti/Kimeneti Jelenetek cseréje átmenet után"
QuickTransitions.SwapScenesTT="Az előnézet és a kimeneti jelenet cseréje átmenet után (ha a kimenet eredeti jelenete még létezik).\nEz nincs kihatással a kimenet eredeti jelenetére."
Output.StartReplayFailed="Visszajátszás puffer indítása sikertelen"
Output.StartFailedGeneric="Kimenet indítása sikertelen. Kérem ellenőrizze az eseménynaplóban a részleteket.\n\nMegjegyzés: NVENC vagy AMD kódoló használata esetén, győződjön meg róla, hogy az illesztőprogramok naprakészek!"
+
Output.ConnectFail.Title="Csatlakozás sikertelen"
Output.ConnectFail.BadPath="Érvénytelen elérési út vagy kapcsolati URL cím. Kérem, ellenőrizze a beállításokat és győződjön meg az érvényességükről."
Output.ConnectFail.ConnectFailed="Nem sikerült kapcsolódni a szerverhez"
Output.ConnectFail.Error="A szerverhez való kapcsolódás során váratlan hiba történt. További információért tekintse meg a naplófájlt."
Output.ConnectFail.Disconnected="Kiszolgálóról lecsatlakoztatva."
+Output.StreamEncodeError.Title="Kódolási hiba"
+Output.StreamEncodeError.Msg="Kódolási hiba történt közvetítés közben."
+
Output.RecordFail.Title="Felvétel indítása sikertelen"
Output.RecordFail.Unsupported="A kimeneti formátum vagy nem támogatott, vagy nem támogatja az egynél több hangsávot. Kérem, ellenőrizze a beállításait és próbálkozzon újra."
Output.RecordNoSpace.Title="Nincs elég szabad lemezterület"
Output.RecordNoSpace.Msg="Nincs elegendő lemezterület a felvétel folytatásához."
Output.RecordError.Title="Felvételi hiba"
Output.RecordError.Msg="Ismeretlen hiba lépett fel a felvétel során."
+Output.RecordError.EncodeErrorMsg="Kódolási hiba történt felvétel készítése közben."
Output.ReplayBuffer.NoHotkey.Title="Nincs gyorsbillentyű beállítva!"
Output.ReplayBuffer.NoHotkey.Msg="Nincs mentés gyorsbillentyű a visszajátszási pufferhez. Kérem állítson be egy \"Mentés\" gyorsbillentyűt a visszajátszások felvételeinek mentésére."
Basic.Main.PreviewConextMenu.Enable="Előnézet bekapcsolása"
+Basic.Main.Preview.Disable="Előnézet kikapcsolása"
+
ScaleFiltering="Skála-szűrés"
ScaleFiltering.Point="Pont"
ScaleFiltering.Bilinear="Bilineáris"
Basic.MainMenu.Edit.Transform.FitToScreen="Képernyőhöz igazítás (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Képernyőhöz nyújtá&s"
Basic.MainMenu.Edit.Transform.CenterToScreen="Képernyő középpontjához (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Függőleges közép"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Vízszintes közép"
Basic.MainMenu.Edit.Order="Rendezés (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Mozgatás Fel (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Mozgatás Le (&D)"
Basic.Settings.Audio="Hang"
Basic.Settings.Audio.SampleRate="Mintavételezés"
Basic.Settings.Audio.Channels="Csatornák"
-Basic.Settings.Audio.MeterDecayRate="Hangmérő halkulási aránya"
+Basic.Settings.Audio.Meters="Mérték"
+Basic.Settings.Audio.MeterDecayRate="Halkulási ráta"
Basic.Settings.Audio.MeterDecayRate.Fast="Gyors"
Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Típus | PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lassú (Típus II PPM)"
Basic.Settings.Audio.MultichannelWarning="Ha közvetít, ellenőrizze, hogy a stream szolgáltatója támogatja mind a surround sound kezelést, mind pedig a surround sound lejátszást. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast a legjobb példa, hogy mely platformokon van teljes támogatás. Ellenben a Facebook Live és a YouTube Live minden elfogadja a térhangzású hangot, a Facebook Live lekeveri stereora és a YouTube Live csak két csatornát játszik le.\n\nOBS audio szűrők kompatibilisek a térhangzású hanggal, viszont a VST bővítmények támogatása nem garantált."
Basic.Settings.Audio.MultichannelWarning.Title="Engedélyezi a surround hangzást?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Biztos benne, hogy engedélyezi a surround hangzást?"
-Basic.Settings.Audio.DesktopDevice="Asztali hangeszköz"
-Basic.Settings.Audio.DesktopDevice2="Asztali hangeszköz 2"
-Basic.Settings.Audio.AuxDevice="Mikrofon/Aux hangeszköz"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux hangeszköz 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux hangeszköz 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/Aux hangeszköz 4"
+Basic.Settings.Audio.Devices="Eszközök"
+Basic.Settings.Audio.DesktopDevice="Asztal audio"
+Basic.Settings.Audio.DesktopDevice2="Asztal audio 2"
+Basic.Settings.Audio.AuxDevice="Mikrofon/Aux hang"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux hang 2"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux hang 3"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/Aux hang 4"
Basic.Settings.Audio.EnablePushToMute="Push-to-mute engedélyezése"
Basic.Settings.Audio.PushToMuteDelay="Push-to-mute késleltetés"
Basic.Settings.Audio.EnablePushToTalk="Push-to-talk engedélyezése"
Basic.Settings.Advanced.FormatWarning="Figyelem: Az NV12-től eltérő színformátumok elsősorban felvételhez vannak és nem ajánlott a használatuk streamekhez. Adás közben megnövekedett processzor igényt okozhat a színkonverzió."
Basic.Settings.Advanced.Audio.BufferingTime="Audio pufferelési idő"
Basic.Settings.Advanced.Video.ColorFormat="Színformátum"
-Basic.Settings.Advanced.Video.ColorSpace="YUV színtér"
-Basic.Settings.Advanced.Video.ColorRange="YUV színtartomány"
+Basic.Settings.Advanced.Video.ColorSpace="Színtér"
+Basic.Settings.Advanced.Video.ColorRange="Színtartomány"
Basic.Settings.Advanced.Video.ColorRange.Partial="Részleges"
Basic.Settings.Advanced.Video.ColorRange.Full="Teljes"
Basic.Settings.Advanced.Audio.MonitoringDevice="Hangfigyelő eszköz"
Basic.AdvAudio="Speciális hangtulajdonságok"
Basic.AdvAudio.Name="Név"
-Basic.AdvAudio.Volume="Hangerő (%)"
+Basic.AdvAudio.Volume="Hangerő"
Basic.AdvAudio.Mono="Monora lekeverés"
Basic.AdvAudio.Balance="Egyensúly"
Basic.AdvAudio.SyncOffset="Szinkron eltolás (ms)"
NoSources.Title="Nincsenek Források"
NoSources.Text="Úgy fest, hogy nem adott hozzá valamilyen videoforrást, úgyhogy fekete képet fog adni. Biztos benne, hogy ezt kívánja tenni?"
NoSources.Text.AddSource="Hozzáadhat forrásokat bármikor a + ikonra kattintva a Források doboz alatt a fő ablakban."
+NoSources.Label="Önnek nincsenek forrásai.\nKattintson alul a + gombra,\nvagy jobbklikkeljen ide, hogy hozzáadjon egyet."
ChangeBG="Szín megadása"
CustomColor="Egyedi szín"
ResizeOutputSizeOfSource.Text="Az alap és a kimeneti felbontás átméretezése a jelenlegi forrásra."
ResizeOutputSizeOfSource.Continue="Kívánja folytatni?"
+PreviewTransition="Átmenet előnézete"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/it-IT.ini
Changed
VerticalLayout="Disposizione verticale"
Group="Gruppo"
DoNotShowAgain="Non mostrare più"
+Default="(predefinito)"
+Calculating="Calcolo..."
AlreadyRunning.Title="OBS è già in esecuzione"
AlreadyRunning.Text="OBS è già in esecuzione! A meno che non intendevi effettuare questa operazione, ricordati sempre di chiudere tutte le istanze esistenti di OBS prima di eseguirne una nuova. Se hai impostato OBS per ridursi nell'area di notifica, controlla che non sia ancora in esecuzione."
Auth.StreamInfo="Informazioni della diretta"
TwitchAuth.Stats="Statistiche di Twitch"
TwitchAuth.Feed="Feed attività di Twitch"
+TwitchAuth.TwoFactorFail.Title="Impossibile interrogare il codice della diretta"
+TwitchAuth.TwoFactorFail.Text="OBS non è stato in grado di connettersi al tuo account di Twitch. Assicurati che l'autenticazione a due fattori sia impostata nelle tue <a href='https://www.twitch.tv/settings/security'>impostazioni di sicurezza di Twitch</a> perché è necessaria per lo stream."
Copy.Filters="Copia i filtri"
Paste.Filters="Incolla i filtri"
Basic.Stats.DroppedFrames="Perdita di fotogrammi (rete)"
Basic.Stats.MegabytesSent="Uscita dati totale"
Basic.Stats.Bitrate="Velocità in bit"
+Basic.Stats.DiskFullIn="Disco pieno in (appross.)"
ResetUIWarning.Title="Sei sicuro di voler ripristinare l'interfaccia utente?"
ResetUIWarning.Text="Se ripristini l'interfaccia utente, verranno nascosti dei pannelli. Dovrai rimostrare questi pannelli dal menù visualizza se vuoi che siano visibili.\n\nSei sicuro di voler ripristinare l'interfaccia utente?"
Output.StartReplayFailed="Impossibile avviare il buffer di replay"
Output.StartFailedGeneric="Impossibile creare il file di uscita. Controlla il log per i dettagli.\n\nNota: se utilizzi la codifica NVENC o AMD, assicurati che i driver video siano aggiornati all'ultima versione."
+
Output.ConnectFail.Title="Impossibile connettersi"
Output.ConnectFail.BadPath="Percorso o URL di connessione non valido. Controlla le tue impostazioni per confermare che siano valide."
Output.ConnectFail.ConnectFailed="Connessione al server fallita"
Output.ConnectFail.Error="Si è verificato un errore non previsto durante la connessione al server. Controlla il file di log per più informazioni."
Output.ConnectFail.Disconnected="Disconnesso dal server."
+Output.StreamEncodeError.Title="Errore di codifica"
+Output.StreamEncodeError.Msg="Si è verificato un errore di codifica durante lo streaming."
+
Output.RecordFail.Title="Impossibile avviare la registrazione"
Output.RecordFail.Unsupported="Il formato del file di uscita non è supportato o non supporta più di una traccia audio. Per favore, controlla le tue impostazioni e riprova."
Output.RecordNoSpace.Title="Spazio su disco insufficiente"
Output.RecordNoSpace.Msg="Non c'è abbastanza spazio su disco per continuare la registrazione."
Output.RecordError.Title="Errore di registrazione"
Output.RecordError.Msg="Si è verificato un errore non specificato durante la registrazione."
+Output.RecordError.EncodeErrorMsg="Si è verificato un errore di codifica durante la registrazione."
Output.ReplayBuffer.NoHotkey.Title="Nessuna scorciatoia assegnata!"
Output.ReplayBuffer.NoHotkey.Msg="Nessuna scorciatoia impostata per salvare il buffer di replay. Imposta la scorciatoia «Salva» per poter salvare le registrazioni dei replay."
Basic.Main.PreviewConextMenu.Enable="Attiva l'anteprima"
+Basic.Main.Preview.Disable="Disattiva l'anteprima"
+
ScaleFiltering="Scala di filtraggio"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineare"
Basic.MainMenu.Edit.Transform.FitToScreen="Adatta allo schermo (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Allunga per riempire lo &schermo"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centra nello schermo"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centra verticalmente"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centra orizzontalmente"
Basic.MainMenu.Edit.Order="&Ordine"
Basic.MainMenu.Edit.Order.MoveUp="Sposta s&u"
Basic.MainMenu.Edit.Order.MoveDown="Sposta giù (&D)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY anno con quattro cifre\n%YY anno con le ultime due cifre (00-99)\n%MM mese in numero decimale (01-12)\n%DD giorno del mese con due cifre (01-31)\n%hh ore nel formato 24 ore (00-23)\n%mm minuti (00-59)\n%ss secondi (00-61)\n%% il simbolo della percentuale (%)\n%a giorno della settimana abbreviato\n%A giorno della settimana intero\n%b nome del mese abbreviato\n%B nome del mese intero\n%d giorno del mese con due cifre (01-31)\n%H ore nel formato 24 ore (00-23)\n%I ore nel formato 12 ore (01-12)\n%m mese in numero decimale (01-12)\n%M minuti (00-59)\n%p sigle AM o PM\n%S secondi (00-61)\n%y anno con le ultime due cifre (00-99)\n%Y anno\n%z differenza di fuso orario da UTC (ISO 8601)\n oppure il nome del fuso orario o la sua abbreviazione\n%Z nome del fuso orario o la sua abbreviazione\n"
+FilenameFormatting.TT="%CCYY Anno, quattro cifre\n%YY Anno, ultime due cifre (00-99)\n%MM Mese come numero decimale (01-12)\n%DD Giorno del mese, due cifre (01-31)\n%hh Ora in formato 24h (00-23)\n%mm Minuti (00-59)\n%ss Secondi (00-61)\n%% Un simbolo %\n%a Giorno della settimana abbreviato\n%A Giorno della settimana completo\n%b Nome del mese abbreviato\n%B Nome del mese completo\n%d Giorno del mese, due cifre (01-31)\n%H Ora in formato 24h (00-23)\n%I Ora in formato 12h (01-12)\n%m Mese come numero decimale (01-12)\n%M Minuti (00-59)\n%p Designazione AM o PM\n%S Secondi (00-61)\n%y Anno, ultime due cifre (00-99)\n%Y Anno\n%z Offset del fuso orario da UTC secondo ISO 860\n%Z Nome o abbreviazione del fuso orario\n"
Basic.Settings.Video="Video"
Basic.Settings.Video.Adapter="Adattatore video"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Frequenza di campionamento"
Basic.Settings.Audio.Channels="Canali"
-Basic.Settings.Audio.MeterDecayRate="Tasso di decadimento audio"
+Basic.Settings.Audio.Meters="Metrica"
+Basic.Settings.Audio.MeterDecayRate="Tasso di decadimento"
Basic.Settings.Audio.MeterDecayRate.Fast="Veloce"
Basic.Settings.Audio.MeterDecayRate.Medium="Medio (Tipo I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lento (Tipo II PPM)"
Basic.Settings.Audio.MultichannelWarning="Se stai effettuando le modifiche per le dirette, controlla che il servizio di dirette offra l'integrazione e la riproduzione di audio surround. Twitch, Facebook 360 Live, Mixer RTMP e Smashcast sono esempi di servizi che offrono l'audio surround. Le dirette su Facebook e YouTube accettano l'audio surround, ma Facebook lo converte in stereo e YouTube riproduce solo due canali.\n\nI filtri audio di OBS sono compatibili con l'audio surround, ma il supporto al plugin VST non è garantito."
Basic.Settings.Audio.MultichannelWarning.Title="Vuoi attivare l'audio surround?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Sei sicuro di voler attivare l'audio surround?"
-Basic.Settings.Audio.DesktopDevice="Dispositivo audio del desktop"
-Basic.Settings.Audio.DesktopDevice2="Dispositivo audio del desktop 2"
-Basic.Settings.Audio.AuxDevice="Dispositivo audio mic/ausiliario"
-Basic.Settings.Audio.AuxDevice2="Dispositivo audio mic/ausiliario 2"
-Basic.Settings.Audio.AuxDevice3="Dispositivo audio mic/ausiliario 3"
-Basic.Settings.Audio.AuxDevice4="Dispositivo audio mic/ausiliario 4"
+Basic.Settings.Audio.Devices="Dispositivi"
+Basic.Settings.Audio.DesktopDevice="Audio desktop"
+Basic.Settings.Audio.DesktopDevice2="Audio desktop 2"
+Basic.Settings.Audio.AuxDevice="Audio mic/ausiliario"
+Basic.Settings.Audio.AuxDevice2="Audio mic/ausiliario 2"
+Basic.Settings.Audio.AuxDevice3="Audio mic/ausiliario 3"
+Basic.Settings.Audio.AuxDevice4="Audio mic/ausiliario 4"
Basic.Settings.Audio.EnablePushToMute="Attiva il push-to-mute"
Basic.Settings.Audio.PushToMuteDelay="Ritardo del push-to-mute"
Basic.Settings.Audio.EnablePushToTalk="Attiva il push-to-talk"
Basic.Settings.Advanced.FormatWarning="Attenzione: i formati colore diversi da NV12 sono principalmente pensati per la registrazione, e non sono consigliati per le dirette. Le dirette richiedono un utilizzo maggiore delle CPU a causa della conversione del formato del colore."
Basic.Settings.Advanced.Audio.BufferingTime="Tempo di buffer audio"
Basic.Settings.Advanced.Video.ColorFormat="Formato colore"
-Basic.Settings.Advanced.Video.ColorSpace="Spazio colore YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gamma di colore YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Spazio colore"
+Basic.Settings.Advanced.Video.ColorRange="Gamma di colori"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parziale"
Basic.Settings.Advanced.Video.ColorRange.Full="Intero"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo di monitoraggio audio"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo di monitoraggio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Predefinito"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Disattiva la riduzione del volume di Windows"
Basic.Settings.Advanced.StreamDelay="Ritardo delle dirette"
Basic.AdvAudio="Proprietà audio avanzate"
Basic.AdvAudio.Name="Nome"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
Basic.AdvAudio.Mono="Trasforma in mono"
Basic.AdvAudio.Balance="Bilanciamento"
Basic.AdvAudio.SyncOffset="Ritardo per la sincronizzazione (ms)"
NoSources.Title="Nessuna fonte"
NoSources.Text="Sembra che tu non abbia ancora aggiunto alcuna fonte video, quindi vedrai solo una schermata nera. Sei sicuro di voler proseguire?"
NoSources.Text.AddSource="Puoi aggiungere fonti cliccando l'icona + sotto il pannello delle fonti nella finestra principale in qualsiasi momento."
+NoSources.Label="Non hai nessuna fonte.\nClicca il pulsante + qui sotto,\no clicca col tasto destro per aggiungerne una."
ChangeBG="Imposta un colore"
CustomColor="Colore personalizzato"
ResizeOutputSizeOfSource.Text="La risoluzione di base e quella effettiva verranno ridimensionate in base alla dimensione della fonte attuale."
ResizeOutputSizeOfSource.Continue="Vuoi continuare?"
+PreviewTransition="Anteprima transizione"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ja-JP.ini
Changed
Enable="有効にする"
DisableOSXVSync="OSX の V-Sync を無効にする"
ResetOSXVSyncOnExit="終了時に OSX の V-Sync をリセットする"
-HighResourceUsage="エンコードが高負荷です! 映像設定を下げるかより高速のエンコードプリセットの使用を検討してください。"
+HighResourceUsage="エンコードが高負荷です! 映像設定を下げるかより高速のエンコードプリセットの使用を検討してください。"
Transition="トランジション"
QuickTransitions="クイックトランジション"
Left="左"
VerticalLayout="垂直レイアウト"
Group="グループ化"
DoNotShowAgain="次回から表示しない"
+Default="(既定)"
+Calculating="計算中..."
AlreadyRunning.Title="OBSは既に実行中です"
-AlreadyRunning.Text="OBSは既に実行されています! この操作を行うつもりがない限り、新しいインスタンスを実行する前に既存のOBSインスタンスを終了してください。OBSがシステムトレイに最小化されるように設定されている場合は、まだ実行中であるかどうかを確認してください。"
+AlreadyRunning.Text="OBSは既に実行されています! この操作を行うつもりがない限り、新しいインスタンスを実行する前に既存のOBSインスタンスを終了してください。OBSがシステムトレイに最小化されるように設定されている場合は、まだ実行中であるかどうかを確認してください。"
AlreadyRunning.LaunchAnyway="とにかく起動する"
DockCloseWarning.Title="ドッキング可能ウィンドウを閉じる"
Auth.StreamInfo="配信情報"
TwitchAuth.Stats="Twitch統計"
TwitchAuth.Feed="Twitch アクティビティフィード"
+TwitchAuth.TwoFactorFail.Title="ストリームキーを照会できませんでした"
+TwitchAuth.TwoFactorFail.Text="OBSはあなたのTwitchアカウントに接続できませんでした。 これは配信に必要なので、<a href='https://www.twitch.tv/settings/security'>Twitchセキュリティ設定</a>で2要素認証が設定されていることを確認してください。"
Copy.Filters="フィルタをコピーする"
Paste.Filters="フィルタを貼り付ける"
Basic.AutoConfig.TestPage.SubTitle.Testing="プログラムは最も理想的な設定を推定するための一連のテストを現在実行中です"
Basic.AutoConfig.TestPage.SubTitle.Complete="テスト完了"
Basic.AutoConfig.TestPage.TestingBandwidth="帯域幅テストの実行、これには数分かかることがあります..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="接続先: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="接続先: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="サーバーに接続できませんでした。インターネット接続を確認してからもう一度お試しください。"
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="帯域幅のテスト: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="帯域幅のテスト: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="配信エンコーダのテスト中、これには数分かかることがあります..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="録画エンコーダのテスト中、これには数分かかることがあります..."
Basic.AutoConfig.TestPage.TestingRes="解像度のテスト中、これには数分かかることがあります..."
Basic.Stats.DroppedFrames="ドロップフレーム (ネットワーク)"
Basic.Stats.MegabytesSent="出力データの合計"
Basic.Stats.Bitrate="ビットレート"
+Basic.Stats.DiskFullIn="ディスクがいっぱいになるまで後(約)"
ResetUIWarning.Title="UIをリセットしてもよろしいですか?"
ResetUIWarning.Text="UIをリセットすると追加のドックは非表示になります。表示したい場合表示メニューからこれらのドックを表示する必要があります。\n\nUIをリセットしてもよろしいですか?"
Updater.NoUpdatesAvailable.Text="現在利用可能な更新はありません"
Updater.FailedToLaunch="アップデータの起動に失敗しました"
Updater.GameCaptureActive.Title="ゲームキャプチャがアクティブ"
-Updater.GameCaptureActive.Text="ゲームキャプチャフックライブラリが現在使用中です。キャプチャされているすべてのゲーム/プログラムを閉じて (またはwindowsを再起動して) からもう一度やり直してください。"
+Updater.GameCaptureActive.Text="ゲームキャプチャフックライブラリが現在使用中です。キャプチャされているすべてのゲーム/プログラムを閉じて (またはWindowsを再起動して) からもう一度やり直してください。"
QuickTransitions.SwapScenes="トランジション後にプレビュー/出力シーンを入れ替え"
QuickTransitions.SwapScenesTT="(出力のオリジナルシーンがまだ存在する場合)、トランジション後のプレビューと出力シーンを入れ替えます。\nこれは出力のオリジナルシーンに加えられた可能性があるすべての変更を元に戻しません。"
Output.StartReplayFailed="リプレイバッファの開始に失敗しました"
Output.StartFailedGeneric="出力開始に失敗しました。詳細はログを確認してください。\n\n注: NVENCまたはAMDエンコーダを使用している場合は、ビデオドライバが最新のものであるかを確認してください。"
+
Output.ConnectFail.Title="接続失敗"
Output.ConnectFail.BadPath="パスかURLが無効です。再確認して下さい。"
Output.ConnectFail.ConnectFailed="サーバーへの接続に失敗しました"
Output.ConnectFail.Error="サーバー接続時に予期しないエラーが発生しました。ログファイルを確認してください。"
Output.ConnectFail.Disconnected="サーバーから切断されました。"
+Output.StreamEncodeError.Title="エンコードエラー"
+Output.StreamEncodeError.Msg="配信中にエンコーダでエラーが発生しました。"
+
Output.RecordFail.Title="録画を開始できませんでした"
Output.RecordFail.Unsupported="出力フォーマットがサポートされていないか複数のオーディオ トラックをサポートしていません。 設定を確認してもう一度やり直してください。"
Output.RecordNoSpace.Title="ディスク領域の不足"
Output.RecordNoSpace.Msg="録画を継続する十分なディスク領域がありません。"
Output.RecordError.Title="録画エラー"
Output.RecordError.Msg="録画中に不明なエラーが発生しました。"
+Output.RecordError.EncodeErrorMsg="録画中にエンコーダでエラーが発生しました。"
Output.ReplayBuffer.NoHotkey.Title="ホットキーが設定されていません!"
Output.ReplayBuffer.NoHotkey.Msg="リプレイバッファ保存のホットキー設定がありません。 リプレイ録画保存用に使用する「保存」のホットキーを設定してください。"
Basic.Main.PreviewConextMenu.Enable="プレビュー有効化"
+Basic.Main.Preview.Disable="プレビュー無効化"
+
ScaleFiltering="スケールフィルタ"
ScaleFiltering.Point="ポイント"
ScaleFiltering.Bilinear="バイリニア"
Basic.MainMenu.Edit.Transform.FitToScreen="画面に合わせる(&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="画面に引き延ばして置く(&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="画面中央に置く(&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="垂直方向に中央揃え"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="水平方向に中央揃え"
Basic.MainMenu.Edit.Order="順序(&O)"
Basic.MainMenu.Edit.Order.MoveUp="上に移動(&U)"
Basic.MainMenu.Edit.Order.MoveDown="下に移動(&D)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY 年, 4桁\n%YY 年, 下2桁 (00-99)\n%MM 月 数値 (01-12)\n%DD 日, 0埋め (01-31)\n%hh 時 24時間形式 (00-23)\n%mm 分 (00-59)\n%ss 秒 (00-61)\n%% A % 記号\n%a 曜日 省略名\n%A 曜日 完全名\n%b 月 省略名\n%B 月 完全名\n%d 日, 0埋め (01-31)\n%H 時 24時間形式 (00-23)\n%I 時 12時間形式 (01-12)\n%m 月 数値 (01-12)\n%M 分 (00-59)\n%p 午前または午後の指定\n%S 秒 (00-61)\n%y 年, 下2桁 (00-99)\n%Y 年\n%z ISO 8601 UTCタイムゾーンからのオフセット\n 名前または省略名\n%Z タイムゾーン名または省略名\n"
+FilenameFormatting.TT="%CCYY 年, 4桁\n%YY 年, 下2桁 (00-99)\n%MM 月 数値 (01-12)\n%DD 日, 0埋め (01-31)\n%hh 時 24時間形式 (00-23)\n%mm 分 (00-59)\n%ss 秒 (00-61)\n%% A % 記号\n%a 曜日 省略名\n%A 曜日 完全名\n%b 月 省略名\n%B 月 完全名\n%d 日, 0埋め (01-31)\n%H 時 24時間形式 (00-23)\n%I 時 12時間形式 (01-12)\n%m 月 数値 (01-12)\n%M 分 (00-59)\n%p 午前または午後の指定\n%S 秒 (00-61)\n%y 年, 下2桁 (00-99)\n%Y 年\n%z ISO 8601 UTCからのオフセット\n%Z タイムゾーン名または略称\n"
Basic.Settings.Video="映像"
Basic.Settings.Video.Adapter="ビデオアダプター"
Basic.Settings.Audio="音声"
Basic.Settings.Audio.SampleRate="サンプリングレート"
Basic.Settings.Audio.Channels="チャンネル"
-Basic.Settings.Audio.MeterDecayRate="音声メーターの減衰率"
+Basic.Settings.Audio.Meters="メーター"
+Basic.Settings.Audio.MeterDecayRate="減衰率"
Basic.Settings.Audio.MeterDecayRate.Fast="速い"
Basic.Settings.Audio.MeterDecayRate.Medium="中 (タイプ I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="遅い (タイプ II PPM)"
Basic.Settings.Audio.MultichannelWarning="配信する場合、配信サービスがサラウンド音声の取り込みと再生の両方をサポートしているかどうかを確認してください。Twitch、Facebook 360 Live、Mixer RTMP、Smashcastは、サラウンド音声が完全にサポートされている例です。しかしFacebook LiveとYouTube Liveはどちらもサラウンド取り込みを受信しますが、Facebook Liveはステレオにダウンミックスし、YouTube Liveは2チャンネルのみしか再生できません。\n\nVSTプラグインのサポートは保証されていませんが、OBS音声フィルタはサラウンド音声と互換性があります。"
Basic.Settings.Audio.MultichannelWarning.Title="サラウンド音声を有効にしますか?"
Basic.Settings.Audio.MultichannelWarning.Confirm="サラウンド音声を有効にしてもよろしいですか?"
-Basic.Settings.Audio.DesktopDevice="デスクトップ音声デバイス"
-Basic.Settings.Audio.DesktopDevice2="デスクトップ音声デバイス 2"
-Basic.Settings.Audio.AuxDevice="マイク音声デバイス"
-Basic.Settings.Audio.AuxDevice2="マイク音声デバイス 2"
-Basic.Settings.Audio.AuxDevice3="マイク音声デバイス 3"
-Basic.Settings.Audio.AuxDevice4="マイク音声デバイス 4"
+Basic.Settings.Audio.Devices="デバイス"
+Basic.Settings.Audio.DesktopDevice="デスクトップ音声"
+Basic.Settings.Audio.DesktopDevice2="デスクトップ音声 2"
+Basic.Settings.Audio.AuxDevice="マイク音声"
+Basic.Settings.Audio.AuxDevice2="マイク音声 2"
+Basic.Settings.Audio.AuxDevice3="マイク音声 3"
+Basic.Settings.Audio.AuxDevice4="マイク音声 4"
Basic.Settings.Audio.EnablePushToMute="プッシュ-ミュートを有効にする"
Basic.Settings.Audio.PushToMuteDelay="プッシュ-ミュート遅延"
Basic.Settings.Audio.EnablePushToTalk="プッシュ-トークを有効にする"
Basic.Settings.Advanced.FormatWarning="警告: NV12以外のカラーフォーマットは主に録画を想定しており、配信には非推奨です。配信ではカラーフォーマットの変換による CPU使用率の増加が発生する可能性があります。"
Basic.Settings.Advanced.Audio.BufferingTime="音声バッファ処理時間"
Basic.Settings.Advanced.Video.ColorFormat="カラーフォーマット"
-Basic.Settings.Advanced.Video.ColorSpace="YUV 色空間"
-Basic.Settings.Advanced.Video.ColorRange="YUV 色範囲"
+Basic.Settings.Advanced.Video.ColorSpace="色空間"
+Basic.Settings.Advanced.Video.ColorRange="色範囲"
Basic.Settings.Advanced.Video.ColorRange.Partial="一部"
Basic.Settings.Advanced.Video.ColorRange.Full="全部"
-Basic.Settings.Advanced.Audio.MonitoringDevice="音声モニタリングデバイス"
+Basic.Settings.Advanced.Audio.MonitoringDevice="モニタリングデバイス"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="既定"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Windowsの音量を自動で下げる機能を無効にする"
Basic.Settings.Advanced.StreamDelay="遅延配信"
Basic.AdvAudio="オーディオの詳細プロパティ"
Basic.AdvAudio.Name="名称"
-Basic.AdvAudio.Volume="音量 (%)"
+Basic.AdvAudio.Volume="音量"
Basic.AdvAudio.Mono="モノラルにダウンミックス"
Basic.AdvAudio.Balance="バランス"
Basic.AdvAudio.SyncOffset="同期オフセット (ミリ秒)"
Basic.SystemTray.Show="表示"
Basic.SystemTray.Hide="非表示"
-Basic.SystemTray.Message.Reconnecting="切断。 再接続..."
+Basic.SystemTray.Message.Reconnecting="切断。 再接続..."
Hotkeys.Insert="Insertキー"
Hotkeys.Delete="Deleteキー"
NoSources.Title="ソース無し"
NoSources.Text="映像ソースをまだ追加していないようなので、空白の画面だけが出力されます。よろしいですか?"
NoSources.Text.AddSource="メインウィンドウのソースボックスの下にある + アイコンをクリックすると、いつでもソースを追加することができます。"
+NoSources.Label="ソースがありません。\n下の + ボタンをクリックするか、\nまたはここを右クリックして追加してください。"
ChangeBG="色の設定"
CustomColor="カスタム色"
ResizeOutputSizeOfSource.Text="基本解像度と出力解像度は、現在のソースサイズにリサイズされます。"
ResizeOutputSizeOfSource.Continue="続行しますか?"
+PreviewTransition="トランジションのプレビュー"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ka-GE.ini
Changed
VerticalLayout="შვეული განლაგება"
Group="დაჯგუფება"
DoNotShowAgain="მომავალში ჩვენების გარეშე"
+Default="(ნაგულისხმევი)"
+Calculating="ითვლება..."
AlreadyRunning.Title="OBS უკვე გაშვებულია"
AlreadyRunning.Text="OBS უკვე გაშვებულია! გთხოვთ, ჯერ დახუროთ OBS-ის ყველა გაშვებული პროცესი, სანამ ახლის გაშვებას შეეცდებით. თუ მითითებული გაქვთ, რომ დახურვის ნაცვლად, OBS სისტემურ არეში უნდა ჩაიკეცოს, გთხოვთ მანდაც გადაამოწმოთ, დარჩენილი ხომ არაა."
Auth.AuthFailure.Title="შესვლა ვერ მოხერხდა"
Auth.AuthFailure.Text="ვერ მოხერხდა შესვლა %1-ზე:\n\n%2: %3"
Auth.InvalidScope.Title="საჭიროებს ანგარიშზე შესვლას"
-Auth.InvalidScope.Text="შესვლის მოთხოვნები შეცვლილია მომსახურებისთვის %1. ზოგი შესაძლებლობა, შეიძლება აღარ იყოს ხელმისაწვდომი."
+Auth.InvalidScope.Text="შესვლის მოთხოვნები შეცვლილია მომსახურებისთვის %1. ზოგი შესაძლებლობა, შეიძლება აღარ იყოს ხელმისაწვდომი."
Auth.LoadingChannel.Title="არხის მონაცემების ჩატვირთვა..."
Auth.LoadingChannel.Text="%1-ის არხის მონაცემები იტვირთება, გთხოვთ მოითმინოთ..."
Auth.ChannelFailure.Title="მონაცემების ჩატვირთვა ვერ მოხერხდა"
Auth.StreamInfo="ნაკადის მონაცემები"
TwitchAuth.Stats="Twitch-ის სტატისტიკა"
TwitchAuth.Feed="Twitch მოქმედებების არხი"
+TwitchAuth.TwoFactorFail.Title="ნაკადის გასაღების მოთხოვნა ვერ მოხერხდა"
Copy.Filters="ფილტრების ასლი"
Paste.Filters="ფილტრების ჩასმა"
Basic.AutoConfig.StreamPage.ConnectAccount="ანგარიშის დაკავშირება (არასავალდებულო)"
Basic.AutoConfig.StreamPage.DisconnectAccount="ანგარიშიდან გამოერთება"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="გსურთ ანგარიშიდან გამოერთება?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="ცვლილება დაუყოვნებლივ აისახება. ნამდვილად გსურთ, ანგარიშიდან გამოერთება?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="ცვლილება დაუყოვნებლივ აისახება. ნამდვილად გსურთ, ანგარიშიდან გამოერთება?"
Basic.AutoConfig.StreamPage.UseStreamKey="ნაკადის გასაღების გამოყენება"
Basic.AutoConfig.StreamPage.Service="მომსახურება"
Basic.AutoConfig.StreamPage.Service.ShowAll="ყველას ჩვენება..."
Basic.Stats.DroppedFrames="გამოტოვებული კადრები (ქსელი)"
Basic.Stats.MegabytesSent="საერთო მოცულობა"
Basic.Stats.Bitrate="ბიტური სიხშირე"
+Basic.Stats.DiskFullIn="დარჩენილი ადგილი დისკზე (დაახლ.)"
ResetUIWarning.Title="ნამდვილად გსურთ იერსახის პარამეტრების ჩამოყრა?"
-ResetUIWarning.Text="შედეგად, დამატებითი ნაწილები დაიმალება. მათი ხელახლა გამოჩენა, შესაძლებელი იქნება ხედის მენიუდან, სურვილის შემთხვევაში.\n\nნამდვილად გსურთ იერსახის პარამეტრების ჩამოყრა?"
+ResetUIWarning.Text="შედეგად, დამატებითი ნაწილები დაიმალება. მათი ხელახლა გამოჩენა, შესაძლებელი იქნება ხედის მენიუდან, სურვილის შემთხვევაში.\n\nნამდვილად გსურთ იერსახის პარამეტრების ჩამოყრა?"
Updater.Title="ხელმისაწვდომია განახლება"
Updater.Text="ხელმისაწვდომია განახლება:"
Updater.RemindMeLater="მოგვიანებით შეხსენება"
Updater.Skip="ვერსიის გამოტოვება"
Updater.Running.Title="პროგრამა ამჟამად გაშვებულია"
-Updater.Running.Text="გაშვებულია გამომავალი სიგნალები, გთხოვთ, ჯერ გამორთოთ ყველა მოქმედი გამომავალი სიგნალი, სანამ განახლებას შეეცდებით"
+Updater.Running.Text="მიმდინარეობს სიგნალის გამოტანა, გთხოვთ, ჯერ გათიშოთ ყველა მოქმედი გამოტანა, სანამ განახლებას შეეცდებით"
Updater.NoUpdatesAvailable.Title="განახლებები არაა ხელმისაწვდომი"
Updater.NoUpdatesAvailable.Text="ამჟამად, განახლებები არაა ხელმისაწვდომი"
Updater.FailedToLaunch="განახლების გაშვება ვერ მოხერხდა"
Updater.GameCaptureActive.Title="მიმდინარეობს თამაშის ჩაწერა"
-Updater.GameCaptureActive.Text="ამჟამად გაშვებულია თამაშის ჩამწერი ბიბლიოთეკა. გთხოვთ, შეწყვიტოთ ყველა თამაშის/პროგრამის ჩაწერა (ან თავიდან ჩართოთ windows) და სცადოთ ხელახლა."
+Updater.GameCaptureActive.Text="ამჟამად გაშვებულია თამაშის ჩამწერი ბიბლიოთეკა. გთხოვთ, შეწყვიტოთ ყველა თამაშის/პროგრამის ჩაწერა (ან თავიდან ჩართოთ Windows) და სცადოთ ხელახლა."
-QuickTransitions.SwapScenes="გადასვლის შემდეგ, შესათვალიერებელი და გამომავალი სცენებისთვის ადგილის გაცვლა"
-QuickTransitions.SwapScenesTT="გადასვლის შემდეგ, შესათვალიერებელი და გამომავალი სცენებისთვის ადგილის გაცვლა (თუ ჯერ კიდევ არსებობს გამომავალი სცენის თავდაპირველი ასლი).\nამის შედეგად, გამომავალი სცენის თავდაპირველ ვარიანტზე გაკეთებული ცვლილებები, არ გაუქმდება."
+QuickTransitions.SwapScenes="გადასვლის შემდეგ, შესათვალიერებელი და გამოტანილი სცენებისთვის ადგილის გაცვლა"
+QuickTransitions.SwapScenesTT="გადასვლის შემდეგ, შესათვალიერებელი და გამოტანილი სცენებისთვის ადგილის გაცვლა (თუ ჯერ კიდევ არსებობს გამოტანის თავდაპირველი სცენა).\nგამოტანის თავდაპირველ სცენაზე გაკეთებული ცვლილებები, არ გაუქმდება."
QuickTransitions.DuplicateScene="სცენის გაორკეცება"
-QuickTransitions.DuplicateSceneTT="ერთი და იმავე სცენის შესწორებისას, საშუალებას იძლევა წყარო გარდაიქმნას, გამომავალი შედეგის შეცვლის გარეშე.\nწყაროს პარამეტრების ჩასასწორებლად, გამომავალი შედეგის შეცვლის გარეშე, ჩართეთ 'წყაროს გაორკეცება'\nმოცემული მნიშვნელობის ცვლილება გამოიწვევს მიმდინარე გამომავალი სცენის საწყისზე დაბრუნებას (თუ ჯერ კიდევ არსებობს)."
+QuickTransitions.DuplicateSceneTT="ერთი და იმავე სცენის შესწორებისას, საშუალებას იძლევა წყაროები გარდაიქმნას, გამოტანის შეუცვლელად.\nწყაროს პარამეტრების ჩასასწორებლად, გამოტანის შეუცვლელად, ჩართეთ „წყაროს გაორკეცება“.\nამ მნიშვნელობის ცვლილება, გამოტანის მიმდინარე სცენას დააბრუნებს საწყისზე (თუ ჯერ კიდევ არსებობს)."
QuickTransitions.EditProperties="წყაროს გაორკეცება"
-QuickTransitions.EditPropertiesTT="ერთი და იმავე სცენის შესწორებისას, საშუალებას იძლევა წყაროს პარამეტრები ჩასწორდეს, გამომავალი შედეგის შეცვლის გარეშე.\nმისი გამოყენება შესაძლებელია, მხოლოდ 'სცენის გაორკეცების' შემთხვევაში\nცალკეული წყაროები (მათ შორის გადაღებული ან არსებული მედიაფაილები) არ იძლევა ამის საშუალებას და მათი განცალკევებით ჩასწორება შეუძლებელია.\nმოცემული მნიშვნელობის ცვლილება გამოიწვევს მიმდინარე გამომავალი სცენის საწყისზე დაბრუნებას (თუ ჯერ კიდევ არსებობს).\n\nგაფრთხილება: წყაროს გაორკეცების შედეგად, შესაძლოა სისტემის და ვიდეოდაფის დატვირთვა გაიზარდოს."
+QuickTransitions.EditPropertiesTT="ერთი და იმავე სცენის შესწორებისას, საშუალებას იძლევა წყაროს პარამეტრები ჩასწორდეს, გამოტანის შეუცვლელად.\nმისი გამოყენება შესაძლებელია, მხოლოდ „სცენის გაორკეცებისას“.\nზოგიერთი წყარო (როგორიცაა მიმდინარე გადაღება ან მედიაფაილები) არ იძლევა ამის საშუალებას და ცალკე ვერ ჩასწორდება.\nამ მნიშვნელობის ცვლილება, მიმდინარე გამოტანის სცენას დააბრუნებს საწყისზე (თუ ჯერ კიდევ არსებობს).\n\nგაფრთხილება: წყაროს გაორკეცების შედეგად, შესაძლოა სისტემის და ვიდეოდაფის დატვირთვა გაიზარდოს."
QuickTransitions.HotkeyName="სწრაფი გადასვლა: %1"
Basic.AddTransition="გასამართი გადასვლის დამატება"
ConfirmBWTest.Text="OBS-ისთვის მითითებული გაქვთ ქსელის გამტარუნარიანობის რეჟიმი. ეს რეჟიმი საშუალებას გაძლევთ, შეამოწმოთ ქსელის მუშაობა, თქვენს არხზე პირდაპირ ეთერში გასვლის გარეშე. შემოწმების დასრულებისთანავე, საჭიროა მისი გათიშვა, რომ მაყურებლებმა შეძლონ გაშვებული ნაკადის ხილვა\n\nგსურთ, განაგრძოთ?"
ConfirmExit.Title="OBS-დან გასვლა?"
-ConfirmExit.Text="OBS ამჟამად მოქმედია. ყველა გაშვებული ნაკადი/ჩაწერა შეწყდება. ნამდვილად გსურთ გამოსვლა?"
+ConfirmExit.Text="OBS ამჟამად მოქმედია. ყველა გაშვებული ნაკადი/ჩაწერა შეწყდება. ნამდვილად გსურთ გამოსვლა?"
ConfirmRemove.Title="წაშლის დადასტურება"
ConfirmRemove.Text="ნამდვილად გსურთ, წაიშალოს „$1“?"
Output.StartStreamFailed="ნაკადის გაშვება ვერ მოხერხდა"
Output.StartRecordingFailed="ჩაწერის დაწყება ვერ მოხერხდა"
Output.StartReplayFailed="გადახვევის ჩართვა ვერ მოხერხდა"
-Output.StartFailedGeneric="სიგნალის გაშვება ვერ მოხერხდა. გთხოვთ, შეამოწმეთ აღრიცხვის ფაილი, დამატებითი ინფორმაციისთვის.\n\nშენიშვნა: თუ იყენებთ NVENC ან AMD დამშიფრავებს, დარწმუნდით რომ თქვენი ვიდეოდაფის პროგრამა განახლებულია."
+Output.StartFailedGeneric="სიგნალის გაშვება ვერ მოხერხდა. გთხოვთ, შეამოწმეთ აღრიცხვის ფაილი, დამატებითი ინფორმაციისთვის.\n\nშენიშვნა: თუ იყენებთ NVENC ან AMD დამშიფრავებს, დარწმუნდით რომ თქვენი ვიდეოდაფის პროგრამა განახლებულია."
+
Output.ConnectFail.Title="დაკავშირება ვერ მოხერხდა"
-Output.ConnectFail.BadPath="არამართებული მისამართი ან დასაკავშირებელი URL ბმული. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრების სისწორე."
+Output.ConnectFail.BadPath="არამართებული მისამართი ან დასაკავშირებელი URL ბმული. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრების სისწორე."
Output.ConnectFail.ConnectFailed="სერვერთან დაკავშირება ვერ მოხერხდა"
-Output.ConnectFail.InvalidStream="ვერ ხერხდება მითითებულ არხთან ან ნაკადის გასაღებთან დაკავშირება, გთხოვთ, გადაამოწმოთ თქვენი ნაკადის გასაღები. თუ სწორია, მაშინ შესაძლოა ხარვეზი იყოს სერვერთან დაკავშირებისას."
-Output.ConnectFail.Error="მოულოდნელი შეცდომა წარმოიქმნა სერვერთან დაკავშირებისას. დამატებითი ინფორმაციისთვის იხილეთ აღრიცხვის ფაილი."
+Output.ConnectFail.InvalidStream="ვერ ხერხდება მითითებულ არხთან ან ნაკადის გასაღებთან დაკავშირება, გთხოვთ, გადაამოწმოთ თქვენი ნაკადის გასაღები. თუ სწორია, მაშინ შესაძლოა ხარვეზი იყოს სერვერთან დაკავშირებისას."
+Output.ConnectFail.Error="მოულოდნელი შეცდომა წარმოიქმნა სერვერთან დაკავშირებისას. დამატებითი ინფორმაციისთვის იხილეთ აღრიცხვის ფაილი."
Output.ConnectFail.Disconnected="სერვერთან კავშირი გაწყვეტილია."
+Output.StreamEncodeError.Title="შეცდომა დაშიფვრისას"
+Output.StreamEncodeError.Msg="დამშიფრავის შეცდომა ნაკადის გაშვებისას."
+
Output.RecordFail.Title="ჩაწერის დაწყება ვერ მოხერხდა"
-Output.RecordFail.Unsupported="ამ სახის გამომავალი სიგნალი ან არაა მხარდაჭერილი, ან არ იძლევა ერთზე მეტი ხმოვანი ფაილის გამოყენების საშუალებას. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრები და სცადოთ ხელახლა."
+Output.RecordFail.Unsupported="გამოტანის ეს სახეობა ან არაა მხარდაჭერილი, ან არ იძლევა ერთზე მეტი ხმოვანი ფაილის გამოყენების საშუალებას. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრები და სცადოთ ხელახლა."
Output.RecordNoSpace.Title="არასაკმარისი ადგილი დისკზე"
Output.RecordNoSpace.Msg="დისკზე აღარაა საკმარისი ადგილი ჩაწერის გასაგრძელებლად."
Output.RecordError.Title="შეცდომა ჩაწერისას"
Output.RecordError.Msg="ჩაწერის დროს დაუდგენელი სახის შეცდომა წარმოიშვა."
+Output.RecordError.EncodeErrorMsg="დამშიფრავის შეცდომა წარმოიშვა ჩაწერისას."
Output.ReplayBuffer.NoHotkey.Title="სწრაფი ღილაკი არაა მითითებული!"
-Output.ReplayBuffer.NoHotkey.Msg="სწრაფი ღილაკი არაა მითითებული გადახვევისთვის. გთხოვთ, მიუთითოთ „შენახვის“ ღილაკი, გადასახვევი მასალის შესანახად."
+Output.ReplayBuffer.NoHotkey.Msg="სწრაფი ღილაკი არაა მითითებული გადახვევისთვის. გთხოვთ, მიუთითოთ „შენახვის“ ღილაკი, გადასახვევი მასალის შესანახად."
Output.BadPath.Title="ფაილის არამართებული მისამართი"
-Output.BadPath.Text="ფაილის მითითებული მდებარეობა არასწორია. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრების სისწორე."
+Output.BadPath.Text="ფაილის მითითებული მდებარეობა არასწორია. გთხოვთ, გადაამოწმოთ თქვენი პარამეტრების სისწორე."
LogReturnDialog="ჩანაწერი წარმატებით აიტვირთა"
LogReturnDialog.CopyURL="ბმულის ასლი"
Basic.Scene="სცენა"
Basic.DisplayCapture="ეკრანის გადაღება"
-Basic.Main.PreviewConextMenu.Enable="შეთვალიერების შესაძლებლობა"
+Basic.Main.PreviewConextMenu.Enable="შეთვალიერების ჩართვა"
+
+Basic.Main.Preview.Disable="შეთვალიერების გამორთვა"
ScaleFiltering="ზომის შეცვლის ფილტრი"
ScaleFiltering.Point="წერტილოვანი"
Deinterlacing.TopFieldFirst="ზედა ველიდან"
Deinterlacing.BottomFieldFirst="ქვედა ველიდან"
-VolControl.SliderUnmuted="ხმის სამართავი '%1': %2"
-VolControl.SliderMuted="ხმის სამართავი '%1': %2 (ამჟამად დადუმებული)"
+VolControl.SliderUnmuted="ხმის სამართავი „%1“: %2"
+VolControl.SliderMuted="ხმის სამართავი „%1“: %2 (ამჟამად დადუმებული)"
VolControl.Mute="'%1' დადუმება"
VolControl.Properties="„%1“ – პარამეტრები"
Basic.PropertiesWindow.SelectColor="ფერის შერჩევა"
Basic.PropertiesWindow.SelectFont="შრიფტის შერჩევა"
Basic.PropertiesWindow.ConfirmTitle="პარამეტრები შეცვლილია"
-Basic.PropertiesWindow.Confirm="ცვლილებები არაა დამახსოვრებული. გსურთ მათი შენახვა?"
+Basic.PropertiesWindow.Confirm="ცვლილებები არაა დამახსოვრებული. გსურთ მათი შენახვა?"
Basic.PropertiesWindow.NoProperties="პარამეტრები მიუწვდომელია"
Basic.PropertiesWindow.AddFiles="ფაილების დამატება"
Basic.PropertiesWindow.AddDir="საქაღალდის დამატება"
Basic.MainMenu.Edit.Scale="შეთვალიერების ზომის შეცვლა (&S)"
Basic.MainMenu.Edit.Scale.Window="ფანჯრის ზომამდე"
Basic.MainMenu.Edit.Scale.Canvas="ფონის ზომამდე (%1x%2)"
-Basic.MainMenu.Edit.Scale.Output="გამომავალი ვიდეოს ზომამდე (%1x%2)"
+Basic.MainMenu.Edit.Scale.Output="გამოტანა (%1x%2)"
Basic.MainMenu.Edit.Transform="გარდაქმნა (&T)"
Basic.MainMenu.Edit.Transform.EditTransform="გარდაქმნის ჩასწორება... (&E)"
Basic.MainMenu.Edit.Transform.CopyTransform="გარდაქმნის ასლი"
Basic.MainMenu.Edit.Transform.FitToScreen="ეკრანის ზომაზე მორგება (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="ეკრანის ზომაზე გაწელვა (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="ეკრანის შუაში განთავსება (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="შუაში შვეულად"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="შუაში თარაზულად"
Basic.MainMenu.Edit.Order="დალაგება (&O)"
Basic.MainMenu.Edit.Order.MoveUp="ზემოთ აწევა (&U)"
Basic.MainMenu.Edit.Order.MoveDown="ქვემოთ ჩამოწევა (&D)"
Basic.MainMenu.Help.Logs.UploadLastLog="ბოლო აღრიცხვის ფაილის ატვირთვა (&L)"
Basic.MainMenu.Help.Logs.ViewCurrentLog="მიმდინარე აღრიცხვის ფაილის ნახვა (&V)"
Basic.MainMenu.Help.CheckForUpdates="განახლებებზე შემოწმება"
-Basic.MainMenu.Help.CrashLogs="ავარიული დახურვების მოხსენებები (&R)"
-Basic.MainMenu.Help.CrashLogs.ShowLogs="ავარიული დახურვების მოხსენებების ჩვენება (&S)"
+Basic.MainMenu.Help.CrashLogs="უეცარი გათიშვების მოხსენებები (&R)"
+Basic.MainMenu.Help.CrashLogs.ShowLogs="უეცარი გათიშვების მოხსენებების ჩვენება (&S)"
Basic.MainMenu.Help.CrashLogs.UploadLastLog="ბოლო მოხსენების ატვირთვა (&L)"
Basic.MainMenu.Help.About="შესახებ (&A)"
Basic.Settings.ProgramRestart="ამ ცვლილებების ასახვისთვის, საჭიროა პროგრამის ხელახლა გაშვება."
Basic.Settings.ConfirmTitle="ცვლილებების დადასტურება"
-Basic.Settings.Confirm="ცვლილებები არაა დამახსოვრებული. გსურთ მათი შენახვა?"
+Basic.Settings.Confirm="ცვლილებები არაა დამახსოვრებული. გსურთ მათი შენახვა?"
Basic.Settings.General="მთავარი"
Basic.Settings.General.Theme="იერსახე"
Basic.Settings.Stream.Custom.Password="პაროლი"
Basic.Settings.Stream.BandwidthTestMode="ქსელის გამტარუნარიანობის შემოწმების რეჟიმი"
-Basic.Settings.Output="გამომავალი სიგნალი"
+Basic.Settings.Output="გამოტანა"
Basic.Settings.Output.Format="ჩაწერის ფორმატი"
Basic.Settings.Output.Encoder="დამშიფრავი"
Basic.Settings.Output.SelectDirectory="საქაღალდის არჩევა ჩანაწერისთვის"
Basic.Settings.Output.SelectFile="ფაილის არჩევა ჩანაწერისთვის"
Basic.Settings.Output.EnforceBitrate="ნაკადის გაშვების მომსახურების ბიტური სიხშირის ზღვრების დადგენა"
-Basic.Settings.Output.Mode="გამომავალი სიგნალის რეჟიმი"
+Basic.Settings.Output.Mode="გამოტანის რეჟიმი"
Basic.Settings.Output.Mode.Simple="მარტივი"
Basic.Settings.Output.Mode.Adv="გაფართოებული"
-Basic.Settings.Output.Mode.FFmpeg="FFmpeg გამომავალი სიგნალი"
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg-გამოტანა"
Basic.Settings.Output.UseReplayBuffer="გადახვევის შესაძლებლობა"
Basic.Settings.Output.ReplayBuffer.SecondsMax="გადახვევის დასაშვები დრო (წამი)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="მეხსიერების დასაშვები მოცულობა (მეგაბაიტებში)"
Basic.Settings.Output.ReplayBuffer.Estimate="მეხსიერების მიახლოებითი მოხმარება: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="შეუძლებელია მეხსიერების მიახლოებითი მოხმარების დადგენა. გთხოვთ, მიუთითოთ მეხსიერების დასაშვები ზღვარი."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="შეუძლებელია მეხსიერების მიახლოებითი მოხმარების დადგენა. გთხოვთ, მიუთითოთ მეხსიერების დასაშვები ზღვარი."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(შენიშვნა: დარწმუნდით, რომ გადახვევისთვის სწრაფი ღილაკები დაყენებულია შესაბამის განყოფილებაში)"
Basic.Settings.Output.ReplayBuffer.Prefix="გადასახვევი მასალის შესანახი ფაილის თავსართი"
Basic.Settings.Output.ReplayBuffer.Suffix="ბოლოსართი"
Basic.Settings.Output.CustomMuxerSettings="შემფუთავის პარამეტრების მითითება"
Basic.Settings.Output.NoSpaceFileName="ფაილის სახელის შექმნა, გამოტოვებული ადგილების გარეშე"
-Basic.Settings.Output.Adv.Rescale="გამომავალი ვიდეოს ზომების შეცვლა"
+Basic.Settings.Output.Adv.Rescale="გამოტანის ზომების შეცვლა"
Basic.Settings.Output.Adv.AudioTrack="ხმოვანი ბილიკი"
Basic.Settings.Output.Adv.Streaming="ნაკადი"
Basic.Settings.Output.Adv.ApplyServiceSettings="ნაკადის გაშვების მომსახურების პარამეტრების გამოყენება"
Basic.Settings.Output.Adv.Audio.Track6="ბილიკი 6"
Basic.Settings.Output.Adv.Recording="ჩაწერა"
-Basic.Settings.Output.Adv.Recording.Type="ტიპი"
-Basic.Settings.Output.Adv.Recording.Type.Standard="სტანდარტული"
-Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="მითითებული გამომავალი სიგნალი (FFmpeg)"
+Basic.Settings.Output.Adv.Recording.Type="სახეობა"
+Basic.Settings.Output.Adv.Recording.Type.Standard="ჩვეულებრივი"
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="მითითებული გამოტანა (FFmpeg)"
Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(გაშვებული ნაკადის დამშიფრავის გამოყენება)"
Basic.Settings.Output.Adv.Recording.Filename="ფაილის დასახელების ფორმატი"
Basic.Settings.Output.Adv.Recording.OverwriteIfExists="არსებულ ფაილზე გადაწერა"
-Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg გამომავალი სიგნალის სახე"
-Basic.Settings.Output.Adv.FFmpeg.Type.URL="მითითებულ URL ბულზე"
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg-გამოტანის სახეობა"
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="მითითებულ URL-ბმულზე"
Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="ფაილში"
Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="ჩაწერის ცნობილი ფორმატები"
Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="ყველა ფაილი"
Basic.Settings.Video="ვიდეო"
Basic.Settings.Video.Adapter="ვიდეოდაფა"
Basic.Settings.Video.BaseResolution="ეკრანის (ფონის) ძირითადი გაფართოება"
-Basic.Settings.Video.ScaledResolution="გამომავალი ვიდეოს (ზომაშეცვლილის) გაფართოება"
+Basic.Settings.Video.ScaledResolution="გამოტანის (ზომაშეცვლილის) გაფართოება"
Basic.Settings.Video.DownscaleFilter="ზომის შემცირების ფილტრი"
Basic.Settings.Video.DisableAeroWindows="Aero გაფორმების გათიშვა (მხოლოდ Windows-ზე)"
Basic.Settings.Video.FPS="FPS"
Basic.Settings.Video.Numerator="მრიცხველი"
Basic.Settings.Video.Denominator="მნიშვნელი"
Basic.Settings.Video.Renderer="დამმუშავებელი"
-Basic.Settings.Video.InvalidResolution="გაფართოების არასწორი მნიშვნელობა. უნდა იყოს [width]x[height] (მაგ. 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="ვიდეო ამჟამად გაშვებულია. გთხოვთ, გამორთოთ ყველა გამომავალი სიგნალი, ვიდეოს პარამეტრების ჩასასწორებლად."
+Basic.Settings.Video.InvalidResolution="გაფართოების არასწორი მნიშვნელობა. უნდა იყოს [width]x[height] (მაგ. 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="მიმდინარეობს ვიდეოს გამოტანა. გთხოვთ, გათიშოთ ყველა გამოტანილი სიგნალი, ვიდეოს პარამეტრების ჩასასწორებლად."
Basic.Settings.Video.DisableAero="Aero გაფორმების გათიშვა"
Basic.Settings.Video.DownscaleFilter.Bilinear="ორხაზოვანი (უსწრაფესი, მაგრამ ბუნდოვანი მასშტაბირება)"
Basic.Settings.Audio="ხმა"
Basic.Settings.Audio.SampleRate="სიხშირე"
-Basic.Settings.Audio.Channels="არხები"
-Basic.Settings.Audio.MeterDecayRate="ხმის დონის მზომი ხაზების მილევის სიჩქარე"
+Basic.Settings.Audio.Channels="არხი"
+Basic.Settings.Audio.Meters="საზომები"
+Basic.Settings.Audio.MeterDecayRate="მილევის სიჩქარე"
Basic.Settings.Audio.MeterDecayRate.Fast="სწრაფი"
Basic.Settings.Audio.MeterDecayRate.Medium="საშუალო (I სახის PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="ნელი (II სახის PPM)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="უბრალო"
Basic.Settings.Audio.PeakMeterType.TruePeak="ზუსტი (პროცესორის მაღალი მოხმარებით)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="ყურადღება: ჩართულია მოცულობითი ხმა."
-Basic.Settings.Audio.MultichannelWarning="ნაკადის გაშვებისას, გადაამოწმეთ მომსახურების მომწოდებელთან, არის თუ არა მხარდაჭერილი მოცულობითი ხმოვანი სიგნალის როგორც მიღებაც, ასევე მოსმენა. მაგალითად Twitch, Facebook 360 Live, Mixer RTMP და Smashcast მომსახურებების შემთხვევაში, მოცულობითი ხმოვანი სიგნალი, სრულადაა მხარდაჭერილი. რაც შეეხება Facebook Live და YouTube Live მომსახურებებს, მიუხედავად იმისა, რომ ორივე იღებს მოცულობით ხმოვან სიგნალს, Facebook Live გარდაქმნის მას სტერეო-სიგნალად, ხოლო YouTube Live უშვებს მხოლოდ ორი არხით.\n\nOBS-ის ხმოვანი ფილტრები თავსებადია მოცულობით ხმოვან სიგნალთან, მაგრამ VST-მოდულის მხარდაჭერა, შესაძლოა არ იყოს უზრუნველყოფილი."
+Basic.Settings.Audio.MultichannelWarning="ნაკადის გაშვებისას გადაამოწმეთ, მომსახურების მომწოდებელი, იძლევა თუ არა მოცულობითი ხმოვანი სიგნალის როგორც მიღების, ასევე მოსმენის შესაძლებლობას. მაგალითად მომსახურებებზე, როგორიცაა Twitch, Facebook 360 Live, Mixer RTMP და Smashcast, სრულადაა მხარდაჭერილი მოცულობითი ხმოვანი სიგნალი. ხოლო Facebook Live და YouTube Live, მიუხედავად იმისა, რომ ორივე იღებს მოცულობით ხმოვან სიგნალს, Facebook Live გარდაქმნის მას სტერეო-სიგნალად, ხოლო YouTube Live უშვებს მხოლოდ ორი არხით.\n\nOBS-ის ხმოვანი ფილტრები თავსებადია მოცულობით ხმოვან სიგნალთან, მაგრამ VST-მოდულის მხარდაჭერა, შესაძლოა არ იყოს უზრუნველყოფილი."
Basic.Settings.Audio.MultichannelWarning.Title="ჩაირთოს მოცულობითი ხმოვანი სიგნალი?"
Basic.Settings.Audio.MultichannelWarning.Confirm="ნამდვილად გსურთ, ჩართოთ მოცულობითი ხმოვანი სიგნალი?"
+Basic.Settings.Audio.Devices="მოწყობილობები"
Basic.Settings.Audio.DesktopDevice="ხმის მოწყობილობა"
Basic.Settings.Audio.DesktopDevice2="ხმის მოწყობილობა 2"
-Basic.Settings.Audio.AuxDevice="მიკროფონი/ხმის დამატებითი მოწყობილობა"
-Basic.Settings.Audio.AuxDevice2="მიკროფონი/ხმის დამატებითი მოწყობილობა 2"
-Basic.Settings.Audio.AuxDevice3="მიკროფონი/ხმის დამატებითი მოწყობილობა 3"
-Basic.Settings.Audio.AuxDevice4="მიკროფონი/ხმის დამატებითი მოწყობილობა 4"
+Basic.Settings.Audio.AuxDevice="მიკროფონი/დამატებითი მოწყობილობა"
+Basic.Settings.Audio.AuxDevice2="მიკროფონი/დამატებითი მოწყობილობა 2"
+Basic.Settings.Audio.AuxDevice3="მიკროფონი/დამატებითი მოწყობილობა 3"
+Basic.Settings.Audio.AuxDevice4="მიკროფონი/დამატებითი მოწყობილობა 4"
Basic.Settings.Audio.EnablePushToMute="დაჭერით დადუმების ჩართვა"
Basic.Settings.Audio.PushToMuteDelay="დაჭერით დადუმების დაყოვნება"
Basic.Settings.Audio.EnablePushToTalk="დაჭერით საუბრის ჩართვა"
Basic.Settings.Advanced.General.ProcessPriority.Normal="საშუალო"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="საშუალოზე დაბალი"
Basic.Settings.Advanced.General.ProcessPriority.Idle="უმოქმედო"
-Basic.Settings.Advanced.FormatWarning="გაფრთხილება: ფერთა ფორმატები, გარდა NV12-ისა, ძირითადად განკუთვნილია ჩაწერისთვის და არა ნაკადის გაშვებისთვის. ნაკადის გაშვებისას, ფერთა ფორმატის გარდაქმნებმა შესაძლოა გამოიწვიოს პროცესორის მეტად დატვირთვა."
+Basic.Settings.Advanced.FormatWarning="გაფრთხილება: ფერთა ფორმატები, გარდა NV12-ისა, ძირითადად განკუთვნილია ჩაწერისთვის და არა ნაკადის გაშვებისთვის. ნაკადის გაშვებისას, ფერთა ფორმატის გარდაქმნებმა შესაძლოა გამოიწვიოს პროცესორის მეტად დატვირთვა."
Basic.Settings.Advanced.Audio.BufferingTime="ხმის ბუფერის დრო"
Basic.Settings.Advanced.Video.ColorFormat="ფერთა ფორმატი"
-Basic.Settings.Advanced.Video.ColorSpace="YUV ფერთა სისტემა"
-Basic.Settings.Advanced.Video.ColorRange="YUV ფერთა გამა"
+Basic.Settings.Advanced.Video.ColorSpace="ფერთა სივრცე"
+Basic.Settings.Advanced.Video.ColorRange="ფერთა გამა"
Basic.Settings.Advanced.Video.ColorRange.Partial="ნაწილობრივი"
Basic.Settings.Advanced.Video.ColorRange.Full="სრული"
-Basic.Settings.Advanced.Audio.MonitoringDevice="ხმის მოსასმენი მოწყობილობა"
+Basic.Settings.Advanced.Audio.MonitoringDevice="მოსასმენი მოწყობილობა"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="ნაგულისხმევი"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows-ის მიერ ხმის დონის დადაბლების არიდება"
Basic.Settings.Advanced.StreamDelay="ნაკადის დაყოვნება"
Basic.Settings.Advanced.StreamDelay.Preserve="მოსაჭრელი წერტილის მომარაგება (დაყოვნების გაზრდა) ხელახლა დაკავშირებისას"
Basic.Settings.Advanced.StreamDelay.MemoryUsage="მეხსიერების მიახლოებითი მოხმარება: %1 MB"
Basic.Settings.Advanced.Network="ქსელი"
-Basic.Settings.Advanced.Network.BindToIP="დაკავშირება IP მისამართზე"
+Basic.Settings.Advanced.Network.BindToIP="დაკავშირება IP-მისამართზე"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="ქსელის ახალი კოდის ჩართვა"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="დაყოვნების შემცირება"
Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="სწრაფი ღილაკების გათიშვა, მთავარ ფანჯარაზე გადასვლისას"
Basic.AdvAudio="ხმის გაფართოებული პარამეტრები"
Basic.AdvAudio.Name="სახელი"
-Basic.AdvAudio.Volume="ხმის სიმაღლე (%)"
+Basic.AdvAudio.Volume="ხმის დონე"
Basic.AdvAudio.Mono="ერთ არხში გაერთიანება"
Basic.AdvAudio.Balance="წონასწორობა"
Basic.AdvAudio.SyncOffset="სინქრონიზაციის გასწორება (მწ)"
Basic.AdvAudio.Monitoring="ხმის მოსმენა"
Basic.AdvAudio.Monitoring.None="მოსმენის გარეშე"
-Basic.AdvAudio.Monitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამომავალი სიგნალით)"
+Basic.AdvAudio.Monitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამოტანა)"
Basic.AdvAudio.Monitoring.Both="მოსმენა და გამოტანა"
Basic.AdvAudio.AudioTracks="ბილიკები"
Basic.Settings.Hotkeys="ღილაკები"
Basic.Settings.Hotkeys.Pair="გადამრთველის სახით იმუშავებს ღილაკთან „%1“"
-Basic.Settings.Hotkeys.Filter="ფილტრი"
+Basic.Settings.Hotkeys.Filter="გამორჩევა"
Basic.Hotkeys.SelectScene="სცენაზე გადასვლა"
OutputWarnings.NoTracksSelected="უნდა მიუთითოთ ერთი ხმოვანი ბილიკი მაინც"
OutputWarnings.MultiTrackRecording="გაფრთხილება: ცალკეული სახის ფაილებში (როგორიცაა FLV), არაა მხარდაჭერილი რამდენიმე ბილიკი, თითოეული ჩაწერისას"
-OutputWarnings.MP4Recording="გაფრთხილება: MP4/MOV სახით შენახული ჩანაწერები ვეღარ აღდგება, მუშაობის შეწყვეტის შემთხვევაში (მაგ. ლურჯი ეკრანის ამოგდებისას, ძაბვის ვარდნისას და ა.შ.). თუ გსურთ რამდენიმე ხმოვანი ფაილის ჩაწერა, სასურველია ამისთვის გამოიყენოთ MKV და დასრულების შემდეგ გადაფუთოთ MP4/MOV-ად. (ფაილი → ჩანაწერების გადაფუთვა)"
+OutputWarnings.MP4Recording="გაფრთხილება: MP4/MOV სახით შენახული ჩანაწერები ვეღარ აღდგება, მუშაობის შეწყვეტის შემთხვევაში (მაგ. ლურჯი ეკრანის ამოგდებისას, ძაბვის ვარდნისას და ა.შ.). თუ გსურთ რამდენიმე ხმოვანი ფაილის ჩაწერა, სასურველია ამისთვის გამოიყენოთ MKV და დასრულების შემდეგ გადაფუთოთ MP4/MOV-ფაილად. (ფაილი → ჩანაწერების გადაფუთვა)"
FinalScene.Title="სცენის წაშლა"
FinalScene.Text="აუცილებელია სულ მცირე ერთ სცენა."
NoSources.Title="წყაროები არაა"
NoSources.Text="როგორც ჩანს, თქვენ ჯერ არ დაგიმატებიათ ვიდეოს არცერთი წყარო, შედეგად მიიღებთ ცარიელ ეკრანს. ნამდვილად გსურთ, განაგრძოთ?"
NoSources.Text.AddSource="წყაროს დამატება შეგიძლიათ ნებისმიერ დროს + ნიშანზე დაწკაპებით, მთავარი ფანჯრის წყაროების არეში."
+NoSources.Label="წყაროები არ მიგითითებიათ.\nდაწკაპეთ + ღილაკზე ქვემოთ\nან დაამატეთ მარჯვენა წკაპით."
ChangeBG="ფერის დაყენება"
CustomColor="ფერის მითითება"
About.License="ლიცენზია"
About.Contribute="მხარი დაუჭირეთ OBS-პროექტს"
-ResizeOutputSizeOfSource="გამომავალი ვიდეოს ზომების შეცვლა (წყაროს ზომები)"
-ResizeOutputSizeOfSource.Text="ეკრანის ძირითადი და გამომავალი ვიდეოს გაფართოება ჩანაცვლდება მიმდინარე წყაროს ზომებით."
+ResizeOutputSizeOfSource="გამოტანის ზომების შეცვლა (წყაროს ზომები)"
+ResizeOutputSizeOfSource.Text="ეკრანის ძირითადი და გამოტანილი ვიდეოს გაფართოება ჩანაცვლდება მიმდინარე წყაროს ზომებით."
ResizeOutputSizeOfSource.Continue="გსურთ, განაგრძოთ?"
+PreviewTransition="გადასვლის შეთვალიერება"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ko-KR.ini
Changed
VerticalLayout="수직으로 배치"
Group="하나로 묶기"
DoNotShowAgain="다시 표시하지 않기"
+Default="(기본)"
+Calculating="계산 중.."
AlreadyRunning.Title="OBS가 이미 실행 중입니다"
AlreadyRunning.Text="OBS가 이미 실행 중입니다! 의도한 것이 아니라면 새로운 OBS를 실행하기 전에 이미 동작 중인 프로그램을 종료하십시오. OBS가 시스템 트레이에 최소화되어 있는지도 확인하십시오."
Auth.StreamInfo="방송 정보"
TwitchAuth.Stats="트위치 통계"
TwitchAuth.Feed="트위치 활동 피드"
+TwitchAuth.TwoFactorFail.Title="스트림 키를 질의할 수 없었습니다"
+TwitchAuth.TwoFactorFail.Text="OBS가 사용자의 트위치 계정에 접속할 수 없었습니다. <a href='https://www.twitch.tv/settings/security'>트위치 보안 설정</a> 에서 이중 인증을 거쳐야 방송이 가능합니다."
Copy.Filters="필터를 복사"
Paste.Filters="필터를 붙여넣기"
Basic.Stats.DroppedFrames="드롭된 프레임 (네트워크)"
Basic.Stats.MegabytesSent="데이터 출력 합계"
Basic.Stats.Bitrate="비트레이트"
+Basic.Stats.DiskFullIn="디스크가 꽉차기 전까지 (추정)"
ResetUIWarning.Title="정말로 모든 UI를 초기화하겠습니까?"
ResetUIWarning.Text="UI를 초기화하면 추가한 독이 안보일 것입니다. '보기' 메뉴에서 다시 나타나게 설정할 수 있습니다.\n\nUI를 초기화하겠습니까?"
Updater.NoUpdatesAvailable.Text="현재 사용가능한 판올림이 없습니다"
Updater.FailedToLaunch="판올림 도우미를 실행할 수 없습니다"
Updater.GameCaptureActive.Title="게임 캡쳐 기능이 활성화 중"
-Updater.GameCaptureActive.Text="게임 캡쳐 기능을 현재 사용 중입니다. 캡쳐 중인 게임이나 프로그램을 종료(혹은 윈도우를 재시작) 한 다음 다시 시도하세요."
+Updater.GameCaptureActive.Text="게임 캡쳐 라이브러리가 현재 사용 중입니다. 캡쳐 중인 게임/프로그램 혹은 윈도우를 종료 후 다시 시작하세요."
QuickTransitions.SwapScenes="전환 후 미리 보기/출력 장면을 교체"
QuickTransitions.SwapScenesTT="(만약 출력 쪽 원본 장면이 있을 때) 전환 작업 이후 미리 보기와 출력 장면을 교체합니다. \n출력 쪽 원본 장면에서 변경한 내용은 사라지지 않습니다."
Output.StartReplayFailed="리플레이 버퍼를 시작하지 못했습니다"
Output.StartFailedGeneric="출력을 시작하지 못했습니다. 기록 파일을 확인하십시오.\n\n참고: NVENC 혹은 AMD 인코더를 사용하고 있다면 드라이버를 최신 버전으로 유지하십시오."
+
Output.ConnectFail.Title="연결에 실패했음"
Output.ConnectFail.BadPath="잘못된 경로 혹은 연결 주소입니다. 유효한 값인지 설정을 확인하시기 바랍니다. "
Output.ConnectFail.ConnectFailed="서버에 연결하지 못했습니다"
Output.ConnectFail.Error="예기치 않은 오류가 서버에 접속을 시도하는 과정에서 발생했습니다. 자세한 정보는 기록 파일을 조회하십시오. "
Output.ConnectFail.Disconnected="서버로부터 접속이 끊겼습니다. "
+Output.StreamEncodeError.Title="인코딩 오류"
+Output.StreamEncodeError.Msg="방송 중 인코더 오류가 발생했습니다."
+
Output.RecordFail.Title="녹화에 실패했습니다"
Output.RecordFail.Unsupported="이 출력 형식은 지원하지 않거나 하나 이상의 오디오 트랙을 지원하지 않습니다. 설정을 확인하여 다시 시도하십시오."
Output.RecordNoSpace.Title="디스크 공간 부족"
Output.RecordNoSpace.Msg="녹화를 계속하기 위한 디스크 공간이 부족합니다."
Output.RecordError.Title="녹화 오류"
Output.RecordError.Msg="녹화 중 예기치 못한 오류가 발생했습니다."
+Output.RecordError.EncodeErrorMsg="녹화 중 인코더 오류가 발생했습니다."
Output.ReplayBuffer.NoHotkey.Title="단축키가 없습니다!"
Output.ReplayBuffer.NoHotkey.Msg="리플레이를 저장하는 단축키를 지정하지 않았습니다. 리플레이 녹화 기능을 사용하려면 \"저장\" 단축키를 지정하십시오."
Basic.Main.PreviewConextMenu.Enable="미리보기 활성화"
+Basic.Main.Preview.Disable="미리보기 끄기"
+
ScaleFiltering="비율 필터링"
ScaleFiltering.Point="점"
ScaleFiltering.Bilinear="이중선형"
Basic.MainMenu.Edit.Transform.FitToScreen="채우기(&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="늘리기(&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="가운데(&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="수직으로 정렬"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="수평으로 정렬"
Basic.MainMenu.Edit.Order="순서(&O)"
Basic.MainMenu.Edit.Order.MoveUp="위로 올리기(&U)"
Basic.MainMenu.Edit.Order.MoveDown="아래로 내리기(&D)"
Basic.Settings.Output.CustomMuxerSettings="사용자 임의 다중화 설정"
Basic.Settings.Output.NoSpaceFileName="여백없이 파일 이름 짓기"
-Basic.Settings.Output.Adv.Rescale="출력 배율 재조정"
+Basic.Settings.Output.Adv.Rescale="출력 배율 재조정"
Basic.Settings.Output.Adv.AudioTrack="오디오 트랙"
Basic.Settings.Output.Adv.Streaming="방송"
Basic.Settings.Output.Adv.ApplyServiceSettings="방송 서비스 인코더 설정 강제 적용"
Basic.Settings.Audio="오디오"
Basic.Settings.Audio.SampleRate="샘플 레이트"
Basic.Settings.Audio.Channels="채널"
-Basic.Settings.Audio.MeterDecayRate="오디오 측정기 감퇴 속도"
+Basic.Settings.Audio.Meters="측정기"
+Basic.Settings.Audio.MeterDecayRate="감쇄 속도"
Basic.Settings.Audio.MeterDecayRate.Fast="빠름"
Basic.Settings.Audio.MeterDecayRate.Medium="중간 (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="느림 (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="방송 중이라면 서비스에서 서라운드 음향에 대한 입력 및 재생을 지원하는지 확인하세요. 트위치, 페이스북 360 라이브, Mixer RTMP, Smashcast 는 해당 기능을 사용할 수 있습니다. 페이스북 Live와 유튜브 Live 서비스는 입력은 할 수 있지만 스테레오로 전환하며 유튜브 Live는 오로지 2채널로만 재생합니다.\n\nOBS 오디오 필터는 서라운드 음향을 지원하지만 VST 플러그인 지원은 보장하지 않습니다."
Basic.Settings.Audio.MultichannelWarning.Title="서라운드 음향을 활성화할까요?"
Basic.Settings.Audio.MultichannelWarning.Confirm="정말로 서라운드 음향을 사용하겠습니까?"
-Basic.Settings.Audio.DesktopDevice="데스크탑 오디오 장치"
-Basic.Settings.Audio.DesktopDevice2="데스크탑 오디오 장치 2"
-Basic.Settings.Audio.AuxDevice="마이크/보조 오디오 장치"
-Basic.Settings.Audio.AuxDevice2="마이크/보조 오디오 장치 2"
-Basic.Settings.Audio.AuxDevice3="마이크/보조 오디오 장치 3"
-Basic.Settings.Audio.AuxDevice4="마이크/보조 오디오 장치 4"
+Basic.Settings.Audio.Devices="장치"
+Basic.Settings.Audio.DesktopDevice="데스크탑 오디오"
+Basic.Settings.Audio.DesktopDevice2="데스크탑 오디오 2"
+Basic.Settings.Audio.AuxDevice="마이크/보조 오디오"
+Basic.Settings.Audio.AuxDevice2="마이크/보조 오디오 2"
+Basic.Settings.Audio.AuxDevice3="마이크/보조 오디오 3"
+Basic.Settings.Audio.AuxDevice4="마이크/보조 오디오 4"
Basic.Settings.Audio.EnablePushToMute="누르면 음소거 활성화"
Basic.Settings.Audio.PushToMuteDelay="누르면 음소거 지연"
Basic.Settings.Audio.EnablePushToTalk="누르며 말하기 활성화"
Basic.Settings.Advanced.FormatWarning="경고: NV12 이외의 색상 형식은 주로 녹화를 위한 것이며, 방송에 적합하지 않습니다. 이대로 방송을 하게 되면 형식 전환을 위해 CPU 사용량이 증가할 수 있습니다."
Basic.Settings.Advanced.Audio.BufferingTime="오디오 버퍼링 시간"
Basic.Settings.Advanced.Video.ColorFormat="색상 형식"
-Basic.Settings.Advanced.Video.ColorSpace="YUV 색 공간"
-Basic.Settings.Advanced.Video.ColorRange="YUV 색상 범위"
+Basic.Settings.Advanced.Video.ColorSpace="색 공간"
+Basic.Settings.Advanced.Video.ColorRange="색상 범위"
Basic.Settings.Advanced.Video.ColorRange.Partial="부분"
Basic.Settings.Advanced.Video.ColorRange.Full="전체"
-Basic.Settings.Advanced.Audio.MonitoringDevice="오디오 모니터링 장치"
+Basic.Settings.Advanced.Audio.MonitoringDevice="감시 장치"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="기본값"
Basic.Settings.Advanced.Audio.DisableAudioDucking="윈도우 오디오 더킹 비활성화"
Basic.Settings.Advanced.StreamDelay="방송 지연"
Basic.AdvAudio="오디오 고급 설정"
Basic.AdvAudio.Name="이름"
-Basic.AdvAudio.Volume="볼륨 (%)"
+Basic.AdvAudio.Volume="음량"
Basic.AdvAudio.Mono="모노로 강제 송출"
Basic.AdvAudio.Balance="균형"
Basic.AdvAudio.SyncOffset="싱크 오프셋 (ms)"
Hotkeys.Space="스페이스"
Hotkeys.NumpadNum="숫자키 패드 %1"
Hotkeys.NumpadMultiply="* (숫자키 패드)"
-Hotkeys.NumpadDivide="/ (숫자키 패드)"
-Hotkeys.NumpadAdd="+ (숫자키 패드)"
-Hotkeys.NumpadSubtract="- (숫자키 패드)"
-Hotkeys.NumpadDecimal=". (숫자키 패드)"
+Hotkeys.NumpadDivide="/ (숫자키 패드)"
+Hotkeys.NumpadAdd="+ (숫자키 패드)"
+Hotkeys.NumpadSubtract="- (숫자키 패드)"
+Hotkeys.NumpadDecimal=". (숫자키 패드)"
Hotkeys.AppleKeypadNum="%1 (문자판)"
Hotkeys.AppleKeypadMultiply="* (문자판)"
Hotkeys.AppleKeypadDivide="/ (문자판)"
NoSources.Title="소스 없음"
NoSources.Text="어떠한 영상 소스도 추가하지 않아서 빈 화면만 송출할 것입니다. 그래도 계속하시겠습니까?"
NoSources.Text.AddSource="주 화면 소스 목록에 있는 + 아이콘을 누르면 소스를 추가할 수 있습니다."
+NoSources.Label="방송이나 녹화에 송출할 소스가 지정되어 있지 않습니다.\n아래 + 버튼을 누르거나\n여기를 우클릭하여 소스를 추가하십시오."
ChangeBG="색상 지정"
CustomColor="사용자 색상"
ResizeOutputSizeOfSource.Text="기본 및 출력 해상도가 현재 소스 크기로 조정됩니다."
ResizeOutputSizeOfSource.Continue="계속하시겠습니까?"
+PreviewTransition="미리보기 변환"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ku-TR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ku-TR.ini
Changed
Cancel="پاشگەزبونەوە"
Close="داخستن"
Save="پاراستن"
+Discard="ڕەتکردنەوە"
Disable="ناچالاککردن"
Yes="بەڵێ"
No="نەخێر"
Add="زیادکردن"
Remove="سڕینەوە"
Rename="ناونانەوە"
+Interact="کارلێکردن"
+Filters="فلتەرەکان"
+Properties="خاسیەتەکان"
MoveUp="بۆ سەرەوە بجوڵێ"
MoveDown="بۆ خوارەوە بجوڵێ"
Settings="ڕێکخستنەکان"
+Display="پیشاندراو"
Name="ناو"
Exit="ده•رچوون"
+Mixer="میکسەر"
Browse="هێنان"
Mono="یەک بڵندگۆ"
Stereo="دوو بڵندگۆ"
Right="ڕاست"
Top="سەرەوە"
Bottom="خوارەوە"
+Reset="ڕێکخستنەوه"
Hours="کاژێره•کان"
Minutes="خولەکەکان"
Seconds="چرکەکان"
Next="دواتر"
Back="پێشتر"
Defaults="بنه•ڕه•تی"
+None="هیچ"
+StudioMode.Preview="پێشبینین"
+Auth.Chat="گفتوگۆکردن"
+Copy.Filters="لەبەرگرتنەوەی فلتەرەکان"
+Paste.Filters="دانانی فلتەرەکان"
+BandwidthTest.Region="ناوچه"
+BandwidthTest.Region.US="ویلایەتە یەکگرتوەکانی ئەمریکا"
+BandwidthTest.Region.EU="ئەوروپا"
+BandwidthTest.Region.Asia="ئاسیا"
+BandwidthTest.Region.Other="ئه•وانی تر"
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(بەستەرە)"
+Basic.Stats="ئامار"
+Basic.Stats.Output.Recording="تۆماردەکرێت"
+Basic.Stats.Status.Recording="تۆماردەکرێت"
+Basic.Stats.Status.Live="ڕاستەوخۆ"
+Updater.UpdateNow="نوێکردنەوە ئێستا"
Basic.TransitionDuration="ماوه•"
+ConfirmExit.Title="ده•رچوون لە OBS"
+Basic.TransformWindow.Position="شوێن"
+Basic.TransformWindow.Rotation="سوڕانه•وه•"
+Basic.TransformWindow.Size="قەبارە"
+Basic.TransformWindow.Crop="قرتاندن"
+Basic.TransformWindow.Alignment.TopLeft="لای چەپی سەرەوە"
+Basic.TransformWindow.Alignment.TopCenter="ناوەڕاستی سەرەوە"
+Basic.TransformWindow.Alignment.TopRight="لای ڕاستی سەرەوە"
+Basic.TransformWindow.Alignment.CenterLeft="ناوەڕاستی چەپ"
+Basic.TransformWindow.Alignment.Center="ناوەڕاست"
+Basic.TransformWindow.Alignment.CenterRight="نێوەندی ڕاست"
+Basic.TransformWindow.Alignment.BottomLeft="لای چەپی خوارەوە"
+Basic.TransformWindow.Alignment.BottomCenter="ناوەڕاستی خوارەوە"
+Basic.TransformWindow.Alignment.BottomRight="لای ڕاستی خوارەوە"
+Basic.Main.StopRecording="تۆمارکردن بوەستێنە"
+Basic.Main.StoppingRecording="چاوەروانبە بۆ وەستاندنی تۆمارکردن"
+Basic.MainMenu.File="پەرگە"
+Basic.MainMenu.File.Exit="ده•رچوون"
+Basic.MainMenu.Edit="دەستکاریکردن"
+Basic.MainMenu.Edit.Undo="پاشگەزبوونەوە"
+Basic.MainMenu.Edit.Redo="گه•ڕانه•وه• بۆ هه•نگاوی داهاتوو"
+
+Basic.MainMenu.View="نیشاندان"
+Basic.MainMenu.View.Toolbars="شریتی ئامرازەکان"
+
+Basic.MainMenu.SceneCollection="کۆکراوەی دیمەنەکان"
+Basic.MainMenu.Profile="پرۆفایل"
+
+Basic.MainMenu.Tools="ئامرازەکان"
+
+Basic.MainMenu.Help="یارمەتی"
obs-studio-23.1.0.tar.xz/UI/data/locale/lt-LT.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/lt-LT.ini
Changed
Enable="Įjungti"
DisableOSXVSync="Išjungti OSX V-Sync"
ResetOSXVSyncOnExit="Iš naujo nustatyti OSX V-Sync išeinant"
-HighResourceUsage="Kodavimas perkrautas! Mažinkite vaizdo parametrus arba naudokite greitesnę kodavimo parengtį."
+HighResourceUsage="Kodavimas perkrautas! Mažinkite vaizdo parametrus arba naudokite greitesnę kodavimo parengtį."
Transition="Perėjimas"
QuickTransitions="Greitieji perėjimai"
Left="Iš kairės"
ConfirmRemove.Text="Ar tikrai norite pašalinti '$1'?"
+
Output.ConnectFail.Title="Nepavyko prisijungti"
Output.ConnectFail.BadPath="Neteisingas kelias arba jungimosi URL. Prašome patikrinti nustatymus ir įsitikinti, kad jie teisingi."
Output.ConnectFail.ConnectFailed="Nepavyko prisijungti prie serverio"
Output.ConnectFail.Error="Netikėta klaida bandant jungtis į serverį. Daugiau informacijos žurnalo faile."
Output.ConnectFail.Disconnected="Atjungtas nuo serverio."
+
Output.RecordFail.Title="Nepavyko pradėti įrašo"
Output.RecordFail.Unsupported="Išvesties formatas nepalaikomas arba nepalaiko daugiau vieno garso takelio. Prašome patikrinti nustatymus ir bandyti vėl."
Output.RecordNoSpace.Title="Nepakanka vietos diske"
Basic.Main.PreviewConextMenu.Enable="Įjungti peržiūrą"
+
ScaleFiltering="Mastelio filtras"
ScaleFiltering.Point="Taškas"
ScaleFiltering.Bilinear="Dvilinijinis"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Tolygus"
Basic.Settings.Advanced.Audio.BufferingTime="Garso Sušvelninimo Laikas"
Basic.Settings.Advanced.Video.ColorFormat="Spalvos formatas"
-Basic.Settings.Advanced.Video.ColorSpace="YUV Spalvų Erdvė"
-Basic.Settings.Advanced.Video.ColorRange="YUV Spalvų Diapazonas"
Basic.Settings.Advanced.Video.ColorRange.Partial="Dalinis"
Basic.Settings.Advanced.Video.ColorRange.Full="Pilnas"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Garso prietaisas"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Numatytas"
Basic.Settings.Advanced.StreamDelay="Srauto Vėlavimas"
Basic.Settings.Advanced.StreamDelay.Duration="Trukmė (sekundėmis)"
Basic.Settings.Advanced.Network.BindToIP="Priskirti prie IP"
Basic.AdvAudio.Name="Prietaisas"
-Basic.AdvAudio.Volume="Garsumas (%)"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/mn-MN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/mn-MN.ini
Changed
Output.StartStreamFailed="Цацалт хийж эхлэхгээд амжилтгүй болсон"
+
Output.ConnectFail.Disconnected="Серверээс салгагдсан байна."
+
Output.RecordFail.Title="Бичлэг хийх эхлэхгээд амжилтгүй болсон"
Output.RecordError.Title="Бичлэгийн алдаа"
Output.RecordError.Msg="Бичлэг хийж байх үед тодорхойгүй алдаа гарлаа."
+
Basic.Main.AddSceneDlg.Title="Хөшиг нэмэх"
Basic.Main.AddSceneDlg.Text="Хөшигний нэрийг оруулна уу"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Бага зэрэгийн хоцрогдолтой горим"
Basic.AdvAudio.Name="Нэр"
-Basic.AdvAudio.Volume="Дууны Хэмжээ (%)"
Basic.AdvAudio.Balance="Тэнцвэржүүлэх"
Basic.Settings.Hotkeys="Богино холбооc"
About.License="Лиценз"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ms-MY.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ms-MY.ini
Changed
ConfirmRemove.TextMultiple="Adakah anda yakin untuk buang %1 barang?"
+
Output.ConnectFail.Title="Penyambungan gagal"
Output.ConnectFail.BadPath="Sambungan URL atau Laluan yang tidak sah. Sila semak semula tetapan anda to mengesahkan bahawa semuanya sah."
Output.ConnectFail.ConnectFailed="Penyambungan ke pelayan gagal"
Output.ConnectFail.Error="Ralat tidak dijangka berlaku sewaktu percubaan menyambung ke pelayan. Maklumat lanjut di dalam fail log."
Output.ConnectFail.Disconnected="Terputus daripada pelayan."
+
Output.RecordFail.Title="Gagal memulakan rakaman"
Output.RecordFail.Unsupported="Format pengeluaran tidak disokong atau tidak membenarkan lebih daripada satu trek audio. Sila semak tetapan anda dan cuba lagi."
Output.RecordNoSpace.Title="Ruang simpanan tidak cukup"
Basic.Main.PreviewConextMenu.Enable="Benarkan Pratonton"
+
ScaleFiltering="Skala Tapisan"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/nb-NO.ini
Changed
VerticalLayout="Loddrett oppsett"
Group="Gruppe"
DoNotShowAgain="Ikke vis denne igjen"
+Default="(Standard)"
+Calculating="Kalkulerer..."
AlreadyRunning.Title="OBS kjører allerede"
AlreadyRunning.Text="OBS kjører allerede! Med mindre du ikke mente dette, vennligst lukk alle eksisterende kjørende tilfeller av OBS før du kjører noen nye. Hvis du har satt OBS til å minimere til systemkurven, vennligst sjekk om den fortsatt kjører der."
AlreadyRunning.LaunchAnyway="Start uansett"
+DockCloseWarning.Title="Lukker festbart vindu"
+DockCloseWarning.Text="Du stengte nettopp et festbart vindu. Hvis du vil vise det igjen, kan du gå til Vis → Festede elementer i menylinjen."
Auth.Authing.Title="Autentiserer..."
+Auth.Authing.Text="Autentiserer med %1, vennligst vent..."
Auth.AuthFailure.Title="Autentiseringsfeil"
Auth.AuthFailure.Text="Mislyktes i å autentiseres opp mot %1:\n\n%2: %3"
Auth.InvalidScope.Title="Autentisering er påkrevd"
Auth.InvalidScope.Text="Autentiseringskravene til %1 har blitt forandret. Noen egenskaper vil kanskje ikke være tilgjengelige."
Auth.LoadingChannel.Title="Laster informasjon om kanalen..."
+Auth.LoadingChannel.Text="Laster kanalinformasjon for %1, vennligst vent..."
Auth.ChannelFailure.Title="Mislyktes i å laste inn kanalen"
Auth.ChannelFailure.Text="Mislyktes i å laste ned kanalinformasjon om %1\n\n%2: %3"
Auth.Chat="Nettprat"
Auth.StreamInfo="Informasjon om sendingen"
TwitchAuth.Stats="Twitch-statistikker"
+TwitchAuth.Feed="Twitch-aktivitetsfeed"
+TwitchAuth.TwoFactorFail.Title="Kunne ikke etterspørre strømme-nøkkel"
+TwitchAuth.TwoFactorFail.Text="OBS kunne ikke koble til din Twitch-konto. Vennligst forsikre at to-faktorautentisering er satt opp i dine <a href='https://www.twitch.tv/settings/security'>Twitch sikkerhetsinstillinger</a>, siden dette er nødvendig for å strømme."
Copy.Filters="Kopier filtre"
Paste.Filters="Lim inn filtre"
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Kringkastingsenkoder"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Opptakskoder"
Basic.AutoConfig.TestPage.Result.Header="Programmet har estimert at disse innstillingene er den mest ideelle for deg:"
-Basic.AutoConfig.TestPage.Result.Footer="For å bruke disse innstillingene, klikker du Bruk innstillinger. Å konfigurere veiviseren og prøv på nytt, klikker du tilbake. For å konfigurer innstillinger manuelt selv, klikk Avbryt og åpne innstillinger."
+Basic.AutoConfig.TestPage.Result.Footer="For å bruke disse innstillingene, klikker du Bruk innstillinger. Å konfigurere veiviseren og prøv på nytt, klikker du tilbake. For å konfigurer innstillinger manuelt selv, klikk Avbryt og åpne innstillinger."
Basic.Stats="Statistikk"
Basic.Stats.CPUUsage="CPU-bruk"
Basic.Stats.DroppedFrames="Tapte bilder (nettverk)"
Basic.Stats.MegabytesSent="Total datamengde ut"
Basic.Stats.Bitrate="Bitfrekvens"
+Basic.Stats.DiskFullIn="Lagringsplass fullt om (ca.)"
ResetUIWarning.Title="Er du sikker på at du vil tilbakestille grensesnittet?"
ResetUIWarning.Text="Å tilbakestille grensesnittet, vil skjule andre kildevisninger. Du vil måtte uskjule disse visningene fra visningsmenyen hvis du vil at de skal være synlige?\n\nEr du sikker på at du vil tilbakestille grensesnittet?"
ConfirmStop.Title="Vil du avslutte sendingen?"
ConfirmStop.Text="Er du sikker på at du vil avslutte sendingen?"
+ConfirmBWTest.Title="Start bredbåndstest?"
+ConfirmBWTest.Text="Du har konfigurert OBS i bredbåndstest-modus. Denne modusen tillater nettverkstesting uten at din kanal går live. Du må deaktivere modusen når du er ferdig å teste for at seere vil kunne se din strøm. \n\nVil du fortsette?"
ConfirmExit.Title="Avslutt OBS?"
ConfirmExit.Text="OBS-aktiviteter pågår akkurat nå. Alle sendinger og opptak vil bli stoppet. Er du sikker på at du vil avslutte?"
Output.StartReplayFailed="Kunne ikke å starte opp omspillingsbufferen"
Output.StartFailedGeneric="Oppstart av utdata har mislyktes. Vennligst se loggen for detaljer.\n\nBemerk at dersom du bruker NVENC- eller AMD-enkodere, pass på at skjermdriverne er oppdatert."
+
Output.ConnectFail.Title="Tilkobling mislyktes"
Output.ConnectFail.BadPath="Ugyldig filbane eller tilkoblings-URL. Vennligst sjekk at innstillingene dine er riktige."
Output.ConnectFail.ConnectFailed="Klarte ikke å koble til tjeneren"
Output.ConnectFail.Error="En uventet feil oppstod ved tilkobling til serveren. Detaljert informasjon kan du finne i loggfila."
Output.ConnectFail.Disconnected="Koblet fra tjeneren."
+Output.StreamEncodeError.Title="Kodingsfeil"
+Output.StreamEncodeError.Msg="En kodingsfeil skjedde under strømmingen."
+
Output.RecordFail.Title="Kunne ikke starte opptak"
Output.RecordFail.Unsupported="Utgangsformatet støttes enten ikke eller støtter ikke mer enn ett lydspor. Kontroller innstillingene og prøv igjen."
Output.RecordNoSpace.Title="Ikke nok diskplass"
Output.RecordNoSpace.Msg="Det er ikke nok diskplass til å fortsette opptaket."
Output.RecordError.Title="Innspillingsfeil"
Output.RecordError.Msg="Det oppstod en uspesifisert feil under opptaket."
+Output.RecordError.EncodeErrorMsg="En kodingsfeil skjedde under opptaket."
Output.ReplayBuffer.NoHotkey.Title="Ingen hurtigtast satt!"
Output.ReplayBuffer.NoHotkey.Msg="Ingen lagringshurtigtast er valgt for omspillingsbufferen. Vennligst velg en \"Lagre\"-hurtigknapp, sånn at den kan brukes til å lagre opptak."
Remux.SourceFile="OBS-opptak"
Remux.TargetFile="Målfil"
Remux.Remux="Remuks"
+Remux.Stop="Stopp remuxing"
Remux.ClearFinished="Tøm fullførte elementer"
Remux.ClearAll="Tøm alle elementer"
Remux.OBSRecording="OBS-opptak"
Remux.FinishedTitle="Remuksing ferdig"
Remux.Finished="Opptak remukset"
Remux.FinishedError="Opptak remukset, men filen kan være ufullstendig."
+Remux.SelectRecording="Velg OBS-opptak..."
Remux.SelectTarget="Velg målfil..."
Remux.FileExistsTitle="Målfiler finnes allerede"
Remux.FileExists="De følgende målfilene finnes allerede. Vil du erstatte dem?"
Basic.Main.PreviewConextMenu.Enable="Aktiver forhåndsvisning"
+Basic.Main.Preview.Disable="Deaktiver forhåndsvisning"
+
ScaleFiltering="Skaleringsfiltrering"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilineær"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
+ScaleFiltering.Area="Område"
Deinterlacing="Avsammenfletting"
Deinterlacing.Discard="Forkast"
Basic.MainMenu.Edit.Transform.FitToScreen="Tilpass skjerm (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="&Strekk til skjerm"
Basic.MainMenu.Edit.Transform.CenterToScreen="Midstill på skjermen (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Sentrer vertikalt"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Sentrer horisontalt"
Basic.MainMenu.Edit.Order="Arrangér (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Flytt opp (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Flytt ne&d"
Basic.Settings.General.OverflowSelectionHidden="Vis overflyt selv når kilden er usynlig"
Basic.Settings.General.SwitchOnDoubleClick="Dobbeltklikking vil gå til scenen"
Basic.Settings.General.StudioPortraitLayout="Aktiver portrett/loddrett vindu"
+Basic.Settings.General.TogglePreviewProgramLabels="Vis etikett for forhåndsvisning/program"
Basic.Settings.General.Multiview="Flervisning"
Basic.Settings.General.Multiview.MouseSwitch="Klikk for å bytte mellom scener"
Basic.Settings.General.Multiview.DrawSourceNames="Vis scenenes navn"
Basic.Settings.Stream="Strøm"
Basic.Settings.Stream.StreamType="Strømmetype"
+Basic.Settings.Stream.Custom.UseAuthentication="Bruk autentisering"
Basic.Settings.Stream.Custom.Username="Brukernavn"
Basic.Settings.Stream.Custom.Password="Passord"
+Basic.Settings.Stream.BandwidthTestMode="Aktiver båndbreddetest-modus"
Basic.Settings.Output="Utgang"
Basic.Settings.Output.Format="Opptaksformat"
Basic.Settings.Output.RetryDelay="Opphold mellom tilkoblingsforsøk (sekunder)"
Basic.Settings.Output.MaxRetries="Høyst antall tilkoblingsforsøk"
Basic.Settings.Output.Advanced="Aktiver avanserte koderinnstillinger"
+Basic.Settings.Output.EncoderPreset="Kodingsinstillinger"
Basic.Settings.Output.CustomEncoderSettings="Egendefinerte koderinnstillinger"
Basic.Settings.Output.CustomMuxerSettings="Egendefinerte mukserinnstillinger"
Basic.Settings.Output.NoSpaceFileName="Lag filnavn uten mellomrom"
Basic.Settings.Audio="Lyd"
Basic.Settings.Audio.SampleRate="Samplingsfrekvens"
Basic.Settings.Audio.Channels="Kanaler"
-Basic.Settings.Audio.MeterDecayRate="Audiometerets forfallsfrekvens"
+Basic.Settings.Audio.Meters="Metre"
+Basic.Settings.Audio.MeterDecayRate="Avfallshastighet"
Basic.Settings.Audio.MeterDecayRate.Fast="Raskt"
Basic.Settings.Audio.MeterDecayRate.Medium="Middels (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Tregt (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Hvis du strømmer, sjekk om strømmetjenesten din støtter både surround-lydinnføring og surround-lydavspilling. Twitch, Facebook 360 Live, Mixer RTMP, og Smashcast er eksempler hvor surroundlyd er full støttet. Selv om Facebook Live og YouTube Live begge støtter surround-innføring, nedmikser Facebook Live det ned til Stereo, og YouTube Live spiller bare av to kanaler.\n\nOBS-lydfiltre er kompatible med surroundlyd, selv om VST-tilleggsstøtte ikke er garantert."
Basic.Settings.Audio.MultichannelWarning.Title="Vil du aktivere surround-lyd?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Er du sikker på at du vil aktivere surround-lyd?"
+Basic.Settings.Audio.Devices="Enheter"
Basic.Settings.Audio.DesktopDevice="Skrivebordslyd"
Basic.Settings.Audio.DesktopDevice2="Skrivebordslyd 2"
Basic.Settings.Audio.AuxDevice="Mikrofon/Aux"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/Aux 4"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/Aux"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/Aux"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/Aux"
Basic.Settings.Audio.EnablePushToMute="Aktiver demp-ved-trykk"
Basic.Settings.Audio.PushToMuteDelay="Demp-ved-trykk forsinkelse"
Basic.Settings.Audio.EnablePushToTalk="Aktiver snakk-ved-trykk"
Basic.Settings.Audio.PushToTalkDelay="Snakk-ved-trykk forsinkelse"
Basic.Settings.Audio.UnknownAudioDevice="[Enhet ikke tilkoblet eller ikke tilgjengelig]"
+Basic.Settings.Audio.Disabled="Deaktivert"
Basic.Settings.Advanced="Avansert"
Basic.Settings.Advanced.General.ProcessPriority="Prosessprioritet"
Basic.Settings.Advanced.FormatWarning="Advarsel: Fargeformater andre enn NV12 er ment for opptak. Disse formatene anbefales ikke ved strømming, da det fører til økt prosessorbruk som følge av fargeformatkonvertering."
Basic.Settings.Advanced.Audio.BufferingTime="Lydbuffertid"
Basic.Settings.Advanced.Video.ColorFormat="Fargeformat"
-Basic.Settings.Advanced.Video.ColorSpace="YUV fargerom"
-Basic.Settings.Advanced.Video.ColorRange="YUV fargespekter"
+Basic.Settings.Advanced.Video.ColorSpace="Fargerom"
+Basic.Settings.Advanced.Video.ColorRange="Fargespekter"
Basic.Settings.Advanced.Video.ColorRange.Partial="Delvis"
Basic.Settings.Advanced.Video.ColorRange.Full="Full"
Basic.Settings.Advanced.Audio.MonitoringDevice="Lydenhet for overvåking"
Basic.AdvAudio="Avanserte lydinnstillinger"
Basic.AdvAudio.Name="Navn"
-Basic.AdvAudio.Volume="Volum (%)"
+Basic.AdvAudio.Volume="Volum"
Basic.AdvAudio.Mono="Nedmiks til mono"
Basic.AdvAudio.Balance="Balanse"
Basic.AdvAudio.SyncOffset="Synkroniseringsforskyvning (ms)"
Hotkeys.AppleKeypadDecimal="."
Hotkeys.AppleKeypadEqual="= (talltastatur)"
Hotkeys.MouseButton="Museknapp %1"
+Hotkeys.Escape="Esc"
Mute="Demp"
Unmute="Udemp"
OutputWarnings.NoTracksSelected="Du må velge minst ett spor"
OutputWarnings.MultiTrackRecording="Advarsel: enkelte formater (som FLV) støtter ikke flere spor per opptak"
+OutputWarnings.MP4Recording="Advarsel: Opptak lagret i MP4/MOV vil bli slettet dersom filen ikke kan fullføres (f.eks. som følge av BSOD, tap av strøm, osv.) Hvis du vil registere flere lydspor, vurder å bruke MKV og remuks inspillingen til MP4/MOV etter at det er ferdig (Fil → Remuks opptak)"
FinalScene.Title="Slett scene"
FinalScene.Text="Det må være minst én scene."
NoSources.Title="Ingen kilder"
NoSources.Text="Det ser ut som du ikke har lagt til noen videokilder ennå, så du vil kun sende en blank skjerm. Er du sikker på at du vil gjøre dette?"
NoSources.Text.AddSource="Du kan legge til kilder ved å klikke på +-ikonet under Kilder-boksen i hovedvinduet til enhver tid."
+NoSources.Label="Du har ingen kilder. \nKlikk + knappen nedenfor,\neller høyre-klikk her for å legge til."
ChangeBG="Velg farge"
CustomColor="Egendefinert farge"
About="Om"
About.Info="OBS Studio er en fri og åpen-kildet videoopptaks- og direktesendings-programvare."
+About.Donate="Bidra til projektet"
About.GetInvolved="Involver deg"
About.Authors="Skapere"
About.License="Lisens"
ResizeOutputSizeOfSource.Text="Grunn- og utdata-oppløsningene vil bli gitt samme størrelse som den nåværende kilden."
ResizeOutputSizeOfSource.Continue="Vil du fortsette?"
+PreviewTransition="Forhåndsvis overgang"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/nl-NL.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/nl-NL.ini
Changed
VerticalLayout="Verticale Lay-out"
Group="Groep"
DoNotShowAgain="Niet opnieuw tonen"
+Default="(Standaard)"
+Calculating="Berekenen..."
AlreadyRunning.Title="OBS is al actief"
AlreadyRunning.Text="OBS is al actief! Tenzij je dit wilde doen, sluit a.u.b. alle reeds draaiende instanties van OBS voor je een nieuwe instantie opstart. Als je OBS hebt ingesteld om naar het systeemvak te minimaliseren, controleer dan of hij daar nog uitgevoerd wordt."
Auth.StreamInfo="Stream-informatie"
TwitchAuth.Stats="Twitch statistieken"
TwitchAuth.Feed="Twitch activiteitenfeed"
+TwitchAuth.TwoFactorFail.Title="Kon stream key niet opvragen"
+TwitchAuth.TwoFactorFail.Text="OBS kon geen verbinding maken met uw Twitch account. Zorg ervoor dat er twee-factor authenticatie is ingesteld in uw <a href='https://www.twitch.tv/settings/security'>Twitch beveiligingsinstellingen</a>, omdat dit nodig is om te streamen."
Copy.Filters="Kopieer Filters"
Paste.Filters="Plak filters"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Geef de voorkeur aan hardware-encoding"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-encoding elimineert het meeste CPU-gebruik, maar heeft wellicht een hogere bitrate nodig om hetzelfde kwaliteitsniveau te bereiken."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamwaarschuwing"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="De bandbreedte-test is bezig met het streamen van willekeurige videogegevens zonder audio naar uw kanaal. Indien mogelijk is het aanbevolen om tijdelijk het opslaan van video's van streams uit te schakelen en de stream privé te maken tot de test is voltooid. Doorgaan?"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="De bandbreedte-test is bezig met het streamen van willekeurige videogegevens zonder audio naar uw kanaal. Indien mogelijk is het aanbevolen om tijdelijk het opslaan van video's van streams uit te schakelen en de stream privé te maken tot de test is voltooid. Doorgaan?"
Basic.AutoConfig.TestPage="Eindresultaat"
Basic.AutoConfig.TestPage.SubTitle.Testing="Het programma voert nu een reeks testen uit om de meest ideale instellingen in te schatten"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testen is afgerond"
Basic.Stats.DroppedFrames="Gedropte Frames (Netwerk)"
Basic.Stats.MegabytesSent="Totale Gegevensuitvoer"
Basic.Stats.Bitrate="Bitrate"
+Basic.Stats.DiskFullIn="Schijf vol (ca.)"
ResetUIWarning.Title="Weet u zeker dat u de UI wilt herstellen?"
ResetUIWarning.Text="Herstellen van de UI zal extra docks verbergen. Als u deze docks toch wilt zien, dan moet u ze in via het beeld menu weer zichtbaar maken.\n\nWeet u zeker dat u de UI wilt herstellen?"
Output.StartReplayFailed="Het starten van de replay buffer is mislukt"
Output.StartFailedGeneric="Het starten van de uitvoer is mislukt. Controleer de logbestanden voor meer informatie.\n\nLet op: Als je gebruik maakt van de NVENC of AMD encoders, controleer of de drivers up to date zijn."
+
Output.ConnectFail.Title="Kan geen verbinding maken"
Output.ConnectFail.BadPath="Ongeldig pad of verbindings-url. Controleer a.u.b. of je instellingen geldig zijn."
Output.ConnectFail.ConnectFailed="Kan geen verbinding maken met de server"
Output.ConnectFail.Error="Er is een onverwachte fout opgetreden bij het verbinden met de server. Meer informatie in het logbestand."
Output.ConnectFail.Disconnected="verbinding met de server gesloten."
+Output.StreamEncodeError.Title="Coderingsfout"
+Output.StreamEncodeError.Msg="Er is een coderingsfout opgetreden tijdens het streamen."
+
Output.RecordFail.Title="Kon de opname niet starten"
Output.RecordFail.Unsupported="Het outputformaat wordt niet ondersteund, of ondersteunt niet meer dan een audiotrack. Controleer je instellingen en probeer het opnieuw."
Output.RecordNoSpace.Title="Onvoldoende schijfruimte"
Output.RecordNoSpace.Msg="Er is niet voldoende schijfruimte om door te gaan met opnemen."
Output.RecordError.Title="Opnamefout"
Output.RecordError.Msg="Er is een onbekende fout opgetreden tijdens het opnemen."
+Output.RecordError.EncodeErrorMsg="Er is een coderingsfout opgetreden tijdens het opnemen."
Output.ReplayBuffer.NoHotkey.Title="Er is geen sneltoets ingesteld!"
Output.ReplayBuffer.NoHotkey.Msg="Er is geen opslaan sneltoets ingesteld voor de replay buffer. Zet aub de \"Opslaan\" sneltoets voor het opslaan van replay-opnames."
Basic.Main.PreviewConextMenu.Enable="Preview inschakelen"
+Basic.Main.Preview.Disable="Preview uitschakelen"
+
ScaleFiltering="Schaal-filter"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
Basic.MainMenu.Edit.Transform.FitToScreen="In scherm passen (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Uitrekken naar scherm (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Centeren op scherm (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Verticaal centreren"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Horizontaal centreren"
Basic.MainMenu.Edit.Order="V&olgorde"
Basic.MainMenu.Edit.Order.MoveUp="Omhoog Schuiven (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Omlaag Schuiven (&D)"
Basic.Settings.Video.Numerator="Teller"
Basic.Settings.Video.Denominator="Noemer"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Ongeldige resolutiewaarde. Moet [breedte] x [hoogte] zijn (bijv. 1920 x 1080)"
+Basic.Settings.Video.InvalidResolution="Ongeldige resolutiewaarde. Moet [breedte] x [hoogte] zijn (bijv. 1920 x 1080)"
Basic.Settings.Video.CurrentlyActive="Video-uitvoer is momenteel actief. Schakel a.u.b. alle uitvoeren uit om video-instellingen aan te passen."
Basic.Settings.Video.DisableAero="Aero uitschakelen"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Sample Rate"
Basic.Settings.Audio.Channels="Kanalen"
-Basic.Settings.Audio.MeterDecayRate="Vervalsnelheid Volumemeter"
+Basic.Settings.Audio.Meters="Meters"
+Basic.Settings.Audio.MeterDecayRate="Verval snelheid"
Basic.Settings.Audio.MeterDecayRate.Fast="Snel"
Basic.Settings.Audio.MeterDecayRate.Medium="Gemiddeld (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Traag (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Als je streamt, controleer dan of je streaming service zowel surround sound ingest als surround sound afspelen ondersteunt. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast zijn voorbeelden waar surround sound volledig ondersteund is. Alhoewel Facebook Live en Youtube Live beide surround ingest ondersteunen, downmixt Facebook Live het naar stereo, terwijl Youtube Live slechts twee kanalen afspeelt.\n\nOBS audio filters kunnen overweg met surround sound, maar ondersteuning bij VST plugins is niet gegarandeerd."
Basic.Settings.Audio.MultichannelWarning.Title="Surround sound audio inschakelen?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Weet je zeker dat je surround sound audio wil inschakelen?"
-Basic.Settings.Audio.DesktopDevice="Desktop Audioapparaat"
-Basic.Settings.Audio.DesktopDevice2="Desktop Audioapparaat 1"
+Basic.Settings.Audio.Devices="Apparaten"
+Basic.Settings.Audio.DesktopDevice="Desktop Audio"
+Basic.Settings.Audio.DesktopDevice2="Desktop Audio 2"
Basic.Settings.Audio.AuxDevice="Mic/Aux Audioapparaat"
Basic.Settings.Audio.AuxDevice2="Mic/Aux Audioapparaat 2"
Basic.Settings.Audio.AuxDevice3="Mic/Aux Audioapparaat 3"
Basic.Settings.Advanced.FormatWarning="Waarschuwing: Andere kleurformaten dan NV12 zijn hoofdzakelijk bedoeld voor opnemen en worden niet aanbevolen om mee te streamen. Streamen kan verhoogd CPU-gebruik opleveren vanwege kleurformaatconversie."
Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffertijd"
Basic.Settings.Advanced.Video.ColorFormat="Kleurindeling"
-Basic.Settings.Advanced.Video.ColorSpace="YUV-Kleurruimte"
-Basic.Settings.Advanced.Video.ColorRange="YUV-Kleurbereik"
+Basic.Settings.Advanced.Video.ColorSpace="Kleurruimte"
+Basic.Settings.Advanced.Video.ColorRange="Kleurbereik"
Basic.Settings.Advanced.Video.ColorRange.Partial="Partial"
Basic.Settings.Advanced.Video.ColorRange.Full="Full"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Audio monitoring apparaat"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring apparaat"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standaard"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Schakel Windows audio ducking uit"
Basic.Settings.Advanced.StreamDelay="Streamvertraging"
Basic.AdvAudio="Geavanceerde Audioinstellingen"
Basic.AdvAudio.Name="Naam"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
Basic.AdvAudio.Mono="Downmixen naar Mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
Hotkeys.AppleKeypadDecimal=". (Keypad)"
Hotkeys.AppleKeypadEqual="= (Keypad)"
Hotkeys.MouseButton="Muis %1"
+Hotkeys.Escape="Esc"
Mute="Mute"
Unmute="Unmute"
NoSources.Title="Geen bronnen"
NoSources.Text="Er zijn nog geen video bronnen toegevoegd, er zal dus een leeg scherm weergegeven worden. Weet je zeker dat je dit wilt doen?"
NoSources.Text.AddSource="Bronnen kunnen toegevoegd worden door op het + icoon onder het vak \"Bronnen\" in het hoofdvenster te klikken."
+NoSources.Label="U heeft geen bronnen.\nKlik op de + knop hieronder\nof rechtsklik hier om er toe te voegen."
ChangeBG="Kleur instellen"
CustomColor="Aangepaste kleur"
ResizeOutputSizeOfSource.Text="De basis en uitvoer resoluties worden aangepast naar de grootte van de huidige bron."
ResizeOutputSizeOfSource.Continue="Wil je doorgaan?"
+PreviewTransition="Voorbeeld overgang"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/nn-NO.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/nn-NO.ini
Changed
+
+
Basic.DesktopDevice1="Skrivebordslyd"
Basic.AuxDevice1="Mikrofon/Aux"
Basic.AuxDevice2="Mikrofon/Aux 2"
+
AddProfile.Title="Legg til profil"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/pa-IN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/pa-IN.ini
Changed
+
+
+
+
obs-studio-23.1.0.tar.xz/UI/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/pl-PL.ini
Changed
Close="Zamknij"
Save="Zapisz"
Discard="Odrzuć"
-Disable="Wyłączone"
+Disable="Wyłącz"
Yes="Tak"
No="Nie"
Add="Dodaj"
Enable="Włącz"
DisableOSXVSync="Wyłącz synchronizację pionową OSX"
ResetOSXVSyncOnExit="Przywróć synchronizację pionową OSX po zamknięciu aplikacji"
-HighResourceUsage="Enkodowanie przeciążone! Zmień ustawienia video lub użyj szybszego presetu enkodowania."
+HighResourceUsage="Enkodowanie przeciążone! Zmień ustawienia wideo lub użyj szybszego presetu kodowania."
Transition="Efekt przejścia"
QuickTransitions="Szybkie efekty przejścia"
Left="Od lewej"
VerticalLayout="Układ pionowy"
Group="Grupa"
DoNotShowAgain="Nie pokazuj ponownie"
+Default="(Domyślnie)"
+Calculating="Obliczanie..."
AlreadyRunning.Title="OBS jest już uruchomiony"
AlreadyRunning.Text="OBS jest już uruchomiony! Sprawdź wszystkie uruchomione wystąpienia OBS zanim uruchomisz go jeszcze raz. Jeżeli OBS jest zminimalizowany do zasobnika systemowego, sprawdź czy nie jest uruchomiony także w tym miejscu."
Auth.StreamInfo="Informacja o streamie"
TwitchAuth.Stats="Statystyki Twitch"
TwitchAuth.Feed="Lista aktywności Twitch"
+TwitchAuth.TwoFactorFail.Title="Nie można pobrać klucza strumienia"
+TwitchAuth.TwoFactorFail.Text="Powiązanie Twojego konta Twitch w OBS nie udało się. Sprawdź, czy masz włączone uwierzytelnianie dwuskładnikowe w <a href='https://www.twitch.tv/settings/security'>ustawieniach bezpieczeństwa Twitcha</a>. Wymagane jest to do streamowania przez tę platformę."
Copy.Filters="Kopiuj filtry"
Paste.Filters="Wklej filtry"
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Enkoder streamu"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Enkoder nagrywania"
Basic.AutoConfig.TestPage.Result.Header="Aplikacja ustaliła poniższe ustawienia jako najbardziej idealne dla Ciebie:"
-Basic.AutoConfig.TestPage.Result.Footer="Aby użyć tych ustawień, kliknij przycisk Zastosuj ustawienia. Aby ponownie skonfigurować kreatora i spróbować ponownie, kliknij przycisk Wstecz. Aby ręcznie skonfigurować ustawienia, kliknij przycisk Anuluj i otwórz Ustawienia."
+Basic.AutoConfig.TestPage.Result.Footer="Aby użyć tych ustawień, kliknij przycisk Zastosuj ustawienia. Aby ponownie skonfigurować kreatora i spróbować ponownie, kliknij przycisk Wstecz. Aby ręcznie skonfigurować ustawienia, kliknij przycisk Anuluj i otwórz Ustawienia."
Basic.Stats="Statystyki"
Basic.Stats.CPUUsage="Użycie procesora"
Basic.Stats.DroppedFrames="Zgubione klatki (sieć)"
Basic.Stats.MegabytesSent="Całkowite dane wyjściowe"
Basic.Stats.Bitrate="Przepływność (bitrate)"
+Basic.Stats.DiskFullIn="Dysk pełny za (około)"
ResetUIWarning.Title="Czy na pewno chcesz zresetować wygląd aplikacji?"
ResetUIWarning.Text="Reset ustawień wyglądu aplikacji ukryje dodatkowe okienka. Wymagane będzie ich przywrócenie z menu wyglądu, jeżeli mają być widoczne.\n\nCzy na pewno chcesz zresetować wygląd aplikacji?"
Updater.NoUpdatesAvailable.Text="Brak dostępnych aktualizacji"
Updater.FailedToLaunch="Nie udało się uruchomić aktualizacji"
Updater.GameCaptureActive.Title="Przechwytywanie gry aktywne"
-Updater.GameCaptureActive.Text="Przechwytywanie gry jest aktywne. Proszę o zamknięcie wszelkich przechwytywanych gier/aplikacji (lub ponowne uruchomienie systemu) i spróbowanie później."
+Updater.GameCaptureActive.Text="Biblioteka zaczepiająca przechwytywanie gry jest w użyciu. Proszę zamknąć wszelkie przechwytywane gry lub inne programy (ewentualnie zrestartować system) i spróbować ponownie."
QuickTransitions.SwapScenes="Zamień podgląd/wyjście scen po przejściu"
QuickTransitions.SwapScenesTT="Zamienia podgląd i wyjście scen po przejściu (jeżeli wyjście oryginalnej sceny istnieje).\nNie przywraca to zmian jakie zostały dokonane w oryginalnej scenie."
Output.StartReplayFailed="Nie udało się rozpocząć nagrywania powtórek"
Output.StartFailedGeneric="Nie udało się uruchomić wyjścia. Sprawdź szczegóły w plikach dziennika.\n\nUwaga: Sprawdź, czy posiadasz aktualne sterowniki karty graficznej, jeżeli używasz enkodera NVENC lub AMD."
+
Output.ConnectFail.Title="Nie udało się połączyć"
Output.ConnectFail.BadPath="Nieprawidłowa ścieżka lub adres URL połączenia. Sprawdź poprawność ustawień."
Output.ConnectFail.ConnectFailed="Nie udało się połączyć z serwerem"
Output.ConnectFail.InvalidStream="Nie można uzyskać dostępu do wybranego kanału lub klucza streamu. Proszę sprawdzić klucz streamu. Jeżeli jest poprawny, to problemem może być połączenie do serwera."
-Output.ConnectFail.Error="Wystąpił nieoczekiwany błąd podczas próby połączenia z serwerem. Więcej informacji w pliku dziennika."
+Output.ConnectFail.Error="Wystąpił nieoczekiwany błąd podczas próby połączenia z serwerem. Więcej informacji w pliku dziennika."
Output.ConnectFail.Disconnected="Utracono połączenie z serwerem."
+Output.StreamEncodeError.Title="Błąd enkodowania"
+Output.StreamEncodeError.Msg="W trakcie transmisji nastąpił błąd enkodowania."
+
Output.RecordFail.Title="Nie udało się rozpocząć nagrywania"
Output.RecordFail.Unsupported="Format wyjściowy jest nieobsługiwany lub nie obsługuje więcej niż jednej ścieżki dźwiękowej. Sprawdź ustawienia i spróbuj ponownie."
Output.RecordNoSpace.Title="Za mało miejsca na dysku"
Output.RecordNoSpace.Msg="Za mało miejsca na dysku, aby kontynuować nagrywanie."
Output.RecordError.Title="Błąd nagrywania"
Output.RecordError.Msg="Wystąpił nieokreślony błąd podczas nagrywania."
+Output.RecordError.EncodeErrorMsg="W trakcie nagrywania nastąpił błąd enkodowania."
Output.ReplayBuffer.NoHotkey.Title="Brak klawisza skrótu!"
Output.ReplayBuffer.NoHotkey.Msg="Klawisz skrótu do zapisu nagranej powtórki nie został ustawiony. Ustaw skrót dla opcji \"Zapisz powtórkę\", aby móc używać go do zapisywania tego typu nagrań."
Basic.Main.PreviewConextMenu.Enable="Włącz podgląd"
+Basic.Main.Preview.Disable="Wyłącz podgląd"
+
ScaleFiltering="Filtrowanie skalowania"
ScaleFiltering.Point="Punktowe"
ScaleFiltering.Bilinear="Dwuliniowe"
Basic.MainMenu.Edit.Transform.FitToScreen="Dopasuj do ekranu (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Rozciągnij do ekranu (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Wyśrodkuj na ekranie (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Wyśrodkuj w pionie"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Wyśrodkuj w poziomie"
Basic.MainMenu.Edit.Order="K&olejność"
Basic.MainMenu.Edit.Order.MoveUp="Przes&uń w górę"
Basic.MainMenu.Edit.Order.MoveDown="Przesuń w &dół"
Basic.Settings.Output.ReplayBuffer.Suffix="Sufiks"
Basic.Settings.Output.Simple.SavePath="Ścieżka pliku"
Basic.Settings.Output.Simple.RecordingQuality="Jakość nagrywania"
-Basic.Settings.Output.Simple.RecordingQuality.Stream="Taki sam jak stream"
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Taka sama jak stream"
Basic.Settings.Output.Simple.RecordingQuality.Small="Wysoka jakość, średni rozmiar pliku"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Jakość nie do odróżnienia, duża wielkość pliku"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Jakość bezstratna, ogromna wielkość pliku"
Basic.Settings.Video.Numerator="Licznik"
Basic.Settings.Video.Denominator="Mianownik"
Basic.Settings.Video.Renderer="Renderowanie"
-Basic.Settings.Video.InvalidResolution="Nieprawidłowa rozdzielczość. Wartość powinna mieć format [szerokość]x[wysokość] (np. 1920x1080)"
+Basic.Settings.Video.InvalidResolution="Nieprawidłowa rozdzielczość. Wartość powinna mieć format [szerokość]x[wysokość] (np. 1920x1080)"
Basic.Settings.Video.CurrentlyActive="Wyjście wideo jest aktywne. Należy wyłączyć wszelkie wyjścia, aby zmienić ustawienia wideo."
Basic.Settings.Video.DisableAero="Wyłącz Aero"
Basic.Settings.Audio="Dźwięk"
Basic.Settings.Audio.SampleRate="Częstotliwość próbkowania"
Basic.Settings.Audio.Channels="Kanały"
-Basic.Settings.Audio.MeterDecayRate="Szybkość powrotu miernika audio"
+Basic.Settings.Audio.Meters="Mierniki"
+Basic.Settings.Audio.MeterDecayRate="Czas zanikania"
Basic.Settings.Audio.MeterDecayRate.Fast="Szybko"
Basic.Settings.Audio.MeterDecayRate.Medium="Średnio (PPM typu I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Wolno (PPM typu II)"
Basic.Settings.Audio.MultichannelWarning="W przypadku streamowania sprawdź, czy docelowa usługa obsługuje wielokanałowe wejście oraz odtwarzanie dźwięku surround. Twitch, Facebook, 360 Live, Mixer RTMP, Smashcast to przykłady usług obsługujących dźwięk wielokanałowy. O ile Facebook Live i Youtube Live obsługują wejście dźwięku wielokanałowego, to w przypadku odtwarzania Facebook miksuje kanału do stereo a Youtube Live odtwarza tylko dwa kanały.\n\nFiltry dźwiękowe OBS są w pełni kompatybilne z dźwiękiem kanałowym, natomiast wsparcie pluginów VST nie jest gwarantowane."
Basic.Settings.Audio.MultichannelWarning.Title="Włączyć dźwięk przestrzenny?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Czy na pewno chcesz włączyć dźwięk przestrzenny?"
-Basic.Settings.Audio.DesktopDevice="Urządzenie Audio"
-Basic.Settings.Audio.DesktopDevice2="Urządzenie Audio 2"
+Basic.Settings.Audio.Devices="Urządzenia"
+Basic.Settings.Audio.DesktopDevice="Urządzenie audio"
+Basic.Settings.Audio.DesktopDevice2="Urządzenie audio 2"
Basic.Settings.Audio.AuxDevice="Mikrofon/dodatkowe urządzenie audio"
Basic.Settings.Audio.AuxDevice2="Mikrofon/dodatkowe urządzenie audio 2"
Basic.Settings.Audio.AuxDevice3="Mikrofon/dodatkowe urządzenie audio 3"
Basic.Settings.Advanced.FormatWarning="Ostrzeżenie: Formaty koloru inne niż NV12 przeznaczone są głównie do nagrywania i nie są zalecane podczas przesyłania strumieniowego. Użycie innych formatów koloru podczas przesyłania strumieniowego wymagać będzie przekształcenia formatu w locie, co może znacząco zwiększyć obciążenie procesora."
Basic.Settings.Advanced.Audio.BufferingTime="Czas buforowania dźwięku"
Basic.Settings.Advanced.Video.ColorFormat="Format koloru"
-Basic.Settings.Advanced.Video.ColorSpace="Przestrzeń kolorów YUV"
-Basic.Settings.Advanced.Video.ColorRange="Zakres kolorów YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Przestrzeń kolorów"
+Basic.Settings.Advanced.Video.ColorRange="Zakres kolorów"
Basic.Settings.Advanced.Video.ColorRange.Partial="Częściowy"
Basic.Settings.Advanced.Video.ColorRange.Full="Pełny"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Monitorowane urządzenie audio"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Urządzenie do monitorowania audio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Domyślne"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Wyłącz systemowe obniżanie głośności innych źródeł dźwięków"
Basic.Settings.Advanced.StreamDelay="Opóźnienie streamu"
Basic.AdvAudio="Zaawansowane ustawienia dźwięku"
Basic.AdvAudio.Name="Nazwa"
-Basic.AdvAudio.Volume="Głośność (%)"
+Basic.AdvAudio.Volume="Głośność"
Basic.AdvAudio.Mono="Downmix do Mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Przesunięcie dźwięku (ms)"
NoSources.Title="Brak źródeł"
NoSources.Text="Wygląda na to, że nie dodano żadnych źródeł video. Na wyjściu otrzymasz tylko czarny ekran. Czy na pewno chcesz to zrobić?"
NoSources.Text.AddSource="Źródła dodać można w każdym momencie klikając przycisk + w okienku Źródła głównego ekranu aplikacji."
+NoSources.Label="Nie masz żadnych źródeł.\nKliknij przycisk + poniżej lub kliknij tutaj\n prawym przyciskiem myszy, aby dodać źródło."
ChangeBG="Ustaw kolor"
CustomColor="Kolor niestandardowy"
ResizeOutputSizeOfSource.Text="Rozdzielczość bazowa i docelowa zostaną zmienione do rozdzielczości bieżącego źródła."
ResizeOutputSizeOfSource.Continue="Czy chcesz kontynuować?"
+PreviewTransition="Podgląd efektu przejścia"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/pt-BR.ini
Changed
VerticalLayout="Disposição vertical"
Group="Grupo"
DoNotShowAgain="Não mostrar novamente"
+Default="(Padrão)"
+Calculating="Calculando..."
AlreadyRunning.Title="OBS já está em execução"
AlreadyRunning.Text="OBS já está em execução! A menos que você tenha a intenção de fazer isso, por favor, feche todas as instâncias existentes do OBS antes de tentar executar uma nova. Se você tiver definido para minimizar o OBS na bandeja do sistema, verifique se ainda está lá em execução."
Auth.StreamInfo="Informação da transmissão"
TwitchAuth.Stats="Estatísticas da Twitch"
TwitchAuth.Feed="Feed de Atividade do Twitch"
+TwitchAuth.TwoFactorFail.Title="Não foi possível consultar a chave de transmissão"
+TwitchAuth.TwoFactorFail.Text="O OBS não foi capaz de se conectar à sua conta do Twitch. Por favor, certifique-se de que a autenticação de dois fatores está configurada em suas <a href='https://www.twitch.tv/settings/security'>Configurações de segurança do Twitch</a> pois isso é necessário para transmitir."
Copy.Filters="Copiar Filtros"
Paste.Filters="Colar Filtros"
BandwidthTest.Region.Asia="Ásia"
BandwidthTest.Region.Other="Outro"
-Basic.FirstStartup.RunWizard="Você gostaria de executar o assistente de configuração? Você também pode definir manualmente suas configurações clicando no botão \"Configurações\" na janela principal."
+Basic.FirstStartup.RunWizard="Você gostaria de executar o assistente de configuração? Você também pode definir manualmente suas configurações clicando no botão \"Configurações\" na janela principal."
Basic.FirstStartup.RunWizard.NoClicked="Se você mudar de ideia, você pode executar o assistente de configuração a qualquer momento no menu \"Ferramentas\"."
Basic.AutoConfig="Assistente de configuração"
Basic.AutoConfig.TestPage.SubTitle.Testing="O programa está executando um conjunto de testes para estimar as configurações ideais"
Basic.AutoConfig.TestPage.SubTitle.Complete="Teste completo"
Basic.AutoConfig.TestPage.TestingBandwidth="Executando teste de largura de banda, isso pode levar alguns minutos..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectando a: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectando a: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Falha ao se conectar a qualquer servidor, verifique sua conexão com a Internet e tente novamente."
Basic.AutoConfig.TestPage.TestingBandwidth.Server="Teste de largura de banda para: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="Testando codificador de transmissão, isto pode demorar um minuto..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Codificador da transmissão"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificador da Gravação"
Basic.AutoConfig.TestPage.Result.Header="O programa determinou que estas configurações estimadas são as mais ideais para você:"
-Basic.AutoConfig.TestPage.Result.Footer="Para usar essas configurações, clique em \"Aplicar Configurações\". Para reconfigurar o assistente e tentar novamente, clique em \"Voltar\". Para definir manualmente, clique em \"Cancelar\" e abra as \"Configurações\"."
+Basic.AutoConfig.TestPage.Result.Footer="Para usar essas configurações, clique em \"Aplicar Configurações\". Para reconfigurar o assistente e tentar novamente, clique em \"Voltar\". Para definir manualmente, clique em \"Cancelar\" e abra as \"Configurações\"."
Basic.Stats="Estatísticas"
Basic.Stats.CPUUsage="Uso de CPU"
Basic.Stats.DroppedFrames="Quadros Perdidos (Rede)"
Basic.Stats.MegabytesSent="Saída Total de Dados"
Basic.Stats.Bitrate="Taxa de bits"
+Basic.Stats.DiskFullIn="Disco completo em (aprox.)"
ResetUIWarning.Title="Tem certeza de que deseja redefinir a interface do usuário?"
ResetUIWarning.Text="Redefinir a interface irá ocultar as âncoras adicionais. Você precisará mostra-las indo no menu de visualização se quiser que elas se tornem visíveis novamente.\n\nTem certeza de que deseja redefinir a interface do usuário?"
Updater.NoUpdatesAvailable.Text="Não há atualizações disponíveis"
Updater.FailedToLaunch="Falha ao iniciar o atualizador"
Updater.GameCaptureActive.Title="Captura de jogo ativa"
-Updater.GameCaptureActive.Text="A biblioteca de captura de jogos está em uso. Feche todos os jogos / programas que estão sendo capturados (ou reinicie o computador) e tente novamente."
+Updater.GameCaptureActive.Text="A biblioteca de captura do jogo está em uso no momento. Por favor feche qualquer jogo/programa que esteja sendo capturado (ou reinicie o Windows) e tente novamente."
QuickTransitions.SwapScenes="Trocar Cenas de Prévia/Saída após a Transição"
QuickTransitions.SwapScenesTT="Troca a prévia e a saída após transicionar (se a a cena original de saída ainda exisitr).\nIsto não irá desfazer nenhuma mudança que foi feita na cena original da saída."
ConfirmBWTest.Text="Você com o OBS configurado no modo de teste de largura de banda. Este modo permite o teste de rede sem que o seu canal entre em funcionamento. Uma vez terminado o teste, você precisará desativá-lo para que os espectadores possam ver sua transmissão.\n\nVocê quer continuar?"
ConfirmExit.Title="Sair do OBS?"
-ConfirmExit.Text="OBS está ativo no momento. Todos as streams/gravações serão encerradas. Tem certeza que deseja sair?"
+ConfirmExit.Text="OBS está ativo no momento. Todos as streams/gravações serão encerradas. Tem certeza que deseja sair?"
ConfirmRemove.Title="Confirmar a Remoção"
ConfirmRemove.Text="Tem certeza que deseja remover '$1'?"
Output.StartReplayFailed="Falha ao iniciar o buffer de repetição"
Output.StartFailedGeneric="Impossível criar o arquivo de saída. Verifique o registro para mais detalhes do erro.\n\nAviso: se estiver utilizando os codificadores NVENC ou AMD, certifique-se de que os seus drivers estão atualizados."
+
Output.ConnectFail.Title="Falha ao conectar"
Output.ConnectFail.BadPath="Caminho ou URL inválida. Por favor, verifique suas configurações para confirmar que estão válidas."
Output.ConnectFail.ConnectFailed="Falha ao conectar com o Servidor"
Output.ConnectFail.Error="Ocorreu um erro inesperado ao tentar conectar-se ao servidor. Verifique o arquivo de registro para mais informações."
Output.ConnectFail.Disconnected="Desconectado do Servidor."
+Output.StreamEncodeError.Title="Erro de codificação"
+Output.StreamEncodeError.Msg="Ocorreu um erro de codificação durante a transmissão."
+
Output.RecordFail.Title="Falha ao iniciar a gravação"
Output.RecordFail.Unsupported="O formato de saída ou não é compatível ou não suporta mais do que uma faixa de áudio. Por favor, verifique suas configurações e tente novamente."
Output.RecordNoSpace.Title="Espaço em disco insuficiente"
Output.RecordNoSpace.Msg="Não há espaço em disco suficiente para continuar a gravação."
Output.RecordError.Title="Erro de gravação"
Output.RecordError.Msg="Ocorreu um erro não especificado durante a gravação."
+Output.RecordError.EncodeErrorMsg="Ocorreu um erro de codificação durante a gravação."
Output.ReplayBuffer.NoHotkey.Title="Nenhuma atalho adicionado!"
Output.ReplayBuffer.NoHotkey.Msg="Tecla de Atalho para salvar o Buffer do replay não definida. Por favor, configure uma tecla de atalho para salvar gravações de replays."
Remux.HelpText="Solte arquivos nesta janela para converter ou selecione uma célula \"Gravação do OBS\" para buscar um arquivo."
UpdateAvailable="Nova Atualização Disponível"
-UpdateAvailable.Text="Versão %1. %2. %3 está agora disponível. <a href='%4'> clique aqui para baixar</a>"
+UpdateAvailable.Text="Versão %1. %2. %3 está agora disponível. <a href='%4'> clique aqui para baixar</a>"
Basic.DesktopDevice1="Desktop Áudio"
Basic.DesktopDevice2="Desktop Áudio 2"
Basic.Main.PreviewConextMenu.Enable="Ativar pré-vizualização"
+Basic.Main.Preview.Disable="Desativar pré-visualização"
+
ScaleFiltering="Filtragem de escala"
ScaleFiltering.Point="Ponto"
ScaleFiltering.Bilinear="Bilinear"
Basic.MainMenu.Edit.Transform.FitToScreen="Ajustar à Tela (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="E&stender à Tela"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centralizar à Tela"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centralizar Verticalmente"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centralizar Horizontalmente"
Basic.MainMenu.Edit.Order="&Ordem"
Basic.MainMenu.Edit.Order.MoveUp="Mover para Cima (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Mover para Baixo (&D)"
Basic.Settings.ProgramRestart="O Programa precisar ser reiniciado para que estas configurações surtam efeito."
Basic.Settings.ConfirmTitle="Confirmar Alterações"
-Basic.Settings.Confirm="Você tem alterações não salvas. Salvar as alterações?"
+Basic.Settings.Confirm="Você tem alterações não salvas. Salvar as alterações?"
Basic.Settings.General="Geral"
Basic.Settings.General.Theme="Tema"
Basic.Settings.Output.Simple.RecordingQuality.Small="Alta qualidade, tamanho médio"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Qualidade indistinguível, Tamanho grande"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qualidade Lossless, tremendamente grande"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: O bitrate de vídeo da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: O bitrate de áudio da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Aviso: O bitrate de vídeo da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Aviso: O bitrate de áudio da transmissão será definido para %1, que é o limite superior para o serviço de transmissão atual. Se você tem certeza que quer ir acima de %1, habilite opções de codificação avançadas e desmarque \"Impor limites de bitrate do serviço de transmissão\"."
Basic.Settings.Output.Simple.Warn.Encoder="Aviso: Gravar com um codificador de software em uma qualidade diferente do que a stream vai exigir mais da CPU se você transmitir e gravar ao mesmo tempo."
-Basic.Settings.Output.Simple.Warn.Lossless="Aviso: Qualidade Lossless gera arquivos muito grandes! A qualidade Lossless pode usar mais de 7 gigabytes de espaço em disco por minuto em altas resoluções e framerates. Lossless não é recomendada para gravações longas, a menos que se tenha uma grande quantidade de espaço em disco disponível."
+Basic.Settings.Output.Simple.Warn.Lossless="Aviso: Qualidade Lossless gera arquivos muito grandes! A qualidade Lossless pode usar mais de 7 gigabytes de espaço em disco por minuto em altas resoluções e framerates. Lossless não é recomendada para gravações longas, a menos que se tenha uma grande quantidade de espaço em disco disponível."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Tem certeza que deseja usar qualidade lossless?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Aviso de qualidade lossless!"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
Basic.Settings.Video.Denominator="Demoninador"
Basic.Settings.Video.Renderer="Renderizador"
Basic.Settings.Video.InvalidResolution="Resolução Inválida, Obrigatório ser [largura]x[altura] (ex. 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="A saída de vídeo está atualmente ativa. Por favor, desligue quaisquer saídas para alterar as configurações de vídeo."
+Basic.Settings.Video.CurrentlyActive="A saída de vídeo está atualmente ativa. Por favor, desligue quaisquer saídas para alterar as configurações de vídeo."
Basic.Settings.Video.DisableAero="Desativar Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear(rápido, mas embaçado se redimensionando)"
Basic.Settings.Audio="Áudio"
Basic.Settings.Audio.SampleRate="Taxa de Amostragem"
Basic.Settings.Audio.Channels="Canais"
-Basic.Settings.Audio.MeterDecayRate="Taxa de Decaimento do Medidor de Áudio"
+Basic.Settings.Audio.Meters="Metros"
+Basic.Settings.Audio.MeterDecayRate="Taxa de decaimento"
Basic.Settings.Audio.MeterDecayRate.Fast="Rápida"
Basic.Settings.Audio.MeterDecayRate.Medium="Média (PPM Tipo I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Devagar (PPM Tipo II)"
Basic.Settings.Audio.MultichannelWarning="Antes de transmitir, verifique se o seu serviço de transmissão suporta tanto receber como reproduzir som surround. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast são exemplos onde o som surround é totalmente suportado. Embora o Facebook Live e o YouTube Live ambos aceitem receber som surround, o Facebook Live transformará para estéreo e o YouTube Live reproduz apenas dois canais.\n\nOs filtros de áudio do OBS são compatíveis com o som surround, embora o suporte do plugin VST não seja garantido."
Basic.Settings.Audio.MultichannelWarning.Title="Ativar o som surround?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Você tem certeza de que deseja habilitar o som surround?"
-Basic.Settings.Audio.DesktopDevice="Dispositivo de áudio do desktop"
-Basic.Settings.Audio.DesktopDevice2="Dispositivo de áudio do desktop 2"
-Basic.Settings.Audio.AuxDevice="Dispositivo de áudio/microfone auxiliar"
+Basic.Settings.Audio.Devices="Dispositivos"
+Basic.Settings.Audio.DesktopDevice="Áudio da Área de Trabalho"
+Basic.Settings.Audio.DesktopDevice2="Áudio da Área de Trabalho 2"
+Basic.Settings.Audio.AuxDevice="Dispositivo de Áudio Mic/Auxiliar"
Basic.Settings.Audio.AuxDevice2="Dispositivo de áudio/microfone auxiliar 2"
Basic.Settings.Audio.AuxDevice3="Dispositivo de áudio/microfone auxiliar 3"
Basic.Settings.Audio.AuxDevice4="Dispositivo de áudio/microfone auxiliar 4"
Basic.Settings.Advanced.FormatWarning="Aviso: Formatos de cor diferentes do NV12 destinam-se principalmente para gravação e não são recomendados para transmissão. Durante a transmissão pode ocorrer aumento do uso da CPU devido a conversão do formato de cor."
Basic.Settings.Advanced.Audio.BufferingTime="Tempo de buffer de áudio"
Basic.Settings.Advanced.Video.ColorFormat="Formato de cor"
-Basic.Settings.Advanced.Video.ColorSpace="Espaço de cor YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gama de cores YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Espaço de cor"
+Basic.Settings.Advanced.Video.ColorRange="Faixa de cores"
Basic.Settings.Advanced.Video.ColorRange.Partial="Limitado"
Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de Monitoramento de Áudio"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de monitoramento"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Padrão"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Desativar a Oscilação de Áudio do Windows"
Basic.Settings.Advanced.StreamDelay="Atraso da transmissão"
Basic.AdvAudio="Propriedades de áudio avançadas"
Basic.AdvAudio.Name="Nome"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
Basic.AdvAudio.Mono="Downmix para Mono"
Basic.AdvAudio.Balance="Balanço"
Basic.AdvAudio.SyncOffset="Atraso de sincronização (ms)"
NoSources.Title="Sem Fontes"
NoSources.Text="Parece que você ainda não adicionou nenhuma fonte de vídeo, portanto, você só exibirá uma tela em branco. Você tem certeza de que quer fazer isso?"
NoSources.Text.AddSource="Você pode adicionar fontes clicando no ícone + sob a caixa de Fontes na janela principal, a qualquer momento."
+NoSources.Label="Você não tem nenhuma fonte.\nClique no botão + abaixo,\nou clique direito aqui para adicionar uma."
ChangeBG="Definir Cor"
CustomColor="Cor personalizada"
ResizeOutputSizeOfSource.Text="As resoluções base e de saída serão redimensionadas para o tamanho da fonte atual."
ResizeOutputSizeOfSource.Continue="Você quer continuar?"
+PreviewTransition="Prévia da Transição"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/pt-PT.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/pt-PT.ini
Changed
Enable="Ativar"
DisableOSXVSync="Desabilitar o OSX V-Sync"
ResetOSXVSyncOnExit="Redefinir o OSX V-Sync na saída"
-HighResourceUsage="Codificação sobrecarregado! Considere diminuir a configurações de vídeo ou usar uma predefinição mais rápido de codificação."
+HighResourceUsage="Codificação sobrecarregado! Considere diminuir a configurações de vídeo ou usar uma predefinição mais rápido de codificação."
Transition="Transição"
QuickTransitions="Transições rápidas"
Left="Esquerda"
Output.StartReplayFailed="Falha ao iniciar o buffer de repetição"
Output.StartFailedGeneric="Falha ao iniciar o output. Verifica o log para mais detalhes.\n\nNota: Se estás a usar codificadores NVENC ou AMD, certifica-te de que os drivers da placa gráfica estão atualizados."
+
Output.ConnectFail.Title="Falha ao ligar"
Output.ConnectFail.BadPath="Caminho ou endereço de ligação inválido. Por favor, verifique as suas definições para confirmar que são válidas."
Output.ConnectFail.ConnectFailed="Falhou a ligação ao servidor"
-Output.ConnectFail.InvalidStream="Não foi possível acessar o canal especificado ou chave de transmissão, por favor ré-verifique a sua chave de transmissão. Se é correto, pode haver um problema de conexão com o servidor."
+Output.ConnectFail.InvalidStream="Não foi possível acessar o canal especificado ou chave de transmissão, por favor ré-verifique a sua chave de transmissão. Se é correto, pode haver um problema de conexão com o servidor."
Output.ConnectFail.Error="Ocurreu um erro inesperado ao ligar-se ao servidor. Mais informação no ficheiro Log."
Output.ConnectFail.Disconnected="Desligado do servidor."
+
Output.RecordFail.Title="Não foi possível iniciar a gravação"
Output.RecordFail.Unsupported="O formato de saída ou não é suportado ou não suporta mais do que uma faixa de áudio. Por favor, verifique as suas definições e tente novamente."
Output.RecordNoSpace.Title="Espaço em disco insuficiente"
Remux.HelpText="Arrasta ficheiros para esta janela para fazer remux, ou selectiona uma célula \"Gravação do OBS\" vazia para procurar por um ficheiro."
UpdateAvailable="Nova atualização disponível"
-UpdateAvailable.Text="Versão %1.%2.%3 está agora disponível. <a href='%4'>Clique aqui para descarregar</a>"
+UpdateAvailable.Text="Versão %1.%2.%3 está agora disponível. <a href='%4'>Clique aqui para descarregar</a>"
Basic.DesktopDevice1="Desktop Audio"
Basic.DesktopDevice2="Desktop Audio 2"
Basic.Main.PreviewConextMenu.Enable="Ativar pré-visualização"
+
ScaleFiltering="Filtragem de escala"
ScaleFiltering.Point="Ponto"
ScaleFiltering.Bilinear="Bilinear"
Basic.Settings.Audio="Áudio"
Basic.Settings.Audio.SampleRate="Frequência de Samplagem"
Basic.Settings.Audio.Channels="Canias"
-Basic.Settings.Audio.MeterDecayRate="Taxa de Decaimento do Medidor de Áudio"
Basic.Settings.Audio.MeterDecayRate.Fast="Rápido"
Basic.Settings.Audio.MeterDecayRate.Medium="Médio (Tipo I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lento (Tipo II PPM)"
Basic.Settings.Audio.MultichannelWarning="Se transmitir, verifique se o seu serviço de transmissão suporta tanto ingestão de áudio surround como playback de áudio surround. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast são exemplos onde o áudio surround é totalmente suportado. Embora o Facebook Live e o YouTube Live aceitem os dois ingestão de áudio surround, o Facebook Live transforma-o em stereo, e o YouTube Live só toca dois canais.\n\nOs filtros de áudio do OBS são compatíveis com áudio surround, embora não esteja garantido o suporte para plugins VST."
Basic.Settings.Audio.MultichannelWarning.Title="Ativar audio surround?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Tem a certeza que quer ativar audio surround?"
-Basic.Settings.Audio.DesktopDevice="Desktop Audio Device"
-Basic.Settings.Audio.DesktopDevice2="Desktop Audio Device 2"
-Basic.Settings.Audio.AuxDevice="Dispositivo de Áudio Mic/Auxiliar"
-Basic.Settings.Audio.AuxDevice2="Dispositivo de Áudio Mic/Auxiliar 2"
-Basic.Settings.Audio.AuxDevice3="Dispositivo de Áudio Mic/Auxiliar 3"
-Basic.Settings.Audio.AuxDevice4="Dispositivo de Áudio Mic/Auxiliar 4"
Basic.Settings.Audio.EnablePushToMute="Ativar o push-to-mute"
Basic.Settings.Audio.PushToMuteDelay="Atrado do push-to-mute"
Basic.Settings.Audio.EnablePushToTalk="Ativar o push-to-talk"
Basic.Settings.Advanced.FormatWarning="Aviso: Formatos de cor diferentes de NV12 destinam-se principalmente a gravação e não são recomendados durante a transmissão. A transmissão pode incorrer numa maior utilização do processador devido à conversão do formato de cor."
Basic.Settings.Advanced.Audio.BufferingTime="Tempo de carregamento do áudio"
Basic.Settings.Advanced.Video.ColorFormat="Formato de cor"
-Basic.Settings.Advanced.Video.ColorSpace="Espaço de cor YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gama de cor YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parcial"
Basic.Settings.Advanced.Video.ColorRange.Full="Total"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de monitorização de audio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Predefinição"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Desativar o ducking de audio do Windows"
Basic.Settings.Advanced.StreamDelay="Atraso na trasmissão"
Basic.AdvAudio="Propriedades avançadas de áudio"
Basic.AdvAudio.Name="Nome"
-Basic.AdvAudio.Volume="Volume (%)"
Basic.AdvAudio.Mono="Diminuir para mono"
Basic.AdvAudio.Balance="Equilíbrio"
Basic.AdvAudio.SyncOffset="Atraso de sincronização (ms)"
ResizeOutputSizeOfSource.Text="As resoluções base e de output serão redimensionadas para o tamanho da fonte atual."
ResizeOutputSizeOfSource.Continue="Deseja continuar?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ro-RO.ini
Changed
Enable="Activează"
DisableOSXVSync="Dezactivează V-Sync în OSX"
ResetOSXVSyncOnExit="Resetează V-Sync în OSX la ieșire"
-HighResourceUsage="Codificare supraîncărcată! Ia în considerare reducerea setărilor video sau folosirea unei presetări de codare mai rapidă."
+HighResourceUsage="Codificare supraîncărcată! Ia în considerare reducerea setărilor video sau folosirea unei presetări de codare mai rapidă."
Transition="Tranziție"
QuickTransitions="Tranziții rapide"
Left="Stânga"
Hours="Ore"
Minutes="Minute"
Seconds="Secunde"
-Deprecated="Invechit"
+Deprecated="Obsolet"
ReplayBuffer="Reluare Buffer"
Import="Importă"
Export="Exportă"
Auth.Authing.Title="Se autentifică..."
Auth.Authing.Text="Se autentifică cu %1, te rugăm să aștepți..."
Auth.AuthFailure.Title="Eșec la autentificare"
+Auth.InvalidScope.Title="Autentificare necesară"
Auth.LoadingChannel.Title="Se încarcă informațiile canalului..."
Auth.LoadingChannel.Text="Se încarcă informațiile canalului pentru %1, te rugăm să aștepți..."
Auth.ChannelFailure.Title="Eșec la încărcarea canalului"
Auth.Chat="Chat"
Auth.StreamInfo="Informații privind transmisiunea"
TwitchAuth.Stats="Statistici Twitch"
+TwitchAuth.Feed="Fluxul activității Twitch"
Copy.Filters="Copiază filtrele"
Paste.Filters="Lipește filtrele"
Basic.AutoConfig.StreamPage.ConnectAccount="Conectează un cont (opțional)"
Basic.AutoConfig.StreamPage.DisconnectAccount="Deconectează contul"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Deconectezi contul?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Această modificare se va aplica imediat. Ești sigur că vrei să deconectezi contul?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Această modificare se va aplica imediat. Ești sigur că vrei să deconectezi contul?"
Basic.AutoConfig.StreamPage.UseStreamKey="Folosește cheia de transmisiune"
Basic.AutoConfig.StreamPage.Service="Serviciu"
Basic.AutoConfig.StreamPage.Service.ShowAll="Afișează toate..."
Basic.AutoConfig.StreamPage.Server="Server"
Basic.AutoConfig.StreamPage.StreamKey="Cheie de transmisiune"
Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
-Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimează rata de biți cu un test al lățimii de bandă (poate dura câteva minute)"
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimează rata de biți cu o testare a lățimii de bandă (poate dura câteva minute)"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferă codificarea hardware"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificarea hardware elimină cea mai mare parte a utilizării CPU, însă ar putea avea nevoie de o rată de biți mai mare pentru a obține același nivel de calitate."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Avertizare transmisie"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="Testul lățimii de bandă este pe cale să transmită semnal video aleator fără audio către canalul tău. Dacă ai posibilitatea, e recomandat să oprești temporar salvarea video-urilor transmisiilor și să setezi transmisia privată până când testul se încheie. Continui?"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Testarea lățimii de bandă este pe cale să transmită date video aleatorii fără audio către canalul tău. Dacă ai posibilitatea, este recomandat să oprești temporar salvarea videoclipurilor transmisiunilor și să setezi transmisiunea pe privat până la încheierea testării. Continui?"
Basic.AutoConfig.TestPage="Rezultate finale"
Basic.AutoConfig.TestPage.SubTitle.Testing="Programul rulează acum o serie de teste pentru identificarea setărilor ideale"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testare completă"
-Basic.AutoConfig.TestPage.TestingBandwidth="Execut testul lățimii de banda, poate dura câteva minute..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectare la %1..."
-Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Nu s-a putut realiza conexiune către niciun server, Verificați conexiunea la Internet și încercați din nou."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testare lățime de bandă pentru: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth="Se efectuează testarea lățimii de bandă, acest lucru poate dura câteva minute..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Se conectează la: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Nu s-a putut conecta la niciun server. Te rugăm să verifici conexiunea la Internet și să încerci din nou."
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Se testează lățimea de bandă pentru: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="Testare encoder transmisie, poate dura câteva minute..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testare encoder înregistrare, poate dura câteva minute..."
Basic.AutoConfig.TestPage.TestingRes="Testare rezoluții, aceasta ar putea dura câteva minute..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Codificator pentru transmisiune"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificator pentru înregistrare"
Basic.AutoConfig.TestPage.Result.Header="Programul a determinat că următoarele setări sunt cele mai potrivite:"
-Basic.AutoConfig.TestPage.Result.Footer="Pentru a folosi aceste setări, dă clic pe Aplică setările. Pentru a reconfigura și a încerca din nou, dă clic pe Înapoi. Pentru a configura manual setările, apasă Anulează și deschide Setările."
+Basic.AutoConfig.TestPage.Result.Footer="Pentru a folosi aceste setări, dă clic pe Aplică setările. Pentru a reconfigura și a încerca din nou, dă clic pe Înapoi. Pentru a configura manual setările, apasă Anulează și deschide Setările."
Basic.Stats="Statistici"
Basic.Stats.CPUUsage="Utilizare CPU"
ConfirmStop.Title="Oprești streamul?"
ConfirmStop.Text="Sigur vrei să oprești transmisiunea?"
+ConfirmBWTest.Title="Începi testarea pentru lățimea de bandă?"
+ConfirmBWTest.Text="Ai configurat OBS în modul de testare a lățimii de bandă. Acest mod permite testarea rețelei fără să transmiți live pe canal. Odată ce ai terminat testarea, va trebui să îl dezactivezi pentru ca spectatorii să îți poată vedea transmisiunea.\n\nVrei să continui?"
ConfirmExit.Title="Ieși din OBS?"
-ConfirmExit.Text="OBS este în prezent activ. Toate transmisiunile/înregistrările vor fi închise. Sigur dorești să ieși?"
+ConfirmExit.Text="OBS este în prezent activ. Toate transmisiunile/înregistrările vor fi închise. Sigur vrei să ieși?"
ConfirmRemove.Title="Confirmă eliminarea"
-ConfirmRemove.Text="Sigur dorești să elimini „$1”?"
+ConfirmRemove.Text="Sigur vrei să elimini „$1”?"
ConfirmRemove.TextMultiple="Sigur doriți sa eliminați %1 obiecte?"
Output.StartStreamFailed="Pornirea transmisiunii a eșuat"
Output.StartRecordingFailed="Pornirea înregistrării a eșuat"
+
Output.ConnectFail.Title="Eșec la conectare"
-Output.ConnectFail.BadPath="URL-ul conexiunii sau calea este invalidă. Te rugăm să verifici setările pentru a confirma că acestea sunt valide."
+Output.ConnectFail.BadPath="URL-ul conexiunii sau calea este invalidă. Te rugăm să verifici setările pentru a confirma că acestea sunt valide."
Output.ConnectFail.ConnectFailed="Nu se poate conecta la server"
-Output.ConnectFail.InvalidStream="Nu a putut fi accesat canalul sau cheia de transmisiune specificată, te rugăm să verifici cheia de transmisiune. Dacă aceasta este corectă, poate fi o problemă cu conectarea la server."
-Output.ConnectFail.Error="Eroare neașteptată la încercarea de a conecta la server. Mai multe informaţii în fişierul jurnal."
+Output.ConnectFail.InvalidStream="Nu a putut fi accesat canalul sau cheia de transmisiune specificată, te rugăm să verifici cheia de transmisiune. Dacă aceasta este corectă, poate fi o problemă cu conectarea la server."
+Output.ConnectFail.Error="Eroare neașteptată la încercarea de a conecta la server. Mai multe informaţii în fişierul jurnal."
Output.ConnectFail.Disconnected="Deconectat de la server."
+
Output.RecordFail.Title="Eșec la pornirea înregistrării"
-Output.RecordFail.Unsupported="Formatul de ieşire este fie nesuportat, fie nu suportă mai mult de o pistă audio. Te rugăm să verifici setările şi să încerci din nou."
+Output.RecordFail.Unsupported="Formatul de ieşire este fie nesuportat, fie nu suportă mai mult de o pistă audio. Te rugăm să verifici setările şi să încerci din nou."
Output.RecordNoSpace.Title="Spațiu insuficient pe disc"
Output.RecordNoSpace.Msg="Nu există spațiu suficient pe disc pentru a continua înregistrarea."
Output.RecordError.Title="Eroare de înregistrare"
Output.ReplayBuffer.NoHotkey.Title="Nicio tastă rapidă setată!"
Output.BadPath.Title="Calea fișierului greșită"
-Output.BadPath.Text="Calea de ieşire pentru fişiere invalidă. Vă rugăm să verificaţi setările pentru a confirma că s-a stabilit o cale de fişier validă."
+Output.BadPath.Text="Calea de ieşire pentru fişiere invalidă. Vă rugăm să verificaţi setările pentru a confirma că s-a stabilit o cale de fişier validă."
LogReturnDialog="Jurnal incărcat cu succes"
LogReturnDialog.CopyURL="Copiază URL-ul"
Remux.TargetFile="Fișier țintă"
Remux.Remux="Remux"
Remux.Stop="Oprește remuxarea"
-Remux.ClearFinished="Șterge elementele terminate"
+Remux.ClearFinished="Șterge elementele finalizate"
Remux.ClearAll="Șterge toate elementele"
Remux.OBSRecording="Înregistrare OBS"
Remux.FinishedTitle="Remuxing încheiat"
Remux.Finished="Înregistrare remuxată"
Remux.FinishedError="Înregistrare remuxată, însă fișierul poate fi incomplet"
+Remux.SelectRecording="Selectează înregistrarea OBS..."
Remux.FileExistsTitle="Fișierele țintă există deja"
Remux.FileExists="Fișierele deja exista. Vreți să le înlocuiți?"
Remux.ExitUnfinishedTitle="Remuxing în desfășurare"
Remux.ExitUnfinished="Remuxingul nu este încheiat, oprirea în acest moment poate face fișierul țintă inutilizabil.\nSigur vrei să oprești remuxingul?"
+Remux.HelpText="Plasează fișierele în această fereastră pentru a remuxa ori selectează o celulă „Înregistrare OBS” goală pentru a răsfoi un fișier."
UpdateAvailable="Actualizare nouă disponibilă"
-UpdateAvailable.Text="Versiunea %1.%2.%3 este acum disponibilă. <a href='%4'> Clic aici pentru a descărca</a>"
+UpdateAvailable.Text="Versiunea %1.%2.%3 este acum disponibilă. <a href='%4'> Clic aici pentru a descărca</a>"
-Basic.DesktopDevice1="Desktop audio"
-Basic.DesktopDevice2="Desktop audio 2"
+Basic.DesktopDevice1="Audio desktop"
+Basic.DesktopDevice2="Audio desktop 2"
Basic.AuxDevice1="Microfon/Aux"
Basic.AuxDevice2="Microfon/Aux 2"
Basic.AuxDevice3="Microfon/Aux 3"
Basic.Main.PreviewConextMenu.Enable="Activează previzualizarea"
+
ScaleFiltering.Point="Punct"
ScaleFiltering.Bilinear="Biliniar"
ScaleFiltering.Bicubic="Bicubic"
Basic.Main.MixerRename.Text="Te rugăm să introduci numele sursei audio"
-Basic.Main.PreviewDisabled="Previzualizarea este în prezent dezactivată"
+Basic.Main.PreviewDisabled="Previzualizarea este dezactivată în prezent"
Basic.SourceSelect="Creează/Selectează sursa"
-Basic.SourceSelect.CreateNew="Creează nouă"
-Basic.SourceSelect.AddExisting="Adaugă existentă"
+Basic.SourceSelect.CreateNew="Creează una nouă"
+Basic.SourceSelect.AddExisting="Adaugă una existentă"
Basic.SourceSelect.AddVisible="Fă sursa vizibilă"
Basic.PropertiesWindow="Proprietăți pentru '%1'"
Basic.PropertiesWindow.SelectColor="Selectează culoarea"
Basic.PropertiesWindow.SelectFont="Selectează fontul"
Basic.PropertiesWindow.ConfirmTitle="Setări schimbate"
-Basic.PropertiesWindow.Confirm="Există modificări nesalvate. Vrei să le păstrezi?"
+Basic.PropertiesWindow.Confirm="Există modificări nesalvate. Vrei să le păstrezi?"
Basic.PropertiesWindow.NoProperties="Nicio proprietate disponibilă"
Basic.PropertiesWindow.AddFiles="Adaugă fișiere"
Basic.PropertiesWindow.AddDir="Adaugă un director"
Basic.Main.StoppingStreaming="Se oprește transmisiunea..."
Basic.Main.ForceStopStreaming="Oprește transmisiunea (renunță la întârziere)"
Basic.Main.GroupItems="Grupează elementele selectate"
+Basic.Main.Ungroup="Anulează grupul"
Basic.MainMenu.File="&Fișier"
Basic.MainMenu.File.Export="&Exportă"
Basic.MainMenu.Edit.Transform="&Transformare"
Basic.MainMenu.Edit.Transform.EditTransform="&Editează transformarea..."
Basic.MainMenu.Edit.Transform.CopyTransform="Copiază transformarea"
+Basic.MainMenu.Edit.Transform.PasteTransform="Lipește transformarea"
Basic.MainMenu.Edit.Transform.ResetTransform="&Resetează transformarea"
Basic.MainMenu.Edit.Transform.Rotate90CW="Rotește la 90° (în sensul acelor ceasornicului)"
Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotește la 90° (în sensul contrar acelor ceasornicului)"
Basic.MainMenu.SceneCollection.Import="Importă colecție de scene"
Basic.MainMenu.SceneCollection.Export="Exportă colecție de scene"
Basic.MainMenu.Profile.Exists="Profilul există deja"
+Basic.MainMenu.SceneCollection.Exists="Colecția de scene există deja"
Basic.MainMenu.Tools="Unel&te"
Basic.Settings.ProgramRestart="Programul trebuie repornit pentru ca aceste setări să aibă efect."
Basic.Settings.ConfirmTitle="Confirmă modificările"
-Basic.Settings.Confirm="Ai modificări nesalvate. Salvezi modificările?"
+Basic.Settings.Confirm="Ai modificări nesalvate. Salvezi modificările?"
Basic.Settings.General="Generale"
Basic.Settings.General.Theme=" Temă"
Basic.Settings.Stream="Transmisiune"
Basic.Settings.Stream.StreamType="Tipul transmisiunii"
+Basic.Settings.Stream.BandwidthTestMode="Activează modul de testare a lățimii de bandă"
Basic.Settings.Output="Ieșire"
Basic.Settings.Output.Format="Format de înregistrare"
Basic.Settings.Output.Mode.Simple="Simplu"
Basic.Settings.Output.Mode.Adv="Avansat"
Basic.Settings.Output.Mode.FFmpeg="Ieșire FFmpeg"
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memorie maximă (megabyți)"
Basic.Settings.Output.ReplayBuffer.Estimate="Utilizare estimată a memoriei: %1 MB"
Basic.Settings.Output.ReplayBuffer.Suffix="Sufix"
Basic.Settings.Output.Simple.SavePath="Cale de înregistrare"
Basic.Settings.Output.Simple.RecordingQuality.Small="Calitate înaltă, dimensiune medie pentru fișiere"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Calitate imposibil de distins, dimensiune mare pentru fișiere"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Calitate lossless, dimensiune extrem de mare pentru fișiere"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Avertisment: Rata de biți a transmisiei video va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Avertisment: Rata de biți a transmisiei audio va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Avertisment: Rata de biți a transmisiei video va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Avertisment: Rata de biți a transmisiei audio va fi setată la %1, care este limita superioară pentru serviciul de transmisiune actual. Dacă ești sigur că vrei să depășești %1, activează opțiunile avansate ale codificatorului și debifează „Impune limitele ratei de biți pentru serviciul de transmisiune”."
Basic.Settings.Output.Simple.Warn.Encoder="Avertisment: Înregistrarea cu un codificator software la o calitate diferită de cea a transmisiunii va necesita o utilizare CPU crescută dacă transmiți şi înregistrezi în același timp."
-Basic.Settings.Output.Simple.Warn.Lossless="Avertisment: Calitatea lossless generează dimensiuni extrem de mari de fișiere! Calitatea lossless poate folosi până la 7GB spațiu de disc per minut la frecvențe de cadre și rezoluții ridicate. Lossless nu este recomandat pentru înregistrări lungi decât dacă ai o cantitate foarte mare de spațiu disponibil pe disc."
+Basic.Settings.Output.Simple.Warn.Lossless="Avertisment: Calitatea lossless generează dimensiuni extrem de mari de fișiere! Calitatea lossless poate folosi până la 7GB spațiu de disc per minut la frecvențe de cadre și rezoluții ridicate. Lossless nu este recomandat pentru înregistrări lungi decât dacă ai o cantitate foarte mare de spațiu disponibil pe disc."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigur vrei să folosești calitatea lossless?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Avertizare privind calitatea lossless!"
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
Basic.Settings.Video.Numerator="Numărător"
Basic.Settings.Video.Denominator="Numitor"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Valoare invalidă pentru rezoluție. Trebuie să fie [lățime]x[înălțime] (de ex., 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="Ieşirea video este în prezent activă. Vă rugăm să opriţi orice ieşiri pentru a schimba setările video."
+Basic.Settings.Video.InvalidResolution="Valoare invalidă pentru rezoluție. Trebuie să fie [lățime]x[înălțime] (de ex., 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="Ieşirea video este în prezent activă. Vă rugăm să opriţi orice ieşiri pentru a schimba setările video."
Basic.Settings.Video.DisableAero="Dezactivează Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Biliniar (Cel mai rapid, dar neclar în cazul scalării)"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Rată de eșantionare"
Basic.Settings.Audio.Channels="Canale"
-Basic.Settings.Audio.MeterDecayRate="Rată de atenuare audiometrică"
Basic.Settings.Audio.MeterDecayRate.Fast="Rapidă"
Basic.Settings.Audio.MeterDecayRate.Medium="Medie (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Lentă (Type II PPM)"
-Basic.Settings.Audio.DesktopDevice="Dispozitiv audio desktop"
-Basic.Settings.Audio.DesktopDevice2="Dispozitiv audio desktop 2"
-Basic.Settings.Audio.AuxDevice="Dispozitiv audio microfon/auxiliar"
-Basic.Settings.Audio.AuxDevice2="Dispozitiv audio microfon/auxiliar 2"
-Basic.Settings.Audio.AuxDevice3="Dispozitiv audio microfon/auxiliar 3"
+Basic.Settings.Audio.DesktopDevice="Audio desktop"
+Basic.Settings.Audio.DesktopDevice2="Audio desktop 2"
Basic.Settings.Audio.EnablePushToMute="Activează push-to-mute"
Basic.Settings.Audio.PushToMuteDelay="Întârziere la push-to-mute"
Basic.Settings.Audio.EnablePushToTalk="Activează push-to-talk"
Basic.Settings.Audio.PushToTalkDelay="Întârziere la push-to-talk"
Basic.Settings.Audio.UnknownAudioDevice="[Dispozitiv neconectat sau indisponibil]"
+Basic.Settings.Audio.Disabled="Dezactivat"
Basic.Settings.Advanced="Avansate"
Basic.Settings.Advanced.General.ProcessPriority="Prioritatea procesului"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Sub normal"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Inactiv"
Basic.Settings.Advanced.FormatWarning="Atentie: Formatele de culori diferite de NV12 sunt facute pentru inregistrare si nu sunt recomandate in cazul streaming-ului. Streaming-ul e posibil sa ceara mai multe resurse CPU datorita conversiei formatului culorii."
-Basic.Settings.Advanced.Audio.BufferingTime="Timp de buffering pentru audio"
+Basic.Settings.Advanced.Audio.BufferingTime="Timp pentru zona tampon audio"
Basic.Settings.Advanced.Video.ColorFormat="Format de culori"
-Basic.Settings.Advanced.Video.ColorSpace="Spațiu de culori YUV"
-Basic.Settings.Advanced.Video.ColorRange="Gamă de culori YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Parțială"
Basic.Settings.Advanced.Video.ColorRange.Full="Completă"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Dispozitiv de monitorizare audio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Implicit"
Basic.Settings.Advanced.StreamDelay="Întârziere pentru transmisiune"
Basic.Settings.Advanced.StreamDelay.Duration="Durată (secunde)"
Basic.Settings.Advanced.StreamDelay.MemoryUsage="Utilizare estimată a memoriei: %1 MB"
Basic.Settings.Advanced.Network="Rețea"
Basic.Settings.Advanced.Network.BindToIP="Leagă de IP"
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Activează noul cod pentru rețea"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Mod de latență redusă"
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Dezactivează tastele rapide când fereastra principală este în prim-plan"
Basic.Settings.Advanced.AutoRemux="Remuxează automat în mp4"
Basic.Settings.Advanced.AutoRemux.MP4="(înregistrează ca mkv)"
Basic.AdvAudio="Proprietăți audio avansate"
Basic.AdvAudio.Name="Nume"
-Basic.AdvAudio.Volume="Volum (%)"
Basic.AdvAudio.Mono="Transformă în mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Decalajul sincronizării (ms)"
OutputWarnings.NoTracksSelected="Trebuie să selectezi cel puțin o pistă"
OutputWarnings.MultiTrackRecording="Atenție: Anumite formate (precum FLV) nu suportă multiple piste per înregistrare"
+FinalScene.Title="Șterge scena"
FinalScene.Text="Trebuie să existe cel puțin o scenă."
+ChangeBG="Setează culoarea"
+BrowserSource.EnableHardwareAcceleration="Activează accelerarea hardware pentru Browser Source"
About="Despre"
About.Info="OBS Studio este un program gratuit și cu sursă deschisă de înregistrare video și transmisiune live."
About.Contribute="Sprijină proiectul OBS"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ru-RU.ini
Changed
VerticalLayout="Вертикальное расположение"
Group="Группа"
DoNotShowAgain="Не показывать снова"
+Default="(По умолчанию)"
+Calculating="Расчёт..."
AlreadyRunning.Title="OBS уже запущен"
AlreadyRunning.Text="OBS уже запущен! Пожалуйста, закройте все запущенные экземпляры OBS перед попыткой запустить новые (только если вы не хотели именно этого). Если вы настроили OBS на сворачивание в системный трей, пожалуйста, проверьте, возможно он до сих пор запущен."
Auth.StreamInfo="Информация о трансляции"
TwitchAuth.Stats="Статистика Twitch"
TwitchAuth.Feed="Лента активности Twitch"
+TwitchAuth.TwoFactorFail.Title="Не удалось запросить ключ трансляции"
+TwitchAuth.TwoFactorFail.Text="Невозможно подключиться к учётной записи Twitch. Пожалуйста, убедитесь, что в <a href='https://www.twitch.tv/settings/security'>настройках безопасности</a> включена и настроена двухфакторная аутентификация."
Copy.Filters="Копировать фильтры"
Paste.Filters="Вставить фильтры"
Basic.Stats.DroppedFrames="Пропущенные кадры (Сеть)"
Basic.Stats.MegabytesSent="Данных отправлено"
Basic.Stats.Bitrate="Битрейт"
+Basic.Stats.DiskFullIn="Диск заполнится (около)"
ResetUIWarning.Title="Вы уверены, что хотите сбросить пользовательский интерфейс?"
ResetUIWarning.Text="Сброс пользовательского интерфейса скроет дополнительные док-панели. Если вы хотите чтобы эти панели были видимыми, вам нужно будет отметить их в меню Вид.\n\nВы уверены, что хотите сбросить пользовательский интерфейс?"
Output.StartReplayFailed="Не удалось запустить воспроизведение из буфера"
Output.StartFailedGeneric="Сбой вывода. Подробности отражены в журнале.\n\nПримечание: Если вы используете кодировщики NVENC или AMD, убедитесь что у вас установлена последняя версия видеорайвера."
+
Output.ConnectFail.Title="Не удалось подключиться"
Output.ConnectFail.BadPath="Неверный путь или URL соединения. Пожалуйста, проверьте настройки, чтобы подтвердить, что они являются действительными."
Output.ConnectFail.ConnectFailed="Не удалось подключиться к серверу"
Output.ConnectFail.Error="Произошла непредвиденная ошибка при попытке подключиться к серверу. Более подробная информация в лог-файле."
Output.ConnectFail.Disconnected="Отключен от сервера."
+Output.StreamEncodeError.Title="Ошибка кодирования"
+Output.StreamEncodeError.Msg="Произошла ошибка кодировщика во время трансляции."
+
Output.RecordFail.Title="Не удалось начать запись"
Output.RecordFail.Unsupported="Выходной формат либо не поддерживается, либо не поддерживает более одной звуковой дорожки. Пожалуйста, проверьте настройки и повторите попытку."
Output.RecordNoSpace.Title="Недостаточно места на диске"
Output.RecordNoSpace.Msg="На диске недостаточно места для продолжения записи."
Output.RecordError.Title="Ошибка записи"
Output.RecordError.Msg="Во время записи произошла неопознанная ошибка."
+Output.RecordError.EncodeErrorMsg="Произошла ошибка кодировщика во время записи."
Output.ReplayBuffer.NoHotkey.Title="Нет набора горячих клавиш!"
Output.ReplayBuffer.NoHotkey.Msg="Не установлено клавиши для сохранения повтора. Пожалуйста, установите горячую клавишу для сохранения записей повторов."
Output.BadPath.Title="Неправильный путь к файлу"
-Output.BadPath.Text="Некорректный путь к файлу. Пожалуйста, проверьте настройки, чтобы убедиться в корректности установленного пути."
+Output.BadPath.Text="Некорректный путь к файлу. Пожалуйста, проверьте настройки, чтобы убедиться в корректности установленного пути."
LogReturnDialog="Log загружен успешно"
LogReturnDialog.CopyURL="Скопировать URL"
Basic.Main.PreviewConextMenu.Enable="Включить предпросмотр"
+Basic.Main.Preview.Disable="Отключить предпросмотр"
+
ScaleFiltering="Фильтр масштабирования"
ScaleFiltering.Point="Точечный"
ScaleFiltering.Bilinear="Билинейный"
Basic.MainMenu.Edit.Transform.FitToScreen="Подогнать по размеру экрана (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Растянуть на весь экран (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Разместить по центру экрана (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Выровнять по вертикали"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Выровнять по горизонтали"
Basic.MainMenu.Edit.Order="Порядок (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Переместить выше (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Переместить ниже (&D)"
Basic.Settings.Output.ReplayBuffer.SecondsMax="Максимальное время повтора (секунд)"
Basic.Settings.Output.ReplayBuffer.MegabytesMax="Максимальный объем памяти (МБ)"
Basic.Settings.Output.ReplayBuffer.Estimate="Предполагаемое использование памяти: %1 МБ"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Невозможно оценить использование памяти. Пожалуйста, установите максимальный объем памяти."
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Невозможно оценить использование памяти. Пожалуйста, установите максимальный объем памяти."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Примечание: Убедитесь, что установили горячую клавишу для воспроизведения буфера в разделе горячие клавиши)"
Basic.Settings.Output.ReplayBuffer.Prefix="Префикс имени файла повтора"
Basic.Settings.Output.ReplayBuffer.Suffix="Суффикс"
Basic.Settings.Video.Numerator="Числитель"
Basic.Settings.Video.Denominator="Знаменатель"
Basic.Settings.Video.Renderer="Рендер"
-Basic.Settings.Video.InvalidResolution="Неверное разрешение. Должно быть [Ширина]x[Высота] (т.е. 1920x1080)"
+Basic.Settings.Video.InvalidResolution="Неверное разрешение. Должно быть [Ширина]x[Высота] (т.е. 1920x1080)"
Basic.Settings.Video.CurrentlyActive="Видео выход в данный момент активен. Пожалуйста, отключите все выходы, чтобы изменить настройки видео."
Basic.Settings.Video.DisableAero="Отключить Aero"
Basic.Settings.Audio="Аудио"
Basic.Settings.Audio.SampleRate="Частота дискретизации"
Basic.Settings.Audio.Channels="Каналы"
-Basic.Settings.Audio.MeterDecayRate="Скорость спада аудиометра"
+Basic.Settings.Audio.Meters="Измерители"
+Basic.Settings.Audio.MeterDecayRate="Скорость спада"
Basic.Settings.Audio.MeterDecayRate.Fast="Быстро"
Basic.Settings.Audio.MeterDecayRate.Medium="Средне (PPM типа I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Медленно (PPM типа II)"
Basic.Settings.Audio.MultichannelWarning="При запуске стрима проверьте, поддерживает ли ваш сервис потокового вещания объемный звук (как запись, так и воспроизведение). Twitch, Facebook 360 Live, Mixer RTMP, Smashcast — примеры сервисов, полностью поддерживающих объемное звучание. Несмотря на то, что Facebook Live и Youtube Live принимают объёмный звук, Facebook Live микширует его в стерео, а Youtube Live воспроизводит только два канала.\n\nЗвуковые фильтры OBS совместимы с объемным звучанием, хотя поддержка плагинов VST не гарантируется."
Basic.Settings.Audio.MultichannelWarning.Title="Включить объемный звук?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Хотите включить объемный звук?"
-Basic.Settings.Audio.DesktopDevice="Desktop Аудиоустройство"
-Basic.Settings.Audio.DesktopDevice2="Desktop Аудиоустройство 2"
-Basic.Settings.Audio.AuxDevice="Mic/Auxiliary Аудиоустройство"
-Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Аудиоустройство 2"
-Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Аудиоустройство 3"
-Basic.Settings.Audio.AuxDevice4="Mic/Auxiliary Аудиоустройство 4"
+Basic.Settings.Audio.Devices="Устройства"
+Basic.Settings.Audio.DesktopDevice="Аудио с рабочего стола"
+Basic.Settings.Audio.DesktopDevice2="Аудио с рабочего стола 2"
+Basic.Settings.Audio.AuxDevice="Микрофон/Дополнительное аудио"
+Basic.Settings.Audio.AuxDevice2="Микрофон/Дополнительное аудио 2"
+Basic.Settings.Audio.AuxDevice3="Микрофон/Дополнительное аудио 3"
+Basic.Settings.Audio.AuxDevice4="Микрофон/Дополнительное аудио 4"
Basic.Settings.Audio.EnablePushToMute="Выключать микрофон по нажатии"
Basic.Settings.Audio.PushToMuteDelay="Задержка выключения микрофона"
Basic.Settings.Audio.EnablePushToTalk="Включать микрофон по нажатии"
Basic.Settings.Advanced.FormatWarning="Предупреждение: цветовые форматы, отличные от NV12, прежде всего предназначены для записи и не рекомендуются для потокового вещания. Преобразование цветового формата во время вещания может потребовать дополнительную нагрузку на ЦП."
Basic.Settings.Advanced.Audio.BufferingTime="Время буферизации аудио"
Basic.Settings.Advanced.Video.ColorFormat="Цветовой формат"
-Basic.Settings.Advanced.Video.ColorSpace="Цветовое пространство YUV"
-Basic.Settings.Advanced.Video.ColorRange="Цветовой диапазон YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Цветовое пространство"
+Basic.Settings.Advanced.Video.ColorRange="Цветовой диапазон"
Basic.Settings.Advanced.Video.ColorRange.Partial="Частичный"
Basic.Settings.Advanced.Video.ColorRange.Full="Полный"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство прослушивания аудио"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство прослушивания"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="По умолчанию"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Отключить приглушение звуков Windows"
Basic.Settings.Advanced.StreamDelay="Задержка потока"
Basic.AdvAudio="Расширенные свойства аудио"
Basic.AdvAudio.Name="Название"
-Basic.AdvAudio.Volume="Громкость (%)"
+Basic.AdvAudio.Volume="Громкость"
Basic.AdvAudio.Mono="Объединение в один канал"
Basic.AdvAudio.Balance="Баланс"
Basic.AdvAudio.SyncOffset="Смещение синхронизации (мс)"
NoSources.Title="Нет источников"
NoSources.Text="Похоже, вы еще не добавили ни одного источника. Вы будете выводить только пустой экран. Вы уверены, что хотите этого?"
NoSources.Text.AddSource="Вы можете добавить источники, нажав иконку + под окном Источники в главном окне в любое время."
+NoSources.Label="У вас нет источников.\nНажмите кнопку + ниже,\nили нажмите правой кнопкой здесь, чтобы добавить его."
ChangeBG="Установить цвет"
CustomColor="•Пользовательский цвет"
ResizeOutputSizeOfSource.Text="Базовое и выходное разрешение будет изменено до размера текущего источника."
ResizeOutputSizeOfSource.Continue="Хотите продолжить?"
+PreviewTransition="Предпросмотр перехода"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sk-SK.ini
Changed
VerticalLayout="Vertikálne rozloženie"
Group="Skupina"
DoNotShowAgain="Znovu neukazovať"
+Default="(Predvolené)"
+Calculating="Kalkulovanie..."
AlreadyRunning.Title="OBS je už spustený"
-AlreadyRunning.Text="Aplikácia OBS je už spustená! Prosím vypnite všetky existujúce inštancie OBS pred pokusom o spustenie novej inštancie. Ak máte OBS minimalizovaný do systémovej lišty, prosím skontrolujte, či tam stále beží."
+AlreadyRunning.Text="Aplikácia OBS je už spustená! Prosím vypnite všetky existujúce inštancie OBS pred pokusom o spustenie novej inštancie. Ak máte OBS minimalizovaný do systémovej lišty, prosím skontrolujte, či tam stále beží."
AlreadyRunning.LaunchAnyway="Napriek tomu spustiť"
DockCloseWarning.Title="Zatvorenie dokovateľného okna"
Basic.AutoConfig.StreamPage.ConnectAccount="Prepojiť účet (voliteľné)"
Basic.AutoConfig.StreamPage.DisconnectAccount="Odpojiť účet"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Odpojiť účet?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Táto zmena sa uplatní okamžite. Naozaj chcete odpojiť svoj účet?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Táto zmena sa uplatní okamžite. Naozaj chcete odpojiť svoj účet?"
Basic.AutoConfig.StreamPage.UseStreamKey="Použiť kľúč vysielania"
Basic.AutoConfig.StreamPage.Service="Služba"
Basic.AutoConfig.StreamPage.Service.ShowAll="Zobraziť všetky..."
Basic.Stats.DroppedFrames="Stratené snímky (sieť)"
Basic.Stats.MegabytesSent="Celkový dátový výstup"
Basic.Stats.Bitrate="Dátový tok"
+Basic.Stats.DiskFullIn="Disk plný za (približne)"
ResetUIWarning.Title="Naozaj chcete obnoviť používateľské rozhranie?"
-ResetUIWarning.Text="Obnovením používateľského rozhrania sa skryjú ďalšie doky. Pre ich opätovné zobrazenie ich budete musieť povoliť v ponuke Zobraziť.\n\nNaozaj chcete resetovať používateľské rozhranie?"
+ResetUIWarning.Text="Obnovením používateľského rozhrania sa skryjú ďalšie doky. Pre ich opätovné zobrazenie ich budete musieť povoliť v ponuke Zobraziť.\n\nNaozaj chcete resetovať používateľské rozhranie?"
Updater.Title="Nová aktualizácia k dispozícii"
Updater.Text="Je dostupná nová aktualizácia:"
ConfirmBWTest.Text="Vaše OBS je nakonfigurované pre režim testovania šírky pásma. Toto umožní zistiť parametre vašej siete bez spustenia živého vysielania na vašom kanáli. Po dokončení testovania musíte tento režim zakázať, ináč diváci neuvidia vami prenášaný obsah.\n\nNaozaj si želáte pokračovať?"
ConfirmExit.Title="Ukončiť OBS?"
-ConfirmExit.Text="OBS je momentálne aktívny. Všetky prúdy údajov/záznamy sa ukončia. Naozaj pokračovať?"
+ConfirmExit.Text="OBS je momentálne aktívny. Všetky prúdy údajov/záznamy sa ukončia. Naozaj pokračovať?"
ConfirmRemove.Title="Potvrdenie odobratia"
ConfirmRemove.Text="Naozaj si prajete odobrať '$1'?"
Output.StartReplayFailed="Nepodarilo sa spustiť medzipamäť znovunahrávania"
Output.StartFailedGeneric="Nastala chyba pri spúšťaní nahrávania. Podrobnosti nájdete v textovom logu.\n\nPoznámka: Ak používate NVENC alebo AMD enkodér, uistite sa, že používate najnovšiu verziu grafického ovládača."
+
Output.ConnectFail.Title="Spojenie sa nepodarilo"
Output.ConnectFail.BadPath="Neplatná cesta alebo URL. Prosím, skontrolujte, či sú vaše nastavenia správne."
Output.ConnectFail.ConnectFailed="Spojenie so serverom sa nepodarilo"
Output.ConnectFail.InvalidStream="K nastavenému kanálu alebo kľúču sa nedá pristupovať. Skontrolujte, prosím, či je váš vysielací kľúč správny. Ak áno, mohol nastať problém s pripojením k serveru."
-Output.ConnectFail.Error="Pri pokuse o pripojenie k serveru nastala neočakávaná chyba. Ďalšie informácie nájdete v textovom logu."
+Output.ConnectFail.Error="Pri pokuse o pripojenie k serveru nastala neočakávaná chyba. Ďalšie informácie nájdete v textovom logu."
Output.ConnectFail.Disconnected="Odpojený od servera."
+Output.StreamEncodeError.Title="Chyba kódovania"
+Output.StreamEncodeError.Msg="Nastala chyba pri kódovaní počas vysielania."
+
Output.RecordFail.Title="Nepodarilo sa spustiť nahrávanie"
Output.RecordFail.Unsupported="Výstupný formát nie je podporovaný alebo nepodporuje viac ako jednu zvukovú stopu. Skontrolujte nastavenia a skúste to znovu."
Output.RecordNoSpace.Title="Nedostatok miesta na disku"
Output.RecordNoSpace.Msg="Pre pokračovanie nahrávania nie je dostatok miesta na disku."
Output.RecordError.Title="Chyba nahrávania"
Output.RecordError.Msg="Pri nahrávaní došlo k nešpecifikovanej chybe."
+Output.RecordError.EncodeErrorMsg="Nastala chyba pri kódovaní počas nahrávania."
Output.ReplayBuffer.NoHotkey.Title="Nepriradená žiadna klávesová skratka!"
Output.ReplayBuffer.NoHotkey.Msg="Nie je nastavená žiadna klávesová skratka pre uloženie záznamu. Nastavte ju, prosím, aby ste mohli ukladať záznam."
Output.BadPath.Title="Nesprávna cesta k súboru"
-Output.BadPath.Text="Nastavená cesta k výstupnému súboru je chybná. Prosím, skontrolujte správnosť nastavenej cesty."
+Output.BadPath.Text="Nastavená cesta k výstupnému súboru je chybná. Prosím, skontrolujte správnosť nastavenej cesty."
LogReturnDialog="Nahranie logu bolo úspešné"
LogReturnDialog.CopyURL="Kopírovať URL"
Basic.Main.PreviewConextMenu.Enable="Zapnúť náhľad"
+Basic.Main.Preview.Disable="Vypnúť nahľad"
+
ScaleFiltering="Filter škálovania"
ScaleFiltering.Point="Bodové"
ScaleFiltering.Bilinear="Bilineárne"
Basic.MainMenu.Edit.Transform.FitToScreen="Prispôsobiť obrazovke (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Roztiahnuť na celú obrazovku (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Umiestniť na stred obrazovky (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrovať zvislo"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrovať vodorovne"
Basic.MainMenu.Edit.Order="P&oradie"
Basic.MainMenu.Edit.Order.MoveUp="Pos&unúť vyššie"
Basic.MainMenu.Edit.Order.MoveDown="Posunúť nižšie (&D)"
Basic.Settings.General.SystemTrayHideMinimize="Vždy minimalizovať do systémovej lišty namiesto panela úloh"
Basic.Settings.General.SaveProjectors="Uložiť projektory pri skončení"
Basic.Settings.General.Preview="Náhľad"
+Basic.Settings.General.OverflowHidden="Skryť pretečenie"
+Basic.Settings.General.OverflowAlwaysVisible="Pretečenie vždy viditeľné"
+Basic.Settings.General.OverflowSelectionHidden="Ukázať pretečenie aj keď je zdroj neviditeľný"
Basic.Settings.General.SwitchOnDoubleClick="Prejsť do scény pri dvojkliku"
Basic.Settings.General.StudioPortraitLayout="Zapnúť portrétové/vertikálne rozloženie"
Basic.Settings.General.TogglePreviewProgramLabels="Zobraziť popisy okien náhľadu a programu"
Basic.Settings.Audio="Zvuk"
Basic.Settings.Audio.SampleRate="Vzorkovacia frekvencia"
Basic.Settings.Audio.Channels="Kanály"
-Basic.Settings.Audio.MeterDecayRate="Rýchlosť útlmu snímača zvuku"
+Basic.Settings.Audio.Meters="Metre"
+Basic.Settings.Audio.MeterDecayRate="Rýchlosť slabnutia"
Basic.Settings.Audio.MeterDecayRate.Fast="Rýchlo"
Basic.Settings.Audio.MeterDecayRate.Medium="Stredne (typ I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Pomaly (typ II PPM)"
Basic.Settings.Audio.MultichannelWarning="Ak vysielate, uistite sa že vaša vysielacia služba podporuje prijímanie a aj prehrávanie priestorového zvuku. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast sú príklady služieb ktoré priestorový zvuk plne podporujú. Avšak Facebook Live a YouTube Live podporujú prijímanie priestorového zvuku, Facebook Live ho prevádza do stereo zvuku a YouTub Live prehráva iba 2 kanály.\n\nOBS zvukové filtre sú kompatibilné s priestorovým zvukom, no podpora u VST pluginu nie je garantovaná."
Basic.Settings.Audio.MultichannelWarning.Title="Povoliť priestorový zvuk?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Naozaj si želáte povoliť priestorový zvuk?"
-Basic.Settings.Audio.DesktopDevice="Zvukové zariadenie plochy"
-Basic.Settings.Audio.DesktopDevice2="Zvukové zariadenie plochy 2"
+Basic.Settings.Audio.Devices="Zariadenia"
+Basic.Settings.Audio.DesktopDevice="Zvuk plochy"
+Basic.Settings.Audio.DesktopDevice2="Zvuk plochy 2"
Basic.Settings.Audio.AuxDevice="Mikrofón/Aux - Zvukové zariadenie"
Basic.Settings.Audio.AuxDevice2="Mikrofón/Aux - Zvukové zariadenie 2"
Basic.Settings.Audio.AuxDevice3="Mikrofón/Aux - Zvukové zariadenie 3"
Basic.Settings.Advanced.FormatWarning="Upozornenie: Formáty farieb iné ako NV12 sú primárne určené na nahrávanie a nie sú odporúčane pre vysielanie. Použitie iných formátov môže spôsobiť zvýšené využitie CPU pri vysielaní kvôli prevodu medzi formátmi."
Basic.Settings.Advanced.Audio.BufferingTime="Čas medzipamäte zvuku"
Basic.Settings.Advanced.Video.ColorFormat="Formát farieb"
-Basic.Settings.Advanced.Video.ColorSpace="Farebný priestor YUV"
-Basic.Settings.Advanced.Video.ColorRange="Rozsah farieb YUV"
+Basic.Settings.Advanced.Video.ColorSpace="Farebný priestor"
+Basic.Settings.Advanced.Video.ColorRange="Farebný rozsah"
Basic.Settings.Advanced.Video.ColorRange.Partial="Čiastočný"
Basic.Settings.Advanced.Video.ColorRange.Full="Úplný"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Zariadenie na monitorovanie zvuku"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitorovacie zariadenie"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Predvolené"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Vypnúť zvukové utišovanie Windowsu"
Basic.Settings.Advanced.StreamDelay="Oneskorenie vysielania"
Basic.AdvAudio="Pokročilé nastavenia zvuku"
Basic.AdvAudio.Name="Názov"
-Basic.AdvAudio.Volume="Hlasitosť (%)"
+Basic.AdvAudio.Volume="Hlasitosť"
Basic.AdvAudio.Mono="Previesť na Mono"
Basic.AdvAudio.Balance="Vyváženie"
Basic.AdvAudio.SyncOffset="Oneskorenie synchronizácie (ms)"
NoSources.Title="Žiadne zdroje"
NoSources.Text="Nepridali ste žiadne zdroje obrazu, takže výstup bude prázdny. Naozaj chcete pokračovať?"
NoSources.Text.AddSource="Zdroje môžete kedykoľvek pridať kliknutím na ikonu + v zozname zdrojov v hlavnom okne."
+NoSources.Label="Nemáte žiadne zdroje.\nKliknite na tlačidlo + nižšie\nalebo pravým kliknite sem a nejaký pridajte."
ChangeBG="Nastaviť farbu"
CustomColor="Vlastná farba"
ResizeOutputSizeOfSource.Text="Základné a výstupné rozlíšenie budú zmenené na veľkosť súčasného zdroja."
ResizeOutputSizeOfSource.Continue="Chcete pokračovať?"
+PreviewTransition="Ukážka prechodu"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sl-SI.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sl-SI.ini
Changed
ConfirmRemove.Text="Ali ste prepričani, da želite odstraniti '$ 1'?"
+
Output.ConnectFail.Title="Povezava ni uspela"
Output.ConnectFail.BadPath="Neveljavna pot ali URL povezava. Prosimo, preverite vaše nastavitve za potrditev, da so veljavne."
Output.ConnectFail.ConnectFailed="Ni uspelo povezati s strežnikom"
Output.ConnectFail.Disconnected="Odklopiti od strežnika."
+
Output.BadPath.Title="Nepravilna pot do datoteke"
Output.BadPath.Text="Pot izhodne konfiguracije ni veljavna. Prosimo, preverite vaše nastavitve, da je določena veljavna pot datoteke."
UpdateAvailable="Nova posodobitev je na voljo"
-UpdateAvailable.Text="Verzija %1.%2.%3 je sedaj na voljo. <a href='%4'>Klikni tukaj za prenos</a>"
+UpdateAvailable.Text="Verzija %1.%2.%3 je sedaj na voljo. <a href='%4'>Klikni tukaj za prenos</a>"
Basic.DesktopDevice1="Namizni Zvok"
Basic.DesktopDevice2="Namizni Zvok 2"
+
Basic.Main.AddSceneDlg.Title="Dodaj seceno"
Basic.Main.AddSceneDlg.Text="Prosimo, vnesite ime scene"
Basic.Settings.Audio="Zvok"
Basic.Settings.Audio.SampleRate="Sample Rate"
Basic.Settings.Audio.Channels="Kanali"
-Basic.Settings.Audio.DesktopDevice="Namizna Zvočna Naprava"
-Basic.Settings.Audio.DesktopDevice2="Namizna Zvočna Naprava 2"
-Basic.Settings.Audio.AuxDevice="Mic / Dodatne Zvočne Naprave"
-Basic.Settings.Audio.AuxDevice2="Mic / Dodatne Zvočne Naprave 2"
-Basic.Settings.Audio.AuxDevice3="Mic / Dodatne Zvočne Naprave 3"
Basic.Settings.Advanced.Video.ColorRange.Partial="Delno"
Basic.Settings.Advanced.Video.ColorRange.Full="Celotno"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sq-AL.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sq-AL.ini
Changed
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Perdor Aktualen (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ose 30, por preferoj 60 kur eshte e mundur"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ose 30, por perferoj rezolucion te larte"
-Basic.AutoConfig.VideoPage.CanvasExplanation="Shenim: Revolucioni i kanvasit (baza) nuk eshte domosdoshmerisht rezolucioni i njetje me te cilin transmeton ose rregjistron. Rezolucioni i transmetimit/rregjistrimit mund te shkallzohet qe te ulen resurset e perdorimit ose kerkesat e bitratit."
+Basic.AutoConfig.VideoPage.CanvasExplanation="Shenim: Revolucioni i kanvasit (baza) nuk eshte domosdoshmerisht rezolucioni i njetje me te cilin transmeton ose rregjistron. Rezolucioni i transmetimit/rregjistrimit mund te shkallzohet qe te ulen resurset e perdorimit ose kerkesat e bitratit."
Basic.AutoConfig.StreamPage="Informacion mbi transmetimin"
Basic.AutoConfig.StreamPage.SubTitle="Ju lutem shkruani informacionin e transmetimit"
Basic.AutoConfig.StreamPage.Service="Sherbim"
+
+
+
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sr-CS.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sr-CS.ini
Changed
ShowInMultiview="Prikaži kao simultani pregled"
VerticalLayout="Organizovano po vertikali"
Group="Grupa objekata"
+DoNotShowAgain="Ne prikazuj ponovo"
+Default="(Podrazumevano)"
+Calculating="Proračunavam..."
AlreadyRunning.Title="OBS je već porkenut"
AlreadyRunning.Text="OBS je već pokrenut! Osim ako zaista želite da uradite ovo, molimo Vas da prekinete sve procese vezane za OBS pre nego što pokrenete nov zadatak. U slučaju da OBS radi u pozadini, molimo Vas da proverite system tray (ikonice dole desno, pored sata)."
Basic.AutoConfig.TestPage.SubTitle.Testing="Program trenutno izvršava set testova kako bi procenio optimalna podešavanja"
Basic.AutoConfig.TestPage.SubTitle.Complete="Testiranje je završeno"
Basic.AutoConfig.TestPage.TestingBandwidth="U toku je izvođenje testa propusnog opsega, ovo može potrajati nekoliko minuta..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Povezivanje sa: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Povezivanje sa: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Neuspеlo povеzivanjе sa sеrvеrom, molimo provеritе Vašu intеrnеt vеzu i pokušajtе ponovo."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testiranje propusnog opsega za: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testiranje propusnog opsega za: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="U toku je testiranje strim enkodera, ovo može potrajati par minuta..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="U toku je testiranje enkodera za snimanje, ovo može potrajati par minuta..."
Basic.AutoConfig.TestPage.TestingRes="U toku je testiranje rezolucije, ovo može potrajati nekoliko minuta..."
Basic.Stats="Statistika"
Basic.Stats.CPUUsage="Iskorišćenost procesora"
+Basic.Stats.HDDSpaceAvailable="Dostupan prostor na disku"
Basic.Stats.MemoryUsage="Iskorišćenost memorije"
Basic.Stats.AverageTimeToRender="Prosečno vreme potrebno da se prikaže frejm"
Basic.Stats.SkippedFrames="Preskočeni frejmovi zbog zaostatka kodiranja"
Output.StartReplayFailed="Neuspelo pokretanje bafera za ponovni prikaz"
Output.StartFailedGeneric="Neuspelo pokretanje izlaza. Molimo proverite prijavu za detalje.\n\n Obaveštenje: Ukoliko koristite NVENC ili AMD enkodere, postarajte se da su Vaši video drajveri ažurirani."
+
Output.ConnectFail.Title="Neuspešno povezivanje"
Output.ConnectFail.BadPath="Neispravna putanja ili URL konekcije. Molim proverite vaša podešavanja da potvrdite njihovu ispravnost."
Output.ConnectFail.ConnectFailed="Neuspešno povezivanje na server"
Output.ConnectFail.Error="Neočekivana greška u povezivanju sa serverom. Više informacija se nalazi u log datoteci."
Output.ConnectFail.Disconnected="Prekinuta veza sa serverom."
+
Output.RecordFail.Title="Neuspešno započinjanje snimanja"
Output.RecordFail.Unsupported="Izlazni format ili nije podržan ili ne podržava više od jedne zvučne trake. Molim proverite podešavanja i pokušajte ponovo."
Output.RecordNoSpace.Title="Nedovoljno prostora na disku"
Remux.HelpText="Priložite fajlove u ovaj prozor za remuks, ili izaberite praznu ''OBS Recording'' ćeliju da potražite fajl."
UpdateAvailable="Dostupna je novija verzija programa"
-UpdateAvailable.Text="Verzija %1.%2.%3 je dostupna. <a href='%4'>Kliknite ovde da preuzmete</a>"
+UpdateAvailable.Text="Verzija %1.%2.%3 je dostupna. <a href='%4'>Kliknite ovde da preuzmete</a>"
Basic.DesktopDevice1="Zvuk sa računara"
Basic.DesktopDevice2="Zvuk sa računara 2"
Basic.Main.PreviewConextMenu.Enable="Omogući pregled"
+
ScaleFiltering="Filter uvećanja"
ScaleFiltering.Point="Tačka"
ScaleFiltering.Bilinear="Bilinearno"
Basic.Settings.Audio="Zvuk"
Basic.Settings.Audio.SampleRate="Protok"
Basic.Settings.Audio.Channels="Kanali"
-Basic.Settings.Audio.MeterDecayRate="Stopa audiometrijskih oštećenja"
Basic.Settings.Audio.MeterDecayRate.Fast="Brza"
Basic.Settings.Audio.MeterDecayRate.Medium="Srednja (Tip I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Spora (Tip II PPM)"
Basic.Settings.Audio.MultichannelWarning="Ako je strim u toku, proverite da li vaša striming usluga podržava integraciju i plejbek zvuka okruženja. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast su primeri gde je zvuk okruženja u potpunosti podržan. Iako i Facebook Live i YouTube Live podržavaju integraciju okruženja, Facebook Live miksuje kao stereo, a YouTube Live reprodukuje samo dva kanala.\n\nOBS zvučni filteri su kompatibilni sa zvukom okruženja, mada podrška za VST priključke nije zagarantovana."
Basic.Settings.Audio.MultichannelWarning.Title="Da li želite da uključite zvuk okruženja?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Da li ste sigurni da želite da uključite zvuk okruženja?"
-Basic.Settings.Audio.DesktopDevice="Zvuk sa računara"
-Basic.Settings.Audio.DesktopDevice2="Zvuk sa računara 2"
-Basic.Settings.Audio.AuxDevice="Mikrofon/Ulaz"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/Ulaz 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/Ulaz 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/Pomoćni audio uređaj 4"
+Basic.Settings.Audio.Devices="Uređaji"
Basic.Settings.Audio.EnablePushToMute="Omogući stisni-za-mutiranje"
Basic.Settings.Audio.PushToMuteDelay="Kašnjenje opcije stisni-za-mutiranje"
Basic.Settings.Audio.EnablePushToTalk="Omogući Stisni-za-govor"
Basic.Settings.Audio.PushToTalkDelay="Kašnjenje opcije stisni-za-govor"
Basic.Settings.Audio.UnknownAudioDevice="[Uređaj nije povezan ili nije dostupan]"
+Basic.Settings.Audio.Disabled="Onemogućeno"
Basic.Settings.Advanced="Napredno"
Basic.Settings.Advanced.General.ProcessPriority="Prioritet procesa"
Basic.Settings.Advanced.FormatWarning="Upozorenje: Formati boja različiti od NV12 su prvenstveno namenjeni za snimanje i nisu preporučeni za strimovanje. Strimovanje može prouzrokovati povišeno zauzeće procesora zbog pretvaranja formata boja."
Basic.Settings.Advanced.Audio.BufferingTime="Vreme baferovanja zvuka"
Basic.Settings.Advanced.Video.ColorFormat="Format boja"
-Basic.Settings.Advanced.Video.ColorSpace="YUV prostor boja"
-Basic.Settings.Advanced.Video.ColorRange="YUV raspon boja"
Basic.Settings.Advanced.Video.ColorRange.Partial="Delimično"
Basic.Settings.Advanced.Video.ColorRange.Full="Potpuno"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Uređaj za audio nadzor"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Podrazumevano"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Isključi Windows audio ducking"
Basic.Settings.Advanced.StreamDelay="Kašnjenje strimovanja"
Basic.AdvAudio="Napredna podešavanja zvuka"
Basic.AdvAudio.Name="Ime"
-Basic.AdvAudio.Volume="Glasnoća (%)"
Basic.AdvAudio.Mono="Spoji u mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Razlika u sinhronizaciji (ms)"
Hotkeys.AppleKeypadDecimal=". (Keypad)"
Hotkeys.AppleKeypadEqual="= (Keypad)"
Hotkeys.MouseButton="Miš %1"
+Hotkeys.Escape="Esc"
Mute="Mutiraj"
Unmute="Odmutiraj"
ResizeOutputSizeOfSource.Text="Rezolucija izlaza i osnovna rezolucija će biti promenjene kako bi odgovarale veličini trenutnog izvora."
ResizeOutputSizeOfSource.Continue="Da li želite da nastavite?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sr-SP.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sr-SP.ini
Changed
Basic.AutoConfig.TestPage.SubTitle.Testing="Програм тренутно извршава сет тестова како би проценио оптимална подешавања"
Basic.AutoConfig.TestPage.SubTitle.Complete="Тестирање је завршено"
Basic.AutoConfig.TestPage.TestingBandwidth="У току је извођење теста пропусног опсега, ово може потрајати неколико минута..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Повезивање са: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Повезивање са: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Неуспело повезивање са сервером, молимо проверите Вашу интернет везу и покушајте поново."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Тестирање пропусног опсега за: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Тестирање пропусног опсега за: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="У току је тестирање стрим енкодера, ово може потрајати неколико минута..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="У току је тестирање енкодера за снимање, ово може потрајати пар минута..."
Basic.AutoConfig.TestPage.TestingRes="У току је тестирање резолуције, ово може потрајати неколико минута..."
Output.StartReplayFailed="Неуспело покретање бафера за поновни приказ"
Output.StartFailedGeneric="Неуспело покретање излаза. Молимо проверите пријaву за детаље.\n\n Обавештење: уколико користите NVENC или AMD енкодере, постарајте се да су Ваши видео драјвери ажурирани."
+
Output.ConnectFail.Title="Неуспешно повезивање"
Output.ConnectFail.BadPath="Неисправна путања или URL конекције. Молим проверите ваша подешавања да потврдите њихову исправност."
Output.ConnectFail.ConnectFailed="Неуспешно повезивање на сервер"
Output.ConnectFail.Error="Неочекивана грешка у повезивању са сервером. Више информација се налази у лог датотеци."
Output.ConnectFail.Disconnected="Прекинута веза са сервером."
+
Output.RecordFail.Title="Неуспешно започињање снимања"
Output.RecordFail.Unsupported="Излазни формат или није подржан или не подржава више од једне звучне траке. Молим проверите подешавања и покушајте поново."
Output.RecordNoSpace.Title="Недовољно простора на диску"
Remux.HelpText="Приложите фајлове у овај прозор за ремукс, или изаберите празну \"OBS Recording\" ћелију да потражите фајл."
UpdateAvailable="Доступна је новија верзија програма"
-UpdateAvailable.Text="Верзија %1.%2.%3 је доступна. <a href='%4'>Кликните овде да преузмете</a>"
+UpdateAvailable.Text="Верзија %1.%2.%3 је доступна. <a href='%4'>Кликните овде да преузмете</a>"
Basic.DesktopDevice1="Звук са рачунара"
Basic.DesktopDevice2="Звук са рачунара 2"
Basic.Main.PreviewConextMenu.Enable="Омогући преглед"
+
ScaleFiltering="Филтер увећања"
ScaleFiltering.Point="Тачка"
ScaleFiltering.Bilinear="Билинеарно"
Basic.Settings.Audio="Звук"
Basic.Settings.Audio.SampleRate="Проток"
Basic.Settings.Audio.Channels="Канали"
-Basic.Settings.Audio.MeterDecayRate="Стопа аудиометријских оштећења"
Basic.Settings.Audio.MeterDecayRate.Fast="Брза"
Basic.Settings.Audio.MeterDecayRate.Medium="Средња (Tип I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Спора (Tип II PPM)"
Basic.Settings.Audio.MultichannelWarning="Ако је стрим у току, проверите да ли ваша стриминг услуга подржава интеграцију и плејбек звука окружења. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast су примери где је звук окружења у потпуности подржан. Иако и Facebook Live i YouTube Live подржавају интеграцију окружења, Facebook Live миксује као стерео, а YouTube Live репродукује само два канала. \n\nOBS звучни филтери су компатибилни са звуком окружења, мада подршка за VST прикључке није загарантована."
Basic.Settings.Audio.MultichannelWarning.Title="Да ли желите да укључите звук окружења?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Да ли сте сигурни да желите да укључите звук окружења?"
-Basic.Settings.Audio.DesktopDevice="Звук са рачунара"
-Basic.Settings.Audio.DesktopDevice2="Звук са рачунара 2"
-Basic.Settings.Audio.AuxDevice="Микрофон/Улаз"
-Basic.Settings.Audio.AuxDevice2="Микрофон/Улаз 2"
-Basic.Settings.Audio.AuxDevice3="Микрофон/Улаз 3"
-Basic.Settings.Audio.AuxDevice4="Микрофон/Помоћни аудио уређај 4"
Basic.Settings.Audio.EnablePushToMute="Омогући стисни-за-мутирање"
Basic.Settings.Audio.PushToMuteDelay="Кашњење опције стисни-за-мутирање"
Basic.Settings.Audio.EnablePushToTalk="Омогући Стисни-за-говор"
Basic.Settings.Advanced.FormatWarning="Упозорење: Формати боја различити од NV12 су првенствено намењени за снимање и нису препоручени за стримовање. Стримовање може проузроковати повишено заузеће процесора због претварања формата боја."
Basic.Settings.Advanced.Audio.BufferingTime="Време баферовања звука"
Basic.Settings.Advanced.Video.ColorFormat="Формат боја"
-Basic.Settings.Advanced.Video.ColorSpace="YUV простор боја"
-Basic.Settings.Advanced.Video.ColorRange="YUV распон боја"
Basic.Settings.Advanced.Video.ColorRange.Partial="Делимично"
Basic.Settings.Advanced.Video.ColorRange.Full="Потпуно"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Уређај за аудио надзор"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Подразумевано"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Искључи Windows audio ducking"
Basic.Settings.Advanced.StreamDelay="Кашњење стримовања"
Basic.AdvAudio="Напредна подешавања звука"
Basic.AdvAudio.Name="Име"
-Basic.AdvAudio.Volume="Гласноћа (%)"
Basic.AdvAudio.Mono="Споји у моно"
Basic.AdvAudio.Balance="Баланс"
Basic.AdvAudio.SyncOffset="Разлика у синхронизацији (ms)"
ResizeOutputSizeOfSource.Text="Резолуција излаза и основна резолуција ће бити промењене како би одговарале величини тренутног извора."
ResizeOutputSizeOfSource.Continue="Да ли желите да наставите?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/sv-SE.ini
Changed
VerticalLayout="Vertikal layout"
Group="Grupp"
DoNotShowAgain="Visa inte igen"
+Default="(Standard)"
+Calculating="Beräknar..."
AlreadyRunning.Title="OBS körs redan"
-AlreadyRunning.Text="OBS körs redan! Såvida du gjorde detta med flit, stäng ned alla befintliga instanser av OBS innan du försöker köra en ny instans. Om du har minimerat OBS till systemfältet, kontroller om det fortfarande körs där."
+AlreadyRunning.Text="OBS körs redan! Såvida du gjorde detta med flit, stäng ned alla befintliga instanser av OBS innan du försöker köra en ny instans. Om du har minimerat OBS till systemfältet, kontroller om det fortfarande körs där."
AlreadyRunning.LaunchAnyway="Kör ändå"
DockCloseWarning.Title="Stäng flytande fönster"
Auth.StreamInfo="Ströminformation"
TwitchAuth.Stats="Twitch-statistik"
TwitchAuth.Feed="Aktivitetsflöde för Twitch"
+TwitchAuth.TwoFactorFail.Title="Kunde inte efterfråga strömnyckel"
+TwitchAuth.TwoFactorFail.Text="OBS kunde inte ansluta till ditt Twitch-konto. Se till att tvåfaktorsautentiseringen har ställts in i <a href='https://www.twitch.tv/settings/security'>säkerhetsinställningarna på Twitch</a> då detta är nödvändigt för att kunna strömma."
Copy.Filters="Kopiera filter"
Paste.Filters="Klistra in filter"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Använd nuvarande (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Antingen 60 eller 30, men föredra 60 när det är möjligt"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Antingen 60 eller 30, men föredra hög upplösning"
-Basic.AutoConfig.VideoPage.CanvasExplanation="OBS: Kanvasens (grundens) upplösning är nödvändigtvis samma som upplösningen upp kommer att strömma eller spela in med. Din riktiga upplösning för strömning/inspelning kan skalas ned från kanvasupplösningen för att reducera användning av resurser eller krav på bithastighet."
+Basic.AutoConfig.VideoPage.CanvasExplanation="OBS: Kanvasens (grundens) upplösning är nödvändigtvis samma som upplösningen upp kommer att strömma eller spela in med. Din riktiga upplösning för strömning/inspelning kan skalas ned från kanvasupplösningen för att reducera användning av resurser eller krav på bithastighet."
Basic.AutoConfig.StreamPage="Ströminformation"
Basic.AutoConfig.StreamPage.SubTitle="Var god ange din ströminformation"
Basic.AutoConfig.StreamPage.ConnectAccount="Anslut konto (valfritt)"
Basic.Stats.DroppedFrames="Förlorade bildrutor (nätverk)"
Basic.Stats.MegabytesSent="Total datautmatning"
Basic.Stats.Bitrate="Bithastighet"
+Basic.Stats.DiskFullIn="Hårddisk full om (ca.)"
ResetUIWarning.Title="Är du säker på att du vill återställa gränssnittet?"
ResetUIWarning.Text="När gränssnittet återställs dölj ytterligare komponenter. Du kommer behöva ta fram dessa komponenter från menyn Visa om du vill att de ska vara synliga.\n\nÄr du säker på att du vill återställa gränssnittet?"
ConfirmBWTest.Text="Du har konfigurerat OBS i testläge för bandbredd. Detta läge låter dig testa nätverket utan att din kanal direktsänder. När du har testat färdigt behöver du inaktivera den för att att tittare ska kunna se din ström.\n\nVill du fortsätta?"
ConfirmExit.Title="Avsluta OBS?"
-ConfirmExit.Text="OBS är aktivt. Alla strömmar/inspelningar kommer att stängas av. Är du säker på att du vill avsluta?"
+ConfirmExit.Text="OBS är aktivt. Alla strömmar/inspelningar kommer att stängas av. Är du säker på att du vill avsluta?"
ConfirmRemove.Title="Bekräfta borttagning"
-ConfirmRemove.Text="Vill du verkligen ta bort '$1'?"
+ConfirmRemove.Text="Vill du verkligen ta bort \"$1\"?"
ConfirmRemove.TextMultiple="Är du säker på att du vill ta bort %1 poster?"
Output.StartStreamFailed="Misslyckades att starta strömning"
Output.StartRecordingFailed="Misslyckades att starta inspelning"
Output.StartReplayFailed="Misslyckades att starta reprisbuffert"
-Output.StartFailedGeneric="Misslyckades att starta utmatningen. Kolla loggen för detaljer.\n\nOBS: Om du använder kodarna NVENC eller AMD, se till att dina grafikdrivrutiner är uppdaterade."
+Output.StartFailedGeneric="Misslyckades att starta utmatningen. Kolla loggen för detaljer.\n\nOBS: Om du använder kodarna NVENC eller AMD, se till att dina grafikdrivrutiner är uppdaterade."
+
Output.ConnectFail.Title="Anslutning misslyckades"
Output.ConnectFail.BadPath="Ogiltig sökväg eller anslutnings-URL. Kontrollera att dina inställningar är korrekta."
Output.ConnectFail.Error="Ett oväntat fel uppstod vid anslutning till servern. Se loggfilen för ytterligare information."
Output.ConnectFail.Disconnected="Nedkopplad från servern."
+Output.StreamEncodeError.Title="Kodningsfel"
+Output.StreamEncodeError.Msg="Ett kodarfel uppstod under strömmande."
+
Output.RecordFail.Title="Det gick inte att starta inspelningen"
Output.RecordFail.Unsupported="Antingen stöds inte utdataformatet eller så har det inte stöd för mer än ett ljudspår. Kontrollera dina inställningar och försök igen."
Output.RecordNoSpace.Title="Otillräckligt diskutrymme"
Output.RecordNoSpace.Msg="Det finns inte tillräckligt med diskutrymme för att fortsätta inspelningen."
Output.RecordError.Title="Inspelningsfel"
Output.RecordError.Msg="Ett okänt fel uppstod vid inspelning."
+Output.RecordError.EncodeErrorMsg="Ett kodarfel uppstod under inspelning."
Output.ReplayBuffer.NoHotkey.Title="Ingen angivet kortkommando!"
Output.ReplayBuffer.NoHotkey.Msg="Inget kortkommando för att spara reprisbufferten har angivits. Ange kortkommandot \"Spara\" för att kunna spara reprisinspelningar."
Basic.Main.PreviewConextMenu.Enable="Aktivera förhandsvisning"
+Basic.Main.Preview.Disable="Inaktivera förhandsvisning"
+
ScaleFiltering="Skalningsfiltrering"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilinjär"
Basic.SourceSelect.AddExisting="Lägg till befintlig"
Basic.SourceSelect.AddVisible="Gör källan synlig"
-Basic.PropertiesWindow="Egenskaper för '%1'"
+Basic.PropertiesWindow="Egenskaper för \"%1\""
Basic.PropertiesWindow.AutoSelectFormat="%1 (välj automatiskt: %2)"
Basic.PropertiesWindow.SelectColor="Välj färg"
Basic.PropertiesWindow.SelectFont="Välj typsnitt"
Basic.PropertiesWindow.ConfirmTitle="Inställningarna har ändrats"
-Basic.PropertiesWindow.Confirm="Det finns osparade ändringar. Vill du behålla dem?"
+Basic.PropertiesWindow.Confirm="Det finns osparade ändringar. Vill du behålla dem?"
Basic.PropertiesWindow.NoProperties="Inga inställningar tillgängliga"
Basic.PropertiesWindow.AddFiles="Lägg till Filer"
Basic.PropertiesWindow.AddDir="Lägg till mapp"
Basic.PropertiesWindow.AddURL="Lägg till Sökväg/URL"
-Basic.PropertiesWindow.AddEditableListDir="Lägg till mapp i '%1'"
-Basic.PropertiesWindow.AddEditableListFiles="Lägg till filer i '%1'"
-Basic.PropertiesWindow.AddEditableListEntry="Lägg till post i '%1'"
-Basic.PropertiesWindow.EditEditableListEntry="Redigera post från '%1'"
+Basic.PropertiesWindow.AddEditableListDir="Lägg till mapp i \"%1\""
+Basic.PropertiesWindow.AddEditableListFiles="Lägg till filer i \"%1\""
+Basic.PropertiesWindow.AddEditableListEntry="Lägg till post i \"%1\""
+Basic.PropertiesWindow.EditEditableListEntry="Redigera post från \"%1\""
Basic.PropertiesView.FPS.Simple="Enkla bildfrekvensvärden"
Basic.PropertiesView.FPS.Rational="Rationella bildfrekvensvärden"
Basic.PropertiesView.FPS.ValidFPSRanges="Giltiga bildfrekvensintervall:"
-Basic.InteractionWindow="Interagerar med '%1'"
+Basic.InteractionWindow="Interagerar med \"%1\""
Basic.StatusBar.Reconnecting="Frånkopplad, återansluter om %2 sekund(er) (försök %1)"
Basic.StatusBar.AttemptingReconnect="Försöker att återansluta... (försök %1)"
Basic.Filters.AsyncFilters="Audio/Video filter"
Basic.Filters.AudioFilters="Ljudfilter"
Basic.Filters.EffectFilters="Effektfilter"
-Basic.Filters.Title="Filter för '%1'"
+Basic.Filters.Title="Filter för \"%1\""
Basic.Filters.AddFilter.Title="Filternamn"
Basic.Filters.AddFilter.Text="Vänligen ange namnet på filtret"
Basic.MainMenu.Edit.Transform.FitToScreen="Anpassa till skärmen (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Anpa&ssa storlek till skärmen"
Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrera på skärmen"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrera vertikalt"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrera horisontalt"
Basic.MainMenu.Edit.Order="&Ordning"
Basic.MainMenu.Edit.Order.MoveUp="Flytta &upp"
Basic.MainMenu.Edit.Order.MoveDown="Flytta ne&d"
Basic.Settings.Output.Simple.Warn.VideoBitrate="Varning: Streamens videobit-rate kommer att sättas till %1, vilket är den övre gränsen för den nuvarande streaming-tjänsten. Om du är säker på att du vill gå över %1, aktivera \"avancerade kodarinställningar\" och avaktivera \"Tvinga streaming-tjänstens bit-rategränser\"."
Basic.Settings.Output.Simple.Warn.AudioBitrate="Varning: Streamens ljudbit-rate kommer att sättas till %1, vilket är den övre gränsen för den nuvarande streaming-tjänsten. Om du är säker på att du vill gå över %1, aktivera \"avancerade kodarinställningar\" och avaktivera \"Tvinga streaming-tjänstens bit-rategränser\"."
Basic.Settings.Output.Simple.Warn.Encoder="Varning: Inspelning med en mjukvaru-kodare i annan kvalitet än streamen kräver mer CPU-använding om du streamar och spelar in samtidigt."
-Basic.Settings.Output.Simple.Warn.Lossless="Varning: Förlustfri kvalitet generar oerhört stora filstorlekar! Förlustfri kvalitet kan använda upp till 7 gigabyte hårddiskutrymme per minut vid höga upplösningar och bildfrekvenser. Detta rekommenderas inte för långa inspelningar såvida du har riktigt mycket hårddiskutrymme tillgängligt."
+Basic.Settings.Output.Simple.Warn.Lossless="Varning: Förlustfri kvalitet generar oerhört stora filstorlekar! Förlustfri kvalitet kan använda upp till 7 gigabyte hårddiskutrymme per minut vid höga upplösningar och bildfrekvenser. Detta rekommenderas inte för långa inspelningar såvida du har riktigt mycket hårddiskutrymme tillgängligt."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Är du säker på att du vill använda förlustfri kvalitet?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Varning angående förlustfri kvalitet!"
Basic.Settings.Output.Simple.Encoder.Software="Programvara (x264)"
Basic.Settings.Audio="Ljud"
Basic.Settings.Audio.SampleRate="Samplingsfrekvens"
Basic.Settings.Audio.Channels="Kanaler"
-Basic.Settings.Audio.MeterDecayRate="Ljudmätarens förfallfrekvens"
+Basic.Settings.Audio.Meters="Mätare"
+Basic.Settings.Audio.MeterDecayRate="Sänkningshastighet"
Basic.Settings.Audio.MeterDecayRate.Fast="Snabb"
Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Långsam (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Om du strömmar, se till att kolla om din strömtjänst stöder både inmatning och uppspelning av surroundljud. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast är några exempel på tjänster som har fullt stöd. Fastän Facebook Live och YouTube Live stöder inmatning för surroundljud mixar Facebook Live ned till stereo och YouTube Live spelar upp i bara två kanaler.\n\nLjudfiltren i OBS är kompatibla med surroundljud, fast stöd för VST-insticksmodulen garanteras inte."
Basic.Settings.Audio.MultichannelWarning.Title="Aktivera surroundljud?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Är du säker på att du vill aktivera surroundljud?"
-Basic.Settings.Audio.DesktopDevice="Skrivbordsljudenhet"
-Basic.Settings.Audio.DesktopDevice2="Skrivbordsljudenhet 2"
-Basic.Settings.Audio.AuxDevice="Mikrofon/extra ljudenhet"
-Basic.Settings.Audio.AuxDevice2="Mikrofon/extra ljudenhet 2"
-Basic.Settings.Audio.AuxDevice3="Mikrofon/extra ljudenhet 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/extra ljudenhet 4"
+Basic.Settings.Audio.Devices="Enheter"
+Basic.Settings.Audio.DesktopDevice="Skrivbordsljud"
+Basic.Settings.Audio.DesktopDevice2="Skrivbordsljud 2"
+Basic.Settings.Audio.AuxDevice="Mikrofon/extra ljud"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/extra ljud 2"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/extra ljud 3"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/extra ljud 4"
Basic.Settings.Audio.EnablePushToMute="Aktivera tryck för att tysta"
Basic.Settings.Audio.PushToMuteDelay="Fördröjning för tryck för att tysta"
Basic.Settings.Audio.EnablePushToTalk="Aktivera tryck för att tala"
Basic.Settings.Advanced.FormatWarning="Varning: Andra färgformat än NV12 är avsedda för inspelning och rekommenderas inte för att strömma. Högre processoranvändning kan uppstå vid strömning p.g.a. konvertering av färgformat."
Basic.Settings.Advanced.Audio.BufferingTime="Ljudbuffringstid"
Basic.Settings.Advanced.Video.ColorFormat="Färgformat"
-Basic.Settings.Advanced.Video.ColorSpace="YUV-färgrymd"
-Basic.Settings.Advanced.Video.ColorRange="YUV-färgområde"
+Basic.Settings.Advanced.Video.ColorSpace="Färgrymd"
+Basic.Settings.Advanced.Video.ColorRange="Färgintervall"
Basic.Settings.Advanced.Video.ColorRange.Partial="Partiell"
Basic.Settings.Advanced.Video.ColorRange.Full="Full"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Ljuduppspelningsenhet"
+Basic.Settings.Advanced.Audio.MonitoringDevice="Uppspelningsenhet"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Inaktivera audio ducking i Windows"
Basic.Settings.Advanced.StreamDelay="Strömfördröjning"
Basic.AdvAudio="Avancerade ljudinställningar"
Basic.AdvAudio.Name="Namn"
-Basic.AdvAudio.Volume="Volym (%)"
+Basic.AdvAudio.Volume="Volym"
Basic.AdvAudio.Mono="Nedmixa till mono"
Basic.AdvAudio.Balance="Balans"
Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
Hotkeys.Down="Ned"
Hotkeys.Windows="Windows"
Hotkeys.Super="Super"
-Hotkeys.Menu="Meny"
+Hotkeys.Menu="Menu"
Hotkeys.Space="Mellanslag"
Hotkeys.NumpadNum="%1 (Numpad)"
Hotkeys.NumpadMultiply="* (Numpad)"
Hotkeys.NumpadAdd="+ (Numpad)"
Hotkeys.NumpadSubtract="- (Numpad)"
Hotkeys.NumpadDecimal=", (Numpad)"
-Hotkeys.AppleKeypadNum="%1 (Keypad)"
-Hotkeys.AppleKeypadMultiply="* (Keypad)"
-Hotkeys.AppleKeypadDivide="/ (Keypad)"
-Hotkeys.AppleKeypadAdd="+ (Keypad)"
-Hotkeys.AppleKeypadSubtract="- (Keypad)"
-Hotkeys.AppleKeypadDecimal=". (Keypad)"
-Hotkeys.AppleKeypadEqual="= (Keypad)"
+Hotkeys.AppleKeypadNum="%1 (numpad)"
+Hotkeys.AppleKeypadMultiply="* (numpad)"
+Hotkeys.AppleKeypadDivide="/ (numpad)"
+Hotkeys.AppleKeypadAdd="+ (numpad)"
+Hotkeys.AppleKeypadSubtract="- (numpad)"
+Hotkeys.AppleKeypadDecimal=". (numpad)"
+Hotkeys.AppleKeypadEqual="= (numpad)"
Hotkeys.MouseButton="Musknapp %1"
Hotkeys.Escape="Esc"
Push-to-mute="Tryck för att tysta"
Push-to-talk="Tryck för att tala"
-SceneItemShow="Visa '%1'"
-SceneItemHide="Dölj '%1'"
+SceneItemShow="Visa \"%1\""
+SceneItemHide="Dölj \"%1\""
OutputWarnings.NoTracksSelected="Du måste välja minst ett spår"
OutputWarnings.MultiTrackRecording="Varning: En del format (t.ex. FLV) stöder inte flera spår för varje inspelning"
NoSources.Title="Inga källor"
NoSources.Text="Det verkar som om du inte har lagt till några videokällor än, så du kommer endast att visa en tom skärm. Är du säker på att du vill göra detta?"
NoSources.Text.AddSource="Du kan lägga till källor genom att klicka på plusikonen under rutan \"källor\" i huvudfönstret när som helst."
+NoSources.Label="Du har inga källor.\nKlicka på plusknappen nedan eller\nhögerklicka för att lägga till en."
ChangeBG="Ändra färg"
CustomColor="Anpassad färg"
ResizeOutputSizeOfSource.Text="Grund- och utmatningsupplösningarna kommer att ändras till storleken för den nuvarande källan."
ResizeOutputSizeOfSource.Continue="Vill du fortsätta?"
+PreviewTransition="Förhandsvisa övergång"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ta-IN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ta-IN.ini
Changed
Auth.AuthFailure.Title="அங்கீகரிப்பு தோல்வி"
Auth.AuthFailure.Text="%1:\n\n%2: %3 உடன் அங்கீகரிக்க தோல்வி"
Auth.InvalidScope.Title="அங்கீகாரம் தேவை"
-Auth.InvalidScope.Text="%1 அங்கீகார தேவைகள் மாறிவிட்டன. சில அம்சங்கள் கிடைக்காது."
+Auth.InvalidScope.Text="%1 அங்கீகார தேவைகள் மாறிவிட்டன. சில அம்சங்கள் கிடைக்காது."
Auth.LoadingChannel.Title="சேனல் தகவல் ஏற்றுகிறது..."
Auth.LoadingChannel.Text="சேனல் தகவல் %1ஏற்றுகிறது, தயவுசெய்து காத்திருக்கவும்..."
Auth.ChannelFailure.Title="சேனல் நினைவேற்றுவது தோல்வியுற்றது"
BandwidthTest.Region.Asia="ஆசியா"
BandwidthTest.Region.Other="மற்ற"
-Basic.FirstStartup.RunWizard="தானியங்கு உள்ளமைவு வழிகாட்டியை இயக்க விரும்புகிறீர்களா? நீங்கள் கைமுறையாக மேலும் உங்கள் அமைப்புகளை பிரதான சாளரத்தில் அமைப்புகள் பொத்தானை கிளிக் செய்வதன் மூலம் உள்ளமைக்கலாம்."
+Basic.FirstStartup.RunWizard="தானியங்கு உள்ளமைவு வழிகாட்டியை இயக்க விரும்புகிறீர்களா? நீங்கள் கைமுறையாக மேலும் உங்கள் அமைப்புகளை பிரதான சாளரத்தில் அமைப்புகள் பொத்தானை கிளிக் செய்வதன் மூலம் உள்ளமைக்கலாம்."
Basic.FirstStartup.RunWizard.NoClicked="உங்கள் மனதை மாற்றினால், நீங்கள் தானியங்கு உள்ளமைவு வழிகாட்டி எந்த நேரத்திலும் மீண்டும் பட்டியலிருந்து கருவிகளை இயக்கலாம்."
Basic.AutoConfig="தானியங்கு உள்ளமைவு வழிகாட்டி"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="தற்போதையதை பயன்படுத்தவும் (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="ஒன்று 60 அல்லது 30, ஆனால் முடிந்தால் 60 தெரிந்தெடுக்கவும்"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="ஒன்று 60 அல்லது 30, ஆனால் உயர் தெளிவுத்திறனை தெரிந்தெடுக்கவும்"
-Basic.AutoConfig.VideoPage.CanvasExplanation="குறிப்பு: சுற்றளவு (அடிப்படை) தெளிவுதிறனானது நேரலை அல்லது பதிவுக்கான தெளிவுதிறனுக்கு சமமாக இருக்கவேண்டிய அவசியம் இல்லை. உங்கள் உண்மையான நேரலை அல்லது பதிவுக்கான தெளிவுதிறன் சுற்றளவு தெளிவுதிறனிலிருந்து ஆதார பயன்பாடு அல்லது பிட்ரேட் தேவைகளுக்கு குறைக்கப்பட்டு இருக்கலாம்."
+Basic.AutoConfig.VideoPage.CanvasExplanation="குறிப்பு: சுற்றளவு (அடிப்படை) தெளிவுதிறனானது நேரலை அல்லது பதிவுக்கான தெளிவுதிறனுக்கு சமமாக இருக்கவேண்டிய அவசியம் இல்லை. உங்கள் உண்மையான நேரலை அல்லது பதிவுக்கான தெளிவுதிறன் சுற்றளவு தெளிவுதிறனிலிருந்து ஆதார பயன்பாடு அல்லது பிட்ரேட் தேவைகளுக்கு குறைக்கப்பட்டு இருக்கலாம்."
Basic.AutoConfig.StreamPage="அலை தகவல்"
Basic.AutoConfig.StreamPage.SubTitle="உங்கள் அலை தகவலை உள்ளிடவும்"
Basic.AutoConfig.StreamPage.ConnectAccount="இணைய கணக்கு (விருப்ப)"
Basic.AutoConfig.StreamPage.DisconnectAccount="கணக்கைத் துண்டிக்கவும்"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="கணக்கைத் துண்டிக்கவா?"
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="இந்த மாற்றம் உடனடியாக பொருந்தும். உங்கள் கணக்கு துண்டிக்க விரும்புகிறீர்களா?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="இந்த மாற்றம் உடனடியாக பொருந்தும். உங்கள் கணக்கு துண்டிக்க விரும்புகிறீர்களா?"
Basic.AutoConfig.StreamPage.UseStreamKey="நேரலை குறியீட்டை பயன்படுத்தவும்"
Basic.AutoConfig.StreamPage.Service="சேவை"
Basic.AutoConfig.StreamPage.Service.ShowAll="அனைத்தும் காண்பி..."
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="விரும்பிய வன்பொருள் குறியீடு"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="வன்பொருள் குறியீட்டு முறை அதிக CPU பயன்பாட்டை நீக்குகிறது, ஆனால் அதே அளவு தரத்தை பெற bitrate தேவைப்படலாம்."
Basic.AutoConfig.StreamPage.StreamWarning.Title="நேரலை எச்சரிக்கை"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="அலைவரிசை சோதனை உங்கள் சேனலுக்கு ஆடியோ இல்லாமல் சீரற்ற வீடியோ தரவை நேரலை செய்ய உள்ளது. நீங்கள் முடிந்தால், சோதனை வீடியோக்களைத் தற்காலிகமாக நிறுத்துமாறு பரிந்துரைக்கிறோம், சோதனையை முடிந்தவரை, தனிப்பட்ட நேரலையாக அமைக்கலாம். தொடர்ந்து?"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="அலைவரிசை சோதனை உங்கள் சேனலுக்கு ஆடியோ இல்லாமல் சீரற்ற வீடியோ தரவை நேரலை செய்ய உள்ளது. நீங்கள் முடிந்தால், சோதனை வீடியோக்களைத் தற்காலிகமாக நிறுத்துமாறு பரிந்துரைக்கிறோம், சோதனையை முடிந்தவரை, தனிப்பட்ட நேரலையாக அமைக்கலாம். தொடர்ந்து?"
Basic.AutoConfig.TestPage="இறுதி முடிவுகள்"
Basic.AutoConfig.TestPage.SubTitle.Testing="இந்த நிகழ்ச்சி மிகவும் சிறந்த அமைப்புகளை மதிப்பிடுவதற்கான சோதனைகளின் தொகுப்பை இப்போது செயல்படுத்துகிறது"
Basic.AutoConfig.TestPage.SubTitle.Complete="சோதனை முடிந்தது"
Basic.AutoConfig.TestPage.TestingBandwidth="அலைவரிசை சோதனை செய்கிறது, இதற்கு சில நிமிடங்கள் ஆகலாம்..."
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="இணைப்பதற்கு: %1..."
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="இணைப்பதற்கு: %1..."
Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="எந்த சேவையகங்களுடன் இணைப்பதில் தோல்வி, உங்கள் இணைய இணைப்பைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்."
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="அலைவரிசை பரிசோதனை: %1"
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="அலைவரிசை பரிசோதனை: %1"
Basic.AutoConfig.TestPage.TestingStreamEncoder="அலை குறியாக்கி பரிசோதனை, இது ஒரு நிமிடம் ஆகலாம்..."
Basic.AutoConfig.TestPage.TestingRecordingEncoder="பதிவு குறியாக்கி பரிசோதனை, இது ஒரு நிமிடம் ஆகலாம்..."
Basic.AutoConfig.TestPage.TestingRes="தெளிவுத்திறன் பரிசோதனை, இது சில நிமிடங்கள் எடுக்கலாம்..."
Updater.NoUpdatesAvailable.Text="மேம்படுத்தல்கள் ஏதும் நடப்பில் இல்லை"
Updater.FailedToLaunch="மேம்படுத்தல் தோல்வியுற்றது"
Updater.GameCaptureActive.Title="விளையாட்டு பிடிப்பு செயலில்"
-Updater.GameCaptureActive.Text="விளையாட்டு பிடிப்பு நூலகம் தற்போது பயன்படுத்தப்படுகிறது. பிடிக்கப்பட்ட எந்த விளையாட்டுகள் / நிகழ்ச்சிகளை மூடுக (அல்லது சாளரங்கள் மறுதொடக்கம் செய்க) மீண்டும் முயற்சிக்கவும்."
QuickTransitions.SwapScenes="முன்னோட்டம் / வெளியீடு காட்சிகள் இடமாற்றத்திற்கு பிறகு மாற்றவும்"
QuickTransitions.SwapScenesTT="(வெளியீடு-உண்மையான காட்சியில் நீடித்தால்) வெளியீடு மற்றும் காட்சிகள் swaps பின்னர் இடம் பெயர்கிறது.\nஇது, வெளியீடு உண்மையான காட்சியில் கணக்கிற்குரியதாய் எந்த மாற்றங்களை செயல்தவிர்க்க வேண்டும்.\n\n(வெளியீட்டு அசல் காட்சி இன்னும் இருந்தால்) முன்னோட்டம் மற்றும் வெளியீட்டு காட்சிகளை இடமாற்றத்திற்குப் பிறகு மாற்றும். \n வெளியீட்டின் அசல் காட்சிக்கு மாற்றப்பட்ட எந்த மாற்றத்தையும் இது சரிசெய்யாது."
Output.StartRecordingFailed="பதிவு துவக்க இயலவில்லை"
Output.StartReplayFailed="மறுபகிர்வு தாங்கலை தொடங்க முடியவில்லை"
+
Output.ConnectFail.Title="இணைக்க இயலவில்லை"
Output.ConnectFail.BadPath="தவறான URL பாதை அல்லது இணைப்பு. அவை செல்லுபடியாகிறதா என்று உறுதிப்படுத்த உங்கள் அமைப்புகளை சரிபார்க்கவும்."
Output.ConnectFail.ConnectFailed="சேவகையத்திடம் தொடர்பு கொள்ள முடியவில்லை"
-Output.ConnectFail.Error="சேவையகத்துடன் இணைக்க முயற்சிக்கும் போது எதிர்பாராத பிழை ஏற்பட்டது. மேலும் தகவல்கள் பதிவு கோப்பில் உள்ளன."
+Output.ConnectFail.Error="சேவையகத்துடன் இணைக்க முயற்சிக்கும் போது எதிர்பாராத பிழை ஏற்பட்டது. மேலும் தகவல்கள் பதிவு கோப்பில் உள்ளன."
Output.ConnectFail.Disconnected="சேவையகத்திலிருந்து துண்டிக்கப்பட்டது."
+
Output.RecordFail.Title="பதிவு துவக்க இயலவில்லை"
Output.RecordFail.Unsupported="வெளியீட்டு வடிவமைப்பு ஒன்று ஆதரிக்கப்படவில்லை அல்லது ஒன்றுக்கு மேற்பட்ட ஒலி தடங்கள் ஆதரிக்கவில்லை. தயவுசெய்து உங்கள் அமைப்புகளை சரிபார்த்து மீண்டும் முயற்சிக்கவும்."
Output.RecordNoSpace.Title="போதுமான வட்டு இடம் இல்லை"
Remux.HelpText="கோப்புகளை வடிவமாற்றம் செய்ய இந்த சாளரத்தில் விடவும், அல்லது கோப்பை உலாவ ஒரு வெற்று \"OBS பதிவு\" செல்லை தேர்ந்தெடுக்கவும்."
UpdateAvailable="புதிய மேம்படுத்தல்கள் கிடைக்கிறது"
-UpdateAvailable.Text="பதிப்பு %1.%2.%3 தற்போது கிடைக்கிறது. <a href='%4'>பதிவிறக்கம் செய்ய இங்கே சொடுக்கிடுக</a>"
+UpdateAvailable.Text="பதிப்பு %1.%2.%3 தற்போது கிடைக்கிறது. <a href='%4'>பதிவிறக்கம் செய்ய இங்கே சொடுக்கிடுக</a>"
Basic.DesktopDevice1="திரைப்பலக ஒலி"
Basic.DesktopDevice2="திரைப்பலக ஒலி 2"
Basic.Main.PreviewConextMenu.Enable="முன்னோட்டம் இயக்கு"
+
ScaleFiltering="அளவு வடிகட்டுதல்"
ScaleFiltering.Point="புள்ளி"
ScaleFiltering.Bilinear="இருநேர்கோடு"
Basic.Settings.ProgramRestart="இந்த அமைப்புகள் நடைமுறைக்கு வர நிகழச்சி நிரலை மறுதொடக்கம் செய்ய வேண்டும்."
Basic.Settings.ConfirmTitle="மாற்றம் உறுதி செய்தல்"
-Basic.Settings.Confirm="சேமிக்கப்படாத மாற்றங்கள் உள்ளன. மாற்றங்களை சேமிக்கவா?"
+Basic.Settings.Confirm="சேமிக்கப்படாத மாற்றங்கள் உள்ளன. மாற்றங்களை சேமிக்கவா?"
Basic.Settings.General="பொதுவானவை"
Basic.Settings.General.Theme="வண்ண அமைப்பு"
Basic.Settings.Audio="ஒலி"
Basic.Settings.Audio.SampleRate="மாதிரி விகிதம்"
Basic.Settings.Audio.MeterDecayRate.Fast="வேகமாக"
-Basic.Settings.Audio.DesktopDevice="திரைப்பலக ஒலி 2"
-Basic.Settings.Audio.DesktopDevice2="திரைப்பலக ஒலி 2"
Basic.Settings.Audio.Disabled="முடக்கப்பட்டது"
Basic.Settings.Advanced="மேம்பட்டவை"
ResizeOutputSizeOfSource.Text="அடிப்படை மற்றும் வெளியீடு தெளிவுத்திறன்கள் தற்போதைய மூலத்தின் அளவிற்கு மாற்றப்படும்."
+
obs-studio-23.1.0.tar.xz/UI/data/locale/th-TH.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/th-TH.ini
Changed
BandwidthTest.Region.Asia="เอเชีย"
BandwidthTest.Region.Other="อื่นๆ"
-Basic.FirstStartup.RunWizard="คุณต้องการเรียกใช้ตัวช่วยสร้างการกำหนดค่าอัตโนมัติ นอกจากนี้คุณด้วยตนเองสามารถกำหนดค่าการตั้งค่า โดยคลิกปุ่มการตั้งค่าในหน้าต่างหลัก"
+Basic.FirstStartup.RunWizard="คุณต้องการเรียกใช้ตัวช่วยสร้างการกำหนดค่าอัตโนมัติ นอกจากนี้คุณด้วยตนเองสามารถกำหนดค่าการตั้งค่า โดยคลิกปุ่มการตั้งค่าในหน้าต่างหลัก"
Basic.AutoConfig="การปรับแต่งอัตโนมัติ"
Basic.AutoConfig.ApplySettings="ใช้การตั้งค่า"
ConfirmRemove.Text="คุณแน่ใจแล้วหรือที่จะลบ '$1'?"
+
Output.ConnectFail.Title="ไม่สามารถเชื่อมต่อได้"
Output.ConnectFail.ConnectFailed="ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์"
Output.ConnectFail.Disconnected="ถูกตัดออกจากเซิร์ฟเวอร์"
+
Output.RecordNoSpace.Title="พื้นที่เก็บข้อมูลไม่เพียงพอ"
Output.RecordError.Title="บันทึกข้อผิดพลาด"
Output.ReplayBuffer.NoHotkey.Title="ไม่มีการตั้งค่าคีย์ลัด"
+
Deinterlacing.Discard="ยกเลิก"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/tl-PH.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/tl-PH.ini
Changed
Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit"
Updater.FailedToLaunch="Bigong malunsad ang updater"
Updater.GameCaptureActive.Title="Ang Game capture ay aktibo"
-Updater.GameCaptureActive.Text="Ang hook library ng game capture ay kasalukuyang ginagamit. Mangyari lamang isara ang anumang mga laro/programang nahuli (o i-start muli ang windows) at subukan muli."
+Updater.GameCaptureActive.Text="Ang hook library ng game capture ay kasalukuyang ginagamit. Mangyari lamang isara ang anumang mga laro/programang nahuli (o i-start muli ang Windows) at subukan muli."
QuickTransitions.SwapScenes="Pagpalitin ang Preview/Output ng mga Eksena Matapos ang Pag-transisyon"
QuickTransitions.SwapScenesTT="Pinagpapalit ang preview at output ng mga eksena matapos ang pagtransisyon (kung ang orihinal na eksena ng output ay nariyan pa).\nHindi nito mapapawalang-bisa ang mga pagbabagong napatupad sa orihinal na eksena ng output."
Output.StartReplayFailed="Bigong masimulan ang replay buffer"
Output.StartFailedGeneric="Bigong masimulan ang output. Mangyari lamang tingnan ang log para sa mga detalye. \n\nTandaan: Kung ikaw ay gumagamit ng NVENC o AMD na mga encoder, siguraduhing ang iyong mga video driver ay naka-update."
+
Output.ConnectFail.Title="Bigong kumonekta"
Output.ConnectFail.BadPath="Hindi wasto ang Path o Connection URL. Mangyari lamang tingnan ang iyong mga setting upang makumpirma na sila ay balido."
Output.ConnectFail.ConnectFailed="Bigong kumonekta sa serber"
Output.ConnectFail.Error="Isang di-inaasahang error ang naganap habang sinusubukang kumonekta sa serber. Karagdagang impormasyon ay nasa log file."
Output.ConnectFail.Disconnected="Nadiskonek mula sa serber."
+
Output.RecordFail.Title="Bigong masimulan ang pa-rerekord"
Output.RecordFail.Unsupported="Ang output format ay maaaring hindi suportado o di kaya'y hindi nagsusuporta ng higit sa isang audio track. Mangyari lamang tingnan ang iyong mga setting at subukan muli."
Output.RecordNoSpace.Title="Hindi sapat ang espasyo sa disk"
Basic.Main.PreviewConextMenu.Enable="Paganahin ang Preview"
+
ScaleFiltering="I-scale ang pag-fifilter"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilinear"
Basic.Settings.Audio="Audio"
Basic.Settings.Audio.SampleRate="Sample Rate"
Basic.Settings.Audio.Channels="Mga Channel"
-Basic.Settings.Audio.MeterDecayRate="Audio Meter Decay Rate"
Basic.Settings.Audio.MeterDecayRate.Fast="Mabilis"
Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="Kung nagsi-stream, tingnan kung ang streaming service ay sinusuportahan ang parehong surround sound ingest pat ang surround sound playback. Ang Twitch, Facebook 360 Live, Mixer RTMP, Smashcast ay mga halimbawa kung saan ang surround sound ay sinusuportahan ng buo. Kahit na ang Facebook Live at YouTube live ay parehong tumatanggap ng surround ingest, ang Facebook Live ay nagda-downmix sa stereo, at ang YouTube Live ay nagpapakita lamang ng dalawang channel. \n\nAng OBS audio na mga filter ay akma sa surround sound, pero ang suporta sa VST plugin ay hindi garantisado."
Basic.Settings.Audio.MultichannelWarning.Title="Mapapagana ba ang tunog ng palibot ng audio?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba na gusto mong paganahin ang tunog ng palibot ng audio?"
-Basic.Settings.Audio.DesktopDevice="Apatarong Desktop Awdiyo"
-Basic.Settings.Audio.DesktopDevice2="Aparatong Desktop Awdiyo 2"
-Basic.Settings.Audio.AuxDevice="Mic/Katulong na Aparato ng Awdiyo"
-Basic.Settings.Audio.AuxDevice2="Mic/Katulong na Aparato ng Awdiyo 2"
-Basic.Settings.Audio.AuxDevice3="Mic/Katulong na Aparato ng Awdiyo 3"
Basic.Settings.Audio.EnablePushToMute="Paganahin Itulak-para-ma-i-mute"
Basic.Settings.Audio.PushToMuteDelay="Pag-antala sa pagtulak-sa-walang tunog"
Basic.Settings.Audio.EnablePushToTalk="Paganahin itulak-sa-usapan"
Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng mga kulay maliban sa NV12 ay ginawa unsa lahat para sa pagrerekord, at hindi nirerekomenda para sa pag-stream. Ang pag-stream ay maaaring magdulot ng dagdag na gamit sa CPU dahil sa pagbago ng format ng kulay."
Basic.Settings.Advanced.Audio.BufferingTime="Bilis ng Pag-buffer ng Audio"
Basic.Settings.Advanced.Video.ColorFormat="Fomat ng Kulay"
-Basic.Settings.Advanced.Video.ColorSpace="YUV Espasyo ng Kulay"
-Basic.Settings.Advanced.Video.ColorRange="YUV Hanay ng Kulay"
Basic.Settings.Advanced.Video.ColorRange.Partial="Panguna"
Basic.Settings.Advanced.Video.ColorRange.Full="Buo"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Kagamitang Pangsubaybay ng Audio"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang audio ducking ng Windows"
Basic.Settings.Advanced.StreamDelay="Antala sa Pag-stream"
Basic.AdvAudio="Pinahusay na mga Katangian ng Audio"
Basic.AdvAudio.Name="Pangalan"
-Basic.AdvAudio.Volume="Lakas ng tunog (%)"
Basic.AdvAudio.Mono="I-downmix para maging Mono"
Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
Basic.AdvAudio.Monitoring="Pagsubaybay sa Audio"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/tr-TR.ini
Changed
Enable="Etkinleştir"
DisableOSXVSync="OSX V-Sync'i Devre Dışı Bırak"
ResetOSXVSyncOnExit="OSX V-Sync'i Çıkışta Sıfırla"
-HighResourceUsage="Kodlama aşırı yüklendi! Video ayarlarını kapatmayı veya daha hızlı bir kodlama ön ayarını kullanmayı düşünün."
+HighResourceUsage="Kodlama aşırı yüklendi! Video ayarlarını kapatmayı veya daha hızlı bir kodlama ön ayarını kullanmayı düşünün."
Transition="Geçiş"
QuickTransitions="Hızlı Geçiş"
Left="Sol"
VerticalLayout="Dikey Düzen"
Group="Grup"
DoNotShowAgain="Tekrar gösterme"
+Default="(Varsayılan)"
+Calculating="Hesaplanıyor..."
AlreadyRunning.Title="OBS zaten çalışıyor"
-AlreadyRunning.Text="OBS zaten çalışıyor! Bunu yapmak istemediyseniz, lütfen yeni bir örneği çalıştırmayı denemeden önce varolan tüm OBS örneklerini kapatın. OBS'yi sistem tablasına küçülmesi için ayarladıysanız, lütfen hala çalışıp çalışmadığını görmek için orayı kontrol edin."
+AlreadyRunning.Text="OBS zaten çalışıyor! Bunu yapmak istemediyseniz, lütfen yeni bir örneği çalıştırmayı denemeden önce varolan tüm OBS örneklerini kapatın. OBS'yi sistem tablasına küçülmesi için ayarladıysanız, lütfen hala çalışıp çalışmadığını görmek için orayı kontrol edin."
AlreadyRunning.LaunchAnyway="Yine de Başlat"
+DockCloseWarning.Title="Yuvalanabilir Pencere Kapatma"
+DockCloseWarning.Text="Az önce yuvalanabilir bir pencere kapattınız. Eğer tekrardan göstermek istiyorsanız, Menü çubuğundan Görüntüle → Paneller menüsünü kullanın."
Auth.Authing.Title="Kimlik doğrulanıyor..."
+Auth.Authing.Text="%1 ile doğrulanıyor, lütfen bekleyin..."
Auth.AuthFailure.Title="Kimlik Doğrulaması Başarısız"
Auth.AuthFailure.Text="%1 kimliği doğrulanamadı:\n\n%2: %3"
Auth.InvalidScope.Title="Kimlik Doğrulaması Gerekli"
Auth.InvalidScope.Text="%1 için kimlik doğrulama gereksinimleri değişti. Bazı özellikler kullanılamayabilir."
+Auth.LoadingChannel.Title="Kanal bilgileri yükleniyor..."
+Auth.LoadingChannel.Text="%1 için kanal bilgileri yükleniyor, lütfen bekleyin..."
Auth.ChannelFailure.Title="Kanal yüklenemedi"
Auth.ChannelFailure.Text="%1 için kanal bilgisi yüklenemedi\n\n%2: %3"
Auth.Chat="Sohbet"
Auth.StreamInfo="Yayın Bilgisi"
TwitchAuth.Stats="Twitch İstatistikleri"
TwitchAuth.Feed="Twitch Etkinlik akışı"
+TwitchAuth.TwoFactorFail.Title="Yayın anahtarı sorgulanamadı"
+TwitchAuth.TwoFactorFail.Text="OBS Twitch hesabına bağlanamadı. Lütfen iki-faktörlü doğrulamanın <a href='https://www.twitch.tv/settings/security'>Twitch güvenlik ayarlarında ayarlandığından emin olun </a> Bu yayın yapmanız için gereklidir."
Copy.Filters="Filtreleri Kopyala"
Paste.Filters="Filtreleri Yapıştır"
ConfirmStop.Title="Yayın Durdurulsun Mu?"
ConfirmStop.Text="Yayını gerçekten durdurmak istiyor musunuz?"
+ConfirmBWTest.Title="Bant genişliği testini başlat?"
+ConfirmBWTest.Text="OBS'i bant genişliği test modunda yapılandırdınız. Bu mod, kanalınız yayına girmeden ağ testi yapmanıza olanak sağlar. Test tamamlandıktan sonra, izleyicilerin yayını görebilmesi için bu modu devre dışı bırakmanız gerekecektir.\n\nDevam etmek istiyor musunuz?"
ConfirmExit.Title="OBS'den Çıkılsın mı?"
ConfirmExit.Text="OBS şu anda etkin. Tüm yayınlar/kayıtlar kapatılacaktır. Çıkmak istediğinize emin misiniz?"
Output.StartReplayFailed="Tekrar oynatma arabelleği başlatılamadı"
Output.StartFailedGeneric="Çıkışı başlatma başarısız oldu. Detaylar için lütfen günlüğe bakın: \n\nNVENC veya AMD kodlayıcılarını kullanıyorsanız, video sürücülerinin güncel olduğundan emin olun."
+
Output.ConnectFail.Title="Bağlantı kurulamadı"
Output.ConnectFail.BadPath="Bağlantı adresiniz geçersiz. Ayarlarınızı kontrol edin ve geçerli bir adres giriniz."
Output.ConnectFail.ConnectFailed="Sunucuya bağlanılamadı"
Output.ConnectFail.InvalidStream="Belirtilen kanal veya yayın anahtarına erişilemedi, lütfen yayın anahtarınızı iyi kontrol edin. Eğer doğruysa, sunucuya bağlanırken sorun oluyor olabilir."
-Output.ConnectFail.Error="Sunucuya bağlanmaya çalışırken beklenmeyen bir hata oluştu. Daha fazla bilgi için günlük dosyasına bakınız."
+Output.ConnectFail.Error="Sunucuya bağlanmaya çalışırken beklenmeyen bir hata oluştu. Daha fazla bilgi için günlük dosyasına bakınız."
Output.ConnectFail.Disconnected="Sunucu bağlantısı kesildi."
+Output.StreamEncodeError.Title="Kodlama hatası"
+Output.StreamEncodeError.Msg="Yayın sırasında bir kodlayıcı hatası oluştu."
+
Output.RecordFail.Title="Kayıt başlatılamadı"
Output.RecordFail.Unsupported="Çıkış biçimi ya desteklenmiyor ya da birden fazla sesi desteklemiyor. Lütfen ayarlarınızı kontrol edip tekrar deneyin."
Output.RecordNoSpace.Title="Yetersiz disk alanı"
Output.RecordNoSpace.Msg="Kayıt'aa devam etmek yeterli disk alanı yok."
Output.RecordError.Title="Kayıt Hatası"
Output.RecordError.Msg="Kayıt anında bir hata oluştu."
+Output.RecordError.EncodeErrorMsg="Kayıt sırasında bir kodlayıcı hatası oluştu."
Output.ReplayBuffer.NoHotkey.Title="Kısayol tuşu ayarlanmadı!"
Output.ReplayBuffer.NoHotkey.Msg="Yeniden oynatma arabelleği için ayarlı bir kısayol tuşu yok. Lütfen yeniden oynatma kayıtlarını kaydetmek için \"Kaydet\" kısayol tuşunu ayarlayın."
Remux.FinishedTitle="Remux tamamlandı"
Remux.Finished="Kayıt remux edildi"
Remux.FinishedError="Kayıt remux edildi, ancak dosya tamamlanmamış olabilir"
+Remux.SelectRecording="OBS Kaydı seçin..."
+Remux.SelectTarget="Hedef dosyayı seçin..."
Remux.FileExistsTitle="Hedef dosyalar var"
Remux.FileExists="Aşağıdaki hedef dosyalar zaten var. Var olan dosyaları değiştirmek istiyor musunuz?"
Remux.ExitUnfinishedTitle="Remux devam ediyor"
Remux.HelpText="Remux etmek için dosyaları bu pencereye sürükleyip bırakın veya bir dosyaya göz atmak için boş bir \"OBS Kaydı\" hücresini seçin."
UpdateAvailable="Yeni Güncelleştirme Mevcut"
-UpdateAvailable.Text="%1.%2.%3 sürümü şimdi kullanılabilir. <a href='%4'>İndirmek için tıklayın</a>"
+UpdateAvailable.Text="%1.%2.%3 sürümü şimdi kullanılabilir. <a href='%4'>İndirmek için tıklayın</a>"
Basic.DesktopDevice1="Masaüstü Ses"
Basic.DesktopDevice2="Masaüstü Ses 2"
Basic.Main.PreviewConextMenu.Enable="Önizlemeyi Etkinleştir"
+Basic.Main.Preview.Disable="Önizlemeyi Devre dışı bırak"
+
ScaleFiltering="Boyut Filtreleme"
ScaleFiltering.Point="Nokta"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bikübik"
ScaleFiltering.Lanczos="Lanczos"
+ScaleFiltering.Area="Alan"
Deinterlacing="Deinterlacing"
Deinterlacing.Discard="Discard"
Basic.MainMenu.Edit.Transform.FitToScreen="Ekrana Sığdır (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Ekrana genişlet (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Ekrana Ortala (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Dikeye Hizala"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Yataya Hizala"
Basic.MainMenu.Edit.Order="Sırala (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Y&ukarı Taşı"
Basic.MainMenu.Edit.Order.MoveDown="Aşağı Taşı (&D)"
Basic.Settings.General.OverflowSelectionHidden="Kaynak görünmese bile taşmayı göster"
Basic.Settings.General.SwitchOnDoubleClick="Çift tıklamada sahneye geçiş yap"
Basic.Settings.General.StudioPortraitLayout="Dikey düzeni etkinleştir"
+Basic.Settings.General.TogglePreviewProgramLabels="Önizlemeyi göster/program etiketleri"
Basic.Settings.General.Multiview="Çoklu görüntü"
Basic.Settings.General.Multiview.MouseSwitch="Sahneler arası geçiş için tıkla"
Basic.Settings.General.Multiview.DrawSourceNames="Sahne adlarını göster"
Basic.Settings.Stream.Custom.UseAuthentication="Kimlik doğrulaması kullan"
Basic.Settings.Stream.Custom.Username="Kullanıcı adı"
Basic.Settings.Stream.Custom.Password="Şifre"
-Basic.Settings.Stream.BandwidthTestMode="Bant genişliği Test modunu etkinleştir"
+Basic.Settings.Stream.BandwidthTestMode="Bant Genişliği Test Modunu Etkinleştir"
Basic.Settings.Output="Çıkış"
Basic.Settings.Output.Format="Kayıt Biçimi"
Basic.Settings.Output.ReplayBuffer.Estimate="Tahmini bellek kullanımı: %1 MB"
Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Bellek kullanımını tahmin edemezsin. Lütfen maksimum bellek sınırını ayarlayın."
Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Not: kısayol tuşları bölümünde yeniden oynatma ara belleği için kısayol tuşu ayarladığınızdan emin olun)"
-Basic.Settings.Output.ReplayBuffer.Prefix="Tekrar Oynatma Arabelleği Dosya Adı Öneki"
-Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
+Basic.Settings.Output.ReplayBuffer.Prefix="Tekrar Oynatma Arabelleği Dosya Adı Ön Eki"
+Basic.Settings.Output.ReplayBuffer.Suffix="Son Eki"
Basic.Settings.Output.Simple.SavePath="Kayıt Yolu"
Basic.Settings.Output.Simple.RecordingQuality="Kayıt Kalitesi"
Basic.Settings.Output.Simple.RecordingQuality.Stream="Canlı Yayın ile Aynı"
Basic.Settings.Output.Simple.RecordingQuality.Small="Yüksek Kalite, Normal Dosya Boyutu"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Aynı Kaliteye Yakın, Büyük Dosya Boyutu"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kayıpsız Kalite, Çok Büyük Dosya Boyutu"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Uyarı: Yayın video bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Uyarı: Yayın audio bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Uyarı: Yayın video bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Uyarı: Yayın audio bit hızı %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
Basic.Settings.Output.Simple.Warn.Encoder="Uyarı: Bir yazılım kodlayıcı ile yayın kalitesinden farklı kayıt yapmak eğer aynı anda hem kayıt hem de yayın yapıyorsanız ilave CPU kullanımı gerektirecektir."
Basic.Settings.Output.Simple.Warn.Lossless="Uyarı: Kayıpsız kalite muazzam büyük dosya boyutları oluşturur! Kayıpsız kalite, yüksek çözünürlüklerde ve kare hızlarında, dakikada 7 gigabyte'a kadar disk alanı kullanabilir. Kayıpsız, kullanılabilir disk alanınız çok büyük değilse, uzun kayıtlar için tavsiye edilmez."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Kayıpsız kalitede kullanmak istediğinizden emin misiniz?"
Basic.Settings.Video.Denominator="Payda"
Basic.Settings.Video.Renderer="İşleyici"
Basic.Settings.Video.InvalidResolution="Geçersiz çözünürlük değeri. [Genişlik]x[Yükseklik] şeklinde olmalıdır. (örnek 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="Video çıkışı şu anda etkin durumda. Video ayarlarını değiştirmek için lütfen bütün çıkışları kapalı duruma getirin."
+Basic.Settings.Video.CurrentlyActive="Video çıkışı şu anda etkin durumda. Video ayarlarını değiştirmek için lütfen bütün çıkışları kapalı duruma getirin."
Basic.Settings.Video.DisableAero="Aero'yu Devre Dışı Bırak"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (En hızlı, ancak boyutlandırmada bulanık görüntü)"
Basic.Settings.Audio="Ses"
Basic.Settings.Audio.SampleRate="Örnekleme Sıklığı"
Basic.Settings.Audio.Channels="Kanallar"
-Basic.Settings.Audio.MeterDecayRate="Ses Ölçer Sönüm Hızı"
Basic.Settings.Audio.MeterDecayRate.Fast="Hızlı"
Basic.Settings.Audio.MeterDecayRate.Medium="Orta (Tür I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="Yavaş (Tür II PPM)"
Basic.Settings.Audio.MultichannelWarning="Yayın yapılıyorsa, yayın hizmetinizin hem surround ses alınımını hem de surround ses geri oynatımını desteklediğinden emin olun. Twitch, Facebook 360 Live, Karıştırıcı RTMP, Smashcast, surround sesin tam desteklendiği örneklerdir. Facebook Live'ın ve YouTube Live'ın her ikisi de surround alınımını desteklese de, Facebook Live stereo'ya indirger, ve YouTube Live sadece iki kanal oynatır.\n\nOBS ses filtreleri surround sesle uyumludur, ancak VST eklenti desteği kesin değildir."
Basic.Settings.Audio.MultichannelWarning.Title="Surround ses etkinleştirilsin mi?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Surround sesi etkinleştirmek istediğinize emin misiniz?"
-Basic.Settings.Audio.DesktopDevice="Masaüstü Ses Aygıtı"
-Basic.Settings.Audio.DesktopDevice2="Masaüstü Ses Aygıtı 2"
-Basic.Settings.Audio.AuxDevice="Mic/yardımcı ses aygıtı"
-Basic.Settings.Audio.AuxDevice2="Mic/yardımcı ses aygıtı 2"
-Basic.Settings.Audio.AuxDevice3="Mic/yardımcı ses aygıtı 3"
-Basic.Settings.Audio.AuxDevice4="Mikrofon/Yardımcı Ses Aygıtı 4"
+Basic.Settings.Audio.Devices="Cihazlar"
+Basic.Settings.Audio.DesktopDevice="Masaüstü Sesi"
+Basic.Settings.Audio.DesktopDevice2="Masaüstü Sesi 2"
+Basic.Settings.Audio.AuxDevice="Mikrofon/Yardımcı Ses"
+Basic.Settings.Audio.AuxDevice2="Mikrofon/Yardımcı Ses 2"
+Basic.Settings.Audio.AuxDevice3="Mikrofon/Yardımcı Ses 3"
+Basic.Settings.Audio.AuxDevice4="Mikrofon/Yardımcı Ses 4"
Basic.Settings.Audio.EnablePushToMute="Bas sustur'u etkinleştir"
Basic.Settings.Audio.PushToMuteDelay="Bas sustur gecikmesi"
Basic.Settings.Audio.EnablePushToTalk="Bas-Konuş'u Etkinleştir"
Basic.Settings.Advanced.FormatWarning="Uyarı: NV12 dışındaki renk biçimleri esas olarak kayıt için tasarlanmıştır ve yayın anında kullanma önerilmez. Yayın nedeni ile renk biçimini dönüştürme çok fazla İŞLEMCİ kullanımına sebep olabilir."
Basic.Settings.Advanced.Audio.BufferingTime="Ses Arabelleğe Alma Süresi"
Basic.Settings.Advanced.Video.ColorFormat="Renk Biçimi"
-Basic.Settings.Advanced.Video.ColorSpace="YUV Renk Alanı"
-Basic.Settings.Advanced.Video.ColorRange="YUV Renk Aralığı"
+Basic.Settings.Advanced.Video.ColorSpace="Renk Uzayı"
+Basic.Settings.Advanced.Video.ColorRange="Renk Aralığı"
Basic.Settings.Advanced.Video.ColorRange.Partial="Kısmi"
Basic.Settings.Advanced.Video.ColorRange.Full="Tam"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Ses İzleme Aygıtı"
+Basic.Settings.Advanced.Audio.MonitoringDevice="İzleme Aygıtı"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Varsayılan"
Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows ses alçaltmasını devre dışı bırak"
Basic.Settings.Advanced.StreamDelay="Yayın Gecikmesi"
Basic.AdvAudio="Gelişmiş Ses Özellikleri"
Basic.AdvAudio.Name="İsim"
-Basic.AdvAudio.Volume="Ses Düzeyi (%)"
+Basic.AdvAudio.Volume="Ses"
Basic.AdvAudio.Mono="Mono Karıştırmayı Azalt"
Basic.AdvAudio.Balance="Denge"
Basic.AdvAudio.SyncOffset="Eşitleme Uzaklığı (ms)"
Basic.SystemTray.Show="Göster"
Basic.SystemTray.Hide="Gizle"
-Basic.SystemTray.Message.Reconnecting="Bağlantı kesildi. Yeniden bağlanılıyor..."
+Basic.SystemTray.Message.Reconnecting="Bağlantı kesildi. Yeniden bağlanılıyor..."
Hotkeys.Insert="Ekle"
Hotkeys.Delete="Sil"
Hotkeys.AppleKeypadDecimal=". (Tuş takımı)"
Hotkeys.AppleKeypadEqual="= (Tuş takımı)"
Hotkeys.MouseButton="%1 Fare"
+Hotkeys.Escape="Esc"
Mute="Sesi Kapat"
Unmute="Sesi Aç"
NoSources.Title="Kaynak Yok"
NoSources.Text="Henüz hiç video kaynağı eklemediniz gibi görünüyor, bu yüzden sadece boş bir ekran çıktısı alacaksınız. Bunu yapmak istediğinize emin misiniz?"
NoSources.Text.AddSource="Ana pencerede Kaynaklar kutusundaki + simgesine tıklayarak istediğiniz zaman kaynak ekleyebilirsiniz."
+NoSources.Label="Herhangi bir kaynağınız yok. \n Bir kaynak eklemek için aşağıdaki tuşlara basın yada sağ tıklayın."
ChangeBG="Renk Ayarla"
CustomColor="Özel Renk"
ResizeOutputSizeOfSource.Text="Temel ve çıkış çözünürlüğü mevcut kaynağın boyutuna göre yeniden boyutlandırılacaktır."
ResizeOutputSizeOfSource.Continue="Devam etmek istiyor musunuz?"
+PreviewTransition="Geçişi Önizle"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/uk-UA.ini
Changed
VerticalLayout="Вертикальне компонування"
Group="Група"
DoNotShowAgain="Більше не показувати"
+Default="(За замовчуванням)"
+Calculating="Обчислення..."
AlreadyRunning.Title="OBS вже виконується"
AlreadyRunning.Text="OBS вже запущено! Тільки якщо ви дійсно не намагаєтесь цього зробити, будь ласка позакривайте всі відкриті OBS перед тим як запускати нову копію. Якщо OBS налаштовано згортатися в трей, перевірте чи не виконується він там й досі."
Auth.Chat="Розмова (мій чат)"
Auth.StreamInfo="Інформація про Трансляцію"
TwitchAuth.Stats="Статистика Twitch"
+TwitchAuth.Feed="Стрічка активності Twitch"
+TwitchAuth.TwoFactorFail.Title="Не вдалося запросити ключ трансляції"
Copy.Filters="Копіювати фільтри"
Paste.Filters="Вставити фільтри"
Basic.AutoConfig.VideoPage.FPS.UseCurrent="Використовувати поточне (%1)"
Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 або 30, але краще 60, коли це можливо"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 або 30, але краще висока роздільна здатність"
-Basic.AutoConfig.VideoPage.CanvasExplanation="Примітка: Роздільна здатність (Полотно), не обов'язково повинно дорівнювати роздільної здатності з якою ви плануєте транслювати або записувати. Роздільну здатність фактичної трансляції/запису може бути зменшено від роздільною здатності полотна задля зменшення використання ресурсів або зменшення вимог до бітрейту."
+Basic.AutoConfig.VideoPage.CanvasExplanation="Примітка: Роздільна здатність (Полотно), не обов'язково повинно дорівнювати роздільної здатності з якою ви плануєте транслювати або записувати. Роздільну здатність фактичної трансляції/запису може бути зменшено від роздільною здатності полотна задля зменшення використання ресурсів або зменшення вимог до бітрейту."
Basic.AutoConfig.StreamPage="Інформація про Трансляцію"
Basic.AutoConfig.StreamPage.SubTitle="Будь ласка, введіть інформацію щодо вашої Трансляції"
Basic.AutoConfig.StreamPage.ConnectAccount="Підключити обліковий запис (за бажанням)"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Віддати перевагу апаратному енкодеру"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Апаратне кодування зменшує використання ЦП, але може вимагати більший бітрейт для отримання того ж рівня якості."
Basic.AutoConfig.StreamPage.StreamWarning.Title="Попередження, Трансляція"
-Basic.AutoConfig.StreamPage.StreamWarning.Text="Тест пропускної здатності буде транслювати випадкові відеодані без аудіо на ваш канал. Якщо ви можете, рекомендується, щоб ви тимчасово вимкнути збереження відео потоків і встановили потік як приватний допоки тест не буде завершено. Продовжити?"
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Тест пропускної здатності буде транслювати випадкові відеодані без аудіо на ваш канал. Якщо ви можете, рекомендується, щоб ви тимчасово вимкнути збереження відео потоків і встановили потік як приватний допоки тест не буде завершено. Продовжити?"
Basic.AutoConfig.TestPage="Остаточні результати"
Basic.AutoConfig.TestPage.SubTitle.Testing="Програма зараз виконує набір тестів, щоб знайти ідеальні налаштування"
Basic.AutoConfig.TestPage.SubTitle.Complete="Тестування завершено"
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Енкодер Трансляцій"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Енкодер Записів"
Basic.AutoConfig.TestPage.Result.Header="Програма визначила, що дані налаштування є ідеальним для вас:"
-Basic.AutoConfig.TestPage.Result.Footer="Щоб використовувати ці параметри, натисніть кнопку Застосувати Налаштування. Щоб переналаштувати майстра та спробувати знов, натисніть кнопку Назад. Можна вручну вказати всі параметри, для цього натисніть кнопку Скасувати та відкрите Налаштування."
+Basic.AutoConfig.TestPage.Result.Footer="Щоб використовувати ці параметри, натисніть кнопку Застосувати Налаштування. Щоб переналаштувати майстра та спробувати знов, натисніть кнопку Назад. Можна вручну вказати всі параметри, для цього натисніть кнопку Скасувати та відкрите Налаштування."
Basic.Stats="Статистика"
Basic.Stats.CPUUsage="Використання ЦП"
Output.StartStreamFailed="Не вдалося розпочати трансляцію"
Output.StartRecordingFailed="Не вдалося розпочати запис"
Output.StartReplayFailed="Не вдалося запустити Буфер Повторів"
-Output.StartFailedGeneric="Помилка. Вивід не було розпочато. За додатковою інформацією, будь ласка зверніться до файлу журналу.\n\nПримітка: якщо ви використовуєте NVENC або AMD енкодер, перевірте чи оновлений драйвер відео."
+Output.StartFailedGeneric="Помилка. Вивід не було розпочато. За додатковою інформацією, будь ласка зверніться до файлу журналу.\n\nПримітка: якщо ви використовуєте NVENC або AMD енкодер, перевірте чи оновлений драйвер відео."
+
Output.ConnectFail.Title="Не вдалося підключитися"
Output.ConnectFail.BadPath="Шлях або URL-адреса недосяжні. Будь ласка, перевірте налаштування програмного забезпечення."
Output.ConnectFail.Error="Під час зв'язку з сервером відбулася несподівана помилка. Подробиці знаходяться у лог-файлі."
Output.ConnectFail.Disconnected="Від'єднаний від серверу."
+
Output.RecordFail.Title="Не вдалося розпочати запис"
Output.RecordFail.Unsupported="Формат виводу на жаль не підтримується або форматом не підтримується більш однієї звукової доріжки. Будь ласка, перевірте налаштування та повторіть спробу."
Output.RecordNoSpace.Title="Недостатньо простору на диску"
Output.RecordError.Title="Помилка запису"
Output.RecordError.Msg="Під час запису відбулася несподівана помилка."
Output.ReplayBuffer.NoHotkey.Title="Гарячу клавішу не вказано!"
-Output.ReplayBuffer.NoHotkey.Msg="Гарячу клавішу для Буферу Повторів не вказано. Будь ласка, встановіть гарячу клавішу на дію \"Зберегти Повтор\", щоб використовувати її для збереження повторів."
+Output.ReplayBuffer.NoHotkey.Msg="Гарячу клавішу для Буферу Повторів не вказано. Будь ласка, встановіть гарячу клавішу на дію \"Зберегти Повтор\", щоб використовувати її для збереження повторів."
Output.BadPath.Title="Недійсний шлях до файлу"
Output.BadPath.Text="Шлях вказаний для виводу файлу недійсний. Будь ласка, перевірте у налаштуваннях, що шлях було вказано вірно."
Remux.HelpText="Перетягніть файли до цього вікна щоб ремультиплексувати їх, або клацніть пусту клітинку з графи \"OBS запис\" щоб обрати файл."
UpdateAvailable="Доступне оновлення"
-UpdateAvailable.Text="Доступна версія %1.%2.%3. <a href='%4'>Натисніть тут, щоб завантажити</a>"
+UpdateAvailable.Text="Доступна версія %1.%2.%3. <a href='%4'>Натисніть тут, щоб завантажити</a>"
Basic.DesktopDevice1="Системне аудіо"
Basic.DesktopDevice2="Системне аудіо 2"
Basic.Main.PreviewConextMenu.Enable="Увімкнути вікно Перегляду"
+Basic.Main.Preview.Disable="Відключити попередній перегляд"
+
ScaleFiltering="Фільтр масштабування"
ScaleFiltering.Point="Ступінчастий"
ScaleFiltering.Bilinear="Білінійний"
Basic.MainMenu.Edit.Transform.FitToScreen="Умістити на екрані (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Розтягнути на весь екран (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="По центру екрана (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Центрувати по вертикалі"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Центрувати по горизонталі"
Basic.MainMenu.Edit.Order="Упорядкувати (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Нагору (&U)"
Basic.MainMenu.Edit.Order.MoveDown="Донизу (&D)"
Basic.Settings.ProgramRestart="Програма потребує перезапуску, щоб нові налаштування набрали сили."
Basic.Settings.ConfirmTitle="Підтвердження змін"
-Basic.Settings.Confirm="Є незбережені зміни. Зберегти ці зміни?"
+Basic.Settings.Confirm="Є незбережені зміни. Зберегти ці зміни?"
Basic.Settings.General="Загальні"
Basic.Settings.General.Theme="Тема"
Basic.Settings.Output.Simple.RecordingQuality.Small="Висока якість, середній розмір файлу"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Якість майже без втрат, великий розмір файлу"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Без втрат якості, надзвичайно великий розмір файлу"
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Увага! Буде встановлено відео бітрейт трансляції %1, що є верхней межою для обраного сервісу трансляцій. Якщо ви хочете встановити бітрейт вищий за %1, то увімкніть Додаткові Налаштування Енкодера та зніміть прапорець \"Застосувати примусовий бітрейт з сервісу трансляцій\"."
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Увага! Буде встановлено аудіо бітрейт трансляції %1, що є верхней межою для обраного сервісу трансляцій. Якщо ви хочете встановити бітрейт вищий за %1, то увімкніть Додаткові Налаштування Енкодера та зніміть прапорець \"Застосувати примусовий бітрейт з сервісу трансляцій\"."
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Увага! Буде встановлено відео бітрейт трансляції %1, що є верхней межою для обраного сервісу трансляцій. Якщо ви хочете встановити бітрейт вищий за %1, то увімкніть Додаткові Налаштування Енкодера та зніміть прапорець \"Застосувати примусовий бітрейт з сервісу трансляцій\"."
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Увага! Буде встановлено аудіо бітрейт трансляції %1, що є верхней межою для обраного сервісу трансляцій. Якщо ви хочете встановити бітрейт вищий за %1, то увімкніть Додаткові Налаштування Енкодера та зніміть прапорець \"Застосувати примусовий бітрейт з сервісу трансляцій\"."
Basic.Settings.Output.Simple.Warn.Encoder="Попередження: Запис програмним енкодером з якістю не \"Так само як трансляція\", здійснює додаткове навантаження на ЦП при використовуванні трансляції і запису одночасно."
-Basic.Settings.Output.Simple.Warn.Lossless="Попередження: Відео Без втрат якості генерує надзвичайно великі розміри файлів! Воно може використовувати понад 7 гігабайт дискового простору на хвилину при високих роздільній здатності зображення та частоти кадрів. Відео Без втрат якості не рекомендується для довгого запису, тільки якщо у вас є дуже великий обсяг вільного дискового простору."
+Basic.Settings.Output.Simple.Warn.Lossless="Попередження: Відео Без втрат якості генерує надзвичайно великі розміри файлів! Воно може використовувати понад 7 гігабайт дискового простору на хвилину при високих роздільній здатності зображення та частоти кадрів. Відео Без втрат якості не рекомендується для довгого запису, тільки якщо у вас є дуже великий обсяг вільного дискового простору."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Ви впевнені, що ви хочете використовувати якість \"Без втрат якості\"?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Якість Без втрат, попередження!"
Basic.Settings.Output.Simple.Encoder.Software="Програмний (x264)"
Basic.Settings.Video.Numerator="Чисельник"
Basic.Settings.Video.Denominator="Знаменник"
Basic.Settings.Video.Renderer="Візуалізація"
-Basic.Settings.Video.InvalidResolution="Неприпустиме значення роздільної здатності. Повинно бути [ширина]x[висота] (тобто, 1920x1080)"
-Basic.Settings.Video.CurrentlyActive="Вивід відео в даний час активний. Будь ласка, зупинить весь вивід відео, щоб змінити настройки відео."
+Basic.Settings.Video.InvalidResolution="Неприпустиме значення роздільної здатності. Повинно бути [ширина]x[висота] (тобто, 1920x1080)"
+Basic.Settings.Video.CurrentlyActive="Вивід відео в даний час активний. Будь ласка, зупинить весь вивід відео, щоб змінити настройки відео."
Basic.Settings.Video.DisableAero="Вимкнути Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Білінійний (найшвидший, але розмито, якщо масштабувати)"
Basic.Settings.Audio="Аудіо"
Basic.Settings.Audio.SampleRate="Частота дискретизації"
Basic.Settings.Audio.Channels="Канали"
-Basic.Settings.Audio.MeterDecayRate="Швидкість спаду індикатору звуку"
+Basic.Settings.Audio.Meters="Індикатори"
+Basic.Settings.Audio.MeterDecayRate="Швидкість спаду"
Basic.Settings.Audio.MeterDecayRate.Fast="Швидко"
Basic.Settings.Audio.MeterDecayRate.Medium="Середньо (PPM типу I)"
Basic.Settings.Audio.MeterDecayRate.Slow="Повільно (PPM типу II)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="З точністю до вибірки"
Basic.Settings.Audio.PeakMeterType.TruePeak="Істинно-піковий (більше навантаження на ЦП)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="ПОПЕРЕДЖЕННЯ: Увімкнуто об'ємний звук."
-Basic.Settings.Audio.MultichannelWarning="Якщо робите трансляції, перевірте чи підтримує ваш сервіс трансляцій об'ємний звук на вході та виході. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast - це приклади сервісів де об'ємний звук цілком підтримується. Навпаки, Facebook Live і YouTube Live обидва підтримують вхідний об'ємний звук, але Facebook Live мікшує його до стерео, а YouTube Live відтворює лише два канали.\n\nАудіо фільтри самої OBS сумісні з об'ємним звуком, хоча підтримку VST плагінами не гарантовано."
+Basic.Settings.Audio.MultichannelWarning="Якщо робите трансляції, перевірте чи підтримує ваш сервіс трансляцій об'ємний звук на вході та виході. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast - це приклади сервісів де об'ємний звук цілком підтримується. Навпаки, Facebook Live і YouTube Live обидва підтримують вхідний об'ємний звук, але Facebook Live мікшує його до стерео, а YouTube Live відтворює лише два канали.\n\nАудіо фільтри самої OBS сумісні з об'ємним звуком, хоча підтримку VST плагінами не гарантовано."
Basic.Settings.Audio.MultichannelWarning.Title="Увімкнути об'ємний звук для виводу аудіо?"
Basic.Settings.Audio.MultichannelWarning.Confirm="Ви справді бажаєте увімкнути об'ємний звук для виводу аудіо?"
-Basic.Settings.Audio.DesktopDevice="Системний аудіопристрій"
-Basic.Settings.Audio.DesktopDevice2="Системний аудіопристрій 2"
-Basic.Settings.Audio.AuxDevice="Мікрофон/допоміжні аудіопристрої"
-Basic.Settings.Audio.AuxDevice2="Мікрофон/допоміжні аудіопристрої 2"
-Basic.Settings.Audio.AuxDevice3="Мікрофон/допоміжні аудіопристрої 3"
-Basic.Settings.Audio.AuxDevice4="Мікрофон/допоміжні аудіопристрої 4"
+Basic.Settings.Audio.Devices="Пристрої"
+Basic.Settings.Audio.DesktopDevice="Системне аудіо"
+Basic.Settings.Audio.DesktopDevice2="Системне аудіо 2"
+Basic.Settings.Audio.AuxDevice="Мікрофон/допоміжне аудіо"
+Basic.Settings.Audio.AuxDevice2="Мікрофон/допоміжне аудіо 2"
+Basic.Settings.Audio.AuxDevice3="Мікрофон/допоміжне аудіо 3"
+Basic.Settings.Audio.AuxDevice4="Мікрофон/допоміжне аудіо 4"
Basic.Settings.Audio.EnablePushToMute="Увімкнути Натисніть-щоб-відключити"
Basic.Settings.Audio.PushToMuteDelay="Натисніть-щоб-відключити, затримка"
Basic.Settings.Audio.EnablePushToTalk="Увімкнути Натисніть-щоб-говорити"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Нормальний"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Нижче нормального"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Очікування"
-Basic.Settings.Advanced.FormatWarning="Попередження: Формати кольору, які відрізняються від NV12, в першу чергу призначені для запису, і не рекомендуються для трансляцій. Трансляція може додатково навантажити ЦП через перетворення форматів."
+Basic.Settings.Advanced.FormatWarning="Попередження: Формати кольору, які відрізняються від NV12, в першу чергу призначені для запису, і не рекомендуються для трансляцій. Трансляція може додатково навантажити ЦП через перетворення форматів."
Basic.Settings.Advanced.Audio.BufferingTime="Розмір аудіо буфера, (мс)"
Basic.Settings.Advanced.Video.ColorFormat="Формат кольору"
-Basic.Settings.Advanced.Video.ColorSpace="YUV, колірний простір"
-Basic.Settings.Advanced.Video.ColorRange="YUV, колірний діапазон"
Basic.Settings.Advanced.Video.ColorRange.Partial="Частковий"
Basic.Settings.Advanced.Video.ColorRange.Full="Повний"
Basic.Settings.Advanced.Audio.MonitoringDevice="Пристрій Тестування Аудіо (на слух)"
Basic.AdvAudio="Розширені Налаштування Аудіо"
Basic.AdvAudio.Name="Назва"
-Basic.AdvAudio.Volume="Гучність (%)"
Basic.AdvAudio.Mono="Мікшувати до псевдо-Моно"
Basic.AdvAudio.Balance="Баланс"
Basic.AdvAudio.SyncOffset="Зсув синхронізації (мс)"
Hotkeys.AppleKeypadDecimal=". (Keypad)"
Hotkeys.AppleKeypadEqual="= (Keypad)"
Hotkeys.MouseButton="Mouse %1"
+Hotkeys.Escape="Esc"
Mute="Вимкнути звук"
Unmute="Увімкнути звук"
NoSources.Title="Немає Джерел"
NoSources.Text="Схоже, що ви не ще додали будь-якого відео Джерела. Таким чином на виводі буде лише порожній екран. Ви справді бажаєте це зробити?"
NoSources.Text.AddSource="Ви можете будь-коли додати Джерела, натиснувши на значок (+) під панеллю Джерела в головному вікні."
+NoSources.Label="У вас немає джерел.\nКлацніть кнопку + , що нижче,\nчи клацніть правою та додайте нове."
ChangeBG="Позначити кольором"
CustomColor="Особливий колір"
ResizeOutputSizeOfSource.Text="Параметри: Роздільна здатність (Полотно) та Роздільна здатність (Вивід), буде встановлено у розмір обраного Джерела."
ResizeOutputSizeOfSource.Continue="Ви хочете продовжити?"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/ur-PK.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/ur-PK.ini
Changed
ResetOSXVSyncOnExit="باہر نکلیں پرOSX V-Sync ری سیٹ کریں"
HighResourceUsage="انکوڈنگ زیادہ اوورلوڈ! ویڈیو ترتیبات کو تبدیل کرنے یا تیزی سے انکوڈنگ کے پیش سیٹ کا استعمال کرتے ہوئے غور کریں."
Transition="منتقلی"
-
-
-
-
+Left="بائیں"
+Right="دائیں"
+Top="اوپر"
+Bottom="نیچے"
+Reset="ری سیٹ کریں"
+Hours="گھنٹے"
+Minutes="منٹ"
+Seconds="سیکنڈز"
+Import="درآمد کریں"
+Export="برآمد کریں"
+Copy="کاپی"
+Paste="پیسٹ کریں"
+PasteDuplicate="جوڑیں (مثنی)"
+Next="اگلا"
+Back="واپس"
+Defaults="طے شدہ"
+None="کوئی بھی نہیں"
+StudioMode.Program="پروگرام"
+Group="گروپس"
+DoNotShowAgain="دوبارہ مت دکھائیں"
+
+AlreadyRunning.LaunchAnyway="ویسے بھی شروع"
+
+
+Auth.Authing.Title="توثیق کر رہا ہے..."
+Auth.AuthFailure.Title="تصدیق کی ناکامی"
+Auth.Chat="گفتگو"
+
+
+
+BandwidthTest.Region.EU="یورپ"
+BandwidthTest.Region.Asia="ایشیا"
+BandwidthTest.Region.Other="دیگر"
+
+
+Basic.AutoConfig.VideoPage="ویڈیو سیٹنگز"
obs-studio-23.1.0.tar.xz/UI/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/vi-VN.ini
Changed
Enable="Bật"
DisableOSXVSync="Tắt OSX V-Sync"
ResetOSXVSyncOnExit="Đặt lại OSX V-Sync khi Thoát"
-HighResourceUsage="Bộ mã hóa bị quá tải! Hãy xem xét giảm chất lượng video hoặc sử dụng bộ mã hóa nhanh hơn."
+HighResourceUsage="Bộ mã hóa bị quá tải! Hãy xem xét giảm chất lượng video hoặc sử dụng bộ mã hóa nhanh hơn."
Transition="Chuyển cảnh"
QuickTransitions="C. cảnh nhanh"
Left="Trái"
Next="Tiếp tục"
Back="Quay lại"
Defaults="Mặc định"
+TransitionOverride="Ghi đè chuyển tiếp"
None="Không có"
StudioMode.Preview="Xem trước"
StudioMode.Program="Chương trình"
ShowInMultiview="Xem trong Đa góc nhìn"
VerticalLayout="Bố cục dọc"
Group="Nhóm"
+DoNotShowAgain="Không hiện lại thông báo nữa"
+Default="(Mặc định)"
+Calculating="Đang tính toán..."
AlreadyRunning.Title="OBS đã chạy"
-AlreadyRunning.Text="OBS đã chạy rồi! Trừ khi bạn muốn làm điều này, xin vui lòng tắt mọi chương trình hiện tại của OBS trước khi cố gắng chạy một chương trình mới. Nếu bạn có OBS thiết lập để thu nhỏ trên khay hệ thống, xin vui lòng kiểm tra để xem nếu nó vẫn đang chạy hay không."
+AlreadyRunning.Text="OBS đã chạy rồi! Trừ khi bạn muốn làm điều này, xin vui lòng tắt mọi chương trình hiện tại của OBS trước khi cố gắng chạy một chương trình mới. Nếu bạn có OBS thiết lập để thu nhỏ trên khay hệ thống, xin vui lòng kiểm tra để xem nếu nó vẫn đang chạy hay không."
AlreadyRunning.LaunchAnyway="Khởi động luôn"
+DockCloseWarning.Title="Đóng cửa sổ gắn đế được"
+DockCloseWarning.Text="Bạn vừa đóng một cửa số gắn đế được. Nếu bạn muốn hiển thị lại lần nữa, sử dụng trình đơn Hiển thị → Thanh đế trên thanh trình đơn."
Auth.Authing.Title="Đang xác thực..."
Auth.AuthFailure.Title="Xác thực không thành công"
Auth.InvalidScope.Title="Bắt buộc phải xác thực"
+Auth.LoadingChannel.Title="Đang tải thông tin kênh..."
+Auth.ChannelFailure.Title="Bị lỗi khi nạp kênh"
Auth.Chat="Tán gẫu"
+Auth.StreamInfo="Thông tin luồng phát"
+TwitchAuth.Stats="Thống kê Twitch"
+TwitchAuth.TwoFactorFail.Title="Không thể truy vấn khóa luồng"
Copy.Filters="Sao chép các bộ lọc"
Paste.Filters="Dán các bộ lọc"
BandwidthTest.Region.Asia="Châu Á"
BandwidthTest.Region.Other="Khác"
-Basic.FirstStartup.RunWizard="Bạn có muốn chạy trình cấu hình tự động? Bạn có thể cấu hình bằng tay cài đặt của bạn bằng cách nhấn vào nút Cài đặt trong cửa sổ chính."
+Basic.FirstStartup.RunWizard="Bạn có muốn chạy trình cấu hình tự động? Bạn có thể cấu hình bằng tay cài đặt của bạn bằng cách nhấn vào nút Cài đặt trong cửa sổ chính."
Basic.FirstStartup.RunWizard.NoClicked="Nếu bạn thay đổi, bạn có thể chạy trình cấu hình tự động bất kỳ lúc nào từ menu Công cụ."
Basic.AutoConfig="Trình cấu hình tự động"
Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 hoặc 30, nhưng ưu tiên độ phân giải cao"
Basic.AutoConfig.StreamPage="Thông tin stream"
Basic.AutoConfig.StreamPage.SubTitle="Vui lòng nhập thông tin máy chủ stream của bạn"
+Basic.AutoConfig.StreamPage.ConnectAccount="Kết nối tài khoản (tùy chọn)"
+Basic.AutoConfig.StreamPage.DisconnectAccount="Ngắt kết nối tài khoản"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Ngắt kết nối tài khoản?"
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Thay đổi này sẽ được áp dụng ngay lập tức. Bạn có chắc là bạn muốn ngắt kết nối tài khoản của bạn?"
+Basic.AutoConfig.StreamPage.UseStreamKey="Dùng khóa luồng phát"
Basic.AutoConfig.StreamPage.Service="Dịch vụ"
Basic.AutoConfig.StreamPage.Service.ShowAll="Hiện tất cả..."
Basic.AutoConfig.StreamPage.Service.Custom="Tự chọn..."
Basic.AutoConfig.TestPage.Result.StreamingEncoder="Mã hóa streaming"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="Mã hóa quay video"
Basic.AutoConfig.TestPage.Result.Header="Chương trình đã xác định được cài đặt lý tưởng nhất dành cho bạn:"
-Basic.AutoConfig.TestPage.Result.Footer="Để sử dụng các thiết lập này, nhấp vào Áp dụng cài đặt. Để cấu hình lại và thử lại, bấm Lùi lại. Để cấu hình thiết lập bằng tay, bấm Hủy bỏ và mở Cài đặt."
+Basic.AutoConfig.TestPage.Result.Footer="Để sử dụng các thiết lập này, nhấp vào Áp dụng cài đặt. Để cấu hình lại và thử lại, bấm Lùi lại. Để cấu hình thiết lập bằng tay, bấm Hủy bỏ và mở Cài đặt."
Basic.Stats="Thống kê"
Basic.Stats.CPUUsage="Sử dụng CPU"
+Basic.Stats.HDDSpaceAvailable="Không gian đĩa còn trống"
Basic.Stats.MemoryUsage="Bộ nhớ đã sử dụng"
Basic.Stats.AverageTimeToRender="Thời gian trung bình để vẽ hình"
Basic.Stats.SkippedFrames="Khung hình bị bỏ qua do mã hóa bị lag"
Basic.Stats.MegabytesSent="Tổng dung lượng"
Basic.Stats.Bitrate="Bitrate"
+ResetUIWarning.Title="Bạn có chắc bạn muốn thiết lập lại giao diện người dùng?"
+ResetUIWarning.Text="Việc đặt lại giao diện người dùng (UI) sẽ ẩn các thanh đế nâng cao. Bạn cần hiện lại chúng từ trình đơn Hiển thị nếu muốn nhìn thấy chúng.\n\nBạn có chắc là muốn đặt lại UI không?"
Updater.Title="Có bản cập nhật mới"
Updater.Text="Có sẵn một bản cập nhật mới:"
Basic.AddTransition="Thêm cấu hình chuyển cảnh"
Basic.RemoveTransition="Xóa cấu hình chuyển cảnh"
+Basic.TransitionProperties="Thuộc tính chuyển tiếp"
Basic.SceneTransitions="Chuyển cảnh"
Basic.TransitionDuration="Thời gian"
Basic.TogglePreviewProgramMode="Chế độ Studio"
ConfirmStop.Title="Ngừng Stream?"
ConfirmStop.Text="Bạn có chắc muốn dừng stream?"
+ConfirmBWTest.Title="Bắt đầu kiểm tra băng thông?"
ConfirmExit.Title="Thoát OBS?"
-ConfirmExit.Text="OBS hiện đang hoạt động. Tất cả các stream/quay video sẽ bị tắt. Bạn có chắc muốn thoát không?"
+ConfirmExit.Text="OBS hiện đang hoạt động. Tất cả các stream/quay video sẽ bị tắt. Bạn có chắc muốn thoát không?"
ConfirmRemove.Title="Xác nhận loại bỏ"
ConfirmRemove.Text="Bạn có chắc bạn muốn loại bỏ '$1' không?"
Output.StartReplayFailed="Không thể khởi động replay buffer"
Output.StartFailedGeneric="Bắt đầu đầu ra đã thất bại. Vui lòng kiểm tra các bản ghi để biết thêm chi tiết.\n\nGhi chú: nếu bạn đang sử dụng bộ mã hóa NVENC hoặc AMD, hãy chắc chắn rằng các trình điều khiển GPU được cập nhật phiên bản mới nhất."
+
Output.ConnectFail.Title="Không thể kết nối"
-Output.ConnectFail.BadPath="URL không hợp lệ của đường dẫn hoặc kết nối. Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng họ là hợp lệ."
+Output.ConnectFail.BadPath="URL không hợp lệ của đường dẫn hoặc kết nối. Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng họ là hợp lệ."
Output.ConnectFail.ConnectFailed="Không thể kết nối tới hệ phục vụ"
-Output.ConnectFail.InvalidStream="Không thể truy cập kênh chỉ định hoặc khóa stream, Vui lòng kiểm tra khóa stream của bạn. Nếu nó đúng, có thể có một vấn đề về kết nối với máy chủ."
-Output.ConnectFail.Error="1 lỗi bất ngờ xảy ra khi thử kết nối tới máy chủ. Thông tin thêm nằm trong log file."
+Output.ConnectFail.InvalidStream="Không thể truy cập kênh chỉ định hoặc khóa stream, Vui lòng kiểm tra khóa stream của bạn. Nếu nó đúng, có thể có một vấn đề về kết nối với máy chủ."
+Output.ConnectFail.Error="1 lỗi bất ngờ xảy ra khi thử kết nối tới máy chủ. Thông tin thêm nằm trong log file."
Output.ConnectFail.Disconnected="Ngắt kết nối từ máy chủ."
+Output.StreamEncodeError.Title="Lỗi mã hóa"
+Output.StreamEncodeError.Msg="Xảy ra lỗi mã hóa trong khi truyền phát."
+
Output.RecordFail.Title="Không thể bắt đầu ghi âm"
-Output.RecordFail.Unsupported="Định dạng đầu ra là một trong hai không được hỗ trợ hoặc không hỗ trợ nhiều hơn một rãnh âm thanh. Xin vui lòng kiểm tra cài đặt của bạn và thử lại."
+Output.RecordFail.Unsupported="Định dạng đầu ra là một trong hai không được hỗ trợ hoặc không hỗ trợ nhiều hơn một rãnh âm thanh. Xin vui lòng kiểm tra cài đặt của bạn và thử lại."
Output.RecordNoSpace.Title="Không gian đĩa không đủ"
Output.RecordNoSpace.Msg="Không còn đủ không gian đĩa để tiếp tục ghi âm."
Output.RecordError.Title="Lỗi ghi âm"
Output.RecordError.Msg="Một lỗi không xác định xảy ra trong khi ghi âm."
+Output.RecordError.EncodeErrorMsg="Xảy ra lỗi mã hóa trong khi ghi."
Output.ReplayBuffer.NoHotkey.Title="Không có hotkey!"
-Output.ReplayBuffer.NoHotkey.Msg="Không hotkey lưu replay buffer. Vui lòng đặt hotkey \"Lưu\" để sử dụng để lưu video."
+Output.ReplayBuffer.NoHotkey.Msg="Không hotkey lưu replay buffer. Vui lòng đặt hotkey \"Lưu\" để sử dụng để lưu video."
Output.BadPath.Title="Đường dẫn tệp xấu"
-Output.BadPath.Text="Đường dẫn đầu ra của cấu hình tệp không hợp lệ. Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng một đường dẫn hợp lệ tập tin đã được thiết lập."
+Output.BadPath.Text="Đường dẫn đầu ra của cấu hình tệp không hợp lệ. Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng một đường dẫn hợp lệ tập tin đã được thiết lập."
LogReturnDialog="Đăng tải lên thành công"
LogReturnDialog.CopyURL="Chép địa chỉ"
Remux.SourceFile="Ghi âm OBS"
Remux.TargetFile="Tệp đích"
Remux.Remux="Remux"
+Remux.Stop="Ngừng làm lại"
+Remux.ClearFinished="Xóa thành phẩm"
+Remux.ClearAll="Xóa tất cả các mục"
Remux.OBSRecording="Ghi OBS"
Remux.FinishedTitle="Remuxing đã hoàn thành"
Remux.Finished="Ghi remuxed"
Remux.FinishedError="Ghi âm remuxed, nhưng các tập tin có thể không đầy đủ"
+Remux.SelectRecording="Chọn Ghi âm OBS..."
Remux.ExitUnfinishedTitle="Remuxing trong tiến trình"
Remux.ExitUnfinished="Remuxing không được hoàn tất, dừng bây giờ có thể hiển thị các tập tin mục tiêu không sử dụng được. \nAre bạn có chắc bạn muốn dừng remuxing?"
UpdateAvailable="Bản cập nhật mới"
-UpdateAvailable.Text="Phiên bản %1.%2.%3 có sẵn. <a href='%4'> Click vào đây để tải về</a>"
+UpdateAvailable.Text="Phiên bản %1.%2.%3 có sẵn. <a href='%4'> Click vào đây để tải về</a>"
Basic.DesktopDevice1="Âm thanh máy tính để bàn"
Basic.DesktopDevice2="Máy tính để bàn âm thanh 2"
Basic.Main.PreviewConextMenu.Enable="Bật xem trước"
+Basic.Main.Preview.Disable="Tắt xem trước"
+
ScaleFiltering="Scale Filtering"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
+ScaleFiltering.Area="Khu vực"
Deinterlacing="Deinterlacing"
Deinterlacing.Discard="Discard"
Deinterlacing.Linear2x="Linear 2x"
Deinterlacing.Yadif="Yadif"
Deinterlacing.Yadif2x="Yadif 2x"
+Deinterlacing.TopFieldFirst="Trường đầu tiên"
+Deinterlacing.BottomFieldFirst="Trường dưới cùng trước"
VolControl.Mute="Tắt tiếng '%1'"
VolControl.Properties="Thuộc tính '%1'"
Basic.PropertiesWindow.SelectColor="Chọn Màu"
Basic.PropertiesWindow.SelectFont="Chọn font"
Basic.PropertiesWindow.ConfirmTitle="Thay đổi cài đặt"
-Basic.PropertiesWindow.Confirm="Có được lưu thay đổi. Bạn có muốn giữ họ?"
+Basic.PropertiesWindow.Confirm="Có được lưu thay đổi. Bạn có muốn giữ họ?"
Basic.PropertiesWindow.NoProperties="Không có tài sản có sẵn"
Basic.PropertiesWindow.AddFiles="Thêm tập tin"
Basic.PropertiesWindow.AddDir="Thêm thư mục"
Basic.Main.StoppingStreaming="Đang dừng stream..."
Basic.Main.ForceStopStreaming="Ngừng Stream (huỷ chậm trễ)"
Basic.Main.Group="Nhóm %1"
+Basic.Main.GroupItems="Nhóm đã chọn"
Basic.Main.Ungroup="Tháo nhóm"
Basic.MainMenu.File="Tập tin (&F)"
Basic.MainMenu.Edit.Scale.Output="Đầu ra (%1x%2)"
Basic.MainMenu.Edit.Transform="Biến đổi (&T)"
Basic.MainMenu.Edit.Transform.EditTransform="Chỉnh sửa biến đổi... (&E)"
+Basic.MainMenu.Edit.Transform.CopyTransform="Sao chép chuyển đổi"
+Basic.MainMenu.Edit.Transform.PasteTransform="Dán chuyển đổi"
Basic.MainMenu.Edit.Transform.ResetTransform="Đặt lại biến đổi (&R)"
Basic.MainMenu.Edit.Transform.Rotate90CW="Xoay 90 độ bên phải"
Basic.MainMenu.Edit.Transform.Rotate90CCW="Xoay 90 độ bên trái"
Basic.MainMenu.Edit.Transform.FitToScreen="Vừa với màn hình (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="Giãn ra để lấp đầy m.hình (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="Trung tâm màn hình (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="Giữa theo chiều dọc"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Giữa theo chiều ngang"
Basic.MainMenu.Edit.Order="Đặt (&O)"
Basic.MainMenu.Edit.Order.MoveUp="Ch&uyển Lên"
Basic.MainMenu.Edit.Order.MoveDown="Chuyển Xuống (&D)"
Basic.MainMenu.View="Hiển thị (&V)"
Basic.MainMenu.View.Toolbars="&Thanh công cụ"
+Basic.MainMenu.View.Docks="Thanh đế"
Basic.MainMenu.View.Docks.ResetUI="Đặt lại UI"
Basic.MainMenu.View.Docks.LockUI="Khóa UI"
Basic.MainMenu.View.Toolbars.Listboxes="&Listboxes"
+Basic.MainMenu.View.SceneTransitions="Chuyển cảnh"
Basic.MainMenu.View.StatusBar="Thanh trạng thái (&S)"
Basic.MainMenu.View.Fullscreen.Interface="Giao diện toàn màn hình"
Basic.MainMenu.Tools="Công cụ (&T)"
Basic.MainMenu.Help="Trợ giúp (&H)"
+Basic.MainMenu.Help.HelpPortal="Trợ giúp & Cổng thông tin"
Basic.MainMenu.Help.Website="Ghé thăm &Website"
+Basic.MainMenu.Help.Discord="Tham gia & Discord Server"
Basic.MainMenu.Help.Logs="Tập tin đăng nhập (&L)"
Basic.MainMenu.Help.Logs.ShowLogs="Hiển thị tập tin đăng nhập (&S)"
Basic.MainMenu.Help.Logs.UploadCurrentLog="Tải lên tệp sổ ghi hiện tại (&C)"
Basic.MainMenu.Help.Logs.UploadLastLog="Tải &lên cuối đăng nhập tập tin"
Basic.MainMenu.Help.Logs.ViewCurrentLog="Xem sổ ghi hiện tại (&V)"
Basic.MainMenu.Help.CheckForUpdates="Kiểm tra cập nhật mới"
+Basic.MainMenu.Help.CrashLogs="Sự cố & Báo cáo"
Basic.MainMenu.Help.About="Giới thiệu (&A)"
Basic.Settings.ProgramRestart="Chương trình phải được khởi động lại để những thiết đặt có hiệu lực."
Basic.Settings.ConfirmTitle="Xác nhận thay đổi"
-Basic.Settings.Confirm="Bạn đã lưu thay đổi. Lưu thay đổi?"
+Basic.Settings.Confirm="Bạn đã lưu thay đổi. Lưu thay đổi?"
Basic.Settings.General="Chung"
Basic.Settings.General.Theme="Theme"
Basic.Settings.General.OpenStatsOnStartup="Mở hộp thoại thống kê khi khởi động"
Basic.Settings.General.WarnBeforeStartingStream="Hiển thị hộp thoại xác nhận khi bắt đầu stream"
Basic.Settings.General.WarnBeforeStoppingStream="Hiển thị hộp thoại xác nhận khi dừng lại stream"
+Basic.Settings.General.Projectors="Máy chiếu"
Basic.Settings.General.HideProjectorCursor="Ẩn con trỏ chuột trên màn chiếu"
Basic.Settings.General.ProjectorAlwaysOnTop="Làm cho màn chiếu luôn luôn trên đầu"
+Basic.Settings.General.Snapping="Chụp liên kết nguồn"
+Basic.Settings.General.ScreenSnapping="Nguồn Snap đến cạnh màn hình"
+Basic.Settings.General.CenterSnapping="Chụp nguồn vào trung tâm ngang và dọc"
Basic.Settings.General.RecordWhenStreaming="Tự động quay video khi stream"
Basic.Settings.General.KeepRecordingWhenStreamStops="Quay tiếp khi dừng stream"
Basic.Settings.General.ReplayBufferWhileStreaming="Tự động bắt đầu replay buffer khi stream"
Basic.Settings.Output.Simple.RecordingQuality.HQ="Không thể phân biệt chất lượng, lớn kích thước"
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless chất lượng, rất lớn tập tin kích thước"
Basic.Settings.Output.Simple.Warn.Encoder="Chú ý: Ghi âm với một phần mềm mã hóa ở một chất lượng khác nhau hơn dòng sẽ yêu cầu phụ CPU sử dụng nếu bạn suối và hồ sơ cùng một lúc."
-Basic.Settings.Output.Simple.Warn.Lossless="Cảnh báo: Lossless chất lượng tạo ra kích thước tập tin rất lớn! Lossless chất lượng có thể sử dụng upward of 7 GB không gian đĩa cho một phút ở độ phân giải cao và framerates. Lossless không nên dùng cho bản ghi âm dài trừ khi bạn có một số lượng rất lớn của không gian đĩa sẵn dùng."
+Basic.Settings.Output.Simple.Warn.Lossless="Cảnh báo: Lossless chất lượng tạo ra kích thước tập tin rất lớn! Lossless chất lượng có thể sử dụng upward of 7 GB không gian đĩa cho một phút ở độ phân giải cao và framerates. Lossless không nên dùng cho bản ghi âm dài trừ khi bạn có một số lượng rất lớn của không gian đĩa sẵn dùng."
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Bạn có chắc bạn muốn sử dụng lossless chất lượng?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless chất lượng cảnh báo!"
Basic.Settings.Output.Simple.Encoder.Software="Phần mềm (x 264)"
Basic.Settings.Video.Numerator="Tử số"
Basic.Settings.Video.Denominator="Mẫu số"
Basic.Settings.Video.Renderer="Renderer"
-Basic.Settings.Video.InvalidResolution="Giá trị độ phân giải không hợp lệ. Phải là [width]x[height] (tức là năm 1920 x 1080)"
-Basic.Settings.Video.CurrentlyActive="Đầu ra video là hiện đang hoạt động. Hãy tắt vào bất kỳ kết quả đầu ra để thay đổi thiết đặt video."
+Basic.Settings.Video.InvalidResolution="Giá trị độ phân giải không hợp lệ. Phải là [width]x[height] (tức là năm 1920 x 1080)"
+Basic.Settings.Video.CurrentlyActive="Đầu ra video là hiện đang hoạt động. Hãy tắt vào bất kỳ kết quả đầu ra để thay đổi thiết đặt video."
Basic.Settings.Video.DisableAero="Vô hiệu hóa Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (nhanh nhất, nhưng mờ nếu rộng)"
Basic.Settings.Audio.SampleRate="Tỷ lệ mẫu"
Basic.Settings.Audio.Channels="Kênh Tivi"
Basic.Settings.Audio.MeterDecayRate.Fast="Nhanh"
-Basic.Settings.Audio.DesktopDevice="Thiết bị âm thanh máy tính"
-Basic.Settings.Audio.DesktopDevice2="Thiết bị âm thanh máy tính 2"
-Basic.Settings.Audio.AuxDevice="Thiết bị âm thanh mic/phụ trợ"
-Basic.Settings.Audio.AuxDevice2="Thiết bị âm thanh mic/phụ trợ 2"
-Basic.Settings.Audio.AuxDevice3="Thiết bị âm thanh mic/phụ trợ 3"
Basic.Settings.Audio.EnablePushToMute="Bật bấm để tắt tiếng"
Basic.Settings.Audio.PushToMuteDelay="Bấm để tắt tiếng trễ"
Basic.Settings.Audio.EnablePushToTalk="Bật bắm để nói"
Basic.Settings.Audio.PushToTalkDelay="Bấm để nói trễ"
Basic.Settings.Audio.UnknownAudioDevice="[Thiết bị không được kết nối hoặc không sẵn dùng]"
+Basic.Settings.Audio.Disabled="Đã vô hiệu"
Basic.Settings.Advanced="Nâng cao"
Basic.Settings.Advanced.General.ProcessPriority="Chương trình ưu tiên"
Basic.Settings.Advanced.General.ProcessPriority.Normal="Thường"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Dưới trung bình"
Basic.Settings.Advanced.General.ProcessPriority.Idle="Rảnh"
-Basic.Settings.Advanced.FormatWarning="Cảnh báo: Định dạng màu sắc khác với NV12 chủ yếu dành cho ghi âm và không được khuyến cáo khi streaming. Stream có thể làm tăng sử dụng CPU do phải chuyển đổi định dạng màu sắc."
+Basic.Settings.Advanced.FormatWarning="Cảnh báo: Định dạng màu sắc khác với NV12 chủ yếu dành cho ghi âm và không được khuyến cáo khi streaming. Stream có thể làm tăng sử dụng CPU do phải chuyển đổi định dạng màu sắc."
Basic.Settings.Advanced.Audio.BufferingTime="Âm thanh thời gian đệm"
Basic.Settings.Advanced.Video.ColorFormat="Định dạng màu sắc"
-Basic.Settings.Advanced.Video.ColorSpace="Không gian màu YUV"
-Basic.Settings.Advanced.Video.ColorRange="Phạm vi màu YUV"
Basic.Settings.Advanced.Video.ColorRange.Partial="Một phần"
Basic.Settings.Advanced.Video.ColorRange.Full="Đầy đủ"
-Basic.Settings.Advanced.Audio.MonitoringDevice="Thiết bị giám sát âm thanh"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Mặc định"
Basic.Settings.Advanced.StreamDelay="Stream trễ"
Basic.Settings.Advanced.StreamDelay.Duration="Thời gian (giây)"
Basic.Settings.Advanced.Network.BindToIP="Liên kết với IP"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="Sử dụng mã mạng mới"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Chế độ độ trễ thấp"
+Basic.Settings.Advanced.AutoRemux.MP4="(ghi với định dạng mkv)"
Basic.AdvAudio="Thuộc tính âm thanh nâng cao"
Basic.AdvAudio.Name="Tên"
-Basic.AdvAudio.Volume="Khối lượng (%)"
Basic.AdvAudio.Mono="Downmix để Mono"
+Basic.AdvAudio.Balance="Cân bằng"
Basic.AdvAudio.SyncOffset="Bù đắp đồng bộ (ms)"
Basic.AdvAudio.Monitoring="Giám sát âm thanh"
Basic.AdvAudio.Monitoring.None="Tắt giám sát"
Basic.SystemTray.Show="Hiện"
Basic.SystemTray.Hide="Ẩn"
-Basic.SystemTray.Message.Reconnecting="Ngắt kết nối. Đang kết nối lại..."
+Basic.SystemTray.Message.Reconnecting="Ngắt kết nối. Đang kết nối lại..."
Hotkeys.Insert="Chèn"
Hotkeys.Delete="Xoá"
Hotkeys.AppleKeypadDecimal=". (Bàn phím)"
Hotkeys.AppleKeypadEqual="= (Bàn phím)"
Hotkeys.MouseButton="Chuột %1"
+Hotkeys.Escape="Esc (Thoát)"
Mute="Tắt Tiếng"
Unmute="Bật tiếng"
About="Giới thiệu"
+About.GetInvolved="Tham gia"
+About.Authors="Các tác giả"
+About.License="Giấy phép"
+About.Contribute="Hỗ trợ dự án OBS"
+
+ResizeOutputSizeOfSource.Continue="Bạn có muốn tiếp tục không?"
obs-studio-23.1.0.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/zh-CN.ini
Changed
-Language="英语"
-Region="美国"
+Language="简体中文"
+Region="中华人民共和国"
OK="确定"
Apply="应用"
Remove="移除"
Rename="重命名"
Interact="互动"
-Filters="筛选"
+Filters="滤镜"
Properties="属性"
MoveUp="上移"
MoveDown="下移"
Settings="设置"
-Display="显示"
+Display="显示器"
Name="名称"
Exit="退出"
Mixer="混音器"
Browse="浏览"
Mono="单声道•"
Stereo="立体声•••"
-DroppedFrames="丢帧 %1 (%2%)"
-StudioProgramProjector="全屏投影仪(输出)"
-PreviewProjector="全屏投影仪(预览)"
-SceneProjector="全屏投影仪 (场景)"
-SourceProjector="全屏投影仪(源)"
-StudioProgramWindow="窗口式投影仪 (输出)"
-PreviewWindow="窗口化投影仪 (预览)"
-SceneWindow="窗口化投影仪 (场景)"
-SourceWindow="窗口化投影仪 (源)"
-MultiviewProjector="多屏显示 (全屏)"
-MultiviewWindowed="多屏显示 (窗口化)"
+DroppedFrames="丢帧 %1(%2%)"
+StudioProgramProjector="全屏投影(输出)"
+PreviewProjector="全屏投影(预览)"
+SceneProjector="全屏投影(场景)"
+SourceProjector="全屏投影(源)"
+StudioProgramWindow="窗口投影(输出)"
+PreviewWindow="窗口投影(预览)"
+SceneWindow="窗口投影(场景)"
+SourceWindow="窗口投影(源)"
+MultiviewProjector="多视图(全屏)"
+MultiviewWindowed="多视图(窗口)"
Clear="清除"
Revert="还原"
Show="显示"
Hide="隐藏"
-UnhideAll="取消所有隐藏"
+UnhideAll="全部取消隐藏"
Untitled="未命名"
New="新建"
Duplicate="复制"
Enable="启用"
DisableOSXVSync="禁用 OSX V-Sync"
ResetOSXVSyncOnExit="退出时重置 OSX V-Sync"
-HighResourceUsage="编码过载! 请考虑降低视频设置或使用更快的编码预设"
-Transition="过渡动画"
-QuickTransitions="快速过渡动画"
+HighResourceUsage="编码过载!请考虑降低视频设置或使用更快的编码预设。"
+Transition="转场特效"
+QuickTransitions="快速转场特效"
Left="左"
Right="右"
Top="上"
Paste="粘贴"
PasteReference="粘贴(引用)"
PasteDuplicate="粘贴(重复)"
-RemuxRecordings="转封装录像"
-Next="下一个"
-Back="返回"
-Defaults="默认值"
-HideMixer="混合器中隐藏"
-TransitionOverride="过渡覆盖模式"
+RemuxRecordings="录像转封装"
+Next="前进"
+Back="后退"
+Defaults="默认"
+HideMixer="在混音器中隐藏"
+TransitionOverride="覆盖默认转场特效"
None="无"
StudioMode.Preview="预览"
StudioMode.Program="输出"
-ShowInMultiview="多屏中显示"
+ShowInMultiview="在多视图中显示"
VerticalLayout="垂直布局"
Group="分组"
DoNotShowAgain="不再显示"
+Default="(默认)"
+Calculating="计算中……"
AlreadyRunning.Title="OBS 已在运行"
AlreadyRunning.Text="OBS 已经在运行中!若你真的想要这样做,请在启动新的 OBS 前关闭其他正在在运行中的 OBS。如果你把 OBS 设置成最小化到系统托盘,请检查它是否仍在运行。"
-AlreadyRunning.LaunchAnyway="始终启动"
+AlreadyRunning.LaunchAnyway="仍然启动"
DockCloseWarning.Title="关闭可停靠窗口"
-DockCloseWarning.Text="刚刚关闭了一个可停靠的窗口。如果想要再次显示它,请使用菜单栏上的 查看→停靠 菜单。"
+DockCloseWarning.Text="您刚关闭了一个可停靠的窗口。如果想要再次显示它,请使用菜单栏上的 查看→停靠部件 菜单。"
Auth.Authing.Title="正在验证…"
-Auth.Authing.Text="正在使用 %1 进行身份验证,请稍候…"
+Auth.Authing.Text="正在与 %1 进行身份验证,请稍候…"
Auth.AuthFailure.Title="身份验证失败"
-Auth.AuthFailure.Text="无法用 %1 进行身份验证:\n\n%2: %3"
+Auth.AuthFailure.Text="无法与 %1 进行身份验证:\n\n%2: %3"
Auth.InvalidScope.Title="需要身份验证"
Auth.InvalidScope.Text="%1 的身份验证要求已更改。某些功能可能不可用。"
Auth.LoadingChannel.Title="正在加载频道信息…"
Auth.StreamInfo="串流资讯"
TwitchAuth.Stats="Twitch 统计"
TwitchAuth.Feed="Twitch 活动订阅源"
+TwitchAuth.TwoFactorFail.Title="无法查询流密钥"
+TwitchAuth.TwoFactorFail.Text="OBS 无法连接到您的 Twitch 账户。请确保在 <a href='https://www.twitch.tv/settings/security'>Twitch 安全性设置</a>中开启了双重身份验证,只有开启后才能开始推流。"
-Copy.Filters="复制筛选器"
-Paste.Filters="粘贴筛选器"
+Copy.Filters="复制滤镜"
+Paste.Filters="粘贴滤镜"
BrowserPanelInit.Title="正在初始化浏览器…"
BrowserPanelInit.Text="正在初始化浏览器,请稍候…"
BandwidthTest.Region.Asia="亚洲"
BandwidthTest.Region.Other="其他"
-Basic.FirstStartup.RunWizard="你想要运行自动配置向导吗? 你也可手动可以通过单击主窗口中的设置按钮来配置你的设置."
-Basic.FirstStartup.RunWizard.NoClicked="如果你改变主意, 你可以随时从工具菜单再次运行自动配置向导."
+Basic.FirstStartup.RunWizard="你想要运行自动配置向导吗?你也可以通过单击主窗口中的设置按钮来手动调节你的设置。"
+Basic.FirstStartup.RunWizard.NoClicked="如果你改变了主意,可以随时从工具菜单再次运行自动配置向导。"
Basic.AutoConfig="自动配置向导"
Basic.AutoConfig.ApplySettings="应用设置"
-Basic.AutoConfig.StartPage="使用信息"
+Basic.AutoConfig.StartPage="使用情况"
Basic.AutoConfig.StartPage.SubTitle="选择你使用此程序的目的"
Basic.AutoConfig.StartPage.PrioritizeStreaming="优先优化串流,其次为录像"
Basic.AutoConfig.StartPage.PrioritizeRecording="仅优化录像,将不会进行串流"
Basic.AutoConfig.VideoPage="视频设置"
-Basic.AutoConfig.VideoPage.SubTitle="指定你想要使用视频设置"
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="使用当前 (%1x%2)"
-Basic.AutoConfig.VideoPage.BaseResolution.Display="显示 %1 (%2x%3)"
-Basic.AutoConfig.VideoPage.FPS.UseCurrent="使用当前 (%1)"
-Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 或 30,但尽可能选择 60"
-Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 或 30, 但优先选择高分辨率"
-Basic.AutoConfig.VideoPage.CanvasExplanation="注意:画布(基础)分辨率并不一定需要与推流或者录像的分辨率相同。实际的推流/录像的分辨率可通过缩小画布分辨率来降低资源的使用或对比特率的需求。"
+Basic.AutoConfig.VideoPage.SubTitle="指定你想要使用的视频设置"
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="使用当前的(%1x%2)"
+Basic.AutoConfig.VideoPage.BaseResolution.Display="显示器 %1(%2x%3)"
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="使用当前(%1)"
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60或30,但尽可能选择60"
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60或30,但优先选择高分辨率"
+Basic.AutoConfig.VideoPage.CanvasExplanation="注意:画布(基础)分辨率并不一定要与推流或录像的分辨率相同。实际推流或录像的分辨率可从画布分辨率缩小,以降低对资源的使用或对比特率的需求。"
Basic.AutoConfig.StreamPage="串流资讯"
Basic.AutoConfig.StreamPage.SubTitle="请输入你的串流信息"
Basic.AutoConfig.StreamPage.ConnectAccount="连接帐户(可选)"
Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(链接)"
Basic.AutoConfig.StreamPage.PerformBandwidthTest="通过带宽测试估计比特率(可能需要几分钟)"
Basic.AutoConfig.StreamPage.PreferHardwareEncoding="优先选择硬件编码"
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬件编码降低了大多数的 CPU 使用率, 但可能需要更多的比特率, 来获得同等的质量."
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬件编码可大量降低 CPU 的使用率,但要获得与软件编码相同的质量,可能需要更多的比特率。"
Basic.AutoConfig.StreamPage.StreamWarning.Title="串流警告"
Basic.AutoConfig.StreamPage.StreamWarning.Text="带宽测试将开始串流无音频的随机视频数据。如果可以,建议你暂时关闭视频保存功能并把串流设置成私人直到测试结束。要继续吗?"
Basic.AutoConfig.TestPage="最终结果"
Basic.AutoConfig.TestPage.Result.StreamingEncoder="串流编码器"
Basic.AutoConfig.TestPage.Result.RecordingEncoder="录像编码器"
Basic.AutoConfig.TestPage.Result.Header="程序已确定这些估计设置是最适合你:"
-Basic.AutoConfig.TestPage.Result.Footer="要使用这些设置, 单击应用设置. 要重新配置向导并再试一次, 单击后退. 要自己手动配置设置, 单击取消, 然后打开设置."
+Basic.AutoConfig.TestPage.Result.Footer="要使用这些设置,单击“应用设置”。要重新配置向导并再试一次,单击“后退”。要自己手动配置设置,单击“取消”,然后打开设置。"
Basic.Stats="统计"
Basic.Stats.CPUUsage="CPU 使用率"
Basic.Stats.Output.Stream="串流"
Basic.Stats.Output.Recording="录像"
Basic.Stats.Status="状态"
-Basic.Stats.Status.Recording="录像"
+Basic.Stats.Status.Recording="录像中"
Basic.Stats.Status.Live="直播中"
Basic.Stats.Status.Reconnecting="重新连接中"
Basic.Stats.Status.Inactive="未激活"
Basic.Stats.DroppedFrames="丢弃的帧(网络)"
Basic.Stats.MegabytesSent="总数据输出"
Basic.Stats.Bitrate="比特率"
+Basic.Stats.DiskFullIn="硬盘装满前剩余录制时间(约)"
-ResetUIWarning.Title="您确定要重置 UI 吗?"
-ResetUIWarning.Text="重置UI将隐藏其他停靠。如果希望这些停靠可见,则需要从“视图”菜单中取消隐藏它们。\n\n您确定要重置 UI 吗?"
+ResetUIWarning.Title="您确定要重置界面吗?"
+ResetUIWarning.Text="重置界面将隐藏额外的停靠窗口。如果希望重新显示这些停靠窗口,则需要从“查看”菜单中取消隐藏它们。\n\n您确定要重置界面吗?"
Updater.Title="有可用的更新"
Updater.Text="有可用的新版本:"
Updater.Running.Title="程序当前处于活跃状态"
Updater.Running.Text="输出当前处于活动状态, 请关闭任何活跃的输出, 然后尝试更新"
Updater.NoUpdatesAvailable.Title="无可用更新"
-Updater.NoUpdatesAvailable.Text="没有更新当前可用"
+Updater.NoUpdatesAvailable.Text="当前没有可用更新"
Updater.FailedToLaunch="启动更新程序失败"
Updater.GameCaptureActive.Title="游戏捕获活跃"
-Updater.GameCaptureActive.Text="游戏捕获钩子库正在使用中, 请关闭所有正在被捕获的游戏/程序(或重新启动 windows), 然后重试."
+Updater.GameCaptureActive.Text="游戏捕获钩子库正在使用中。请关闭所有正在被捕获的游戏/程序(或重新启动 Windows),然后重试。"
-QuickTransitions.SwapScenes="在过渡动画后交换预览/输出场景"
-QuickTransitions.SwapScenesTT="在过渡后交换预览和输出场景(如果输出的原始场景仍然存在)。 \n这将不会撤消任何对输出的原始场景做出的更改."
+QuickTransitions.SwapScenes="在转场后交换预览/输出场景"
+QuickTransitions.SwapScenesTT="(如果输出的原始场景仍存在)在转场后交换预览和输出场景。\n这将不会撤消任何对输出的原始场景的更改。"
QuickTransitions.DuplicateScene="复制场景"
-QuickTransitions.DuplicateSceneTT="当编辑同一场景, 允许编辑来源的可见性/变换而无需修改源输出. \n 为了编辑源属性而无需修改输出, 启动 ' 复制源'. \n 改变这个值将会重置当前的输出场景(如果它仍然存在)."
+QuickTransitions.DuplicateSceneTT="当编辑同一场景时,可以修改源的变换/可见性,而不会影响输出。\n若要修改源属性而不影响输出,请打开“复制源”。\n改变这个值将会重置当前的输出场景(如果仍存在)。"
QuickTransitions.EditProperties="复制源"
-QuickTransitions.EditPropertiesTT="当编辑同一场景, 允许编辑来源的属性而不修改输出. \n 只有启用了'复制场景',才能使用这项设置. \n 某些来源 (如捕获或媒体源) 并不支持这个, 并不能单独编辑. \n 修改这个值将重置当前输出场景 (如果它仍然存在). \n\n 警告: 因为源将被复制这可能需要额外的系统或视频资源."
-QuickTransitions.HotkeyName="快速过渡: %1"
+QuickTransitions.EditPropertiesTT="当编辑同一场景时,可以修改源的属性,而不会影响输出。\n只有启用了“复制场景”之后才能使用这项设置。\n某些源(如捕获或媒体源)并不支持此功能,且不能单独修改。\n改变这个值将会重置当前的输出场景(如果仍存在)。\n\n警告:因为源将被复制,可能需要额外的系统或视频资源。"
+QuickTransitions.HotkeyName="快速转场:%1"
-Basic.AddTransition="添加可配置的过渡动画"
-Basic.RemoveTransition="删除可配置的过渡动画"
-Basic.TransitionProperties="过渡动画属性"
-Basic.SceneTransitions="场景过渡"
+Basic.AddTransition="添加可配置的转场特效"
+Basic.RemoveTransition="删除可配置的转场特效"
+Basic.TransitionProperties="转场特效属性"
+Basic.SceneTransitions="转场特效"
Basic.TransitionDuration="时长"
Basic.TogglePreviewProgramMode="工作室模式"
-TransitionNameDlg.Text="请输入过渡动画的名称"
-TransitionNameDlg.Title="过渡动画名称"
+TransitionNameDlg.Text="请输入转场特效的名称"
+TransitionNameDlg.Title="转场特效名称"
TitleBar.Profile="配置文件"
TitleBar.Scenes="场景"
Output.StartReplayFailed="启动回放缓存失败"
Output.StartFailedGeneric="启动输出失败. 请检查日志来了解细节.\n\n注意: 如果你使用的是 NVENC 或 AMD 编码器, 请确保您的视频驱动程序是最新的."
+
Output.ConnectFail.Title="连接失败"
Output.ConnectFail.BadPath="无效的路径或URL。请检查您的设置以确认它们是有效的。"
Output.ConnectFail.ConnectFailed="无法连接到服务器"
Output.ConnectFail.Error="试图连接到服务器时出现意外的错误。详细信息记录在日志文件中。"
Output.ConnectFail.Disconnected="已从服务器断开。"
+Output.StreamEncodeError.Title="编码错误"
+Output.StreamEncodeError.Msg="推流时发生了编码器错误。"
+
Output.RecordFail.Title="未能开始录制"
Output.RecordFail.Unsupported="输出格式不支持或者不支持超过一个音轨. 请检查你的设置, 然后重试"
Output.RecordNoSpace.Title="磁盘空间不足"
Output.RecordNoSpace.Msg="没有足够磁盘空间来继续录像."
Output.RecordError.Title="录像错误"
Output.RecordError.Msg="录像时发生了预料外的错误。"
-Output.ReplayBuffer.NoHotkey.Title="没有快捷键设置!"
-Output.ReplayBuffer.NoHotkey.Msg="没有为回放缓存设置快捷键. 请设置保存跨借鉴来用于保存回放录像."
+Output.RecordError.EncodeErrorMsg="录制时发生了编码器错误。"
+Output.ReplayBuffer.NoHotkey.Title="没有设置快捷键!"
+Output.ReplayBuffer.NoHotkey.Msg="没有为回放缓存设置保存快捷键。请设置“保存回放”的快捷键,用于保存回放录像。"
-Output.BadPath.Title="错误的文件路径"
-Output.BadPath.Text="无效的输出路径。请检查您的设置,确认文件路径是否有效。"
+Output.BadPath.Title="文件路径错误"
+Output.BadPath.Text="输出路径无效。请检查您的设置,并确认文件路径有效。"
LogReturnDialog="日志上传成功"
LogReturnDialog.CopyURL="复制链接"
Remux.SourceFile="OBS 录像"
Remux.TargetFile="目标文件"
-Remux.Remux="重新封装"
-Remux.Stop="停止 Remuxing"
+Remux.Remux="转换封装"
+Remux.Stop="停止封装转换"
Remux.ClearFinished="清除已完成项目"
Remux.ClearAll="清除所有项目"
Remux.OBSRecording="OBS 录像"
Remux.FinishedTitle="转封装完成"
Remux.Finished="录像已经转封装"
-Remux.FinishedError="录像已经转封装, 但是文件可能不完整."
-Remux.SelectRecording="选择 OBS 录制…"
+Remux.FinishedError="录像封装已转换,但文件可能不完整"
+Remux.SelectRecording="选择 OBS 录像文件…"
Remux.SelectTarget="选择目标文件…"
-Remux.FileExistsTitle="选定的文件已存在"
-Remux.FileExists="选定的文件已存在。你想替换它们吗?"
+Remux.FileExistsTitle="目标文件已存在"
+Remux.FileExists="目标文件已存在。你想替换它们吗?"
Remux.ExitUnfinishedTitle="转封装在进行中"
-Remux.ExitUnfinished="转封装没有完成, 现在停止可能使目标文件不可用.\n你确定要停止转封装吗?"
-Remux.HelpText="拖动文件到此窗口以无损提取或选择空 “OBS 录制” 单元以浏览文件。"
+Remux.ExitUnfinished="转封装尚未完成,现在停止可能会使目标文件无法使用。\n你确定要停止封装转换吗?"
+Remux.HelpText="拖动文件到此窗口以转换封装格式,或选择空“OBS 录像”单元以浏览文件。"
UpdateAvailable="有可用的更新"
UpdateAvailable.Text="新的版本 %1.%2.%3 已可用。<a href='%4'> 点击这里下载</a>"
-Basic.DesktopDevice1="台式音响"
-Basic.DesktopDevice2="台式音响 2"
+Basic.DesktopDevice1="桌面音频"
+Basic.DesktopDevice2="桌面音频 2"
Basic.AuxDevice1="麦克风/Aux"
Basic.AuxDevice2="麦克风/Aux 2"
Basic.AuxDevice3="麦克风/Aux 3"
Basic.AuxDevice4="麦克风/Aux 4"
Basic.Scene="场景"
-Basic.DisplayCapture="显示捕获"
+Basic.DisplayCapture="显示器捕获"
Basic.Main.PreviewConextMenu.Enable="开启预览"
+Basic.Main.Preview.Disable="关闭预览"
+
ScaleFiltering="尺度滤波"
ScaleFiltering.Point="点"
ScaleFiltering.Bilinear="双线性算法"
VolControl.SliderUnmuted="音量滑动条 '%1': %2"
VolControl.SliderMuted="音量滑动条 '%1': %2 (当前静音)"
VolControl.Mute="静音 '%1'"
-VolControl.Properties="属性 '%1'"
+VolControl.Properties="'%1' 的属性"
Basic.Main.AddSceneDlg.Title="添加场景"
Basic.Main.AddSceneDlg.Text="请输入场景名称"
Basic.StatusBar.DelayStoppingIn="延迟 (在 %1 秒后停止)"
Basic.StatusBar.DelayStartingStoppingIn="延迟 (在%1 秒后停止,在 %2 秒后开始)"
-Basic.Filters="过滤器"
-Basic.Filters.AsyncFilters="音频/视频 过滤器"
-Basic.Filters.AudioFilters="音频过滤器"
+Basic.Filters="滤镜"
+Basic.Filters.AsyncFilters="音频/视频滤镜"
+Basic.Filters.AudioFilters="音频滤镜"
Basic.Filters.EffectFilters="效果滤镜"
-Basic.Filters.Title="'%1' 的过滤器"
-Basic.Filters.AddFilter.Title="过滤器名称"
-Basic.Filters.AddFilter.Text="请指定过滤器的名称"
+Basic.Filters.Title="'%1' 的滤镜"
+Basic.Filters.AddFilter.Title="滤镜名称"
+Basic.Filters.AddFilter.Text="请指定滤镜的名称"
-Basic.TransformWindow="现场项目变换"
+Basic.TransformWindow="场景物体变换"
Basic.TransformWindow.Position="位置"
Basic.TransformWindow.Rotation="旋转"
Basic.TransformWindow.Size="大小"
-Basic.TransformWindow.Alignment="位置对齐"
-Basic.TransformWindow.BoundsType="边界框类型"
-Basic.TransformWindow.BoundsAlignment="边界框对齐方式"
-Basic.TransformWindow.Bounds="边界框大小"
+Basic.TransformWindow.Alignment="对齐点"
+Basic.TransformWindow.BoundsType="边框类型"
+Basic.TransformWindow.BoundsAlignment="边框内对齐方式"
+Basic.TransformWindow.Bounds="边框大小"
Basic.TransformWindow.Crop="裁剪"
Basic.TransformWindow.Alignment.TopLeft="左上"
-Basic.TransformWindow.Alignment.TopCenter="顶上"
+Basic.TransformWindow.Alignment.TopCenter="中上"
Basic.TransformWindow.Alignment.TopRight="右上"
-Basic.TransformWindow.Alignment.CenterLeft="靠左居中"
+Basic.TransformWindow.Alignment.CenterLeft="左中"
Basic.TransformWindow.Alignment.Center="居中"
-Basic.TransformWindow.Alignment.CenterRight="靠右居中"
+Basic.TransformWindow.Alignment.CenterRight="右中"
Basic.TransformWindow.Alignment.BottomLeft="左下"
-Basic.TransformWindow.Alignment.BottomCenter="正下"
+Basic.TransformWindow.Alignment.BottomCenter="中下"
Basic.TransformWindow.Alignment.BottomRight="右下"
-Basic.TransformWindow.BoundsType.None="没有界限"
-Basic.TransformWindow.BoundsType.MaxOnly="最大大小"
-Basic.TransformWindow.BoundsType.ScaleInner="缩放到内部边界"
-Basic.TransformWindow.BoundsType.ScaleOuter="扩展到外部界限"
-Basic.TransformWindow.BoundsType.ScaleToWidth="缩放到边界宽度"
-Basic.TransformWindow.BoundsType.ScaleToHeight="缩放到边界高度"
+Basic.TransformWindow.BoundsType.None="无边框"
+Basic.TransformWindow.BoundsType.MaxOnly="等比缩放到框内,不超过原始大小"
+Basic.TransformWindow.BoundsType.ScaleInner="等比缩放到框内"
+Basic.TransformWindow.BoundsType.ScaleOuter="等比缩放到框外"
+Basic.TransformWindow.BoundsType.ScaleToWidth="等比缩放到边框宽度"
+Basic.TransformWindow.BoundsType.ScaleToHeight="等比缩放到边框高度"
Basic.TransformWindow.BoundsType.Stretch="拉伸"
Basic.Main.AddSourceHelp.Title="无法添加源"
-Basic.Main.AddSourceHelp.Text="你需要至少一个场景来添加源。"
+Basic.Main.AddSourceHelp.Text="你需要至少一个场景才能添加源。"
Basic.Main.Scenes="场景"
Basic.Main.Sources="来源"
Basic.Main.Controls="控件"
-Basic.Main.Connecting="连接中..."
+Basic.Main.Connecting="连接中……"
Basic.Main.StartRecording="开始录制"
Basic.Main.StartReplayBuffer="开始回放缓存"
Basic.Main.StartStreaming="开始推流"
Basic.MainMenu.File.Export="导出(&E)"
Basic.MainMenu.File.Import="导入(&I)"
Basic.MainMenu.File.ShowRecordings="显示录像(&R)"
-Basic.MainMenu.File.Remux="转封装录像 (&M)"
+Basic.MainMenu.File.Remux="录像转封装(&M)"
Basic.MainMenu.File.Settings="设置(&S)"
-Basic.MainMenu.File.ShowSettingsFolder="打开设置所在路径(&F)"
-Basic.MainMenu.File.ShowProfileFolder="打开配置文件所在路径(&P)"
-Basic.MainMenu.AlwaysOnTop="窗口置顶 (&A)"
+Basic.MainMenu.File.ShowSettingsFolder="打开设置文件夹"
+Basic.MainMenu.File.ShowProfileFolder="打开配置文件文件夹"
+Basic.MainMenu.AlwaysOnTop="窗口置顶(&A)"
Basic.MainMenu.File.Exit="退出(&X)"
-Basic.MainMenu.Edit="编辑 (&E)"
-Basic.MainMenu.Edit.Undo="撤销 (&U)"
-Basic.MainMenu.Edit.Redo="重做 (&R)"
+Basic.MainMenu.Edit="编辑(&E)"
+Basic.MainMenu.Edit.Undo="撤消(&U)"
+Basic.MainMenu.Edit.Redo="重做(&R)"
Basic.MainMenu.Edit.UndoAction="撤消 $1 (&U)"
-Basic.MainMenu.Edit.RedoAction="重做 $1(&R)"
-Basic.MainMenu.Edit.LockPreview="锁定预览 (&L)"
-Basic.MainMenu.Edit.Scale="预览 缩放(&S)"
+Basic.MainMenu.Edit.RedoAction="重做 $1 (&R)"
+Basic.MainMenu.Edit.LockPreview="锁定预览(&L)"
+Basic.MainMenu.Edit.Scale="预览缩放(&S)"
Basic.MainMenu.Edit.Scale.Window="缩放至窗口"
-Basic.MainMenu.Edit.Scale.Canvas="背景 (%1x%2)"
-Basic.MainMenu.Edit.Scale.Output="输出 (%1x%2)"
-Basic.MainMenu.Edit.Transform="变换 (&T)"
-Basic.MainMenu.Edit.Transform.EditTransform="编辑变换 (&E)"
+Basic.MainMenu.Edit.Scale.Canvas="画布(%1x%2)"
+Basic.MainMenu.Edit.Scale.Output="输出(%1x%2)"
+Basic.MainMenu.Edit.Transform="变换(&T)"
+Basic.MainMenu.Edit.Transform.EditTransform="编辑变换(&E)..."
Basic.MainMenu.Edit.Transform.CopyTransform="复制变换"
Basic.MainMenu.Edit.Transform.PasteTransform="粘贴变换"
-Basic.MainMenu.Edit.Transform.ResetTransform="重置变换 (&R)"
-Basic.MainMenu.Edit.Transform.Rotate90CW="顺时针旋转 90 度(&9)"
-Basic.MainMenu.Edit.Transform.Rotate90CCW="逆时针旋转 90 度(&D)"
-Basic.MainMenu.Edit.Transform.Rotate180="旋转 180 度(&1)"
-Basic.MainMenu.Edit.Transform.FlipHorizontal="水平翻转 (&H)"
-Basic.MainMenu.Edit.Transform.FlipVertical="垂直翻转 (&V)"
-Basic.MainMenu.Edit.Transform.FitToScreen="比例适配屏幕 (&F)"
-Basic.MainMenu.Edit.Transform.StretchToScreen="拉伸到全屏 (&S)"
-Basic.MainMenu.Edit.Transform.CenterToScreen="屏幕居中 (&C)"
-Basic.MainMenu.Edit.Order="排序 (&O)"
-Basic.MainMenu.Edit.Order.MoveUp="上移 (&U)"
-Basic.MainMenu.Edit.Order.MoveDown="下移 (&D)"
-Basic.MainMenu.Edit.Order.MoveToTop="移至顶部 (&T)"
-Basic.MainMenu.Edit.Order.MoveToBottom="移至底部 (&B)"
+Basic.MainMenu.Edit.Transform.ResetTransform="重置变换(&R)"
+Basic.MainMenu.Edit.Transform.Rotate90CW="顺时针旋转 90 度"
+Basic.MainMenu.Edit.Transform.Rotate90CCW="逆时针旋转 90 度"
+Basic.MainMenu.Edit.Transform.Rotate180="旋转 180 度"
+Basic.MainMenu.Edit.Transform.FlipHorizontal="水平翻转(&H)"
+Basic.MainMenu.Edit.Transform.FlipVertical="垂直翻转(&V)"
+Basic.MainMenu.Edit.Transform.FitToScreen="比例适配屏幕(&F)"
+Basic.MainMenu.Edit.Transform.StretchToScreen="拉伸到全屏(&S)"
+Basic.MainMenu.Edit.Transform.CenterToScreen="屏幕居中(&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="垂直居中"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="水平居中"
+Basic.MainMenu.Edit.Order="排序(&O)"
+Basic.MainMenu.Edit.Order.MoveUp="上移(&U)"
+Basic.MainMenu.Edit.Order.MoveDown="下移(&D)"
+Basic.MainMenu.Edit.Order.MoveToTop="移至顶层(&T)"
+Basic.MainMenu.Edit.Order.MoveToBottom="移至底层(&B)"
Basic.MainMenu.Edit.AdvAudio="高级音频属性(&A)"
-Basic.MainMenu.View="查看 (&V)"
-Basic.MainMenu.View.Toolbars="工具栏 (&T)"
+Basic.MainMenu.View="查看(&V)"
+Basic.MainMenu.View.Toolbars="工具栏(&T)"
Basic.MainMenu.View.Docks="停靠部件"
Basic.MainMenu.View.Docks.ResetUI="重置界面"
Basic.MainMenu.View.Docks.LockUI="锁定界面"
-Basic.MainMenu.View.Toolbars.Listboxes="列表框 (&L)"
-Basic.MainMenu.View.SceneTransitions="场景过渡 (&C)"
-Basic.MainMenu.View.StatusBar="状态栏 (&S)"
+Basic.MainMenu.View.Toolbars.Listboxes="列表框(&L)"
+Basic.MainMenu.View.SceneTransitions="转场特效(&C)"
+Basic.MainMenu.View.StatusBar="状态栏(&S)"
Basic.MainMenu.View.Fullscreen.Interface="全屏界面"
-Basic.MainMenu.SceneCollection="场景集合 (&S)"
-Basic.MainMenu.Profile="配置文件 (&P)"
+Basic.MainMenu.SceneCollection="场景集合(&S)"
+Basic.MainMenu.Profile="配置文件(&P)"
Basic.MainMenu.Profile.Import="导入配置文件"
Basic.MainMenu.Profile.Export="导出配置文件"
Basic.MainMenu.SceneCollection.Import="导入场景集合"
Basic.MainMenu.SceneCollection.Export="导出场景集合"
Basic.MainMenu.Profile.Exists="配置文件已存在"
-Basic.MainMenu.SceneCollection.Exists="场景机会已存在"
+Basic.MainMenu.SceneCollection.Exists="场景集合已存在"
-Basic.MainMenu.Tools="工具 (&T)"
+Basic.MainMenu.Tools="工具(&T)"
-Basic.MainMenu.Help="帮助 (&H)"
+Basic.MainMenu.Help="帮助(&H)"
Basic.MainMenu.Help.HelpPortal="帮助门户(&P)"
-Basic.MainMenu.Help.Website="访问OBS主页 (&W)"
+Basic.MainMenu.Help.Website="访问 OBS 主页(&W)"
Basic.MainMenu.Help.Discord="加入 &Discord 服务器"
-Basic.MainMenu.Help.Logs="日志文件 (&L)"
-Basic.MainMenu.Help.Logs.ShowLogs="显示日志文件 (&S)"
-Basic.MainMenu.Help.Logs.UploadCurrentLog="上传当前日志文件 (&C)"
-Basic.MainMenu.Help.Logs.UploadLastLog="上传最后一个日志文件 (&L)"
-Basic.MainMenu.Help.Logs.ViewCurrentLog="查看当前日志 (&V)"
+Basic.MainMenu.Help.Logs="日志文件(&L)"
+Basic.MainMenu.Help.Logs.ShowLogs="显示日志文件(&S)"
+Basic.MainMenu.Help.Logs.UploadCurrentLog="上传当前日志文件(&C)"
+Basic.MainMenu.Help.Logs.UploadLastLog="上传上次日志文件(&L)"
+Basic.MainMenu.Help.Logs.ViewCurrentLog="查看当前日志(&V)"
Basic.MainMenu.Help.CheckForUpdates="检查升级(&C)"
Basic.MainMenu.Help.CrashLogs="错误报告(&R)"
Basic.MainMenu.Help.CrashLogs.ShowLogs="查看错误报告(&S)"
Basic.Settings.General.OpenStatsOnStartup="在启动时打开统计对话框"
Basic.Settings.General.WarnBeforeStartingStream="启动流时显示确认对话框"
Basic.Settings.General.WarnBeforeStoppingStream="停止流时显示确认对话框"
-Basic.Settings.General.Projectors="投影仪"
-Basic.Settings.General.HideProjectorCursor="隐藏投影仪上的光标"
-Basic.Settings.General.ProjectorAlwaysOnTop="使投影器总是置顶"
-Basic.Settings.General.Snapping="源对齐方式"
-Basic.Settings.General.ScreenSnapping="对齐源到屏幕边缘"
-Basic.Settings.General.CenterSnapping="水平和垂直居中对齐源"
-Basic.Settings.General.SourceSnapping="对齐源跟其他的源"
-Basic.Settings.General.SnapDistance="对齐的敏感性"
-Basic.Settings.General.RecordWhenStreaming="当推流时自动录像"
-Basic.Settings.General.KeepRecordingWhenStreamStops="当推流停止时保持录像"
+Basic.Settings.General.Projectors="投影窗口"
+Basic.Settings.General.HideProjectorCursor="投影窗口中隐藏光标"
+Basic.Settings.General.ProjectorAlwaysOnTop="使投影窗口置顶"
+Basic.Settings.General.Snapping="源对齐吸附"
+Basic.Settings.General.ScreenSnapping="吸附源到屏幕边缘"
+Basic.Settings.General.CenterSnapping="吸附源到水平和垂直中心"
+Basic.Settings.General.SourceSnapping="吸附源到其他的源"
+Basic.Settings.General.SnapDistance="吸附敏感度"
+Basic.Settings.General.RecordWhenStreaming="推流时自动录像"
+Basic.Settings.General.KeepRecordingWhenStreamStops="推流停止后继续录像"
Basic.Settings.General.ReplayBufferWhileStreaming="推流时自动启动重播缓冲区"
-Basic.Settings.General.KeepReplayBufferStreamStops="推流停止时重播缓冲区保持活动状态"
+Basic.Settings.General.KeepReplayBufferStreamStops="推流停止后保持重播缓冲区启用"
Basic.Settings.General.SysTray="系统托盘"
Basic.Settings.General.SysTrayWhenStarted="开始时最小化到系统托盘"
-Basic.Settings.General.SystemTrayHideMinimize="总是最小化到系统托盘, 而不是任务栏"
-Basic.Settings.General.SaveProjectors="退出时保存投影仪"
-Basic.Settings.General.Preview="停止混流"
+Basic.Settings.General.SystemTrayHideMinimize="总是最小化到系统托盘,而不是任务栏"
+Basic.Settings.General.SaveProjectors="退出时保存投影窗口设置"
+Basic.Settings.General.Preview="预览"
Basic.Settings.General.OverflowHidden="隐藏溢出"
Basic.Settings.General.OverflowAlwaysVisible="溢出始终可见"
Basic.Settings.General.OverflowSelectionHidden="即使源不可见,也会显示溢出"
Basic.Settings.General.SwitchOnDoubleClick="双击时切换到场景"
Basic.Settings.General.StudioPortraitLayout="启用纵向布局"
-Basic.Settings.General.TogglePreviewProgramLabels="显示 预览/程序 标签"
+Basic.Settings.General.TogglePreviewProgramLabels="显示 预览/输出 标签"
Basic.Settings.General.Multiview="多视图"
-Basic.Settings.General.Multiview.MouseSwitch="点击切换场景"
-Basic.Settings.General.Multiview.DrawSourceNames="显示场景名"
-Basic.Settings.General.Multiview.DrawSafeAreas="显示安全区域(EBU R 95)"
+Basic.Settings.General.Multiview.MouseSwitch="单击以切换场景"
+Basic.Settings.General.Multiview.DrawSourceNames="显示场景名称"
+Basic.Settings.General.Multiview.DrawSafeAreas="显示安全区域(EBU R 95)"
Basic.Settings.General.MultiviewLayout="多视图布局"
-Basic.Settings.General.MultiviewLayout.Horizontal.Top="水平, 顶部(8 场景)"
-Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="水平, 底部(8 场景)"
-Basic.Settings.General.MultiviewLayout.Vertical.Left="垂直, 左侧(8 场景)"
-Basic.Settings.General.MultiviewLayout.Vertical.Right="垂直, 右侧(8 场景)"
-Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="水平, 顶部(24 场景)"
-
-Basic.Settings.Stream="串流"
-Basic.Settings.Stream.StreamType="串流类型"
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="横向平铺,顶部(8 场景)"
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="横向平铺,底部(8 场景)"
+Basic.Settings.General.MultiviewLayout.Vertical.Left="纵向平铺,左侧(8 场景)"
+Basic.Settings.General.MultiviewLayout.Vertical.Right="纵向平铺,右侧(8 场景)"
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="横向平铺,顶部(24 场景)"
+
+Basic.Settings.Stream="推流"
+Basic.Settings.Stream.StreamType="推流类型"
Basic.Settings.Stream.Custom.UseAuthentication="使用身份验证"
Basic.Settings.Stream.Custom.Username="用户名"
Basic.Settings.Stream.Custom.Password="密码"
Basic.Settings.Output.Mode.Adv="高级"
Basic.Settings.Output.Mode.FFmpeg="FFmpeg 输出"
Basic.Settings.Output.UseReplayBuffer="启用回放缓存"
-Basic.Settings.Output.ReplayBuffer.SecondsMax="最大回放时间(秒)"
-Basic.Settings.Output.ReplayBuffer.MegabytesMax="最大内存(Mb)"
-Basic.Settings.Output.ReplayBuffer.Estimate="估计内存使用率: %1 MB"
-Basic.Settings.Output.ReplayBuffer.EstimateUnknown="无法估计内存使用率. 请设置最大内存限制."
-Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(注意: 确保在快捷键部分设置一个回放缓冲区的快捷键)"
+Basic.Settings.Output.ReplayBuffer.SecondsMax="最大回放时间(秒)"
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="最大内存(MB)"
+Basic.Settings.Output.ReplayBuffer.Estimate="估计内存使用量:%1 MB"
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="无法估计内存使用量。请设置最大内存限制。"
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(注意:一定要在快捷键部分为保存回放缓存设置快捷键)"
Basic.Settings.Output.ReplayBuffer.Prefix="回放缓存文件名前缀"
Basic.Settings.Output.ReplayBuffer.Suffix="后缀"
Basic.Settings.Output.Simple.SavePath="录像路径"
Basic.Settings.Output.Simple.Warn.VideoBitrate="警告: 视频比特率将设置为 %1, 这是当前的流媒体服务的上限值. 如果你确定你想要超过 %1, 启用高级的编码器选项并取消选中\"强制流媒体服务比特率限制\"."
Basic.Settings.Output.Simple.Warn.AudioBitrate="警告: 音频比特率将设置为 %1, 这是当前的流媒体服务的上限值. 如果你确定你想要超过 %1, 启用高级的编码器选项并取消选中\"强制流媒体服务比特率限制\"."
Basic.Settings.Output.Simple.Warn.Encoder="警告: 同时传输流和录像, 并使用软件编码器编码与流不同的质量, 将会需要额外的CPU使用."
-Basic.Settings.Output.Simple.Warn.Lossless="警告: 无损质量产生的文件大小非常大! 无损质量在高分辨率和帧速率的情况下可以使用超过7GB的磁盘空间每分钟。 无损不适合长时间录像,除非你有很多可用的磁盘空间。"
+Basic.Settings.Output.Simple.Warn.Lossless="警告:无损质量产生的文件大小非常大!无损质量在高分辨率和帧速率的情况下每分钟可使用超过 7GB 的磁盘空间。无损不适合长时间录像,除非你有很多可用的磁盘空间。"
Basic.Settings.Output.Simple.Warn.Lossless.Msg="你确定你想要使用无损质量?"
Basic.Settings.Output.Simple.Warn.Lossless.Title="无损质量警告!"
-Basic.Settings.Output.Simple.Encoder.Software="软件 (x264)"
-Basic.Settings.Output.Simple.Encoder.Hardware.QSV="硬件 (QSV)"
-Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬件 (AMD)"
-Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬件 (NVENC)"
-Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="软件 (x 264 低 CPU 使用率预设,增加文件大小)"
+Basic.Settings.Output.Simple.Encoder.Software="软件(x264)"
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="硬件(QSV)"
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬件(AMD)"
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬件(NVENC)"
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="软件(x264 低 CPU 使用率预设,将会增加文件大小)"
Basic.Settings.Output.VideoBitrate="视频比特率"
Basic.Settings.Output.AudioBitrate="音频比特率"
Basic.Settings.Output.Reconnect="自动重连"
-Basic.Settings.Output.RetryDelay="重试延迟时间 (秒)"
+Basic.Settings.Output.RetryDelay="重试间隔(秒)"
Basic.Settings.Output.MaxRetries="最大重试次数"
Basic.Settings.Output.Advanced="启用高级编码器设置"
Basic.Settings.Output.EncoderPreset="编码器预设"
Basic.Settings.Output.CustomEncoderSettings="自定义编码器设置"
-Basic.Settings.Output.CustomMuxerSettings="自定义 Muxer 设置"
-Basic.Settings.Output.NoSpaceFileName="生成没有空格文件名"
+Basic.Settings.Output.CustomMuxerSettings="自定义混流器设置"
+Basic.Settings.Output.NoSpaceFileName="生成没有空格的文件名"
Basic.Settings.Output.Adv.Rescale="重新缩放输出"
Basic.Settings.Output.Adv.AudioTrack="音轨"
Basic.Settings.Output.Adv.Streaming="串流"
-Basic.Settings.Output.Adv.ApplyServiceSettings="强制流服务编码器设置"
+Basic.Settings.Output.Adv.ApplyServiceSettings="强制执行流媒体服务编码器设置"
Basic.Settings.Output.Adv.Audio.Track1="轨道 1"
Basic.Settings.Output.Adv.Audio.Track2="轨道 2"
Basic.Settings.Output.Adv.Audio.Track3="轨道 3"
Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="自定义输出 (FFmpeg)"
Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(使用串流编码器)"
Basic.Settings.Output.Adv.Recording.Filename="文件名格式"
-Basic.Settings.Output.Adv.Recording.OverwriteIfExists="如果文件存在, 覆盖"
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="如果文件存在则覆盖"
Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg 输出类型"
Basic.Settings.Output.Adv.FFmpeg.Type.URL="输出到 URL"
Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="输出到文件"
Basic.Settings.Output.Adv.FFmpeg.FormatVideo="视频"
Basic.Settings.Output.Adv.FFmpeg.FormatDefault="默认格式"
Basic.Settings.Output.Adv.FFmpeg.FormatDesc="容器格式说明"
-Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="通过文件路径或者URL推断音频/视频格式"
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="通过文件路径或 URL 推断音频/视频格式"
Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="默认编码器"
Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="禁用编码器"
Basic.Settings.Output.Adv.FFmpeg.VEncoder="视频编码器"
-Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="视频编码器设置 (如果有)"
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="视频编码器设置(如果有)"
Basic.Settings.Output.Adv.FFmpeg.AEncoder="音频编码器"
-Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="视频编码器设置 (如果有)"
-Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer 设置 (如果有)"
-Basic.Settings.Output.Adv.FFmpeg.GOPSize="关键帧间隔 (帧)"
-Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="显示所有编解码器 (即使可能不兼容)"
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="音频编码器设置(如果有)"
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="混流器设置(如果有)"
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="关键帧间隔(帧)"
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="显示所有编码器(即使可能不兼容)"
FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
-FilenameFormatting.TT="%CCYY 年, 4位\n%YY 年, 后两位 (00-99)\n%MM 月份 (01-12)\n%DD 日, 用0补充 (01-31)\n%hh 24小时制小时 (00-23)\n%mm 分钟 (00-59)\n%ss 秒 (00-61)\n%% A % sign\n%a 缩写工作日名称\n%A 完整工作日名称\n%b 缩写月份名称\n%B 完整月份名称\n%d 日, 用0补充 (01-31)\n%H 24小时制小时 (00-23)\n%I 12小时制小时 (01-12)\n%m 月份 (01-12)\n%M 分支 (00-59)\n%p AM 或 PM\n%S 秒 (00-61)\n%y 年, 后两位 (00-99)\n%Y 年\n%z ISO 8601 offset from UTC 或者 时区\n 名称或缩写\n%Z 时区名称或缩写\n"
+FilenameFormatting.TT="%CCYY 年,4位\n%YY 年,后两位(00-99)\n%MM 月份(01-12)\n%DD 日,用0补全(01-31)\n%hh 24小时制小时(00-23)\n%mm 分钟(00-59)\n%ss 秒(00-61)\n%% 一个“%”符号\n%a 缩写工作日名称\n%A 完整工作日名称\n%b 缩写月份名称\n%B 完整月份名称\n%d 日,用0补全(01-31)\n%H 24小时制小时(00-23)\n%I 12小时制小时(01-12)\n%m 月份(01-12)\n%M 分钟(00-59)\n%p AM 或 PM\n%S 秒(00-61)\n%y 年,后两位(00-99)\n%Y 年\n%z 与UTC的时差(ISO 8601 格式)\n%Z 时区名称或缩写\n"
Basic.Settings.Video="视频"
Basic.Settings.Video.Adapter="视频适配器"
-Basic.Settings.Video.BaseResolution="基础 (Canvas) 分辨率"
+Basic.Settings.Video.BaseResolution="基础(画布)分辨率"
Basic.Settings.Video.ScaledResolution="输出 (缩放) 分辨率"
-Basic.Settings.Video.DownscaleFilter="缩放过滤器"
+Basic.Settings.Video.DownscaleFilter="缩小方法"
Basic.Settings.Video.DisableAeroWindows="禁用 Aero (仅限 Windows)"
-Basic.Settings.Video.FPS="每秒帧数"
-Basic.Settings.Video.FPSCommon="常见的 FPS 值"
-Basic.Settings.Video.FPSInteger="整数 FPS 值"
-Basic.Settings.Video.FPSFraction="分数帧率值"
+Basic.Settings.Video.FPS="FPS(每秒帧数)"
+Basic.Settings.Video.FPSCommon="常用 FPS 值(帧率)"
+Basic.Settings.Video.FPSInteger="整数 FPS 值(帧率)"
+Basic.Settings.Video.FPSFraction="分数 FPS 值(帧率)"
Basic.Settings.Video.Numerator="分子:"
Basic.Settings.Video.Denominator="分母:"
Basic.Settings.Video.Renderer="渲染器:"
-Basic.Settings.Video.InvalidResolution="无效的分辨率值。必须是 [宽]x[高] (如 1920 x 1080)"
+Basic.Settings.Video.InvalidResolution="无效的分辨率值。必须是 [宽]x[高](如 1920x1080)"
Basic.Settings.Video.CurrentlyActive="视频输出处于活动状态。请关闭任何输出以更改视频设置。"
-Basic.Settings.Video.DisableAero="禁用Aero"
+Basic.Settings.Video.DisableAero="禁用 Aero"
Basic.Settings.Video.DownscaleFilter.Bilinear="双直线法(最快, 但如果缩放会模糊)"
Basic.Settings.Video.DownscaleFilter.Bicubic="两次立方(削尖缩放, 16 个样本)"
Basic.Settings.Audio="音频"
Basic.Settings.Audio.SampleRate="采样率"
Basic.Settings.Audio.Channels="声道"
-Basic.Settings.Audio.MeterDecayRate="音频表衰减率"
+Basic.Settings.Audio.Meters="电平表"
+Basic.Settings.Audio.MeterDecayRate="衰减速率"
Basic.Settings.Audio.MeterDecayRate.Fast="快速"
Basic.Settings.Audio.MeterDecayRate.Medium="中速(峰值电平表I型)"
Basic.Settings.Audio.MeterDecayRate.Slow="慢速(峰值电平表II型)"
Basic.Settings.Audio.PeakMeterType.SamplePeak="采样峰值"
Basic.Settings.Audio.PeakMeterType.TruePeak="真峰值 (更高的的 CPU 使用率)"
Basic.Settings.Audio.MultiChannelWarning.Enabled="警告: 已启用环绕声音频。"
-Basic.Settings.Audio.MultichannelWarning="如果是串流,请检查你的串流服务是否支持环绕立体声的接收与播放。Twitch,Facebook 360 Live,Mixer RTMP,Smashcast 皆完全支持环绕立体声。虽然 Facebook Live 和 Youtube Live 都支持对环绕立体声的接收,但是 Facebook Live 将把声音混音成立体声,而 Youtube Live 则只播放两个声道。\n\n虽然无法保证对 VST 插件的支持,但 OBS 的音频过滤器与环绕立体声兼容。"
+Basic.Settings.Audio.MultichannelWarning="如果是串流,请检查你的串流服务是否支持环绕立体声的接收与播放。Twitch、Facebook 360 Live、Mixer RTMP、Smashcast 皆完全支持环绕立体声。虽然 Facebook Live 和 YouTube Live 都支持对环绕立体声的接收,但是 Facebook Live 将把声音混音成立体声,而 YouTube Live 则只播放两个声道。\n\n虽然无法保证 VST 插件对其的支持,但 OBS 的音频滤镜与环绕立体声兼容。"
Basic.Settings.Audio.MultichannelWarning.Title="是否启用环绕立体声?"
Basic.Settings.Audio.MultichannelWarning.Confirm="确实要启用环绕立体声吗?"
-Basic.Settings.Audio.DesktopDevice="桌面音频设备"
-Basic.Settings.Audio.DesktopDevice2="桌面音频设备 2"
-Basic.Settings.Audio.AuxDevice="麦克风/辅助音频设备"
-Basic.Settings.Audio.AuxDevice2="麦克风/辅助音频设备 2"
-Basic.Settings.Audio.AuxDevice3="麦克风/辅助音频设备 3"
-Basic.Settings.Audio.AuxDevice4="麦克风/辅助音频设备 4"
+Basic.Settings.Audio.Devices="设备"
+Basic.Settings.Audio.DesktopDevice="桌面音频"
+Basic.Settings.Audio.DesktopDevice2="桌面音频 2"
+Basic.Settings.Audio.AuxDevice="麦克风/辅助音频"
+Basic.Settings.Audio.AuxDevice2="麦克风/辅助音频 2"
+Basic.Settings.Audio.AuxDevice3="麦克风/辅助音频 3"
+Basic.Settings.Audio.AuxDevice4="麦克风/辅助音频 4"
Basic.Settings.Audio.EnablePushToMute="启用按住静音"
Basic.Settings.Audio.PushToMuteDelay="按住静音延迟"
Basic.Settings.Audio.EnablePushToTalk="启动按住讲话"
Basic.Settings.Advanced.General.ProcessPriority.Normal="常规"
Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="低于正常"
Basic.Settings.Advanced.General.ProcessPriority.Idle="空闲"
-Basic.Settings.Advanced.FormatWarning="警告: NV12 之外的颜色格式主要用于录像, 并不推荐在流式传输时使用. 流可能导致更多的 CPU 使用率, 因为需要颜色格式转换."
+Basic.Settings.Advanced.FormatWarning="警告:NV12 之外的色彩格式主要用于录像,并不推荐在串流时使用。因为串流时需要进行色彩格式转换,可能会导致 CPU 使用率增加。"
Basic.Settings.Advanced.Audio.BufferingTime="音频缓冲时间"
Basic.Settings.Advanced.Video.ColorFormat="颜色格式"
-Basic.Settings.Advanced.Video.ColorSpace="YUV 颜色空间"
-Basic.Settings.Advanced.Video.ColorRange="YUV 颜色范围"
+Basic.Settings.Advanced.Video.ColorSpace="色彩空间"
+Basic.Settings.Advanced.Video.ColorRange="色彩范围"
Basic.Settings.Advanced.Video.ColorRange.Partial="局部"
Basic.Settings.Advanced.Video.ColorRange.Full="全部"
Basic.Settings.Advanced.Audio.MonitoringDevice="监听设备"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="默认"
-Basic.Settings.Advanced.Audio.DisableAudioDucking="禁用 Windows 音频闪避"
+Basic.Settings.Advanced.Audio.DisableAudioDucking="禁用 Windows 音频闪避(检测到通信活动时降低其他声音的音量)"
Basic.Settings.Advanced.StreamDelay="串流延迟"
-Basic.Settings.Advanced.StreamDelay.Duration="持续时间 (秒)"
+Basic.Settings.Advanced.StreamDelay.Duration="延迟时间(秒)"
Basic.Settings.Advanced.StreamDelay.Preserve="重新连接时保持截止点 (增加延迟)"
-Basic.Settings.Advanced.StreamDelay.MemoryUsage="估计的内存使用率: %1 MB"
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="估计内存使用量:%1 MB"
Basic.Settings.Advanced.Network="网络"
-Basic.Settings.Advanced.Network.BindToIP="绑定 IP"
+Basic.Settings.Advanced.Network.BindToIP="绑定到 IP"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="启用新的网络代码"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="低延迟模式"
Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="当主窗口获得焦点时禁用热键"
Basic.AdvAudio="高级音频属性"
Basic.AdvAudio.Name="名称"
-Basic.AdvAudio.Volume="音量 (%)"
-Basic.AdvAudio.Mono="下降混合为单声道"
+Basic.AdvAudio.Volume="音量"
+Basic.AdvAudio.Mono="混缩为单声道"
Basic.AdvAudio.Balance="平衡"
Basic.AdvAudio.SyncOffset="同步偏移 (毫秒)"
Basic.AdvAudio.Monitoring="音频监听"
Basic.AdvAudio.AudioTracks="轨道"
Basic.Settings.Hotkeys="热键"
-Basic.Settings.Hotkeys.Pair="作为切换的键组合与 '%1' 共享"
+Basic.Settings.Hotkeys.Pair="当按键组合与“%1”相同时,作为切换开关使用"
Basic.Settings.Hotkeys.Filter="筛选"
Basic.Hotkeys.SelectScene="切换到场景"
Basic.SystemTray.Show="显示"
Basic.SystemTray.Hide="隐藏"
-Basic.SystemTray.Message.Reconnecting="已断开连接。 重新连接..."
-
-Hotkeys.Insert="插入"
-Hotkeys.Delete="删除"
-Hotkeys.Home="首页"
-Hotkeys.End="结束"
-Hotkeys.PageUp="上一页"
-Hotkeys.PageDown="下一页"
-Hotkeys.NumLock="Num Lock 键"
-Hotkeys.ScrollLock="滚动锁定"
-Hotkeys.CapsLock="大写锁定"
-Hotkeys.Backspace="退格键"
-Hotkeys.Tab="选项卡"
-Hotkeys.Print="打印"
-Hotkeys.Pause="暂停"
+Basic.SystemTray.Message.Reconnecting="已断开连接。 正在重新连接…"
+
+Hotkeys.Insert="Insert"
+Hotkeys.Delete="Delete"
+Hotkeys.Home="Home"
+Hotkeys.End="End"
+Hotkeys.PageUp="Page Up"
+Hotkeys.PageDown="Page Down"
+Hotkeys.NumLock="Num Lock"
+Hotkeys.ScrollLock="Scroll Lock"
+Hotkeys.CapsLock="Caps Lock"
+Hotkeys.Backspace="Backspace"
+Hotkeys.Tab="Tab"
+Hotkeys.Print="Print"
+Hotkeys.Pause="Pause"
Hotkeys.Left="左"
Hotkeys.Right="右"
Hotkeys.Up="上"
Hotkeys.Down="下"
-Hotkeys.Windows="窗口"
-Hotkeys.Super="超级"
-Hotkeys.Menu="菜单"
+Hotkeys.Windows="Windows"
+Hotkeys.Super="Super"
+Hotkeys.Menu="Menu"
Hotkeys.Space="空格"
-Hotkeys.NumpadNum="数字键 %1"
-Hotkeys.NumpadMultiply="数字键 乘"
-Hotkeys.NumpadDivide="数字键 除"
-Hotkeys.NumpadAdd="数字键 加"
-Hotkeys.NumpadSubtract="数字键 减"
-Hotkeys.NumpadDecimal="数字键 十进制"
+Hotkeys.NumpadNum="小键盘 %1"
+Hotkeys.NumpadMultiply="小键盘 乘"
+Hotkeys.NumpadDivide="小键盘 除"
+Hotkeys.NumpadAdd="小键盘 加"
+Hotkeys.NumpadSubtract="小键盘 减"
+Hotkeys.NumpadDecimal="小键盘 点"
Hotkeys.AppleKeypadNum="%1 (键盘)"
Hotkeys.AppleKeypadMultiply="* (键盘)"
Hotkeys.AppleKeypadDivide="/ (键盘)"
Hotkeys.AppleKeypadDecimal=".(键盘)"
Hotkeys.AppleKeypadEqual="= (键盘)"
Hotkeys.MouseButton="鼠标 %1"
+Hotkeys.Escape="Esc"
Mute="静音"
Unmute="取消静音"
Push-to-mute="按住静音"
Push-to-talk="按住讲话"
-SceneItemShow="显示 '%1'"
-SceneItemHide="隐藏 '%1'"
+SceneItemShow="显示“%1”"
+SceneItemHide="隐藏“%1”"
OutputWarnings.NoTracksSelected="您必须选择至少一个轨道"
OutputWarnings.MultiTrackRecording="警告: 某些格式 (如 FLV) 不支持每个录像多个轨道"
-OutputWarnings.MP4Recording="警告:如果文件无法完成(例如,由于蓝屏BSOD,掉电等),保存到 MP4/MOV 的记录将无法恢复。如果要录制多个音轨,请考虑使用 MKV 并在完成后将录制重新录制到 MP4/MOV(文件→混流录制)"
+OutputWarnings.MP4Recording="警告:如果文件无法完成(例如,由于蓝屏BSOD,掉电等),保存到 MP4/MOV 的记录将无法恢复。如果要录制多个音轨,请考虑使用 MKV 录制,并在完成后将录像重新封装为 MP4/MOV(文件→录像转封装)"
FinalScene.Title="删除场景"
FinalScene.Text="至少要有一个场景."
NoSources.Title="无来源"
-NoSources.Text="看起来您未添加任何视频源,所以我们将只会输出黑色萤幕。确实要这样做吗?"
+NoSources.Text="看起来您未添加任何视频源,所以我们将只会输出黑色画面。确实要这样做吗?"
NoSources.Text.AddSource="您可以通过单击主窗口中“来源”框下的“+”图标以添加来源。"
+NoSources.Label="您还没有添加任何源。\n点击下面的 + 按钮,\n或者右击此处添加一个。"
ChangeBG="设置颜色"
CustomColor="自定义颜色"
BrowserSource.EnableHardwareAcceleration="启用浏览器源硬件加速"
About="关于"
-About.Info="OBS Studio是一个免费、开放源码的视频录制与直播软件。"
+About.Info="OBS Studio是一个自由、开源的视频录制与直播软件。"
About.Donate="做出贡献"
About.GetInvolved="参与贡献"
About.Authors="作者"
About.License="许可"
-About.Contribute="支持OBS项目"
+About.Contribute="支持 OBS 项目"
-ResizeOutputSizeOfSource="调整输出 (源大小)"
+ResizeOutputSizeOfSource="调整输出大小(到源大小)"
ResizeOutputSizeOfSource.Text="基准与输出分辨率将调整为当前源大小。"
ResizeOutputSizeOfSource.Continue="您是否想要继续?"
+PreviewTransition="预览转场"
+
obs-studio-23.1.0.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/UI/data/locale/zh-TW.ini
Changed
VerticalLayout="垂直排版"
Group="群組"
DoNotShowAgain="不再顯示"
+Default="(預設)"
+Calculating="正在計算……"
AlreadyRunning.Title="OBS 已在執行中"
AlreadyRunning.Text="OBS 已在執行中!除非這是您的意圖,請在執行新的 OBS 前關閉現存的 OBS 。如果有設定 OBS 最小化到系統工具列,請確認是否仍在該處執行。"
Auth.StreamInfo="實況資訊"
TwitchAuth.Stats="Twitch狀態"
TwitchAuth.Feed="Twitch 活動摘要"
+TwitchAuth.TwoFactorFail.Title="無法查詢串流金鑰"
+TwitchAuth.TwoFactorFail.Text="OBS 無法連線至您的 Twitch 帳號。請確保您已經在 <a href='https://www.twitch.tv/settings/security'>Twitch 安全性設定</a> 中設定串流所需的兩步驟驗證。"
Copy.Filters="複製過濾器"
Paste.Filters="貼上篩選器"
Basic.Stats.DroppedFrames="丟棄的訊框 (網路)"
Basic.Stats.MegabytesSent="總輸出資料"
Basic.Stats.Bitrate="位元率"
+Basic.Stats.DiskFullIn="(估計)硬碟空間用盡前剩餘錄影時長"
ResetUIWarning.Title="確定要重置介面嗎?"
ResetUIWarning.Text="重設介面將隱藏額外的停駐視窗。若想重新顯示這些停駐視窗,則需要進入「檢視」選單解除隱藏。\n\n是否重設介面?"
Updater.NoUpdatesAvailable.Text="沒有更新"
Updater.FailedToLaunch="啟動更新程式失敗"
Updater.GameCaptureActive.Title="遊戲擷取使用中"
-Updater.GameCaptureActive.Text="遊戲擷取函式庫正在使用中。 請關閉所有被擷取的遊戲/程式 (或重新開機 windows),然後重試。"
+Updater.GameCaptureActive.Text="遊戲擷取函式庫正在使用中。 請關閉所有被擷取的遊戲/程式 (或重新開機 Windows),然後重試。"
QuickTransitions.SwapScenes="轉場後交換預覽/輸出場景"
QuickTransitions.SwapScenesTT="(如果輸出的原始場景仍然存在) 轉場後交換預覽和輸出場景。\n這並不會復原任何對輸出原始場景所作的改動。"
Output.StartReplayFailed="無法啟動重播緩衝區"
Output.StartFailedGeneric="啟動輸出失敗。 詳情請看 Log 檔。\n\n注意︰ 如果你使用 NVENC 或 AMD 編碼器,請確保您的視頻驅動程式是最新。"
+
Output.ConnectFail.Title="連線失敗"
Output.ConnectFail.BadPath="無效的路徑或 URL。 請確認您的設定是正確的。"
Output.ConnectFail.ConnectFailed="與伺服器連線失敗。"
Output.ConnectFail.Error="發生無法預期的連線錯誤。 參見 Log 檔以便獲取更多資訊。"
Output.ConnectFail.Disconnected="與伺服器連線中斷。"
+Output.StreamEncodeError.Title="編碼錯誤"
+Output.StreamEncodeError.Msg="直播時編碼器發生錯誤。"
+
Output.RecordFail.Title="無法開始錄影"
Output.RecordFail.Unsupported="輸出格式不被支援或不支援超過一個音軌。請確認你的設定後再試一次。"
Output.RecordNoSpace.Title="硬碟空間不足"
Output.RecordNoSpace.Msg="沒有足夠的空間存放錄製影片"
Output.RecordError.Title="錄製錯誤"
Output.RecordError.Msg="在錄製時發生了預料外的錯誤。"
+Output.RecordError.EncodeErrorMsg="錄影時編碼器發生錯誤。"
Output.ReplayBuffer.NoHotkey.Title="沒有設定熱鍵 !"
Output.ReplayBuffer.NoHotkey.Msg="沒有為重播緩衝設定儲存重播熱鍵。請設定\"儲存重播\"熱鍵以保存重播。"
Remux.HelpText="將檔案拖曳到此視窗中進行 Remux,或是選擇一個空白的「OBS 錄製」元件來瀏覽檔案。"
UpdateAvailable="現有新版本更新"
-UpdateAvailable.Text="版本 %1.%2.%3 已釋出。 <a href='%4'>請點此下載</a>"
+UpdateAvailable.Text="版本 %1.%2.%3 已釋出。 <a href='%4'>請點此下載</a>"
Basic.DesktopDevice1="輸出音效 1"
Basic.DesktopDevice2="輸出音效 2"
Basic.Main.PreviewConextMenu.Enable="啟用預覽"
+Basic.Main.Preview.Disable="停用預覽"
+
ScaleFiltering="縮放濾鏡"
ScaleFiltering.Point="點"
ScaleFiltering.Bilinear="雙線性插值"
Basic.MainMenu.Edit.Transform.FitToScreen="縮放到螢幕大小,不改變比例 (&F)"
Basic.MainMenu.Edit.Transform.StretchToScreen="拉伸到螢幕大小 (&S)"
Basic.MainMenu.Edit.Transform.CenterToScreen="置中畫面 (&C)"
+Basic.MainMenu.Edit.Transform.VerticalCenter="垂直置中"
+Basic.MainMenu.Edit.Transform.HorizontalCenter="水平置中"
Basic.MainMenu.Edit.Order="排序 (&O)"
Basic.MainMenu.Edit.Order.MoveUp="向上移動 (&U)"
Basic.MainMenu.Edit.Order.MoveDown="向下移動 (&D)"
Basic.MainMenu.View="檢視(&V)"
Basic.MainMenu.View.Toolbars="工具列(&T)"
-Basic.MainMenu.View.Docks="固定"
+Basic.MainMenu.View.Docks="停駐視窗"
Basic.MainMenu.View.Docks.ResetUI="重設使用者介面"
Basic.MainMenu.View.Docks.LockUI="鎖定使用者介面"
Basic.MainMenu.View.Toolbars.Listboxes="列表控制項(&L)"
Basic.Settings.Audio="音效"
Basic.Settings.Audio.SampleRate="取樣頻率"
Basic.Settings.Audio.Channels="通道數"
-Basic.Settings.Audio.MeterDecayRate="音量計衰減速率"
+Basic.Settings.Audio.Meters="計量器"
+Basic.Settings.Audio.MeterDecayRate="衰變率"
Basic.Settings.Audio.MeterDecayRate.Fast="快速"
Basic.Settings.Audio.MeterDecayRate.Medium="中 (Type I PPM)"
Basic.Settings.Audio.MeterDecayRate.Slow="慢 (Type II PPM)"
Basic.Settings.Audio.MultichannelWarning="如果是流媒體,請檢查您的流媒體服務是否同時支持環繞聲攝取和環繞聲播放。 Twitch,Facebook 360 Live,Mixer RTMP,Smashcast都是完全支持環繞聲的例子。 儘管Facebook Live和YouTube Live都接受環繞聲攝取,但是Facebook Live會混音為立體聲,而YouTube Live只播放兩個聲道。\n\n 儘管不支持VST插件,但OBS音頻濾波器與環繞聲兼容。"
Basic.Settings.Audio.MultichannelWarning.Title="是否啟用環繞聲音訊?"
Basic.Settings.Audio.MultichannelWarning.Confirm="確實要啟用環繞聲音訊嗎?"
-Basic.Settings.Audio.DesktopDevice="輸出音效 1"
-Basic.Settings.Audio.DesktopDevice2="輸出音效 2"
-Basic.Settings.Audio.AuxDevice="麥克風/輸入音效 1"
-Basic.Settings.Audio.AuxDevice2="麥克風/輸入音效 2"
-Basic.Settings.Audio.AuxDevice3="麥克風/輸入音效 3"
-Basic.Settings.Audio.AuxDevice4="麥克風/輔助音效裝置 4"
+Basic.Settings.Audio.Devices="裝置"
+Basic.Settings.Audio.DesktopDevice="桌面音效"
+Basic.Settings.Audio.DesktopDevice2="桌面音效 2"
+Basic.Settings.Audio.AuxDevice="麥克風 / 輔助音效"
+Basic.Settings.Audio.AuxDevice2="麥克風 / 輔助音效 2"
+Basic.Settings.Audio.AuxDevice3="麥克風 / 輔助音效 3"
+Basic.Settings.Audio.AuxDevice4="麥克風 / 輔助音效 4"
Basic.Settings.Audio.EnablePushToMute="啟用 按壓時靜音"
Basic.Settings.Audio.PushToMuteDelay="按壓時靜音 延遲"
Basic.Settings.Audio.EnablePushToTalk="啟用 按壓時說話"
Basic.Settings.Advanced.FormatWarning="警告: NV12以外的色彩格式主要用於錄影,並不推薦在串流時使用。串流時可能會因需要轉換色彩格式而增加CPU使用率。"
Basic.Settings.Advanced.Audio.BufferingTime="音訊緩衝時間"
Basic.Settings.Advanced.Video.ColorFormat="色彩格式"
-Basic.Settings.Advanced.Video.ColorSpace="YUV 色彩空間"
-Basic.Settings.Advanced.Video.ColorRange="YUV 顏色範圍"
+Basic.Settings.Advanced.Video.ColorSpace="色彩空間"
+Basic.Settings.Advanced.Video.ColorRange="顏色範圍"
Basic.Settings.Advanced.Video.ColorRange.Partial="部份"
Basic.Settings.Advanced.Video.ColorRange.Full="完整"
-Basic.Settings.Advanced.Audio.MonitoringDevice="音訊監測設備"
+Basic.Settings.Advanced.Audio.MonitoringDevice="監測裝置"
Basic.Settings.Advanced.Audio.MonitoringDevice.Default="預設裝置"
Basic.Settings.Advanced.Audio.DisableAudioDucking="停用 Windows 雙層次音量自動調整"
Basic.Settings.Advanced.StreamDelay="實況延遲"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="低延遲模式"
Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="當主視窗處於焦點,則停用熱鍵"
Basic.Settings.Advanced.AutoRemux="自動 remux 到 mp4"
-Basic.Settings.Advanced.AutoRemux.MP4="(以 mkv 格式錄製)"
+Basic.Settings.Advanced.AutoRemux.MP4="(錄成 mkv 格式)"
Basic.AdvAudio="進階音訊屬性"
Basic.AdvAudio.Name="名稱"
-Basic.AdvAudio.Volume="音量(%)"
+Basic.AdvAudio.Volume="音量"
Basic.AdvAudio.Mono="混降為單聲道"
Basic.AdvAudio.Balance="聲道平衡"
Basic.AdvAudio.SyncOffset="同步位移(ms)"
Hotkeys.AppleKeypadDecimal=". (九宮鍵)"
Hotkeys.AppleKeypadEqual="+ (九宮鍵)"
Hotkeys.MouseButton="滑鼠 %1"
+Hotkeys.Escape="Esc 鍵"
Mute="靜音"
Unmute="取消靜音"
NoSources.Title="沒有來源"
NoSources.Text="看起來您尚未增加任何視訊來源,所以我們只會輸出黑畫面。確定?"
NoSources.Text.AddSource="您可以透過點一下主視窗「來源」框底下的 + 按鈕,隨時增加來源。"
+NoSources.Label="您未設定任何來源。\n按下方 + 鍵,\n或在此按下右鍵新增一個來源。"
ChangeBG="設定顏色"
CustomColor="自訂顏色"
ResizeOutputSizeOfSource.Text="來源和輸出解析度將會縮放到目前來源的大小。"
ResizeOutputSizeOfSource.Continue="是否繼續?"
+PreviewTransition="預覽轉場"
+
obs-studio-23.1.0.tar.xz/UI/data/themes/Acri.qss -> obs-studio-23.2.0.tar.xz/UI/data/themes/Acri.qss
Changed
}
* [themeID="addIconSmall"] {
- qproperty-icon: url(./Acri/plus.png);
+ qproperty-icon: url(./Dark/plus.svg);
}
* [themeID="removeIconSmall"] {
- qproperty-icon: url(./Acri/minus.png);
+ qproperty-icon: url(./Dark/minus.svg);
}
* [themeID="propertiesIconSmall"] {
- qproperty-icon: url(./Acri/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="configIconSmall"] {
- qproperty-icon: url(./Acri/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="upArrowIconSmall"] {
- qproperty-icon: url(./Acri/up_arrow.png);
+ qproperty-icon: url(./Dark/up.svg);
}
* [themeID="downArrowIconSmall"] {
- qproperty-icon: url(./Acri/down_arrow.png);
+ qproperty-icon: url(./Dark/down.svg);
}
/* Tab Widget */
QComboBox::down-arrow {
qproperty-alignment: AlignTop;
- image: url(./Acri/updown.png);
+ image: url(./Dark/updown.svg);
width: 100%;
}
QComboBox::down-arrow:editable {
qproperty-alignment: AlignTop;
- image: url(./Acri/down_arrow.png);
+ image: url(./Dark/down.svg);
width: 8%;
}
}
QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
- image: url(./Acri/up_arrow.png);
+ image: url(./Dark/up.svg);
width: 100%;
}
QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
- image: url(./Acri/down_arrow.png);
+ image: url(./Dark/down.svg);
width: 100%;
}
}
MuteCheckBox::indicator:checked {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:unchecked {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:unchecked:hover {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:unchecked:focus {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:checked:hover {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:checked:focus {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:checked:disabled {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:unchecked:disabled {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
OBSHotkeyLabel[hotkeyPairHover=true] {
SourceTreeSubItemCheckBox::indicator:checked,
SourceTreeSubItemCheckBox::indicator:checked:hover {
- image: url(./Dark/expand.png);
+ image: url(./Dark/expand.svg);
}
SourceTreeSubItemCheckBox::indicator:unchecked,
SourceTreeSubItemCheckBox::indicator:unchecked:hover {
- image: url(./Dark/collapse.png);
+ image: url(./Dark/down.svg);
}
/* Preview background color */
-* [themeID="displayBackgroundColor"] {
- qproperty-displayBackgroundColor: #28282A;
+OBSQTDisplay {
+ qproperty-displayBackgroundColor: #28282A;
}
/* Preview/Program labels */
qproperty-hotkeysIcon: url(./Dark/settings/hotkeys.svg);
qproperty-advancedIcon: url(./Dark/settings/advanced.svg);
}
+
+OBSBasicSettings QListWidget::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+/* Locked CheckBox */
+
+LockedCheckBox {
+ outline: none;
+ background: transparent;
+ padding: 0px;
+}
+
+LockedCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+LockedCheckBox::indicator:checked {
+ image: url(./Dark/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked {
+ image: url(:res/images/unlocked.svg);
+}
+
+LockedCheckBox::indicator:checked:hover {
+ image: url(./Dark/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked:hover {
+ image: url(:res/images/unlocked.svg);
+}
+
+/* Visibilty CheckBox */
+
+VisibilityCheckBox {
+ outline: none;
+ background: transparent;
+ padding: 0px;
+}
+
+VisibilityCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+VisibilityCheckBox::indicator:checked {
+ image: url(./Dark/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked {
+ image: url(:res/images/invisible.svg);
+}
+
+VisibilityCheckBox::indicator:checked:hover {
+ image: url(./Dark/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked:hover {
+ image: url(:res/images/invisible.svg);
+}
+
+* [themeID="trashIcon"] {
+ qproperty-icon: url(./Dark/trash.svg);
+}
+
+* [themeID="revertIcon"] {
+ qproperty-icon: url(./Dark/revert.svg);
+}
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark.qss -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark.qss
Changed
background-color: rgb(58,57,58); /* dark */
}
-QListWidget::item:selected:!active {
+QListWidget::item:selected:!active,
+SourceTree::item:selected:!active {
color: rgb(255, 255, 255);
background-color: rgb(48,47,48);
}
-QListWidget QLineEdit {
+QListWidget QLineEdit,
+SourceTree QLineEdit {
padding-top: 0px;
padding-bottom: 0px;
padding-right: 0;
border-radius: none;
}
-
/* Dock Widget */
QDockWidget::title {
text-align: center;
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 rgb(86,85,86),
- stop: 0.1 rgb(82,81,82),
- stop: 0.5 rgb(78,77,78),
- stop: 0.9 rgb(74,73,74),
- stop: 1 rgb(70,69,70));
+ background-color: rgb(70,69,70);
}
QDockWidget::close-button, QDockWidget::float-button {
}
QScrollBar:vertical {
- background-color: rgb(58,57,58); /* dark */
+ background-color: rgb(58,57,58);
width: 14px;
margin: 0px;
}
QScrollBar::handle:vertical {
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0,
- stop: 0 rgb(122,121,122), /* light */
- stop: 0.25 rgb(100, 99, 100),
- stop: 1 rgb(88,87,88)); /* kindaDark */
+ background-color: rgb(76,76,76);
min-height: 20px;
margin: 2px;
border-radius: 5px;
border-width: 1px;
- border: 1px solid rgb(31,30,31); /* veryDark */
+ border: 1px solid rgb(76,76,76);
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
}
QScrollBar::handle:horizontal {
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 rgb(122,121,122), /* light */
- stop: 0.25 rgb(100, 99, 100),
- stop: 1 rgb(88,87,88)); /* kindaDark */
+ background-color: rgb(76,76,76);
min-width: 20px;
margin: 2px;
border-radius: 5px;
border-width: 1px;
- border: 1px solid rgb(31,30,31); /* veryDark */
+ border: 1px solid rgb(76,76,76);
}
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
}
* [themeID="addIconSmall"] {
- qproperty-icon: url(./Dark/plus.png);
+ qproperty-icon: url(./Dark/plus.svg);
}
* [themeID="removeIconSmall"] {
- qproperty-icon: url(./Dark/minus.png);
+ qproperty-icon: url(./Dark/minus.svg);
}
* [themeID="propertiesIconSmall"] {
- qproperty-icon: url(./Dark/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="configIconSmall"] {
- qproperty-icon: url(./Dark/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="refreshIconSmall"] {
- qproperty-icon: url(./Dark/refresh.png);
+ qproperty-icon: url(./Dark/refresh.svg);
}
* [themeID="upArrowIconSmall"] {
- qproperty-icon: url(./Dark/up_arrow.png);
+ qproperty-icon: url(./Dark/up.svg);
}
* [themeID="downArrowIconSmall"] {
- qproperty-icon: url(./Dark/down_arrow.png);
+ qproperty-icon: url(./Dark/down.svg);
}
}
QTabWidget::tab-bar {
- alignment: center;
+ alignment: left;
}
QTabBar::tab {
- background-color: rgb(88,87,88); /* kindaDark */
+ background-color: rgb(76,76,76);
border: none;
padding: 5px;
min-width: 50px;
QTabBar::tab:top {
border-bottom: 1px transparent;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
}
QTabBar::tab:bottom {
padding-top: 1px;
margin-bottom: 4px;
- border-bottom-left-radius: 5px;
- border-bottom-right-radius: 5px;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
height: 14px;
}
/* ComboBox */
QComboBox {
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 rgb(86,85,86),
- stop: 0.1 rgb(82,81,82),
- stop: 0.5 rgb(78,77,78),
- stop: 0.9 rgb(74,73,74),
- stop: 1 rgb(70,69,70));
+ background-color: rgb(76,76,76);
border-style: solid;
border: 1px;
border-radius: 3px;
- border-color: rgb(31,30,31); /* veryDark */
+ border-color: rgb(76,76,76); /* veryDark */
padding: 2px;
padding-left: 10px;
}
QComboBox:hover {
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 rgb(111, 110, 101),
- stop: 0.25 rgb(100, 99, 100),
- stop: 1 rgb(88,87,88));
+ background-color: rgb(88,87,88);
}
QComboBox::drop-down {
QComboBox::down-arrow {
qproperty-alignment: AlignTop;
- image: url(./Dark/updown.png);
+ image: url(./Dark/updown.svg);
width: 100%;
}
QComboBox::down-arrow:editable {
qproperty-alignment: AlignTop;
- image: url(./Dark/down_arrow.png);
+ image: url(./Dark/down.svg);
width: 8%;
}
padding: 2px 2px 3px 7px;
}
-OBSHotkeyWidget QLineEdit {
- margin: 0px 3px 0px 0px;
-}
-
-
/* Spinbox and doubleSpinbox */
QSpinBox, QDoubleSpinBox {
subcontrol-origin: margin;
subcontrol-position: top right; /* position at the top right corner */
- background-color: rgb(88,87,88); /* kindaDark */
+ background-color: rgb(76,76,76);
border: 1px solid rgb(31,30,31); /* veryDark */
border-radius: 3px;
border-width: 0;
QSpinBox::down-button, QDoubleSpinBox::down-button {
subcontrol-origin: margin;
subcontrol-position: bottom right; /* position at the top right corner */
- background-color: rgb(88,87,88); /* kindaDark */
+ background-color: rgb(76,76,76);
border: 1px solid rgb(31,30,31); /* veryDark */
border-radius: 3px;
border-width: 0;
}
QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
- image: url(./Dark/up_arrow.png);
+ image: url(./Dark/up.svg);
width: 100%;
}
QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
- image: url(./Dark/down_arrow.png);
+ image: url(./Dark/down.svg);
width: 100%;
}
QPushButton {
color: rgb(225,224,225); /* veryLight */
- background-color: rgb(88,87,88); /* kindaDark */
+ background-color: rgb(76,76,76);
border: none;
border-radius: 3px;
padding: 4px;
}
QPushButton::menu-indicator {
- image: url(./Dark/down_arrow.png);
+ image: url(./Dark/down.svg);
subcontrol-position: right;
subcontrol-origin: padding;
width: 25px;
}
-QPushButton[themeID="hotkeyButtons"] {
- margin: 1px 2px;
-}
-
/* Sliders */
QSlider::groove:horizontal {
- background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0,
- stop: 0 rgb(50, 49, 50), /* dark */
- stop: 0.75 rgb(88,87,88)); /* kindaDark */
+ background-color: rgb(76,76,76);
height: 4px;
border: none;
border-radius: 2px;
}
QSlider::handle:horizontal {
- background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 rgb(240,239,240), /* lighter */
- stop: 0.25 rgb(200,199,200),
- stop: 1 rgb(162,161,162)); /* light */
- border: 1px solid rgb(58,57,58); /* dark */
+ background-color: #d2d2d2;
+ border: 1px solid rgb(58,57,58);
border-radius: 3px;
height: 10px;
width: 18px;
}
QSlider::handle:horizontal:pressed {
- background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0,
- stop: 0 rgb(240,239,240), /* lighter */
- stop: 0.25 rgb(200,199,200),
- stop: 1 rgb(162,161,162)); /* light */
+ background-color: #d2d2d2;
}
QSlider::sub-page:horizontal {
}
QSlider::sub-page:horizontal:disabled {
- background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0,
- stop: 0 rgb(31,30,31), /* veryDark */
- stop: 0.75 rgb(50, 49, 50)); /* dark */
+ background-color: rgb(50, 49, 50); /* dark */
border-radius: 2px;
}
QSlider::groove:vertical {
- background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
- stop: 0 rgb(50, 49, 50), /* dark */
- stop: 0.75 rgb(88,87,88)); /* kindaDark */
+ background-color: rgb(76,76,76);
width: 4px;
border: none;
border-radius: 2px;
}
QSlider::handle:vertical {
- background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
- stop: 0 rgb(240,239,240), /* lighter */
- stop: 0.25 rgb(200,199,200),
- stop: 1 rgb(162,161,162)); /* light */
- border: 1px solid rgb(58,57,58); /* dark */
+ background-color: #d2d2d2;
+ border: 1px solid rgb(58,57,58);
border-radius: 3px;
width: 10px;
height: 18px;
}
QSlider::handle:vertical:pressed {
- background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
- stop: 0 rgb(240,239,240), /* lighter */
- stop: 0.25 rgb(200,199,200),
- stop: 1 rgb(162,161,162)); /* light */
+ background-color: #d2d2d2;
}
QSlider::add-page:vertical {
}
QSlider::add-page:vertical:disabled {
- background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
- stop: 0 rgb(31,30,31), /* veryDark */
- stop: 0.75 rgb(50, 49, 50)); /* dark */
+ background-color: rgb(50, 49, 50); /* dark */
border-radius: 2px;
}
}
MuteCheckBox::indicator:checked {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:unchecked {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
OBSHotkeyLabel[hotkeyPairHover=true] {
color: red;
}
-
/* Group Collapse Checkbox */
SourceTreeSubItemCheckBox {
}
SourceTreeSubItemCheckBox::indicator:checked {
- image: url(./Dark/expand.png);
+ image: url(./Dark/expand.svg);
}
SourceTreeSubItemCheckBox::indicator:unchecked {
- image: url(./Dark/collapse.png);
+ image: url(./Dark/down.svg);
}
/* Preview background color */
-* [themeID="displayBackgroundColor"] {
- qproperty-displayBackgroundColor: rgb(76, 76, 76);
+OBSQTDisplay {
+ qproperty-displayBackgroundColor: rgb(76, 76, 76);
}
/* Preview/Program labels */
qproperty-hotkeysIcon: url(./Dark/settings/hotkeys.svg);
qproperty-advancedIcon: url(./Dark/settings/advanced.svg);
}
+
+OBSBasicSettings QListWidget::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+/* Locked CheckBox */
+
+LockedCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+LockedCheckBox::indicator:checked {
+ image: url(./Dark/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked {
+ image: url(:res/images/unlocked.svg);
+}
+
+/* Visibilty CheckBox */
+
+VisibilityCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+VisibilityCheckBox::indicator:checked {
+ image: url(./Dark/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked {
+ image: url(:res/images/invisible.svg);
+}
+
+* [themeID="trashIcon"] {
+ qproperty-icon: url(./Dark/trash.svg);
+}
+
+* [themeID="revertIcon"] {
+ qproperty-icon: url(./Dark/revert.svg);
+}
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/down.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(1.7072 0 0 1.7538 -8.5187 -9.0369)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/expand.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(0 -1.7072 1.7538 0 -9.0782 32.495)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/locked.svg
Added
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16pt" height="16pt" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(82.352941%,82.352941%,82.352941%);fill-opacity:1;" d="M 8 1 C 5.800781 1 4 2.800781 4 5 L 4 7 L 2 7 L 2 15 L 14 15 L 14 7 L 12 7 L 12 5 C 12 2.800781 10.199219 1 8 1 Z M 8 3 C 9.121094 3 10 3.878906 10 5 L 10 7 L 6 7 L 6 5 C 6 3.878906 6.878906 3 8 3 Z M 8 3 "/>
+</g>
+</svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/minus.svg
Added
+<svg class="feather feather-plus" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><line x1="1.5187" x2="22.481" y1="12" y2="12" stroke-width="2.4473"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/mute.svg
Added
+<svg class="feather feather-volume-x" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19" fill="#d40000" stroke="#d40000" stroke-opacity="1"/><line x1="23" x2="17" y1="9" y2="15" stroke="#d40000" stroke-opacity="1"/><line x1="17" x2="23" y1="9" y2="15" fill="#d40000" stroke="#d40000" stroke-opacity="1"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/no_sources.svg
Added
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="125" height="40" viewBox="0 0 125 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+ <g transform="matrix(1.3524,0,0,1.3524,-40.8078,-17.9807)">
+ <g transform="matrix(0.0855581,0,0,0.0855581,29.3907,17.4063)">
+ <path d="M128,80L160,80L160,112L128,112L128,80ZM224,72L224,224C224,232.8 216.8,240 208,240L48,240C39.2,240 32,232.8 32,224L32,32C32,23.2 39.2,16 48,16L168,16L224,72ZM208,80L160,32L48,32L48,208L96,128L128,192L160,160L208,208L208,80Z" style="fill:#d2d2d2;"/>
+ </g>
+ <g transform="matrix(0.0859541,0,0,0.0859541,98.7496,17.3555)">
+ <path d="M240,48L112,48C112,39.2 104.8,32 96,32L32,32C23.2,32 16,39.2 16,48C7.2,48 0,55.2 0,64L0,208C0,216.8 7.2,224 16,224L240,224C248.8,224 256,216.8 256,208L256,64C256,55.2 248.8,48 240,48ZM96,80L32,80L32,64L96,64L96,80ZM168,192C136.96,192 112,167.04 112,136C112,104.96 136.96,80 168,80C199.04,80 224,104.96 224,136C224,167.04 199.04,192 168,192ZM208,136C208,158.08 189.92,176 168,176C146.08,176 128,157.92 128,136C128,114.08 146.08,96 168,96C189.92,96 208,114.08 208,136Z" style="fill:#d2d2d2;"/>
+ </g>
+ <g transform="matrix(0.0855581,0,0,0.0855581,75.3166,17.4063)">
+ <path d="M128,16C66.24,16 16,66.24 16,128C16,189.76 66.24,240 128,240C135.68,240 143.04,239.2 150.08,237.76C147.36,236.48 146.88,226.08 149.76,220.32C152.8,213.76 162.72,197.12 152.96,191.52C143.2,185.92 145.92,183.52 140,176.96C134.08,170.4 136.48,169.44 136,167.68C134.72,162.24 141.76,153.44 142.24,152.64C142.56,151.68 142.56,148.32 142.24,147.36C142.24,146.08 137.92,143.84 136.8,143.68C135.84,143.68 135.04,145.44 133.6,145.76C132.16,146.08 125.6,141.76 124.16,140.48C122.72,139.2 121.92,136.8 119.84,135.04C117.76,132.96 117.6,134.56 114.56,133.28C111.52,132 101.76,128.32 94.08,125.6C86.4,122.56 85.76,118.08 85.76,115.04C85.44,111.84 80.96,107.52 79.04,104.32C76.8,101.12 76.48,96.8 75.84,97.76C75.2,98.72 79.84,110.24 79.04,110.72C78.24,111.04 76.48,107.52 74.24,104.64C72,101.6 76.48,103.2 69.44,89.44C62.4,75.68 71.68,68.64 72.16,61.44C72.64,54.24 78.24,64.16 75.2,59.36C72.16,54.56 75.2,45.12 72.96,41.6C70.88,38.08 58.88,45.6 58.88,45.6C59.2,42.08 69.92,36.32 77.44,30.88C84.96,25.44 89.92,29.92 96,31.68C102.24,33.76 102.56,33.12 100.48,30.88C98.4,28.8 101.44,28.16 106.24,28.8C110.72,29.6 112.32,35.36 119.52,34.56C127.04,34.08 120.32,36 121.28,38.08C122.24,40.16 120.32,39.84 115.2,42.88C110.4,46.08 115.52,46.4 124,52.64C132.48,58.88 130.08,48.64 128.96,43.84C127.84,39.04 135.2,42.88 135.2,42.88C140.48,46.4 139.52,43.2 143.2,44.16C146.88,45.12 157.76,54.4 157.76,54.4C144.48,61.44 152.8,62.08 155.04,63.84C157.28,65.6 150.56,68.64 150.56,68.64C147.84,65.92 147.52,68.96 145.76,69.92C144,70.88 145.44,73.44 145.44,73.44C136.48,74.88 138.4,84.48 138.72,86.72C138.72,88.96 132.64,92.48 131.2,96C129.76,99.2 135.2,106.24 132.16,106.56C129.12,107.04 126.72,96 111.2,100C106.4,101.28 96.16,106.56 101.76,117.28C107.52,128.32 116.48,114.24 119.52,115.84C122.56,117.44 118.56,124.32 119.2,124.64C119.84,124.96 127.68,124.96 128.16,134.4C128.64,143.84 140.48,142.88 142.88,143.2C145.6,143.2 154.08,136.16 155.2,136C156.16,135.52 161.28,131.52 171.68,137.44C182.24,143.2 187.36,142.4 190.88,144.96C194.4,147.52 192.16,152.48 195.36,154.24C198.56,156 212.32,153.76 215.84,159.2C219.36,164.64 201.76,192.64 196.32,195.68C190.88,198.72 188.64,205.92 182.88,210.4C177.12,214.88 169.92,220.64 162.56,224.96C156,228.64 155.04,235.52 152,237.76C202.24,226.56 239.68,181.76 239.68,128.32C239.68,66.56 189.44,16.32 127.68,16.32L128,16ZM154.24,120.96C152.8,121.44 149.76,124.48 141.76,119.68C134.08,114.88 128.8,116 128,115.2C128,115.2 127.2,113.44 130.72,112.96C137.76,112.16 146.4,119.52 148.48,119.52C150.56,119.52 151.52,117.44 155.04,118.72C158.56,120 155.84,120.8 154.24,120.96ZM117.44,27.2C116.64,26.72 117.92,25.92 118.88,24.96C119.36,24.48 119.2,23.2 119.68,22.72C121.44,20.96 129.44,18.72 128,23.2C126.24,27.52 118.72,28 117.44,27.2ZM137.12,41.44C134.08,41.12 127.84,40.64 128.8,39.2C133.6,34.72 127.36,33.12 123.36,33.12C119.36,32.8 117.92,30.56 119.84,30.08C121.76,29.6 129.6,30.4 131.04,31.36C132.32,32.32 139.36,35.36 139.84,37.44C140.16,39.52 139.84,41.44 137.12,41.44ZM160.64,40.64C158.4,42.08 147.36,34.08 145.44,32.32C136.48,24.64 131.2,27.36 129.44,25.76C127.68,24.16 128.16,22.72 131.2,20.32C134.24,17.92 142.24,21.28 147.2,21.76C152,22.24 157.76,26.08 157.76,30.56C158.08,34.56 163.04,38.56 160.8,40.64L160.64,40.64Z" style="fill:#d2d2d2;"/>
+ </g>
+ <g transform="matrix(0.0914992,0,0,0.0914992,51.1921,15.9137)">
+ <path d="M240,32L16,32C7.2,32 0,39.2 0,48L0,192C0,200.8 7.2,208 16,208L101.44,208C97.44,217.76 87.68,230.24 64,240L192,240C168.32,230.24 158.56,217.76 154.56,208L240,208C248.8,208 256,200.8 256,192L256,48C256,39.2 248.8,32 240,32ZM240,176L16,176L16,48L240,48L240,176Z" style="fill:#d2d2d2;"/>
+ </g>
+ </g>
+</svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/plus.svg
Added
+<svg class="feather feather-plus" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><line x1="12" x2="12" y1="1.5187" y2="22.481" stroke-width="2.4473"/><line x1="1.5187" x2="22.481" y1="12" y2="12" stroke-width="2.4473"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/refresh.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#d2d2d2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-refresh-ccw"><polyline points="1 4 1 10 7 10"></polyline><polyline points="23 20 23 14 17 14"></polyline><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15"></path></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/revert.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#d2d2d2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rotate-ccw"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/advanced.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/advanced.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="white" d="M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#d2d2d2" d="M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z"/></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/audio.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/audio.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="white" d="M12 8.02c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 8.02zM7.72 2.28L4 6H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.81c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 8c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.971 5.971 0 0 0 14 8.02c0-1.65-.67-3.16-1.75-4.25z"/></svg>
\ No newline at end of file
+<svg class="feather feather-volume-2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19" fill="#d2d2d2" stroke="#d2d2d2"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07" stroke="#d2d2d2"/></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/general.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/general.svg
Changed
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 32 32"
- version="1.1"
- id="svg5"
- sodipodi:docname="general.svg"
- inkscape:version="0.92.3 (2405546, 2018-03-11)">
- <metadata
- id="metadata11">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs9" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1920"
- inkscape:window-height="998"
- id="namedview7"
- showgrid="false"
- inkscape:zoom="5.53125"
- inkscape:cx="21.333333"
- inkscape:cy="21.333333"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg5" />
- <g
- id="surface1"
- style="fill:#ffffff"
- transform="matrix(1,0,0,1.1456034,0,-2.3279489)">
- <path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="M 32,17.542969 V 14.339844 L 27.566406,13.058594 26.539062,10.878906 28.546875,7.203125 25.964844,4.941406 21.828125,6.761719 19.335938,5.859375 17.761719,2.019531 H 14.101562 L 12.664062,5.898438 10.125,6.796875 5.921875,5.042969 3.335938,7.296875 l 2.082031,3.625 -1.03125,2.179687 L 0,14.457031 v 3.183594 l 4.433594,1.28125 1.027344,2.179687 -2.007813,3.679688 2.582031,2.261719 4.136719,-1.824219 2.492187,0.902344 1.574219,3.835937 H 17.875 l 1.4375,-3.878906 2.539062,-0.898437 4.207032,1.761718 2.582031,-2.261718 -2.101563,-3.621094 1.074219,-2.179688 L 32,17.5 Z M 16,22 c -3.792969,0 -6.855469,-2.679688 -6.855469,-6 0,-3.320312 3.0625,-6 6.855469,-6 3.792969,0 6.855469,2.679688 6.855469,6 0,3.320312 -3.0625,6 -6.855469,6 z m 0,0"
- id="path2"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
+<svg width="16" height="16" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1 0 0 1.1456 0 -2.3279)" fill="#d2d2d2"><path d="m32 17.543v-3.2031l-4.4336-1.2812-1.0273-2.1797 2.0078-3.6758-2.582-2.2617-4.1367 1.8203-2.4922-0.90234-1.5742-3.8398h-3.6602l-1.4375 3.8789-2.5391 0.89844-4.2031-1.7539-2.5859 2.2539 2.082 3.625-1.0312 2.1797-4.3867 1.3555v3.1836l4.4336 1.2812 1.0273 2.1797-2.0078 3.6797 2.582 2.2617 4.1367-1.8242 2.4922 0.90234 1.5742 3.8359h3.6367l1.4375-3.8789 2.5391-0.89844 4.207 1.7617 2.582-2.2617-2.1016-3.6211 1.0742-2.1797 4.3867-1.3789zm-16 4.457c-3.793 0-6.8555-2.6797-6.8555-6s3.0625-6 6.8555-6 6.8555 2.6797 6.8555 6-3.0625 6-6.8555 6z" fill="#d2d2d2" fill-rule="evenodd"/></g></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/hotkeys.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/hotkeys.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="white" d="M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#d2d2d2" d="M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z"/></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/output.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/output.svg
Changed
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="100%" height="100%" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
- <path d="M12,15L4,15C5.48,14.39 6.09,13.61 6.34,13L1,13C0.45,13 0,12.55 0,12L0,3C0,2.45 0.45,2 1,2L15,2C15.55,2 16,2.45 16,3L16,4.191L15,4.191L15,3L1,3L1,11L15,11L15,9.752L16,9.752L16,12C16,12.55 15.55,13 15,13L9.66,13C9.91,13.61 10.52,14.39 12,15ZM11.981,10.35L11.981,7.849L5.965,7.849L5.965,6.182L11.981,6.182L11.981,3.681L15.992,7.015L11.981,10.35Z" style="fill:white;"/>
+<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+ <path d="M12,15L4,15C5.48,14.39 6.09,13.61 6.34,13L1,13C0.45,13 0,12.55 0,12L0,3C0,2.45 0.45,2 1,2L15,2C15.55,2 16,2.45 16,3L16,4.191L15,4.191L15,3L1,3L1,11L15,11L15,9.752L16,9.752L16,12C16,12.55 15.55,13 15,13L9.66,13C9.91,13.61 10.52,14.39 12,15ZM11.981,10.35L11.981,7.849L5.965,7.849L5.965,6.182L11.981,6.182L11.981,3.681L15.992,7.015L11.981,10.35Z" style="fill:#d2d2d2;"/>
</svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/stream.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/stream.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="white" d="M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#d2d2d2" d="M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Dark/settings/video.svg -> obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/settings/video.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="white" d="M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#d2d2d2" d="M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/trash.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#d2d2d2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/up.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(-1.7072 0 0 -1.7538 32.454 33.055)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/updown.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 8 16" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(.57465 0 0 .495 -2.8958 7.08)" points="6 9 12 15 18 9"/><polyline transform="matrix(-.57465 0 0 -.495 10.896 8.955)" points="6 9 12 15 18 9" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
obs-studio-23.2.0.tar.xz/UI/data/themes/Dark/visible.svg
Added
+<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#d2d2d2"><path d="m8.06 3c-5.06 0-8.06 5-8.06 5s3 5 8.06 5c4.94 0 7.94-5 7.94-5s-3-5-7.94-5zm-0.06 8.3333c-2.2 0-4-1.4833-4-3.3333 0-1.8333 1.8-3.3333 4-3.3333 2.22 0 4 1.5 4 3.3333 0 1.85-1.78 3.3333-4 3.3333zm2-3.3333c0 0.925-0.89 1.6667-2 1.6667s-2-0.74167-2-1.6667c0-0.925 0.89-1.6667 2-1.6667s2 0.74167 2 1.6667z" fill-rule="evenodd" stroke-width=".91287"/></svg>
obs-studio-23.1.0.tar.xz/UI/data/themes/Rachni.qss -> obs-studio-23.2.0.tar.xz/UI/data/themes/Rachni.qss
Changed
QGroupBox::title {
color: rgb(240, 98, 146); /* Pink (Secondary) */
left: 20px;
+ top: -7px;
padding-left: 5px;
padding-right: 4px;
- padding-top: -14px;
}
/*****************/
}
* [themeID="addIconSmall"] {
- qproperty-icon: url(./Dark/plus.png);
+ qproperty-icon: url(./Dark/plus.svg);
}
* [themeID="removeIconSmall"] {
- qproperty-icon: url(./Dark/minus.png);
+ qproperty-icon: url(./Dark/minus.svg);
}
* [themeID="propertiesIconSmall"] {
- qproperty-icon: url(./Dark/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="configIconSmall"] {
- qproperty-icon: url(./Dark/cogwheel.png);
+ qproperty-icon: url(./Dark/settings/general.svg);
}
* [themeID="refreshIconSmall"] {
- qproperty-icon: url(./Dark/refresh.png);
+ qproperty-icon: url(./Dark/refresh.svg);
}
* [themeID="upArrowIconSmall"] {
- qproperty-icon: url(./Dark/up_arrow.png);
+ qproperty-icon: url(./Dark/up.svg);
}
* [themeID="downArrowIconSmall"] {
- qproperty-icon: url(./Dark/down_arrow.png);
+ qproperty-icon: url(./Dark/down.svg);
}
/***********************/
}
MuteCheckBox::indicator:checked {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:unchecked {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:unchecked:hover {
background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:unchecked:focus {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
MuteCheckBox::indicator:checked:hover {
background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:checked:focus {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:checked:disabled {
- image: url(./Dark/mute.png);
+ image: url(./Dark/mute.svg);
}
MuteCheckBox::indicator:unchecked:disabled {
- image: url(./Dark/unmute.png);
+ image: url(./Dark/settings/audio.svg);
}
/****************************/
SourceTreeSubItemCheckBox::indicator:checked,
SourceTreeSubItemCheckBox::indicator:checked:hover {
- image: url(./Dark/expand.png);
+ image: url(./Dark/expand.svg);
}
SourceTreeSubItemCheckBox::indicator:unchecked,
SourceTreeSubItemCheckBox::indicator:unchecked:hover {
- image: url(./Dark/collapse.png);
+ image: url(./Dark/down.svg);
}
/*************************/
QPushButton[themeID="addIconSmall"],
QPushButton[themeID="removeIconSmall"],
QPushButton[themeID="configIconSmall"],
+QPushButton[themeID="trashIcon"],
+QPushButton[themeID="revertIcon"],
QPushButton#transitionRemove,
QPushButton#moveAsyncFilterUp,
QPushButton#moveAsyncFilterDown,
QPushButton:hover[themeID="addIconSmall"],
QPushButton:hover[themeID="removeIconSmall"],
QPushButton:hover[themeID="configIconSmall"],
+QPushButton:hover[themeID="trashIcon"],
+QPushButton:hover[themeID="revertIcon"],
QPushButton:hover#transitionRemove,
QPushButton:hover#moveAsyncFilterUp,
QPushButton:hover#moveAsyncFilterDown,
outline: none;
}
-/******************************/
-/* --- Hotkey Buttons --- */
-/******************************/
-/* Fix for the hotkey buttons */
-/* looking terrible with my */
-/* color choices. */
-/******************************/
-
-QPushButton[themeID="hotkeyButtons"] {
- background-color: rgb(58, 64, 69); /* Light Blue-gray */
- color: rgb(239, 240, 241); /* White */
- border-radius: 2px;
- border: none;
- margin: 4px;
- padding-top: 6px;
- padding-bottom: 6px;
-}
-
-QPushButton:hover[themeID="hotkeyButtons"] {
- background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
- border: 1px solid rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
-}
-
-QPushButton:pressed[themeID="hotkeyButtons"] {
- background-color: rgb(240, 98, 146); /* Pink (Secondary) */
- border: 1px solid rgb(240, 98, 146); /* Pink (Secondary) */
-}
-
-QPushButton:disabled[themeID="hotkeyButtons"] {
- background-color: rgb(58, 64, 69); /* Light Blue-gray */
- color: rgb(162, 161, 162); /* Lighter Gray */
-}
-
/******************/
/* --- Labels --- */
/******************/
/* Preview background color */
-* [themeID="displayBackgroundColor"] {
- qproperty-displayBackgroundColor: rgb(35, 38, 41);
+OBSQTDisplay {
+ qproperty-displayBackgroundColor: rgb(35, 38, 41);
}
/* Preview/Program labels */
qproperty-hotkeysIcon: url(./Dark/settings/hotkeys.svg);
qproperty-advancedIcon: url(./Dark/settings/advanced.svg);
}
+
+OBSBasicSettings QListWidget::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+/* Locked CheckBox */
+
+LockedCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+LockedCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+LockedCheckBox::indicator:checked {
+ image: url(./Dark/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked {
+ image: url(:res/images/unlocked.svg);
+}
+
+LockedCheckBox::indicator:checked:hover {
+ image: url(./Dark/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked:hover {
+ image: url(:res/images/unlocked.svg);
+}
+
+/* Visibilty CheckBox */
+
+VisibilityCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+VisibilityCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+VisibilityCheckBox::indicator:checked {
+ image: url(./Dark/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked {
+ image: url(:res/images/invisible.svg);
+}
+
+VisibilityCheckBox::indicator:checked:hover {
+ image: url(./Dark/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked:hover {
+ image: url(:res/images/invisible.svg);
+}
+
+* [themeID="trashIcon"] {
+ qproperty-icon: url(./Dark/trash.svg);
+}
+
+* [themeID="revertIcon"] {
+ qproperty-icon: url(./Dark/revert.svg);
+}
obs-studio-23.2.0.tar.xz/UI/data/themes/System.qss
Added
+/* Intentionnally left blank */
+/* Themes are created using Qt CSS, you can visit */
+/* http://doc.qt.io/qt-5/stylesheet-reference.html and */
+/* http://doc.qt.io/qt-5/stylesheet-examples.html for examples. */
+
+/* OBS will use the theme filename for the settings. */
+/* You can ship images using relative paths in qss. */
+/* Dark Theme is a good place to start if you need */
+/* a template. */
+
+
+/* We need to set back the icons, or the preview wont stick. */
+
+* [themeID="addIconSmall"] {
+ qproperty-icon: url(:/res/images/plus.svg);
+}
+
+* [themeID="removeIconSmall"] {
+ qproperty-icon: url(:/res/images/minus.svg);
+}
+
+* [themeID="propertiesIconSmall"] {
+ qproperty-icon: url(:/settings/images/settings/general.svg);
+}
+
+* [themeID="configIconSmall"] {
+ qproperty-icon: url(:/settings/images/settings/general.svg);
+}
+
+* [themeID="upArrowIconSmall"] {
+ qproperty-icon: url(:/res/images/up.svg);
+}
+
+* [themeID="refreshIconSmall"] {
+ qproperty-icon: url(:/res/images/refresh.svg);
+}
+
+* [themeID="downArrowIconSmall"] {
+ qproperty-icon: url(:/res/images/down.svg);
+}
+
+MuteCheckBox {
+ outline: none;
+}
+
+MuteCheckBox::indicator:checked {
+ image: url(:/res/images/mute.svg);
+}
+
+MuteCheckBox::indicator:unchecked {
+ image: url(:/settings/images/settings/audio.svg);
+}
+
+SourceTreeSubItemCheckBox {
+ background: transparent;
+ outline: none;
+}
+
+SourceTreeSubItemCheckBox::indicator {
+ width: 10px;
+ height: 10px;
+}
+
+SourceTreeSubItemCheckBox::indicator:checked {
+ image: url(:/res/images/expand.svg);
+}
+
+SourceTreeSubItemCheckBox::indicator:unchecked {
+ image: url(:/res/images/down.svg);
+}
+
+OBSHotkeyLabel[hotkeyPairHover=true] {
+ color: red;
+}
+
+
+/* Volume Control */
+
+VolumeMeter {
+ qproperty-backgroundNominalColor: rgb(15, 100, 15);
+ qproperty-backgroundWarningColor: rgb(100, 100, 15);
+ qproperty-backgroundErrorColor: rgb(100, 15, 15);
+ qproperty-foregroundNominalColor: rgb(50, 200, 50);
+ qproperty-foregroundWarningColor: rgb(255, 200, 50);
+ qproperty-foregroundErrorColor: rgb(200, 50, 50);
+ qproperty-magnitudeColor: rgb(0, 0, 0);
+ qproperty-majorTickColor: rgb(0, 0, 0);
+ qproperty-minorTickColor: rgb(50, 50, 50);
+}
+
+
+/* Label warning/error */
+
+QLabel#warningLabel {
+ color: rgb(192, 128, 0);
+ font-weight: bold;
+}
+
+QLabel#errorLabel {
+ color: rgb(192, 0, 0);
+ font-weight: bold;
+}
+
+* [themeID="warning"] {
+ color: rgb(192, 128, 0);
+ font-weight: bold;
+}
+
+* [themeID="error"] {
+ color: rgb(192, 0, 0);
+ font-weight: bold;
+}
+
+* [themeID="good"] {
+ color: rgb(0, 128, 0);
+ font-weight: bold;
+}
+
+/* About dialog */
+
+* [themeID="aboutName"] {
+ font-size: 36px;
+ font-weight: bold;
+}
+
+* [themeID="aboutVersion"] {
+ font-size: 16px;
+ margin-bottom: 20px;
+}
+
+* [themeID="aboutInfo"] {
+ margin-bottom: 20px;
+}
+
+* [themeID="aboutHLayout"] {
+ background-color: #DCD9D7;
+}
+
+/* Preview background color */
+
+OBSQTDisplay {
+ qproperty-displayBackgroundColor: rgb(76, 76, 76);
+}
+
+/* Preview/Program labels */
+
+* [themeID="previewProgramLabels"] {
+ font-size: 18px;
+ font-weight: bold;
+ color: rgb(122,121,122);
+}
+
+/* Settings Icons */
+
+OBSBasicSettings {
+ qproperty-generalIcon: url(:settings/images/settings/general.svg);
+ qproperty-streamIcon: url(:settings/images/settings/stream.svg);
+ qproperty-outputIcon: url(:settings/images/settings/output.svg);
+ qproperty-audioIcon: url(:settings/images/settings/audio.svg);
+ qproperty-videoIcon: url(:settings/images/settings/video.svg);
+ qproperty-hotkeysIcon: url(:settings/images/settings/hotkeys.svg);
+ qproperty-advancedIcon: url(:settings/images/settings/advanced.svg);
+}
+
+OBSBasicSettings QListWidget::item {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+/* Locked CheckBox */
+
+LockedCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+LockedCheckBox::indicator:checked {
+ image: url(:res/images/locked.svg);
+}
+
+LockedCheckBox::indicator:unchecked {
+ image: url(:res/images/unlocked.svg);
+}
+
+/* Visibilty CheckBox */
+
+VisibilityCheckBox {
+ outline: none;
+ background: transparent;
+}
+
+VisibilityCheckBox::indicator:checked {
+ image: url(:res/images/visible.svg);
+}
+
+VisibilityCheckBox::indicator:unchecked {
+ image: url(:res/images/invisible.svg);
+}
+
+* [themeID="trashIcon"] {
+ qproperty-icon: url(:res/images/trash.svg);
+}
+
+* [themeID="revertIcon"] {
+ qproperty-icon: url(:res/images/revert.svg);
+}
obs-studio-23.1.0.tar.xz/UI/double-slider.cpp -> obs-studio-23.2.0.tar.xz/UI/double-slider.cpp
Changed
#include <cmath>
-DoubleSlider::DoubleSlider(QWidget *parent) : QSlider(parent)
+DoubleSlider::DoubleSlider(QWidget *parent) : SliderIgnoreScroll(parent)
{
connect(this, SIGNAL(valueChanged(int)),
this, SLOT(intValChanged(int)));
obs-studio-23.1.0.tar.xz/UI/double-slider.hpp -> obs-studio-23.2.0.tar.xz/UI/double-slider.hpp
Changed
#pragma once
#include <QSlider>
+#include "slider-ignorewheel.hpp"
-class DoubleSlider : public QSlider {
+class DoubleSlider : public SliderIgnoreScroll {
Q_OBJECT
double minVal, maxVal, minStep;
obs-studio-23.1.0.tar.xz/UI/expand-checkbox.hpp -> obs-studio-23.2.0.tar.xz/UI/expand-checkbox.hpp
Changed
+#pragma once
+
#include <QCheckBox>
class ExpandCheckBox : public QCheckBox {
obs-studio-23.1.0.tar.xz/UI/forms/OBSAbout.ui -> obs-studio-23.2.0.tar.xz/UI/forms/OBSAbout.ui
Changed
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>OBSAbout</class>
- <widget class="QDialog" name="OBSAbout">
+ <widget class="QWidget" name="OBSAbout">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>792</width>
- <height>389</height>
+ <width>840</width>
+ <height>519</height>
</rect>
</property>
<property name="windowTitle">
<string>About</string>
</property>
- <widget class="QLabel" name="icon">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>30</y>
- <width>261</width>
- <height>261</height>
- </rect>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
</property>
- <property name="text">
- <string/>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <property name="pixmap">
- <pixmap>:res/images/obs.png</pixmap>
+ <property name="rightMargin">
+ <number>0</number>
</property>
- </widget>
- <widget class="QWidget" name="verticalLayoutWidget">
- <property name="geometry">
- <rect>
- <x>320</x>
- <y>30</y>
- <width>441</width>
- <height>261</height>
- </rect>
+ <property name="bottomMargin">
+ <number>0</number>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="QLabel" name="name">
- <property name="text">
- <string>OBS Studio</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="version">
- <property name="text">
- <string>Version</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="info">
- <property name="text">
- <string>About.Info</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="contribute">
- <property name="text">
- <string>Contribute</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="donate">
- <property name="text">
- <string>Donate</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="getInvolved">
- <property name="text">
- <string>Get Involved</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QTextBrowser" name="textBrowser"/>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="horizontalLayoutWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>320</y>
- <width>791</width>
- <height>71</height>
- </rect>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <widget class="ClickableLabel" name="about">
- <property name="text">
- <string>About</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="ClickableLabel" name="authors">
- <property name="text">
- <string>Authors</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="ClickableLabel" name="license">
- <property name="text">
- <string>License</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>30</number>
+ </property>
+ <property name="leftMargin">
+ <number>30</number>
+ </property>
+ <property name="topMargin">
+ <number>10</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="icon">
+ <property name="minimumSize">
+ <size>
+ <width>256</width>
+ <height>256</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>256</width>
+ <height>256</height>
+ </size>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="pixmap">
+ <pixmap>:res/images/obs.png</pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="name">
+ <property name="text">
+ <string notr="true">OBS Studio</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="version">
+ <property name="text">
+ <string notr="true">Version</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="info">
+ <property name="text">
+ <string>About.Info</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="contribute">
+ <property name="text">
+ <string notr="true">Contribute</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="donate">
+ <property name="text">
+ <string notr="true">Donate</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="getInvolved">
+ <property name="text">
+ <string notr="true">Get Involved</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QTextBrowser" name="textBrowser">
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>60</height>
+ </size>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="ClickableLabel" name="about">
+ <property name="text">
+ <string>About</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ClickableLabel" name="authors">
+ <property name="text">
+ <string>Authors</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ClickableLabel" name="license">
+ <property name="text">
+ <string>License</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
</widget>
<customwidgets>
<customwidget>
obs-studio-23.1.0.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-23.2.0.tar.xz/UI/forms/OBSBasic.ui
Changed
<item>
<layout class="QVBoxLayout" name="previewTextLayout">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
<widget class="QLabel" name="previewLabel">
<property name="text">
<string>StudioMode.Preview</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignBottom|Qt::AlignHCenter</set>
+ </property>
</widget>
</item>
<item>
<x>0</x>
<y>0</y>
<width>1079</width>
- <height>21</height>
+ <height>22</height>
</rect>
</property>
<widget class="QMenu" name="menu_File">
<addaction name="actionFitToScreen"/>
<addaction name="actionStretchToScreen"/>
<addaction name="actionCenterToScreen"/>
+ <addaction name="actionVerticalCenter"/>
+ <addaction name="actionHorizontalCenter"/>
</widget>
<widget class="QMenu" name="orderMenu">
<property name="title">
<rect>
<x>0</x>
<y>0</y>
- <width>80</width>
+ <width>64</width>
<height>16</height>
</rect>
</property>
<string>Ctrl+D</string>
</property>
</action>
+ <action name="actionVerticalCenter">
+ <property name="text">
+ <string>Basic.MainMenu.Edit.Transform.VerticalCenter</string>
+ </property>
+ </action>
+ <action name="actionHorizontalCenter">
+ <property name="text">
+ <string>Basic.MainMenu.Edit.Transform.HorizontalCenter</string>
+ </property>
+ </action>
<action name="actionFlipHorizontal">
<property name="text">
<string>Basic.MainMenu.Edit.Transform.FlipHorizontal</string>
obs-studio-23.1.0.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-23.2.0.tar.xz/UI/forms/OBSBasicSettings.ui
Changed
</property>
<item>
<widget class="QScrollArea" name="scrollArea_2">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
<widget class="QWidget" name="scrollAreaWidgetContents_3">
<property name="geometry">
<rect>
</widget>
</item>
<item>
- <widget class="Line" name="line_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
<widget class="QStackedWidget" name="outputModePages">
<property name="currentIndex">
<number>0</number>
</widget>
</item>
<item>
- <widget class="Line" name="line_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
<number>0</number>
</widget>
</item>
<item>
- <widget class="Line" name="line_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
<widget class="QGroupBox" name="advReplayBufferGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
</layout>
</widget>
<widget class="QWidget" name="audioPage">
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ <layout class="QVBoxLayout" name="formLayout">
+ <property name="leftMargin">
+ <number>0</number>
</property>
- <property name="labelAlignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Basic.Settings.Audio.SampleRate</string>
- </property>
- <property name="buddy">
- <cstring>sampleRate</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="sampleRate">
- <property name="currentText">
- <string notr="true">44.1khz</string>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <item>
- <property name="text">
- <string>44.1khz</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>48khz</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>Basic.Settings.Audio.Channels</string>
- </property>
- <property name="buddy">
- <cstring>channelSetup</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="channelSetup">
- <property name="currentText">
- <string>Mono</string>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <item>
- <property name="text">
- <string>Mono</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Stereo</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>2.1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>4.0</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>4.1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>5.1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>7.1</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_2">
- <property name="minimumSize">
- <size>
- <width>170</width>
- <height>0</height>
- </size>
- </property>
- <property name="text">
- <string>Basic.Settings.Audio.DesktopDevice</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="buddy">
- <cstring>desktopAudioDevice1</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="desktopAudioDevice1">
- <property name="enabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Basic.Settings.Audio.DesktopDevice2</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="buddy">
- <cstring>desktopAudioDevice2</cstring>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="desktopAudioDevice2">
- <property name="enabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Basic.Settings.Audio.AuxDevice</string>
- </property>
- <property name="buddy">
- <cstring>auxAudioDevice1</cstring>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="auxAudioDevice1">
- <property name="enabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Basic.Settings.Audio.AuxDevice2</string>
- </property>
- <property name="buddy">
- <cstring>auxAudioDevice2</cstring>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="QComboBox" name="auxAudioDevice2">
- <property name="enabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Basic.Settings.Audio.AuxDevice3</string>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QScrollArea" name="scrollArea_50">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
</property>
- <property name="buddy">
- <cstring>auxAudioDevice3</cstring>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
</property>
- </widget>
- </item>
- <item row="6" column="1">
- <widget class="QComboBox" name="auxAudioDevice3">
- <property name="enabled">
+ <property name="widgetResizable">
<bool>true</bool>
</property>
- </widget>
- </item>
- <item row="8" column="0">
- <widget class="QLabel" name="label_65">
- <property name="text">
- <string>Basic.Settings.Audio.MeterDecayRate</string>
- </property>
- <property name="buddy">
- <cstring>meterDecayRate</cstring>
- </property>
- </widget>
- </item>
- <item row="8" column="1">
- <widget class="QComboBox" name="meterDecayRate">
- <property name="currentText">
- <string>Basic.Settings.Audio.MeterDecayRate.Fast</string>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <item>
- <property name="text">
- <string>Basic.Settings.Audio.MeterDecayRate.Fast</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Basic.Settings.Audio.MeterDecayRate.Medium</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Basic.Settings.Audio.MeterDecayRate.Slow</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="9" column="0">
- <widget class="QLabel" name="label_66">
- <property name="text">
- <string>Basic.Settings.Audio.PeakMeterType</string>
- </property>
- <property name="buddy">
- <cstring>peakMeterType</cstring>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>594</width>
+ <height>807</height>
+ </rect>
</property>
- </widget>
- </item>
- <item row="9" column="1">
- <widget class="QComboBox" name="peakMeterType">
- <property name="currentIndex">
- <number>0</number>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
</property>
- <item>
- <property name="text">
- <string>Basic.Settings.Audio.PeakMeterType.SamplePeak</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Basic.Settings.Audio.PeakMeterType.TruePeak</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="10" column="0" colspan="2">
- <widget class="QScrollArea" name="audioSourceScrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
- <widget class="QWidget" name="audioSourceWidget">
+ <widget class="QWidget" name="scrollAreaWidgetContents_50">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>98</width>
- <height>28</height>
+ <width>594</width>
+ <height>807</height>
</rect>
</property>
+ <layout class="QVBoxLayout" name="verticalLayout_50">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>9</number>
+ </property>
+ <item alignment="Qt::AlignTop">
+ <widget class="QWidget" name="widget_50" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_51">
+ <item>
+ <widget class="QGroupBox" name="audioGeneralGroupBox">
+ <property name="title">
+ <string>Basic.Settings.General</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout_52">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <property name="labelAlignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_14">
+ <property name="minimumSize">
+ <size>
+ <width>170</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Basic.Settings.Audio.SampleRate</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>sampleRate</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="sampleRate">
+ <property name="currentText">
+ <string notr="true">44.1khz</string>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>44.1khz</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>48khz</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_15">
+ <property name="text">
+ <string>Basic.Settings.Audio.Channels</string>
+ </property>
+ <property name="buddy">
+ <cstring>channelSetup</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="channelSetup">
+ <property name="currentText">
+ <string>Mono</string>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>Mono</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stereo</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>2.1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>4.0</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>4.1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>5.1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>7.1</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="audioDevicesGroupBox">
+ <property name="title">
+ <string>Basic.Settings.Audio.Devices</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout_53">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <property name="labelAlignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="minimumSize">
+ <size>
+ <width>170</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Basic.Settings.Audio.DesktopDevice</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>desktopAudioDevice1</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="desktopAudioDevice1">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Basic.Settings.Audio.DesktopDevice2</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>desktopAudioDevice2</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="desktopAudioDevice2">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Basic.Settings.Audio.AuxDevice</string>
+ </property>
+ <property name="buddy">
+ <cstring>auxAudioDevice1</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="auxAudioDevice1">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Basic.Settings.Audio.AuxDevice2</string>
+ </property>
+ <property name="buddy">
+ <cstring>auxAudioDevice2</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QComboBox" name="auxAudioDevice2">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Basic.Settings.Audio.AuxDevice3</string>
+ </property>
+ <property name="buddy">
+ <cstring>auxAudioDevice3</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QComboBox" name="auxAudioDevice3">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QComboBox" name="auxAudioDevice4">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_67">
+ <property name="text">
+ <string>Basic.Settings.Audio.AuxDevice4</string>
+ </property>
+ <property name="buddy">
+ <cstring>auxAudioDevice4</cstring>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="audioMetersGroupBox">
+ <property name="title">
+ <string>Basic.Settings.Audio.Meters</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout_54">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <property name="labelAlignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_65">
+ <property name="minimumSize">
+ <size>
+ <width>170</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Basic.Settings.Audio.MeterDecayRate</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy">
+ <cstring>meterDecayRate</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="meterDecayRate">
+ <property name="currentText">
+ <string>Basic.Settings.Audio.MeterDecayRate.Fast</string>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>Basic.Settings.Audio.MeterDecayRate.Fast</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Basic.Settings.Audio.MeterDecayRate.Medium</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Basic.Settings.Audio.MeterDecayRate.Slow</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_66">
+ <property name="text">
+ <string>Basic.Settings.Audio.PeakMeterType</string>
+ </property>
+ <property name="buddy">
+ <cstring>peakMeterType</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="peakMeterType">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>Basic.Settings.Audio.PeakMeterType.SamplePeak</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Basic.Settings.Audio.PeakMeterType.TruePeak</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="audioAdvGroupBox">
+ <property name="title">
+ <string>Basic.Settings.Advanced</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout_56">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <property name="labelAlignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="monitoringDeviceLabel">
+ <property name="text">
+ <string>Basic.Settings.Advanced.Audio.MonitoringDevice</string>
+ </property>
+ <property name="buddy">
+ <cstring>monitoringDevice</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="monitoringDevice"/>
+ </item>
+ <item row="1" column="0">
+ <spacer name="horizontalSpacer_11">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>170</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="disableAudioDucking">
+ <property name="text">
+ <string>Basic.Settings.Advanced.Audio.DisableAudioDucking</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="audioHotkeysGroupBox">
+ <property name="title">
+ <string>Basic.Settings.Hotkeys</string>
+ </property>
+ <layout class="QFormLayout" name="audioSourceLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <property name="labelAlignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
</widget>
</widget>
</item>
</property>
</widget>
</item>
- <item row="13" column="1">
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="7" column="1">
- <widget class="QComboBox" name="auxAudioDevice4">
- <property name="enabled">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="7" column="0">
- <widget class="QLabel" name="label_67">
- <property name="text">
- <string>Basic.Settings.Audio.AuxDevice4</string>
- </property>
- <property name="buddy">
- <cstring>auxAudioDevice4</cstring>
- </property>
- </widget>
- </item>
</layout>
</widget>
<widget class="QWidget" name="videoPage">
</widget>
</item>
<item>
- <widget class="QGroupBox" name="advAudioGroupBox">
- <property name="title">
- <string>Basic.Settings.Audio</string>
- </property>
- <layout class="QFormLayout" name="formLayout_27">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <property name="labelAlignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- <property name="topMargin">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="monitoringDeviceLabel">
- <property name="text">
- <string>Basic.Settings.Advanced.Audio.MonitoringDevice</string>
- </property>
- <property name="buddy">
- <cstring>monitoringDevice</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="monitoringDevice"/>
- </item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="disableAudioDucking">
- <property name="text">
- <string>Basic.Settings.Advanced.Audio.DisableAudioDucking</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <spacer name="horizontalSpacer_11">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>170</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
<widget class="QGroupBox" name="groupBox_6">
<property name="title">
<string>Basic.Settings.Output.Adv.Recording</string>
<tabstop>auxAudioDevice4</tabstop>
<tabstop>meterDecayRate</tabstop>
<tabstop>peakMeterType</tabstop>
- <tabstop>audioSourceScrollArea</tabstop>
+ <tabstop>monitoringDevice</tabstop>
+ <tabstop>disableAudioDucking</tabstop>
<tabstop>baseResolution</tabstop>
<tabstop>outputResolution</tabstop>
<tabstop>downscaleFilter</tabstop>
<tabstop>colorRange</tabstop>
<tabstop>disableOSXVSync</tabstop>
<tabstop>resetOSXVSync</tabstop>
- <tabstop>monitoringDevice</tabstop>
- <tabstop>disableAudioDucking</tabstop>
<tabstop>filenameFormatting</tabstop>
<tabstop>overwriteIfExists</tabstop>
<tabstop>autoRemux</tabstop>
obs-studio-23.2.0.tar.xz/UI/forms/images/down.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(1.7072 0 0 1.7538 -8.5187 -9.0369)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/expand.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(0 -1.7072 1.7538 0 -9.0782 32.495)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/invisible.svg
Added
+<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m14.822 2.7361a0.50028 0.43099 0 1 0 -0.707 -0.60995l-2.11 1.8178c-1.115-0.66595-2.44-1.1458-3.945-1.1458-5.06 0-8.06 5.1691-8.06 5.1691s1.162 2.0013 3.258 3.5132l-2.064 1.779a0.5 0.43076 0 1 0 0.707 0.60909zm-9.962 7.3651 1.432-1.2345a1.999 1.7222 0 0 1 -0.292 -0.90028c0-0.95628 0.89-1.723 2-1.723 0.384 0 0.741 0.09132 1.045 0.25156l1.433-1.2345a3.98 3.4288 0 0 0 -2.478 -0.74004c-2.2 0-4 1.5507-4 3.446 0 0.8081 0.321 1.549 0.859 2.1348zm7.005-3.0273 1.993-1.7161a14.873 12.813 0 0 1 2.142 2.6087s-3 5.1691-7.94 5.1691a6.609 5.6937 0 0 1 -2.661 -0.49106l1.565-1.3491c0.33 0.07668 0.678 0.11717 1.036 0.11717 2.22 0 4-1.5335 4-3.446 0-0.30842-0.047-0.60737-0.136-0.89253zm-2.527 2.1762 0.152-0.13009a1.996 1.7196 0 0 1 -0.152 0.13009z" fill="#807f80" fill-rule="evenodd" stroke-width=".92818"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/locked.svg
Added
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16pt" height="16pt" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8 1 C 5.800781 1 4 2.800781 4 5 L 4 7 L 2 7 L 2 15 L 14 15 L 14 7 L 12 7 L 12 5 C 12 2.800781 10.199219 1 8 1 Z M 8 3 C 9.121094 3 10 3.878906 10 5 L 10 7 L 6 7 L 6 5 C 6 3.878906 6.878906 3 8 3 Z M 8 3 "/>
+</g>
+</svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/minus.svg
Added
+<svg class="feather feather-plus" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><line x1="1.5187" x2="22.481" y1="12" y2="12" stroke-width="2.4473"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/mute.svg
Added
+<svg class="feather feather-volume-x" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19" fill="#d40000" stroke="#d40000" stroke-opacity="1"/><line x1="23" x2="17" y1="9" y2="15" stroke="#d40000" stroke-opacity="1"/><line x1="17" x2="23" y1="9" y2="15" fill="#d40000" stroke="#d40000" stroke-opacity="1"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/no_sources.svg
Added
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="125" height="40" viewBox="0 0 125 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+ <g transform="matrix(1.3524,0,0,1.3524,-40.8078,-17.9807)">
+ <g transform="matrix(0.0855581,0,0,0.0855581,29.3907,17.4063)">
+ <path d="M128,80L160,80L160,112L128,112L128,80ZM224,72L224,224C224,232.8 216.8,240 208,240L48,240C39.2,240 32,232.8 32,224L32,32C32,23.2 39.2,16 48,16L168,16L224,72ZM208,80L160,32L48,32L48,208L96,128L128,192L160,160L208,208L208,80Z" style="fill:#000000;"/>
+ </g>
+ <g transform="matrix(0.0859541,0,0,0.0859541,98.7496,17.3555)">
+ <path d="M240,48L112,48C112,39.2 104.8,32 96,32L32,32C23.2,32 16,39.2 16,48C7.2,48 0,55.2 0,64L0,208C0,216.8 7.2,224 16,224L240,224C248.8,224 256,216.8 256,208L256,64C256,55.2 248.8,48 240,48ZM96,80L32,80L32,64L96,64L96,80ZM168,192C136.96,192 112,167.04 112,136C112,104.96 136.96,80 168,80C199.04,80 224,104.96 224,136C224,167.04 199.04,192 168,192ZM208,136C208,158.08 189.92,176 168,176C146.08,176 128,157.92 128,136C128,114.08 146.08,96 168,96C189.92,96 208,114.08 208,136Z" style="fill:#000000;"/>
+ </g>
+ <g transform="matrix(0.0855581,0,0,0.0855581,75.3166,17.4063)">
+ <path d="M128,16C66.24,16 16,66.24 16,128C16,189.76 66.24,240 128,240C135.68,240 143.04,239.2 150.08,237.76C147.36,236.48 146.88,226.08 149.76,220.32C152.8,213.76 162.72,197.12 152.96,191.52C143.2,185.92 145.92,183.52 140,176.96C134.08,170.4 136.48,169.44 136,167.68C134.72,162.24 141.76,153.44 142.24,152.64C142.56,151.68 142.56,148.32 142.24,147.36C142.24,146.08 137.92,143.84 136.8,143.68C135.84,143.68 135.04,145.44 133.6,145.76C132.16,146.08 125.6,141.76 124.16,140.48C122.72,139.2 121.92,136.8 119.84,135.04C117.76,132.96 117.6,134.56 114.56,133.28C111.52,132 101.76,128.32 94.08,125.6C86.4,122.56 85.76,118.08 85.76,115.04C85.44,111.84 80.96,107.52 79.04,104.32C76.8,101.12 76.48,96.8 75.84,97.76C75.2,98.72 79.84,110.24 79.04,110.72C78.24,111.04 76.48,107.52 74.24,104.64C72,101.6 76.48,103.2 69.44,89.44C62.4,75.68 71.68,68.64 72.16,61.44C72.64,54.24 78.24,64.16 75.2,59.36C72.16,54.56 75.2,45.12 72.96,41.6C70.88,38.08 58.88,45.6 58.88,45.6C59.2,42.08 69.92,36.32 77.44,30.88C84.96,25.44 89.92,29.92 96,31.68C102.24,33.76 102.56,33.12 100.48,30.88C98.4,28.8 101.44,28.16 106.24,28.8C110.72,29.6 112.32,35.36 119.52,34.56C127.04,34.08 120.32,36 121.28,38.08C122.24,40.16 120.32,39.84 115.2,42.88C110.4,46.08 115.52,46.4 124,52.64C132.48,58.88 130.08,48.64 128.96,43.84C127.84,39.04 135.2,42.88 135.2,42.88C140.48,46.4 139.52,43.2 143.2,44.16C146.88,45.12 157.76,54.4 157.76,54.4C144.48,61.44 152.8,62.08 155.04,63.84C157.28,65.6 150.56,68.64 150.56,68.64C147.84,65.92 147.52,68.96 145.76,69.92C144,70.88 145.44,73.44 145.44,73.44C136.48,74.88 138.4,84.48 138.72,86.72C138.72,88.96 132.64,92.48 131.2,96C129.76,99.2 135.2,106.24 132.16,106.56C129.12,107.04 126.72,96 111.2,100C106.4,101.28 96.16,106.56 101.76,117.28C107.52,128.32 116.48,114.24 119.52,115.84C122.56,117.44 118.56,124.32 119.2,124.64C119.84,124.96 127.68,124.96 128.16,134.4C128.64,143.84 140.48,142.88 142.88,143.2C145.6,143.2 154.08,136.16 155.2,136C156.16,135.52 161.28,131.52 171.68,137.44C182.24,143.2 187.36,142.4 190.88,144.96C194.4,147.52 192.16,152.48 195.36,154.24C198.56,156 212.32,153.76 215.84,159.2C219.36,164.64 201.76,192.64 196.32,195.68C190.88,198.72 188.64,205.92 182.88,210.4C177.12,214.88 169.92,220.64 162.56,224.96C156,228.64 155.04,235.52 152,237.76C202.24,226.56 239.68,181.76 239.68,128.32C239.68,66.56 189.44,16.32 127.68,16.32L128,16ZM154.24,120.96C152.8,121.44 149.76,124.48 141.76,119.68C134.08,114.88 128.8,116 128,115.2C128,115.2 127.2,113.44 130.72,112.96C137.76,112.16 146.4,119.52 148.48,119.52C150.56,119.52 151.52,117.44 155.04,118.72C158.56,120 155.84,120.8 154.24,120.96ZM117.44,27.2C116.64,26.72 117.92,25.92 118.88,24.96C119.36,24.48 119.2,23.2 119.68,22.72C121.44,20.96 129.44,18.72 128,23.2C126.24,27.52 118.72,28 117.44,27.2ZM137.12,41.44C134.08,41.12 127.84,40.64 128.8,39.2C133.6,34.72 127.36,33.12 123.36,33.12C119.36,32.8 117.92,30.56 119.84,30.08C121.76,29.6 129.6,30.4 131.04,31.36C132.32,32.32 139.36,35.36 139.84,37.44C140.16,39.52 139.84,41.44 137.12,41.44ZM160.64,40.64C158.4,42.08 147.36,34.08 145.44,32.32C136.48,24.64 131.2,27.36 129.44,25.76C127.68,24.16 128.16,22.72 131.2,20.32C134.24,17.92 142.24,21.28 147.2,21.76C152,22.24 157.76,26.08 157.76,30.56C158.08,34.56 163.04,38.56 160.8,40.64L160.64,40.64Z" style="fill:#000000;"/>
+ </g>
+ <g transform="matrix(0.0914992,0,0,0.0914992,51.1921,15.9137)">
+ <path d="M240,32L16,32C7.2,32 0,39.2 0,48L0,192C0,200.8 7.2,208 16,208L101.44,208C97.44,217.76 87.68,230.24 64,240L192,240C168.32,230.24 158.56,217.76 154.56,208L240,208C248.8,208 256,200.8 256,192L256,48C256,39.2 248.8,32 240,32ZM240,176L16,176L16,48L240,48L240,176Z" style="fill:#000000;"/>
+ </g>
+ </g>
+</svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/plus.svg
Added
+<svg class="feather feather-plus" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><line x1="12" x2="12" y1="1.5187" y2="22.481" stroke-width="2.4473"/><line x1="1.5187" x2="22.481" y1="12" y2="12" stroke-width="2.4473"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/refresh.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-refresh-ccw"><polyline points="1 4 1 10 7 10"></polyline><polyline points="23 20 23 14 17 14"></polyline><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15"></path></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/revert.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rotate-ccw"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/advanced.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/advanced.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#000000" d="M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z"/></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/audio.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/audio.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 8.02c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 8.02zM7.72 2.28L4 6H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.81c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 8c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.971 5.971 0 0 0 14 8.02c0-1.65-.67-3.16-1.75-4.25z"/></svg>
\ No newline at end of file
+<svg class="feather feather-volume-2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19" fill="#000000" stroke="#000000"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07" stroke="#000000"/></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/general.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/general.svg
Changed
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 32 32"
- version="1.1"
- id="svg5"
- sodipodi:docname="general2.svg"
- inkscape:version="0.92.3 (2405546, 2018-03-11)">
- <metadata
- id="metadata11">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs9" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1920"
- inkscape:window-height="998"
- id="namedview7"
- showgrid="false"
- inkscape:zoom="5.53125"
- inkscape:cx="21.333333"
- inkscape:cy="21.333333"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg5" />
- <g
- id="surface1"
- style="fill:#000000"
- transform="matrix(1,0,0,1.1456034,0,-2.3279489)">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="M 32,17.542969 V 14.339844 L 27.566406,13.058594 26.539062,10.878906 28.546875,7.203125 25.964844,4.941406 21.828125,6.761719 19.335938,5.859375 17.761719,2.019531 H 14.101562 L 12.664062,5.898438 10.125,6.796875 5.921875,5.042969 3.335938,7.296875 l 2.082031,3.625 -1.03125,2.179687 L 0,14.457031 v 3.183594 l 4.433594,1.28125 1.027344,2.179687 -2.007813,3.679688 2.582031,2.261719 4.136719,-1.824219 2.492187,0.902344 1.574219,3.835937 H 17.875 l 1.4375,-3.878906 2.539062,-0.898437 4.207032,1.761718 2.582031,-2.261718 -2.101563,-3.621094 1.074219,-2.179688 L 32,17.5 Z M 16,22 c -3.792969,0 -6.855469,-2.679688 -6.855469,-6 0,-3.320312 3.0625,-6 6.855469,-6 3.792969,0 6.855469,2.679688 6.855469,6 0,3.320312 -3.0625,6 -6.855469,6 z m 0,0"
- id="path2"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
+<svg width="16" height="16" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1 0 0 1.1456 0 -2.3279)" fill="#000000"><path d="m32 17.543v-3.2031l-4.4336-1.2812-1.0273-2.1797 2.0078-3.6758-2.582-2.2617-4.1367 1.8203-2.4922-0.90234-1.5742-3.8398h-3.6602l-1.4375 3.8789-2.5391 0.89844-4.2031-1.7539-2.5859 2.2539 2.082 3.625-1.0312 2.1797-4.3867 1.3555v3.1836l4.4336 1.2812 1.0273 2.1797-2.0078 3.6797 2.582 2.2617 4.1367-1.8242 2.4922 0.90234 1.5742 3.8359h3.6367l1.4375-3.8789 2.5391-0.89844 4.207 1.7617 2.582-2.2617-2.1016-3.6211 1.0742-2.1797 4.3867-1.3789zm-16 4.457c-3.793 0-6.8555-2.6797-6.8555-6s3.0625-6 6.8555-6 6.8555 2.6797 6.8555 6-3.0625 6-6.8555 6z" fill="#000000" fill-rule="evenodd"/></g></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/hotkeys.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/hotkeys.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#000000" d="M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z"/></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/output.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/output.svg
Changed
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="100%" height="100%" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
- <path d="M12,15L4,15C5.48,14.39 6.09,13.61 6.34,13L1,13C0.45,13 0,12.55 0,12L0,3C0,2.45 0.45,2 1,2L15,2C15.55,2 16,2.45 16,3L16,4.191L15,4.191L15,3L1,3L1,11L15,11L15,9.752L16,9.752L16,12C16,12.55 15.55,13 15,13L9.66,13C9.91,13.61 10.52,14.39 12,15ZM11.981,10.35L11.981,7.849L5.965,7.849L5.965,6.182L11.981,6.182L11.981,3.681L15.992,7.015L11.981,10.35Z"/>
+<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+ <path d="M12,15L4,15C5.48,14.39 6.09,13.61 6.34,13L1,13C0.45,13 0,12.55 0,12L0,3C0,2.45 0.45,2 1,2L15,2C15.55,2 16,2.45 16,3L16,4.191L15,4.191L15,3L1,3L1,11L15,11L15,9.752L16,9.752L16,12C16,12.55 15.55,13 15,13L9.66,13C9.91,13.61 10.52,14.39 12,15ZM11.981,10.35L11.981,7.849L5.965,7.849L5.965,6.182L11.981,6.182L11.981,3.681L15.992,7.015L11.981,10.35Z" style="fill:#000000;"/>
</svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/stream.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/stream.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#000000" d="M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
obs-studio-23.1.0.tar.xz/UI/forms/images/settings/video.svg -> obs-studio-23.2.0.tar.xz/UI/forms/images/settings/video.svg
Changed
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" fill="#000000" d="M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/trash.svg
Added
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/unlocked.svg
Added
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16pt" height="16pt" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(50.196078%,49.803922%,50.196078%);fill-opacity:1;" d="M 8 1 C 5.925781 1 4.230469 2.605469 4.039062 4.628906 L 6.074219 4.628906 C 6.25 3.699219 7.011719 3 8 3 C 9.121094 3 10 3.878906 10 5 L 10 7 L 2 7 L 2 15 L 14 15 L 14 7 L 12 7 L 12 5 C 12 2.800781 10.199219 1 8 1 Z M 8 1 "/>
+</g>
+</svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/up.svg
Added
+<svg class="feather feather-chevron-down" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(-1.7072 0 0 -1.7538 32.454 33.055)" points="6 9 12 15 18 9"/></svg>
obs-studio-23.2.0.tar.xz/UI/forms/images/visible.svg
Added
+<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8.06 3c-5.06 0-8.06 5-8.06 5s3 5 8.06 5c4.94 0 7.94-5 7.94-5s-3-5-7.94-5zm-0.06 8.3333c-2.2 0-4-1.4833-4-3.3333 0-1.8333 1.8-3.3333 4-3.3333 2.22 0 4 1.5 4 3.3333 0 1.85-1.78 3.3333-4 3.3333zm2-3.3333c0 0.925-0.89 1.6667-2 1.6667s-2-0.74167-2-1.6667c0-0.925 0.89-1.6667 2-1.6667s2 0.74167 2 1.6667z" fill-rule="evenodd" stroke-width=".91287"/></svg>
obs-studio-23.1.0.tar.xz/UI/forms/obs.qrc -> obs-studio-23.2.0.tar.xz/UI/forms/obs.qrc
Changed
<RCC>
<qresource prefix="/res">
- <file>images/mute.png</file>
- <file>images/unmute.png</file>
- <file>images/refresh.png</file>
- <file>images/configuration21_16.png</file>
- <file>images/configuration21_16_2x.png</file>
- <file>images/invisible_mask.png</file>
- <file>images/invisible_mask_2x.png</file>
- <file>images/visible_mask.png</file>
- <file>images/visible_mask_2x.png</file>
- <file>images/list_remove.png</file>
- <file>images/add.png</file>
- <file>images/down.png</file>
- <file>images/editscene.png</file>
- <file>images/live.png</file>
- <file>images/properties.png</file>
- <file>images/properties_2x.png</file>
- <file>images/up.png</file>
+ <file>images/mute.svg</file>
+ <file>images/refresh.svg</file>
+ <file>images/no_sources.svg</file>
+ <file>images/minus.svg</file>
+ <file>images/plus.svg</file>
+ <file>images/down.svg</file>
+ <file>images/up.svg</file>
<file>images/obs.png</file>
<file>images/tray_active.png</file>
- <file>images/locked_mask.png</file>
- <file>images/locked_mask_2x.png</file>
- <file>images/unlocked_mask.png</file>
- <file>images/unlocked_mask_2x.png</file>
- <file>images/collapse.png</file>
- <file>images/expand.png</file>
+ <file>images/expand.svg</file>
+ <file>images/unlocked.svg</file>
+ <file>images/locked.svg</file>
+ <file>images/invisible.svg</file>
+ <file>images/visible.svg</file>
+ <file>images/trash.svg</file>
+ <file>images/revert.svg</file>
</qresource>
<qresource prefix="/settings">
<file>images/settings/output.svg</file>
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt
Changed
../../properties-view.moc.hpp
../../vertical-scroll-area.hpp
../../double-slider.hpp
+ ../../slider-ignorewheel.hpp
+ ../../combobox-ignorewheel.hpp
+ ../../spinbox-ignorewheel.hpp
./DecklinkOutputUI.h
decklink-ui-main.h
)
../../properties-view.cpp
../../vertical-scroll-area.cpp
../../double-slider.cpp
+ ../../slider-ignorewheel.cpp
+ ../../combobox-ignorewheel.cpp
+ ../../spinbox-ignorewheel.cpp
./DecklinkOutputUI.cpp
decklink-ui-main.cpp
)
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/DecklinkOutputUI.cpp -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/DecklinkOutputUI.cpp
Changed
{
ui->setupUi(this);
+ setSizeGripEnabled(true);
+
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
propertiesView = nullptr;
+ previewPropertiesView = nullptr;
connect(ui->startOutput, SIGNAL(released()), this, SLOT(StartOutput()));
connect(ui->stopOutput, SIGNAL(released()), this, SLOT(StopOutput()));
+
+ connect(ui->startPreviewOutput, SIGNAL(released()), this, SLOT(StartPreviewOutput()));
+ connect(ui->stopPreviewOutput, SIGNAL(released()), this, SLOT(StopPreviewOutput()));
}
void DecklinkOutputUI::ShowHideDialog()
{
SetupPropertiesView();
+ SetupPreviewPropertiesView();
setVisible(!isVisible());
}
obs_data_save_json_safe(settings, path, "tmp", "bak");
}
+void DecklinkOutputUI::SetupPreviewPropertiesView()
+{
+ if (previewPropertiesView)
+ delete previewPropertiesView;
+
+ obs_data_t *settings = obs_data_create();
+
+ OBSData data = load_preview_settings();
+ if (data)
+ obs_data_apply(settings, data);
+
+ previewPropertiesView = new OBSPropertiesView(settings,
+ "decklink_output",
+ (PropertiesReloadCallback) obs_get_output_properties,
+ 170);
+
+ ui->previewPropertiesLayout->addWidget(previewPropertiesView);
+ obs_data_release(settings);
+
+ connect(previewPropertiesView, SIGNAL(Changed()), this, SLOT(PreviewPropertiesChanged()));
+}
+
+void DecklinkOutputUI::SavePreviewSettings()
+{
+ char *modulePath = obs_module_get_config_path(obs_current_module(), "");
+
+ os_mkdirs(modulePath);
+
+ char *path = obs_module_get_config_path(obs_current_module(),
+ "decklinkPreviewOutputProps.json");
+
+ obs_data_t *settings = previewPropertiesView->GetSettings();
+ if (settings)
+ obs_data_save_json_safe(settings, path, "tmp", "bak");
+}
+
+
void DecklinkOutputUI::StartOutput()
{
SaveSettings();
{
SaveSettings();
}
+
+
+void DecklinkOutputUI::StartPreviewOutput()
+{
+ SavePreviewSettings();
+ preview_output_start();
+}
+
+void DecklinkOutputUI::StopPreviewOutput()
+{
+ preview_output_stop();
+}
+
+void DecklinkOutputUI::PreviewPropertiesChanged()
+{
+ SavePreviewSettings();
+}
\ No newline at end of file
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/DecklinkOutputUI.h -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/DecklinkOutputUI.h
Changed
Q_OBJECT
private:
OBSPropertiesView *propertiesView;
+ OBSPropertiesView *previewPropertiesView;
public slots:
void StartOutput();
void StopOutput();
void PropertiesChanged();
+ void StartPreviewOutput();
+ void StopPreviewOutput();
+ void PreviewPropertiesChanged();
+
public:
std::unique_ptr<Ui_Output> ui;
DecklinkOutputUI(QWidget *parent);
void ShowHideDialog();
+
void SetupPropertiesView();
void SaveSettings();
+
+ void SetupPreviewPropertiesView();
+ void SavePreviewSettings();
};
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp
Changed
#include <QAction>
#include <util/util.hpp>
#include <util/platform.h>
+#include <media-io/video-io.h>
+#include <media-io/video-frame.h>
#include "DecklinkOutputUI.h"
+#include "../../../plugins/decklink/const.h"
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("decklink-output-ui", "en-US")
DecklinkOutputUI *doUI;
bool main_output_running = false;
+bool preview_output_running = false;
obs_output_t *output;
+struct preview_output {
+ bool enabled;
+ obs_source_t *current_source;
+ obs_output_t *output;
+
+ video_t *video_queue;
+ gs_texrender_t *texrender;
+ gs_stagesurf_t *stagesurface;
+ uint8_t *video_data;
+ uint32_t video_linesize;
+
+ obs_video_info ovi;
+};
+
+static struct preview_output context = {0};
+
OBSData load_settings()
{
BPtr<char> path = obs_module_get_config_path(obs_current_module(),
}
}
+
+OBSData load_preview_settings()
+{
+ BPtr<char> path = obs_module_get_config_path(obs_current_module(),
+ "decklinkPreviewOutputProps.json");
+ BPtr<char> jsonData = os_quick_read_utf8_file(path);
+ if (!!jsonData) {
+ obs_data_t *data = obs_data_create_from_json(jsonData);
+ OBSData dataRet(data);
+ obs_data_release(data);
+
+ return dataRet;
+ }
+
+ return nullptr;
+}
+
+void on_preview_scene_changed(enum obs_frontend_event event, void *param);
+void render_preview_source(void *param, uint32_t cx, uint32_t cy);
+
+void preview_output_start()
+{
+ if (!preview_output_running) {
+ OBSData settings = load_preview_settings();
+
+ if (settings != nullptr) {
+ context.output = obs_output_create("decklink_output",
+ "decklink_preview_output", settings, NULL);
+
+ obs_get_video_info(&context.ovi);
+
+ uint32_t width = context.ovi.base_width;
+ uint32_t height = context.ovi.base_height;
+
+ obs_enter_graphics();
+ context.texrender = gs_texrender_create(GS_BGRA, GS_ZS_NONE);
+ context.stagesurface = gs_stagesurface_create(width, height, GS_BGRA);
+ obs_leave_graphics();
+
+ const video_output_info *mainVOI = video_output_get_info(obs_get_video());
+
+ video_output_info vi = {0};
+ vi.format = VIDEO_FORMAT_BGRA;
+ vi.width = width;
+ vi.height = height;
+ vi.fps_den = context.ovi.fps_den;
+ vi.fps_num = context.ovi.fps_num;
+ vi.cache_size = 16;
+ vi.colorspace = mainVOI->colorspace;
+ vi.range = mainVOI->range;
+ vi.name = "decklink_preview_output";
+
+ video_output_open(&context.video_queue, &vi);
+
+ obs_frontend_add_event_callback(on_preview_scene_changed, &context);
+ if (obs_frontend_preview_program_mode_active()) {
+ context.current_source = obs_frontend_get_current_preview_scene();
+ } else {
+ context.current_source = obs_frontend_get_current_scene();
+ }
+ obs_add_main_render_callback(render_preview_source, &context);
+
+ obs_output_set_media(context.output, context.video_queue, obs_get_audio());
+ obs_output_start(context.output);
+
+ preview_output_running = true;
+ }
+ }
+}
+
+void preview_output_stop()
+{
+ if (preview_output_running) {
+ obs_output_stop(context.output);
+ video_output_stop(context.video_queue);
+
+ obs_remove_main_render_callback(render_preview_source, &context);
+ obs_frontend_remove_event_callback(on_preview_scene_changed, &context);
+
+ obs_source_release(context.current_source);
+
+ obs_enter_graphics();
+ gs_stagesurface_destroy(context.stagesurface);
+ gs_texrender_destroy(context.texrender);
+ obs_leave_graphics();
+
+ video_output_close(context.video_queue);
+
+ preview_output_running = false;
+ }
+}
+
+void on_preview_scene_changed(enum obs_frontend_event event, void *param)
+{
+ auto ctx = (struct preview_output*)param;
+ switch (event) {
+ case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
+ case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED:
+ obs_source_release(ctx->current_source);
+ ctx->current_source = obs_frontend_get_current_preview_scene();
+ break;
+ case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
+ obs_source_release(ctx->current_source);
+ ctx->current_source = obs_frontend_get_current_scene();
+ break;
+ case OBS_FRONTEND_EVENT_SCENE_CHANGED:
+ if (!obs_frontend_preview_program_mode_active()) {
+ obs_source_release(ctx->current_source);
+ ctx->current_source = obs_frontend_get_current_scene();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void render_preview_source(void *param, uint32_t cx, uint32_t cy)
+{
+ auto ctx = (struct preview_output*)param;
+
+ if (!ctx->current_source) return;
+
+ uint32_t width = obs_source_get_base_width(ctx->current_source);
+ uint32_t height = obs_source_get_base_height(ctx->current_source);
+
+ gs_texrender_reset(ctx->texrender);
+
+ if (gs_texrender_begin(ctx->texrender, width, height)) {
+ struct vec4 background;
+ vec4_zero(&background);
+
+ gs_clear(GS_CLEAR_COLOR, &background, 0.0f, 0);
+ gs_ortho(0.0f, (float)width, 0.0f, (float)height, -100.0f, 100.0f);
+
+ gs_blend_state_push();
+ gs_blend_function(GS_BLEND_ONE, GS_BLEND_ZERO);
+
+ obs_source_video_render(ctx->current_source);
+
+ gs_blend_state_pop();
+ gs_texrender_end(ctx->texrender);
+
+ struct video_frame output_frame;
+ if (video_output_lock_frame(ctx->video_queue, &output_frame, 1, os_gettime_ns()))
+ {
+ gs_stage_texture(ctx->stagesurface, gs_texrender_get_texture(ctx->texrender));
+
+ if (gs_stagesurface_map(ctx->stagesurface, &ctx->video_data, &ctx->video_linesize)) {
+ uint32_t linesize = output_frame.linesize[0];
+ for (uint32_t i = 0; i < ctx->ovi.base_height; i++) {
+ uint32_t dst_offset = linesize * i;
+ uint32_t src_offset = ctx->video_linesize * i;
+ memcpy(output_frame.data[0] + dst_offset,
+ ctx->video_data + src_offset,
+ linesize);
+ }
+
+ gs_stagesurface_unmap(ctx->stagesurface);
+ ctx->video_data = nullptr;
+ }
+
+ video_output_unlock_frame(ctx->video_queue);
+ }
+ }
+}
+
void addOutputUI(void)
{
QAction *action = (QAction*)obs_frontend_add_tools_menu_qaction(
QMainWindow *window = (QMainWindow*)obs_frontend_get_main_window();
+ obs_frontend_push_ui_translation(obs_module_get_string);
doUI = new DecklinkOutputUI(window);
+ obs_frontend_pop_ui_translation();
auto cb = []() {
doUI->ShowHideDialog();
if (settings && obs_data_get_bool(settings, "auto_start"))
output_start();
+
+ OBSData previewSettings = load_preview_settings();
+
+ if (previewSettings && obs_data_get_bool(previewSettings, "auto_start"))
+ preview_output_start();
}
}
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.h -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.h
Changed
+#pragma once
+
void output_start();
void output_stop();
OBSData load_settings();
+void preview_output_start();
+void preview_output_stop();
+OBSData load_preview_settings();
\ No newline at end of file
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/decklink-output-ui/forms/output.ui -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/decklink-output-ui/forms/output.ui
Changed
<rect>
<x>0</x>
<y>0</y>
- <width>793</width>
- <height>328</height>
+ <width>785</width>
+ <height>497</height>
</rect>
</property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="windowTitle">
<string>Decklink Output</string>
</property>
- <widget class="QWidget" name="verticalLayoutWidget">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>10</y>
- <width>751</width>
- <height>221</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="propertiesLayout"/>
- </widget>
- <widget class="QPushButton" name="startOutput">
- <property name="geometry">
- <rect>
- <x>520</x>
- <y>250</y>
- <width>113</width>
- <height>32</height>
- </rect>
- </property>
- <property name="text">
- <string>Start</string>
- </property>
- </widget>
- <widget class="QPushButton" name="stopOutput">
- <property name="geometry">
- <rect>
- <x>650</x>
- <y>250</y>
- <width>113</width>
- <height>32</height>
- </rect>
- </property>
- <property name="text">
- <string>Stop</string>
- </property>
- </widget>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
- <x>420</x>
- <y>290</y>
- <width>351</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Keyer output requires RGB mode in advanced settings.</string>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="modal">
+ <bool>false</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetDefaultConstraint</enum>
</property>
- </widget>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Output</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="propertiesLayout"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>-1</number>
+ </property>
+ <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="startOutput">
+ <property name="text">
+ <string>Start</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="stopOutput">
+ <property name="text">
+ <string>Stop</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Preview Output</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="previewPropertiesLayout"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <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>
+ <item>
+ <widget class="QPushButton" name="startPreviewOutput">
+ <property name="text">
+ <string>Start</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="stopPreviewOutput">
+ <property name="text">
+ <string>Stop</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Keyer output requires RGB mode in advanced settings.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</widget>
<resources/>
<connections/>
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt
Changed
../../horizontal-scroll-area.hpp
../../vertical-scroll-area.hpp
../../double-slider.hpp
+ ../../slider-ignorewheel.hpp
+ ../../combobox-ignorewheel.hpp
+ ../../spinbox-ignorewheel.hpp
)
set(frontend-tools_SOURCES
${frontend-tools_SOURCES}
../../horizontal-scroll-area.cpp
../../vertical-scroll-area.cpp
../../double-slider.cpp
+ ../../slider-ignorewheel.cpp
+ ../../combobox-ignorewheel.cpp
+ ../../spinbox-ignorewheel.cpp
)
set(frontend-tools_UI
${frontend-tools_UI}
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini
Changed
-SceneSwitcher="Automatisk sceneomskifter"
+SceneSwitcher="Automatisk sceneskifter"
SceneSwitcher.OnNoMatch="Når intet vindue matcher:"
SceneSwitcher.OnNoMatch.DontSwitch="Skift ikke"
SceneSwitcher.OnNoMatch.SwitchTo="Skift til:"
-SceneSwitcher.CheckInterval="Tjek aktiv vinduestitel for hver:"
-SceneSwitcher.ActiveOrNotActive="Sceneomskifter er:"
+SceneSwitcher.CheckInterval="Tjek aktiv vinduestitel hver:"
+SceneSwitcher.ActiveOrNotActive="Sceneskifter er:"
InvalidRegex.Title="Ugyldigt regulært udtryk"
InvalidRegex.Text="Det af dig angivne regulære udtryk er ugyldigt."
Active="Aktiv"
PythonSettings="Python-indstillinger"
PythonSettings.PythonInstallPath32bit="Python-installationssti (32bit)"
PythonSettings.PythonInstallPath64bit="Python-installationssti (64bit)"
-PythonSettings.BrowsePythonPath="Gennemse efter Python-sti"
+PythonSettings.BrowsePythonPath="Find Python-sti"
ScriptLogWindow="Scriptlog"
Description="Beskrivelse"
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini
Changed
-SceneSwitcher="Automatyczne Przełączanie Scen"
+SceneSwitcher="Automatyczne przełączanie scen"
SceneSwitcher.OnNoMatch="Gdy nie pasuje żadne okno:"
SceneSwitcher.OnNoMatch.DontSwitch="Nie przełączaj"
SceneSwitcher.OnNoMatch.SwitchTo="Przełącz na:"
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ro-RO.ini
Changed
-SceneSwitcher="Schimbator automat de scenă"
+SceneSwitcher="Schimbător automat de scene"
SceneSwitcher.OnNoMatch="Când nicio fereastră nu se potrivește:"
+SceneSwitcher.OnNoMatch.DontSwitch="Nu schimba"
SceneSwitcher.OnNoMatch.SwitchTo="Schimbă la:"
SceneSwitcher.CheckInterval="Verifică titlul ferestrei active la fiecare:"
+SceneSwitcher.ActiveOrNotActive="Schimbătorul de scene este:"
Active="Activ"
Inactive="Inactiv"
-Start="Pornire"
-Stop="Oprire"
+Start="Pornește"
+Stop="Oprește"
Captions="Subtitrări (experimentale)"
Captions.AudioSource="Sursa audio"
-Captions.CurrentSystemLanguage="Limba curentă a sistemului (%1)"
+Captions.CurrentSystemLanguage="Limba actuală a sistemului (%1)"
Captions.Provider="Furnizor"
OutputTimer.Record="Opriți înregistrarea după:"
OutputTimer.Stream.StoppingIn="Se oprește transmisiunea în:"
-OutputTimer.Record.StoppingIn="Oprire înregistrare în:"
+OutputTimer.Record.StoppingIn="Înregistrarea se oprește în:"
Scripts="Scripturi"
LoadedScripts="Scripturi încărcate"
AddScripts="Adaugă scripturi"
RemoveScripts="Elimină scripturi"
ReloadScripts="Reîncarcă scripturile"
+PythonSettings="Setări Python"
+PythonSettings.PythonInstallPath32bit="Calea instalării Python (32bit)"
+PythonSettings.PythonInstallPath64bit="Calea instalării Python (64bit)"
+PythonSettings.BrowsePythonPath="Răsfoiește calea Python"
+ScriptLogWindow="Jurnalul scripturilor"
Description="Descriere"
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini
Changed
Captions.AudioSource="音频源"
Captions.CurrentSystemLanguage="当前系统语言 (%1)"
Captions.Provider="提供程序"
-Captions.Error.GenericFail="启动捕获失败"
+Captions.Error.GenericFail="字幕启动失败"
OutputTimer="输出计时器"
OutputTimer.Stream="停止流处理后:"
obs-studio-23.1.0.tar.xz/UI/frontend-plugins/frontend-tools/scripts.hpp -> obs-studio-23.2.0.tar.xz/UI/frontend-plugins/frontend-tools/scripts.hpp
Changed
+#pragma once
+
#include <QWidget>
#include <QString>
obs-studio-23.1.0.tar.xz/UI/hotkey-edit.cpp -> obs-studio-23.2.0.tar.xz/UI/hotkey-edit.cpp
Changed
edit->setToolTip(toolTip);
auto revert = new QPushButton;
- revert->setProperty("themeID", "hotkeyButtons");
- revert->setText(QTStr("Revert"));
+ revert->setProperty("themeID", "revertIcon");
+ revert->setToolTip(QTStr("Revert"));
+ revert->setFixedSize(24, 24);
+ revert->setFlat(true);
revert->setEnabled(false);
auto clear = new QPushButton;
- clear->setProperty("themeID", "hotkeyButtons");
- clear->setText(QTStr("Clear"));
+ clear->setProperty("themeID", "trashIcon");
+ clear->setToolTip(QTStr("Clear"));
+ clear->setFixedSize(24, 24);
+ clear->setFlat(true);
clear->setEnabled(!obs_key_combination_is_empty(combo));
QObject::connect(edit, &OBSHotkeyEdit::KeyChanged,
});
auto add = new QPushButton;
- add->setProperty("themeID", "hotkeyButtons");
- add->setText("+");
- add->setMinimumWidth(50);
+ add->setProperty("themeID", "addIconSmall");
+ add->setFixedSize(24, 24);
+ add->setFlat(true);
auto remove = new QPushButton;
- remove->setProperty("themeID", "hotkeyButtons");
- remove->setText("-");
+ remove->setProperty("themeID", "removeIconSmall");
remove->setEnabled(removeButtons.size() > 0);
- remove->setMinimumWidth(50);
+ remove->setFixedSize(24, 24);
+ remove->setFlat(true);
auto CurrentIndex = [&, remove]
{
});
QHBoxLayout *subLayout = new QHBoxLayout;
+ subLayout->setContentsMargins(0, 4, 0, 0);
subLayout->addWidget(edit);
subLayout->addWidget(revert);
subLayout->addWidget(clear);
obs-studio-23.1.0.tar.xz/UI/hotkey-edit.hpp -> obs-studio-23.2.0.tar.xz/UI/hotkey-edit.hpp
Changed
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
+#pragma once
+
#include <QLineEdit>
#include <QKeyEvent>
#include <QPushButton>
obs-studio-23.1.0.tar.xz/UI/locked-checkbox.hpp -> obs-studio-23.2.0.tar.xz/UI/locked-checkbox.hpp
Changed
-#include <QCheckBox>
-#include <QPixmap>
+#pragma once
-class QPaintEvernt;
+#include <QCheckBox>
class LockedCheckBox : public QCheckBox {
Q_OBJECT
-
- QPixmap lockedImage;
- QPixmap unlockedImage;
-
-public:
- LockedCheckBox();
-
-protected:
- void paintEvent(QPaintEvent *event) override;
};
obs-studio-23.1.0.tar.xz/UI/obs-app.cpp -> obs-studio-23.2.0.tar.xz/UI/obs-app.cpp
Changed
#include <windows.h>
#else
#include <signal.h>
+#include <pthread.h>
#endif
#include <iostream>
+#include "ui-config.h"
+
using namespace std;
static log_handler_t def_log_handler;
if (!config_get_bool(globalConfig, "General", "Pre21Defaults")) {
config_set_default_string(globalConfig, "General",
- "CurrentTheme", "Dark");
+ "CurrentTheme", DEFAULT_THEME);
}
config_set_default_bool(globalConfig, "BasicWindow",
const char *themeName = config_get_string(globalConfig, "General",
"CurrentTheme");
+
if (!themeName) {
/* Use deprecated "Theme" value if available */
themeName = config_get_string(globalConfig,
"General", "Theme");
if (!themeName)
- themeName = "Default";
+ themeName = DEFAULT_THEME;
+ if (!themeName)
+ themeName = "Dark";
}
- if (strcmp(themeName, "Default") != 0 && SetTheme(themeName))
- return true;
+ if (strcmp(themeName, "Default") == 0)
+ themeName = "System";
- return SetTheme("Default");
+ return SetTheme(themeName);
}
OBSApp::OBSApp(int &argc, char **argv, profiler_name_store_t *store)
sig_handler.sa_flags = 0;
sigaction(SIGINT, &sig_handler, NULL);
+
+
+ /* Block SIGPIPE in all threads, this can happen if a thread calls write on
+ a closed pipe. */
+ sigset_t sigpipe_mask;
+ sigemptyset(&sigpipe_mask);
+ sigaddset(&sigpipe_mask, SIGPIPE);
+ sigset_t saved_mask;
+ if (pthread_sigmask(SIG_BLOCK, &sigpipe_mask, &saved_mask) == -1) {
+ perror("pthread_sigmask");
+ exit(1);
+ }
#endif
#ifdef _WIN32
obs-studio-23.1.0.tar.xz/UI/obs-frontend-api/obs-frontend-api.cpp -> obs-studio-23.2.0.tar.xz/UI/obs-frontend-api/obs-frontend-api.cpp
Changed
: nullptr;
}
+void *obs_frontend_get_system_tray(void)
+{
+ return !!callbacks_valid()
+ ? c->obs_frontend_get_system_tray()
+ : nullptr;
+}
+
char **obs_frontend_get_scene_names(void)
{
if (!callbacks_valid())
c->obs_frontend_set_current_transition(transition);
}
+int obs_frontend_get_transition_duration(void)
+{
+ return !!callbacks_valid()
+ ? c->obs_frontend_get_transition_duration()
+ : 0;
+}
+
+void obs_frontend_set_transition_duration(int duration)
+{
+ if (callbacks_valid())
+ c->obs_frontend_set_transition_duration(duration);
+}
+
char **obs_frontend_get_scene_collections(void)
{
if (!callbacks_valid())
c->obs_frontend_set_preview_program_mode(enable);
}
+void obs_frontend_preview_program_trigger_transition(void)
+{
+ if (callbacks_valid())
+ c->obs_frontend_preview_program_trigger_transition();
+}
+
void obs_frontend_set_preview_enabled(bool enable)
{
if (callbacks_valid())
obs-studio-23.1.0.tar.xz/UI/obs-frontend-api/obs-frontend-api.h -> obs-studio-23.2.0.tar.xz/UI/obs-frontend-api/obs-frontend-api.h
Changed
EXPORT void *obs_frontend_get_main_window(void);
EXPORT void *obs_frontend_get_main_window_handle(void);
+EXPORT void *obs_frontend_get_system_tray(void);
EXPORT char **obs_frontend_get_scene_names(void);
EXPORT void obs_frontend_get_scenes(struct obs_frontend_source_list *sources);
struct obs_frontend_source_list *sources);
EXPORT obs_source_t *obs_frontend_get_current_transition(void);
EXPORT void obs_frontend_set_current_transition(obs_source_t *transition);
+EXPORT int obs_frontend_get_transition_duration(void);
+EXPORT void obs_frontend_set_transition_duration(int duration);
EXPORT char **obs_frontend_get_scene_collections(void);
EXPORT char *obs_frontend_get_current_scene_collection(void);
EXPORT bool obs_frontend_preview_program_mode_active(void);
EXPORT void obs_frontend_set_preview_program_mode(bool enable);
+EXPORT void obs_frontend_preview_program_trigger_transition(void);
EXPORT void obs_frontend_set_preview_enabled(bool enable);
EXPORT bool obs_frontend_preview_enabled(void);
obs-studio-23.1.0.tar.xz/UI/obs-frontend-api/obs-frontend-internal.hpp -> obs-studio-23.2.0.tar.xz/UI/obs-frontend-api/obs-frontend-internal.hpp
Changed
virtual ~obs_frontend_callbacks() {}
virtual void *obs_frontend_get_main_window(void)=0;
virtual void *obs_frontend_get_main_window_handle(void)=0;
+ virtual void *obs_frontend_get_system_tray(void)=0;
virtual void obs_frontend_get_scenes(
struct obs_frontend_source_list *sources)=0;
virtual obs_source_t *obs_frontend_get_current_transition(void)=0;
virtual void obs_frontend_set_current_transition(
obs_source_t *transition)=0;
+ virtual int obs_frontend_get_transition_duration(void)=0;
+ virtual void obs_frontend_set_transition_duration(int duration)=0;
virtual void obs_frontend_get_scene_collections(
std::vector<std::string> &strings)=0;
virtual bool obs_frontend_preview_program_mode_active(void)=0;
virtual void obs_frontend_set_preview_program_mode(bool enable)=0;
+ virtual void obs_frontend_preview_program_trigger_transition(void)=0;
+
virtual bool obs_frontend_preview_enabled(void)=0;
virtual void obs_frontend_set_preview_enabled(bool enable)=0;
obs-studio-23.1.0.tar.xz/UI/properties-view.cpp -> obs-studio-23.2.0.tar.xz/UI/properties-view.cpp
Changed
#include <QMenu>
#include <QStackedWidget>
#include <QDir>
+#include <QGroupBox>
#include "double-slider.hpp"
+#include "slider-ignorewheel.hpp"
+#include "spinbox-ignorewheel.hpp"
+#include "combobox-ignorewheel.hpp"
#include "qt-wrappers.hpp"
#include "properties-view.hpp"
#include "properties-view.moc.hpp"
QLabel *noPropertiesLabel = new QLabel(NO_PROPERTIES_STRING);
layout->addWidget(noPropertiesLabel);
}
+
+ emit PropertiesRefreshed();
}
void OBSPropertiesView::SetScrollPos(int h, int v)
const char *name = obs_property_name(prop);
int val = (int)obs_data_get_int(settings, name);
- QSpinBox *spin = new QSpinBox();
+ QSpinBox *spin = new SpinBoxIgnoreScroll();
if (!obs_property_enabled(prop))
spin->setEnabled(false);
int minVal = obs_property_int_min(prop);
int maxVal = obs_property_int_max(prop);
int stepVal = obs_property_int_step(prop);
+ const char *suffix = obs_property_int_suffix(prop);
spin->setMinimum(minVal);
spin->setMaximum(maxVal);
spin->setSingleStep(stepVal);
spin->setValue(val);
spin->setToolTip(QT_UTF8(obs_property_long_description(prop)));
+ spin->setSuffix(QT_UTF8(suffix));
WidgetInfo *info = new WidgetInfo(this, prop, spin);
children.emplace_back(info);
if (type == OBS_NUMBER_SLIDER) {
- QSlider *slider = new QSlider();
+ QSlider *slider = new SliderIgnoreScroll();
slider->setMinimum(minVal);
slider->setMaximum(maxVal);
slider->setPageStep(stepVal);
double minVal = obs_property_float_min(prop);
double maxVal = obs_property_float_max(prop);
double stepVal = obs_property_float_step(prop);
+ const char *suffix = obs_property_float_suffix(prop);
spin->setMinimum(minVal);
spin->setMaximum(maxVal);
spin->setSingleStep(stepVal);
spin->setValue(val);
spin->setToolTip(QT_UTF8(obs_property_long_description(prop)));
+ spin->setSuffix(QT_UTF8(suffix));
WidgetInfo *info = new WidgetInfo(this, prop, spin);
children.emplace_back(info);
QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning)
{
const char *name = obs_property_name(prop);
- QComboBox *combo = new QComboBox();
+ QComboBox *combo = new ComboBoxIgnoreScroll();
obs_combo_type type = obs_property_list_type(prop);
obs_combo_format format = obs_property_list_format(prop);
size_t count = obs_property_list_item_count(prop);
auto items = vector<common_frame_rate>{};
items.reserve(sizeof(common_fps)/sizeof(common_frame_rate));
- auto combo = fpsProps->simpleFPS = new QComboBox{};
+ auto combo = fpsProps->simpleFPS = new ComboBoxIgnoreScroll{};
combo->addItem("", QVariant::fromValue(make_fps(0, 0)));
for (const auto &fps : common_fps) {
auto str = QTStr("Basic.PropertiesView.FPS.ValidFPSRanges");
auto rlabel = new QLabel{str};
- auto combo = fpsProps->fpsRange = new QComboBox{};
+ auto combo = fpsProps->fpsRange = new ComboBoxIgnoreScroll{};
auto convert_fps = media_frames_per_second_to_fps;
//auto convert_fi = media_frames_per_second_to_frame_interval;
layout->addRow(rlabel, combo);
- auto num_edit = fpsProps->numEdit = new QSpinBox{};
- auto den_edit = fpsProps->denEdit = new QSpinBox{};
+ auto num_edit = fpsProps->numEdit = new SpinBoxIgnoreScroll{};
+ auto den_edit = fpsProps->denEdit = new SpinBoxIgnoreScroll{};
num_edit->setRange(0, INT_MAX);
den_edit->setRange(0, INT_MAX);
swap(widget->fps_ranges, fps_ranges);
- auto combo = widget->modeSelect = new QComboBox{};
+ auto combo = widget->modeSelect = new ComboBoxIgnoreScroll{};
combo->addItem(QTStr("Basic.PropertiesView.FPS.Simple"),
QVariant::fromValue(frame_rate_tag::simple()));
combo->addItem(QTStr("Basic.PropertiesView.FPS.Rational"),
});
}
+void OBSPropertiesView::AddGroup(obs_property_t *prop, QFormLayout *layout)
+{
+ const char *name = obs_property_name(prop);
+ bool val = obs_data_get_bool(settings, name);
+ const char *desc = obs_property_description(prop);
+ enum obs_group_type type = obs_property_group_type(prop);
+
+ // Create GroupBox
+ QGroupBox *groupBox = new QGroupBox(QT_UTF8(desc));
+ groupBox->setCheckable(type == OBS_GROUP_CHECKABLE);
+ groupBox->setChecked(groupBox->isCheckable() ? val : true);
+ groupBox->setAccessibleName("group");
+ groupBox->setEnabled(obs_property_enabled(prop));
+
+ // Create Layout and build content
+ QFormLayout *subLayout = new QFormLayout();
+ subLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
+ groupBox->setLayout(subLayout);
+
+ obs_properties_t *content = obs_property_group_content(prop);
+ obs_property_t *el = obs_properties_first(content);
+ while (el != nullptr) {
+ AddProperty(el, subLayout);
+ obs_property_next(&el);
+ }
+
+ // Insert into UI
+ layout->setWidget(layout->rowCount(),
+ QFormLayout::ItemRole::SpanningRole, groupBox);
+
+ // Register Group Widget
+ WidgetInfo *info = new WidgetInfo(this, prop, groupBox);
+ children.emplace_back(info);
+
+ // Signals
+ connect(groupBox, SIGNAL(toggled()), info, SLOT(ControlChanged()));
+}
+
void OBSPropertiesView::AddProperty(obs_property_t *property,
QFormLayout *layout)
{
case OBS_PROPERTY_FRAME_RATE:
AddFrameRate(property, warning, layout, label);
break;
+ case OBS_PROPERTY_GROUP:
+ AddGroup(property, layout);
}
if (widget && !obs_property_enabled(property))
if (!label &&
type != OBS_PROPERTY_BOOL &&
- type != OBS_PROPERTY_BUTTON)
+ type != OBS_PROPERTY_BUTTON &&
+ type != OBS_PROPERTY_GROUP)
label = new QLabel(QT_UTF8(obs_property_description(property)));
if (warning && label) //TODO: select color based on background color
long long val = obs_data_get_int(view->settings, setting);
QColor color = color_from_int(val);
- QColorDialog::ColorDialogOptions options =
- QColorDialog::ShowAlphaChannel;
+ QColorDialog::ColorDialogOptions options = 0;
/* The native dialog on OSX has all kinds of problems, like closing
* other open QDialogs on exit, and
return true;
}
+void WidgetInfo::GroupChanged(const char *setting)
+{
+ QGroupBox *groupbox = static_cast<QGroupBox*>(widget);
+ obs_data_set_bool(view->settings, setting,
+ groupbox->isCheckable() ? groupbox->isChecked() : true);
+}
+
void WidgetInfo::EditableListChanged()
{
const char *setting = obs_property_name(property);
if (!FrameRateChanged(widget, setting, view->settings))
return;
break;
+ case OBS_PROPERTY_GROUP: GroupChanged(setting); return;
}
if (view->callback && !view->deferUpdate)
obs-studio-23.1.0.tar.xz/UI/properties-view.hpp -> obs-studio-23.2.0.tar.xz/UI/properties-view.hpp
Changed
void ListChanged(const char *setting);
bool ColorChanged(const char *setting);
bool FontChanged(const char *setting);
+ void GroupChanged(const char *setting);
void EditableListChanged();
void ButtonClicked();
void AddFrameRate(obs_property_t *prop, bool &warning,
QFormLayout *layout, QLabel *&label);
+ void AddGroup(obs_property_t *prop, QFormLayout *layout);
+
void AddProperty(obs_property_t *property, QFormLayout *layout);
void resizeEvent(QResizeEvent *event) override;
signals:
void PropertiesResized();
void Changed();
+ void PropertiesRefreshed();
public:
OBSPropertiesView(OBSData settings, void *obj,
obs-studio-23.1.0.tar.xz/UI/qt-display.cpp -> obs-studio-23.2.0.tar.xz/UI/qt-display.cpp
Changed
shift(color.alpha(), 24);
}
+static inline QColor rgba_to_color(uint32_t rgba)
+{
+ return QColor::fromRgb(rgba & 0xFF,
+ (rgba >> 8) & 0xFF,
+ (rgba >> 16) & 0xFF,
+ (rgba >> 24) & 0xFF);
+}
OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags)
: QWidget(parent, flags)
connect(windowHandle(), &QWindow::visibleChanged, windowVisible);
connect(windowHandle(), &QWindow::screenChanged, sizeChanged);
+}
- this->setProperty("themeID", "displayBackgroundColor");
+QColor OBSQTDisplay::GetDisplayBackgroundColor() const
+{
+ return rgba_to_color(backgroundColor);
}
void OBSQTDisplay::SetDisplayBackgroundColor(const QColor &color)
{
- backgroundColor = (uint32_t)color_to_int(color);
+ uint32_t newBackgroundColor = (uint32_t)color_to_int(color);
+
+ if (newBackgroundColor != backgroundColor) {
+ backgroundColor = newBackgroundColor;
+ UpdateDisplayBackgroundColor();
+ }
+}
+
+void OBSQTDisplay::UpdateDisplayBackgroundColor()
+{
obs_display_set_background_color(display, backgroundColor);
}
obs-studio-23.1.0.tar.xz/UI/qt-display.hpp -> obs-studio-23.2.0.tar.xz/UI/qt-display.hpp
Changed
#include <QWidget>
#include <obs.hpp>
+#define GREY_COLOR_BACKGROUND 0xFF4C4C4C
+
class OBSQTDisplay : public QWidget {
Q_OBJECT
- Q_PROPERTY(QColor displayBackgroundColor WRITE SetDisplayBackgroundColor
- NOTIFY SetDisplayBackgroundColor)
+ Q_PROPERTY(QColor displayBackgroundColor MEMBER backgroundColor
+ READ GetDisplayBackgroundColor
+ WRITE SetDisplayBackgroundColor)
OBSDisplay display;
void DisplayResized();
public:
- OBSQTDisplay(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+ OBSQTDisplay(QWidget *parent = nullptr,
+ Qt::WindowFlags flags = nullptr);
virtual QPaintEngine *paintEngine() const override;
inline obs_display_t *GetDisplay() const {return display;}
- uint32_t backgroundColor;
+ uint32_t backgroundColor = GREY_COLOR_BACKGROUND;
-private slots:
+ QColor GetDisplayBackgroundColor() const;
void SetDisplayBackgroundColor(const QColor &color);
+ void UpdateDisplayBackgroundColor();
};
obs-studio-23.1.0.tar.xz/UI/qt-wrappers.cpp -> obs-studio-23.2.0.tar.xz/UI/qt-wrappers.cpp
Changed
mb.exec();
}
+void OBSMessageBox::warning(
+ QWidget *parent,
+ const QString &title,
+ const QString &text,
+ bool enableRichText)
+{
+ QMessageBox mb(QMessageBox::Warning,
+ title, text, QMessageBox::Ok,
+ parent);
+ if (enableRichText)
+ mb.setTextFormat(Qt::RichText);
+ mb.setButtonText(QMessageBox::Ok, QTStr("OK"));
+ mb.exec();
+}
+
+void OBSMessageBox::critical(
+ QWidget *parent,
+ const QString &title,
+ const QString &text)
+{
+ QMessageBox mb(QMessageBox::Critical,
+ title, text, QMessageBox::Ok,
+ parent);
+ mb.setButtonText(QMessageBox::Ok, QTStr("OK"));
+ mb.exec();
+}
+
void QTToGSWindow(WId windowId, gs_window &gswindow)
{
#ifdef _WIN32
obs-studio-23.1.0.tar.xz/UI/qt-wrappers.hpp -> obs-studio-23.2.0.tar.xz/UI/qt-wrappers.hpp
Changed
QWidget *parent,
const QString &title,
const QString &text);
+ static void warning(
+ QWidget *parent,
+ const QString &title,
+ const QString &text,
+ bool enableRichText = false);
+ static void critical(
+ QWidget *parent,
+ const QString &title,
+ const QString &text);
};
void OBSErrorBox(QWidget *parent, const char *msg, ...);
obs-studio-23.2.0.tar.xz/UI/slider-ignorewheel.cpp
Added
+#include "slider-ignorewheel.hpp"
+
+SliderIgnoreScroll::SliderIgnoreScroll(QWidget *parent) : QSlider(parent)
+{
+ setFocusPolicy(Qt::StrongFocus);
+}
+
+SliderIgnoreScroll::SliderIgnoreScroll(Qt::Orientation orientation,
+ QWidget *parent)
+ : QSlider(parent)
+{
+ setFocusPolicy(Qt::StrongFocus);
+ setOrientation(orientation);
+}
+
+void SliderIgnoreScroll::wheelEvent(QWheelEvent *event)
+{
+ if (!hasFocus())
+ event->ignore();
+ else
+ QSlider::wheelEvent(event);
+}
obs-studio-23.2.0.tar.xz/UI/slider-ignorewheel.hpp
Added
+#pragma once
+
+#include <QSlider>
+#include <QInputEvent>
+#include <QtCore/QObject>
+
+class SliderIgnoreScroll : public QSlider {
+ Q_OBJECT
+
+public:
+ SliderIgnoreScroll(QWidget *parent = nullptr);
+ SliderIgnoreScroll(Qt::Orientation orientation, QWidget *parent = nullptr);
+
+protected:
+ virtual void wheelEvent(QWheelEvent *event) override;
+};
obs-studio-23.1.0.tar.xz/UI/source-label.hpp -> obs-studio-23.2.0.tar.xz/UI/source-label.hpp
Changed
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
+#pragma once
+
#include <QLabel>
#include <obs.hpp>
obs-studio-23.1.0.tar.xz/UI/source-tree.cpp -> obs-studio-23.2.0.tar.xz/UI/source-tree.cpp
Changed
#include "visibility-checkbox.hpp"
#include "locked-checkbox.hpp"
#include "expand-checkbox.hpp"
+#include "platform.hpp"
#include <obs-frontend-api.h>
#include <obs.h>
vis = new VisibilityCheckBox();
vis->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- vis->setMaximumSize(16, 16);
+ vis->setFixedSize(16, 16);
vis->setChecked(obs_sceneitem_visible(sceneitem));
lock = new LockedCheckBox();
lock->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
- lock->setMaximumSize(16, 16);
+ lock->setFixedSize(16, 16);
lock->setChecked(obs_sceneitem_locked(sceneitem));
label = new QLabel(QT_UTF8(name));
#endif
boxLayout = new QHBoxLayout();
- boxLayout->setContentsMargins(1, 1, 2, 1);
+ boxLayout->setContentsMargins(1, 1, 1, 1);
boxLayout->setSpacing(1);
boxLayout->addWidget(label);
boxLayout->addWidget(vis);
+ boxLayout->setSpacing(2);
boxLayout->addWidget(lock);
#ifdef __APPLE__
/* Hack: Fixes a bug where scrollbars would be above the lock icon */
setFocusPolicy(Qt::StrongFocus);
boxLayout->removeWidget(label);
editor = new QLineEdit(label->text());
+ editor->selectAll();
editor->installEventFilter(this);
boxLayout->insertWidget(1, editor);
setFocusProxy(editor);
"*[bgColor=\"8\"]{background-color:rgba(255,255,255,33%);}"));
setMouseTracking(true);
+
+ UpdateNoSourcesMessage();
+ connect(App(), &OBSApp::StyleChanged,
+ this, &SourceTree::UpdateNoSourcesMessage);
}
void SourceTree::ResetWidgets()
{
GetStm()->AddGroup();
}
+
+void SourceTree::UpdateNoSourcesMessage()
+{
+ std::string darkPath;
+ GetDataFilePath("themes/Dark/no_sources.svg", darkPath);
+
+ QColor color = palette().text().color();
+ bool lightTheme = (color.redF() < 0.5);
+ QString file = lightTheme
+ ? ":res/images/no_sources.svg"
+ : darkPath.c_str();
+ iconNoSources.load(file);
+
+ QTextOption opt(Qt::AlignHCenter);
+ opt.setWrapMode(QTextOption::WordWrap);
+ textNoSources.setTextOption(opt);
+ textNoSources.setText(QTStr("NoSources.Label").replace("\n", "<br/>"));
+
+ textPrepared = false;
+}
+
+void SourceTree::paintEvent(QPaintEvent *event)
+{
+ SourceTreeModel *stm = GetStm();
+ if (stm && !stm->items.count()) {
+ QPainter p(viewport());
+
+ if (!textPrepared) {
+ textNoSources.prepare(QTransform(), p.font());
+ textPrepared = true;
+ }
+
+ QRectF iconRect = iconNoSources.viewBoxF();
+
+ QSizeF iconSize = iconRect.size();
+ QSizeF textSize = textNoSources.size();
+ QSizeF thisSize = size();
+
+ qreal totalHeight = textSize.height() + iconSize.height();
+
+ qreal x = thisSize.width() / 2.0 - textSize.width() / 2.0;
+ qreal y = thisSize.height() / 2.0 - totalHeight / 2.0;
+ p.drawStaticText(x, y, textNoSources);
+
+ x = thisSize.width() / 2.0 - iconSize.width() / 2.0;
+ y += textSize.height();
+ iconRect.moveTo(x, y);
+
+ iconNoSources.render(&p, iconRect);
+ } else {
+ QListView::paintEvent(event);
+ }
+}
obs-studio-23.1.0.tar.xz/UI/source-tree.hpp -> obs-studio-23.2.0.tar.xz/UI/source-tree.hpp
Changed
#include <QPointer>
#include <QListView>
#include <QCheckBox>
+#include <QStaticText>
+#include <QSvgRenderer>
#include <QAbstractListModel>
class QLabel;
friend class SourceTreeModel;
friend class SourceTreeItem;
+ bool textPrepared = false;
+ QStaticText textNoSources;
+ QSvgRenderer iconNoSources;
+
+ void UpdateNoSourcesMessage();
+
void ResetWidgets();
void UpdateWidget(const QModelIndex &idx, obs_sceneitem_t *item);
void UpdateWidgets(bool force = false);
virtual void dropEvent(QDropEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void leaveEvent(QEvent *event) override;
+ virtual void paintEvent(QPaintEvent *event) override;
virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override;
};
obs-studio-23.2.0.tar.xz/UI/spinbox-ignorewheel.cpp
Added
+#include "spinbox-ignorewheel.hpp"
+
+SpinBoxIgnoreScroll::SpinBoxIgnoreScroll(QWidget *parent) : QSpinBox(parent)
+{
+ setFocusPolicy(Qt::StrongFocus);
+}
+
+void SpinBoxIgnoreScroll::wheelEvent(QWheelEvent *event)
+{
+ if (!hasFocus())
+ event->ignore();
+ else
+ QSpinBox::wheelEvent(event);
+}
obs-studio-23.2.0.tar.xz/UI/spinbox-ignorewheel.hpp
Added
+#pragma once
+
+#include <QSpinBox>
+#include <QInputEvent>
+#include <QtCore/QObject>
+
+class SpinBoxIgnoreScroll : public QSpinBox {
+ Q_OBJECT
+
+public:
+ SpinBoxIgnoreScroll(QWidget *parent = nullptr);
+
+protected:
+ virtual void wheelEvent(QWheelEvent *event) override;
+};
obs-studio-23.1.0.tar.xz/UI/ui-config.h.in -> obs-studio-23.2.0.tar.xz/UI/ui-config.h.in
Changed
#define RESTREAM_ENABLED @RESTREAM_ENABLED@
#define RESTREAM_CLIENTID "@RESTREAM_CLIENTID@"
#define RESTREAM_HASH 0x@RESTREAM_HASH@
+
+#define DEFAULT_THEME "Dark"
obs-studio-23.1.0.tar.xz/UI/visibility-checkbox.hpp -> obs-studio-23.2.0.tar.xz/UI/visibility-checkbox.hpp
Changed
-#include <QCheckBox>
-#include <QPixmap>
+#pragma once
-class QPaintEvernt;
+#include <QCheckBox>
class VisibilityCheckBox : public QCheckBox {
Q_OBJECT
-
- QPixmap checkedImage;
- QPixmap uncheckedImage;
-
-public:
- VisibilityCheckBox();
-
-protected:
- void paintEvent(QPaintEvent *event) override;
};
obs-studio-23.1.0.tar.xz/UI/volume-control.cpp -> obs-studio-23.2.0.tar.xz/UI/volume-control.cpp
Changed
#include "qt-wrappers.hpp"
#include "obs-app.hpp"
#include "mute-checkbox.hpp"
+#include "slider-ignorewheel.hpp"
#include "slider-absoluteset-style.hpp"
#include <QFontDatabase>
#include <QHBoxLayout>
#include <QPushButton>
-#include <QSlider>
#include <QLabel>
#include <QPainter>
#include <QStyleFactory>
using namespace std;
#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
+#define FADER_PRECISION 4096.0
QWeakPointer<VolumeMeterTimer> VolumeMeter::updateTimer;
void VolControl::VolumeChanged()
{
slider->blockSignals(true);
- slider->setValue((int) (obs_fader_get_deflection(obs_fader) * 100.0f));
+ slider->setValue((int) (obs_fader_get_deflection(obs_fader) *
+ FADER_PRECISION));
slider->blockSignals(false);
updateText();
void VolControl::SliderChanged(int vol)
{
- obs_fader_set_deflection(obs_fader, float(vol) * 0.01f);
+ obs_fader_set_deflection(obs_fader, float(vol) / FADER_PRECISION);
updateText();
}
: source (std::move(source_)),
levelTotal (0.0f),
levelCount (0.0f),
- obs_fader (obs_fader_create(OBS_FADER_CUBIC)),
+ obs_fader (obs_fader_create(OBS_FADER_LOG)),
obs_volmeter (obs_volmeter_create(OBS_FADER_LOG)),
vertical (vertical)
{
nameLabel = new QLabel();
volLabel = new QLabel();
mute = new MuteCheckBox();
+
QString sourceName = obs_source_get_name(source);
setObjectName(sourceName);
QHBoxLayout *meterLayout = new QHBoxLayout;
volMeter = new VolumeMeter(nullptr, obs_volmeter, true);
- slider = new QSlider(Qt::Vertical);
+ slider = new SliderIgnoreScroll(Qt::Vertical);
nameLayout->setAlignment(Qt::AlignCenter);
meterLayout->setAlignment(Qt::AlignCenter);
mainLayout->addItem(meterLayout);
mainLayout->addItem(controlLayout);
+ volMeter->setFocusProxy(slider);
+
setMaximumWidth(110);
} else {
QHBoxLayout *volLayout = new QHBoxLayout;
QHBoxLayout *botLayout = new QHBoxLayout;
volMeter = new VolumeMeter(nullptr, obs_volmeter, false);
- slider = new QSlider(Qt::Horizontal);
+ slider = new SliderIgnoreScroll(Qt::Horizontal);
textLayout->setContentsMargins(0, 0, 0, 0);
textLayout->addWidget(nameLabel);
mainLayout->addItem(textLayout);
mainLayout->addWidget(volMeter);
mainLayout->addItem(botLayout);
+
+ volMeter->setFocusProxy(slider);
}
setLayout(mainLayout);
nameLabel->setText(sourceName);
nameLabel->setFont(font);
volLabel->setFont(font);
+
slider->setMinimum(0);
- slider->setMaximum(100);
+ slider->setMaximum(int(FADER_PRECISION));
bool muted = obs_source_muted(source);
mute->setChecked(muted);
}
}
+void VolumeMeter::mousePressEvent(QMouseEvent *event)
+{
+ setFocus(Qt::MouseFocusReason);
+}
+
+void VolumeMeter::wheelEvent(QWheelEvent *event)
+{
+ QApplication::sendEvent(focusProxy(), event);
+}
+
VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
bool vertical)
: QWidget(parent), obs_volmeter(obs_volmeter),
obs-studio-23.1.0.tar.xz/UI/volume-control.hpp -> obs-studio-23.2.0.tar.xz/UI/volume-control.hpp
Changed
qreal getInputPeakHoldDuration() const;
void setInputPeakHoldDuration(qreal v);
void setPeakMeterType(enum obs_peak_meter_type peakMeterType);
+ virtual void mousePressEvent(QMouseEvent *event) override;
+ virtual void wheelEvent(QWheelEvent *event) override;
protected:
void paintEvent(QPaintEvent *event) override;
obs-studio-23.1.0.tar.xz/UI/win-update/updater/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/UI/win-update/updater/CMakeLists.txt
Changed
http.cpp
hash.cpp
updater.rc
+ updater.manifest
)
add_definitions(-DNOMINMAX -DUNICODE -D_UNICODE)
obs-studio-23.1.0.tar.xz/UI/win-update/updater/updater.cpp -> obs-studio-23.2.0.tar.xz/UI/win-update/updater/updater.cpp
Changed
SetDlgItemTextW(hwndMain, IDC_STATUS,
L"Searching for available updates...");
+ HWND hProgress = GetDlgItem(hwndMain, IDC_PROGRESS);
+ LONG_PTR style = GetWindowLongPtr(hProgress, GWL_STYLE);
+ SetWindowLongPtr(hProgress, GWL_STYLE, style | PBS_MARQUEE);
+
+ SendDlgItemMessage(hwndMain, IDC_PROGRESS, PBM_SETMARQUEE, 1, 0);
+
/* ------------------------------------- *
* Check if updating portable build */
for (size_t i = 0; i < packageCount; i++) {
if (!AddPackageUpdateFiles(packages, i, tempPath)) {
- Status(L"Failed to process update packages");
+ Status(L"Update failed: Failed to process update packages");
return false;
}
}
+ SendDlgItemMessage(hwndMain, IDC_PROGRESS, PBM_SETMARQUEE, 0, 0);
+ SetWindowLongPtr(hProgress, GWL_STYLE, style);
+
/* ------------------------------------- *
* Exit if updates already installed */
if (!updates.size()) {
Status(L"All available updates are already installed.");
+ SetDlgItemText(hwndMain, IDC_BUTTON, L"Launch OBS");
return true;
}
if (WaitForSingleObject(cancelRequested, 0) == WAIT_OBJECT_0)
Status(L"Update aborted.");
- SendDlgItemMessage(hwndMain, IDC_PROGRESS, PBM_SETSTATE,
- PBST_ERROR, 0);
+ HWND hProgress = GetDlgItem(hwndMain, IDC_PROGRESS);
+ LONG_PTR style = GetWindowLongPtr(hProgress, GWL_STYLE);
+ SetWindowLongPtr(hProgress, GWL_STYLE, style & ~PBS_MARQUEE);
+ SendMessage(hProgress, PBM_SETSTATE, PBST_ERROR, 0);
SetDlgItemText(hwndMain, IDC_BUTTON, L"Exit");
EnableWindow(GetDlgItem(hwndMain, IDC_BUTTON), true);
obs-studio-23.2.0.tar.xz/UI/win-update/updater/updater.manifest
Added
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
+
+<asmv3:application>
+ <asmv3:windowsSettings xmlns="https://schemas.microsoft.com/SMI/2005/WindowsSettings">
+ <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">system</dpiAwareness>
+ <dpiAware>true</dpiAware>
+ </asmv3:windowsSettings>
+</asmv3:application>
+
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <!-- Windows 10 -->
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+ <!-- Windows 8.1 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <!-- Windows Vista -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+ <!-- Windows 7 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+ <!-- Windows 8 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+ </application>
+</compatibility>
+</assembly>
\ No newline at end of file
obs-studio-23.1.0.tar.xz/UI/window-basic-about.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-about.cpp
Changed
#include "window-basic-about.hpp"
#include "window-basic-main.hpp"
#include "qt-wrappers.hpp"
-#include <string>
+#include "remote-text.hpp"
#include <util/util.hpp>
#include <util/platform.h>
#include <platform.hpp>
+#include <json11.hpp>
+
+using namespace json11;
OBSAbout::OBSAbout(QWidget *parent)
: QDialog(parent),
{
ui->setupUi(this);
- setFixedSize(size());
-
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QString bitness;
+ QString ver;
if(sizeof(void*) == 4)
bitness = " (32 bit)";
else if(sizeof(void*) == 8)
bitness = " (64 bit)";
- ui->version->setText(
- QString::number(LIBOBS_API_MAJOR_VER) + "." +
- QString::number(LIBOBS_API_MINOR_VER) + "." +
- QString::number(LIBOBS_API_PATCH_VER) +
- bitness);
+#ifdef HAVE_OBSCONFIG_H
+ ver += OBS_VERSION;
+#else
+ ver += LIBOBS_API_MAJOR_VER + "." +
+ LIBOBS_API_MINOR_VER + "." +
+ LIBOBS_API_PATCH_VER;
+#endif
+
+ ui->version->setText(ver + bitness);
ui->contribute->setText(QTStr("About.Contribute"));
- ui->donate->setText("<a href='https://obsproject.com/donate'>" +
+ ui->donate->setText(" <a href='https://obsproject.com/donate'>" +
QTStr("About.Donate") + "</a>");
ui->donate->setTextInteractionFlags(Qt::TextBrowserInteraction);
ui->donate->setOpenExternalLinks(true);
- ui->getInvolved->setText("<a href='https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst'>" +
+ ui->getInvolved->setText(" <a href='https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst'>" +
QTStr("About.GetInvolved") + "</a>");
ui->getInvolved->setTextInteractionFlags(Qt::TextBrowserInteraction);
ui->getInvolved->setOpenExternalLinks(true);
ui->authors->setText("<a href='#'>" + QTStr("About.Authors") + "</a>");
ui->license->setText("<a href='#'>" + QTStr("About.License") + "</a>");
- ui->textBrowser->hide();
-
ui->name->setProperty("themeID", "aboutName");
ui->version->setProperty("themeID", "aboutVersion");
ui->about->setProperty("themeID", "aboutHLayout");
connect(ui->about, SIGNAL(clicked()), this, SLOT(ShowAbout()));
connect(ui->authors, SIGNAL(clicked()), this, SLOT(ShowAuthors()));
connect(ui->license, SIGNAL(clicked()), this, SLOT(ShowLicense()));
+
+ QPointer<OBSAbout> about(this);
+
+ OBSBasic *main = OBSBasic::Get();
+ if (main->patronJson.empty() && !main->patronJsonThread) {
+ RemoteTextThread *thread = new RemoteTextThread(
+ "https://obsproject.com/patreon/about-box.json",
+ "application/json");
+ QObject::connect(thread, &RemoteTextThread::Result,
+ main, &OBSBasic::UpdatePatronJson);
+ QObject::connect(thread, SIGNAL(Result(const QString &, const QString &)),
+ this, SLOT(ShowAbout()));
+ main->patronJsonThread.reset(thread);
+ thread->start();
+ } else {
+ ShowAbout();
+ }
}
void OBSAbout::ShowAbout()
{
- ui->textBrowser->hide();
- ui->info->show();
- ui->contribute->show();
- ui->donate->show();
- ui->getInvolved->show();
+ OBSBasic *main = OBSBasic::Get();
+
+ if (main->patronJson.empty())
+ return;
+
+ std::string error;
+ Json json = Json::parse(main->patronJson, error);
+ const Json::array &patrons = json.array_items();
+ QString text;
+
+ text += "<h1>Top Patreon contributors:</h1>";
+ text += "<p style=\"font-size:16px;\">";
+ bool first = true;
+ bool top = true;
+
+ for (const Json &patron : patrons) {
+ std::string name = patron["name"].string_value();
+ std::string link = patron["link"].string_value();
+ int amount = patron["amount"].int_value();
+
+ if (top && amount < 10000) {
+ text += "</p>";
+ top = false;
+ } else if (!first) {
+ text += "<br/>";
+ }
+
+ if (!link.empty()) {
+ text += "<a href=\"";
+ text += QT_UTF8(link.c_str()).toHtmlEscaped();
+ text += "\">";
+ }
+ text += QT_UTF8(name.c_str()).toHtmlEscaped();
+ if (!link.empty())
+ text += "</a>";
+
+ if (first)
+ first = false;
+ }
+
+ ui->textBrowser->setHtml(text);
}
void OBSAbout::ShowAuthors()
}
ui->textBrowser->setPlainText(QT_UTF8(text));
-
- ui->info->hide();
- ui->contribute->hide();
- ui->donate->hide();
- ui->getInvolved->hide();
- ui->textBrowser->show();
}
void OBSAbout::ShowLicense()
}
ui->textBrowser->setPlainText(QT_UTF8(text));
-
- ui->info->hide();
- ui->contribute->hide();
- ui->donate->hide();
- ui->getInvolved->hide();
- ui->textBrowser->show();
}
obs-studio-23.1.0.tar.xz/UI/window-basic-about.hpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-about.hpp
Changed
public:
explicit OBSAbout(QWidget *parent = 0);
-private:
std::unique_ptr<Ui::OBSAbout> ui;
private slots:
obs-studio-23.1.0.tar.xz/UI/window-basic-filters.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-filters.cpp
Changed
return;
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
AddNewFilter(id);
existing_filter = obs_source_get_filter_by_name(source,
name.c_str());
if (existing_filter) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
obs_source_release(existing_filter);
obs-studio-23.1.0.tar.xz/UI/window-basic-main-dropfiles.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-dropfiles.cpp
Changed
if (mimeData->hasUrls()) {
QList<QUrl> urls = mimeData->urls();
- for (int i = 0; i < urls.size() && i < 5; i++) {
+ for (int i = 0; i < urls.size(); i++) {
QString file = urls.at(i).toLocalFile();
QFileInfo fileInfo(file);
obs-studio-23.1.0.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-outputs.cpp
Changed
output->delayActive = false;
os_atomic_set_bool(&streaming_active, false);
QMetaObject::invokeMethod(output->main,
- "StreamingStop", Q_ARG(int, code), Q_ARG(QString, arg_last_error));
+ "StreamingStop", Q_ARG(int, code),
+ Q_ARG(QString, arg_last_error));
}
static void OBSStartRecording(void *data, calldata_t *params)
{
BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
int code = (int)calldata_int(params, "code");
+ const char *last_error = calldata_string(params, "last_error");
+
+ QString arg_last_error = QString::fromUtf8(last_error);
output->recordingActive = false;
os_atomic_set_bool(&recording_active, false);
QMetaObject::invokeMethod(output->main,
- "RecordingStop", Q_ARG(int, code));
+ "RecordingStop", Q_ARG(int, code),
+ Q_ARG(QString, arg_last_error));
UNUSED_PARAMETER(params);
}
obs_output_get_signal_handler(streamOutput),
"stop", OBSStopStreaming, this);
- const char *codec =
- obs_output_get_supported_audio_codecs(streamOutput);
- if (!codec) {
- return false;
- }
+ bool isEncoded = obs_output_get_flags(streamOutput)
+ & OBS_OUTPUT_ENCODED;
- if (strcmp(codec, "aac") != 0) {
- const char *id = FindAudioEncoderFromCodec(codec);
- int audioBitrate = GetAudioBitrate();
- obs_data_t *settings = obs_data_create();
- obs_data_set_int(settings, "bitrate", audioBitrate);
-
- aacStreaming = obs_audio_encoder_create(id,
- "alt_audio_enc", nullptr, 0, nullptr);
- obs_encoder_release(aacStreaming);
- if (!aacStreaming)
+ if (isEncoded) {
+ const char *codec =
+ obs_output_get_supported_audio_codecs(
+ streamOutput);
+ if (!codec) {
+ blog(LOG_WARNING, "Failed to load audio codec");
return false;
+ }
- obs_encoder_update(aacStreaming, settings);
- obs_encoder_set_audio(aacStreaming, obs_get_audio());
-
- obs_data_release(settings);
+ if (strcmp(codec, "aac") != 0) {
+ const char *id = FindAudioEncoderFromCodec(
+ codec);
+ int audioBitrate = GetAudioBitrate();
+ obs_data_t *settings = obs_data_create();
+ obs_data_set_int(settings, "bitrate",
+ audioBitrate);
+
+ aacStreaming = obs_audio_encoder_create(id,
+ "alt_audio_enc", nullptr, 0,
+ nullptr);
+ obs_encoder_release(aacStreaming);
+ if (!aacStreaming)
+ return false;
+
+ obs_encoder_update(aacStreaming, settings);
+ obs_encoder_set_audio(aacStreaming,
+ obs_get_audio());
+
+ obs_data_release(settings);
+ }
}
outputType = type;
}
const char *error = obs_output_get_last_error(streamOutput);
- bool has_last_error = error && *error;
+ bool hasLastError = error && *error;
+ if (hasLastError)
+ lastError = error;
+ else
+ lastError = string();
- blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s",
- type,
- has_last_error ? " Last Error: " : "",
- has_last_error ? error : "");
+ blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
+ hasLastError ? " Last Error: " : "",
+ hasLastError ? error : "");
return false;
}
if (!dir) {
if (main->isVisible())
- OBSMessageBox::information(main,
+ OBSMessageBox::warning(main,
QTStr("Output.BadPath.Title"),
QTStr("Output.BadPath.Text"));
else
obs_output_get_signal_handler(streamOutput),
"stop", OBSStopStreaming, this);
- const char *codec =
- obs_output_get_supported_audio_codecs(streamOutput);
- if (!codec) {
- return false;
- }
+ bool isEncoded = obs_output_get_flags(streamOutput)
+ & OBS_OUTPUT_ENCODED;
- if (strcmp(codec, "aac") == 0) {
- streamAudioEnc = aacTrack[trackIndex - 1];
- } else {
- const char *id = FindAudioEncoderFromCodec(codec);
- int audioBitrate = GetAudioBitrate(trackIndex - 1);
- obs_data_t *settings = obs_data_create();
- obs_data_set_int(settings, "bitrate", audioBitrate);
-
- streamAudioEnc = obs_audio_encoder_create(id,
- "alt_audio_enc", nullptr,
- trackIndex - 1, nullptr);
- if (!streamAudioEnc)
+ if (isEncoded) {
+ const char *codec =
+ obs_output_get_supported_audio_codecs(
+ streamOutput);
+ if (!codec) {
+ blog(LOG_WARNING, "Failed to load audio codec");
return false;
+ }
- obs_encoder_update(streamAudioEnc, settings);
- obs_encoder_set_audio(streamAudioEnc, obs_get_audio());
-
- obs_data_release(settings);
+ if (strcmp(codec, "aac") == 0) {
+ streamAudioEnc = aacTrack[trackIndex - 1];
+ } else {
+ obs_data_t *settings = obs_data_create();
+ const char *id =
+ FindAudioEncoderFromCodec(codec);
+ int audioBitrate =
+ GetAudioBitrate(trackIndex - 1);
+
+ obs_data_set_int(settings, "bitrate",
+ audioBitrate);
+ streamAudioEnc = obs_audio_encoder_create(id,
+ "alt_audio_enc", nullptr,
+ trackIndex - 1, nullptr);
+
+ if (!streamAudioEnc)
+ return false;
+
+ obs_encoder_update(streamAudioEnc, settings);
+ obs_encoder_set_audio(streamAudioEnc,
+ obs_get_audio());
+
+ obs_data_release(settings);
+ }
}
outputType = type;
}
const char *error = obs_output_get_last_error(streamOutput);
- bool has_last_error = error && *error;
+ bool hasLastError = error && *error;
+ if (hasLastError)
+ lastError = error;
+ else
+ lastError = string();
- blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s",
- type,
- has_last_error ? " Last Error: " : "",
- has_last_error ? error : "");
+ blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type,
+ hasLastError ? " Last Error: " : "",
+ hasLastError ? error : "");
return false;
}
if (!dir) {
if (main->isVisible())
- OBSMessageBox::information(main,
+ OBSMessageBox::warning(main,
QTStr("Output.BadPath.Title"),
QTStr("Output.BadPath.Text"));
else
if (!dir) {
if (main->isVisible())
- OBSMessageBox::information(main,
+ OBSMessageBox::warning(main,
QTStr("Output.BadPath.Title"),
QTStr("Output.BadPath.Text"));
else
obs-studio-23.1.0.tar.xz/UI/window-basic-main-outputs.hpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-outputs.hpp
Changed
OBSBasic *main;
std::string outputType;
+ std::string lastError;
OBSSignal startRecording;
OBSSignal stopRecording;
obs-studio-23.1.0.tar.xz/UI/window-basic-main-profiles.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-profiles.cpp
Changed
return false;
}
if (name.empty()) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
continue;
}
if (ProfileExists(name.c_str())) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
continue;
profileDir + "/recordEncoder.json");
RefreshProfiles();
} else {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("Basic.MainMenu.Profile.Import"),
QTStr("Basic.MainMenu.Profile.Exists"));
}
obs-studio-23.1.0.tar.xz/UI/window-basic-main-scene-collections.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-scene-collections.cpp
Changed
return false;
}
if (name.empty()) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
continue;
}
if (SceneCollectionExists(name.c_str())) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
continue;
obs-studio-23.1.0.tar.xz/UI/window-basic-main-transitions.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main-transitions.cpp
Changed
if (accepted) {
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
AddTransition();
source = FindTransition(name.c_str());
if (source) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
if (accepted) {
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
RenameTransition();
source = FindTransition(name.c_str());
if (source) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
RefreshQuickTransitions();
programLabel = new QLabel(QTStr("StudioMode.Program"));
- programLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
+ programLabel->setSizePolicy(QSizePolicy::Preferred,
+ QSizePolicy::Preferred);
+ programLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
programLabel->setProperty("themeID", "previewProgramLabels");
programWidget = new QWidget();
programLayout = new QVBoxLayout();
programLayout->setContentsMargins(0, 0, 0, 0);
+ programLayout->setSpacing(0);
programLayout->addWidget(programLabel);
programLayout->addWidget(program);
void OBSBasic::RenderProgram(void *data, uint32_t cx, uint32_t cy)
{
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "RenderProgram");
+
OBSBasic *window = static_cast<OBSBasic*>(data);
obs_video_info ovi;
gs_projection_pop();
gs_viewport_pop();
+ GS_DEBUG_MARKER_END();
+
UNUSED_PARAMETER(cx);
UNUSED_PARAMETER(cy);
}
obs-studio-23.1.0.tar.xz/UI/window-basic-main.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main.cpp
Changed
ui->scenes->setAttribute(Qt::WA_MacShowFocusRect, false);
ui->sources->setAttribute(Qt::WA_MacShowFocusRect, false);
+ ui->scenes->setItemDelegate(new SceneRenameDelegate(ui->scenes));
+
auto displayResize = [this]() {
struct obs_video_info ovi;
QPoint newPos = curPos + statsDockPos;
statsDock->move(newPos);
- ui->previewLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->previewLabel->setProperty("themeID", "previewProgramLabels");
bool labels = config_get_bool(GetGlobalConfig(),
blog(LOG_INFO, "%s- filter: '%s' (%s)", indent.c_str(), name, id);
}
-static bool LogSceneItem(obs_scene_t*, obs_sceneitem_t *item, void*)
+static bool LogSceneItem(obs_scene_t*, obs_sceneitem_t *item, void *v_val)
{
obs_source_t *source = obs_sceneitem_get_source(item);
const char *name = obs_source_get_name(source);
const char *id = obs_source_get_id(source);
+ int indent_count = (int)(intptr_t)v_val;
+ string indent;
+
+ for (int i = 0; i < indent_count; i++)
+ indent += " ";
- blog(LOG_INFO, " - source: '%s' (%s)", name, id);
+ blog(LOG_INFO, "%s- source: '%s' (%s)", indent.c_str(), name, id);
obs_monitoring_type monitoring_type =
obs_source_get_monitoring_type(source);
? "monitor only"
: "monitor and output";
- blog(LOG_INFO, " - monitoring: %s", type);
+ blog(LOG_INFO, " %s- monitoring: %s", indent.c_str(), type);
}
-
- obs_source_enum_filters(source, LogFilter, (void*)(intptr_t)2);
+ int child_indent = 1 + indent_count;
+ obs_source_enum_filters(source, LogFilter, (void*)(intptr_t)child_indent);
+ if (obs_sceneitem_is_group(item))
+ obs_sceneitem_group_enum_items(item, LogSceneItem, (void*)(intptr_t)child_indent);
return true;
}
const char *name = obs_source_get_name(source);
blog(LOG_INFO, "- scene '%s':", name);
- obs_scene_enum_items(scene, LogSceneItem, nullptr);
+ obs_scene_enum_items(scene, LogSceneItem, (void*)(intptr_t)1);
obs_source_enum_filters(source, LogFilter, (void*)(intptr_t)1);
}
opt_start_replaybuffer = false;
}
+ copyString = nullptr;
+ copyFiltersString = nullptr;
+
LogScenes();
disableSaving--;
SET_VISIBILITY("ShowStatusBar", toggleStatusBar);
#undef SET_VISIBILITY
-#ifndef __APPLE__
{
ProfileScope("OBSBasic::Load");
disableSaving--;
Load(savePath);
disableSaving++;
}
-#endif
TimedCheckForUpdates();
loaded = true;
}
#endif
-#ifndef __APPLE__
RefreshSceneCollections();
-#endif
RefreshProfiles();
disableSaving--;
ui->actionCheckForUpdates = nullptr;
#endif
+ OnFirstLoad();
+
#ifdef __APPLE__
- /* This is an incredibly unpleasant hack for macOS to isolate CEF
- * initialization until after all tasks related to Qt startup and main
- * window initialization have completed. There is a macOS-specific bug
- * within either CEF and/or Qt that can cause a crash if both Qt and
- * CEF are loading at the same time.
- *
- * CEF will typically load fine after about two iterations from this
- * point, and all Qt tasks are typically fully completed after about
- * four or five iterations, but to be "ultra" safe, an arbitrarily
- * large number such as 10 is used. This hack is extremely unpleasant,
- * but is worth doing instead of being forced to isolate the entire
- * browser plugin in to a separate process as before.
- *
- * Again, this hack is specific to macOS only. Fortunately, on other
- * operating systems, such issues do not occur. */
- QMetaObject::invokeMethod(this, "DeferredLoad",
+ QMetaObject::invokeMethod(this, "DeferredSysTrayLoad",
Qt::QueuedConnection,
- Q_ARG(QString, QT_UTF8(savePath)),
Q_ARG(int, 10));
-#else
- OnFirstLoad();
#endif
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_FINISHED_LOADING);
-#ifdef BROWSER_AVAILABLE
+#if defined(BROWSER_AVAILABLE) && defined(_WIN32)
/* Attempt to load init screen if available */
if (cef) {
WhatsNewInfoThread *wnit = new WhatsNewInfoThread();
Auth::Load();
}
-void OBSBasic::DeferredLoad(const QString &file, int requeueCount)
+void OBSBasic::DeferredSysTrayLoad(int requeueCount)
{
if (--requeueCount > 0) {
- QMetaObject::invokeMethod(this, "DeferredLoad",
+ QMetaObject::invokeMethod(this, "DeferredSysTrayLoad",
Qt::QueuedConnection,
- Q_ARG(QString, file),
Q_ARG(int, requeueCount));
return;
}
- Load(QT_TO_UTF8(file));
- RefreshSceneCollections();
- OnFirstLoad();
-
/* Minimizng to tray on initial startup does not work on mac
* unless it is done in the deferred load */
SystemTray(true);
this, this);
LoadHotkeyPair(replayBufHotkeys,
"OBSBasic.StartReplayBuffer", "OBSBasic.StopReplayBuffer");
+
+ togglePreviewHotkeys = obs_hotkey_pair_register_frontend(
+ "OBSBasic.EnablePreview",
+ Str("Basic.Main.PreviewConextMenu.Enable"),
+ "OBSBasic.DisablePreview",
+ Str("Basic.Main.Preview.Disable"),
+ MAKE_CALLBACK(!basic.previewEnabled,
+ basic.EnablePreview, "Enabling preview"),
+ MAKE_CALLBACK(basic.previewEnabled,
+ basic.DisablePreview, "Disabling preview"),
+ this, this);
+ LoadHotkeyPair(togglePreviewHotkeys,
+ "OBSBasic.EnablePreview", "OBSBasic.DisablePreview");
#undef MAKE_CALLBACK
auto togglePreviewProgram = [] (void *data, obs_hotkey_id,
obs_hotkey_pair_unregister(streamingHotkeys);
obs_hotkey_pair_unregister(recordingHotkeys);
obs_hotkey_pair_unregister(replayBufHotkeys);
+ obs_hotkey_pair_unregister(togglePreviewHotkeys);
obs_hotkey_unregister(forceStreamingStopHotkey);
obs_hotkey_unregister(togglePreviewProgramHotkey);
obs_hotkey_unregister(transitionHotkey);
return;
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
continue;
obs_source_release(sourceTest);
if (sourceTest) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
continue;
return;
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
continue;
obs_source_t *source = obs_get_source_by_name(name.c_str());
if (source) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
if (!box)
return;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawBackdrop");
+
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
gs_eparam_t *color = gs_effect_get_param_by_name(solid, "color");
gs_technique_t *tech = gs_effect_get_technique(solid, "Solid");
gs_technique_end(tech);
gs_load_vertexbuffer(nullptr);
+
+ GS_DEBUG_MARKER_END();
}
void OBSBasic::RenderMain(void *data, uint32_t cx, uint32_t cy)
{
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "RenderMain");
+
OBSBasic *window = static_cast<OBSBasic*>(data);
obs_video_info ovi;
gs_viewport_push();
gs_projection_push();
- QSize previewSize = GetPixelSize(window->ui->preview);
- float right = float(previewSize.width()) - window->previewX;
- float bottom = float(previewSize.height()) - window->previewY;
+ obs_display_t *display = window->ui->preview->GetDisplay();
+ uint32_t width, height;
+ obs_display_size(display, &width, &height);
+ float right = float(width) - window->previewX;
+ float bottom = float(height) - window->previewY;
gs_ortho(-window->previewX, right,
-window->previewY, bottom,
window->DrawBackdrop(float(ovi.base_width), float(ovi.base_height));
-
if (window->IsPreviewProgramMode()) {
OBSScene scene = window->GetCurrentScene();
obs_source_t *source = obs_scene_get_source(scene);
gs_projection_pop();
gs_viewport_pop();
+ GS_DEBUG_MARKER_END();
+
UNUSED_PARAMETER(cx);
UNUSED_PARAMETER(cy);
}
service = newService;
}
+int OBSBasic::GetTransitionDuration()
+{
+ return ui->transitionDuration->value();
+}
+
bool OBSBasic::StreamingActive() const
{
if (!outputHandler)
this, SLOT(on_actionAddScene_triggered()));
if (item) {
+ QAction *pasteFilters = new QAction(
+ QTStr("Paste.Filters"), this);
+ pasteFilters->setEnabled(copyFiltersString);
+ connect(pasteFilters, SIGNAL(triggered()), this,
+ SLOT(ScenePasteFilters()));
+
popup.addSeparator();
popup.addAction(QTStr("Duplicate"),
this, SLOT(DuplicateSelectedScene()));
+ popup.addAction(QTStr("Copy.Filters"),
+ this, SLOT(SceneCopyFilters()));
+ popup.addAction(pasteFilters);
+ popup.addSeparator();
popup.addAction(QTStr("Rename"),
this, SLOT(EditSceneName()));
popup.addAction(QTStr("Remove"),
if (accepted) {
if (name.empty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
on_actionAddScene_triggered();
obs_source_t *source = obs_get_source_by_name(name.c_str());
if (source) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
ui->menuLogFiles->setEnabled(true);
if (text.isEmpty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::critical(this,
QTStr("LogReturnDialog.ErrorUploadingLog"),
error);
return;
listItem->setText(QT_UTF8(prevName));
if (foundSource) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NameExists.Title"),
QTStr("NameExists.Text"));
} else if (name.empty()) {
- OBSMessageBox::information(parent,
+ OBSMessageBox::warning(parent,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
}
}
if (!outputHandler->StartStreaming(service)) {
+ QString message = !outputHandler->lastError.empty()
+ ? QTStr(outputHandler->lastError.c_str())
+ : QTStr("Output.StartFailedGeneric");
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
ui->streamButton->setEnabled(true);
ui->streamButton->setChecked(false);
sysTrayStream->setEnabled(true);
}
- QMessageBox::critical(this,
- QTStr("Output.StartStreamFailed"),
- QTStr("Output.StartFailedGeneric"));
+ QMessageBox::critical(this, QTStr("Output.StartStreamFailed"),
+ message);
return;
}
void OBSBasic::StreamingStop(int code, QString last_error)
{
- const char *errorDescription;
+ const char *errorDescription = "";
DStr errorMessage;
bool use_last_error = false;
+ bool encode_error = false;
switch (code) {
case OBS_OUTPUT_BAD_PATH:
errorDescription = Str("Output.ConnectFail.InvalidStream");
break;
+ case OBS_OUTPUT_ENCODE_ERROR:
+ encode_error = true;
+ break;
+
default:
case OBS_OUTPUT_ERROR:
use_last_error = true;
blog(LOG_INFO, STREAMING_STOP);
- if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
+ if (encode_error) {
+ OBSMessageBox::information(this,
+ QTStr("Output.StreamEncodeError.Title"),
+ QTStr("Output.StreamEncodeError.Msg"));
+
+ } else if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
OBSMessageBox::information(this,
QTStr("Output.ConnectFail.Title"),
QT_UTF8(errorMessage));
+
} else if (code != OBS_OUTPUT_SUCCESS && !isVisible()) {
SysTrayNotify(QT_UTF8(errorDescription), QSystemTrayIcon::Warning);
}
blog(LOG_INFO, RECORDING_START);
}
-void OBSBasic::RecordingStop(int code)
+void OBSBasic::RecordingStop(int code, QString last_error)
{
ui->statusbar->RecordingStopped();
ui->recordButton->setText(QTStr("Basic.Main.StartRecording"));
blog(LOG_INFO, RECORDING_STOP);
if (code == OBS_OUTPUT_UNSUPPORTED && isVisible()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::critical(this,
QTStr("Output.RecordFail.Title"),
QTStr("Output.RecordFail.Unsupported"));
+ } else if (code == OBS_OUTPUT_ENCODE_ERROR && isVisible()) {
+ OBSMessageBox::warning(this,
+ QTStr("Output.RecordError.Title"),
+ QTStr("Output.RecordError.EncodeErrorMsg"));
+
} else if (code == OBS_OUTPUT_NO_SPACE && isVisible()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("Output.RecordNoSpace.Title"),
QTStr("Output.RecordNoSpace.Msg"));
} else if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
- OBSMessageBox::information(this,
+
+ const char *errorDescription;
+ DStr errorMessage;
+ bool use_last_error = true;
+
+ errorDescription = Str("Output.RecordError.Msg");
+
+ if (use_last_error && !last_error.isEmpty())
+ dstr_printf(errorMessage, "%s\n\n%s", errorDescription,
+ QT_TO_UTF8(last_error));
+ else
+ dstr_copy(errorMessage, errorDescription);
+
+ OBSMessageBox::critical(this,
QTStr("Output.RecordError.Title"),
- QTStr("Output.RecordError.Msg"));
+ QT_UTF8(errorMessage));
} else if (code == OBS_OUTPUT_UNSUPPORTED && !isVisible()) {
SysTrayNotify(QTStr("Output.RecordFail.Unsupported"),
blog(LOG_INFO, REPLAY_BUFFER_STOP);
if (code == OBS_OUTPUT_UNSUPPORTED && isVisible()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::critical(this,
QTStr("Output.RecordFail.Title"),
QTStr("Output.RecordFail.Unsupported"));
} else if (code == OBS_OUTPUT_NO_SPACE && isVisible()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("Output.RecordNoSpace.Title"),
QTStr("Output.RecordNoSpace.Msg"));
} else if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::critical(this,
QTStr("Output.RecordError.Title"),
QTStr("Output.RecordError.Msg"));
&boundsType);
}
-static bool center_to_scene(obs_scene_t *, obs_sceneitem_t *item, void *)
+enum class CenterType {
+ Scene,
+ Vertical,
+ Horizontal
+};
+
+static bool center_to_scene(obs_scene_t *, obs_sceneitem_t *item, void *param)
{
+ CenterType centerType = *reinterpret_cast<CenterType*>(param);
+
vec3 tl, br, itemCenter, screenCenter, offset;
obs_video_info ovi;
+ obs_transform_info oti;
if (obs_sceneitem_is_group(item))
- obs_sceneitem_group_enum_items(item, center_to_scene, nullptr);
+ obs_sceneitem_group_enum_items(item, center_to_scene,
+ ¢erType);
if (!obs_sceneitem_selected(item))
return true;
obs_get_video_info(&ovi);
+ obs_sceneitem_get_info(item, &oti);
+
+ if (centerType == CenterType::Scene)
+ vec3_set(&screenCenter, float(ovi.base_width),
+ float(ovi.base_height), 0.0f);
+ else if (centerType == CenterType::Vertical)
+ vec3_set(&screenCenter, float(oti.bounds.x),
+ float(ovi.base_height), 0.0f);
+ else if (centerType == CenterType::Horizontal)
+ vec3_set(&screenCenter, float(ovi.base_width),
+ float(oti.bounds.y), 0.0f);
- vec3_set(&screenCenter, float(ovi.base_width),
- float(ovi.base_height), 0.0f);
vec3_mulf(&screenCenter, &screenCenter, 0.5f);
GetItemBox(item, tl, br);
vec3_sub(&offset, &screenCenter, &itemCenter);
vec3_add(&tl, &tl, &offset);
+ if (centerType == CenterType::Vertical)
+ tl.x = oti.pos.x;
+ else if (centerType == CenterType::Horizontal)
+ tl.y = oti.pos.y;
+
SetItemTL(item, tl);
return true;
};
void OBSBasic::on_actionCenterToScreen_triggered()
{
- obs_scene_enum_items(GetCurrentScene(), center_to_scene, nullptr);
+ CenterType centerType = CenterType::Scene;
+ obs_scene_enum_items(GetCurrentScene(), center_to_scene, ¢erType);
+}
+
+void OBSBasic::on_actionVerticalCenter_triggered()
+{
+ CenterType centerType = CenterType::Vertical;
+ obs_scene_enum_items(GetCurrentScene(), center_to_scene, ¢erType);
+}
+
+void OBSBasic::on_actionHorizontalCenter_triggered()
+{
+ CenterType centerType = CenterType::Horizontal;
+ obs_scene_enum_items(GetCurrentScene(), center_to_scene, ¢erType);
}
void OBSBasic::EnablePreviewDisplay(bool enable)
EnablePreviewDisplay(previewEnabled);
}
+void OBSBasic::EnablePreview()
+{
+ if (previewProgramMode)
+ return;
+
+ previewEnabled = true;
+ EnablePreviewDisplay(true);
+}
+
+void OBSBasic::DisablePreview()
+{
+ if (previewProgramMode)
+ return;
+
+ previewEnabled = false;
+ EnablePreviewDisplay(false);
+}
+
static bool nudge_callback(obs_scene_t*, obs_sceneitem_t *item, void *param)
{
if (obs_sceneitem_locked(item))
void OBSBasic::SysTrayNotify(const QString &text,
QSystemTrayIcon::MessageIcon n)
{
- if (QSystemTrayIcon::supportsMessages()) {
+ if (trayIcon && QSystemTrayIcon::supportsMessages()) {
QSystemTrayIcon::MessageIcon icon =
QSystemTrayIcon::MessageIcon(n);
trayIcon->showMessage("OBS Studio", text, icon, 10000);
{
if (!QSystemTrayIcon::isSystemTrayAvailable())
return;
+ if (!trayIcon && !firstStarted)
+ return;
bool sysTrayWhenStarted = config_get_bool(GetGlobalConfig(),
"BasicWindow", "SysTrayWhenStarted");
obs_source_copy_filters(dstSource, source);
}
+void OBSBasic::SceneCopyFilters()
+{
+ copyFiltersString = obs_source_get_name(GetCurrentSceneSource());
+}
+
+void OBSBasic::ScenePasteFilters()
+{
+ OBSSource source = obs_get_source_by_name(copyFiltersString);
+ obs_source_release(source);
+
+ OBSSource dstSource = GetCurrentSceneSource();
+
+ if (source == dstSource)
+ return;
+
+ obs_source_copy_filters(dstSource, source);
+}
+
void OBSBasic::on_actionCopyFilters_triggered()
{
OBSSceneItem item = GetCurrentSceneItem();
return false;
return outputHandler->ReplayBufferActive();
}
+
+SceneRenameDelegate::SceneRenameDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+}
+
+void SceneRenameDelegate::setEditorData(QWidget *editor,
+ const QModelIndex &index) const
+{
+ QStyledItemDelegate::setEditorData(editor, index);
+ QLineEdit *lineEdit = qobject_cast<QLineEdit*>(editor);
+ if (lineEdit)
+ lineEdit->selectAll();
+}
+
+bool SceneRenameDelegate::eventFilter(QObject *editor, QEvent *event)
+{
+ if (event->type() == QEvent::KeyPress) {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ if (keyEvent->key() == Qt::Key_Escape) {
+ QLineEdit *lineEdit = qobject_cast<QLineEdit*>(editor);
+ if (lineEdit)
+ lineEdit->undo();
+ }
+ }
+
+ return QStyledItemDelegate::eventFilter(editor, event);
+}
+
+void OBSBasic::UpdatePatronJson(const QString &text, const QString &error)
+{
+ if (!error.isEmpty())
+ return;
+
+ patronJson = QT_TO_UTF8(text);
+}
obs-studio-23.1.0.tar.xz/UI/window-basic-main.hpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-main.hpp
Changed
#include <QAction>
#include <QWidgetAction>
#include <QSystemTrayIcon>
+#include <QStyledItemDelegate>
#include <obs.hpp>
#include <vector>
#include <memory>
class OBSBasic : public OBSMainWindow {
Q_OBJECT
+ friend class OBSAbout;
friend class OBSBasicPreview;
friend class OBSBasicStatusBar;
friend class OBSBasicSourceSelect;
QPointer<QVBoxLayout> programLayout;
QPointer<QLabel> programLabel;
+ QScopedPointer<QThread> patronJsonThread;
+ std::string patronJson;
+
void UpdateMultiviewProjectorMenu();
void DrawBackdrop(float cx, float cy);
int GetTopSelectedSourceItem();
obs_hotkey_pair_id streamingHotkeys, recordingHotkeys,
- replayBufHotkeys;
+ replayBufHotkeys, togglePreviewHotkeys;
obs_hotkey_id forceStreamingStopHotkey;
void InitDefaultTransitions();
void RecordingStart();
void RecordStopping();
- void RecordingStop(int code);
+ void RecordingStop(int code, QString last_error);
void StartReplayBuffer();
void StopReplayBuffer();
bool create_new,
const QString &name = QString());
+ void UpdatePatronJson(const QString &text, const QString &error);
+
private slots:
void AddSceneItem(OBSSceneItem item);
void AddScene(OBSSource source);
void AudioMixerCopyFilters();
void AudioMixerPasteFilters();
+ void EnablePreview();
+ void DisablePreview();
+
+ void SceneCopyFilters();
+ void ScenePasteFilters();
+
private:
/* OBS Callbacks */
static void SceneReordered(void *data, calldata_t *params);
obs_service_t *GetService();
void SetService(obs_service_t *service);
+ int GetTransitionDuration();
+
inline bool IsPreviewProgramMode() const
{
return os_atomic_load_bool(&previewProgramMode);
void on_actionFitToScreen_triggered();
void on_actionStretchToScreen_triggered();
void on_actionCenterToScreen_triggered();
+ void on_actionVerticalCenter_triggered();
+ void on_actionHorizontalCenter_triggered();
void on_scenes_currentItemChanged(QListWidgetItem *current,
QListWidgetItem *prev);
void OpenMultiviewWindow();
void OpenSceneWindow();
- void DeferredLoad(const QString &file, int requeueCount);
+ void DeferredSysTrayLoad(int requeueCount);
void StackedMixerAreaContextMenuRequested();
private:
std::unique_ptr<Ui::OBSBasic> ui;
};
+
+class SceneRenameDelegate : public QStyledItemDelegate {
+ Q_OBJECT
+
+public:
+ SceneRenameDelegate(QObject *parent);
+ virtual void setEditorData(QWidget *editor, const QModelIndex &index)
+ const override;
+
+protected:
+ virtual bool eventFilter(QObject *editor, QEvent *event) override;
+};
obs-studio-23.1.0.tar.xz/UI/window-basic-preview.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-preview.cpp
Changed
gs_matrix_pop();
}
-static void DrawLine(float x1, float y1, float x2, float y2, float thickness)
+static void DrawLine(float x1, float y1, float x2, float y2, float thickness,
+ vec2 scale)
{
- struct matrix4 matrix;
- gs_matrix_get(&matrix);
-
float ySide = (y1 == y2) ? (y1 < 0.5f ? 1.0f : -1.0f) : 0.0f;
float xSide = (x1 == x2) ? (x1 < 0.5f ? 1.0f : -1.0f) : 0.0f;
gs_render_start(true);
gs_vertex2f(x1, y1);
- gs_vertex2f(x1 + (xSide * (thickness / matrix.x.x)),
- y1 + (ySide * (thickness / matrix.y.y)));
- gs_vertex2f(x2 + (xSide * (thickness / matrix.x.x)),
- y2 + (ySide * (thickness / matrix.y.y)));
+ gs_vertex2f(x1 + (xSide * (thickness / scale.x)),
+ y1 + (ySide * (thickness / scale.y)));
+ gs_vertex2f(x2 + (xSide * (thickness / scale.x)),
+ y2 + (ySide * (thickness / scale.y)));
gs_vertex2f(x2, y2);
gs_vertex2f(x1, y1);
gs_vertexbuffer_destroy(line);
}
-static void DrawRect(float thickness)
+static void DrawRect(float thickness, vec2 scale)
{
- struct matrix4 matrix;
- gs_matrix_get(&matrix);
-
gs_render_start(true);
gs_vertex2f(0.0f, 0.0f);
- gs_vertex2f(0.0f + (thickness / matrix.x.x), 0.0f);
- gs_vertex2f(0.0f + (thickness / matrix.x.x), 1.0f);
+ gs_vertex2f(0.0f + (thickness / scale.x), 0.0f);
+ gs_vertex2f(0.0f + (thickness / scale.x), 1.0f);
gs_vertex2f(0.0f, 1.0f);
gs_vertex2f(0.0f, 0.0f);
gs_vertex2f(0.0f, 1.0f);
- gs_vertex2f(0.0f, 1.0f - (thickness / matrix.y.y));
- gs_vertex2f(1.0f, 1.0f - (thickness / matrix.y.y));
+ gs_vertex2f(0.0f, 1.0f - (thickness / scale.y));
+ gs_vertex2f(1.0f, 1.0f - (thickness / scale.y));
gs_vertex2f(1.0f, 1.0f);
gs_vertex2f(0.0f, 1.0f);
gs_vertex2f(1.0f, 1.0f);
- gs_vertex2f(1.0f - (thickness / matrix.x.x), 1.0f);
- gs_vertex2f(1.0f - (thickness / matrix.x.x), 0.0f);
+ gs_vertex2f(1.0f - (thickness / scale.x), 1.0f);
+ gs_vertex2f(1.0f - (thickness / scale.x), 0.0f);
gs_vertex2f(1.0f, 0.0f);
gs_vertex2f(1.0f, 1.0f);
gs_vertex2f(1.0f, 0.0f);
- gs_vertex2f(1.0f, 0.0f + (thickness / matrix.y.y));
- gs_vertex2f(0.0f, 0.0f + (thickness / matrix.y.y));
+ gs_vertex2f(1.0f, 0.0f + (thickness / scale.y));
+ gs_vertex2f(0.0f, 0.0f + (thickness / scale.y));
gs_vertex2f(0.0f, 0.0f);
gs_vertex2f(1.0f, 0.0f);
if (!visible)
return true;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawSelectedOverflow");
+
obs_transform_info info;
obs_sceneitem_get_info(item, &info);
gs_matrix_pop();
+ GS_DEBUG_MARKER_END();
+
UNUSED_PARAMETER(scene);
return true;
}
if (!visible)
return true;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawSelectedItem");
+
+ matrix4 curTransform;
+ vec2 boxScale;
+ gs_matrix_get(&curTransform);
+ obs_sceneitem_get_box_scale(item, &boxScale);
+ boxScale.x *= curTransform.x.x;
+ boxScale.y *= curTransform.y.y;
+
obs_transform_info info;
obs_sceneitem_get_info(item, &info);
gs_effect_set_vec4(colParam, &blue); \
else if (crop.side > 0) \
gs_effect_set_vec4(colParam, &green); \
- DrawLine(x1, y1, x2, y2, HANDLE_RADIUS / 2); \
+ DrawLine(x1, y1, x2, y2, HANDLE_RADIUS / 2, boxScale); \
gs_effect_set_vec4(colParam, &red);
DRAW_SIDE(left, 0.0f, 0.0f, 0.0f, 1.0f);
} else {
if (!selected) {
gs_effect_set_vec4(colParam, &blue);
- DrawRect(HANDLE_RADIUS / 2);
+ DrawRect(HANDLE_RADIUS / 2, boxScale);
} else {
- DrawRect(HANDLE_RADIUS / 2);
+ DrawRect(HANDLE_RADIUS / 2, boxScale);
}
}
gs_matrix_pop();
+ GS_DEBUG_MARKER_END();
+
UNUSED_PARAMETER(scene);
UNUSED_PARAMETER(param);
return true;
if (hidden)
return;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawOverflow");
+
if (!overflow) {
std::string path;
GetDataFilePath("images/overflow.png", path);
}
gs_load_vertexbuffer(nullptr);
+
+ GS_DEBUG_MARKER_END();
}
void OBSBasicPreview::DrawSceneEditing()
if (locked)
return;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawSceneEditing");
+
OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
gs_technique_end_pass(tech);
gs_technique_end(tech);
+
+ GS_DEBUG_MARKER_END();
}
void OBSBasicPreview::ResetScrollingOffset()
obs-studio-23.1.0.tar.xz/UI/window-basic-properties.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-properties.cpp
Changed
using namespace std;
+static void CreateTransitionScene(OBSSource scene, char *text, uint32_t color);
+
OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_)
: QDialog (parent),
preview (new OBSQTDisplay(this)),
int cy = (int)config_get_int(App()->GlobalConfig(), "PropertiesWindow",
"cy");
+ enum obs_source_type type = obs_source_get_type(source);
+
buttonBox->setObjectName(QStringLiteral("buttonBox"));
buttonBox->setStandardButtons(QDialogButtonBox::Ok |
QDialogButtonBox::Cancel |
setLayout(new QVBoxLayout(this));
layout()->addWidget(windowSplitter);
+
+ if (type == OBS_SOURCE_TYPE_TRANSITION) {
+ AddPreviewButton();
+ connect(view, SIGNAL(PropertiesRefreshed()),
+ this, SLOT(AddPreviewButton()));
+ }
+
layout()->addWidget(buttonBox);
layout()->setAlignment(buttonBox, Qt::AlignBottom);
obs_display_add_draw_callback(preview->GetDisplay(),
OBSBasicProperties::DrawPreview, this);
};
- enum obs_source_type type = obs_source_get_type(source);
+ auto addTransitionDrawCallback = [this] ()
+ {
+ obs_display_add_draw_callback(preview->GetDisplay(),
+ OBSBasicProperties::DrawTransitionPreview, this);
+ };
uint32_t caps = obs_source_get_output_flags(source);
bool drawable_type = type == OBS_SOURCE_TYPE_INPUT ||
type == OBS_SOURCE_TYPE_SCENE;
preview->show();
connect(preview.data(), &OBSQTDisplay::DisplayCreated,
addDrawCallback);
+
+ } else if (type == OBS_SOURCE_TYPE_TRANSITION) {
+ sourceA = obs_source_create_private("scene", "sourceA",
+ nullptr);
+ sourceB = obs_source_create_private("scene", "sourceB",
+ nullptr);
+
+ obs_source_release(sourceA);
+ obs_source_release(sourceB);
+
+ uint32_t colorA = 0xFFB26F52;
+ uint32_t colorB = 0xFF6FB252;
+
+ CreateTransitionScene(sourceA, "A", colorA);
+ CreateTransitionScene(sourceB, "B", colorB);
+
+ /**
+ * The cloned source is made from scratch, rather than using
+ * obs_source_duplicate, as the stinger transition would not
+ * play correctly otherwise.
+ */
+
+ obs_data_t *settings = obs_source_get_settings(source);
+
+ sourceClone = obs_source_create_private(
+ obs_source_get_id(source), "clone", settings);
+ obs_source_release(sourceClone);
+
+ obs_source_inc_active(sourceClone);
+ obs_transition_set(sourceClone, sourceA);
+
+ obs_data_release(settings);
+
+ auto updateCallback = [=]()
+ {
+ obs_data_t *settings = obs_source_get_settings(source);
+ obs_source_update(sourceClone, settings);
+
+ obs_transition_clear(sourceClone);
+ obs_transition_set(sourceClone, sourceA);
+ obs_transition_force_stop(sourceClone);
+
+ obs_data_release(settings);
+
+ direction = true;
+ };
+
+ connect(view, &OBSPropertiesView::Changed, updateCallback);
+
+ preview->show();
+ connect(preview.data(), &OBSQTDisplay::DisplayCreated,
+ addTransitionDrawCallback);
+
} else {
preview->hide();
}
OBSBasicProperties::~OBSBasicProperties()
{
+ if (sourceClone) {
+ obs_source_dec_active(sourceClone);
+ }
obs_source_dec_showing(source);
main->SaveProject();
}
+void OBSBasicProperties::AddPreviewButton()
+{
+ QPushButton *playButton = new QPushButton(
+ QTStr("PreviewTransition"), this);
+ VScrollArea *area = view;
+ area->widget()->layout()->addWidget(playButton);
+
+ playButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+
+ auto play = [=] ()
+ {
+ OBSSource start;
+ OBSSource end;
+
+ if (direction) {
+ start = sourceA;
+ end = sourceB;
+ } else {
+ start = sourceB;
+ end = sourceA;
+ }
+
+ obs_transition_set(sourceClone, start);
+ obs_transition_start(sourceClone,
+ OBS_TRANSITION_MODE_AUTO,
+ main->GetTransitionDuration(), end);
+ direction = !direction;
+
+ start = nullptr;
+ end = nullptr;
+ };
+
+ connect(playButton, &QPushButton::clicked, play);
+}
+
+static obs_source_t *CreateLabel(const char *name, size_t h)
+{
+ obs_data_t *settings = obs_data_create();
+ obs_data_t *font = obs_data_create();
+
+ std::string text;
+ text += " ";
+ text += name;
+ text += " ";
+
+#if defined(_WIN32)
+ obs_data_set_string(font, "face", "Arial");
+#elif defined(__APPLE__)
+ obs_data_set_string(font, "face", "Helvetica");
+#else
+ obs_data_set_string(font, "face", "Monospace");
+#endif
+ obs_data_set_int(font, "flags", 1); // Bold text
+ obs_data_set_int(font, "size", min(int(h), 300));
+
+ obs_data_set_obj(settings, "font", font);
+ obs_data_set_string(settings, "text", text.c_str());
+ obs_data_set_bool(settings, "outline", false);
+
+#ifdef _WIN32
+ const char *text_source_id = "text_gdiplus";
+#else
+ const char *text_source_id = "text_ft2_source";
+#endif
+
+ obs_source_t *txtSource = obs_source_create_private(text_source_id,
+ name, settings);
+
+ obs_data_release(font);
+ obs_data_release(settings);
+
+ return txtSource;
+}
+
+static void CreateTransitionScene(OBSSource scene, char *text, uint32_t color)
+{
+ obs_data_t *settings = obs_data_create();
+ obs_data_set_int(settings, "width", obs_source_get_width(scene));
+ obs_data_set_int(settings, "height", obs_source_get_height(scene));
+ obs_data_set_int(settings, "color", color);
+
+ obs_source_t *colorBG = obs_source_create_private("color_source",
+ "background", settings);
+
+ obs_scene_add(obs_scene_from_source(scene), colorBG);
+
+ obs_source_t *label = CreateLabel(text, obs_source_get_height(scene));
+ obs_sceneitem_t *item = obs_scene_add(obs_scene_from_source(scene),
+ label);
+
+ vec2 size;
+ vec2_set(&size, obs_source_get_width(scene),
+#ifdef _WIN32
+ obs_source_get_height(scene));
+#else
+ obs_source_get_height(scene) * 0.8);
+#endif
+
+ obs_sceneitem_set_bounds(item, &size);
+ obs_sceneitem_set_bounds_type(item, OBS_BOUNDS_SCALE_INNER);
+
+ obs_data_release(settings);
+ obs_source_release(colorBG);
+ obs_source_release(label);
+}
+
void OBSBasicProperties::SourceRemoved(void *data, calldata_t *params)
{
QMetaObject::invokeMethod(static_cast<OBSBasicProperties*>(data),
gs_viewport_pop();
}
+void OBSBasicProperties::DrawTransitionPreview(void *data, uint32_t cx,
+ uint32_t cy)
+{
+ OBSBasicProperties *window = static_cast<OBSBasicProperties*>(data);
+
+ if (!window->source)
+ return;
+
+ uint32_t sourceCX = max(obs_source_get_width(window->source), 1u);
+ uint32_t sourceCY = max(obs_source_get_height(window->source), 1u);
+
+ int x, y;
+ int newCX, newCY;
+ float scale;
+
+ GetScaleAndCenterPos(sourceCX, sourceCY, cx, cy, x, y, scale);
+
+ newCX = int(scale * float(sourceCX));
+ newCY = int(scale * float(sourceCY));
+
+ gs_viewport_push();
+ gs_projection_push();
+ gs_ortho(0.0f, float(sourceCX), 0.0f, float(sourceCY),
+ -100.0f, 100.0f);
+ gs_set_viewport(x, y, newCX, newCY);
+
+ obs_source_video_render(window->sourceClone);
+
+ gs_projection_pop();
+ gs_viewport_pop();
+}
+
void OBSBasicProperties::Cleanup()
{
config_set_int(App()->GlobalConfig(), "PropertiesWindow", "cx",
obs_display_remove_draw_callback(preview->GetDisplay(),
OBSBasicProperties::DrawPreview, this);
+ obs_display_remove_draw_callback(preview->GetDisplay(),
+ OBSBasicProperties::DrawTransitionPreview, this);
}
void OBSBasicProperties::reject()
obs-studio-23.1.0.tar.xz/UI/window-basic-properties.hpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-properties.hpp
Changed
QDialogButtonBox *buttonBox;
QSplitter *windowSplitter;
+ OBSSource sourceA;
+ OBSSource sourceB;
+ OBSSource sourceClone;
+ bool direction = true;
+
static void SourceRemoved(void *data, calldata_t *params);
static void SourceRenamed(void *data, calldata_t *params);
static void UpdateProperties(void *data, calldata_t *params);
static void DrawPreview(void *data, uint32_t cx, uint32_t cy);
+ static void DrawTransitionPreview(void *data, uint32_t cx,
+ uint32_t cy);
+ void UpdateCallback(void *obj, obs_data_t *settings);
bool ConfirmQuit();
int CheckSettings();
void Cleanup();
private slots:
void on_buttonBox_clicked(QAbstractButton *button);
+ void AddPreviewButton();
public:
OBSBasicProperties(QWidget *parent, OBSSource source_);
obs-studio-23.1.0.tar.xz/UI/window-basic-settings.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-settings.cpp
Changed
#include "window-projector.hpp"
#include <util/platform.h>
+#include "ui-config.h"
using namespace std;
ui->listWidget->setAttribute(Qt::WA_MacShowFocusRect, false);
- auto policy = ui->audioSourceScrollArea->sizePolicy();
- policy.setVerticalStretch(true);
- ui->audioSourceScrollArea->setSizePolicy(policy);
-
HookWidget(ui->language, COMBO_CHANGED, GENERAL_CHANGED);
HookWidget(ui->theme, COMBO_CHANGED, GENERAL_CHANGED);
HookWidget(ui->enableAutoUpdates, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->disableFocusHotkeys, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->autoRemux, CHECK_CHANGED, ADV_CHANGED);
+ ui->simpleOutputVBitrate->setSingleStep(50);
+ ui->simpleOutputVBitrate->setSuffix(" Kbps");
+ ui->advOutFFVBitrate->setSingleStep(50);
+ ui->advOutFFVBitrate->setSuffix(" Kbps");
+ ui->advOutFFABitrate->setSuffix(" Kbps");
+
#if !defined(_WIN32) && !defined(__APPLE__)
delete ui->enableAutoUpdates;
ui->enableAutoUpdates = nullptr;
#endif
#if !defined(_WIN32) && !defined(__APPLE__) && !HAVE_PULSEAUDIO
- delete ui->advAudioGroupBox;
- ui->advAudioGroupBox = nullptr;
+ delete ui->audioAdvGroupBox;
+ ui->audioAdvGroupBox = nullptr;
#endif
#ifdef _WIN32
this, SLOT(AdvOutRecCheckWarnings()));
AdvOutRecCheckWarnings();
+ ui->buttonBox->button(QDialogButtonBox::Apply)->setIcon(QIcon());
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setIcon(QIcon());
+ ui->buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QIcon());
+
SimpleRecordingQualityChanged();
UpdateAutomaticReplayBufferCheckboxes();
}
}
+ QString defaultTheme;
+ defaultTheme += DEFAULT_THEME;
+ defaultTheme += " ";
+ defaultTheme += QTStr("Default");
+
/* Check shipped themes. */
QDirIterator uIt(QString(themeDir.c_str()), QStringList() << "*.qss",
QDir::Files);
while (uIt.hasNext()) {
uIt.next();
QString name = uIt.fileName().section(".",0,0);
- if (!uniqueSet.contains(name))
+
+ if (name == DEFAULT_THEME)
+ name = defaultTheme;
+
+ if (!uniqueSet.contains(name) && name != "Default")
ui->theme->addItem(name);
}
- int idx = ui->theme->findText(App()->GetTheme());
+ std::string themeName = App()->GetTheme();
+
+ if (themeName == DEFAULT_THEME)
+ themeName = QT_TO_UTF8(defaultTheme);
+
+ int idx = ui->theme->findText(themeName.c_str());
if (idx != -1)
ui->theme->setCurrentIndex(idx);
}
void OBSBasicSettings::LoadAudioSources()
{
+ if (ui->audioSourceLayout->rowCount() > 0) {
+ QLayoutItem *forDeletion = ui->audioSourceLayout->takeAt(0);
+ delete forDeletion->widget();
+ delete forDeletion;
+ }
auto layout = new QFormLayout();
layout->setVerticalSpacing(15);
layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
- ui->audioSourceScrollArea->takeWidget()->deleteLater();
audioSourceSignals.clear();
audioSources.clear();
auto widget = new QWidget();
widget->setLayout(layout);
- ui->audioSourceScrollArea->setWidget(widget);
+ ui->audioSourceLayout->addRow(widget);
const char *enablePtm = Str("Basic.Settings.Audio.EnablePushToMute");
const char *ptmDelay = Str("Basic.Settings.Audio.PushToMuteDelay");
ptmCB, pttSB, pttCB, pttSB);
auto label = new OBSSourceLabel(source);
+ label->setMinimumSize(QSize(170, 0));
+ label->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
connect(label, &OBSSourceLabel::Removed,
[=]()
{
if (layout->rowCount() == 0)
- ui->audioSourceScrollArea->hide();
+ ui->audioHotkeysGroupBox->hide();
else
- ui->audioSourceScrollArea->show();
+ ui->audioHotkeysGroupBox->show();
}
void OBSBasicSettings::LoadAudioSettings()
loading = false;
}
+#define TRUNCATE_TEXT_LENGTH 80
+
template <typename Func>
static inline void LayoutHotkey(obs_hotkey_id id, obs_hotkey_t *key, Func &&fun,
const map<obs_hotkey_id, vector<obs_key_combination_t>> &keys)
{
auto *label = new OBSHotkeyLabel;
- label->setText(obs_hotkey_get_description(key));
+ QString text = QT_UTF8(obs_hotkey_get_description(key));
+
+ if (text.length() > TRUNCATE_TEXT_LENGTH) {
+ label->setProperty("fullName", text);
+ text = text.left(TRUNCATE_TEXT_LENGTH);
+ text += "...'";
+ }
+
+ label->setText(text);
OBSHotkeyWidget *hw = nullptr;
template <typename Func>
static QLabel *makeLabel(const OBSSource &source, Func &&)
{
- return new OBSSourceLabel(source);
+ OBSSourceLabel *label = new OBSSourceLabel(source);
+ label->setStyleSheet("font-weight: bold;");
+ QString name = QT_UTF8(obs_source_get_name(source));
+
+ if (name.length() > TRUNCATE_TEXT_LENGTH) {
+ label->setToolTip(name);
+ name = name.left(TRUNCATE_TEXT_LENGTH);
+ name += "...";
+ }
+
+ label->setText(name);
+
+ return label;
}
template <typename Func, typename T>
if (hotkeys.empty())
return;
- auto line = new QFrame();
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
-
layout.setItem(layout.rowCount(), QFormLayout::SpanningRole,
new QSpacerItem(0, 10));
- layout.addRow(line);
using tuple_type =
std::tuple<T, QPointer<QLabel>, QPointer<QWidget>>;
auto Update = [&](OBSHotkeyLabel *label, const QString &name,
OBSHotkeyLabel *other, const QString &otherName)
{
- label->setToolTip(tt.arg(otherName));
+ QString string = other->property("fullName").value<QString>();
+
+ if (string.isEmpty() || string.isNull())
+ string = otherName;
+
+ label->setToolTip(tt.arg(string));
label->setText(name + " *");
label->pairPartner = other;
};
int themeIndex = ui->theme->currentIndex();
QString themeData = ui->theme->itemText(themeIndex);
- string theme = themeData.toStdString();
+ QString defaultTheme;
+ defaultTheme += DEFAULT_THEME;
+ defaultTheme += " ";
+ defaultTheme += QTStr("Default");
+
+ if (themeData == defaultTheme)
+ themeData = DEFAULT_THEME;
if (WidgetChanged(ui->theme)) {
config_set_string(GetGlobalConfig(), "General", "CurrentTheme",
- theme.c_str());
+ QT_TO_UTF8(themeData));
- App()->SetTheme(theme);
+ App()->SetTheme(themeData.toUtf8().constData());
}
#if defined(_WIN32) || defined(__APPLE__)
void OBSBasicSettings::on_theme_activated(int idx)
{
- string currT = ui->theme->itemText(idx).toStdString();
- App()->SetTheme(currT);
+ QString currT = ui->theme->itemText(idx);
+
+ QString defaultTheme;
+ defaultTheme += DEFAULT_THEME;
+ defaultTheme += " ";
+ defaultTheme += QTStr("Default");
+
+ if (currT == defaultTheme)
+ currT = DEFAULT_THEME;
+
+ App()->SetTheme(currT.toUtf8().constData());
}
void OBSBasicSettings::on_listWidget_itemSelectionChanged()
ui->advRBEstimate->setText(QTStr(ESTIMATE_UNKNOWN_STR));
ui->advReplayBufferGroupBox->setVisible(!lossless && replayBufferEnabled);
- ui->line_4->setVisible(!lossless && replayBufferEnabled);
ui->advReplayBuf->setEnabled(!lossless);
UpdateAutomaticReplayBufferCheckboxes();
obs-studio-23.1.0.tar.xz/UI/window-basic-source-select.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-source-select.cpp
Changed
AddExisting(QT_TO_UTF8(item->text()), visible, false);
} else {
if (ui->sourceName->text().isEmpty()) {
- OBSMessageBox::information(this,
+ OBSMessageBox::warning(this,
QTStr("NoNameEntered.Title"),
QTStr("NoNameEntered.Text"));
return;
obs-studio-23.1.0.tar.xz/UI/window-basic-stats.cpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-stats.cpp
Changed
#include "window-basic-main.hpp"
#include "platform.hpp"
#include "obs-app.hpp"
+#include "qt-wrappers.hpp"
#include <QDesktopWidget>
#include <QPushButton>
#include <string>
#define TIMER_INTERVAL 2000
+#define REC_TIME_LEFT_INTERVAL 30000
static void setThemeID(QWidget *widget, const QString &themeID)
{
}
}
+void OBSBasicStats::OBSFrontendEvent(enum obs_frontend_event event, void *ptr)
+{
+ OBSBasicStats *stats = reinterpret_cast<OBSBasicStats *>(ptr);
+
+ switch ((int)event) {
+ case OBS_FRONTEND_EVENT_RECORDING_STARTED:
+ stats->StartRecTimeLeft();
+ break;
+ case OBS_FRONTEND_EVENT_RECORDING_STOPPED:
+ stats->ResetRecTimeLeft();
+ break;
+ }
+}
+
OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
: QWidget (parent),
cpu_info (os_cpu_usage_info_start()),
- timer (this)
+ timer (this),
+ recTimeLeft (this)
{
QVBoxLayout *mainLayout = new QVBoxLayout();
QGridLayout *topLayout = new QGridLayout();
outputLayout = new QGridLayout();
+ bitrates.reserve(REC_TIME_LEFT_INTERVAL / TIMER_INTERVAL);
+
int row = 0;
auto newStatBare = [&] (QString name, QWidget *label, int col)
cpuUsage = new QLabel(this);
hddSpace = new QLabel(this);
+ recordTimeLeft = new QLabel(this);
memUsage = new QLabel(this);
newStat("CPUUsage", cpuUsage, 0);
newStat("HDDSpaceAvailable", hddSpace, 0);
+ newStat("DiskFullIn", recordTimeLeft, 0);
newStat("MemoryUsage", memUsage, 0);
fps = new QLabel(this);
QObject::connect(&timer, &QTimer::timeout, this, &OBSBasicStats::Update);
timer.setInterval(TIMER_INTERVAL);
- timer.start();
+
+ if (isVisible())
+ timer.start();
+
Update();
+ QObject::connect(&recTimeLeft, &QTimer::timeout, this,
+ &OBSBasicStats::RecordingTimeLeft);
+ recTimeLeft.setInterval(REC_TIME_LEFT_INTERVAL);
+
OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
const char *geometry = config_get_string(main->Config(),
size(), rect));
}
}
+
+ obs_frontend_add_event_callback(OBSFrontendEvent, this);
}
void OBSBasicStats::closeEvent(QCloseEvent *event)
OBSBasicStats::~OBSBasicStats()
{
+ obs_frontend_remove_event_callback(OBSFrontendEvent, this);
+
delete shortcutFilter;
os_cpu_usage_info_destroy(cpu_info);
}
#define MBYTE (1024ULL * 1024ULL)
#define GBYTE (1024ULL * 1024ULL * 1024ULL)
#define TBYTE (1024ULL * 1024ULL * 1024ULL * 1024ULL)
- uint64_t num_bytes = os_get_free_disk_space(path);
+ num_bytes = os_get_free_disk_space(path);
QString abrv = QStringLiteral(" MB");
long double num;
outputLabels[0].Update(strOutput, false);
outputLabels[1].Update(recOutput, true);
+
+ if (obs_output_active(recOutput)) {
+ long double kbps = outputLabels[1].kbps;
+ bitrates.push_back(kbps);
+ }
+}
+
+void OBSBasicStats::StartRecTimeLeft()
+{
+ recordTimeLeft->setText(QTStr("Calculating"));
+ recTimeLeft.start();
+}
+
+void OBSBasicStats::ResetRecTimeLeft()
+{
+ bitrates.clear();
+ recTimeLeft.stop();
+ recordTimeLeft->setText(QTStr(""));
+}
+
+void OBSBasicStats::RecordingTimeLeft()
+{
+ long double averageBitrate = accumulate(bitrates.begin(),
+ bitrates.end(), 0.0) /
+ (long double)bitrates.size();
+ long double bytesPerSec = (averageBitrate / 8.0l) * 1000.0l;
+ long double secondsUntilFull = (long double)num_bytes / bytesPerSec;
+
+ bitrates.clear();
+
+ int totalMinutes = (int)secondsUntilFull / 60;
+ int minutes = totalMinutes % 60;
+ int hours = totalMinutes / 60;
+
+ QString text;
+ text.sprintf("%d %s, %d %s", hours, QT_TO_UTF8(QTStr("Hours")),
+ minutes, QT_TO_UTF8(QTStr("Minutes")));
+ recordTimeLeft->setText(text);
+ recordTimeLeft->setMinimumWidth(recordTimeLeft->width());
}
void OBSBasicStats::Reset()
uint64_t bitsBetween = (bytesSent - lastBytesSent) * 8;
long double timePassed = (long double)(curTime - lastBytesSentTime) /
1000000000.0l;
- long double kbps = (long double)bitsBetween /
- timePassed / 1000.0l;
+ kbps = (long double)bitsBetween / timePassed / 1000.0l;
if (timePassed < 0.01l)
kbps = 0.0l;
first_total = obs_output_get_total_frames(output);
first_dropped = obs_output_get_frames_dropped(output);
}
+
+void OBSBasicStats::showEvent(QShowEvent *)
+{
+ timer.start(TIMER_INTERVAL);
+}
+
+void OBSBasicStats::hideEvent(QHideEvent *)
+{
+ timer.stop();
+}
obs-studio-23.1.0.tar.xz/UI/window-basic-stats.hpp -> obs-studio-23.2.0.tar.xz/UI/window-basic-stats.hpp
Changed
QLabel *fps = nullptr;
QLabel *cpuUsage = nullptr;
QLabel *hddSpace = nullptr;
+ QLabel *recordTimeLeft = nullptr;
QLabel *memUsage = nullptr;
QLabel *renderTime = nullptr;
os_cpu_usage_info_t *cpu_info = nullptr;
QTimer timer;
+ QTimer recTimeLeft;
+ uint64_t num_bytes = 0;
+ std::vector<long double> bitrates;
struct OutputLabels {
QPointer<QLabel> name;
void Update(obs_output_t *output, bool rec);
void Reset(obs_output_t *output);
+
+ long double kbps = 0.0l;
};
QList<OutputLabels> outputLabels;
virtual void closeEvent(QCloseEvent *event) override;
+ static void OBSFrontendEvent(enum obs_frontend_event event, void *ptr);
+
public:
OBSBasicStats(QWidget *parent = nullptr, bool closable = true);
~OBSBasicStats();
static void InitializeValues();
+
+ void StartRecTimeLeft();
+ void ResetRecTimeLeft();
+
private:
QPointer<QObject> shortcutFilter;
+
+private slots:
+ void RecordingTimeLeft();
+
+protected:
+ virtual void showEvent(QShowEvent *event) override;
+ virtual void hideEvent(QHideEvent *event) override;
};
obs-studio-23.1.0.tar.xz/UI/window-projector.cpp -> obs-studio-23.2.0.tar.xz/UI/window-projector.cpp
Changed
obs_display_add_draw_callback(GetDisplay(),
isMultiview ? OBSRenderMultiview : OBSRender,
this);
- obs_display_set_background_color(GetDisplay(), 0x000000);
};
connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback);
bool hideCursor = config_get_bool(GetGlobalConfig(),
"BasicWindow", "HideProjectorCursor");
- if (hideCursor && !isWindow) {
+ if (hideCursor && !isWindow && type != ProjectorType::Multiview) {
QPixmap empty(16, 16);
empty.fill(Qt::transparent);
setCursor(QCursor(empty));
return txtSource;
}
-static inline void renderVB(gs_effect_t *effect, gs_vertbuffer_t *vb,
- int cx, int cy)
-{
- if (!vb)
- return;
-
- matrix4 transform;
- matrix4_identity(&transform);
- transform.x.x = cx;
- transform.y.y = cy;
-
- gs_load_vertexbuffer(vb);
-
- gs_matrix_push();
- gs_matrix_mul(&transform);
-
- while (gs_effect_loop(effect, "Solid"))
- gs_draw(GS_LINESTRIP, 0, 0);
-
- gs_matrix_pop();
-}
-
static inline uint32_t labelOffset(obs_source_t *label, uint32_t cx)
{
uint32_t w = obs_source_get_width(label);
obs-studio-23.1.0.tar.xz/UI/window-remux.cpp -> obs-studio-23.2.0.tar.xz/UI/window-remux.cpp
Changed
Delegate - Presents cells in the grid.
**********************************************************/
-class RemuxEntryPathItemDelegate : public QStyledItemDelegate {
-public:
-
- RemuxEntryPathItemDelegate(bool isOutput, const QString &defaultPath)
- : QStyledItemDelegate(),
- isOutput(isOutput),
- defaultPath(defaultPath)
- {
- }
-
- virtual QWidget *createEditor(QWidget *parent,
- const QStyleOptionViewItem & /* option */,
- const QModelIndex &index) const override
- {
- RemuxEntryState state = index.model()
- ->index(index.row(), RemuxEntryColumn::State)
- .data(RemuxEntryRole::EntryStateRole)
- .value<RemuxEntryState>();
- if (state == RemuxEntryState::Pending ||
- state == RemuxEntryState::InProgress) {
- // Never allow modification of rows that are
- // in progress.
- return Q_NULLPTR;
- } else if (isOutput && state != RemuxEntryState::Ready) {
- // Do not allow modification of output rows
- // that aren't associated with a valid input.
- return Q_NULLPTR;
- } else if (!isOutput && state == RemuxEntryState::Complete) {
- // Don't allow modification of rows that are
- // already complete.
- return Q_NULLPTR;
- } else {
- QSizePolicy buttonSizePolicy(
- QSizePolicy::Policy::Minimum,
- QSizePolicy::Policy::Expanding,
- QSizePolicy::ControlType::PushButton);
-
- QWidget *container = new QWidget(parent);
-
- auto browseCallback = [this, container]()
- {
- const_cast<RemuxEntryPathItemDelegate *>(this)
- ->handleBrowse(container);
- };
-
- auto clearCallback = [this, container]()
- {
- const_cast<RemuxEntryPathItemDelegate *>(this)
- ->handleClear(container);
- };
-
- QHBoxLayout *layout = new QHBoxLayout();
- layout->setMargin(0);
- layout->setSpacing(0);
-
- QLineEdit *text = new QLineEdit();
- text->setObjectName(QStringLiteral("text"));
- text->setSizePolicy(QSizePolicy(
- QSizePolicy::Policy::Expanding,
- QSizePolicy::Policy::Expanding,
- QSizePolicy::ControlType::LineEdit));
- layout->addWidget(text);
-
- QToolButton *browseButton = new QToolButton();
- browseButton->setText("...");
- browseButton->setSizePolicy(buttonSizePolicy);
- layout->addWidget(browseButton);
-
- container->connect(browseButton, &QToolButton::clicked,
- browseCallback);
-
- // The "clear" button is not shown in output cells
- // or the insertion point's input cell.
- if (!isOutput && state != RemuxEntryState::Empty) {
- QToolButton *clearButton = new QToolButton();
- clearButton->setText("X");
- clearButton->setSizePolicy(buttonSizePolicy);
- layout->addWidget(clearButton);
-
- container->connect(clearButton,
- &QToolButton::clicked,
- clearCallback);
- }
-
- container->setLayout(layout);
- container->setFocusProxy(text);
-
- return container;
+RemuxEntryPathItemDelegate::RemuxEntryPathItemDelegate(bool isOutput,
+ const QString &defaultPath)
+ : QStyledItemDelegate(),
+ isOutput(isOutput),
+ defaultPath(defaultPath)
+{
+}
+
+QWidget *RemuxEntryPathItemDelegate::createEditor(QWidget *parent,
+ const QStyleOptionViewItem & /* option */,
+ const QModelIndex &index) const
+{
+ RemuxEntryState state = index.model()
+ ->index(index.row(), RemuxEntryColumn::State)
+ .data(RemuxEntryRole::EntryStateRole)
+ .value<RemuxEntryState>();
+ if (state == RemuxEntryState::Pending ||
+ state == RemuxEntryState::InProgress) {
+ // Never allow modification of rows that are
+ // in progress.
+ return Q_NULLPTR;
+ } else if (isOutput && state != RemuxEntryState::Ready) {
+ // Do not allow modification of output rows
+ // that aren't associated with a valid input.
+ return Q_NULLPTR;
+ } else if (!isOutput && state == RemuxEntryState::Complete) {
+ // Don't allow modification of rows that are
+ // already complete.
+ return Q_NULLPTR;
+ } else {
+ QSizePolicy buttonSizePolicy(
+ QSizePolicy::Policy::Minimum,
+ QSizePolicy::Policy::Expanding,
+ QSizePolicy::ControlType::PushButton);
+
+ QWidget *container = new QWidget(parent);
+
+ auto browseCallback = [this, container]()
+ {
+ const_cast<RemuxEntryPathItemDelegate *>(this)
+ ->handleBrowse(container);
+ };
+
+ auto clearCallback = [this, container]()
+ {
+ const_cast<RemuxEntryPathItemDelegate *>(this)
+ ->handleClear(container);
+ };
+
+ QHBoxLayout *layout = new QHBoxLayout();
+ layout->setMargin(0);
+ layout->setSpacing(0);
+
+ QLineEdit *text = new QLineEdit();
+ text->setObjectName(QStringLiteral("text"));
+ text->setSizePolicy(QSizePolicy(
+ QSizePolicy::Policy::Expanding,
+ QSizePolicy::Policy::Expanding,
+ QSizePolicy::ControlType::LineEdit));
+ layout->addWidget(text);
+
+ QToolButton *browseButton = new QToolButton();
+ browseButton->setText("...");
+ browseButton->setSizePolicy(buttonSizePolicy);
+ layout->addWidget(browseButton);
+
+ container->connect(browseButton, &QToolButton::clicked,
+ browseCallback);
+
+ // The "clear" button is not shown in output cells
+ // or the insertion point's input cell.
+ if (!isOutput && state != RemuxEntryState::Empty) {
+ QToolButton *clearButton = new QToolButton();
+ clearButton->setText("X");
+ clearButton->setSizePolicy(buttonSizePolicy);
+ layout->addWidget(clearButton);
+
+ container->connect(clearButton,
+ &QToolButton::clicked,
+ clearCallback);
}
- }
-
- virtual void setEditorData(QWidget *editor, const QModelIndex &index)
- const override
- {
- QLineEdit *text = editor->findChild<QLineEdit *>();
- text->setText(index.data().toString());
- editor->setProperty(PATH_LIST_PROP, QVariant());
+ container->setLayout(layout);
+ container->setFocusProxy(text);
+ return container;
}
+}
- virtual void setModelData(QWidget *editor,
- QAbstractItemModel *model,
- const QModelIndex &index) const override
- {
- // We use the PATH_LIST_PROP property to pass a list of
- // path strings from the editor widget into the model's
- // NewPathsToProcessRole. This is only used when paths
- // are selected through the "browse" or "delete" buttons
- // in the editor. If the user enters new text in the
- // text box, we simply pass that text on to the model
- // as normal text data in the default role.
- QVariant pathListProp = editor->property(PATH_LIST_PROP);
- if (pathListProp.isValid()) {
- QStringList list = editor->property(PATH_LIST_PROP)
- .toStringList();
- if (isOutput) {
- if (list.size() > 0)
- model->setData(index, list);
- } else
- model->setData(index, list,
- RemuxEntryRole::NewPathsToProcessRole);
- } else {
- QLineEdit *lineEdit = editor->findChild<QLineEdit *>();
- model->setData(index, lineEdit->text());
- }
+void RemuxEntryPathItemDelegate::setEditorData(QWidget *editor,
+ const QModelIndex &index) const
+{
+ QLineEdit *text = editor->findChild<QLineEdit *>();
+ text->setText(index.data().toString());
+ QObject::connect(text, SIGNAL(textEdited(QString)), this, SLOT(updateText()));
+ editor->setProperty(PATH_LIST_PROP, QVariant());
+}
+
+void RemuxEntryPathItemDelegate::setModelData(QWidget *editor,
+ QAbstractItemModel *model,
+ const QModelIndex &index) const
+{
+ // We use the PATH_LIST_PROP property to pass a list of
+ // path strings from the editor widget into the model's
+ // NewPathsToProcessRole. This is only used when paths
+ // are selected through the "browse" or "delete" buttons
+ // in the editor. If the user enters new text in the
+ // text box, we simply pass that text on to the model
+ // as normal text data in the default role.
+ QVariant pathListProp = editor->property(PATH_LIST_PROP);
+ if (pathListProp.isValid()) {
+ QStringList list = editor->property(PATH_LIST_PROP)
+ .toStringList();
+ if (isOutput) {
+ if (list.size() > 0)
+ model->setData(index, list);
+ } else
+ model->setData(index, list,
+ RemuxEntryRole::NewPathsToProcessRole);
+ } else {
+ QLineEdit *lineEdit = editor->findChild<QLineEdit *>();
+ model->setData(index, lineEdit->text());
}
+}
- virtual void paint(QPainter *painter,
- const QStyleOptionViewItem &option,
- const QModelIndex &index) const override
- {
- RemuxEntryState state = index.model()
- ->index(index.row(), RemuxEntryColumn::State)
- .data(RemuxEntryRole::EntryStateRole)
- .value<RemuxEntryState>();
+void RemuxEntryPathItemDelegate::paint(QPainter *painter,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+ RemuxEntryState state = index.model()
+ ->index(index.row(), RemuxEntryColumn::State)
+ .data(RemuxEntryRole::EntryStateRole)
+ .value<RemuxEntryState>();
- QStyleOptionViewItem localOption = option;
- initStyleOption(&localOption, index);
+ QStyleOptionViewItem localOption = option;
+ initStyleOption(&localOption, index);
- if (isOutput) {
- if (state != Ready) {
- QColor background = localOption.palette
- .color(QPalette::ColorGroup::Disabled,
- QPalette::ColorRole::Background);
+ if (isOutput) {
+ if (state != Ready) {
+ QColor background = localOption.palette
+ .color(QPalette::ColorGroup::Disabled,
+ QPalette::ColorRole::Background);
- localOption.backgroundBrush = QBrush(background);
- }
+ localOption.backgroundBrush = QBrush(background);
}
-
- QApplication::style()->drawControl(QStyle::CE_ItemViewItem,
- &localOption, painter);
}
-private:
- bool isOutput;
- QString defaultPath;
+ QApplication::style()->drawControl(QStyle::CE_ItemViewItem,
+ &localOption, painter);
+}
- const char *PATH_LIST_PROP = "pathList";
+void RemuxEntryPathItemDelegate::handleBrowse(QWidget *container)
+{
+ QString OutputPattern =
+ "(*.mp4 *.flv *.mov *.mkv *.ts *.m3u8)";
+ QString InputPattern =
+ "(*.flv *.mov *.mkv *.ts *.m3u8)";
- void handleBrowse(QWidget *container)
- {
- QString OutputPattern =
- "(*.mp4 *.flv *.mov *.mkv *.ts *.m3u8)";
- QString InputPattern =
- "(*.flv *.mov *.mkv *.ts *.m3u8)";
+ QLineEdit *text = container->findChild<QLineEdit *>();
- QLineEdit *text = container->findChild<QLineEdit *>();
+ QString currentPath = text->text();
+ if (currentPath.isEmpty())
+ currentPath = defaultPath;
- QString currentPath = text->text();
- if (currentPath.isEmpty())
- currentPath = defaultPath;
+ bool isSet = false;
+ if (isOutput) {
+ QString newPath = QFileDialog::getSaveFileName(
+ container, QTStr("Remux.SelectTarget"),
+ currentPath, OutputPattern);
- bool isSet = false;
- if (isOutput) {
- QString newPath = QFileDialog::getSaveFileName(
- container, QTStr("Remux.SelectTarget"),
- currentPath, OutputPattern);
-
- if (!newPath.isEmpty()) {
- container->setProperty(PATH_LIST_PROP,
- QStringList() << newPath);
- isSet = true;
- }
- } else {
- QStringList paths = QFileDialog::getOpenFileNames(
- container,
- QTStr("Remux.SelectRecording"),
- currentPath,
- QTStr("Remux.OBSRecording")
- + QString(" ") + InputPattern);
-
- if (!paths.empty()) {
- container->setProperty(PATH_LIST_PROP, paths);
- isSet = true;
- }
+ if (!newPath.isEmpty()) {
+ container->setProperty(PATH_LIST_PROP,
+ QStringList() << newPath);
+ isSet = true;
+ }
+ } else {
+ QStringList paths = QFileDialog::getOpenFileNames(
+ container,
+ QTStr("Remux.SelectRecording"),
+ currentPath,
+ QTStr("Remux.OBSRecording")
+ + QString(" ") + InputPattern);
+
+ if (!paths.empty()) {
+ container->setProperty(PATH_LIST_PROP, paths);
+ isSet = true;
}
-
- if (isSet)
- emit commitData(container);
}
- void handleClear(QWidget *container)
- {
- // An empty string list will indicate that the entry is being
- // blanked and should be deleted.
- container->setProperty(PATH_LIST_PROP, QStringList());
-
+ if (isSet)
emit commitData(container);
- }
-};
+}
+
+void RemuxEntryPathItemDelegate::handleClear(QWidget *container)
+{
+ // An empty string list will indicate that the entry is being
+ // blanked and should be deleted.
+ container->setProperty(PATH_LIST_PROP, QStringList());
+
+ emit commitData(container);
+}
+
+void RemuxEntryPathItemDelegate::updateText() {
+ QLineEdit *lineEdit = dynamic_cast<QLineEdit*>(sender());
+ QWidget *editor = lineEdit->parentWidget();
+ emit commitData(editor);
+}
/**********************************************************
Model - Manages the queue's data
obs-studio-23.1.0.tar.xz/UI/window-remux.hpp -> obs-studio-23.2.0.tar.xz/UI/window-remux.hpp
Changed
#include <QMutex>
#include <QPointer>
#include <QThread>
+#include <QStyledItemDelegate>
#include <memory>
#include "ui_OBSRemux.h"
friend class OBSRemux;
};
+
+class RemuxEntryPathItemDelegate : public QStyledItemDelegate {
+ Q_OBJECT
+
+public:
+ RemuxEntryPathItemDelegate(bool isOutput, const QString &defaultPath);
+
+ virtual QWidget *createEditor(QWidget *parent,
+ const QStyleOptionViewItem & /* option */,
+ const QModelIndex &index) const override;
+
+ virtual void setEditorData(QWidget *editor, const QModelIndex &index)
+ const override;
+ virtual void setModelData(QWidget *editor,
+ QAbstractItemModel *model,
+ const QModelIndex &index) const override;
+ virtual void paint(QPainter *painter,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+
+private:
+ bool isOutput;
+ QString defaultPath;
+ const char *PATH_LIST_PROP = "pathList";
+
+ void handleBrowse(QWidget *container);
+ void handleClear(QWidget *container);
+
+private slots:
+ void updateText();
+};
obs-studio-23.2.0.tar.xz/UI/xdg-data
Added
+(directory)
obs-studio-23.2.0.tar.xz/UI/xdg-data/CMakeLists.txt
Added
+if(NOT DEFINED APPDATA_RELEASE_DATE)
+ if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
+ execute_process(COMMAND git log --tags -1 --pretty=%cd --date=short
+ OUTPUT_VARIABLE APPDATA_RELEASE_DATE
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ else()
+ file(TIMESTAMP "${CMAKE_SOURCE_DIR}/CMakeLists.txt" APPDATA_RELEASE_DATE "%Y-%m-%d")
+ endif()
+endif()
+
+configure_file(
+ com.obsproject.Studio.appdata.xml.in
+ com.obsproject.Studio.appdata.xml)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/com.obsproject.Studio.appdata.xml
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo)
+
+install(FILES com.obsproject.Studio.desktop
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
+
+install(FILES ../forms/images/obs.png
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps
+ RENAME com.obsproject.Studio.png)
obs-studio-23.2.0.tar.xz/UI/xdg-data/com.obsproject.Studio.appdata.xml.in
Added
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop">
+ <id>com.obsproject.Studio</id>
+ <launchable type="desktop-id">com.obsproject.Studio.desktop</launchable>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0</project_license>
+ <name>OBS Studio</name>
+ <developer_name>OBS Project</developer_name>
+ <summary>Live streaming and video recording software</summary>
+ <description>
+ <p>Free and open source software for video capturing, recording, and live streaming.</p>
+ </description>
+ <url type="homepage">https://obsproject.com</url>
+ <screenshots>
+ <screenshot type="default">
+ <image>https://obsproject.com/assets/images/OBSDemoApp.jpg</image>
+ </screenshot>
+ </screenshots>
+ <content_rating type="oars-1.1"/>
+ <releases>
+ <release version="@OBS_VERSION@" date="@APPDATA_RELEASE_DATE@"/>
+ </releases>
+</component>
obs-studio-23.2.0.tar.xz/UI/xdg-data/com.obsproject.Studio.desktop
Added
+[Desktop Entry]
+Version=1.0
+Name=OBS Studio
+GenericName=Streaming/Recording Software
+GenericName[fr]=Logiciel d'enregistrement/diffusion
+Comment=Free and Open Source Streaming/Recording Software
+Comment[fr]=Logiciel libre d'enregistrement et de diffusion sur Internet
+Comment[ru]=Бесплатная программа с открытым кодом для записи/трансляции видео
+Exec=obs
+Icon=com.obsproject.Studio
+Terminal=false
+Type=Application
+Categories=AudioVideo;Recorder;
+StartupNotify=true
obs-studio-23.1.0.tar.xz/deps/media-playback/media-playback/closest-format.h -> obs-studio-23.2.0.tar.xz/deps/media-playback/media-playback/closest-format.h
Changed
switch (fmt) {
case AV_PIX_FMT_YUYV422:
return AV_PIX_FMT_YUYV422;
+ case AV_PIX_FMT_YUV444P:
+ return AV_PIX_FMT_YUV444P;
case AV_PIX_FMT_YUV422P:
case AV_PIX_FMT_YUVJ422P:
obs-studio-23.1.0.tar.xz/deps/media-playback/media-playback/media.c -> obs-studio-23.2.0.tar.xz/deps/media-playback/media-playback/media.c
Changed
case AV_PIX_FMT_YUV420P: return VIDEO_FORMAT_I420;
case AV_PIX_FMT_NV12: return VIDEO_FORMAT_NV12;
case AV_PIX_FMT_YUYV422: return VIDEO_FORMAT_YUY2;
+ case AV_PIX_FMT_YUV444P: return VIDEO_FORMAT_I444;
case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY;
case AV_PIX_FMT_RGBA: return VIDEO_FORMAT_RGBA;
case AV_PIX_FMT_BGRA: return VIDEO_FORMAT_BGRA;
obs-studio-23.1.0.tar.xz/deps/obs-scripting/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/deps/obs-scripting/CMakeLists.txt
Changed
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/UI/obs-frontend-api")
endif()
+IF(BUILD_CAPTIONS)
+ string(TOUPPER "${BUILD_CAPTIONS}" BUILD_CAPTIONS)
+endif()
+
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/obs-scripting-config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/obs-scripting-config.h")
obs-studio-23.1.0.tar.xz/deps/obs-scripting/obs-scripting-config.h.in -> obs-studio-23.2.0.tar.xz/deps/obs-scripting/obs-scripting-config.h.in
Changed
#define COMPILE_LUA @LUAJIT_FOUND@
#define COMPILE_PYTHON @PYTHON_FOUND@
#define UI_ENABLED @UI_ENABLED@
+#define BUILD_CAPTIONS @BUILD_CAPTIONS@
obs-studio-23.1.0.tar.xz/deps/obs-scripting/obslua/obslua.i -> obs-studio-23.2.0.tar.xz/deps/obs-scripting/obslua/obslua.i
Changed
%include "graphics/vec2.h"
%include "graphics/quat.h"
%include "graphics/image-file.h"
+%include "obs-scripting-config.h"
%include "obs-data.h"
%include "obs-source.h"
%include "obs-properties.h"
%include "callback/signal.h"
%include "util/bmem.h"
%include "util/base.h"
-%include "obs-scripting-config.h"
#if UI_ENABLED
%include "obs-frontend-api.h"
obs-studio-23.1.0.tar.xz/deps/obs-scripting/obspython/obspython.i -> obs-studio-23.2.0.tar.xz/deps/obs-scripting/obspython/obspython.i
Changed
%include "graphics/vec3.h"
%include "graphics/vec2.h"
%include "graphics/quat.h"
+%include "obs-scripting-config.h"
%include "obs-data.h"
%include "obs-source.h"
%include "obs-properties.h"
%include "callback/signal.h"
%include "util/bmem.h"
%include "util/base.h"
-%include "obs-scripting-config.h"
#if UI_ENABLED
%include "obs-frontend-api.h"
obs-studio-23.1.0.tar.xz/docs/sphinx/reference-frontend-api.rst -> obs-studio-23.2.0.tar.xz/docs/sphinx/reference-frontend-api.rst
Changed
---------------------------------------
+.. function:: int obs_frontend_get_transition_duration(void)
+
+ :return: The transition duration (in milliseconds) currently set in the UI.
+
+---------------------------------------
+
+.. function:: void obs_frontend_set_transition_duration(int duration)
+
+ :param duration: Desired transition duration (in milliseconds)
+
+---------------------------------------
+
.. function:: char **obs_frontend_get_scene_collections(void)
:return: The list of profile names, ending with NULL. The list is
---------------------------------------
+.. function:: void obs_frontend_preview_program_trigger_transition(void)
+
+ Triggers a preview-to-program transition if studio mode is active.
+
+---------------------------------------
+
.. function:: obs_source_t *obs_frontend_get_current_preview_scene(void)
:return: A new reference to the current preview scene if studio mode
obs-studio-23.1.0.tar.xz/docs/sphinx/reference-outputs.rst -> obs-studio-23.2.0.tar.xz/docs/sphinx/reference-outputs.rst
Changed
Only applies to outputs that are encoded. Packets will always be
given in monotonic timestamp order.
- :param packet: The video or audio packet
+ :param packet: The video or audio packet. If NULL, an encoder error
+ occurred, and the output should call
+ :c:func:`obs_output_signal_stop()` with the error code
+ **OBS_OUTPUT_ENCODE_ERROR**.
.. member:: void (*obs_output_info.update)(void *data, obs_data_t *settings)
| OBS_OUTPUT_DISCONNECTED - Unexpectedly disconnected
| OBS_OUTPUT_UNSUPPORTED - The settings, video/audio format, or codecs are unsupported by this output
| OBS_OUTPUT_NO_SPACE - Ran out of disk space
+ | OBS_OUTPUT_ENCODE_ERROR - Encoder error
**starting** (ptr output)
obs-studio-23.1.0.tar.xz/libobs-d3d11/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/libobs-d3d11/CMakeLists.txt
Changed
PREFIX "")
target_link_libraries(libobs-d3d11
libobs
+ d3d9
d3d11
dxgi)
obs-studio-23.1.0.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-23.2.0.tar.xz/libobs-d3d11/d3d11-subsystem.cpp
Changed
#include <util/dstr.h>
#include <util/util.hpp>
#include <graphics/matrix3.h>
+#include <d3d9.h>
#include "d3d11-subsystem.hpp"
struct UnsupportedHWError : HRError {
ComPtr<IDXGIFactory1> factory;
ComPtr<IDXGIAdapter1> adapter;
HRESULT hr;
- UINT i = 0;
+ UINT i;
IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2 :
__uuidof(IDXGIFactory1);
if (FAILED(hr))
throw HRError("Failed to create DXGIFactory", hr);
- while (factory->EnumAdapters1(i++, adapter.Assign()) == S_OK) {
+ for (i = 0; factory->EnumAdapters1(i, adapter.Assign()) == S_OK; ++i) {
DXGI_ADAPTER_DESC desc;
char name[512] = "";
os_wcs_to_utf8(desc.Description, 0, name, sizeof(name));
- if (!callback(param, name, i - 1))
+ if (!callback(param, name, i))
break;
}
}
static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter)
{
- UINT i = 0;
+ UINT i;
ComPtr<IDXGIOutput> output;
- while (adapter->EnumOutputs(i++, &output) == S_OK) {
+ for (i = 0; adapter->EnumOutputs(i, &output) == S_OK; ++i) {
DXGI_OUTPUT_DESC desc;
if (FAILED(output->GetDesc(&desc)))
continue;
ComPtr<IDXGIFactory1> factory;
ComPtr<IDXGIAdapter1> adapter;
HRESULT hr;
- UINT i = 0;
+ UINT i;
blog(LOG_INFO, "Available Video Adapters: ");
if (FAILED(hr))
throw HRError("Failed to create DXGIFactory", hr);
- while (factory->EnumAdapters1(i++, adapter.Assign()) == S_OK) {
+ for (i = 0; factory->EnumAdapters1(i, adapter.Assign()) == S_OK; ++i) {
DXGI_ADAPTER_DESC desc;
char name[512] = "";
return device->nv12Supported;
}
+extern "C" EXPORT void device_debug_marker_begin(gs_device_t *,
+ const char *markername, const float color[4])
+{
+ D3DCOLOR bgra = D3DCOLOR_ARGB((DWORD)(255.0f * color[3]),
+ (DWORD)(255.0f * color[0]), (DWORD)(255.0f * color[1]),
+ (DWORD)(255.0f * color[2]));
+
+ wchar_t wide[64];
+ os_utf8_to_wcs(markername, 0, wide, _countof(wide));
+
+ D3DPERF_BeginEvent(bgra, wide);
+}
+
+extern "C" EXPORT void device_debug_marker_end(gs_device_t *)
+{
+ D3DPERF_EndEvent();
+}
+
extern "C" EXPORT gs_texture_t *device_texture_create_gdi(gs_device_t *device,
uint32_t width, uint32_t height)
{
obs-studio-23.1.0.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-23.2.0.tar.xz/libobs-d3d11/d3d11-subsystem.hpp
Changed
srcFactorC (GS_BLEND_SRCALPHA),
destFactorC (GS_BLEND_INVSRCALPHA),
srcFactorA (GS_BLEND_ONE),
- destFactorA (GS_BLEND_ONE),
+ destFactorA (GS_BLEND_INVSRCALPHA),
redEnabled (true),
greenEnabled (true),
blueEnabled (true),
obs-studio-23.1.0.tar.xz/libobs-opengl/gl-indexbuffer.c -> obs-studio-23.2.0.tar.xz/libobs-opengl/gl-indexbuffer.c
Changed
uint32_t flags)
{
struct gs_index_buffer *ib = bzalloc(sizeof(struct gs_index_buffer));
- size_t width = type == GS_UNSIGNED_LONG ? sizeof(long) : sizeof(short);
+ size_t width = type == GS_UNSIGNED_LONG ? 4 : 2;
ib->device = device;
ib->data = indices;
obs-studio-23.1.0.tar.xz/libobs-opengl/gl-subsystem.c -> obs-studio-23.2.0.tar.xz/libobs-opengl/gl-subsystem.c
Changed
da_pop_back(device->proj_stack);
}
+void device_debug_marker_begin(gs_device_t *device,
+ const char *markername, const float color[4])
+{
+ UNUSED_PARAMETER(device);
+ UNUSED_PARAMETER(color);
+
+ glPushDebugGroupKHR(GL_DEBUG_SOURCE_APPLICATION, 0, -1, markername);
+}
+
+void device_debug_marker_end(gs_device_t *device)
+{
+ UNUSED_PARAMETER(device);
+
+ glPopDebugGroupKHR();
+}
+
void gs_swapchain_destroy(gs_swapchain_t *swapchain)
{
if (!swapchain)
obs-studio-23.1.0.tar.xz/libobs-opengl/gl-subsystem.h -> obs-studio-23.2.0.tar.xz/libobs-opengl/gl-subsystem.h
Changed
COPY_TYPE_FBO_BLIT
};
-static inline GLint convert_gs_format(enum gs_color_format format)
+static inline GLenum convert_gs_format(enum gs_color_format format)
{
switch (format) {
case GS_A8: return GL_RED;
case GS_RGBA32F: return GL_RGBA;
case GS_RG16F: return GL_RG;
case GS_RG32F: return GL_RG;
+ case GS_R8G8: return GL_RG;
case GS_R16F: return GL_RED;
case GS_R32F: return GL_RED;
case GS_DXT1: return GL_RGB;
return 0;
}
-static inline GLint convert_gs_internal_format(enum gs_color_format format)
+static inline GLenum convert_gs_internal_format(enum gs_color_format format)
{
switch (format) {
case GS_A8: return GL_R8; /* NOTE: use GL_TEXTURE_SWIZZLE_x */
case GS_RGBA32F: return GL_RGBA32F;
case GS_RG16F: return GL_RG16F;
case GS_RG32F: return GL_RG32F;
+ case GS_R8G8: return GL_R16;
case GS_R16F: return GL_R16F;
case GS_R32F: return GL_R32F;
case GS_DXT1: return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
case GS_RGBA32F: return GL_FLOAT;
case GS_RG16F: return GL_UNSIGNED_SHORT;
case GS_RG32F: return GL_FLOAT;
+ case GS_R8G8: return GL_UNSIGNED_SHORT;
case GS_R16F: return GL_UNSIGNED_SHORT;
case GS_R32F: return GL_FLOAT;
case GS_DXT1: return GL_UNSIGNED_BYTE;
enum gs_color_format format;
GLenum gl_format;
GLenum gl_target;
- GLint gl_internal_format;
+ GLenum gl_internal_format;
GLenum gl_type;
GLuint texture;
uint32_t levels;
obs-studio-23.1.0.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h -> obs-studio-23.2.0.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h
Changed
+#pragma once
+
#include <windows.h>
#include <mmdeviceapi.h>
#include <audioclient.h>
obs-studio-23.1.0.tar.xz/libobs/data/area.effect -> obs-studio-23.2.0.tar.xz/libobs/data/area.effect
Changed
uniform float4x4 ViewProj;
-uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform float2 base_dimension_i;
uniform texture2d image;
float2 targetmax = min(potentialtargetmax, targetposmax);
float area = (targetmax.x - targetmin.x) * (targetmax.y - targetmin.y);
float4 sample = image.Load(int3(loadindex, 0));
- totalcolor += area * float4(sample.rgb * sample.a, sample.a);
+ totalcolor += area * sample;
}
}
- return float4(totalcolor.rgb / totalcolor.a, totalcolor.a);
-}
-
-float3 ConvertFromYuv(float3 yuv)
-{
- yuv = clamp(yuv, color_range_min, color_range_max);
- return saturate(mul(float4(yuv, 1.0), color_matrix)).rgb;
-}
-
-float4 PSDrawAreaMatrix(VertInOut vert_in) : TARGET
-{
- float3 totalcolor = float3(0.0, 0.0, 0.0);
-
- float2 uv = vert_in.uv;
- float2 uvdelta = float2(ddx(uv.x), ddy(uv.y));
-
- // Handle potential OpenGL flip.
- uvdelta.y = abs(uvdelta.y);
-
- float2 uvhalfdelta = 0.5 * uvdelta;
- float2 uvmin = uv - uvhalfdelta;
- float2 uvmax = uv + uvhalfdelta;
-
- int2 loadindexmin = int2(uvmin / base_dimension_i);
- int2 loadindexmax = int2(uvmax / base_dimension_i);
-
- float2 targetpos = uv / uvdelta;
- float2 targetposmin = targetpos - 0.5;
- float2 targetposmax = targetpos + 0.5;
- float2 scale = base_dimension_i / uvdelta;
- for (int loadindexy = loadindexmin.y; loadindexy <= loadindexmax.y; ++loadindexy)
- {
- for (int loadindexx = loadindexmin.x; loadindexx <= loadindexmax.x; ++loadindexx)
- {
- int2 loadindex = int2(loadindexx, loadindexy);
- float2 potentialtargetmin = float2(loadindex) * scale;
- float2 potentialtargetmax = potentialtargetmin + scale;
- float2 targetmin = max(potentialtargetmin, targetposmin);
- float2 targetmax = min(potentialtargetmax, targetposmax);
- float area = (targetmax.x - targetmin.x) * (targetmax.y - targetmin.y);
- float3 yuv = image.Load(int3(loadindex, 0)).xyz;
- totalcolor += area * ConvertFromYuv(yuv);
- }
- }
-
- return float4(totalcolor, 1.0);
+ return totalcolor;
}
technique Draw
pixel_shader = PSDrawAreaRGBA(vert_in);
}
}
-
-technique DrawMatrix
-{
- pass
- {
- vertex_shader = VSDefault(vert_in);
- pixel_shader = PSDrawAreaMatrix(vert_in);
- }
-}
obs-studio-23.1.0.tar.xz/libobs/data/bicubic_scale.effect -> obs-studio-23.2.0.tar.xz/libobs/data/bicubic_scale.effect
Changed
uniform float4x4 ViewProj;
uniform texture2d image;
uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform float2 base_dimension_i;
uniform float undistort_factor = 1.0;
return DrawBicubic(v_in, undistort);
}
-float4 PSDrawBicubicMatrix(VertData v_in) : TARGET
+float4 PSDrawBicubicRGBADivide(VertData v_in) : TARGET
{
float4 rgba = DrawBicubic(v_in, false);
- float4 yuv;
+ float alpha = rgba.a;
+ float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0;
+ return float4(rgba.rgb * multiplier, alpha);
+}
- yuv.xyz = clamp(rgba.xyz, color_range_min, color_range_max);
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
+float4 PSDrawBicubicMatrix(VertData v_in) : TARGET
+{
+ float3 rgb = DrawBicubic(v_in, false).rgb;
+ float3 yuv = mul(float4(saturate(rgb), 1.0), color_matrix).xyz;
+ return float4(yuv, 1.0);
}
technique Draw
}
}
+technique DrawAlphaDivide
+{
+ pass
+ {
+ vertex_shader = VSDefault(v_in);
+ pixel_shader = PSDrawBicubicRGBADivide(v_in);
+ }
+}
+
technique DrawUndistort
{
pass
obs-studio-23.1.0.tar.xz/libobs/data/bilinear_lowres_scale.effect -> obs-studio-23.2.0.tar.xz/libobs/data/bilinear_lowres_scale.effect
Changed
uniform float4x4 ViewProj;
uniform texture2d image;
uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform float2 base_dimension_i;
sampler_state textureSampler {
return DrawLowresBilinear(v_in);
}
-float4 PSDrawLowresBilinearMatrix(VertData v_in) : TARGET
+float4 PSDrawLowresBilinearRGBADivide(VertData v_in) : TARGET
{
- float4 yuv = DrawLowresBilinear(v_in);
+ float4 rgba = DrawLowresBilinear(v_in);
+ float alpha = rgba.a;
+ float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0;
+ return float4(rgba.rgb * multiplier, alpha);
+}
- yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max);
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
+float4 PSDrawLowresBilinearMatrix(VertData v_in) : TARGET
+{
+ float3 rgb = DrawLowresBilinear(v_in).rgb;
+ float3 yuv = mul(float4(saturate(rgb), 1.0), color_matrix).xyz;
+ return float4(yuv, 1.0);
}
technique Draw
}
}
+technique DrawAlphaDivide
+{
+ pass
+ {
+ vertex_shader = VSDefault(v_in);
+ pixel_shader = PSDrawLowresBilinearRGBADivide(v_in);
+ }
+}
+
technique DrawMatrix
{
pass
obs-studio-23.1.0.tar.xz/libobs/data/default.effect -> obs-studio-23.2.0.tar.xz/libobs/data/default.effect
Changed
uniform float4x4 ViewProj;
uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform texture2d image;
sampler_state def_sampler {
return image.Sample(def_sampler, vert_in.uv);
}
+float4 PSDrawAlphaDivide(VertInOut vert_in) : TARGET
+{
+ float4 rgba = image.Sample(def_sampler, vert_in.uv);
+ float alpha = rgba.a;
+ float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0;
+ return float4(rgba.rgb * multiplier, alpha);
+}
+
float4 PSDrawMatrix(VertInOut vert_in) : TARGET
{
- float4 yuv = image.Sample(def_sampler, vert_in.uv);
- yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max);
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
+ float3 rgb = image.Sample(def_sampler, vert_in.uv).rgb;
+ float3 yuv = mul(float4(rgb, 1.0), color_matrix).xyz;
+ return float4(yuv, 1.0);
}
technique Draw
}
}
+technique DrawAlphaDivide
+{
+ pass
+ {
+ vertex_shader = VSDefault(vert_in);
+ pixel_shader = PSDrawAlphaDivide(vert_in);
+ }
+}
+
technique DrawMatrix
{
pass
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_base.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_base.effect
Changed
uniform float4x4 ViewProj;
uniform texture2d image;
-uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform texture2d previous_image;
uniform float2 dimensions;
return vert_out;
}
-#define TECHNIQUE(rgba_ps, matrix_ps) \
+#define TECHNIQUE(rgba_ps) \
technique Draw \
{ \
pass \
vertex_shader = VSDefault(v_in); \
pixel_shader = rgba_ps(v_in); \
} \
-} \
-float4 matrix_ps(VertData v_in) : TARGET \
-{ \
- float4 yuv = rgba_ps(v_in); \
- yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max); \
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix)); \
-} \
-\
-technique DrawMatrix \
-{ \
- pass \
- { \
- vertex_shader = VSDefault(v_in); \
- pixel_shader = matrix_ps(v_in); \
- } \
}
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_blend.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_blend.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE( PSBlendRGBA, PSBlendMatrix);
+TECHNIQUE(PSBlendRGBA);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_blend_2x.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_blend_2x.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSBlendRGBA_2x, PSBlendMatrix_2x);
+TECHNIQUE(PSBlendRGBA_2x);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_discard.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_discard.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSDiscardRGBA, PSDiscardMatrix);
+TECHNIQUE(PSDiscardRGBA);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_discard_2x.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_discard_2x.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSDiscardRGBA_2x, PSDiscardMatrix_2x);
+TECHNIQUE(PSDiscardRGBA_2x);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_linear.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_linear.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSLinearRGBA, PSLinearMatrix);
+TECHNIQUE(PSLinearRGBA);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_linear_2x.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_linear_2x.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSLinearRGBA_2x, PSLinearxMatrixA_2x);
+TECHNIQUE(PSLinearRGBA_2x);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_yadif.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_yadif.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSYadifMode0RGBA, PSYadifMode0Matrix);
+TECHNIQUE(PSYadifMode0RGBA);
obs-studio-23.1.0.tar.xz/libobs/data/deinterlace_yadif_2x.effect -> obs-studio-23.2.0.tar.xz/libobs/data/deinterlace_yadif_2x.effect
Changed
#include "deinterlace_base.effect"
-TECHNIQUE(PSYadifMode0RGBA_2x, PSYadifMode0Matrix_2x);
+TECHNIQUE(PSYadifMode0RGBA_2x);
obs-studio-23.1.0.tar.xz/libobs/data/format_conversion.effect -> obs-studio-23.2.0.tar.xz/libobs/data/format_conversion.effect
Changed
uniform int int_u_plane_offset;
uniform int int_v_plane_offset;
+uniform float4x4 color_matrix;
+uniform float3 color_range_min = {0.0, 0.0, 0.0};
+uniform float3 color_range_max = {1.0, 1.0, 1.0};
+
uniform texture2d image;
sampler_state def_sampler {
x += input_width_i_d2;
float4 texel = image.Sample(def_sampler, float2(x, y));
- return float4(odd > 0.5 ? texel[y1_pos] : texel[y0_pos],
- texel[u_pos], texel[v_pos], 1.0);
+ float3 yuv = float3(odd > 0.5 ? texel[y1_pos] : texel[y0_pos],
+ texel[u_pos], texel[v_pos]);
+ yuv = clamp(yuv, color_range_min, color_range_max);
+ return saturate(mul(float4(yuv, 1.0), color_matrix));
}
float4 PSPlanar420_Reverse(VertInOut vert_in) : TARGET
int chroma1 = int_u_plane_offset + chroma_offset;
int chroma2 = int_v_plane_offset + chroma_offset;
- return float4(
+ float3 yuv = float3(
GetIntOffsetColor(lum_offset),
GetIntOffsetColor(chroma1),
- GetIntOffsetColor(chroma2),
- 1.0
+ GetIntOffsetColor(chroma2)
);
+ yuv = clamp(yuv, color_range_min, color_range_max);
+ return saturate(mul(float4(yuv, 1.0), color_matrix));
+}
+
+float4 PSPlanar444_Reverse(VertInOut vert_in) : TARGET
+{
+ int x = int(vert_in.uv.x * width + PRECISION_OFFSET);
+ int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
+
+ int lum_offset = y * int_width + x;
+ int chroma_offset = y * int_width + x;
+ int chroma1 = int_u_plane_offset + chroma_offset;
+ int chroma2 = int_v_plane_offset + chroma_offset;
+
+ float3 yuv = float3(
+ GetIntOffsetColor(lum_offset),
+ GetIntOffsetColor(chroma1),
+ GetIntOffsetColor(chroma2)
+ );
+ yuv = clamp(yuv, color_range_min, color_range_max);
+ return saturate(mul(float4(yuv, 1.0), color_matrix));
}
float4 PSNV12_Reverse(VertInOut vert_in) : TARGET
int chroma_offset = (y / 2) * (int_width / 2) + x / 2;
int chroma = int_u_plane_offset + chroma_offset * 2;
- return float4(
+ float3 yuv = float3(
GetIntOffsetColor(lum_offset),
GetIntOffsetColor(chroma),
- GetIntOffsetColor(chroma + 1),
- 1.0
+ GetIntOffsetColor(chroma + 1)
);
+ yuv = clamp(yuv, color_range_min, color_range_max);
+ return saturate(mul(float4(yuv, 1.0), color_matrix));
+}
+
+float4 PSY800_Limited(VertInOut vert_in) : TARGET
+{
+ int x = int(vert_in.uv.x * width + PRECISION_OFFSET);
+ int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
+
+ float limited = image.Load(int3(x, y, 0)).x;
+ float full = saturate((limited - (16.0 / 255.0)) * (255.0 / 219.0));
+ return float4(full, full, full, 1.0);
+}
+
+float4 PSY800_Full(VertInOut vert_in) : TARGET
+{
+ int x = int(vert_in.uv.x * width + PRECISION_OFFSET);
+ int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
+
+ float3 full = image.Load(int3(x, y, 0)).xxx;
+ return float4(full, 1.0);
+}
+
+float4 PSRGB_Limited(VertInOut vert_in) : TARGET
+{
+ int x = int(vert_in.uv.x * width + PRECISION_OFFSET);
+ int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
+
+ float4 rgba = image.Load(int3(x, y, 0));
+ rgba.rgb = saturate((rgba.rgb - (16.0 / 255.0)) * (255.0 / 219.0));
+ return rgba;
}
technique Planar420
}
}
+technique I444_Reverse
+{
+ pass
+ {
+ vertex_shader = VSDefault(vert_in);
+ pixel_shader = PSPlanar444_Reverse(vert_in);
+ }
+}
+
technique NV12_Reverse
{
pass
pixel_shader = PSNV12_Reverse(vert_in);
}
}
+
+technique Y800_Limited
+{
+ pass
+ {
+ vertex_shader = VSDefault(vert_in);
+ pixel_shader = PSY800_Limited(vert_in);
+ }
+}
+
+technique Y800_Full
+{
+ pass
+ {
+ vertex_shader = VSDefault(vert_in);
+ pixel_shader = PSY800_Full(vert_in);
+ }
+}
+
+technique RGB_Limited
+{
+ pass
+ {
+ vertex_shader = VSDefault(vert_in);
+ pixel_shader = PSRGB_Limited(vert_in);
+ }
+}
obs-studio-23.1.0.tar.xz/libobs/data/lanczos_scale.effect -> obs-studio-23.2.0.tar.xz/libobs/data/lanczos_scale.effect
Changed
uniform float4x4 ViewProj;
uniform texture2d image;
uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform float2 base_dimension_i;
uniform float undistort_factor = 1.0;
return DrawLanczos(v_in, undistort);
}
-float4 PSDrawLanczosMatrix(FragData v_in) : TARGET
+float4 PSDrawLanczosRGBADivide(FragData v_in) : TARGET
{
float4 rgba = DrawLanczos(v_in, false);
- float4 yuv;
+ float alpha = rgba.a;
+ float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0;
+ return float4(rgba.rgb * multiplier, alpha);
+}
- yuv.xyz = clamp(rgba.xyz, color_range_min, color_range_max);
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
+float4 PSDrawLanczosMatrix(FragData v_in) : TARGET
+{
+ float3 rgb = DrawLanczos(v_in, false).rgb;
+ float3 yuv = mul(float4(saturate(rgb), 1.0), color_matrix).xyz;
+ return float4(yuv, 1.0);
}
technique Draw
}
}
+technique DrawAlphaDivide
+{
+ pass
+ {
+ vertex_shader = VSDefault(v_in);
+ pixel_shader = PSDrawLanczosRGBADivide(v_in);
+ }
+}
+
technique DrawUndistort
{
pass
obs-studio-23.1.0.tar.xz/libobs/data/repeat.effect -> obs-studio-23.2.0.tar.xz/libobs/data/repeat.effect
Changed
uniform float4x4 ViewProj;
-uniform float4x4 color_matrix;
-uniform float3 color_range_min = {0.0, 0.0, 0.0};
-uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform texture2d image;
uniform float2 scale;
return image.Sample(def_sampler, vert_in.uv);
}
-float4 PSDrawMatrix(VertInOut vert_in) : TARGET
-{
- float4 yuv = image.Sample(def_sampler, vert_in.uv);
- yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max);
- return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
-}
-
technique Draw
{
pass
pixel_shader = PSDrawBare(vert_in);
}
}
-
-technique DrawMatrix
-{
- pass
- {
- vertex_shader = VSDefault(vert_in);
- pixel_shader = PSDrawMatrix(vert_in);
- }
-}
obs-studio-23.1.0.tar.xz/libobs/graphics/device-exports.h -> obs-studio-23.2.0.tar.xz/libobs/graphics/device-exports.h
Changed
float top, float bottom, float znear, float zfar);
EXPORT void device_projection_push(gs_device_t *device);
EXPORT void device_projection_pop(gs_device_t *device);
+EXPORT void device_debug_marker_begin(gs_device_t *device,
+ const char *markername, const float color[4]);
+EXPORT void device_debug_marker_end(gs_device_t *device);
#ifdef __cplusplus
}
obs-studio-23.1.0.tar.xz/libobs/graphics/effect-parser.c -> obs-studio-23.2.0.tar.xz/libobs/graphics/effect-parser.c
Changed
extern const char *gs_preprocessor_name(void);
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+static void debug_get_default_value(struct gs_effect_param *param,
+ char* buffer, unsigned long long buf_size)
+{
+ if (param->default_val.num == 0) {
+ snprintf(buffer, buf_size, "(null)");
+ return;
+ }
+
+ switch (param->type) {
+ case GS_SHADER_PARAM_STRING:
+ snprintf(buffer, buf_size, "'%.*s'",
+ param->default_val.num,
+ param->default_val.array);
+ break;
+ case GS_SHADER_PARAM_INT:
+ snprintf(buffer, buf_size, "%ld",
+ *(int*)(param->default_val.array + 0));
+ break;
+ case GS_SHADER_PARAM_INT2:
+ snprintf(buffer, buf_size, "%ld,%ld",
+ *(int*)(param->default_val.array + 0),
+ *(int*)(param->default_val.array + 4));
+ break;
+ case GS_SHADER_PARAM_INT3:
+ snprintf(buffer, buf_size, "%ld,%ld,%ld",
+ *(int*)(param->default_val.array + 0),
+ *(int*)(param->default_val.array + 4),
+ *(int*)(param->default_val.array + 8));
+ break;
+ case GS_SHADER_PARAM_INT4:
+ snprintf(buffer, buf_size, "%ld,%ld,%ld,%ld",
+ *(int*)(param->default_val.array + 0),
+ *(int*)(param->default_val.array + 4),
+ *(int*)(param->default_val.array + 8),
+ *(int*)(param->default_val.array + 12));
+ break;
+ case GS_SHADER_PARAM_FLOAT:
+ snprintf(buffer, buf_size, "%e",
+ *(float*)(param->default_val.array + 0));
+ break;
+ case GS_SHADER_PARAM_VEC2:
+ snprintf(buffer, buf_size, "%e,%e",
+ *(float*)(param->default_val.array + 0),
+ *(float*)(param->default_val.array + 4));
+ break;
+ case GS_SHADER_PARAM_VEC3:
+ snprintf(buffer, buf_size, "%e,%e,%e",
+ *(float*)(param->default_val.array + 0),
+ *(float*)(param->default_val.array + 4),
+ *(float*)(param->default_val.array + 8));
+ break;
+ case GS_SHADER_PARAM_VEC4:
+ snprintf(buffer, buf_size, "%e,%e,%e,%e",
+ *(float*)(param->default_val.array + 0),
+ *(float*)(param->default_val.array + 4),
+ *(float*)(param->default_val.array + 8),
+ *(float*)(param->default_val.array + 12));
+ break;
+ case GS_SHADER_PARAM_MATRIX4X4:
+ snprintf(buffer, buf_size,
+ "[[%e,%e,%e,%e],[%e,%e,%e,%e],"
+ "[%e,%e,%e,%e],[%e,%e,%e,%e]]",
+ *(float*)(param->default_val.array + 0),
+ *(float*)(param->default_val.array + 4),
+ *(float*)(param->default_val.array + 8),
+ *(float*)(param->default_val.array + 12),
+ *(float*)(param->default_val.array + 16),
+ *(float*)(param->default_val.array + 20),
+ *(float*)(param->default_val.array + 24),
+ *(float*)(param->default_val.array + 28),
+ *(float*)(param->default_val.array + 32),
+ *(float*)(param->default_val.array + 36),
+ *(float*)(param->default_val.array + 40),
+ *(float*)(param->default_val.array + 44),
+ *(float*)(param->default_val.array + 48),
+ *(float*)(param->default_val.array + 52),
+ *(float*)(param->default_val.array + 56),
+ *(float*)(param->default_val.array + 60));
+ break;
+ case GS_SHADER_PARAM_BOOL:
+ snprintf(buffer, buf_size, "%s",
+ (*param->default_val.array) != 0
+ ? "true\0"
+ : "false\0");
+ break;
+ case GS_SHADER_PARAM_UNKNOWN:
+ case GS_SHADER_PARAM_TEXTURE:
+ snprintf(buffer, buf_size, "<unknown>");
+ break;
+ }
+}
+
+static void debug_param(struct gs_effect_param *param,
+ struct ep_param *param_in, unsigned long long idx, const char* offset)
+{
+ char _debug_type[4096];
+ switch (param->type) {
+ case GS_SHADER_PARAM_STRING:
+ snprintf(_debug_type, sizeof(_debug_type), "string");
+ break;
+ case GS_SHADER_PARAM_INT:
+ snprintf(_debug_type, sizeof(_debug_type), "int");
+ break;
+ case GS_SHADER_PARAM_INT2:
+ snprintf(_debug_type, sizeof(_debug_type), "int2");
+ break;
+ case GS_SHADER_PARAM_INT3:
+ snprintf(_debug_type, sizeof(_debug_type), "int3");
+ break;
+ case GS_SHADER_PARAM_INT4:
+ snprintf(_debug_type, sizeof(_debug_type), "int4");
+ break;
+ case GS_SHADER_PARAM_FLOAT:
+ snprintf(_debug_type, sizeof(_debug_type), "float");
+ break;
+ case GS_SHADER_PARAM_VEC2:
+ snprintf(_debug_type, sizeof(_debug_type), "float2");
+ break;
+ case GS_SHADER_PARAM_VEC3:
+ snprintf(_debug_type, sizeof(_debug_type), "float3");
+ break;
+ case GS_SHADER_PARAM_VEC4:
+ snprintf(_debug_type, sizeof(_debug_type), "float4");
+ break;
+ case GS_SHADER_PARAM_MATRIX4X4:
+ snprintf(_debug_type, sizeof(_debug_type), "float4x4");
+ break;
+ case GS_SHADER_PARAM_BOOL:
+ snprintf(_debug_type, sizeof(_debug_type), "bool");
+ break;
+ case GS_SHADER_PARAM_UNKNOWN:
+ snprintf(_debug_type, sizeof(_debug_type), "unknown");
+ break;
+ case GS_SHADER_PARAM_TEXTURE:
+ snprintf(_debug_type, sizeof(_debug_type), "texture");
+ break;
+ }
+
+ char _debug_buf[4096];
+ debug_get_default_value(param, _debug_buf, sizeof(_debug_buf));
+ if (param->annotations.num > 0) {
+ blog(LOG_DEBUG, "%s[%4lld] %.*s '%s' with value %.*s and %lld annotations:",
+ offset,
+ idx,
+ sizeof(_debug_type), _debug_type,
+ param->name,
+ sizeof(_debug_buf), _debug_buf,
+ param->annotations.num);
+ } else {
+ blog(LOG_DEBUG, "%s[%4lld] %.*s '%s' with value %.*s.",
+ offset,
+ idx,
+ sizeof(_debug_type), _debug_type,
+ param->name,
+ sizeof(_debug_buf), _debug_buf);
+ }
+
+}
+
+static void debug_param_annotation(struct gs_effect_param *param,
+ struct ep_param *param_in, unsigned long long idx, const char* offset)
+{
+ char _debug_buf[4096];
+ debug_get_default_value(param, _debug_buf, sizeof(_debug_buf));
+ blog(LOG_DEBUG, "%s[%4lld] %s '%s' with value %.*s",
+ offset,
+ idx,
+ param_in->type,
+ param->name,
+ sizeof(_debug_buf), _debug_buf);
+}
+
+static void debug_print_string(const char* offset, const char* str)
+{
+ // Bypass 4096 limit in def_log_handler.
+ char const *begin = str;
+ unsigned long long line = 1;
+ for (char const *here = begin; here[0] != '\0'; here++) {
+ char const * str = begin;
+ unsigned long long len = here - begin;
+ bool is_line = false;
+
+ if (here[0] == '\r') {
+ is_line = true;
+ if (here[1] == '\n') {
+ here += 1;
+ }
+ begin = here + 1;
+ } else if (here[0] == '\n') {
+ is_line = true;
+ begin = here + 1;
+ }
+
+ if (is_line) {
+ blog(LOG_DEBUG, "\t\t\t\t[%4lld] %.*s", line,
+ len, str);
+ line++;
+ }
+ }
+ if (begin[0] != '\0') {
+ // Final line was not written.
+ blog(LOG_DEBUG, "\t\t\t\t[%4lld] %*s", line, strlen(begin), begin);
+ }
+}
+#endif
+
bool ep_parse(struct effect_parser *ep, gs_effect_t *effect,
const char *effect_string, const char *file)
{
}
}
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "================================================================================");
+ blog(LOG_DEBUG, "Effect Parser reformatted shader '%s' to:", file);
+ debug_print_string("\t", ep->cfp.lex.reformatted);
+#endif
+
success = !error_data_has_errors(&ep->cfp.error_list);
if (success)
success = ep_compile(ep);
+
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "================================================================================");
+#endif
+
return success;
}
da_move(param->default_val, param_in->default_val);
param->type = get_effect_param_type(param_in->type);
+
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ debug_param(param, param_in, i, "\t\t");
+#endif
}
}
else if (strcmp(param_in->name, "World") == 0)
ep->effect->world = param;
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ debug_param(param, param_in, idx, "\t");
+#endif
+
ep_compile_param_annotations(param_in, param, ep);
}
param->sparam = gs_shader_get_param_by_name(shader,
param_name->array);
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ debug_param(param->eparam, 0, i, "\t\t\t\t");
+#endif
+
if (!param->sparam) {
blog(LOG_ERROR, "Effect shader parameter not found");
return false;
pass->vertshader = gs_vertexshader_create(shader_str.array,
location.array, NULL);
+
shader = pass->vertshader;
pass_params = &pass->vertshader_params.da;
} else if (type == GS_SHADER_PIXEL) {
pass_params = &pass->pixelshader_params.da;
}
-#if 0
- blog(LOG_DEBUG, "+++++++++++++++++++++++++++++++++++");
- blog(LOG_DEBUG, " %s", location.array);
- blog(LOG_DEBUG, "-----------------------------------");
- blog(LOG_DEBUG, "%s", shader_str.array);
- blog(LOG_DEBUG, "+++++++++++++++++++++++++++++++++++");
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "\t\t\t%s Shader:",
+ type == GS_SHADER_VERTEX ? "Vertex" : "Fragment");
+ blog(LOG_DEBUG, "\t\t\tCode:");
+ debug_print_string("\t\t\t\t\t", shader_str.array);
+ blog(LOG_DEBUG, "\t\t\tParameters:");
#endif
if (shader)
pass->name = bstrdup(pass_in->name);
pass->section = EFFECT_PASS;
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "\t\t[%4lld] Pass '%s':",
+ idx, pass->name);
+#endif
+
if (!ep_compile_pass_shader(ep, tech, pass, pass_in, idx,
GS_SHADER_VERTEX)) {
success = false;
da_resize(tech->passes, tech_in->passes.num);
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "\t[%4lld] Technique '%s' has %lld passes:",
+ idx, tech->name, tech->passes.num);
+#endif
+
for (i = 0; i < tech->passes.num; i++) {
if (!ep_compile_pass(ep, tech, tech_in, i))
success = false;
da_resize(ep->effect->params, ep->params.num);
da_resize(ep->effect->techniques, ep->techniques.num);
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "Shader has %lld parameters:", ep->params.num);
+#endif
+
for (i = 0; i < ep->params.num; i++)
ep_compile_param(ep, i);
+
+#if defined(_DEBUG) && defined(_DEBUG_SHADERS)
+ blog(LOG_DEBUG, "Shader has %lld techniques:", ep->techniques.num);
+#endif
+
for (i = 0; i < ep->techniques.num; i++) {
if (!ep_compile_technique(ep, i))
success = false;
obs-studio-23.1.0.tar.xz/libobs/graphics/graphics-imports.c -> obs-studio-23.2.0.tar.xz/libobs/graphics/graphics-imports.c
Changed
GRAPHICS_IMPORT_OPTIONAL(device_nv12_available);
+ GRAPHICS_IMPORT(device_debug_marker_begin);
+ GRAPHICS_IMPORT(device_debug_marker_end);
+
/* OSX/Cocoa specific functions */
#ifdef __APPLE__
GRAPHICS_IMPORT_OPTIONAL(device_texture_create_from_iosurface);
obs-studio-23.1.0.tar.xz/libobs/graphics/graphics-internal.h -> obs-studio-23.2.0.tar.xz/libobs/graphics/graphics-internal.h
Changed
bool (*device_nv12_available)(gs_device_t *device);
+ void (*device_debug_marker_begin)(gs_device_t *device,
+ const char *markername, const float color[4]);
+ void (*device_debug_marker_end)(gs_device_t *device);
+
#ifdef __APPLE__
/* OSX/Cocoa specific functions */
gs_texture_t *(*device_texture_create_from_iosurface)(gs_device_t *dev,
obs-studio-23.1.0.tar.xz/libobs/graphics/graphics.c -> obs-studio-23.2.0.tar.xz/libobs/graphics/graphics.c
Changed
graphics->exports.device_blend_function_separate(graphics->device,
GS_BLEND_SRCALPHA, GS_BLEND_INVSRCALPHA,
- GS_BLEND_ONE, GS_BLEND_ONE);
+ GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
graphics->cur_blend_state.enabled = true;
graphics->cur_blend_state.src_c = GS_BLEND_SRCALPHA;
graphics->cur_blend_state.dest_c = GS_BLEND_INVSRCALPHA;
graphics->cur_blend_state.src_a = GS_BLEND_ONE;
- graphics->cur_blend_state.dest_a = GS_BLEND_ONE;
+ graphics->cur_blend_state.dest_a = GS_BLEND_INVSRCALPHA;
graphics->exports.device_leave_context(graphics->device);
if (graphics->cur_blend_state.src_c != GS_BLEND_SRCALPHA ||
graphics->cur_blend_state.dest_c != GS_BLEND_INVSRCALPHA ||
graphics->cur_blend_state.src_a != GS_BLEND_ONE ||
- graphics->cur_blend_state.dest_a != GS_BLEND_ONE)
+ graphics->cur_blend_state.dest_a != GS_BLEND_INVSRCALPHA)
gs_blend_function_separate(
GS_BLEND_SRCALPHA, GS_BLEND_INVSRCALPHA,
- GS_BLEND_ONE, GS_BLEND_ONE);
+ GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
}
/* ------------------------------------------------------------------------- */
return NULL;
if (indices && num && (flags & GS_DUP_BUFFER) != 0) {
- size_t size = type == GS_UNSIGNED_SHORT
- ? sizeof(unsigned short)
- : sizeof(unsigned long);
+ size_t size = type == GS_UNSIGNED_SHORT ? 2 : 4;
indices = bmemdup(indices, size * num);
}
thread_graphics->device);
}
+void gs_debug_marker_begin(const float color[4],
+ const char *markername)
+{
+ if (!gs_valid("gs_debug_marker_begin"))
+ return;
+
+ if (!markername)
+ markername = "(null)";
+
+ thread_graphics->exports.device_debug_marker_begin(
+ thread_graphics->device, markername,
+ color);
+}
+
+void gs_debug_marker_begin_format(const float color[4],
+ const char *format, ...)
+{
+ if (!gs_valid("gs_debug_marker_begin"))
+ return;
+
+ if (format) {
+ char markername[64];
+ va_list args;
+ va_start(args, format);
+ vsnprintf(markername, sizeof(markername), format, args);
+ va_end(args);
+ thread_graphics->exports.device_debug_marker_begin(
+ thread_graphics->device, markername,
+ color);
+ } else {
+ gs_debug_marker_begin(color, NULL);
+ }
+}
+
+void gs_debug_marker_end(void)
+{
+ if (!gs_valid("gs_debug_marker_end"))
+ return;
+
+ thread_graphics->exports.device_debug_marker_end(
+ thread_graphics->device);
+}
+
#ifdef __APPLE__
/** Platform specific functions */
obs-studio-23.1.0.tar.xz/libobs/graphics/graphics.h -> obs-studio-23.2.0.tar.xz/libobs/graphics/graphics.h
Changed
EXPORT bool gs_nv12_available(void);
+#define GS_USE_DEBUG_MARKERS 0
+#if GS_USE_DEBUG_MARKERS
+static const float GS_DEBUG_COLOR_DEFAULT[] = { 0.5f, 0.5f, 0.5f, 1.0f };
+static const float GS_DEBUG_COLOR_RENDER_VIDEO[] = { 0.0f, 0.5f, 0.0f, 1.0f };
+static const float GS_DEBUG_COLOR_MAIN_TEXTURE[] = { 0.0f, 0.25f, 0.0f, 1.0f };
+static const float GS_DEBUG_COLOR_DISPLAY[] = { 0.0f, 0.5f, 0.5f, 1.0f };
+static const float GS_DEBUG_COLOR_SOURCE[] = { 0.0f, 0.5f, 5.0f, 1.0f };
+static const float GS_DEBUG_COLOR_ITEM[] = { 0.5f, 0.0f, 0.0f, 1.0f };
+static const float GS_DEBUG_COLOR_ITEM_TEXTURE[] = { 0.25f, 0.0f, 0.0f, 1.0f };
+static const float GS_DEBUG_COLOR_CONVERT_FORMAT[] = { 0.5f, 0.5f, 0.0f, 1.0f };
+#define GS_DEBUG_MARKER_BEGIN(color, markername) \
+ gs_debug_marker_begin(color, markername)
+#define GS_DEBUG_MARKER_BEGIN_FORMAT(color, format, ...) \
+ gs_debug_marker_begin_format(color, format, \
+ __VA_ARGS__)
+#define GS_DEBUG_MARKER_END() gs_debug_marker_end()
+#else
+#define GS_DEBUG_MARKER_BEGIN(color, markername) ((void)0)
+#define GS_DEBUG_MARKER_BEGIN_FORMAT(color, format, ...) ((void)0)
+#define GS_DEBUG_MARKER_END() ((void)0)
+#endif
+
+EXPORT void gs_debug_marker_begin(const float color[4],
+ const char *markername);
+EXPORT void gs_debug_marker_begin_format(const float color[4],
+ const char *format, ...);
+EXPORT void gs_debug_marker_end(void);
+
#ifdef __APPLE__
/** platform specific function for creating (GL_TEXTURE_RECTANGLE) textures
obs-studio-23.1.0.tar.xz/libobs/graphics/image-file.c -> obs-studio-23.2.0.tar.xz/libobs/graphics/image-file.c
Changed
static inline void *alloc_mem(gs_image_file_t *image, uint64_t *mem_usage,
size_t size)
{
+ UNUSED_PARAMETER(image);
+
if (mem_usage)
*mem_usage += size;
return bzalloc(size);
obs-studio-23.1.0.tar.xz/libobs/media-io/video-io.h -> obs-studio-23.2.0.tar.xz/libobs/media-io/video-io.h
Changed
return "601";
}
-static inline const char *get_video_range_name(enum video_range_type range)
+static inline enum video_range_type resolve_video_range(
+ enum video_format format, enum video_range_type range)
{
- switch (range) {
- case VIDEO_RANGE_FULL: return "Full";
- case VIDEO_RANGE_PARTIAL:
- case VIDEO_RANGE_DEFAULT:;
+ if (range == VIDEO_RANGE_DEFAULT) {
+ range = format_is_yuv(format)
+ ? VIDEO_RANGE_PARTIAL
+ : VIDEO_RANGE_FULL;
}
- return "Partial";
+ return range;
+}
+
+static inline const char *get_video_range_name(enum video_format format,
+ enum video_range_type range)
+{
+ range = resolve_video_range(format, range);
+ return range == VIDEO_RANGE_FULL ? "Full" : "Partial";
}
enum video_scale_type {
obs-studio-23.1.0.tar.xz/libobs/obs-audio-controls.c -> obs-studio-23.2.0.tar.xz/libobs/obs-audio-controls.c
Changed
pthread_mutex_unlock(&volmeter->callback_mutex);
}
+float obs_mul_to_db(float mul)
+{
+ return mul_to_db(mul);
+}
+
+float obs_db_to_mul(float db)
+{
+ return db_to_mul(db);
+}
obs-studio-23.1.0.tar.xz/libobs/obs-audio-controls.h -> obs-studio-23.2.0.tar.xz/libobs/obs-audio-controls.h
Changed
EXPORT void obs_volmeter_remove_callback(obs_volmeter_t *volmeter,
obs_volmeter_updated_t callback, void *param);
+EXPORT float obs_mul_to_db(float mul);
+EXPORT float obs_db_to_mul(float db);
+
#ifdef __cplusplus
}
#endif
obs-studio-23.1.0.tar.xz/libobs/obs-config.h -> obs-studio-23.2.0.tar.xz/libobs/obs-config.h
Changed
*
* Reset to zero each major version
*/
-#define LIBOBS_API_MINOR_VER 1
+#define LIBOBS_API_MINOR_VER 2
/*
* Increment if backward-compatible bug fix
obs-studio-23.1.0.tar.xz/libobs/obs-defs.h -> obs-studio-23.2.0.tar.xz/libobs/obs-defs.h
Changed
#define OBS_OUTPUT_DISCONNECTED -5
#define OBS_OUTPUT_UNSUPPORTED -6
#define OBS_OUTPUT_NO_SPACE -7
+#define OBS_OUTPUT_ENCODE_ERROR -8
#define OBS_VIDEO_SUCCESS 0
#define OBS_VIDEO_FAIL -1
obs-studio-23.1.0.tar.xz/libobs/obs-display.c -> obs-studio-23.2.0.tar.xz/libobs/obs-display.c
Changed
static inline void render_display_end()
{
gs_end_scene();
- gs_present();
}
void render_display(struct obs_display *display)
if (!display || !display->enabled) return;
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DISPLAY, "obs_display");
+
/* -------------------------------------------- */
pthread_mutex_lock(&display->draw_info_mutex);
pthread_mutex_unlock(&display->draw_callbacks_mutex);
render_display_end();
+
+ GS_DEBUG_MARKER_END();
+
+ gs_present();
}
void obs_display_set_enabled(obs_display_t *display, bool enable)
if (display)
display->background_color = color;
}
+
+void obs_display_size(obs_display_t *display,
+ uint32_t *width, uint32_t *height)
+{
+ *width = 0;
+ *height = 0;
+
+ if (display) {
+ pthread_mutex_lock(&display->draw_info_mutex);
+
+ *width = display->cx;
+ *height = display->cy;
+
+ pthread_mutex_unlock(&display->draw_info_mutex);
+ }
+}
obs-studio-23.1.0.tar.xz/libobs/obs-encoder.c -> obs-studio-23.2.0.tar.xz/libobs/obs-encoder.c
Changed
set_encoder_active(encoder, true);
}
-static void remove_connection(struct obs_encoder *encoder)
+static void remove_connection(struct obs_encoder *encoder, bool shutdown)
{
if (encoder->info.type == OBS_ENCODER_AUDIO) {
audio_output_disconnect(encoder->media, encoder->mixer_idx,
}
}
- obs_encoder_shutdown(encoder);
+ /* obs_encoder_shutdown locks init_mutex, so don't call it on encode
+ * errors, otherwise you can get a deadlock with outputs when they end
+ * data capture, which will lock init_mutex and the video callback
+ * mutex in the reverse order. instead, call shutdown before starting
+ * up again */
+ if (shutdown)
+ obs_encoder_shutdown(encoder);
set_encoder_active(encoder, false);
}
pthread_mutex_unlock(&encoder->callbacks_mutex);
if (last) {
- remove_connection(encoder);
+ remove_connection(encoder, true);
encoder->initialized = false;
if (encoder->destroy_on_stop) {
void full_stop(struct obs_encoder *encoder)
{
if (encoder) {
+ pthread_mutex_lock(&encoder->outputs_mutex);
+ for (size_t i = 0; i < encoder->outputs.num; i++) {
+ struct obs_output *output = encoder->outputs.array[i];
+ obs_output_force_stop(output);
+
+ pthread_mutex_lock(&output->interleaved_mutex);
+ output->info.encoded_packet(output->context.data, NULL);
+ pthread_mutex_unlock(&output->interleaved_mutex);
+ }
+ pthread_mutex_unlock(&encoder->outputs_mutex);
+
pthread_mutex_lock(&encoder->callbacks_mutex);
da_free(encoder->callbacks);
- remove_connection(encoder);
pthread_mutex_unlock(&encoder->callbacks_mutex);
+
+ remove_connection(encoder, false);
+ encoder->initialized = false;
}
}
bool received, struct encoder_packet *pkt)
{
if (!success) {
- full_stop(encoder);
blog(LOG_ERROR, "Error encoding with encoder '%s'",
encoder->context.name);
+ full_stop(encoder);
return;
}
}
static const char *do_encode_name = "do_encode";
-void do_encode(struct obs_encoder *encoder, struct encoder_frame *frame)
+bool do_encode(struct obs_encoder *encoder, struct encoder_frame *frame)
{
profile_start(do_encode_name);
if (!encoder->profile_encoder_encode_name)
send_off_encoder_packet(encoder, success, received, &pkt);
profile_end(do_encode_name);
+
+ return success;
}
static const char *receive_video_name = "receive_video";
enc_frame.frames = 1;
enc_frame.pts = encoder->cur_pts;
- do_encode(encoder, &enc_frame);
-
- encoder->cur_pts += encoder->timebase_num;
+ if (do_encode(encoder, &enc_frame))
+ encoder->cur_pts += encoder->timebase_num;
wait_for_audio:
profile_end(receive_video_name);
return success;
}
-static void send_audio_data(struct obs_encoder *encoder)
+static bool send_audio_data(struct obs_encoder *encoder)
{
struct encoder_frame enc_frame;
enc_frame.frames = (uint32_t)encoder->framesize;
enc_frame.pts = encoder->cur_pts;
- do_encode(encoder, &enc_frame);
+ if (!do_encode(encoder, &enc_frame))
+ return false;
encoder->cur_pts += encoder->framesize;
+ return true;
}
static const char *receive_audio_name = "receive_audio";
if (!buffer_audio(encoder, data))
goto end;
- while (encoder->audio_input_buffer[0].size >= encoder->framesize_bytes)
- send_audio_data(encoder);
+ while (encoder->audio_input_buffer[0].size >= encoder->framesize_bytes) {
+ if (!send_audio_data(encoder)) {
+ break;
+ }
+ }
UNUSED_PARAMETER(mix_idx);
obs-studio-23.1.0.tar.xz/libobs/obs-internal.h -> obs-studio-23.2.0.tar.xz/libobs/obs-internal.h
Changed
struct obs_source_frame *cur_async_frame;
bool async_gpu_conversion;
enum video_format async_format;
+ bool async_full_range;
enum video_format async_cache_format;
+ bool async_cache_full_range;
enum gs_color_format async_texture_format;
- float async_color_matrix[16];
- bool async_full_range;
- float async_color_range_min[3];
- float async_color_range_max[3];
int async_plane_offset[2];
bool async_flip;
bool async_active;
#define CAPTION_LINE_BYTES (4*CAPTION_LINE_CHARS)
struct caption_text {
char text[CAPTION_LINE_BYTES+1];
+ double display_duration;
struct caption_text *next;
};
extern bool start_gpu_encode(obs_encoder_t *encoder);
extern void stop_gpu_encode(obs_encoder_t *encoder);
-extern void do_encode(struct obs_encoder *encoder, struct encoder_frame *frame);
+extern bool do_encode(struct obs_encoder *encoder, struct encoder_frame *frame);
extern void send_off_encoder_packet(obs_encoder_t *encoder, bool success,
bool received, struct encoder_packet *pkt);
obs-studio-23.1.0.tar.xz/libobs/obs-nix.c -> obs-studio-23.2.0.tar.xz/libobs/obs-nix.c
Changed
case OBS_KEY_F22: return XK_F22;
case OBS_KEY_F23: return XK_F23;
case OBS_KEY_F24: return XK_F24;
+ case OBS_KEY_F25: return XK_F25;
+ case OBS_KEY_F26: return XK_F26;
+ case OBS_KEY_F27: return XK_F27;
+ case OBS_KEY_F28: return XK_F28;
+ case OBS_KEY_F29: return XK_F29;
+ case OBS_KEY_F30: return XK_F30;
+ case OBS_KEY_F31: return XK_F31;
+ case OBS_KEY_F32: return XK_F32;
+ case OBS_KEY_F33: return XK_F33;
+ case OBS_KEY_F34: return XK_F34;
+ case OBS_KEY_F35: return XK_F35;
case OBS_KEY_MENU: return XK_Menu;
case OBS_KEY_HYPER_L: return XK_Hyper_L;
obs-studio-23.1.0.tar.xz/libobs/obs-output.c -> obs-studio-23.2.0.tar.xz/libobs/obs-output.c
Changed
bool obs_output_start(obs_output_t *output)
{
bool encoded;
+ bool has_service;
if (!obs_output_valid(output, "obs_output_start"))
return false;
if (!output->context.data)
return false;
- encoded = (output->info.flags & OBS_OUTPUT_ENCODED) != 0;
+ has_service = (output->info.flags & OBS_OUTPUT_SERVICE) != 0;
+ if (has_service && !obs_service_initialize(output->service, output))
+ return false;
+ encoded = (output->info.flags & OBS_OUTPUT_ENCODED) != 0;
if (encoded && output->delay_sec) {
return obs_output_delay_start(output);
} else {
double frame_timestamp = (out.pts * out.timebase_num) /
(double)out.timebase_den;
- /* TODO if output->caption_timestamp is more than 5 seconds
- * old, send empty frame */
if (output->caption_head &&
output->caption_timestamp <= frame_timestamp) {
- blog(LOG_INFO,"Sending caption: %f \"%s\"",
+ blog(LOG_DEBUG,"Sending caption: %f \"%s\"",
frame_timestamp,
&output->caption_head->text[0]);
+ double display_duration =
+ output->caption_head->display_duration;
+
if (add_caption(output, &out)) {
output->caption_timestamp =
- frame_timestamp + 2.0;
+ frame_timestamp + display_duration;
}
}
if (!encoded)
return false;
- if (has_service && !obs_service_initialize(output->service, output))
- return false;
if (has_video && !obs_encoder_initialize(output->video_encoder))
return false;
if (has_audio && !initialize_audio_encoders(output, num_mixes))
return false;
- if (has_video && has_audio)
- pair_encoders(output, num_mixes);
-
return true;
}
bool obs_output_begin_data_capture(obs_output_t *output, uint32_t flags)
{
bool encoded, has_video, has_audio, has_service;
+ size_t num_mixes;
if (!obs_output_valid(output, "obs_output_begin_data_capture"))
return false;
has_service))
return false;
+ num_mixes = num_audio_mixes(output);
+ if (has_video && has_audio)
+ pair_encoders(output, num_mixes);
+
os_atomic_set_bool(&output->data_active, true);
hook_data_capture(output, encoded, has_video, has_audio);
#if BUILD_CAPTIONS
static struct caption_text *caption_text_new(const char *text, size_t bytes,
- struct caption_text *tail, struct caption_text **head)
+ struct caption_text *tail, struct caption_text **head,
+ double display_duration)
{
struct caption_text *next = bzalloc(sizeof(struct caption_text));
snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s",
(int)bytes, text);
+ next->display_duration = display_duration;
if (!*head) {
*head = next;
{
if (!obs_output_valid(output, "obs_output_output_caption_text1"))
return;
+ obs_output_output_caption_text2(output, text, 2.0f);
+}
+
+void obs_output_output_caption_text2(obs_output_t *output, const char *text,
+ double display_duration)
+{
+ if (!obs_output_valid(output, "obs_output_output_caption_text2"))
+ return;
if (!active(output))
return;
output->caption_tail = caption_text_new(
text, size,
output->caption_tail,
- &output->caption_head);
+ &output->caption_head,
+ display_duration);
pthread_mutex_unlock(&output->caption_mutex);
}
obs-studio-23.1.0.tar.xz/libobs/obs-properties.c -> obs-studio-23.2.0.tar.xz/libobs/obs-properties.c
Changed
struct float_data {
double min, max, step;
enum obs_number_type type;
+ char *suffix;
};
struct int_data {
int min, max, step;
enum obs_number_type type;
+ char *suffix;
};
struct list_item {
DARRAY(struct frame_rate_range) ranges;
};
+struct group_data {
+ enum obs_group_type type;
+ obs_properties_t *content;
+};
+
static inline void path_data_free(struct path_data *data)
{
bfree(data->default_path);
da_free(data->ranges);
}
+static inline void group_data_free(struct group_data *data) {
+ obs_properties_destroy(data->content);
+}
+
+static inline void int_data_free(struct int_data *data) {
+ if (data->suffix)
+ bfree(data->suffix);
+}
+
+static inline void float_data_free(struct float_data *data) {
+ if (data->suffix)
+ bfree(data->suffix);
+}
+
struct obs_properties;
struct obs_property {
struct obs_property *first_property;
struct obs_property **last;
+ struct obs_property *parent;
};
obs_properties_t *obs_properties_create(void)
editable_list_data_free(get_property_data(property));
else if (property->type == OBS_PROPERTY_FRAME_RATE)
frame_rate_data_free(get_property_data(property));
+ else if (property->type == OBS_PROPERTY_GROUP)
+ group_data_free(get_property_data(property));
+ else if (property->type == OBS_PROPERTY_INT)
+ int_data_free(get_property_data(property));
+ else if (property->type == OBS_PROPERTY_FLOAT)
+ float_data_free(get_property_data(property));
bfree(property->name);
bfree(property->desc);
if (strcmp(property->name, name) == 0)
return property;
+ if (property->type == OBS_PROPERTY_GROUP) {
+ obs_properties_t *group =
+ obs_property_group_content(property);
+ obs_property_t *found = obs_properties_get(group, name);
+ if (found != NULL) {
+ return found;
+ }
+ }
+
property = property->next;
}
return NULL;
}
+obs_properties_t *obs_properties_get_parent(obs_properties_t *props)
+{
+ return props->parent ? props->parent->parent : NULL;
+}
+
+void obs_properties_remove_by_name(obs_properties_t *props, const char *name)
+{
+ if (!props)
+ return;
+
+ /* obs_properties_t is a forward-linked-list, so we need to keep both
+ * previous and current pointers around. That way we can fix up the
+ * pointers for the previous element if we find a match.
+ */
+ struct obs_property *cur = props->first_property;
+ struct obs_property *prev = props->first_property;
+
+ while (cur) {
+ if (strcmp(cur->name, name) == 0) {
+ prev->next = cur->next;
+ cur->next = 0;
+ obs_property_destroy(cur);
+ break;
+ }
+
+ prev = cur;
+ cur = cur->next;
+ }
+}
+
void obs_properties_apply_settings(obs_properties_t *props, obs_data_t *settings)
{
struct obs_property *p;
case OBS_PROPERTY_EDITABLE_LIST:
return sizeof(struct editable_list_data);
case OBS_PROPERTY_FRAME_RATE:return sizeof(struct frame_rate_data);
+ case OBS_PROPERTY_GROUP: return sizeof(struct group_data);
}
return 0;
return p;
}
-static inline bool has_prop(struct obs_properties *props, const char *name)
+static inline obs_properties_t *get_topmost_parent(obs_properties_t *props)
+{
+ obs_properties_t *parent = props;
+ obs_properties_t *last_parent = parent;
+ while (parent) {
+ last_parent = parent;
+ parent = obs_properties_get_parent(parent);
+ }
+ return last_parent;
+}
+
+static inline bool contains_prop(struct obs_properties *props, const char *name)
{
struct obs_property *p = props->first_property;
return true;
}
+ if (p->type == OBS_PROPERTY_GROUP) {
+ if (contains_prop(obs_property_group_content(p), name)) {
+ return true;
+ }
+ }
+
p = p->next;
}
return false;
}
+static inline bool has_prop(struct obs_properties *props, const char *name)
+{
+ return contains_prop(get_topmost_parent(props), name);
+}
+
static inline void *get_property_data(struct obs_property *prop)
{
return (uint8_t*)prop + sizeof(struct obs_property);
return p;
}
+static bool check_property_group_recursion(obs_properties_t *parent,
+ obs_properties_t *group)
+{
+ /* Scan the group for the parent. */
+ obs_property_t *current_property = group->first_property;
+ while (current_property) {
+ if (current_property->type == OBS_PROPERTY_GROUP) {
+ obs_properties_t *cprops =
+ obs_property_group_content(current_property);
+ if (cprops == parent) {
+ /* Contains find_props */
+ return true;
+ } else if (cprops == group) {
+ /* Contains self, shouldn't be possible but
+ * lets verify anyway. */
+ return true;
+ }
+ check_property_group_recursion(cprops, group);
+ }
+
+ current_property = current_property->next;
+ }
+
+ return false;
+}
+
+static bool check_property_group_duplicates(obs_properties_t *parent,
+ obs_properties_t *group)
+{
+ obs_property_t *current_property = group->first_property;
+ while (current_property) {
+ if (has_prop(parent, current_property->name)) {
+ return true;
+ }
+
+ current_property = current_property->next;
+ }
+
+ return false;
+}
+
+obs_property_t *obs_properties_add_group(obs_properties_t *props,
+ const char *name, const char *desc, enum obs_group_type type,
+ obs_properties_t *group)
+{
+ if (!props || has_prop(props, name)) return NULL;
+ if (!group) return NULL;
+
+ /* Prevent recursion. */
+ if (props == group) return NULL;
+ if (check_property_group_recursion(props, group)) return NULL;
+
+ /* Prevent duplicate properties */
+ if (check_property_group_duplicates(props, group)) return NULL;
+
+ obs_property_t *p = new_prop(props, name, desc, OBS_PROPERTY_GROUP);
+ group->parent = p;
+
+ struct group_data *data = get_property_data(p);
+ data->type = type;
+ data->content = group;
+ return p;
+}
+
/* ------------------------------------------------------------------------- */
static inline bool is_combo(struct obs_property *p)
{
if (p) {
if (p->modified) {
- return p->modified(p->parent, p, settings);
+ obs_properties_t *top = get_topmost_parent(p->parent);
+ return p->modified(top, p, settings);
} else if (p->modified2) {
- return p->modified2(p->priv, p->parent, p, settings);
+ obs_properties_t *top = get_topmost_parent(p->parent);
+ return p->modified2(p->priv, top, p, settings);
}
}
return false;
struct button_data *data = get_type_data(p,
OBS_PROPERTY_BUTTON);
if (data && data->callback) {
+ obs_properties_t *top = get_topmost_parent(p->parent);
if (p->priv)
- return data->callback(p->parent, p, p->priv);
- return data->callback(p->parent, p,
+ return data->callback(top, p, p->priv);
+ return data->callback(top, p,
(context ? context->data : NULL));
}
}
return data ? data->type : OBS_NUMBER_SCROLLER;
}
+const char *obs_property_int_suffix(obs_property_t *p)
+{
+ struct int_data *data = get_type_data(p, OBS_PROPERTY_INT);
+ return data ? data->suffix : NULL;
+}
+
double obs_property_float_min(obs_property_t *p)
{
struct float_data *data = get_type_data(p, OBS_PROPERTY_FLOAT);
return data ? data->step : 0;
}
+const char *obs_property_float_suffix(obs_property_t *p)
+{
+ struct float_data *data = get_type_data(p, OBS_PROPERTY_FLOAT);
+ return data ? data->suffix : NULL;
+}
+
enum obs_number_type obs_property_float_type(obs_property_t *p)
{
struct float_data *data = get_type_data(p, OBS_PROPERTY_FLOAT);
data->step = step;
}
+void obs_property_int_set_suffix(obs_property_t *p, const char *suffix)
+{
+ struct int_data *data = get_type_data(p, OBS_PROPERTY_INT);
+ if (!data)
+ return;
+
+ bfree(data->suffix);
+ data->suffix = bstrdup(suffix);
+}
+
+void obs_property_float_set_suffix(obs_property_t *p, const char *suffix)
+{
+ struct float_data *data = get_type_data(p, OBS_PROPERTY_FLOAT);
+ if (!data)
+ return;
+
+ bfree(data->suffix);
+ data->suffix = bstrdup(suffix);
+}
+
void obs_property_list_clear(obs_property_t *p)
{
struct list_data *data = get_list_data(p);
{
return obs_property_text_type(p);
}
+
+enum obs_group_type obs_property_group_type(obs_property_t *p)
+{
+ struct group_data *data = get_type_data(p, OBS_PROPERTY_GROUP);
+ return data ? data->type : OBS_COMBO_INVALID;
+}
+
+obs_properties_t *obs_property_group_content(obs_property_t *p)
+{
+ struct group_data *data = get_type_data(p, OBS_PROPERTY_GROUP);
+ return data ? data->content : NULL;
+}
obs-studio-23.1.0.tar.xz/libobs/obs-properties.h -> obs-studio-23.2.0.tar.xz/libobs/obs-properties.h
Changed
OBS_PROPERTY_FONT,
OBS_PROPERTY_EDITABLE_LIST,
OBS_PROPERTY_FRAME_RATE,
+ OBS_PROPERTY_GROUP,
};
enum obs_combo_format {
OBS_NUMBER_SLIDER
};
+enum obs_group_type {
+ OBS_COMBO_INVALID,
+ OBS_GROUP_NORMAL,
+ OBS_GROUP_CHECKABLE,
+};
+
#define OBS_FONT_BOLD (1<<0)
#define OBS_FONT_ITALIC (1<<1)
#define OBS_FONT_UNDERLINE (1<<2)
EXPORT obs_property_t *obs_properties_get(obs_properties_t *props,
const char *property);
+EXPORT obs_properties_t *obs_properties_get_parent(obs_properties_t *props);
+
+/** Remove a property from a properties list.
+ *
+ * Removes a property from a properties list. Only valid in either
+ * get_properties or modified_callback(2). modified_callback(2) must return
+ * true so that all UI properties are rebuilt and returning false is undefined
+ * behavior.
+ *
+ * @param props Properties to remove from.
+ * @param property Name of the property to remove.
+ */
+EXPORT void obs_properties_remove_by_name(obs_properties_t *props,
+ const char *property);
+
/**
* Applies settings to the properties by calling all the necessary
* modification callbacks
EXPORT obs_property_t *obs_properties_add_frame_rate(obs_properties_t *props,
const char *name, const char *description);
+EXPORT obs_property_t *obs_properties_add_group(obs_properties_t *props,
+ const char *name, const char *description, enum obs_group_type type,
+ obs_properties_t *group);
+
+
/* ------------------------------------------------------------------------- */
/**
EXPORT int obs_property_int_max(obs_property_t *p);
EXPORT int obs_property_int_step(obs_property_t *p);
EXPORT enum obs_number_type obs_property_int_type(obs_property_t *p);
+EXPORT const char * obs_property_int_suffix(obs_property_t *p);
EXPORT double obs_property_float_min(obs_property_t *p);
EXPORT double obs_property_float_max(obs_property_t *p);
EXPORT double obs_property_float_step(obs_property_t *p);
EXPORT enum obs_number_type obs_property_float_type(obs_property_t *p);
+EXPORT const char * obs_property_float_suffix(obs_property_t *p);
EXPORT enum obs_text_type obs_property_text_type(obs_property_t *p);
EXPORT enum obs_path_type obs_property_path_type(obs_property_t *p);
EXPORT const char * obs_property_path_filter(obs_property_t *p);
int min, int max, int step);
EXPORT void obs_property_float_set_limits(obs_property_t *p,
double min, double max, double step);
+EXPORT void obs_property_int_set_suffix(obs_property_t *p, const char *suffix);
+EXPORT void obs_property_float_set_suffix(obs_property_t *p, const char *suffix);
EXPORT void obs_property_list_clear(obs_property_t *p);
EXPORT struct media_frames_per_second obs_property_frame_rate_fps_range_max(
obs_property_t *p, size_t idx);
+EXPORT enum obs_group_type obs_property_group_type(obs_property_t *p);
+EXPORT obs_properties_t *obs_property_group_content(obs_property_t *p);
+
#ifndef SWIG
DEPRECATED
EXPORT enum obs_text_type obs_proprety_text_type(obs_property_t *p);
obs-studio-23.1.0.tar.xz/libobs/obs-scene.c -> obs-studio-23.2.0.tar.xz/libobs/obs-scene.c
Changed
scale.y = (float)height * item->scale.y;
}
+ item->box_scale = scale;
+
add_alignment(&base_origin, item->align, (int)scale.x, (int)scale.y);
matrix4_identity(&item->box_transform);
static void render_item_texture(struct obs_scene_item *item)
{
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_ITEM_TEXTURE, "render_item_texture");
+
gs_texture_t *tex = gs_texrender_get_texture(item->item_render);
gs_effect_t *effect = obs->video.default_effect;
enum obs_scale_type type = item->scale_filter;
}
}
+ gs_blend_state_push();
+ gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
+
while (gs_effect_loop(effect, "Draw"))
obs_source_draw(tex, 0, 0, 0, 0, 0);
+
+ gs_blend_state_pop();
+
+ GS_DEBUG_MARKER_END();
}
static inline void render_item(struct obs_scene_item *item)
{
+ GS_DEBUG_MARKER_BEGIN_FORMAT(GS_DEBUG_COLOR_ITEM, "Item: %s",
+ obs_source_get_name(item->source));
+
if (item->item_render) {
uint32_t width = obs_source_get_width(item->source);
uint32_t height = obs_source_get_height(item->source);
- if (!width || !height)
- return;
+ if (!width || !height) {
+ goto cleanup;
+ }
uint32_t cx = calc_cx(item, width);
uint32_t cy = calc_cy(item, height);
-(float)item->crop.top,
0.0f);
- gs_blend_state_push();
- gs_blend_function(GS_BLEND_ONE, GS_BLEND_ZERO);
obs_source_video_render(item->source);
- gs_blend_state_pop();
+
gs_texrender_end(item->item_render);
}
}
obs_source_video_render(item->source);
}
gs_matrix_pop();
+
+cleanup:
+ GS_DEBUG_MARKER_END();
}
static void scene_video_tick(void *data, float seconds)
dst->output_scale = src->output_scale;
dst->scale_filter = src->scale_filter;
dst->box_transform = src->box_transform;
+ dst->box_scale = src->box_scale;
dst->draw_transform = src->draw_transform;
dst->bounds_type = src->bounds_type;
dst->bounds_align = src->bounds_align;
matrix4_copy(transform, &item->box_transform);
}
+void obs_sceneitem_get_box_scale(const obs_sceneitem_t *item,
+ struct vec2 *scale)
+{
+ if (item)
+ *scale = item->box_scale;
+}
+
bool obs_sceneitem_visible(const obs_sceneitem_t *item)
{
return item ? item->user_visible : false;
obs-studio-23.1.0.tar.xz/libobs/obs-scene.h -> obs-studio-23.2.0.tar.xz/libobs/obs-scene.h
Changed
enum obs_scale_type scale_filter;
struct matrix4 box_transform;
+ struct vec2 box_scale;
struct matrix4 draw_transform;
enum obs_bounds_type bounds_type;
obs-studio-23.1.0.tar.xz/libobs/obs-source-deinterlace.c -> obs-studio-23.2.0.tar.xz/libobs/obs-source-deinterlace.c
Changed
gs_eparam_t *dimensions = gs_effect_get_param_by_name(effect,
"dimensions");
struct vec2 size = {(float)s->async_width, (float)s->async_height};
- bool yuv = format_is_yuv(s->async_format);
- bool limited_range = yuv && !s->async_full_range;
- const char *tech = yuv ? "DrawMatrix" : "Draw";
gs_texture_t *cur_tex = s->async_texrender ?
gs_texrender_get_texture(s->async_texrender) :
gs_effect_set_int(field, s->deinterlace_top_first);
gs_effect_set_vec2(dimensions, &size);
- if (yuv) {
- gs_eparam_t *color_matrix = gs_effect_get_param_by_name(
- effect, "color_matrix");
- gs_effect_set_val(color_matrix, s->async_color_matrix,
- sizeof(float) * 16);
- }
- if (limited_range) {
- const size_t size = sizeof(float) * 3;
- gs_eparam_t *color_range_min = gs_effect_get_param_by_name(
- effect, "color_range_min");
- gs_eparam_t *color_range_max = gs_effect_get_param_by_name(
- effect, "color_range_max");
- gs_effect_set_val(color_range_min, s->async_color_range_min,
- size);
- gs_effect_set_val(color_range_max, s->async_color_range_max,
- size);
- }
-
frame2_ts = s->deinterlace_frame_ts + s->deinterlace_offset +
s->deinterlace_half_duration - TWOX_TOLERANCE;
gs_effect_set_bool(frame2, obs->video.video_time >= frame2_ts);
- while (gs_effect_loop(effect, tech))
+ while (gs_effect_loop(effect, "Draw"))
gs_draw_sprite(NULL, s->async_flip ? GS_FLIP_V : 0,
s->async_width, s->async_height);
}
obs-studio-23.1.0.tar.xz/libobs/obs-source-transition.c -> obs-studio-23.2.0.tar.xz/libobs/obs-source-transition.c
Changed
"transition_stop");
}
+void obs_transition_force_stop(obs_source_t *transition)
+{
+ handle_stop(transition);
+}
+
void obs_transition_video_render(obs_source_t *transition,
obs_transition_video_render_callback_t callback)
{
cx = get_cx(transition);
cy = get_cy(transition);
- if (cx && cy)
+ if (cx && cy) {
+ gs_blend_state_push();
+ gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
+
callback(transition->context.data, tex[0], tex[1], t,
cx, cy);
+ gs_blend_state_pop();
+ }
+
} else if (state.transitioning_audio) {
if (state.s[1]) {
gs_matrix_push();
obs-studio-23.1.0.tar.xz/libobs/obs-source.c -> obs-studio-23.2.0.tar.xz/libobs/obs-source.c
Changed
CONVERT_420,
CONVERT_422_U,
CONVERT_422_Y,
+ CONVERT_444,
+ CONVERT_800,
+ CONVERT_RGB_LIMITED,
};
-static inline enum convert_type get_convert_type(enum video_format format)
+static inline enum convert_type get_convert_type(enum video_format format,
+ bool full_range)
{
switch (format) {
case VIDEO_FORMAT_I420:
return CONVERT_420;
case VIDEO_FORMAT_NV12:
return CONVERT_NV12;
+ case VIDEO_FORMAT_I444:
+ return CONVERT_444;
case VIDEO_FORMAT_YVYU:
case VIDEO_FORMAT_YUY2:
return CONVERT_422_U;
case VIDEO_FORMAT_Y800:
- case VIDEO_FORMAT_I444:
+ return CONVERT_800;
+
case VIDEO_FORMAT_NONE:
case VIDEO_FORMAT_RGBA:
case VIDEO_FORMAT_BGRA:
case VIDEO_FORMAT_BGRX:
- return CONVERT_NONE;
+ return full_range ? CONVERT_NONE : CONVERT_RGB_LIMITED;
}
return CONVERT_NONE;
static inline bool set_packed422_sizes(struct obs_source *source,
const struct obs_source_frame *frame)
{
- source->async_convert_height = frame->height;
source->async_convert_width = frame->width / 2;
+ source->async_convert_height = frame->height;
source->async_texture_format = GS_BGRA;
return true;
}
+static inline bool set_planar444_sizes(struct obs_source *source,
+ const struct obs_source_frame *frame)
+{
+ source->async_convert_width = frame->width;
+ source->async_convert_height = frame->height * 3;
+ source->async_texture_format = GS_R8;
+ source->async_plane_offset[0] = (int)(frame->data[1] - frame->data[0]);
+ source->async_plane_offset[1] = (int)(frame->data[2] - frame->data[0]);
+ return true;
+}
+
static inline bool set_planar420_sizes(struct obs_source *source,
const struct obs_source_frame *frame)
{
return true;
}
+static inline bool set_y800_sizes(struct obs_source *source,
+ const struct obs_source_frame *frame)
+{
+ source->async_convert_width = frame->width;
+ source->async_convert_height = frame->height;
+ source->async_texture_format = GS_R8;
+ return true;
+}
+
+static inline bool set_rgb_limited_sizes(struct obs_source *source,
+ const struct obs_source_frame *frame)
+{
+ source->async_convert_width = frame->width;
+ source->async_convert_height = frame->height;
+ source->async_texture_format = convert_video_format(frame->format);
+ return true;
+}
+
static inline bool init_gpu_conversion(struct obs_source *source,
const struct obs_source_frame *frame)
{
- switch (get_convert_type(frame->format)) {
+ switch (get_convert_type(frame->format, frame->full_range)) {
case CONVERT_422_Y:
case CONVERT_422_U:
return set_packed422_sizes(source, frame);
case CONVERT_NV12:
return set_nv12_sizes(source, frame);
- break;
+
+ case CONVERT_444:
+ return set_planar444_sizes(source, frame);
+
+ case CONVERT_800:
+ return set_y800_sizes(source, frame);
+
+ case CONVERT_RGB_LIMITED:
+ return set_rgb_limited_sizes(source, frame);
case CONVERT_NONE:
assert(false && "No conversion requested");
bool set_async_texture_size(struct obs_source *source,
const struct obs_source_frame *frame)
{
- enum convert_type cur = get_convert_type(frame->format);
+ enum convert_type cur = get_convert_type(frame->format,
+ frame->full_range);
- if (source->async_width == frame->width &&
- source->async_height == frame->height &&
- source->async_format == frame->format)
+ if (source->async_width == frame->width &&
+ source->async_height == frame->height &&
+ source->async_format == frame->format &&
+ source->async_full_range == frame->full_range)
return true;
- source->async_width = frame->width;
- source->async_height = frame->height;
- source->async_format = frame->format;
+ source->async_width = frame->width;
+ source->async_height = frame->height;
+ source->async_format = frame->format;
+ source->async_full_range = frame->full_range;
gs_enter_context(obs->video.graphics);
if (cur != CONVERT_NONE && init_gpu_conversion(source, frame)) {
source->async_gpu_conversion = true;
+ enum gs_color_format format = CONVERT_RGB_LIMITED ?
+ convert_video_format(frame->format) : GS_BGRX;
source->async_texrender =
- gs_texrender_create(GS_BGRX, GS_ZS_NONE);
+ gs_texrender_create(format, GS_ZS_NONE);
source->async_texture = gs_texture_create(
source->async_convert_width,
static void upload_raw_frame(gs_texture_t *tex,
const struct obs_source_frame *frame)
{
- switch (get_convert_type(frame->format)) {
+ switch (get_convert_type(frame->format, frame->full_range)) {
case CONVERT_422_U:
case CONVERT_422_Y:
+ case CONVERT_800:
+ case CONVERT_RGB_LIMITED:
gs_texture_set_image(tex, frame->data[0],
frame->linesize[0], false);
break;
case CONVERT_420:
- gs_texture_set_image(tex, frame->data[0],
- frame->width, false);
- break;
-
case CONVERT_NV12:
+ case CONVERT_444:
gs_texture_set_image(tex, frame->data[0],
frame->width, false);
break;
}
}
-static const char *select_conversion_technique(enum video_format format)
+static const char *select_conversion_technique(enum video_format format,
+ bool full_range)
{
switch (format) {
case VIDEO_FORMAT_UYVY:
case VIDEO_FORMAT_NV12:
return "NV12_Reverse";
- break;
+
+ case VIDEO_FORMAT_I444:
+ return "I444_Reverse";
case VIDEO_FORMAT_Y800:
+ return full_range ? "Y800_Full" : "Y800_Limited";
+
case VIDEO_FORMAT_BGRA:
case VIDEO_FORMAT_BGRX:
case VIDEO_FORMAT_RGBA:
case VIDEO_FORMAT_NONE:
- case VIDEO_FORMAT_I444:
- assert(false && "No conversion requested");
+ if (full_range)
+ assert(false && "No conversion requested");
+ else
+ return "RGB_Limited";
break;
}
return NULL;
const struct obs_source_frame *frame,
gs_texture_t *tex, gs_texrender_t *texrender)
{
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_CONVERT_FORMAT, "Convert Format");
+
gs_texrender_reset(texrender);
upload_raw_frame(tex, frame);
float convert_width = (float)source->async_convert_width;
gs_effect_t *conv = obs->video.conversion_effect;
- gs_technique_t *tech = gs_effect_get_technique(conv,
- select_conversion_technique(frame->format));
+ const char *tech_name = select_conversion_technique(frame->format,
+ frame->full_range);
+ gs_technique_t *tech = gs_effect_get_technique(conv, tech_name);
- if (!gs_texrender_begin(texrender, cx, cy))
+ if (!gs_texrender_begin(texrender, cx, cy)) {
+ GS_DEBUG_MARKER_END();
return false;
+ }
gs_technique_begin(tech);
gs_technique_begin_pass(tech, 0);
set_eparami(conv, "int_v_plane_offset",
(int)source->async_plane_offset[1]);
+ gs_effect_set_val(gs_effect_get_param_by_name(conv, "color_matrix"),
+ frame->color_matrix, sizeof(float) * 16);
+ if (!frame->full_range) {
+ gs_eparam_t *min_param = gs_effect_get_param_by_name(
+ conv, "color_range_min");
+ gs_effect_set_val(min_param, frame->color_range_min,
+ sizeof(float) * 3);
+ gs_eparam_t *max_param = gs_effect_get_param_by_name(
+ conv, "color_range_max");
+ gs_effect_set_val(max_param, frame->color_range_max,
+ sizeof(float) * 3);
+ }
+
gs_ortho(0.f, (float)cx, 0.f, (float)cy, -100.f, 100.f);
gs_draw_sprite(tex, 0, cx, cy);
gs_texrender_end(texrender);
+ GS_DEBUG_MARKER_END();
return true;
}
const struct obs_source_frame *frame,
gs_texture_t *tex, gs_texrender_t *texrender)
{
- enum convert_type type = get_convert_type(frame->format);
- uint8_t *ptr;
- uint32_t linesize;
+ enum convert_type type;
source->async_flip = frame->flip;
- source->async_full_range = frame->full_range;
- memcpy(source->async_color_matrix, frame->color_matrix,
- sizeof(frame->color_matrix));
- memcpy(source->async_color_range_min, frame->color_range_min,
- sizeof frame->color_range_min);
- memcpy(source->async_color_range_max, frame->color_range_max,
- sizeof frame->color_range_max);
if (source->async_gpu_conversion && texrender)
return update_async_texrender(source, frame, tex, texrender);
+ type = get_convert_type(frame->format, frame->full_range);
if (type == CONVERT_NONE) {
gs_texture_set_image(tex, frame->data[0], frame->linesize[0],
false);
return true;
}
- if (!gs_texture_map(tex, &ptr, &linesize))
- return false;
-
- if (type == CONVERT_420)
- decompress_420((const uint8_t* const*)frame->data,
- frame->linesize,
- 0, frame->height, ptr, linesize);
-
- else if (type == CONVERT_NV12)
- decompress_nv12((const uint8_t* const*)frame->data,
- frame->linesize,
- 0, frame->height, ptr, linesize);
-
- else if (type == CONVERT_422_Y)
- decompress_422(frame->data[0], frame->linesize[0],
- 0, frame->height, ptr, linesize, true);
-
- else if (type == CONVERT_422_U)
- decompress_422(frame->data[0], frame->linesize[0],
- 0, frame->height, ptr, linesize, false);
-
- gs_texture_unmap(tex);
- return true;
+ return false;
}
static inline void obs_source_draw_texture(struct obs_source *source,
- gs_effect_t *effect, float *color_matrix,
- float const *color_range_min, float const *color_range_max)
+ gs_effect_t *effect)
{
gs_texture_t *tex = source->async_texture;
gs_eparam_t *param;
if (source->async_texrender)
tex = gs_texrender_get_texture(source->async_texrender);
- if (color_range_min) {
- size_t const size = sizeof(float) * 3;
- param = gs_effect_get_param_by_name(effect, "color_range_min");
- gs_effect_set_val(param, color_range_min, size);
- }
-
- if (color_range_max) {
- size_t const size = sizeof(float) * 3;
- param = gs_effect_get_param_by_name(effect, "color_range_max");
- gs_effect_set_val(param, color_range_max, size);
- }
-
- if (color_matrix) {
- param = gs_effect_get_param_by_name(effect, "color_matrix");
- gs_effect_set_val(param, color_matrix, sizeof(float) * 16);
- }
-
param = gs_effect_get_param_by_name(effect, "image");
gs_effect_set_texture(param, tex);
static void obs_source_draw_async_texture(struct obs_source *source)
{
- gs_effect_t *effect = gs_get_effect();
- bool yuv = format_is_yuv(source->async_format);
- bool limited_range = yuv && !source->async_full_range;
- const char *type = yuv ? "DrawMatrix" : "Draw";
+ gs_effect_t *effect = gs_get_effect();
bool def_draw = (!effect);
- gs_technique_t *tech = NULL;
+ gs_technique_t *tech = NULL;
if (def_draw) {
effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
- tech = gs_effect_get_technique(effect, type);
+ tech = gs_effect_get_technique(effect, "Draw");
gs_technique_begin(tech);
gs_technique_begin_pass(tech, 0);
}
- obs_source_draw_texture(source, effect,
- yuv ? source->async_color_matrix : NULL,
- limited_range ? source->async_color_range_min : NULL,
- limited_range ? source->async_color_range_max : NULL);
+ obs_source_draw_texture(source, effect);
if (def_draw) {
gs_technique_end_pass(tech);
static bool ready_async_frame(obs_source_t *source, uint64_t sys_time);
+#if GS_USE_DEBUG_MARKERS
+static const char *get_type_format(enum obs_source_type type)
+{
+ switch (type) {
+ case OBS_SOURCE_TYPE_INPUT:
+ return "Input: %s";
+ case OBS_SOURCE_TYPE_FILTER:
+ return "Filter: %s";
+ case OBS_SOURCE_TYPE_TRANSITION:
+ return "Transition: %s";
+ case OBS_SOURCE_TYPE_SCENE:
+ return "Scene: %s";
+ default:
+ return "[Unknown]: %s";
+ }
+}
+#endif
+
static inline void render_video(obs_source_t *source)
{
if (source->info.type != OBS_SOURCE_TYPE_FILTER &&
return;
}
+ GS_DEBUG_MARKER_BEGIN_FORMAT(GS_DEBUG_COLOR_SOURCE,
+ get_type_format(source->info.type),
+ obs_source_get_name(source));
+
if (source->filters.num && !source->rendering_filter)
obs_source_render_filters(source);
else
obs_source_render_async_video(source);
+
+ GS_DEBUG_MARKER_END();
}
void obs_source_video_render(obs_source_t *source)
dst->linesize[plane] * lines);
}
-static void copy_frame_data_line_y800(uint32_t *dst, uint8_t *src, uint8_t *end)
-{
- while (src < end) {
- register uint32_t val = *(src++);
- val |= (val << 8);
- val |= (val << 16);
- *(dst++) = val;
- }
-}
-
-static inline void copy_frame_data_y800(struct obs_source_frame *dst,
- const struct obs_source_frame *src)
-{
- uint32_t *ptr_dst;
- uint8_t *ptr_src;
- uint8_t *src_end;
-
- if ((src->linesize[0] * 4) != dst->linesize[0]) {
- for (uint32_t cy = 0; cy < src->height; cy++) {
- ptr_dst = (uint32_t*)
- (dst->data[0] + cy * dst->linesize[0]);
- ptr_src = (src->data[0] + cy * src->linesize[0]);
- src_end = ptr_src + src->width;
-
- copy_frame_data_line_y800(ptr_dst, ptr_src, src_end);
- }
- } else {
- ptr_dst = (uint32_t*)dst->data[0];
- ptr_src = (uint8_t *)src->data[0];
- src_end = ptr_src + src->height * src->linesize[0];
-
- copy_frame_data_line_y800(ptr_dst, ptr_src, src_end);
- }
-}
-
static void copy_frame_data(struct obs_source_frame *dst,
const struct obs_source_frame *src)
{
case VIDEO_FORMAT_RGBA:
case VIDEO_FORMAT_BGRA:
case VIDEO_FORMAT_BGRX:
- copy_frame_data_plane(dst, src, 0, dst->height);
- break;
-
case VIDEO_FORMAT_Y800:
- copy_frame_data_y800(dst, src);
+ copy_frame_data_plane(dst, src, 0, dst->height);
break;
}
}
const struct obs_source_frame *frame)
{
enum convert_type prev, cur;
- prev = get_convert_type(source->async_cache_format);
- cur = get_convert_type(frame->format);
+ prev = get_convert_type(source->async_cache_format,
+ source->async_cache_full_range);
+ cur = get_convert_type(frame->format, frame->full_range);
return source->async_cache_width != frame->width ||
source->async_cache_height != frame->height ||
if (async_texture_changed(source, frame)) {
free_async_cache(source);
- source->async_cache_width = frame->width;
- source->async_cache_height = frame->height;
- source->async_cache_format = frame->format;
+ source->async_cache_width = frame->width;
+ source->async_cache_height = frame->height;
+ source->async_cache_format = frame->format;
+ source->async_cache_full_range = frame->full_range;
}
for (size_t i = 0; i < source->async_cache.num; i++) {
struct async_frame new_af;
enum video_format format = frame->format;
- if (format == VIDEO_FORMAT_Y800)
- format = VIDEO_FORMAT_BGRX;
-
new_frame = obs_source_frame_create(format,
frame->width, frame->height);
new_af.frame = new_frame;
return new_frame;
}
-void obs_source_output_video(obs_source_t *source,
+static void obs_source_output_video_internal(obs_source_t *source,
const struct obs_source_frame *frame)
{
if (!obs_source_valid(source, "obs_source_output_video"))
pthread_mutex_unlock(&source->async_mutex);
}
+void obs_source_output_video(obs_source_t *source,
+ const struct obs_source_frame *frame)
+{
+ if (!frame) {
+ obs_source_output_video_internal(source, NULL);
+ return;
+ }
+
+ struct obs_source_frame new_frame = *frame;
+ new_frame.full_range = format_is_yuv(frame->format)
+ ? new_frame.full_range
+ : true;
+
+ obs_source_output_video_internal(source, &new_frame);
+}
+
+void obs_source_output_video2(obs_source_t *source,
+ const struct obs_source_frame2 *frame)
+{
+ if (!frame) {
+ obs_source_output_video_internal(source, NULL);
+ return;
+ }
+
+ struct obs_source_frame new_frame;
+ enum video_range_type range = resolve_video_range(frame->format,
+ frame->range);
+
+ for (size_t i = 0; i < MAX_AV_PLANES; i++) {
+ new_frame.data[i] = frame->data[i];
+ new_frame.linesize[i] = frame->linesize[i];
+ }
+
+ new_frame.width = frame->width;
+ new_frame.height = frame->height;
+ new_frame.timestamp = frame->timestamp;
+ new_frame.format = frame->format;
+ new_frame.full_range = range == VIDEO_RANGE_FULL;
+ new_frame.flip = frame->flip;
+
+ memcpy(&new_frame.color_matrix, &frame->color_matrix,
+ sizeof(frame->color_matrix));
+ memcpy(&new_frame.color_range_min, &frame->color_range_min,
+ sizeof(frame->color_range_min));
+ memcpy(&new_frame.color_range_max, &frame->color_range_max,
+ sizeof(frame->color_range_max));
+
+ obs_source_output_video_internal(source, &new_frame);
+}
+
static inline bool preload_frame_changed(obs_source_t *source,
const struct obs_source_frame *in)
{
in->format != source->async_preload_frame->format;
}
-void obs_source_preload_video(obs_source_t *source,
+static void obs_source_preload_video_internal(obs_source_t *source,
const struct obs_source_frame *frame)
{
if (!obs_source_valid(source, "obs_source_preload_video"))
obs_leave_graphics();
}
+void obs_source_preload_video(obs_source_t *source,
+ const struct obs_source_frame *frame)
+{
+ if (!frame) {
+ obs_source_preload_video_internal(source, NULL);
+ return;
+ }
+
+ struct obs_source_frame new_frame = *frame;
+ new_frame.full_range = format_is_yuv(frame->format)
+ ? new_frame.full_range
+ : true;
+
+ obs_source_preload_video_internal(source, &new_frame);
+}
+
+void obs_source_preload_video2(obs_source_t *source,
+ const struct obs_source_frame2 *frame)
+{
+ if (!frame) {
+ obs_source_preload_video_internal(source, NULL);
+ return;
+ }
+
+ struct obs_source_frame new_frame;
+ enum video_range_type range = resolve_video_range(frame->format,
+ frame->range);
+
+ for (size_t i = 0; i < MAX_AV_PLANES; i++) {
+ new_frame.data[i] = frame->data[i];
+ new_frame.linesize[i] = frame->linesize[i];
+ }
+
+ new_frame.width = frame->width;
+ new_frame.height = frame->height;
+ new_frame.timestamp = frame->timestamp;
+ new_frame.format = frame->format;
+ new_frame.full_range = range == VIDEO_RANGE_FULL;
+ new_frame.flip = frame->flip;
+
+ memcpy(&new_frame.color_matrix, &frame->color_matrix,
+ sizeof(frame->color_matrix));
+ memcpy(&new_frame.color_range_min, &frame->color_range_min,
+ sizeof(frame->color_range_min));
+ memcpy(&new_frame.color_range_max, &frame->color_range_max,
+ sizeof(frame->color_range_max));
+
+ obs_source_preload_video_internal(source, &new_frame);
+}
+
void obs_source_show_preloaded_video(obs_source_t *source)
{
uint64_t sys_ts;
obs_source_activate(source, AUX_VIEW);
}
+void obs_source_inc_active(obs_source_t *source)
+{
+ if (obs_source_valid(source, "obs_source_inc_active"))
+ obs_source_activate(source, MAIN_VIEW);
+}
+
void obs_source_dec_showing(obs_source_t *source)
{
if (obs_source_valid(source, "obs_source_dec_showing"))
obs_source_deactivate(source, AUX_VIEW);
}
+void obs_source_dec_active(obs_source_t *source)
+{
+ if (obs_source_valid(source, "obs_source_dec_active"))
+ obs_source_deactivate(source, MAIN_VIEW);
+}
+
+
void obs_source_enum_filters(obs_source_t *source,
obs_source_enum_proc_t callback, void *param)
{
obs-studio-23.1.0.tar.xz/libobs/obs-video-gpu-encode.c -> obs-studio-23.2.0.tar.xz/libobs/obs-video-gpu-encode.c
Changed
uint64_t timestamp;
uint64_t lock_key;
uint64_t next_key;
- int lock_count = 0;
+ size_t lock_count = 0;
if (os_atomic_load_bool(&video->gpu_encode_stop))
break;
obs-studio-23.1.0.tar.xz/libobs/obs-video.c -> obs-studio-23.2.0.tar.xz/libobs/obs-video.c
Changed
int cur_texture)
{
profile_start(render_main_texture_name);
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_MAIN_TEXTURE,
+ render_main_texture_name);
struct vec4 clear_color;
vec4_set(&clear_color, 0.0f, 0.0f, 0.0f, 0.0f);
video->textures_rendered[cur_texture] = true;
+ GS_DEBUG_MARKER_END();
profile_end(render_main_texture_name);
}
gs_technique_t *tech;
if (video->ovi.output_format == VIDEO_FORMAT_RGBA) {
- tech = gs_effect_get_technique(effect, "Draw");
+ tech = gs_effect_get_technique(effect, "DrawAlphaDivide");
} else {
tech = gs_effect_get_technique(effect, "DrawMatrix");
}
}
gs_technique_end(tech);
gs_enable_blending(true);
+
+ UNUSED_PARAMETER(cur_texture);
}
static const char *render_convert_nv12_name = "render_convert_texture_nv12";
video_frame_copy(output, &frame, info->format, info->height);
} else if (video->using_nv12_tex) {
- int width = (int)info->width;
- int height = (int)info->height;
- int width_d2 = width / 2;
- int height_d2 = height / 2;
- int height_d4 = height_d2 / 2;
+ size_t width = info->width;
+ size_t height = info->height;
+ size_t height_d2 = height / 2;
uint8_t *out_y = output->data[0];
uint8_t *out_uv = output->data[1];
uint8_t *in = input->data[0];
int cur_texture = video->cur_texture;
int prev_texture = cur_texture == 0 ? NUM_TEXTURES-1 : cur_texture-1;
struct video_data frame;
- bool active = raw_active || gpu_active;
- bool frame_ready;
+ bool frame_ready = 0;
memset(&frame, 0, sizeof(struct video_data));
gs_enter_context(video->graphics);
profile_start(output_frame_render_video_name);
+ GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_RENDER_VIDEO,
+ output_frame_render_video_name);
render_video(video, raw_active, gpu_active, cur_texture, prev_texture);
+ GS_DEBUG_MARKER_END();
profile_end(output_frame_render_video_name);
if (raw_active) {
uint64_t frame_time_total_ns = 0;
uint64_t fps_total_ns = 0;
uint32_t fps_total_frames = 0;
+#ifdef _WIN32
bool gpu_was_active = false;
+#endif
bool raw_was_active = false;
bool was_active = false;
uint64_t frame_time_ns;
bool raw_active = obs->video.raw_active > 0;
#ifdef _WIN32
- bool gpu_active = obs->video.gpu_encoder_active > 0;
+ const bool gpu_active = obs->video.gpu_encoder_active > 0;
+ const bool active = raw_active || gpu_active;
#else
const bool gpu_active = 0;
+ const bool active = raw_active;
#endif
- bool active = raw_active || gpu_active;
if (!was_active && active)
clear_base_frame_data();
#ifdef _WIN32
if (!gpu_was_active && gpu_active)
clear_gpu_frame_data();
+
+ gpu_was_active = gpu_active;
#endif
raw_was_active = raw_active;
- gpu_was_active = gpu_active;
was_active = active;
profile_start(video_thread_name);
obs-studio-23.1.0.tar.xz/libobs/obs.c -> obs-studio-23.2.0.tar.xz/libobs/obs.c
Changed
bool yuv = format_is_yuv(ovi->output_format);
const char *yuv_format = get_video_colorspace_name(ovi->colorspace);
- const char *yuv_range = get_video_range_name(ovi->range);
+ const char *yuv_range = get_video_range_name(ovi->output_format,
+ ovi->range);
blog(LOG_INFO, "---------------------------------");
blog(LOG_INFO, "video settings reset:\n"
param = gs_effect_get_param_by_name(effect, "image");
gs_effect_set_texture(param, tex);
+ gs_blend_state_push();
+ gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
+
while (gs_effect_loop(effect, "Draw"))
gs_draw_sprite(tex, 0, 0, 0);
+
+ gs_blend_state_pop();
}
gs_texture_t *obs_get_main_texture(void)
obs-studio-23.1.0.tar.xz/libobs/obs.h -> obs-studio-23.2.0.tar.xz/libobs/obs.h
Changed
*
* If a YUV format is specified, it will be automatically upsampled and
* converted to RGB via shader on the graphics processor.
+ *
+ * NOTE: Non-YUV formats will always be treated as full range with this
+ * structure! Use obs_source_frame2 along with obs_source_output_video2
+ * instead if partial range support is desired for non-YUV video formats.
*/
struct obs_source_frame {
uint8_t *data[MAX_AV_PLANES];
bool prev_frame;
};
+struct obs_source_frame2 {
+ uint8_t *data[MAX_AV_PLANES];
+ uint32_t linesize[MAX_AV_PLANES];
+ uint32_t width;
+ uint32_t height;
+ uint64_t timestamp;
+
+ enum video_format format;
+ enum video_range_type range;
+ float color_matrix[16];
+ float color_range_min[3];
+ float color_range_max[3];
+ bool flip;
+};
+
/** Access to the argc/argv used to start OBS. What you see is what you get. */
struct obs_cmdline_args {
int argc;
EXPORT void obs_display_set_background_color(obs_display_t *display,
uint32_t color);
+EXPORT void obs_display_size(obs_display_t *display,
+ uint32_t *width, uint32_t *height);
+
/* ------------------------------------------------------------------------- */
/* Sources */
EXPORT void obs_source_inc_showing(obs_source_t *source);
/**
+ * Increments the 'active' reference counter to indicate that the source is
+ * fully active. If the reference counter was 0, will call the 'activate'
+ * callback.
+ *
+ * Unlike obs_source_inc_showing, this will cause children of this source to be
+ * considered showing as well (currently used by transition previews to make
+ * the stinger transition show correctly). obs_source_inc_showing should
+ * generally be used instead.
+ */
+EXPORT void obs_source_inc_active(obs_source_t *source);
+
+/**
* Decrements the 'showing' reference counter to indicate that the source is
* no longer being shown somewhere. If the reference counter is set to 0,
* will call the 'hide' callback
*/
EXPORT void obs_source_dec_showing(obs_source_t *source);
+/**
+ * Decrements the 'active' reference counter to indicate that the source is no
+ * longer fully active. If the reference counter is set to 0, will call the
+ * 'deactivate' callback
+ *
+ * Unlike obs_source_dec_showing, this will cause children of this source to be
+ * considered not showing as well. obs_source_dec_showing should generally be
+ * used instead.
+ */
+EXPORT void obs_source_dec_active(obs_source_t *source);
+
/** Enumerates filters assigned to the source */
EXPORT void obs_source_enum_filters(obs_source_t *source,
obs_source_enum_proc_t callback, void *param);
EXPORT void obs_source_draw(gs_texture_t *image, int x, int y,
uint32_t cx, uint32_t cy, bool flip);
-/** Outputs asynchronous video data. Set to NULL to deactivate the texture */
+/**
+ * Outputs asynchronous video data. Set to NULL to deactivate the texture
+ *
+ * NOTE: Non-YUV formats will always be treated as full range with this
+ * function! Use obs_source_output_video2 instead if partial range support is
+ * desired for non-YUV video formats.
+ */
EXPORT void obs_source_output_video(obs_source_t *source,
const struct obs_source_frame *frame);
+EXPORT void obs_source_output_video2(obs_source_t *source,
+ const struct obs_source_frame2 *frame);
-/** Preloads asynchronous video data to allow instantaneous playback */
+/**
+ * Preloads asynchronous video data to allow instantaneous playback
+ *
+ * NOTE: Non-YUV formats will always be treated as full range with this
+ * function! Use obs_source_preload_video2 instead if partial range support is
+ * desired for non-YUV video formats.
+ */
EXPORT void obs_source_preload_video(obs_source_t *source,
const struct obs_source_frame *frame);
+EXPORT void obs_source_preload_video2(obs_source_t *source,
+ const struct obs_source_frame2 *frame);
/** Shows any preloaded video data */
EXPORT void obs_source_show_preloaded_video(obs_source_t *source);
EXPORT float obs_transition_get_time(obs_source_t *transition);
+EXPORT void obs_transition_force_stop(obs_source_t *transition);
+
EXPORT void obs_transition_video_render(obs_source_t *transition,
obs_transition_video_render_callback_t callback);
struct matrix4 *transform);
EXPORT void obs_sceneitem_get_box_transform(const obs_sceneitem_t *item,
struct matrix4 *transform);
+EXPORT void obs_sceneitem_get_box_scale(const obs_sceneitem_t *item,
+ struct vec2 *scale);
EXPORT bool obs_sceneitem_visible(const obs_sceneitem_t *item);
EXPORT bool obs_sceneitem_set_visible(obs_sceneitem_t *item, bool visible);
#if BUILD_CAPTIONS
EXPORT void obs_output_output_caption_text1(obs_output_t *output,
const char *text);
+EXPORT void obs_output_output_caption_text2(obs_output_t *output,
+ const char *text, double display_duration);
#endif
EXPORT float obs_output_get_congestion(obs_output_t *output);
obs-studio-23.1.0.tar.xz/libobs/util/pipe-posix.c -> obs-studio-23.2.0.tar.xz/libobs/util/pipe-posix.c
Changed
return fread(data, 1, len, pp->file);
}
+size_t os_process_pipe_read_err(os_process_pipe_t *pp, uint8_t *data, size_t len)
+{
+ /* XXX: unsupported on posix */
+ UNUSED_PARAMETER(pp);
+ UNUSED_PARAMETER(data);
+ UNUSED_PARAMETER(len);
+ return 0;
+}
+
size_t os_process_pipe_write(os_process_pipe_t *pp, const uint8_t *data,
size_t len)
{
obs-studio-23.1.0.tar.xz/libobs/util/pipe-windows.c -> obs-studio-23.2.0.tar.xz/libobs/util/pipe-windows.c
Changed
struct os_process_pipe {
bool read_pipe;
HANDLE handle;
+ HANDLE handle_err;
HANDLE process;
};
}
static inline bool create_process(const char *cmd_line, HANDLE stdin_handle,
- HANDLE stdout_handle, HANDLE *process)
+ HANDLE stdout_handle, HANDLE stderr_handle, HANDLE *process)
{
PROCESS_INFORMATION pi = {0};
wchar_t *cmd_line_w = NULL;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_FORCEOFFFEEDBACK;
si.hStdInput = stdin_handle;
si.hStdOutput = stdout_handle;
+ si.hStdError = stderr_handle;
os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w);
if (cmd_line_w) {
bool read_pipe;
HANDLE process;
HANDLE output;
+ HANDLE err_input, err_output;
HANDLE input;
bool success;
return NULL;
}
+ if (!create_pipe(&err_input, &err_output)) {
+ return NULL;
+ }
+
read_pipe = *type == 'r';
success = !!SetHandleInformation(read_pipe ? input : output,
- HANDLE_FLAG_INHERIT, false);
+ HANDLE_FLAG_INHERIT, false);
+ if (!success) {
+ goto error;
+ }
+
+ success = !!SetHandleInformation(err_input, HANDLE_FLAG_INHERIT, false);
if (!success) {
goto error;
}
success = create_process(cmd_line, read_pipe ? NULL : input,
- read_pipe ? output : NULL, &process);
+ read_pipe ? output : NULL, err_output, &process);
if (!success) {
goto error;
}
pp = bmalloc(sizeof(*pp));
+
pp->handle = read_pipe ? input : output;
pp->read_pipe = read_pipe;
pp->process = process;
+ pp->handle_err = err_input;
CloseHandle(read_pipe ? output : input);
+ CloseHandle(err_output);
return pp;
error:
DWORD code;
CloseHandle(pp->handle);
+ CloseHandle(pp->handle_err);
WaitForSingleObject(pp->process, INFINITE);
if (GetExitCodeProcess(pp->process, &code))
return 0;
}
+size_t os_process_pipe_read_err(os_process_pipe_t *pp, uint8_t *data, size_t len)
+{
+ DWORD bytes_read;
+ bool success;
+
+ if (!pp || !pp->handle_err) {
+ return 0;
+ }
+
+ success = !!ReadFile(pp->handle_err, data, (DWORD)len, &bytes_read, NULL);
+ if (success && bytes_read) {
+ return bytes_read;
+ }
+ else
+ bytes_read = GetLastError();
+
+ return 0;
+}
+
size_t os_process_pipe_write(os_process_pipe_t *pp, const uint8_t *data,
size_t len)
{
obs-studio-23.1.0.tar.xz/libobs/util/pipe.h -> obs-studio-23.2.0.tar.xz/libobs/util/pipe.h
Changed
EXPORT size_t os_process_pipe_read(os_process_pipe_t *pp, uint8_t *data,
size_t len);
+EXPORT size_t os_process_pipe_read_err(os_process_pipe_t *pp, uint8_t *data,
+ size_t len);
EXPORT size_t os_process_pipe_write(os_process_pipe_t *pp, const uint8_t *data,
size_t len);
obs-studio-23.1.0.tar.xz/libobs/util/platform-cocoa.m -> obs-studio-23.2.0.tar.xz/libobs/util/platform-cocoa.m
Changed
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/sysctl.h>
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
+#include <mach-o/dyld.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
return os_get_path_ptr_internal(name, NSLocalDomainMask);
}
+char *os_get_executable_path_ptr(const char *name)
+{
+ char exe[PATH_MAX];
+ char abs_path[PATH_MAX];
+ uint32_t size = sizeof(exe);
+ struct dstr path;
+ char *slash;
+
+ if (_NSGetExecutablePath(exe, &size) != 0) {
+ return NULL;
+ }
+
+ if (!realpath(exe, abs_path)) {
+ return NULL;
+ }
+
+ dstr_init_copy(&path, abs_path);
+ slash = strrchr(path.array, '/');
+ if (slash) {
+ size_t len = slash - path.array + 1;
+ dstr_resize(&path, len);
+ }
+
+ if (name && *name) {
+ dstr_cat(&path, name);
+ }
+ return path.array;
+}
+
struct os_cpu_usage_info {
int64_t last_cpu_time;
int64_t last_sys_time;
obs-studio-23.1.0.tar.xz/libobs/util/platform-nix.c -> obs-studio-23.2.0.tar.xz/libobs/util/platform-nix.c
Changed
#if !defined(__APPLE__)
#include <sys/times.h>
#include <sys/wait.h>
+#include <libgen.h>
#ifdef __FreeBSD__
#include <sys/param.h>
#include <sys/queue.h>
#endif
dstr_cat(&dylib_name, ".so");
+#ifdef __APPLE__
+ void *res = dlopen(dylib_name.array, RTLD_LAZY | RTLD_FIRST);
+#else
void *res = dlopen(dylib_name.array, RTLD_LAZY);
+#endif
if (!res)
blog(LOG_ERROR, "os_dlopen(%s->%s): %s\n",
path, dylib_name.array, dlerror());
return str;
}
+char *os_get_executable_path_ptr(const char *name)
+{
+ char exe[PATH_MAX];
+ ssize_t count = readlink("/proc/self/exe", exe, PATH_MAX);
+ const char *path_out = NULL;
+ struct dstr path;
+
+ if (count == -1) {
+ return NULL;
+ }
+
+ path_out = dirname(exe);
+ if (!path_out) {
+ return NULL;
+ }
+
+ dstr_init_copy(&path, path_out);
+ dstr_cat(&path, "/");
+
+ if (name && *name) {
+ dstr_cat(&path, name);
+ }
+
+ return path.array;
+}
+
#endif
bool os_file_exists(const char *path)
obs-studio-23.1.0.tar.xz/libobs/util/platform-windows.c -> obs-studio-23.2.0.tar.xz/libobs/util/platform-windows.c
Changed
return os_get_path_ptr_internal(name, CSIDL_COMMON_APPDATA);
}
+char *os_get_executable_path_ptr(const char *name)
+{
+ char *ptr;
+ char *slash;
+ wchar_t path_utf16[MAX_PATH];
+ struct dstr path;
+
+ GetModuleFileNameW(NULL, path_utf16, MAX_PATH);
+
+ os_wcs_to_utf8_ptr(path_utf16, 0, &ptr);
+ dstr_init_move_array(&path, ptr);
+ dstr_replace(&path, "\\", "/");
+ slash = strrchr(path.array, '/');
+ if (slash) {
+ size_t len = slash - path.array + 1;
+ dstr_resize(&path, len);
+ }
+
+ if (name && *name) {
+ dstr_cat(&path, name);
+ }
+
+ return path.array;
+}
+
bool os_file_exists(const char *path)
{
WIN32_FIND_DATAW wfd;
obs-studio-23.1.0.tar.xz/libobs/util/platform.h -> obs-studio-23.2.0.tar.xz/libobs/util/platform.h
Changed
EXPORT int os_get_program_data_path(char *dst, size_t size, const char *name);
EXPORT char *os_get_program_data_path_ptr(const char *name);
+EXPORT char *os_get_executable_path_ptr(const char *name);
+
EXPORT bool os_file_exists(const char *path);
EXPORT size_t os_get_abs_path(const char *path, char *abspath, size_t size);
obs-studio-23.1.0.tar.xz/libobs/util/windows/ComPtr.hpp -> obs-studio-23.2.0.tar.xz/libobs/util/windows/ComPtr.hpp
Changed
inline ComPtr<T> &operator=(ComPtr<T> &&c)
{
- if (this != &c) {
+ if (&ptr != &c.ptr) {
Kill();
ptr = c.ptr;
c.ptr = nullptr;
obs-studio-23.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/coreaudio-encoder/data/locale/da-DK.ini
Changed
CoreAudioAAC="CoreAudio AAC-encoder"
-Bitrate="Bithastighed"
+Bitrate="Bit-hastighed"
AllowHEAAC="Tillad HE-AAC"
OutputSamplerate="Output Samplingsfrekvens"
-UseInputSampleRate="Benyt Input (OBS) Samplingsfrekvens (kan vise uunderstøttede bithastigheder)"
+UseInputSampleRate="Benyt Input (OBS) Samplingsfrekvens (kan vise uunderstøttede bit-hastigheder)"
obs-studio-23.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/coreaudio-encoder/data/locale/de-DE.ini
Changed
-CoreAudioAAC="CoreAudio AAC Codierer"
+CoreAudioAAC="CoreAudio AAC Kodierer"
Bitrate="Bitrate"
AllowHEAAC="Erlaube HE-AAC"
-OutputSamplerate="Ausgabe-Abtastrate"
+OutputSamplerate="Ausgabeabtastrate"
UseInputSampleRate="Verwenden Sie Eingabe (OBS) Abtastrate (kann nicht unterstützte Bitraten auflisten)"
obs-studio-23.1.0.tar.xz/plugins/coreaudio-encoder/data/locale/pt-PT.ini -> obs-studio-23.2.0.tar.xz/plugins/coreaudio-encoder/data/locale/pt-PT.ini
Changed
Bitrate="Bitrate"
AllowHEAAC="Permitir HE-AAC"
OutputSamplerate="Taxa de amostragem de saída"
-UseInputSampleRate="Taxa de amostragem de entrada (OBS) Taxa Amostra (pode listar taxas de bit sem suporte)"
+UseInputSampleRate="Taxa de amostragem de entrada (OBS) Taxa Amostra (pode listar taxas de bit sem suporte)"
obs-studio-23.2.0.tar.xz/plugins/coreaudio-encoder/data/locale/ur-PK.ini
Added
+Bitrate="بٹ ریٹ"
+
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ar-SA.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ar-SA.ini
Changed
Mode="الوضع"
Buffering="استخدام التخزين المؤقت"
PixelFormat="صيغة البكسل"
-ColorSpace="مساحة ألوان YUV"
ColorSpace.Default="الافتراضي"
-ColorRange="نطاق ألوان YUV"
ColorRange.Default="الافتراضي"
ColorRange.Partial="جزئي"
ColorRange.Full="كامل"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ca-ES.ini
Changed
Mode="Mode"
Buffering="Usa memòria intermèdia"
PixelFormat="Format de píxel"
-ColorSpace="Espai de color YUV"
+ColorSpace="Espai de color"
ColorSpace.Default="Per defecte"
-ColorRange="Gamma de color YUV"
+ColorRange="Gamma de colors"
ColorRange.Default="Per defecte"
ColorRange.Partial="Parcial"
ColorRange.Full="Complet"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/cs-CZ.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/cs-CZ.ini
Changed
Mode="Mód"
Buffering="Použít vyrovnávací paměť"
PixelFormat="Formát pixelů"
-ColorSpace="Prostor barev YUV"
+ColorSpace="Barevný prostor"
ColorSpace.Default="Výchozí"
-ColorRange="Rozsah barev YUV"
+ColorRange="Rozsah barev"
ColorRange.Default="Výchozí"
ColorRange.Partial="Částečný"
ColorRange.Full="Plný"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/da-DK.ini
Changed
Mode="Tilstand"
Buffering="Benyt buffering"
PixelFormat="Pixelformat"
-ColorSpace="YUV-farverum"
+ColorSpace="Farverum"
ColorSpace.Default="Standard"
-ColorRange="YUV-farveområde"
+ColorRange="Farveområde"
ColorRange.Default="Standard"
ColorRange.Partial="Delvis"
ColorRange.Full="Fuld"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/de-DE.ini
Changed
Mode="Modus"
Buffering="Puffern benutzen"
PixelFormat="Pixelformat"
-ColorSpace="YUV-Farbmatrix"
+ColorSpace="Farbraum"
ColorSpace.Default="Standard"
-ColorRange="YUV-Farbbereich"
+ColorRange="Farbbereich"
ColorRange.Default="Standard"
ColorRange.Partial="Begrenzt"
ColorRange.Full="Voll"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/el-GR.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/el-GR.ini
Changed
Mode="Λειτουργία"
Buffering="Χρήση ενδιάμεσης μνήμης"
PixelFormat="Μορφή pixel"
-ColorSpace="Χώρος Χρωμάτων YUV"
ColorSpace.Default="Προεπιλογή"
-ColorRange="Έκταση Χρωμάτων YUV"
ColorRange.Default="Προεπιλογή"
ColorRange.Partial="Μερική"
ColorRange.Full="Πλήρης"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/en-US.ini
Changed
Mode="Mode"
Buffering="Use Buffering"
PixelFormat="Pixel Format"
-ColorSpace="YUV Color Space"
+ColorSpace="Color Space"
ColorSpace.Default="Default"
-ColorRange="YUV Color Range"
+ColorRange="Color Range"
ColorRange.Default="Default"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/es-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/es-ES.ini
Changed
Mode="Modo"
Buffering="Utilizar el almacenamiento en búfer"
PixelFormat="Formato de píxel"
-ColorSpace="Espacio de color YUV"
+ColorSpace="Espacio de color"
ColorSpace.Default="Predeterminado"
-ColorRange="Rango de color YUV"
+ColorRange="Rango de color"
ColorRange.Default="Predeterminado"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/eu-ES.ini
Changed
Mode="Modua"
Buffering="Erabili Bufferreratzea"
PixelFormat="Pixel formatua"
-ColorSpace="YUV kolore espazioa"
+ColorSpace="Kolore-espazioa"
ColorSpace.Default="Lehenetsia"
-ColorRange="YUV kolore tartea"
+ColorRange="Kolore tartea"
ColorRange.Default="Lehenetsia"
ColorRange.Partial="Partziala"
ColorRange.Full="Osoa"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/fa-IR.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/fa-IR.ini
Changed
Mode="نوع"
Buffering="استفاده از بافرینگ"
PixelFormat="فرمت پیکسل"
-ColorSpace="فضای رنگی YUV"
ColorSpace.Default="پیش فرض"
-ColorRange="فضای رنگی YUV"
ColorRange.Default="پیش فرض"
ColorRange.Partial="جزئی"
ColorRange.Full="کامل"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/fi-FI.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/fi-FI.ini
Changed
Mode="Tila"
Buffering="Käytä puskurointia"
PixelFormat="Pikselimuoto"
-ColorSpace="YUV väriavaruus"
+ColorSpace="Väriavaruus"
ColorSpace.Default="Oletusarvo"
-ColorRange="YUV värialue"
+ColorRange="Värialue"
ColorRange.Default="Oletusarvo"
ColorRange.Partial="Osittainen"
ColorRange.Full="Täysi"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/fil-PH.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/fil-PH.ini
Changed
Mode="Mode"
Buffering="Gamitin ang Buffering"
PixelFormat="Format ng Pixel"
-ColorSpace="YUV Kulay Space"
ColorSpace.Default="Pangunahin"
-ColorRange="Saklaw ng Kulay ng YUV"
ColorRange.Default="Pangunahin"
ColorRange.Partial="Bahagyang"
ColorRange.Full="Buong"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/gd-GB.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/gd-GB.ini
Changed
Device="Uidheam"
Mode="Modh"
Buffering="Cleachd bufaireadh"
-ColorSpace="Spàs dhathan YUV"
ColorSpace.Default="Bun-roghainn"
-ColorRange="Rainse dhathan YUV"
ColorRange.Default="Bun-roghainn"
ColorRange.Partial="Leth-phàirteach"
ColorRange.Full="Làn"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/hu-HU.ini
Changed
Mode="Mód"
Buffering="Pufferelés használata"
PixelFormat="Képpont formátum"
-ColorSpace="YUV színtér"
+ColorSpace="Színtér"
ColorSpace.Default="Alapértelmezett"
-ColorRange="YUV színtartomány"
+ColorRange="Színtartomány"
ColorRange.Default="Alapértelmezett"
ColorRange.Partial="Részleges"
ColorRange.Full="Teljes"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/it-IT.ini
Changed
Mode="Modalità"
Buffering="Utilizza il buffering"
PixelFormat="Formato pixel"
-ColorSpace="Spazio colore YUV"
+ColorSpace="Spazio colore"
ColorSpace.Default="Predefinito"
-ColorRange="Gamma di colore YUV"
+ColorRange="Gamma di colori"
ColorRange.Default="Predefinito"
ColorRange.Partial="Parziale"
ColorRange.Full="Intero"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ja-JP.ini
Changed
Mode="モード"
Buffering="バッファリングを使用する"
PixelFormat="ピクセルフォーマット"
-ColorSpace="YUV 色空間"
+ColorSpace="色空間"
ColorSpace.Default="既定"
-ColorRange="YUV 色範囲"
+ColorRange="色範囲"
ColorRange.Default="既定"
ColorRange.Partial="一部"
ColorRange.Full="全部"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ka-GE.ini
Changed
Mode="რეჟიმი"
Buffering="ბუფერიზაციის გამოყენება"
PixelFormat="პიქსელის ფორმატი"
-ColorSpace="YUV ფერთა სისტემა"
+ColorSpace="ფერთა სივრცე"
ColorSpace.Default="ნაგულისხმევი"
-ColorRange="YUV ფერთა გამა"
+ColorRange="ფერთა გამა"
ColorRange.Default="ნაგულისხმევი"
ColorRange.Partial="ნაწილობრივი"
ColorRange.Full="სრული"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ko-KR.ini
Changed
Mode="방식"
Buffering="버퍼링 사용"
PixelFormat="픽셀 형식"
-ColorSpace="YUV 색 공간"
+ColorSpace="색 공간"
ColorSpace.Default="기본값"
-ColorRange="YUV 색상 범위"
+ColorRange="색상 범위"
ColorRange.Default="기본값"
ColorRange.Partial="부분"
ColorRange.Full="전체"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/nb-NO.ini
Changed
Mode="Modus"
Buffering="Bruk bufring"
PixelFormat="Pikselformat"
-ColorSpace="YUV fargerom"
+ColorSpace="Fargerom"
ColorSpace.Default="Standard"
-ColorRange="YUV fargerom"
+ColorRange="Fargespekter"
ColorRange.Default="Standard"
ColorRange.Partial="Delvis"
ColorRange.Full="Hel"
DeactivateWhenNotShowing="Deaktiver når denne ikke vises"
AutoStart="Automatisk start ved oppstart"
SwapFC-LFE="Bytt FC og LFE"
+SwapFC-LFE.Tooltip="Bytt front-kanal og LFE-kanal"
VideoConnection="Videotilkobling"
AudioConnection="Lydtilkobling"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/nl-NL.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/nl-NL.ini
Changed
Mode="Modus"
Buffering="Buffering Gebruiken"
PixelFormat="Pixelindeling"
-ColorSpace="YUV-Kleurruimte"
+ColorSpace="Kleurruimte"
ColorSpace.Default="Standaard"
-ColorRange="YUV Kleurbereik"
+ColorRange="Kleurbereik"
ColorRange.Default="Standaard"
ColorRange.Partial="Gedeeltelijk"
ColorRange.Full="Volledig"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/pl-PL.ini
Changed
Mode="Tryb"
Buffering="Użyj buforowania"
PixelFormat="Format pikseli"
-ColorSpace="Przestrzeń kolorów YUV"
+ColorSpace="Przestrzeń kolorów"
ColorSpace.Default="Domyślne"
-ColorRange="Zakres kolorów YUV"
+ColorRange="Zakres kolorów"
ColorRange.Default="Domyślne"
ColorRange.Partial="Częściowy"
ColorRange.Full="Pełny"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/pt-BR.ini
Changed
Mode="Modo"
Buffering="Utilizar Buffering"
PixelFormat="Formato de Pixel"
-ColorSpace="Espaço de cor YUV"
+ColorSpace="Espaço de cor"
ColorSpace.Default="Padrão"
-ColorRange="Intervalo de Cores YUV"
+ColorRange="Faixa de cores"
ColorRange.Default="Padrão"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/pt-PT.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/pt-PT.ini
Changed
Mode="Modo"
Buffering="Utilizar Buffering"
PixelFormat="Formato de pixel"
-ColorSpace="Espaço de Cor YUV"
ColorSpace.Default="Predefinido"
-ColorRange="Gama de Cor YUV"
ColorRange.Default="Predefinido"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ro-RO.ini
Changed
BlackmagicDevice="Dispozitiv Blackmagic"
Device="Dispozitiv"
Mode="Mod"
-Buffering="Folosește buffering"
+Buffering="Folosește zona tampon"
PixelFormat="Formatul pixelilor"
ColorSpace.Default="Implicit"
ColorRange.Default="Implicit"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/ru-RU.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/ru-RU.ini
Changed
Mode="Режим"
Buffering="Использовать буферизацию"
PixelFormat="Формат пикселей"
-ColorSpace="Цветовое пространство YUV"
+ColorSpace="Цветовое пространство"
ColorSpace.Default="По умолчанию"
-ColorRange="Цветовой диапазон YUV"
+ColorRange="Цветовой диапазон"
ColorRange.Default="По умолчанию"
ColorRange.Partial="Частичный"
ColorRange.Full="Полный"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/sk-SK.ini
Changed
Mode="Mód"
Buffering="Použiť vyrovnávaciu pamäť"
PixelFormat="Formát pixelov"
-ColorSpace="Farebný priestor YUV"
+ColorSpace="Farebný priestor"
ColorSpace.Default="Predvolený"
-ColorRange="Rozsah farieb YUV"
+ColorRange="Farebný rozsah"
ColorRange.Default="Predvolený"
ColorRange.Partial="Čiastočný"
ColorRange.Full="Plný"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Deaktivovať, keď je skrytý"
AutoStart="Automaticky spustiť pri štarte"
+SwapFC-LFE="Vymeniť FC a LFE"
+SwapFC-LFE.Tooltip="Vymeniť kanál Front Center a kanál LFE"
+VideoConnection="Video pripojenie"
+AudioConnection="Audio pripojenie"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/sr-CS.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/sr-CS.ini
Changed
Mode="Režim"
Buffering="Koristi baferovanje"
PixelFormat="Piksel format"
-ColorSpace="YUV prostor boja"
ColorSpace.Default="Podrazumevan"
-ColorRange="YUV opseg boja"
ColorRange.Default="Podrazumevan"
ColorRange.Partial="Delimičan"
ColorRange.Full="Potpun"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/sr-SP.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/sr-SP.ini
Changed
Mode="Режим"
Buffering="Користи баферовање"
PixelFormat="Пиксел формат"
-ColorSpace="YUV простор боја"
ColorSpace.Default="Подразумеван"
-ColorRange="YUV опсег боја"
ColorRange.Default="Подразумеван"
ColorRange.Partial="Делимичан"
ColorRange.Full="Потпун"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/sv-SE.ini
Changed
Mode="Läge"
Buffering="Använd buffert"
PixelFormat="Bildpunktsformat"
-ColorSpace="YUV-färgrymd"
+ColorSpace="Färgrymd"
ColorSpace.Default="Standard"
-ColorRange="YUV-färgområde"
+ColorRange="Färgintervall"
ColorRange.Default="Standard"
ColorRange.Partial="Partiell"
ColorRange.Full="Full"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/tl-PH.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/tl-PH.ini
Changed
Mode="I-mode"
Buffering="Paggamit ng Buffering"
PixelFormat="Ang Format ng Pixel"
-ColorSpace="Pagitan sa kulay na YUV"
ColorSpace.Default="I-default"
-ColorRange="Ang Saklaw ng Kulay na YUV"
ColorRange.Default="I-default"
ColorRange.Partial="Bahagya"
ColorRange.Full="Puno"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/tr-TR.ini
Changed
Mode="Mod"
Buffering="Arabelleğe Almayı Kullan"
PixelFormat="Piksel Biçimi"
-ColorSpace="YUV Renk Alanı"
+ColorSpace="Renk Uzayı"
ColorSpace.Default="Varsayılan"
-ColorRange="YUV Renk Aralığı"
+ColorRange="Renk Aralığı"
ColorRange.Default="Varsayılan"
ColorRange.Partial="Kısmi"
ColorRange.Full="Tam"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Gösterilmediğinde devre dışı bırak"
AutoStart="Açılışta otomatik olarak başlat"
+VideoConnection="Video Bağlantısı"
+AudioConnection="Ses Bağlantısı"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/uk-UA.ini
Changed
Mode="Режим"
Buffering="Увімкнути буферизацію"
PixelFormat="Формат пікселів"
-ColorSpace="Колірний простір YUV"
ColorSpace.Default="За замовчуванням"
-ColorRange="Колірний діапазон YUV"
ColorRange.Default="За замовчуванням"
ColorRange.Partial="Частковий"
ColorRange.Full="Повний"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/zh-CN.ini
Changed
Mode="模式"
Buffering="使用缓冲"
PixelFormat="视频格式"
-ColorSpace="YUV 颜色空间"
+ColorSpace="色彩空间"
ColorSpace.Default="默认"
-ColorRange="YUV 颜色范围"
+ColorRange="色彩范围"
ColorRange.Default="默认"
ColorRange.Partial="局部"
ColorRange.Full="全部"
ChannelFormat.4_1ch="4.1声道"
ChannelFormat.5_1ch="5.1声道"
ChannelFormat.7_1ch="7.1声道"
-DeactivateWhenNotShowing="当不显示时停用"
+DeactivateWhenNotShowing="当不显示时禁用"
AutoStart="启动时自动启动"
SwapFC-LFE="交换 FC 和 LFE"
-SwapFC-LFE.Tooltip="切换前中(FC)频道与低频(低音)频道"
+SwapFC-LFE.Tooltip="切换前中(FC)声道与低频效果(LFE)声道"
VideoConnection="视频连接"
AudioConnection="声音连接"
obs-studio-23.1.0.tar.xz/plugins/decklink/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/decklink/data/locale/zh-TW.ini
Changed
Mode="模式"
Buffering="使用緩衝"
PixelFormat="像素格式"
-ColorSpace="YUV 色彩空間"
+ColorSpace="色彩空間"
ColorSpace.Default="預設"
-ColorRange="YUV 色彩範圍"
+ColorRange="顏色範圍"
ColorRange.Default="預設"
ColorRange.Partial="部分"
ColorRange.Full="完整"
ChannelFormat="聲道"
ChannelFormat.None="無"
-ChannelFormat.2_0ch="雙聲道"
+ChannelFormat.2_0ch="雙聲道(2ch)"
ChannelFormat.2_1ch="2.1聲道"
ChannelFormat.4_0ch="4聲道"
ChannelFormat.4_1ch="4.1聲道"
obs-studio-23.1.0.tar.xz/plugins/decklink/decklink-device-instance.cpp -> obs-studio-23.2.0.tar.xz/plugins/decklink/decklink-device-instance.cpp
Changed
currentFrame.height = (uint32_t)videoFrame->GetHeight();
currentFrame.timestamp = timestamp;
- obs_source_output_video(static_cast<DeckLinkInput*>(decklink)->GetSource(), ¤tFrame);
+ obs_source_output_video2(static_cast<DeckLinkInput*>(decklink)->GetSource(), ¤tFrame);
}
void DeckLinkDeviceInstance::FinalizeStream()
}
colorRange = static_cast<DeckLinkInput*>(decklink)->GetColorRange();
- currentFrame.full_range = colorRange == VIDEO_RANGE_FULL;
+ currentFrame.range = colorRange;
video_format_get_parameters(activeColorSpace, colorRange,
currentFrame.color_matrix, currentFrame.color_range_min,
obs-studio-23.1.0.tar.xz/plugins/decklink/decklink-device-instance.hpp -> obs-studio-23.2.0.tar.xz/plugins/decklink/decklink-device-instance.hpp
Changed
class DeckLinkDeviceInstance : public IDeckLinkInputCallback {
protected:
- struct obs_source_frame currentFrame;
+ struct obs_source_frame2 currentFrame;
struct obs_source_audio currentPacket;
DecklinkBase *decklink = nullptr;
DeckLinkDevice *device = nullptr;
obs-studio-23.1.0.tar.xz/plugins/decklink/decklink-source.cpp -> obs-studio-23.2.0.tar.xz/plugins/decklink/decklink-source.cpp
Changed
return true;
}
-static bool color_format_changed(obs_properties_t *props,
- obs_property_t *list, obs_data_t *settings);
-
static bool mode_id_changed(obs_properties_t *props,
obs_property_t *list, obs_data_t *settings)
{
list = obs_properties_get(props, PIXEL_FORMAT);
obs_property_set_visible(list, id != MODE_ID_AUTO);
- return color_format_changed(props, nullptr, settings);
-}
-
-static bool color_format_changed(obs_properties_t *props,
- obs_property_t *list, obs_data_t *settings)
-{
- long long id = obs_data_get_int(settings, MODE_ID);
- BMDPixelFormat pixelFormat = (BMDPixelFormat)obs_data_get_int(settings,
- PIXEL_FORMAT);
-
- list = obs_properties_get(props, COLOR_SPACE);
- obs_property_set_visible(list,
- id != MODE_ID_AUTO && pixelFormat == bmdFormat8BitYUV);
-
- list = obs_properties_get(props, COLOR_RANGE);
- obs_property_set_visible(list,
- id == MODE_ID_AUTO || pixelFormat == bmdFormat8BitYUV);
-
return true;
}
list = obs_properties_add_list(props, PIXEL_FORMAT,
TEXT_PIXEL_FORMAT, OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_INT);
- obs_property_set_modified_callback(list, color_format_changed);
obs_property_list_add_int(list, "8-bit YUV", bmdFormat8BitYUV);
obs_property_list_add_int(list, "8-bit BGRA", bmdFormat8BitBGRA);
obs-studio-23.1.0.tar.xz/plugins/image-source/color-source.c -> obs-studio-23.2.0.tar.xz/plugins/image-source/color-source.c
Changed
static void color_source_defaults(obs_data_t *settings)
{
+ struct obs_video_info ovi;
+ obs_get_video_info(&ovi);
+
obs_data_set_default_int(settings, "color", 0xFFFFFFFF);
- obs_data_set_default_int(settings, "width", 400);
- obs_data_set_default_int(settings, "height", 400);
+ obs_data_set_default_int(settings, "width", ovi.base_width);
+ obs_data_set_default_int(settings, "height", ovi.base_height);
}
struct obs_source_info color_source_info = {
obs-studio-23.1.0.tar.xz/plugins/image-source/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/image-source/data/locale/da-DK.ini
Changed
File="Billedfil"
UnloadWhenNotShowing="Fjern billede fra hukommelsen når det ikke vises"
-SlideShow="Billede diasshow"
-SlideShow.TransitionSpeed="Overgangshastighed (millisekunder)"
-SlideShow.SlideTime="Tid mellem dias (millisekunder)"
+SlideShow="Billedediasshow"
+SlideShow.TransitionSpeed="Overgangshastighed (ms)"
+SlideShow.SlideTime="Tid mellem dias (ms)"
SlideShow.Files="Billedfiler"
SlideShow.CustomSize="Afgrænsningsstørrelse/Formatforhold"
SlideShow.CustomSize.Auto="Automatisk"
SlideShow.PlaybackBehavior="Synlighedsadfærd"
SlideShow.PlaybackBehavior.StopRestart="Stop når ikke synlig, genstart når synlig"
SlideShow.PlaybackBehavior.PauseUnpause="Sæt på pause når ikke synlig, genoptag når synlig"
-SlideShow.PlaybackBehavior.AlwaysPlay="Afspil altid også når usynlig"
-SlideShow.SlideMode="Diasshowtilstand"
+SlideShow.PlaybackBehavior.AlwaysPlay="Afspil altid, også når usynlig"
+SlideShow.SlideMode="Diastilstand"
SlideShow.SlideMode.Auto="Automatisk"
-SlideShow.SlideMode.Manual="Manuel t(styr diasshow via genvejstaster)"
+SlideShow.SlideMode.Manual="Manuelt (styr diasshow via genvejstaster)"
SlideShow.PlayPause="Afspil/Pause"
SlideShow.Restart="Genstart"
SlideShow.Stop="Stop"
obs-studio-23.1.0.tar.xz/plugins/image-source/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/image-source/data/locale/de-DE.ini
Changed
ImageInput="Bild"
File="Bilddatei"
-UnloadWhenNotShowing="Entlade Bild, wenn es nicht angezeigt wird"
+UnloadWhenNotShowing="Bild entladen, wenn es nicht angezeigt wird"
SlideShow="Diashow"
SlideShow.TransitionSpeed="Übergangsgeschwindigkeit (Millisekunden)"
SlideShow.SlideTime="Zeit zwischen Bildern (Millisekunden)"
SlideShow.Files="Bilddateien"
-SlideShow.CustomSize="Rahmen Größe/Seitenverhältnis"
+SlideShow.CustomSize="Rahmengröße/Seitenverhältnis"
SlideShow.CustomSize.Auto="Automatisch"
SlideShow.Randomize="Zufällige Wiedergabe"
SlideShow.Loop="Endlosschleife"
SlideShow.Transition.Swipe="Swipe"
SlideShow.Transition.Slide="Slide"
SlideShow.PlaybackBehavior="Sichtbarkeitsverhalten"
-SlideShow.PlaybackBehavior.StopRestart="Anhalten wenn nicht sichtbar, neu starten wenn sichtbar"
-SlideShow.PlaybackBehavior.PauseUnpause="Pausieren wenn nicht sichtbar, fortsetzen wenn sichtbar"
+SlideShow.PlaybackBehavior.StopRestart="Anhalten, wenn nicht sichtbar, neustarten, wenn sichtbar"
+SlideShow.PlaybackBehavior.PauseUnpause="Pausieren, wenn nicht sichtbar, fortsetzen, wenn sichtbar"
SlideShow.PlaybackBehavior.AlwaysPlay="Immer abspielen, auch wenn nicht sichtbar"
SlideShow.SlideMode="Diashowmodus"
SlideShow.SlideMode.Auto="Automatisch"
SlideShow.SlideMode.Manual="Manuell (Hotkeys verwenden, um Diashow zu steuern)"
-SlideShow.PlayPause="Abspielen/Pausieren"
-SlideShow.Restart="Neu starten"
+SlideShow.PlayPause="Abspielen/pausieren"
+SlideShow.Restart="Neustarten"
SlideShow.Stop="Stop"
SlideShow.NextSlide="Nächstes Bild"
SlideShow.PreviousSlide="Vorheriges Bild"
obs-studio-23.1.0.tar.xz/plugins/image-source/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/image-source/data/locale/ro-RO.ini
Changed
SlideShow.NextSlide="Diapozitivul următor"
SlideShow.PreviousSlide="Diapozitivul anterior"
+ColorSource="Sursă de culoare"
ColorSource.Color="Culoare"
ColorSource.Width="Lățime"
ColorSource.Height="Înălțime"
obs-studio-23.1.0.tar.xz/plugins/image-source/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/image-source/data/locale/zh-CN.ini
Changed
UnloadWhenNotShowing="当不显示时卸载图像"
SlideShow="图像幻灯片放映"
-SlideShow.TransitionSpeed="过渡速度(毫秒)"
+SlideShow.TransitionSpeed="转场速度(毫秒)"
SlideShow.SlideTime="幻灯片之间时间(毫秒)"
SlideShow.Files="图像文件"
-SlideShow.CustomSize="边框大小/高宽比"
+SlideShow.CustomSize="边框大小/宽高比"
SlideShow.CustomSize.Auto="自动"
SlideShow.Randomize="随机播放"
SlideShow.Loop="循环"
-SlideShow.Transition="过渡动画"
+SlideShow.Transition="转换特效"
SlideShow.Transition.Cut="剪切"
SlideShow.Transition.Fade="淡出"
-SlideShow.Transition.Swipe="滑动"
+SlideShow.Transition.Swipe="滑出"
SlideShow.Transition.Slide="幻灯片"
SlideShow.PlaybackBehavior="可见性的行为"
SlideShow.PlaybackBehavior.StopRestart="不可见时停止, 可见时重新开始"
SlideShow.Stop="停止"
SlideShow.NextSlide="下一张幻灯片"
SlideShow.PreviousSlide="上一张幻灯片"
-SlideShow.HideWhenDone="幻灯片完成时隐藏"
+SlideShow.HideWhenDone="幻灯片放映完成后隐藏"
ColorSource="色源"
ColorSource.Color="色彩"
obs-studio-23.1.0.tar.xz/plugins/linux-capture/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/plugins/linux-capture/CMakeLists.txt
Changed
return()
endif()
-find_package(XCB COMPONENTS XCB SHM XFIXES XINERAMA REQUIRED)
+find_package(XCB COMPONENTS XCB RANDR SHM XFIXES XINERAMA REQUIRED)
find_package(X11_XCB REQUIRED)
include_directories(SYSTEM
obs-studio-23.1.0.tar.xz/plugins/linux-capture/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-capture/data/locale/de-DE.ini
Changed
Screen="Bildschirm"
CaptureCursor="Mauszeiger aufnehmen"
AdvancedSettings="Erweiterte Einstellungen"
-XServer="X Server"
+XServer="X-Server"
XCCapture="Fensteraufnahme (Xcomposite)"
Window="Fenster"
CropTop="Oben abschneiden (Pixel)"
CropRight="Rechts abschneiden (Pixel)"
CropBottom="Unten abschneiden (Pixel)"
SwapRedBlue="Rot und Blau tauschen"
-LockX="X Server sperren während der Aufnahme"
+LockX="X-Server während der Aufnahme sperren"
IncludeXBorder="X-Rahmen anzeigen"
-ExcludeAlpha="Verwenden von alphalosem Texturformat (Mesa Problemumgehung)"
+ExcludeAlpha="Alphaloses Texturformat verwenden (Mesa-Problemumgehung)"
obs-studio-23.1.0.tar.xz/plugins/linux-capture/xhelpers.c -> obs-studio-23.2.0.tar.xz/plugins/linux-capture/xhelpers.c
Changed
#include <stdint.h>
#include <sys/shm.h>
+#include <xcb/randr.h>
#include <xcb/xcb.h>
#include <xcb/xinerama.h>
return -1;
}
+bool randr_is_active(xcb_connection_t *xcb)
+{
+ if (!xcb || !xcb_get_extension_data(xcb, &xcb_randr_id)->present)
+ return false;
+
+ return true;
+}
+
+int randr_screen_count(xcb_connection_t *xcb)
+{
+ if (!xcb)
+ return 0;
+
+ xcb_screen_t *screen;
+ screen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
+
+ xcb_randr_get_screen_resources_cookie_t res_c;
+ xcb_randr_get_screen_resources_reply_t* res_r;
+
+ res_c = xcb_randr_get_screen_resources(xcb, screen->root);
+ res_r = xcb_randr_get_screen_resources_reply(xcb, res_c, 0);
+ if (!res_r)
+ return 0;
+
+ return xcb_randr_get_screen_resources_crtcs_length(res_r);
+}
+
+int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
+ int_fast32_t *x, int_fast32_t *y,
+ int_fast32_t *w, int_fast32_t *h,
+ xcb_screen_t **rscreen)
+{
+ xcb_screen_t *xscreen;
+ xscreen = xcb_setup_roots_iterator(xcb_get_setup(xcb)).data;
+
+ xcb_randr_get_screen_resources_cookie_t res_c;
+ xcb_randr_get_screen_resources_reply_t* res_r;
+
+ res_c = xcb_randr_get_screen_resources(xcb, xscreen->root);
+ res_r = xcb_randr_get_screen_resources_reply(xcb, res_c, 0);
+ if (!res_r)
+ goto fail;
+
+ int screens = xcb_randr_get_screen_resources_crtcs_length(res_r);
+ if (screen < 0 || screen >= screens)
+ goto fail;
+
+ xcb_randr_crtc_t *crtc = xcb_randr_get_screen_resources_crtcs(res_r);
+
+ xcb_randr_get_crtc_info_cookie_t crtc_c;
+ xcb_randr_get_crtc_info_reply_t *crtc_r;
+
+ crtc_c = xcb_randr_get_crtc_info(xcb, *(crtc + screen), 0);
+ crtc_r = xcb_randr_get_crtc_info_reply(xcb, crtc_c, 0);
+ if (!crtc_r)
+ goto fail;
+
+ *x = crtc_r->x;
+ *y = crtc_r->y;
+ *w = crtc_r->width;
+ *h = crtc_r->height;
+
+ if (rscreen)
+ *rscreen = xscreen;
+
+ return 0;
+
+fail:
+ *x = *y = *w = *h = 0;
+ return -1;
+}
+
int x11_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
int_fast32_t *w, int_fast32_t *h)
{
obs-studio-23.1.0.tar.xz/plugins/linux-capture/xhelpers.h -> obs-studio-23.2.0.tar.xz/plugins/linux-capture/xhelpers.h
Changed
int_fast32_t *w, int_fast32_t *h);
/**
+ * Check for Randr extension
+ *
+ * @return true if randr is available which means it's active.
+ */
+bool randr_is_active(xcb_connection_t *xcb);
+
+/**
+ * Get the number of Randr screens
+ *
+ * @return number of screens
+ */
+int randr_screen_count(xcb_connection_t *xcb);
+
+/**
+ * Get screen geometry for a Rand crtc (screen)
+ *
+ * @note On error the passed coordinates/sizes will be set to 0.
+ *
+ * @param xcb xcb connection
+ * @param screen screen number to get geometry for
+ * @param x x-coordinate of the screen
+ * @param y y-coordinate of the screen
+ * @param w width of the screen
+ * @param h height of the screen
+ *
+ * @return < 0 on error
+ */
+int randr_screen_geo(xcb_connection_t *xcb, int_fast32_t screen,
+ int_fast32_t *x, int_fast32_t *y,
+ int_fast32_t *w, int_fast32_t *h,
+ xcb_screen_t **rscreen);
+
+/**
* Get screen geometry for a X11 screen
*
* @note On error the passed sizes will be set to 0.
obs-studio-23.1.0.tar.xz/plugins/linux-capture/xshm-input.c -> obs-studio-23.2.0.tar.xz/plugins/linux-capture/xshm-input.c
Changed
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
+#include <xcb/randr.h>
#include <xcb/shm.h>
#include <xcb/xfixes.h>
#include <xcb/xinerama.h>
bool show_cursor;
bool use_xinerama;
+ bool use_randr;
bool advanced;
};
if (!xcb_get_extension_data(xcb, &xcb_xinerama_id)->present)
blog(LOG_INFO, "Missing Xinerama extension !");
+ if (!xcb_get_extension_data(xcb, &xcb_randr_id)->present)
+ blog(LOG_INFO, "Missing Randr extension !");
+
return ok;
}
int_fast32_t old_width = data->width;
int_fast32_t old_height = data->height;
- if (data->use_xinerama) {
+ if (data->use_randr) {
+ if (randr_screen_geo(data->xcb, data->screen_id,
+ &data->x_org, &data->y_org,
+ &data->width, &data->height,
+ &data->xcb_screen) < 0) {
+ return -1;
+ }
+ }
+ else if (data->use_xinerama) {
if (xinerama_screen_geo(data->xcb, data->screen_id,
&data->x_org, &data->y_org,
&data->width, &data->height) < 0) {
if (!xshm_check_extensions(data->xcb))
goto fail;
+ data->use_randr = randr_is_active(data->xcb) ? true : false;
data->use_xinerama = xinerama_is_active(data->xcb) ? true : false;
if (xshm_update_geometry(data) < 0) {
struct dstr screen_info;
dstr_init(&screen_info);
+ bool randr = randr_is_active(xcb);
bool xinerama = xinerama_is_active(xcb);
- int_fast32_t count = (xinerama) ?
- xinerama_screen_count(xcb) :
- xcb_setup_roots_length(xcb_get_setup(xcb));
+ int_fast32_t count = (randr) ?
+ randr_screen_count(xcb) :
+ (xinerama) ?
+ xinerama_screen_count(xcb) :
+ xcb_setup_roots_length(xcb_get_setup(xcb));
for (int_fast32_t i = 0; i < count; ++i) {
int_fast32_t x, y, w, h;
x = y = w = h = 0;
- if (xinerama)
+ if (randr)
+ randr_screen_geo(xcb, i, &x, &y, &w, &h, NULL);
+ else if (xinerama)
xinerama_screen_geo(xcb, i, &x, &y, &w, &h);
else
x11_screen_geo(xcb, i, &w, &h);
obs-studio-23.1.0.tar.xz/plugins/linux-jack/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-jack/data/locale/de-DE.ini
Changed
-StartJACKServer="JACK Server starten"
+StartJACKServer="JACK-Server starten"
Channels="Anzahl der Kanäle"
-JACKInput="JACK-Eingang-Client"
+JACKInput="JACK-Eingabe-Client"
obs-studio-23.2.0.tar.xz/plugins/linux-jack/data/locale/ur-PK.ini
Added
+StartJACKServer="جیک کا آغاز"
+Channels="چینلز کی تعداد"
+JACKInput="وصول کار جیک ان پٹ"
+
obs-studio-23.1.0.tar.xz/plugins/linux-pulseaudio/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-pulseaudio/data/locale/de-DE.ini
Changed
-PulseInput="Audio Eingabe Aufnahme (PulseAudio)"
+PulseInput="Audioeingabeaufnahme (PulseAudio)"
PulseOutput="Audioausgabeaufnahme (PulseAudio)"
Device="Gerät"
obs-studio-23.1.0.tar.xz/plugins/linux-pulseaudio/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-pulseaudio/data/locale/ka-GE.ini
Changed
PulseInput="შემავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)"
-PulseOutput="გამომავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)"
+PulseOutput="გამოტანილი ხმის ჩაწერა (PulseAudio)"
Device="მოწყობილობა"
obs-studio-23.1.0.tar.xz/plugins/linux-v4l2/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-v4l2/data/locale/da-DK.ini
Changed
-V4L2Input="Videooptagelsesenhed (V4L2)"
+V4L2Input="Videooptageenhed (V4L2)"
Device="Enhed"
Input="Input"
VideoFormat="Videoformat"
DVTiming="DV-timing"
Resolution="Opløsning"
FrameRate="Billedhastighed"
-LeaveUnchanged="Lad være uændret"
+LeaveUnchanged="Behold uændret"
UseBuffering="Benyt buffering"
ColorRange="Farveområde"
ColorRange.Partial="Delvist"
obs-studio-23.1.0.tar.xz/plugins/linux-v4l2/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-v4l2/data/locale/sk-SK.ini
Changed
FrameRate="Frekvencia snímok"
LeaveUnchanged="Ponechať bez zmeny"
UseBuffering="Použiť vyrovnávaciu pamäť"
+ColorRange="Farebný rozsah"
+ColorRange.Partial="Čiastočný"
+ColorRange.Full="Plný"
obs-studio-23.1.0.tar.xz/plugins/linux-v4l2/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/linux-v4l2/data/locale/tr-TR.ini
Changed
FrameRate="Kare Hızı"
LeaveUnchanged="Değişmeden Bırak"
UseBuffering="Arabelleğe Almayı Kullan"
+ColorRange="Renk Aralığı"
+ColorRange.Partial="Kısmi"
+ColorRange.Full="Tam"
obs-studio-23.1.0.tar.xz/plugins/mac-avcapture/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-avcapture/data/locale/da-DK.ini
Changed
-AVCapture="Video optagelsesenhed"
+AVCapture="Videooptageenhed"
Device="Enhed"
-UsePreset="Brug forudindstilling"
-Preset="Forudindstilling"
+UsePreset="Benyt forvalg"
+Preset="Forvalg"
Buffering="Brug buffering"
-FrameRate="Billedfrekvens"
-InputFormat="Input format"
+FrameRate="Billedhastighed"
+InputFormat="Inputformat"
ColorSpace="Farverum"
-VideoRange="Videoudstrækning"
+VideoRange="Videoområde"
VideoRange.Partial="Delvis"
VideoRange.Full="Fuld"
Auto="Auto"
-Unknown="Ukendt($1)"
+Unknown="Ukendt ($1)"
obs-studio-23.1.0.tar.xz/plugins/mac-avcapture/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-avcapture/data/locale/vi-VN.ini
Changed
Device="Thiết bị"
+UsePreset="Dùng mẫu có sẵn"
Auto="Tự động"
Unknown="Không xác định ($1)"
obs-studio-23.1.0.tar.xz/plugins/mac-capture/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-capture/data/locale/da-DK.ini
Changed
-CoreAudio.InputCapture="Indfang lyd ind"
-CoreAudio.OutputCapture="Indfang lyd ud"
+CoreAudio.InputCapture="Lydinputoptagelse"
+CoreAudio.OutputCapture="Lydoutputoptagelse"
CoreAudio.Device="Enhed"
CoreAudio.Device.Default="Standard"
-DisplayCapture="Skærm optag"
+DisplayCapture="Skærmoptagelse"
DisplayCapture.Display="Skærm"
-DisplayCapture.ShowCursor="Vis markøren"
-WindowCapture="Vindue indfang"
+DisplayCapture.ShowCursor="Vis markør"
+WindowCapture="Vinduesoptagelse"
WindowCapture.ShowShadow="Vis vinduesskygge"
WindowUtils.Window="Vindue"
WindowUtils.ShowEmptyNames="Vis vinduer med tomme navne"
obs-studio-23.1.0.tar.xz/plugins/mac-capture/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-capture/data/locale/de-DE.ini
Changed
-CoreAudio.InputCapture="Audio Eingabe Aufnahme"
+CoreAudio.InputCapture="Audioeingabeaufnahme"
CoreAudio.OutputCapture="Audioausgabeaufnahme"
CoreAudio.Device="Gerät"
CoreAudio.Device.Default="Standard"
-DisplayCapture="Monitoraufnahme"
-DisplayCapture.Display="Monitor"
+DisplayCapture="Bildschirmaufnahme"
+DisplayCapture.Display="Bildschirm"
DisplayCapture.ShowCursor="Mauszeiger anzeigen"
WindowCapture="Fensteraufnahme"
-WindowCapture.ShowShadow="Zeige Fensterschatten"
+WindowCapture.ShowShadow="Fensterschatten anzeigen"
WindowUtils.Window="Fenster"
-WindowUtils.ShowEmptyNames="Zeige Fenster mit leeren Namen"
+WindowUtils.ShowEmptyNames="Fenster mit leeren Namen anzeigen"
CropMode="Zuschneiden"
CropMode.None="Keine"
CropMode.Manual="Manuell"
obs-studio-23.1.0.tar.xz/plugins/mac-capture/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-capture/data/locale/ka-GE.ini
Changed
CoreAudio.InputCapture="შემავალი ხმოვანი სიგნალის ჩაწერა"
-CoreAudio.OutputCapture="გამომავალი ხმოვანი სიგნალის ჩაწერა"
+CoreAudio.OutputCapture="გამოტანილი ხმის ჩაწერა"
CoreAudio.Device="მოწყობილობა"
CoreAudio.Device.Default="ნაგულისხმევი"
DisplayCapture="ეკრანის გადაღება"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/da-DK.ini
Changed
Syphon="Syphon-klient"
Source="Kilde"
LaunchSyphonInject="Kør SyphonInject"
-Inject="Indsæt"
+Inject="Injicér"
Application="Program"
-SyphonLicense="Syphon licens"
+SyphonLicense="Syphon-licens"
Crop="Beskær"
Crop.origin.x="Beskær venstre"
Crop.origin.y="Beskær top"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/de-DE.ini
Changed
Crop.origin.y="Oben abschneiden"
Crop.size.width="Rechts abschneiden"
Crop.size.height="Unten abschneiden"
-AllowTransparency="Erlaube Transparenz"
+AllowTransparency="Transparenz erlauben"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/nb-NO.ini
Changed
+Syphon="Syphon-klient"
Source="Kilde"
LaunchSyphonInject="Start SyphonInject"
Inject="Injiser"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/sk-SK.ini
Changed
+Syphon="Syphon klient"
Source="Zdroj"
LaunchSyphonInject="Zapnúť SyphonInject"
Inject="Zaviesť"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/tr-TR.ini
Changed
+Syphon="Syphon İstemcisi"
Source="Kaynak"
LaunchSyphonInject="SyphonInject'i Başlat"
Inject="Araya gir"
obs-studio-23.1.0.tar.xz/plugins/mac-syphon/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-syphon/data/locale/vi-VN.ini
Changed
Source="Nguồn"
Application="Ứng dụng"
+Crop="Cắt"
+Crop.origin.x="Cắt trái"
+Crop.origin.y="Cắt trên"
+Crop.size.width="Cắt phải"
+Crop.size.height="Cắt dưới"
+AllowTransparency="Cho phép trong suốt"
obs-studio-23.1.0.tar.xz/plugins/mac-vth264/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-vth264/data/locale/da-DK.ini
Changed
UseMaxBitrate="Begræns bit-hastighed"
MaxBitrate="Maks. bit-hastighed"
MaxBitrateWindow="Maks. bit-hastighedsvindue (sekunder)"
-KeyframeIntervalSec="Keyframe interval (sekunder, 0= auto)"
+KeyframeIntervalSec="Keyframe-interval (sekunder, 0= auto)"
Profile="Profil"
None="(ingen)"
DefaultEncoder="(Standard Encoder)"
obs-studio-23.1.0.tar.xz/plugins/mac-vth264/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/mac-vth264/data/locale/de-DE.ini
Changed
-VTH264EncHW="Apple-VT-H264-Hardware-Codierer"
-VTH264EncSW="Apple-VT-H264-Software-Codierer"
-VTEncoder="VideoToolbox-Codierer"
+VTH264EncHW="Apple-VT-H264-Hardware-Kodierer"
+VTH264EncSW="Apple-VT-H264-Software-Kodierer"
+VTEncoder="VideoToolbox-Kodierer"
Bitrate="Bitrate"
UseMaxBitrate="Limitiere Bitrate"
-MaxBitrate="Maximale Bitrate"
-MaxBitrateWindow="Maximales Bitratefenster (Sekunden)"
+MaxBitrate="Max. Bitrate"
+MaxBitrateWindow="Maximales Bitratenfenster (Sekunden)"
KeyframeIntervalSec="Keyframeintervall (Sekunden, 0 = auto)"
Profile="Profil"
None="(Nichts)"
-DefaultEncoder="(Standardcodierer)"
+DefaultEncoder="(Standardkodierer)"
UseBFrames="B-Frames verwenden"
obs-studio-23.1.0.tar.xz/plugins/mac-vth264/encoder.c -> obs-studio-23.2.0.tar.xz/plugins/mac-vth264/encoder.c
Changed
obs_properties_t *props = obs_properties_create();
obs_property_t *p;
- obs_properties_add_int(props, "bitrate", TEXT_BITRATE, 50, 10000000, 1);
+ p = obs_properties_add_int(props, "bitrate",
+ TEXT_BITRATE, 50, 10000000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
p = obs_properties_add_bool(props, "limit_bitrate",
TEXT_USE_MAX_BITRATE);
obs_property_set_modified_callback(p, limit_bitrate_modified);
- obs_properties_add_int(props, "max_bitrate", TEXT_MAX_BITRATE, 50,
- 10000000, 1);
+ p = obs_properties_add_int(props, "max_bitrate", TEXT_MAX_BITRATE, 50,
+ 10000000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
+
obs_properties_add_float(props, "max_bitrate_window",
TEXT_MAX_BITRATE_WINDOW, 0.10f, 10.0f, 0.25f);
obs-studio-23.1.0.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/CMakeLists.txt
Changed
option(EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED "Enable shared texture support for the browser plugin (Win32)" ON)
option(BROWSER_PANEL_SUPPORT_ENABLED "Enables Qt web browser panel support" ON)
+if(NOT APPLE)
+ option(USE_QT_LOOP "Runs CEF on the main UI thread alongside Qt instead of in its own thread" OFF)
+else()
+ set(USE_QT_LOOP TRUE)
+endif()
+
if(APPLE)
option(BROWSER_DEPLOY "Marks full deployment of browser plugin" OFF)
if(BROWSER_DEPLOY)
list(APPEND obs-browser_LIBRARIES
${CEF_LIBRARIES})
+if(BROWSER_PANEL_SUPPORT_ENABLED OR USE_QT_LOOP)
+ if(DEFINED QTDIR${_lib_suffix})
+ list(APPEND CMAKE_PREFIX_PATH "${QTDIR${_lib_suffix}}")
+ elseif(DEFINED QTDIR)
+ list(APPEND CMAKE_PREFIX_PATH "${QTDIR}")
+ elseif(DEFINED ENV{QTDIR${_lib_suffix}})
+ list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
+ elseif(DEFINED ENV{QTDIR})
+ list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
+ endif()
+
+ set(CMAKE_AUTOMOC TRUE)
+ find_package(Qt5Widgets REQUIRED)
+ list(APPEND obs-browser_LIBRARIES
+ Qt5::Widgets
+ )
+endif()
+
if(MSVC)
string(REPLACE "/MD" "/MT"
"CMAKE_C_FLAGS"
# only allow browser panels on win32 for now -- other operating systems
# need more testing
if(WIN32 AND BROWSER_PANEL_SUPPORT_ENABLED)
- if(DEFINED QTDIR${_lib_suffix})
- list(APPEND CMAKE_PREFIX_PATH "${QTDIR${_lib_suffix}}")
- elseif(DEFINED QTDIR)
- list(APPEND CMAKE_PREFIX_PATH "${QTDIR}")
- elseif(DEFINED ENV{QTDIR${_lib_suffix}})
- list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
- elseif(DEFINED ENV{QTDIR})
- list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
- endif()
-
- set(CMAKE_AUTOMOC TRUE)
- find_package(Qt5Widgets REQUIRED)
-
list(APPEND obs-browser_SOURCES
panel/browser-panel.cpp
panel/browser-panel-client.cpp
panel/browser-panel-client.hpp
panel/browser-panel-internal.hpp
)
- list(APPEND obs-browser_LIBRARIES
- Qt5::Widgets
- )
endif()
add_library(obs-browser MODULE
target_link_libraries(obs-browser
${obs-browser_LIBRARIES}
)
+if(USE_QT_LOOP)
+ target_compile_definitions(obs-browser PRIVATE USE_QT_LOOP)
+endif()
# ----------------------------------------------------------------------------
obs-studio-23.1.0.tar.xz/plugins/obs-browser/browser-app.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/browser-app.cpp
Changed
#include <windows.h>
#endif
+#ifdef USE_QT_LOOP
+#include <util/base.h>
+#include <util/platform.h>
+#include <util/threading.h>
+#include <QTimer>
+#endif
+
using namespace json11;
CefRefPtr<CefRenderProcessHandler> BrowserApp::GetRenderProcessHandler()
return true;
}
+
+#ifdef USE_QT_LOOP
+Q_DECLARE_METATYPE(MessageTask);
+MessageObject messageObject;
+
+void QueueBrowserTask(CefRefPtr<CefBrowser> browser, BrowserFunc func)
+{
+ std::lock_guard<std::mutex> lock(messageObject.browserTaskMutex);
+ messageObject.browserTasks.emplace_back(browser, func);
+
+ QMetaObject::invokeMethod(&messageObject, "ExecuteNextBrowserTask",
+ Qt::QueuedConnection);
+}
+
+bool MessageObject::ExecuteNextBrowserTask()
+{
+ Task nextTask;
+ {
+ std::lock_guard<std::mutex> lock(browserTaskMutex);
+ if (!browserTasks.size())
+ return false;
+
+ nextTask = browserTasks[0];
+ browserTasks.pop_front();
+ }
+
+ nextTask.func(nextTask.browser);
+ return true;
+}
+
+void MessageObject::ExecuteTask(MessageTask task)
+{
+ task();
+}
+
+void MessageObject::DoCefMessageLoop(int ms)
+{
+ if (ms)
+ QTimer::singleShot((int)ms + 2, [] () {CefDoMessageLoopWork();});
+ else
+ CefDoMessageLoopWork();
+}
+
+void MessageObject::Process()
+{
+ CefDoMessageLoopWork();
+}
+
+void ProcessCef()
+{
+ QMetaObject::invokeMethod(&messageObject, "DoCefMessageLoop",
+ Qt::QueuedConnection,
+ Q_ARG(int, (int)0));
+}
+
+#define MAX_DELAY (1000 / 30)
+
+void BrowserApp::OnScheduleMessagePumpWork(int64 delay_ms)
+{
+ if (delay_ms < 0)
+ delay_ms = 0;
+ else if (delay_ms > MAX_DELAY)
+ delay_ms = MAX_DELAY;
+
+ if (!frameTimer.isActive()) {
+ QObject::connect(&frameTimer, &QTimer::timeout,
+ &messageObject, &MessageObject::Process);
+ frameTimer.setSingleShot(false);
+ frameTimer.start(33);
+ }
+
+ QMetaObject::invokeMethod(&messageObject, "DoCefMessageLoop",
+ Qt::QueuedConnection,
+ Q_ARG(int, (int)delay_ms));
+}
+#endif
obs-studio-23.1.0.tar.xz/plugins/obs-browser/browser-app.hpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/browser-app.hpp
Changed
#pragma once
#include <map>
+#include <functional>
#include "cef-headers.hpp"
+typedef std::function<void(CefRefPtr<CefBrowser>)> BrowserFunc;
+
+#ifdef USE_QT_LOOP
+#include <QObject>
+#include <QTimer>
+#include <mutex>
+#include <deque>
+
+typedef std::function<void()> MessageTask;
+
+class MessageObject : public QObject {
+ Q_OBJECT
+
+ friend void QueueBrowserTask(CefRefPtr<CefBrowser> browser,
+ BrowserFunc func);
+
+ struct Task {
+ CefRefPtr<CefBrowser> browser;
+ BrowserFunc func;
+
+ inline Task() {}
+ inline Task(CefRefPtr<CefBrowser> browser_, BrowserFunc func_)
+ : browser(browser_),
+ func(func_)
+ {}
+ };
+
+ std::mutex browserTaskMutex;
+ std::deque<Task> browserTasks;
+
+public slots:
+ bool ExecuteNextBrowserTask();
+ void ExecuteTask(MessageTask task);
+ void DoCefMessageLoop(int ms);
+ void Process();
+};
+
+extern void QueueBrowserTask(CefRefPtr<CefBrowser> browser, BrowserFunc func);
+#endif
+
class BrowserApp : public CefApp,
public CefRenderProcessHandler,
public CefBrowserProcessHandler,
CefRefPtr<CefV8Value> &retval,
CefString &exception) override;
+#ifdef USE_QT_LOOP
+ virtual void OnScheduleMessagePumpWork(int64 delay_ms) override;
+ QTimer frameTimer;
+#endif
+
IMPLEMENT_REFCOUNTING(BrowserApp);
};
obs-studio-23.1.0.tar.xz/plugins/obs-browser/browser-version.h -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/browser-version.h
Changed
#pragma once
#define OBS_BROWSER_VERSION_MAJOR 2
-#define OBS_BROWSER_VERSION_MINOR 3
-#define OBS_BROWSER_VERSION_PATCH 1
+#define OBS_BROWSER_VERSION_MINOR 4
+#define OBS_BROWSER_VERSION_PATCH 0
#ifndef MAKE_SEMANTIC_VERSION
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
obs-studio-23.1.0.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp
Changed
#include <util/dstr.hpp>
#include <obs-module.h>
#include <obs.hpp>
+#include <functional>
#include <thread>
#include <mutex>
#include <d3d11.h>
#endif
+#ifdef USE_QT_LOOP
+#include <QApplication>
+#include <QThread>
+#endif
+
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("obs-browser", "en-US")
using namespace json11;
static thread manager_thread;
+static bool manager_initialized = false;
os_event_t *cef_started_event = nullptr;
static int adapterCount = 0;
/* ========================================================================= */
+#ifdef USE_QT_LOOP
+extern MessageObject messageObject;
+#endif
+
class BrowserTask : public CefTask {
public:
std::function<void()> task;
inline BrowserTask(std::function<void()> task_) : task(task_) {}
- virtual void Execute() override {task();}
+ virtual void Execute() override
+ {
+#ifdef USE_QT_LOOP
+ /* you have to put the tasks on the Qt event queue after this
+ * call otherwise the CEF message pump may stop functioning
+ * correctly, it's only supposed to take 10ms max */
+ QMetaObject::invokeMethod(&messageObject, "ExecuteTask",
+ Qt::QueuedConnection,
+ Q_ARG(MessageTask, task));
+#else
+ task();
+#endif
+ }
IMPLEMENT_REFCOUNTING(BrowserTask);
};
#if EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED
obs_data_set_default_bool(settings, "fps_custom", false);
#else
- obs_data_set_bool(settings, "fps_custom", true);
+ obs_data_set_default_bool(settings, "fps_custom", true);
#endif
obs_data_set_default_bool(settings, "shutdown", false);
obs_data_set_default_bool(settings, "restart_when_active", false);
return props;
}
-static void BrowserManagerThread(void)
+static CefRefPtr<BrowserApp> app;
+
+static void BrowserInit(void)
{
string path = obs_get_module_binary_path(obs_current_module());
path = path.substr(0, path.find_last_of('/') + 1);
settings.windowless_rendering_enabled = true;
settings.no_sandbox = true;
+#ifdef USE_QT_LOOP
+ settings.external_message_pump = true;
+ settings.multi_threaded_message_loop = false;
+#endif
+
#if defined(__APPLE__) && !defined(BROWSER_DEPLOY)
CefString(&settings.framework_dir_path) = CEF_LIBRARY;
#endif
}
#endif
- CefRefPtr<BrowserApp> app(new BrowserApp(tex_sharing_avail));
+ app = new BrowserApp(tex_sharing_avail);
CefExecuteProcess(args, app, nullptr);
CefInitialize(args, settings, app, nullptr);
CefRegisterSchemeHandlerFactory("http", "absolute",
new BrowserSchemeHandlerFactory());
os_event_signal(cef_started_event);
- CefRunMessageLoop();
+}
+
+#ifdef USE_QT_LOOP
+extern MessageObject messageObject;
+#endif
+
+static void BrowserShutdown(void)
+{
+#ifdef USE_QT_LOOP
+ while (messageObject.ExecuteNextBrowserTask());
+ CefDoMessageLoopWork();
+#endif
CefShutdown();
+ app = nullptr;
}
+#ifndef USE_QT_LOOP
+static void BrowserManagerThread(void)
+{
+ BrowserInit();
+ CefRunMessageLoop();
+ BrowserShutdown();
+}
+#endif
+
extern "C" EXPORT void obs_browser_initialize(void)
{
- static bool manager_initialized = false;
if (!os_atomic_set_bool(&manager_initialized, true)) {
+#ifdef USE_QT_LOOP
+ BrowserInit();
+#else
manager_thread = thread(BrowserManagerThread);
+#endif
}
}
blog(LOG_INFO, "[obs-browser]: Version %s",
OBS_BROWSER_VERSION_STRING);
+#ifdef USE_QT_LOOP
+ qRegisterMetaType<MessageTask>("MessageTask");
+#endif
+
os_event_init(&cef_started_event, OS_EVENT_TYPE_MANUAL);
CefEnableHighDPISupport();
void obs_module_unload(void)
{
+#ifdef USE_QT_LOOP
+ BrowserShutdown();
+#else
if (manager_thread.joinable()) {
while (!QueueCEFTask([] () {CefQuitMessageLoop();}))
os_sleep_ms(5);
manager_thread.join();
}
+#endif
os_event_destroy(cef_started_event);
}
obs-studio-23.1.0.tar.xz/plugins/obs-browser/obs-browser-source.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/obs-browser-source.cpp
Changed
#include <thread>
#include <mutex>
+#ifdef USE_QT_LOOP
+#include <QApplication>
+#include <QEventLoop>
+#include <QThread>
+#endif
+
using namespace std;
extern bool QueueCEFTask(std::function<void()> task);
*p_prev_next = next;
}
-void BrowserSource::ExecuteOnBrowser(std::function<void()> func, bool async)
+void BrowserSource::ExecuteOnBrowser(BrowserFunc func, bool async)
{
if (!async) {
+#ifdef USE_QT_LOOP
+ if (QThread::currentThread() == qApp->thread()) {
+ if (!!cefBrowser)
+ func(cefBrowser);
+ return;
+ }
+#endif
os_event_t *finishedEvent;
os_event_init(&finishedEvent, OS_EVENT_TYPE_AUTO);
bool success = QueueCEFTask([&] () {
if (!!cefBrowser)
- func();
+ func(cefBrowser);
os_event_signal(finishedEvent);
});
if (success)
os_event_wait(finishedEvent);
os_event_destroy(finishedEvent);
} else {
- QueueCEFTask([this, func] () {
- if (!!cefBrowser)
- func();
- });
+ CefRefPtr<CefBrowser> browser = cefBrowser;
+ if (!!browser) {
+#ifdef USE_QT_LOOP
+ QueueBrowserTask(cefBrowser, func);
+#else
+ QueueCEFTask([=] () {
+ func(browser);
+ });
+#endif
+ }
}
}
void BrowserSource::DestroyBrowser(bool async)
{
- ExecuteOnBrowser([this] ()
+ ExecuteOnBrowser([] (CefRefPtr<CefBrowser> cefBrowser)
{
CefRefPtr<CefClient> client =
cefBrowser->GetHost()->GetClient();
*/
cefBrowser->GetHost()->WasHidden(true);
cefBrowser->GetHost()->CloseBrowser(true);
- cefBrowser = nullptr;
}, async);
+
+ cefBrowser = nullptr;
}
void BrowserSource::SendMouseClick(
int32_t x = event->x;
int32_t y = event->y;
- ExecuteOnBrowser([this, modifiers, x, y, type, mouse_up, click_count] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefMouseEvent e;
e.modifiers = modifiers;
int32_t x = event->x;
int32_t y = event->y;
- ExecuteOnBrowser([this, modifiers, x, y, mouse_leave] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefMouseEvent e;
e.modifiers = modifiers;
int32_t x = event->x;
int32_t y = event->y;
- ExecuteOnBrowser([this, modifiers, x, y, x_delta, y_delta] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefMouseEvent e;
e.modifiers = modifiers;
void BrowserSource::SendFocus(bool focus)
{
- ExecuteOnBrowser([this, focus] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
cefBrowser->GetHost()->SendFocusEvent(focus);
}, true);
std::string text = event->text;
uint32_t native_vkey = event->native_vkey;
- ExecuteOnBrowser([this, modifiers, text, native_vkey, key_up] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefKeyEvent e;
e.windows_key_code = native_vkey;
void BrowserSource::SetShowing(bool showing)
{
if (!showing) {
- ExecuteOnBrowser([this] ()
+ ExecuteOnBrowser([] (CefRefPtr<CefBrowser> cefBrowser)
{
cefBrowser->GetHost()->WasHidden(true);
}, true);
DestroyBrowser(true);
}
} else {
- ExecuteOnBrowser([this, showing] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefRefPtr<CefProcessMessage> msg =
CefProcessMessage::Create("Visibility");
}
if (showing) {
- ExecuteOnBrowser([this] ()
+ ExecuteOnBrowser([] (CefRefPtr<CefBrowser> cefBrowser)
{
cefBrowser->GetHost()->WasHidden(false);
cefBrowser->GetHost()->Invalidate(PET_VIEW);
void BrowserSource::SetActive(bool active)
{
- ExecuteOnBrowser([this, active] ()
+ ExecuteOnBrowser([=] (CefRefPtr<CefBrowser> cefBrowser)
{
CefRefPtr<CefProcessMessage> msg =
CefProcessMessage::Create("Active");
void BrowserSource::Refresh()
{
- ExecuteOnBrowser([this] ()
+ ExecuteOnBrowser([] (CefRefPtr<CefBrowser> cefBrowser)
{
cefBrowser->ReloadIgnoreCache();
}, true);
inline void BrowserSource::SignalBeginFrame()
{
if (reset_frame) {
- ExecuteOnBrowser([this] ()
+ ExecuteOnBrowser([] (CefRefPtr<CefBrowser> cefBrowser)
{
cefBrowser->GetHost()->SendExternalBeginFrame();
}, true);
#endif
}
+extern void ProcessCef();
+
void BrowserSource::Render()
{
bool flip = false;
#if EXPERIMENTAL_SHARED_TEXTURE_SUPPORT_ENABLED
SignalBeginFrame();
+#elif USE_QT_LOOP
+ ProcessCef();
#endif
}
-static void ExecuteOnAllBrowsers(function<void(CefRefPtr<CefBrowser>)> func)
+static void ExecuteOnAllBrowsers(BrowserFunc func)
{
lock_guard<mutex> lock(browser_list_mutex);
while (bs) {
BrowserSource *bsw =
reinterpret_cast<BrowserSource *>(bs);
- CefRefPtr<CefBrowser> cefBrowser = bsw->cefBrowser;
- if (cefBrowser)
- bsw->ExecuteOnBrowser([=] () {func(cefBrowser);}, true);
+ bsw->ExecuteOnBrowser(func, true);
bs = bs->next;
}
}
obs-studio-23.1.0.tar.xz/plugins/obs-browser/obs-browser-source.hpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/obs-browser-source.hpp
Changed
#include "cef-headers.hpp"
#include "browser-config.h"
+#include "browser-app.hpp"
#include <functional>
#include <string>
bool CreateBrowser();
void DestroyBrowser(bool async = false);
- void ExecuteOnBrowser(std::function<void()> func, bool async = false);
+ void ExecuteOnBrowser(BrowserFunc func, bool async = false);
/* ---------------------------- */
obs-studio-23.1.0.tar.xz/plugins/obs-browser/panel/browser-panel.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/panel/browser-panel.cpp
Changed
#include "browser-panel-internal.hpp"
#include "browser-panel-client.hpp"
#include "cef-headers.hpp"
+#include "browser-app.hpp"
#include <QWindow>
+#ifdef USE_QT_LOOP
+#include <QApplication>
+#include <QEventLoop>
+#include <QThread>
+#endif
+
#include <obs-module.h>
#include <util/threading.h>
#include <util/base.h>
/* ------------------------------------------------------------------------- */
-static void ExecuteOnBrowser(std::function<void()> func, bool async = false)
-{
- if (!async) {
- os_event_t *finishedEvent;
- os_event_init(&finishedEvent, OS_EVENT_TYPE_AUTO);
- bool success = QueueCEFTask([&] () {
- func();
- os_event_signal(finishedEvent);
- });
- if (success)
- os_event_wait(finishedEvent);
- os_event_destroy(finishedEvent);
- } else {
- QueueCEFTask(func);
- }
-}
-
QCefWidgetInternal::QCefWidgetInternal(
QWidget *parent,
const std::string &url_,
QCefWidgetInternal::~QCefWidgetInternal()
{
- ExecuteOnBrowser([this] ()
- {
- if (!cefBrowser) {
- return;
- }
- CefRefPtr<CefClient> client =
- cefBrowser->GetHost()->GetClient();
- QCefBrowserClient *bc =
- reinterpret_cast<QCefBrowserClient*>(
- client.get());
-
- bc->widget = nullptr;
+ CefRefPtr<CefBrowser> browser = cefBrowser;
+ if (!!browser) {
+ auto destroyBrowser = [] (CefRefPtr<CefBrowser> cefBrowser)
+ {
+ if (!cefBrowser) {
+ return;
+ }
+ CefRefPtr<CefClient> client =
+ cefBrowser->GetHost()->GetClient();
+ QCefBrowserClient *bc =
+ reinterpret_cast<QCefBrowserClient*>(
+ client.get());
+
+ cefBrowser->GetHost()->WasHidden(true);
+ cefBrowser->GetHost()->CloseBrowser(true);
+
+ bc->widget = nullptr;
+ };
+
+#ifdef USE_QT_LOOP
+ QueueBrowserTask(cefBrowser, destroyBrowser);
+#else
+ QueueCEFTask([=] () {destroyBrowser(browser);});
+#endif
cefBrowser = nullptr;
- });
+ }
}
void QCefWidgetInternal::Init()
#ifdef _WIN32
RECT rc = {0, 0, size.width(), size.height()};
windowInfo.SetAsChild((HWND)id, rc);
+#elif __APPLE__
+ windowInfo.SetAsChild((CefWindowHandle)id, 0, 0,
+ size.width(),size.height());
#endif
CefRefPtr<QCefBrowserClient> browserClient =
void QCefWidgetInternal::Resize()
{
+#ifdef _WIN32
QSize size = this->size() * devicePixelRatio();
QueueCEFTask([this, size] ()
{
if (!cefBrowser)
return;
-#ifdef _WIN32
HWND hwnd = cefBrowser->GetHost()->GetWindowHandle();
SetWindowPos(hwnd, nullptr, 0, 0, size.width(), size.height(),
SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER);
SendMessage(hwnd, WM_SIZE, 0,
MAKELPARAM(size.width(), size.height()));
-#endif
});
+#endif
}
void QCefWidgetInternal::showEvent(QShowEvent *event)
obs-studio-23.1.0.tar.xz/plugins/obs-browser/panel/browser-panel.hpp -> obs-studio-23.2.0.tar.xz/plugins/obs-browser/panel/browser-panel.hpp
Changed
static inline QCef *obs_browser_init_panel(void)
{
+#ifdef _WIN32
void *lib = os_dlopen("obs-browser");
+#else
+ void *lib = os_dlopen("../obs-plugins/obs-browser");
+#endif
QCef *(*create_qcef)(void) = nullptr;
if (!lib) {
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini
Changed
FFmpegOutput="Sortida FFmpeg"
-FFmpegAAC="Codificador FFmpeg AAC predeterminat"
+FFmpegAAC="Codificador FFmpeg AAC per defecte"
FFmpegOpus="Codificador Opus FFmpeg"
Bitrate="Taxa de bits"
MaxBitrate="Taxa de bits màxima"
NVENC.Preset.llhq="Qualitat de latència baixa"
NVENC.Preset.llhp="Rendiment de latència baixa"
NVENC.LookAhead="Previsió"
+NVENC.LookAhead.ToolTip="Habilita els Fotogrames-B dinàmics.\n\nEn inhabilitar-ho, el codificador utilitzarà sempre el nombre de Fotogrames-B indicat a l'opció «Fotogrames-B màxims».\n\nEn habilitar-ho, augmentarà la qualitat visual només utilitzant els Fotogrames-B necessaris,\nfins el màxim permès per l'ús de la GPU."
NVENC.PsychoVisualTuning="Ajust psico visual"
NVENC.PsychoVisualTuning.ToolTip="Permet la configuració del codificador que optimitza l'ús de la taxa de bits per millorar la qualitat visual percebuda,\nespecialment en situacions amb gran moviment, a costa d'una major utilització de la GPU."
NVENC.CQLevel="Nivell de quantificació constant"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini
Changed
-FFmpegOutput="FFmpeg output"
+FFmpegOutput="FFmpeg-output"
FFmpegAAC="FFmpeg Standard AAC Encoder"
FFmpegOpus="FFmpeg Opus-encoder"
Bitrate="Bitrate"
NVENC.Preset.hq="Kvalitet"
NVENC.Preset.hp="Maks. ydeevne"
NVENC.Preset.mq="Maks. kvalitet"
-NVENC.Preset.ll="Lav latens"
-NVENC.Preset.llhq="Lavlatens højkvalitet"
-NVENC.Preset.llhp="Lavlatens ydeevne"
+NVENC.Preset.ll="Lavlatens"
+NVENC.Preset.llhq="Lavlatenskvalitet"
+NVENC.Preset.llhp="Lavlatensydeevne"
NVENC.LookAhead="Look-ahead"
-NVENC.LookAhead.ToolTip="Aktiverer dynamiske B-billeder.\n\nHvis deaktiveret, benytter encoderen altid antallet af B-billeder, som er angivet i indstillingen 'Maks. B-billeder'.\n\nHvis aktiveret, vil den visuelle kvalitet blive forøget ved kun at benytte det nødvendige antal B-billeder op til maksimum\npå bekostning af forøget GPU-udnyttelse."
+NVENC.LookAhead.ToolTip="Aktiverer dynamiske B-frames.\n\nHvis deaktiveret, benytter encoderen altid antallet af B-frames angivet i indstillingen 'Maks. B-frames'.\n\nHvis aktiveret, forøges den visuelle kvalitet ved kun at benytte det nødvendige antal B-frames op til maksimum\npå bekostning af forøget GPU-forbrug."
NVENC.PsychoVisualTuning="Psychovisuel tuning"
-NVENC.PsychoVisualTuning.ToolTip="Aktiverer encoderindstillinger, som optimerer brugen af bithastighed for øget opfattet visuel kvalitet, \nisær i situationer med megen bevægelse, på bekostning af forøget GPU-udnyttelse."
+NVENC.PsychoVisualTuning.ToolTip="Aktiverer encoderindstillinger, som optimerer brugen af bithastighed for øget opfattet visuel kvalitet,\nisær i situationer med megen bevægelse, på bekostning af forøget GPU-forbrug."
NVENC.CQLevel="CQ-niveau"
FFmpegSource="Mediekilde"
LocalFile="Lokal fil"
Looping="Gentagelse"
Input="Input"
-InputFormat="Input format"
+InputFormat="Inputformat"
BufferingMB="Netværksbuffering (MB)"
-HardwareDecode="Brug hardwareafkodning når tilgængelige"
+HardwareDecode="Benyt hardwareafkodning, når tilgængelig"
ClearOnMediaEnd="Vis intet, når afspilning afsluttes"
Advanced="Avanceret"
-RestartWhenActivated="Genstart afspilning når kilde bliver aktiv"
-CloseFileWhenInactive="Luk fil når inaktiv"
-CloseFileWhenInactive.ToolTip="Lukker filen, når kilden ikke vises i streamen ellerr\noptagelsen. Dette muliggør at filen kan ændres, når kilden er ikke aktiv, \nmen der kan være noget opstartsforsinkelse, når kilden genaktiveres."
+RestartWhenActivated="Genstart afspilning, når kilde bliver aktiv"
+CloseFileWhenInactive="Luk fil, når inaktiv"
+CloseFileWhenInactive.ToolTip="Lukker filen, når kilden ikke vises i streamen ellerr\noptagelsen. Dette muliggør at filen kan ændres, når kilden er ikke aktiv,\nmen nogen opstartsforsinkelse kan forekomme, når kilden genaktiveres."
ColorRange="YUV-farveområde"
ColorRange.Auto="Auto"
ColorRange.Partial="Delvis"
ColorRange.Full="Fuld"
RestartMedia="Genstart Media"
SpeedPercentage="Hastighed (procent)"
-Seekable="Seekable"
+Seekable="Søgbar"
MediaFileFilter.AllMediaFiles="Alle mediefiler"
MediaFileFilter.VideoFiles="Videofiler"
ReplayBuffer="Genafspilningsbuffer"
ReplayBuffer.Save="Gem Genafspilning"
-HelperProcessFailed="Kan ikke starte optagelseshjælperprocessen. Tjek at OBS-filer ikke blokeres eller er fjernet af noget 3. parts antivirus-/sikkerhedssoftware."
-UnableToWritePath="Kan ikke skrive til %1. Tjek at du benytter en optagelsessti, som din brugerkonto har skriverettighed til, og at der er tilstrækkelig ledig diskplads."
-WarnWindowsDefender="Er Windows 10 Ransomware-beskyttelse aktiveret, kan dette også medføre denne fejl. Prøv at deaktivere kontrolleret mappetilgang i Windows-indstillingen Sikkerhed/Virus- og Trusselsbeskyttelse."
+HelperProcessFailed="Kan ikke starte optagelseshjælperprocessen. Tjek, at OBS-filer ikke blokeres eller er fjernet af 3. parts antivirus-/sikkerhedssoftware."
+UnableToWritePath="Kan ikke skrive til %1. Tjek, at du benytter en optagelsessti, som din brugerkonto har skriverettighed til, og at der er tilstrækkelig ledig diskplads."
+WarnWindowsDefender="Er Windows 10 Ransomware-beskyttelse aktiveret, kan dette også medføre denne fejl. Prøv at deaktivere kontrolleret mappeadgang i Windows-indstillingen Sikkerhed/Virus- og Trusselsbeskyttelse."
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini
Changed
FFmpegOutput="FFmpeg-Ausgabe"
-FFmpegAAC="FFmpeg-Standard-AAC-Codierer"
-FFmpegOpus="FFmpeg-Opus-Codierer"
+FFmpegAAC="FFmpeg-Standard-AAC-Kodierer"
+FFmpegOpus="FFmpeg-Opus-Kodierer"
Bitrate="Bitrate"
MaxBitrate="Max. Bitrate"
Preset="Voreinstellung"
RateControl="Qualitäts Regulierungsmethode"
-KeyframeIntervalSec="Keyframeintervall (Sekunden, 0=auto)"
+KeyframeIntervalSec="Keyframeintervall in Sek. (0 = auto)"
Lossless="Verlustfrei"
BFrames="Max. B-Frames"
-NVENC.Use2Pass="Benutze Two-Pass Codierung"
+NVENC.Use2Pass="Two-Pass-Kodierung verwenden"
NVENC.Preset.default="Leistung"
NVENC.Preset.hq="Qualität"
NVENC.Preset.hp="Max. Leistung"
NVENC.Preset.llhq="Niedrige Latenz + Qualität"
NVENC.Preset.llhp="Niedrige Latenz + Leistung"
NVENC.LookAhead="Look-ahead"
-NVENC.LookAhead.ToolTip="Aktiviert dynamische B-Frames.\n\nWenn deaktiviert, wird der Codierer immer die Anzahl der B-Frames verwenden, die in der „Max B-Frames“-Einstellung angegeben sind.\n\nWenn aktiviert, wird er die visuelle Qualität erhöhen, indem nur so viele B-Frames verwendet werden wie benötigt, bis zum Maximum,\nzu den Kosten einer erhöhten GPU-Nutzung."
+NVENC.LookAhead.ToolTip="Aktiviert dynamische B-Frames.\n\nWenn deaktiviert, wird der Kodierer immer die Anzahl der B-Frames verwenden, die in der „Max B-Frames“-Einstellung angegeben sind.\n\nWenn aktiviert, wird er die visuelle Qualität erhöhen, indem nur so viele B-Frames verwendet werden wie benötigt, bis zum Maximum,\nzu den Kosten einer erhöhten GPU-Nutzung."
NVENC.PsychoVisualTuning="Psycho-visuelle Optimierung"
-NVENC.PsychoVisualTuning.ToolTip="Aktiviert Codierereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung, zu Kosten einer erhöhten GPU-Nutzung."
+NVENC.PsychoVisualTuning.ToolTip="Aktiviert Kodierereinstellungen, die die Verwendung der Bitrate für eine erhöhte wahrgenommene visuelle Qualität optimieren,\ninsbesondere in Situationen mit hoher Bewegung, zu Kosten einer erhöhten GPU-Nutzung."
NVENC.CQLevel="CQ-Level"
FFmpegSource="Medienquelle"
Input="Eingabe"
InputFormat="Eingabeformat"
BufferingMB="Netzwerkpufferung (MB)"
-HardwareDecode="Verwende Hardwaredecodierung, falls verfügbar"
+HardwareDecode="Hardwaredekodierung verwenden, falls verfügbar"
ClearOnMediaEnd="Nichts anzeigen, wenn Wiedergabe endet"
Advanced="Erweitert"
RestartWhenActivated="Wiedergabe erneut starten, wenn Quelle aktiviert wird"
CloseFileWhenInactive="Datei schließen, wenn inaktiv"
-CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder der Aufnahme nicht angezeigt wird.\nDies ermöglicht, dass die Datei geändert wird, wenn die Quelle nicht aktiv ist,\n aber es gibt wahrscheinlich etwas Startverzögerung, wenn die Quelle reaktiviert wird."
+CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder der Aufnahme nicht angezeigt wird.\nDies ermöglicht, dass die Datei geändert werden kann, wenn die Quelle nicht aktiv ist,\n aber es gibt wahrscheinlich etwas Startverzögerung, wenn die Quelle reaktiviert wird."
ColorRange="YUV-Farbmatrix"
ColorRange.Auto="Automatisch"
ColorRange.Partial="Teilweise"
ColorRange.Full="Voll"
-RestartMedia="Medium neu starten"
+RestartMedia="Medium neustarten"
SpeedPercentage="Geschwindigkeit (Prozent)"
Seekable="Durch•such•bar"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini
Changed
Advanced="Advanced"
RestartWhenActivated="Restart playback when source becomes active"
CloseFileWhenInactive="Close file when inactive"
-CloseFileWhenInactive.ToolTip="Closes the file when the source is not being displayed on the stream or\nrecording. This allows the file to be changed when the source isn't active,\nbut there may be some startup delay when the source reactivates."
+CloseFileWhenInactive.ToolTip="Closes the file when the source is not being displayed on the stream or\nrecording. This allows the file to be changed when the source isn't active,\nbut there may be some startup delay when the source reactivates."
ColorRange="YUV Color Range"
ColorRange.Auto="Auto"
ColorRange.Partial="Partial"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/eu-ES.ini
Changed
NVENC.Preset.llhq="Latentzia txikiko kalitatea"
NVENC.Preset.llhp="Latentzia txikiko errendimendua"
NVENC.LookAhead="Aurrera begira"
+NVENC.LookAhead.ToolTip="Gaitu B-fotograma dinamikoak.\n\nGalerazita badaude, kodetzaileak beti erabiliko du 'Max B-fotogramak' ezarpenetan zehazten den B-fotogramen kopurua.\n\nGaituta badaude, ikusmen kalitatea hobetuko du beharrezkoak diren B-fotogramen kopurua erabiliz, maximora iritsi arte\nordainez GPUren erabilera handituko bada ere."
NVENC.PsychoVisualTuning="Psycho Visual Tuning"
+NVENC.PsychoVisualTuning.ToolTip="Aukera ematen du kodetzailea konfiguratzeko optimizatzeko bit-ratioaren erabilera antzemandako ikusmen kalitatea hobetzeko,\nbatez ere mugimendu handiko egoeretan, ordainean GPUren erabilera handituz."
NVENC.CQLevel="CQ maila"
FFmpegSource="Multimedia iturburua"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini
Changed
BFrames="حد اکثر فریم های B"
+NVENC.Use2Pass="استفاده از کدگذاری 2 گذر"
NVENC.Preset.default="اجرا (کارایی)"
NVENC.Preset.hq="کیفیت"
NVENC.Preset.hp="حد اکثر اجرا (کارایی)"
NVENC.Preset.ll="زمان تاخیر کم"
NVENC.Preset.llhq="کیفیت پایین و زمان تاخیر"
NVENC.Preset.llhp="زمان تاخیر کم عملکرد"
+NVENC.LookAhead="پیش رو نگاه"
LocalFile="فایل محلی"
Looping="چرخه"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini
Changed
Advanced="Haladó"
RestartWhenActivated="Lejátszás újraindítása, ha a forrás aktivizálódik"
CloseFileWhenInactive="Fájl bezárása ha tétlen"
-CloseFileWhenInactive.ToolTip="Bezárja a fájlt, ha a forrás nem aktív streamen vagy\nfelvételen. Ez lehetővé teszi, hogy a fájlt meg kell változtatni, ha a forrás nem aktív, a \nviszont felléphet némi indítási késés, ha a forrás reaktiválódik."
+CloseFileWhenInactive.ToolTip="Bezárja a fájlt, ha a forrás nem aktív streamen vagy\nfelvételen. Ez lehetővé teszi, hogy a fájlt meg kell változtatni, ha a forrás nem aktív, a \nviszont felléphet némi indítási késés, ha a forrás reaktiválódik."
ColorRange="YUV színtartomány"
ColorRange.Auto="Auto"
ColorRange.Partial="Részleges"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/ka-GE.ini
Changed
-FFmpegOutput="FFmpeg გამომავალი სიგნალი"
+FFmpegOutput="FFmpeg-გამოტანა"
FFmpegAAC="FFmpeg ნაგულისხმევი AAC დამშიფრავი"
FFmpegOpus="FFmpeg Opus დამშიფრავი"
Bitrate="ბიტური სიხშირე"
NVENC.Preset.llhq="მცირე დაყოვნება მაღალი ხარისხით"
NVENC.Preset.llhp="მცირე დაყოვნება მაღალი წარმადობით"
NVENC.LookAhead="თვითგანსაზღვრა"
-NVENC.LookAhead.ToolTip="ჩაირთვება ცვალებადი რაოდენობის B-კადრები.\n\nგამორთვის შემთხვევაში, დამშიფრავი ყოველთვის „B-კადრების დასაშვები რაოდენობის“ ველში მითითებულს გამოიყენებს.\n\nჩართვის შედეგად, გაიზრდება გამოსახულლების ხარისხი საჭირო რაოდენობის B-კადრების დამატებით, უმაღლეს დასაშვებ რაოდენობამდე,\nგრაფიკული პროცესორის გაზრდილი დატვირთვის ხარჯზე."
+NVENC.LookAhead.ToolTip="ჩაირთვება ცვალებადი რაოდენობის B-კადრები.\n\nგამორთვის შემთხვევაში, დამშიფრავი ყოველთვის „B-კადრების დასაშვები რაოდენობის“ ველში მითითებულს გამოიყენებს.\n\nჩართვის შედეგად, გაიზრდება გამოსახულების ხარისხი საჭირო რაოდენობის B-კადრების დამატებით, უმაღლეს დასაშვებ რაოდენობამდე,\nგრაფიკული პროცესორის გაზრდილი დატვირთვის ხარჯზე."
NVENC.PsychoVisualTuning="ფსიქოვიზუალური გამართვა"
NVENC.PsychoVisualTuning.ToolTip="საშუალებას აძლევს დამშიფრავს, საუკეთესოდ შეარჩიოს ბიტური სიხშირე გამოსახულების ხარისხის უკეთ აღქმისთვის,\nგანსაკუთრებით მოძრავ სცენებში, გრაფიკული პროცესორის გაზრდილი დატვირთვის ხარჯზე."
NVENC.CQLevel="CQ-დონე (მუდმივ ნაწილაკებად დაყოფა)"
Advanced="გაფართოებული"
RestartWhenActivated="ხელახლა გაშვება წყაროს ამოქმედებისას"
CloseFileWhenInactive="ფაილის დახურვა უმოქმედობისას"
-CloseFileWhenInactive.ToolTip="ფაილი დაიხურება, თუ წყარო არ იქნება ეთერში ან\nჩაწერაზე გაშვებული. ეს საშუალებას იძლევა შეიცვალოს ფაილი, როცა წყარო არაა მოქმედი,\nთუმცა ხელახლა ამოქმედებისას, შესაძლოა გარკვეული დროით დაყოვნებას ჰქონდეს ადგილი."
+CloseFileWhenInactive.ToolTip="ფაილი დაიხურება, თუ წყარო არ იქნება ეთერში ან\nჩაწერაზე გაშვებული. ეს საშუალებას იძლევა შეიცვალოს ფაილი, როცა წყარო არაა მოქმედი,\nთუმცა ხელახლა ამოქმედებისას, შესაძლოა გარკვეული დროით დაყოვნებას ჰქონდეს ადგილი."
ColorRange="YUV ფერთა გამა"
ColorRange.Auto="ავტომატური"
ColorRange.Partial="ნაწილობრივი"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini
Changed
NVENC.Preset.ll="Lav latens"
NVENC.Preset.llhq="Lav latens og kvalitet"
NVENC.Preset.llhp="Lav latens og ytelse"
+NVENC.LookAhead="Look-ahead"
+NVENC.LookAhead.ToolTip="Aktiverer dynamiske B-frames. \n\nHvis deaktivert, vil koderen alltid bruke nummeret spesifisert i \"Maks B-frames\" instillingen. \n\nHvis aktivert, vil bildekvaliteten forbedres ved å bare bruke antallet nødvendige B-frames, opp til maksimum antallet,\npå bekostning av økt GPU-forbruk."
+NVENC.PsychoVisualTuning="Psykovisuell justering"
+NVENC.PsychoVisualTuning.ToolTip="Aktiverer kodingsinstillinger som optimerer bruken av bitrate for forbedret oppfattet bildekvalitet,\nspesielt i situasjonen med mye bevegelse, på bekostning av økt GPU-forbruk."
+NVENC.CQLevel="QC-nivå"
FFmpegSource="Mediekilde"
LocalFile="Lokal fil"
HelperProcessFailed="Kan ikke starte prosess for opptakshjelper. Sjekk at OBS ikke har noen blokkerte filer, eller at tredjeparts antivirus/sikkerhetsprogramvare har slettet noen filer."
UnableToWritePath="Kan ikke skrive til %1. Kontroller at du bruker en filbane som kontoen din har rettigheter til å skrive på, og at du har nok diskplass tilgjengelig."
+WarnWindowsDefender="Hvis Windows 10 Ransomvare-beskyttelse er aktivert, kan dette medføre denne feilen. Forsøk å deaktivere kontrollert mappetilgang i Windows-instillingen Sikkerhet > Virus- og Trusselbeskyttelse."
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini
Changed
FFmpegOutput="Wyjście FFmpeg"
FFmpegAAC="Domyślny enkoder AAC w FFmpeg"
FFmpegOpus="Enkoder FFmpeg Opus"
-Bitrate="Przepływność bitowa"
+Bitrate="Przepływność (bitrate)"
MaxBitrate="Maksymalna przepływność (bitrate)"
Preset="Profil ustawień"
RateControl="Typ przepływności"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini
Changed
Advanced="Avançado"
RestartWhenActivated="Reiniciar reprodução quando a fonte se tornar ativa"
CloseFileWhenInactive="Fechar arquivo quando inativo"
-CloseFileWhenInactive.ToolTip="Fechar o arquivo quando a fonte não estiver sendo exibida na transmissão\n ou gravação. Isto permite alterar o arquivo quando a fonte não está ativa,\nmas pode ter algum atraso de inicialização quando a fonte for reativada."
+CloseFileWhenInactive.ToolTip="Fechar o arquivo quando a fonte não estiver sendo exibida na transmissão\n ou gravação. Isto permite alterar o arquivo quando a fonte não está ativa,\nmas pode ter algum atraso de inicialização quando a fonte for reativada."
ColorRange="Intervalo de Cores YUV"
ColorRange.Auto="Auto"
ColorRange.Partial="Parcial"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini
Changed
Looping="Buclă"
Input="Intrare"
InputFormat="Format de intrare"
+BufferingMB="Zonă tampon pentru rețea (MB)"
HardwareDecode="Folosește decodarea hardware când este disponibilă"
Advanced="Avansat"
RestartWhenActivated="Repornește redarea când sursa devine activă"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini
Changed
NVENC.Preset.ll="Düşük Gecikme"
NVENC.Preset.llhq="Düşük Gecikme, Düşük Kalite"
NVENC.Preset.llhp="Düşük Gecikme, Düşük Performans"
+NVENC.PsychoVisualTuning.ToolTip="Bit hızı kullanımını, arttırılmış algılanan görsel kalite için optimize eden ayarları etkinleştirir,\nÖzellikle yüksek haraketli durumlarda, arttırılmış GPU kullanımı pahasına."
FFmpegSource="Ortam Kaynağı"
LocalFile="Yerel Dosya"
HelperProcessFailed="Kayıt yardımcısı işlemi başlatılamadı. OBS dosyalarının herhangi bir 3. taraf antivirüs / güvenlik yazılımı tarafından engellenmediğini veya kaldırılmadığını kontrol edin."
UnableToWritePath="%1 yazılamadı. Kullanıcı hesabınızın yazmasına izin verilen bir kayıt konumu kullanıyor olduğunuzdan ve yeterli disk alanı olduğundan emin olun."
+WarnWindowsDefender="Eğer Windows 10 Fidye Virüsü koruması etkinse bu hataya neden olabilir. Windows Güvenlik / Virüs & tehdit koruması ayarlarından kontrollü klasör erişimini kapatmayı dene."
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini
Changed
InputFormat="Вхідний формат"
BufferingMB="Буферизація мережевого контенту (МБ)"
HardwareDecode="Використовувати апаратне декодування, за наявності"
+ClearOnMediaEnd="Не показувати джерело, коли відтворення завершено"
Advanced="Розширені параметри"
RestartWhenActivated="Грати з початку, коли джерело стає активним"
CloseFileWhenInactive="Закрити файл, коли неактивен"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini
Changed
FFmpegOutput="FFmpeg đầu ra"
FFmpegAAC="FFmpeg AAC Encoder mặc định"
Bitrate="Bitrate"
+MaxBitrate="'Tốc độ bit' tối đa"
Preset="Mẫu thiết lập"
RateControl="Cách kiểm soát bitrate"
KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
NVENC.Use2Pass="Sử dụng 2-Pass Encoding"
+NVENC.Preset.default="Hiệu suất"
+NVENC.Preset.hq="Chất lượng"
+NVENC.Preset.hp="Hiệu suất tối đa"
+NVENC.Preset.mq="Chất lượng tối đa"
NVENC.Preset.ll="Độ trễ thấp"
+NVENC.Preset.llhq="Chất lượng \"độ trễ thấp\""
+NVENC.Preset.llhp="Hiệu suất \"độ trễ thấp\""
FFmpegSource="Nguồn media"
LocalFile="Tập tin cục bộ"
MediaFileFilter.AllFiles="Tất cả tập tin"
ReplayBuffer="Replay Buffer"
+ReplayBuffer.Save="Lưu bản phát lại"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini
Changed
NVENC.Preset.ll="低延迟"
NVENC.Preset.llhq="低延迟质量"
NVENC.Preset.llhp="低延迟性能"
-NVENC.LookAhead="超前控制"
-NVENC.LookAhead.ToolTip="启用动态B帧。\n\n如果禁用,编码器将始终使用“最大B帧”设置中指定的B帧数。\n\n如果启用,它将仅通过使用尽可能多的B帧来提高视觉质量,直到最大,\n但以增加 GPU 利用率为代价。"
+NVENC.LookAhead="前向考虑"
+NVENC.LookAhead.ToolTip="启用动态B帧。\n\n如果禁用,编码器将始终使用“最大B帧”设置中指定的B帧数。\n\n如果启用,它将通过仅使用足够多的B帧来提高视觉质量,直到最大,\n但以增加 GPU 使用率为代价。"
NVENC.PsychoVisualTuning="心理视觉调整"
-NVENC.PsychoVisualTuning.ToolTip="启用优化比特率使用的编码器设置,以提高感知的视觉质量,\n特别是在高运动的情况下,以提高 GPU 利用率为代价。"
+NVENC.PsychoVisualTuning.ToolTip="启用编码器设置以优化比特率使用,以提高 GPU 使用率为代价,\n可在快速运动场景下提高人眼感知的视频质量。"
NVENC.CQLevel="CQ 级别"
FFmpegSource="媒体源"
Advanced="高级"
RestartWhenActivated="当源变为活动状态时重新启动播放"
CloseFileWhenInactive="非活跃状态时关闭文件"
-CloseFileWhenInactive.ToolTip="当源没有被用以串流或录像时关闭文件。\n这允许当源不被使用时能更改文件,但在\n重新启动源时可能会有些许的启动延迟。"
+CloseFileWhenInactive.ToolTip="当源没有被用以串流或录像时关闭文件。\n这允许在源未被使用时更改文件,\n但在重新启动源时可能会有些许的启动延迟。"
ColorRange="YUV 颜色范围"
ColorRange.Auto="自动"
ColorRange.Partial="局部"
ReplayBuffer="回放缓存"
ReplayBuffer.Save="保存回放"
-HelperProcessFailed="无法启动录音助手进程。检查 OBS 文件未被任何第三方防病毒 / 安全软件阻止或删除。"
-UnableToWritePath="无法写入到 %1。请确保您使用的录制路径您的用户帐户允许写入,并有足够的磁盘空间。"
-WarnWindowsDefender="Windows 10的勒索软件防护机制也可能会导致该错误的发生。请尝试关闭Windows安全/病毒与威胁防护设置中的受控资料夹的访问。"
+HelperProcessFailed="无法启动录制助手进程。检查 OBS 文件未被任何第三方防病毒 / 安全软件阻止或删除。"
+UnableToWritePath="无法写入到 %1。请确保您使用的录像路径允许您的用户帐户写入,并且磁盘空间充足。"
+WarnWindowsDefender="Windows 10 的勒索软件防护机制也可能导致该错误的发生。请尝试关闭 Windows 安全中心 - 勒索软件防护中的文件夹限制访问。"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini
Changed
NVENC.Preset.llhq="低延遲品質"
NVENC.Preset.llhp="低延遲效能"
NVENC.LookAhead="編碼緩衝預測"
+NVENC.LookAhead.ToolTip="啟用動態B幀。 \n\n如果禁用,編碼器將始終使用“最大B幀”設置中指定的B幀數。 \n\n如果啟用,它將僅通過使用盡可能多的B幀來提高視覺品質,直到最大,\n但以增加 GPU 使用率為代價。"
NVENC.PsychoVisualTuning="心理視覺調整"
+NVENC.PsychoVisualTuning.ToolTip="啟用優化比特率使用的編碼器設置,以提高感知的視覺品質,\n特別是在高運動的情況下,以提高 GPU 使用率為代價。"
NVENC.CQLevel="固定量化等級"
FFmpegSource="媒體來源"
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/CMakeLists.txt
Changed
-project(ffmpeg-mux)
+project(obs-ffmpeg-mux)
find_package(FFmpeg REQUIRED
COMPONENTS avcodec avutil avformat)
include_directories(${FFMPEG_INCLUDE_DIRS})
-set(ffmpeg-mux_SOURCES
+set(obs-ffmpeg-mux_SOURCES
ffmpeg-mux.c)
-set(ffmpeg-mux_HEADERS
+set(obs-ffmpeg-mux_HEADERS
ffmpeg-mux.h)
-add_executable(ffmpeg-mux
- ${ffmpeg-mux_SOURCES}
- ${ffmpeg-mux_HEADERS})
+add_executable(obs-ffmpeg-mux
+ ${obs-ffmpeg-mux_SOURCES}
+ ${obs-ffmpeg-mux_HEADERS})
-target_link_libraries(ffmpeg-mux
+target_link_libraries(obs-ffmpeg-mux
${FFMPEG_LIBRARIES})
-if(WIN32)
- set_target_properties(ffmpeg-mux
- PROPERTIES
- OUTPUT_NAME "ffmpeg-mux${_output_suffix}")
-endif()
-
-install_obs_datatarget(ffmpeg-mux "obs-plugins/obs-ffmpeg")
+install_obs_core(obs-ffmpeg-mux)
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
Changed
AVCodec *codec;
if (!desc) {
- printf("Couldn't find encoder '%s'\n", name);
+ fprintf(stderr, "Couldn't find encoder '%s'\n", name);
return false;
}
codec = avcodec_find_encoder(desc->id);
if (!codec) {
- printf("Couldn't create encoder");
+ fprintf(stderr, "Couldn't create encoder");
return false;
}
*stream = avformat_new_stream(ffm->output, codec);
if (!*stream) {
- printf("Couldn't create stream for encoder '%s'\n", name);
+ fprintf(stderr, "Couldn't create stream for encoder '%s'\n", name);
return false;
}
ret = avio_open(&ffm->output->pb, ffm->params.file,
AVIO_FLAG_WRITE);
if (ret < 0) {
- printf("Couldn't open '%s', %s",
+ fprintf(stderr, "Couldn't open '%s', %s",
ffm->params.file, av_err2str(ret));
return FFM_ERROR;
}
AVDictionary *dict = NULL;
if ((ret = av_dict_parse_string(&dict, ffm->params.muxer_settings,
"=", " ", 0))) {
- printf("Failed to parse muxer settings: %s\n%s",
+ fprintf(stderr, "Failed to parse muxer settings: %s\n%s",
av_err2str(ret), ffm->params.muxer_settings);
av_dict_free(&dict);
ret = avformat_write_header(ffm->output, &dict);
if (ret < 0) {
- printf("Error opening '%s': %s",
+ fprintf(stderr, "Error opening '%s': %s",
ffm->params.file, av_err2str(ret));
av_dict_free(&dict);
output_format = av_guess_format(NULL, ffm->params.file, NULL);
if (output_format == NULL) {
- printf("Couldn't find an appropriate muxer for '%s'\n",
+ fprintf(stderr, "Couldn't find an appropriate muxer for '%s'\n",
ffm->params.file);
return FFM_ERROR;
}
ret = avformat_alloc_output_context2(&ffm->output, output_format,
NULL, NULL);
if (ret < 0) {
- printf("Couldn't initialize output context: %s\n",
+ fprintf(stderr, "Couldn't initialize output context: %s\n",
av_err2str(ret));
return FFM_ERROR;
}
ret = ffmpeg_mux_init(&ffm, argc, argv);
if (ret != FFM_SUCCESS) {
- puts("Couldn't initialize muxer");
+ fprintf(stderr, "Couldn't initialize muxer\n");
return ret;
}
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c
Changed
/* subtract bframe delay from dts */
if (enc->bframes)
- dts--;
+ dts -= packet->timebase_num;
*received_packet = true;
packet->data = enc->packet_data.array;
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c
Changed
}
#ifdef _WIN32
-#ifdef _WIN64
-#define FFMPEG_MUX "ffmpeg-mux64.exe"
+#define FFMPEG_MUX "obs-ffmpeg-mux.exe"
#else
-#define FFMPEG_MUX "ffmpeg-mux32.exe"
-#endif
-#else
-#define FFMPEG_MUX "ffmpeg-mux"
+#define FFMPEG_MUX "obs-ffmpeg-mux"
#endif
static inline bool capturing(struct ffmpeg_muxer *stream)
num_tracks++;
}
- dstr_init_move_array(cmd, obs_module_file(FFMPEG_MUX));
+ dstr_init_move_array(cmd, os_get_executable_path_ptr(FFMPEG_MUX));
dstr_insert_ch(cmd, 0, '\"');
dstr_cat(cmd, "\" \"");
return true;
}
-static int deactivate(struct ffmpeg_muxer *stream)
+static int deactivate(struct ffmpeg_muxer *stream, int code)
{
int ret = -1;
info("Output of file '%s' stopped", stream->path.array);
}
- if (stopping(stream))
+ if (code) {
+ obs_output_signal_stop(stream->output, code);
+ } else if (stopping(stream)) {
obs_output_end_data_capture(stream->output);
+ }
os_atomic_set_bool(&stream->stopping, false);
return ret;
static void signal_failure(struct ffmpeg_muxer *stream)
{
- int ret = deactivate(stream);
+ char error[1024];
+ int ret;
int code;
+ size_t len;
+
+ len = os_process_pipe_read_err(stream->pipe, (uint8_t *)error,
+ sizeof(error) - 1);
+
+ if (len > 0) {
+ error[len] = 0;
+ warn ("ffmpeg-mux: %s", error);
+ obs_output_set_last_error (stream->output, error);
+ }
+
+ ret = deactivate(stream, 0);
+
switch (ret) {
case FFM_UNSUPPORTED: code = OBS_OUTPUT_UNSUPPORTED; break;
default: code = OBS_OUTPUT_ERROR;
if (!active(stream))
return;
+ /* encoder failure */
+ if (!packet) {
+ deactivate(stream, OBS_OUTPUT_ENCODE_ERROR);
+ return;
+ }
+
if (!stream->sent_headers) {
if (!send_headers(stream))
return;
if (stopping(stream)) {
if (packet->sys_dts_usec >= stream->stop_ts) {
- deactivate(stream);
+ deactivate(stream, 0);
return;
}
}
replay_buffer_mux_thread, stream) == 0;
}
-static void deactivate_replay_buffer(struct ffmpeg_muxer *stream)
+static void deactivate_replay_buffer(struct ffmpeg_muxer *stream, int code)
{
- if (stopping(stream))
+ if (code) {
+ obs_output_signal_stop(stream->output, code);
+ } else if (stopping(stream)) {
obs_output_end_data_capture(stream->output);
+ }
os_atomic_set_bool(&stream->active, false);
os_atomic_set_bool(&stream->sent_headers, false);
if (!active(stream))
return;
+ /* encoder failure */
+ if (!packet) {
+ deactivate_replay_buffer(stream, OBS_OUTPUT_ENCODE_ERROR);
+ return;
+ }
+
if (stopping(stream)) {
if (packet->sys_dts_usec >= stream->stop_ts) {
- deactivate_replay_buffer(stream);
+ deactivate_replay_buffer(stream, 0);
return;
}
}
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
Changed
obs_property_set_modified_callback(p, rate_control_modified);
- obs_properties_add_int(props, "bitrate",
+ p = obs_properties_add_int(props, "bitrate",
obs_module_text("Bitrate"), 50, 300000, 50);
- obs_properties_add_int(props, "max_bitrate",
+ obs_property_int_set_suffix(p, " Kbps");
+ p = obs_properties_add_int(props, "max_bitrate",
obs_module_text("MaxBitrate"), 50, 300000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
obs_properties_add_int(props, "cqp", obs_module_text("NVENC.CQLevel"),
1, 30, 1);
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c
Changed
struct ffmpeg_cfg config;
bool initialized;
+
+ char *last_error;
};
struct ffmpeg_output {
/* ------------------------------------------------------------------------- */
+static void ffmpeg_output_set_last_error(struct ffmpeg_data *data,
+ const char *error)
+{
+ if (data->last_error)
+ bfree(data->last_error);
+
+ data->last_error = bstrdup(error);
+}
+
+void ffmpeg_log_error(int log_level, struct ffmpeg_data *data,
+ const char *format, ...)
+{
+ va_list args;
+ char out[4096];
+
+ va_start(args, format);
+ vsnprintf(out, sizeof(out), format, args);
+ va_end(args);
+
+ ffmpeg_output_set_last_error(data, out);
+
+ blog(log_level, "%s", out);
+}
+
static bool new_stream(struct ffmpeg_data *data, AVStream **stream,
AVCodec **codec, enum AVCodecID id, const char *name)
{
avcodec_find_encoder(id);
if (!*codec) {
- blog(LOG_WARNING, "Couldn't find encoder '%s'",
+ ffmpeg_log_error(LOG_WARNING, data, "Couldn't find encoder '%s'",
avcodec_get_name(id));
return false;
}
*stream = avformat_new_stream(data->output, *codec);
if (!*stream) {
- blog(LOG_WARNING, "Couldn't create stream for encoder '%s'",
+ ffmpeg_log_error(LOG_WARNING, data, "Couldn't create stream for encoder '%s'",
avcodec_get_name(id));
return false;
}
ret = avcodec_open2(context, data->vcodec, NULL);
if (ret < 0) {
- blog(LOG_WARNING, "Failed to open video codec: %s",
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to open video codec: %s",
av_err2str(ret));
return false;
}
data->vframe = av_frame_alloc();
if (!data->vframe) {
- blog(LOG_WARNING, "Failed to allocate video frame");
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to allocate video frame");
return false;
}
ret = av_frame_get_buffer(data->vframe, base_get_alignment());
if (ret < 0) {
- blog(LOG_WARNING, "Failed to allocate vframe: %s",
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to allocate vframe: %s",
av_err2str(ret));
return false;
}
SWS_BICUBIC, NULL, NULL, NULL);
if (!data->swscale) {
- blog(LOG_WARNING, "Could not initialize swscale");
+ ffmpeg_log_error(LOG_WARNING, data, "Could not initialize swscale");
return false;
}
struct obs_video_info ovi;
if (!obs_get_video_info(&ovi)) {
- blog(LOG_WARNING, "No active video");
+ ffmpeg_log_error(LOG_WARNING, data, "No active video");
return false;
}
data->aframe[idx] = av_frame_alloc();
if (!data->aframe[idx]) {
- blog(LOG_WARNING, "Failed to allocate audio frame");
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to allocate audio frame");
return false;
}
ret = avcodec_open2(context, data->acodec, NULL);
if (ret < 0) {
- blog(LOG_WARNING, "Failed to open audio codec: %s",
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to open audio codec: %s",
av_err2str(ret));
return false;
}
ret = av_samples_alloc(data->samples[idx], NULL, context->channels,
data->frame_size, context->sample_fmt, 0);
if (ret < 0) {
- blog(LOG_WARNING, "Failed to create audio buffer: %s",
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to create audio buffer: %s",
av_err2str(ret));
return false;
}
struct obs_audio_info aoi;
if (!obs_get_audio_info(&aoi)) {
- blog(LOG_WARNING, "No active audio");
+ ffmpeg_log_error(LOG_WARNING, data, "No active audio");
return false;
}
AVDictionary *dict = NULL;
if ((ret = av_dict_parse_string(&dict, data->config.muxer_settings,
"=", " ", 0))) {
- blog(LOG_WARNING, "Failed to parse muxer settings: %s\n%s",
+ ffmpeg_log_error(LOG_WARNING, data, "Failed to parse muxer settings: %s\n%s",
av_err2str(ret), data->config.muxer_settings);
av_dict_free(&dict);
ret = avio_open2(&data->output->pb, data->config.url,
AVIO_FLAG_WRITE, NULL, &dict);
if (ret < 0) {
- blog(LOG_WARNING, "Couldn't open '%s', %s",
- data->config.url, av_err2str(ret));
+ ffmpeg_log_error(LOG_WARNING, data,
+ "Couldn't open '%s', %s", data->config.url,
+ av_err2str(ret));
av_dict_free(&dict);
return false;
}
ret = avformat_write_header(data->output, &dict);
if (ret < 0) {
- blog(LOG_WARNING, "Error opening '%s': %s",
+ ffmpeg_log_error(LOG_WARNING, data, "Error opening '%s': %s",
data->config.url, av_err2str(ret));
return false;
}
avformat_free_context(data->output);
}
+ if (data->last_error)
+ bfree(data->last_error);
+
memset(data, 0, sizeof(struct ffmpeg_data));
}
is_rtmp ? NULL : data->config.format_mime_type);
if (output_format == NULL) {
- blog(LOG_WARNING, "Couldn't find matching output format with "
- " parameters: name=%s, url=%s, mime=%s",
- safe_str(is_rtmp ?
- "flv" : data->config.format_name),
- safe_str(data->config.url),
- safe_str(is_rtmp ?
- NULL : data->config.format_mime_type));
+ ffmpeg_log_error(LOG_WARNING, data,
+ "Couldn't find matching output format with "
+ "parameters: name=%s, url=%s, mime=%s",
+ safe_str(is_rtmp ?
+ "flv" : data->config.format_name),
+ safe_str(data->config.url),
+ safe_str(is_rtmp ?
+ NULL : data->config.format_mime_type));
+
goto fail;
}
NULL, NULL);
if (!data->output) {
- blog(LOG_WARNING, "Couldn't create avformat context");
+ ffmpeg_log_error(LOG_WARNING, data,
+ "Couldn't create avformat context");
goto fail;
}
fail:
blog(LOG_WARNING, "ffmpeg_data_init failed");
- ffmpeg_data_free(data);
return false;
}
if (ret < 0) {
blog(LOG_WARNING, "receive_video: Error encoding "
"video: %s", av_err2str(ret));
+ //FIXME: stop the encode with an error
return;
}
if (ret != 0) {
blog(LOG_WARNING, "receive_video: Error writing video: %s",
av_err2str(ret));
+ //FIXME: stop the encode with an error
}
data->total_frames++;
if (ret < 0) {
blog(LOG_WARNING, "encode_audio: avcodec_fill_audio_frame "
"failed: %s", av_err2str(ret));
+ //FIXME: stop the encode with an error
return;
}
if (ret < 0) {
blog(LOG_WARNING, "encode_audio: Error encoding audio: %s",
av_err2str(ret));
+ //FIXME: stop the encode with an error
return;
}
ret = av_interleaved_write_frame(output->ff_data.output, &packet);
if (ret < 0) {
av_free_packet(&packet);
- blog(LOG_WARNING, "receive_audio: Error writing packet: %s",
- av_err2str(ret));
+ ffmpeg_log_error(LOG_WARNING, &output->ff_data,
+ "receive_audio: Error writing packet: %s",
+ av_err2str(ret));
return ret;
}
success = ffmpeg_data_init(&output->ff_data, &config);
obs_data_release(settings);
- if (!success)
+ if (!success) {
+ if (output->ff_data.last_error) {
+ obs_output_set_last_error(output->output,
+ output->ff_data.last_error);
+ }
+ ffmpeg_data_free(&output->ff_data);
return false;
+ }
struct audio_convert_info aci = {
.format = output->ff_data.audio_format
ret = pthread_create(&output->write_thread, NULL, write_thread, output);
if (ret != 0) {
- blog(LOG_WARNING, "ffmpeg_output_start: failed to create write "
- "thread.");
+ ffmpeg_log_error(LOG_WARNING, &output->ff_data,
+ "ffmpeg_output_start: failed to create write "
+ "thread.");
ffmpeg_output_full_stop(output);
return false;
}
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c
Changed
obs_properties_add_bool(props, "restart_on_activate",
obs_module_text("RestartWhenActivated"));
+ obs_properties_add_int_slider(props, "buffering_mb",
+ obs_module_text("BufferingMB"),
+ 1, 16, 1);
+
obs_properties_add_text(props, "input",
obs_module_text("Input"), OBS_TEXT_DEFAULT);
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c
Changed
enc->context->max_b_frames = bf;
enc->context->level = level;
enc->context->bit_rate = bitrate * 1000;
+ enc->context->rc_max_rate = bitrate * 1000;
enc->context->width = obs_encoder_get_width(enc->encoder);
enc->context->height = obs_encoder_get_height(enc->encoder);
list = obs_properties_add_list(props, "vaapi_device", "VAAPI Device",
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
- char path[128] = "/dev/dri/renderD1";
+ char path[32] = "/dev/dri/renderD1";
for (int i = 28;; i++) {
sprintf(path, "/dev/dri/renderD1%d", i);
if (access(path, F_OK) == 0) {
obs_property_list_add_int(list, "720p60/1080p30 (4.1)", 41);
obs_property_list_add_int(list, "1080p60 (4.2)", 42);
- obs_properties_add_int(props, "bitrate", obs_module_text("Bitrate"), 0,
+ obs_property_t *p;
+ p = obs_properties_add_int(props, "bitrate", obs_module_text("Bitrate"), 0,
300000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
obs_properties_add_int(props, "keyint_sec",
obs_module_text("Keyframe Interval (seconds)"), 0, 20,
obs-studio-23.1.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c -> obs-studio-23.2.0.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c
Changed
cleanup:
if (lib)
os_dlclose(lib);
+#if defined(_WIN32)
finish:
+#endif
profile_end(nvenc_check_name);
return success;
}
obs-studio-23.1.0.tar.xz/plugins/obs-filters/CMakeLists.txt -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/CMakeLists.txt
Changed
invert-audio-polarity.c
compressor-filter.c
limiter-filter.c
- expander-filter.c)
+ expander-filter.c
+ luma-key-filter.c)
add_library(obs-filters MODULE
${obs-filters_SOURCES}
obs-studio-23.1.0.tar.xz/plugins/obs-filters/chroma-key-filter.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/chroma-key-filter.c
Changed
gs_eparam_t *pixel_size_param;
gs_eparam_t *chroma_param;
- gs_eparam_t *key_rgb_param;
gs_eparam_t *similarity_param;
gs_eparam_t *smoothness_param;
gs_eparam_t *spill_param;
float brightness;
float gamma;
- struct vec4 key_rgb;
struct vec2 chroma;
float similarity;
float smoothness;
SETTING_KEY_COLOR);
const char *key_type = obs_data_get_string(settings,
SETTING_COLOR_TYPE);
+ struct vec4 key_rgb;
struct vec4 key_color_v4;
struct matrix4 yuv_mat_m4;
else if (strcmp(key_type, "magenta") == 0)
key_color = 0xFF00FF;
- vec4_from_rgba(&filter->key_rgb, key_color | 0xFF000000);
+ vec4_from_rgba(&key_rgb, key_color | 0xFF000000);
memcpy(&yuv_mat_m4, yuv_mat, sizeof(yuv_mat));
- vec4_transform(&key_color_v4, &filter->key_rgb, &yuv_mat_m4);
+ vec4_transform(&key_color_v4, &key_rgb, &yuv_mat_m4);
vec2_set(&filter->chroma, key_color_v4.y, key_color_v4.z);
filter->similarity = (float)similarity / 1000.0f;
filter->effect, "gamma");
filter->chroma_param = gs_effect_get_param_by_name(
filter->effect, "chroma_key");
- filter->key_rgb_param = gs_effect_get_param_by_name(
- filter->effect, "key_rgb");
filter->pixel_size_param = gs_effect_get_param_by_name(
filter->effect, "pixel_size");
filter->similarity_param = gs_effect_get_param_by_name(
gs_effect_set_float(filter->brightness_param, filter->brightness);
gs_effect_set_float(filter->gamma_param, filter->gamma);
gs_effect_set_vec2(filter->chroma_param, &filter->chroma);
- gs_effect_set_vec4(filter->key_rgb_param, &filter->key_rgb);
gs_effect_set_vec2(filter->pixel_size_param, &pixel_size);
gs_effect_set_float(filter->similarity_param, filter->similarity);
gs_effect_set_float(filter->smoothness_param, filter->smoothness);
obs_properties_add_int_slider(props, SETTING_SPILL,
TEXT_SPILL, 1, 1000, 1);
- obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
+ obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
+ 0, 100, 1);
obs_properties_add_float_slider(props, SETTING_CONTRAST,
TEXT_CONTRAST, -1.0, 1.0, 0.01);
obs_properties_add_float_slider(props, SETTING_BRIGHTNESS,
obs-studio-23.1.0.tar.xz/plugins/obs-filters/color-key-filter.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/color-key-filter.c
Changed
obs_properties_add_int_slider(props, SETTING_SMOOTHNESS,
TEXT_SMOOTHNESS, 1, 1000, 1);
- obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
+ obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
+ 0, 100, 1);
obs_properties_add_float_slider(props, SETTING_CONTRAST,
TEXT_CONTRAST, -1.0, 1.0, 0.01);
obs_properties_add_float_slider(props, SETTING_BRIGHTNESS,
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/chroma_key_filter.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/chroma_key_filter.effect
Changed
uniform float gamma;
uniform float2 chroma_key;
-uniform float4 key_rgb;
uniform float2 pixel_size;
uniform float similarity;
uniform float smoothness;
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/color_key_filter.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/color_key_filter.effect
Changed
float4 ProcessColorKey(float4 rgba, VertData v_in)
{
float colorDist = GetColorDist(rgba.rgb);
- float baseMask = colorDist - similarity;
rgba.a *= saturate(max(colorDist - similarity, 0.0) / smoothness);
return CalcColor(rgba);
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ca-ES.ini
Changed
Expander.Presets="Predefinits"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Porta"
+LumaKeyFilter="Clau Luma"
+Luma.LumaMax="Màx. Luma"
+Luma.LumaMin="Mín. Luma"
+Luma.LumaMaxSmooth="Suavitzat màx. Luma"
+Luma.LumaMinSmooth="Suavitzat mín. Luma"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini
Changed
Expander.Presets="Předvolby"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Brána"
+LumaKeyFilter="Luma klíč"
+Luma.LumaMax="Luma maximum"
+Luma.LumaMin="Luma minimum"
+Luma.LumaMaxSmooth="Luma maximální vyhlazení"
+Luma.LumaMinSmooth="Luma minimální vyhlazení"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/da-DK.ini
Changed
ColorFilter="Farvekorrektion"
ColorGradeFilter="Anvend LUT"
-MaskFilter="Billede maske/blanding"
-AsyncDelayFilter="Video forsinkelse (asynkron)"
+MaskFilter="Billedmaskering/-blanding"
+AsyncDelayFilter="Videoforsinkelse (asynkron)"
CropFilter="Beskæring/Polstring"
ScrollFilter="Rul"
-ChromaKeyFilter="Chroma nøgle"
+ChromaKeyFilter="Chroma-nøgle"
ColorKeyFilter="Farvenøgle"
SharpnessFilter="Skarphed"
ScaleFilter="Skalering/Formatforhold"
Gain="Forstærkning"
DelayMs="Forsinkelse (millisekunder)"
Type="Type"
-MaskBlendType.MaskColor="Alpha maske (farvekanal)"
-MaskBlendType.MaskAlpha="Alpha maske (Alpha kanal)"
-MaskBlendType.BlendMultiply="Blend (formere)"
-MaskBlendType.BlendAddition="Blanding (tilføjelse)"
-MaskBlendType.BlendSubtraction="Blanding (subtraktion)"
+MaskBlendType.MaskColor="Alpha-maske (farvekanal)"
+MaskBlendType.MaskAlpha="Alpha-maske (Alpha-kanal)"
+MaskBlendType.BlendMultiply="Bland (formere)"
+MaskBlendType.BlendAddition="Bland (tilføjelse)"
+MaskBlendType.BlendSubtraction="Bland (subtraktion)"
Path="Sti"
Color="Farve"
Opacity="Gennemsigtighed"
Gamma="Gamma"
BrowsePath.Images="Alle billedfiler"
BrowsePath.AllFiles="Alle filer"
-KeyColorType="Nøglefarve type"
-KeyColor="Nøglefarven"
-Similarity="Lighed (1-1000)"
-Smoothness="Glathed (1-1000)"
-ColorSpillReduction="Nøglefarve udslipsreduktion (1-1000)"
+KeyColorType="Nøglefarvetype"
+KeyColor="Nøglefarve"
+Similarity="Lighed (1-1.000)"
+Smoothness="Glathed (1-1.000)"
+ColorSpillReduction="Nøglefarve udslipsreduktion (1-1.000)"
Crop.Left="Venstre"
Crop.Right="Højre"
Crop.Top="Top"
ScrollFilter.SpeedY="Vertikal hastighed"
ScrollFilter.LimitWidth="Begræns bredde"
ScrollFilter.LimitHeight="Begræns højde"
-CustomColor="Brugerdefineret farve"
+CustomColor="Tilpasset farve"
Red="Rød"
Green="Grøn"
Blue="Blå"
Magenta="Magenta"
-NoiseGate.OpenThreshold="Åbne-tærskel (dB)"
-NoiseGate.CloseThreshold="Lukke-tærskel (dB)"
-NoiseGate.AttackTime="Effektueringstid (millisek.)"
+NoiseGate.OpenThreshold="Åbningstærskel (dB)"
+NoiseGate.CloseThreshold="Lukningstærskel (dB)"
+NoiseGate.AttackTime="Responstid (millisek.)"
NoiseGate.HoldTime="Holdetid (millisek.)"
NoiseGate.ReleaseTime="Frigivelsestid (millisek.)"
Gain.GainDB="Forstærkning (dB)"
-StretchImage="Stræk billedet (ignorer størrelsesforhold)"
+StretchImage="Stræk billede (ignorér størrelsesforhold)"
Resolution="Opløsning"
Base.Canvas="Grundopløsning (lærred)"
None="Ingen"
Compressor="Kompressor"
Compressor.Ratio="Forhold (X:1)"
Compressor.Threshold="Grænse (dB)"
-Compressor.AttackTime="Attack (ms)"
-Compressor.ReleaseTime="Release (ms)"
-Compressor.OutputGain="Output øgning (dB)"
-Compressor.SidechainSource="Sidechain/Ducking-kilde"
+Compressor.AttackTime="Responstid (ms)"
+Compressor.ReleaseTime="Frigivelse (ms)"
+Compressor.OutputGain="Outputforstærkning (dB)"
+Compressor.SidechainSource="Sidechain-/Ducking-kilde"
Limiter="Begrænser"
Limiter.Threshold="Grænse (dB)"
Limiter.ReleaseTime="Frigivelse (ms)"
Expander.Threshold="Grænse (dB)"
Expander.AttackTime="Responstid (ms)"
Expander.ReleaseTime="Frigivelse (ms)"
-Expander.OutputGain="Udgangsforstærkning (dB)"
+Expander.OutputGain="Outputforstærkning (dB)"
Expander.Detector="Detektering"
Expander.RMS="RMS"
Expander.Peak="Spids"
Expander.None="Ingen"
Expander.Presets="Forvalg"
Expander.Presets.Expander="Expander"
-Expander.Presets.Gate="Port"
+Expander.Presets.Gate="Gate"
+LumaKeyFilter="Luma Key"
+Luma.LumaMax="Luma maks."
+Luma.LumaMin="Luma min."
+Luma.LumaMaxSmooth="Luma maks. glidende"
+Luma.LumaMinSmooth="Luma min. glidende"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/de-DE.ini
Changed
ColorFilter="Farbkorrektur"
ColorGradeFilter="LUT anwenden"
-MaskFilter="Bild Maske/Blend"
+MaskFilter="Bildmaske/-Vermischung"
AsyncDelayFilter="Videoverzögerung (Asynchron)"
CropFilter="Zuschneiden/Pad"
ScrollFilter="Bewegung"
ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Color Key"
-SharpnessFilter="Schärfen"
+SharpnessFilter="Schärfung"
ScaleFilter="Skalierung/Seitenverhältnis"
GPUDelayFilter="Renderverzögerung"
-UndistortCenter="Entzerre Mitte des Bildes bei der Skalierung von Ultraweitwinkel"
+UndistortCenter="Mitte des Bildes bei der Skalierung von Ultraweitwinkel entzerren"
NoiseGate="Noise Gate"
NoiseSuppress="Rauschunterdrückung"
InvertPolarity="Audiopolarität umkehren"
MaskBlendType.MaskColor="Alphamaske (Farbkanal)"
MaskBlendType.MaskAlpha="Alphamaske (Alphakanal)"
MaskBlendType.BlendMultiply="Blend (Multiplizieren)"
-MaskBlendType.BlendAddition="Blend (Addition)"
-MaskBlendType.BlendSubtraction="Blend (Subtraktion)"
+MaskBlendType.BlendAddition="Blend (Addieren)"
+MaskBlendType.BlendSubtraction="Blend (Subtrahieren)"
Path="Pfad"
Color="Farbe"
Opacity="Deckkraft"
Gamma="Gamma"
BrowsePath.Images="Alle Bilddateien"
BrowsePath.AllFiles="Alle Dateien"
-KeyColorType="Key-Farbe-Typ"
+KeyColorType="Key-Farbtyp"
KeyColor="Key-Farbe"
-Similarity="Ähnlichkeit (1-1000)"
-Smoothness="Glätte (1-1000)"
-ColorSpillReduction="Key-Farbe Spill Reduktion (1-1000)"
+Similarity="Ähnlichkeit (1 — 1000)"
+Smoothness="Glätte (1 — 1000)"
+ColorSpillReduction="Key-Farbe-Spill-Reduzierung (1 — 1000)"
Crop.Left="Links"
Crop.Right="Rechts"
Crop.Top="Oben"
Compressor.AttackTime="Angriff (ms)"
Compressor.ReleaseTime="Abfallzeit (ms)"
Compressor.OutputGain="Ausgangspegel (dB)"
-Compressor.SidechainSource="Sidechain/Ducking Quelle"
+Compressor.SidechainSource="Sidechain-/Ducking-Quelle"
Limiter="Begrenzer"
Limiter.Threshold="Schwellenwert (dB)"
Limiter.ReleaseTime="Abfallzeit (ms)"
Expander.Presets="Voreinstellungen"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Gate"
+LumaKeyFilter="Luma-Key"
+Luma.LumaMax="Max. Luma"
+Luma.LumaMin="Min. Luma"
+Luma.LumaMaxSmooth="Max. Luma-Glätte"
+Luma.LumaMinSmooth="Min. Luma-Glätte"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/en-US.ini
Changed
Expander.Presets="Presets"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Gate"
+LumaKeyFilter="Luma Key"
+Luma.LumaMax="Luma Max"
+Luma.LumaMin="Luma Min"
+Luma.LumaMaxSmooth="Luma Max Smooth"
+Luma.LumaMinSmooth="Luma Min Smooth"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/es-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/es-ES.ini
Changed
Crop.Height="Alto"
Crop.Relative="Relativo"
ScrollFilter.SpeedX="Velocidad Horizontal"
-ScrollFilter.SpeedY="VElocidad Vertical"
+ScrollFilter.SpeedY="Velocidad Vertical"
ScrollFilter.LimitWidth="Limitar el ancho"
ScrollFilter.LimitHeight="Limitar la altura"
CustomColor="Color Personalizado"
Expander.Presets="Pre-ajustes"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Puerta"
+LumaKeyFilter="Clave Luma"
+Luma.LumaMax="Máx. Luma"
+Luma.LumaMin="Min. Luma"
+Luma.LumaMaxSmooth="Suavizado Máximo Luma"
+Luma.LumaMinSmooth="Suavizado Mínimo Luma"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini
Changed
Expander.Presets="Aurrez ezarritakoak"
Expander.Presets.Expander="Deskonprimagailua"
Expander.Presets.Gate="Atea"
+LumaKeyFilter="Luma gakoa"
+Luma.LumaMax="Luma max"
+Luma.LumaMin="Luma min"
+Luma.LumaMaxSmooth="Luma leuntasun max"
+Luma.LumaMinSmooth="Luma leuntasun min"
obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/fa-IR.ini
Added
+ColorFilter="اصلاح رنگ"
+ColorGradeFilter="درخواست LUT"
+MaskFilter="تصویر ماسک/مخلوط"
+ChromaKeyFilter="صحنه کلیدی(کروماکی)"
+ColorKeyFilter="رنگ کلیدی"
+SharpnessFilter="تیزکردن"
+BrowsePath.AllFiles="همه•ی فایل ها"
+KeyColorType="نوع رنگ کلیدی"
+Crop.Left="چپ"
+Crop.Right="راست"
+Crop.Top="بالا"
+Crop.Bottom="پایین"
+Crop.Width="عرض"
+Crop.Height="ارتفاع"
+Red="قرمز"
+Green="سبز"
+ScaleFiltering.Area="ناحیه"
+
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini
Changed
Expander.Presets="Esiasetukset"
Expander.Presets.Expander="Laajentaja"
Expander.Presets.Gate="Gate"
+LumaKeyFilter="Luma-avain"
+Luma.LumaMax="Luma-maksimi"
+Luma.LumaMin="Luma-minimi"
+Luma.LumaMaxSmooth="Luma-maksimin pehmennys"
+Luma.LumaMinSmooth="Luma-minimin pehmennys"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/fr-FR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/fr-FR.ini
Changed
Expander.Presets="Pré-réglages"
Expander.Presets.Expander="Expandeur"
Expander.Presets.Gate="Gate"
+LumaKeyFilter="Incrustation par luminance (Luma Key)"
+Luma.LumaMax="Luminance max."
+Luma.LumaMin="Luminance min."
+Luma.LumaMaxSmooth="Adoucissement luminance max."
+Luma.LumaMinSmooth="Adoucissement luminance min."
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/hu-HU.ini
Changed
Expander.Presets="Készletek"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Kapu"
+LumaKeyFilter="Luma kulcs"
+Luma.LumaMax="Luma maximum"
+Luma.LumaMin="Luma minimum"
+Luma.LumaMaxSmooth="Luma maximum simított"
+Luma.LumaMinSmooth="Luma minimum simított"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/it-IT.ini
Changed
Expander.Presets="Preset"
Expander.Presets.Expander="Espansore"
Expander.Presets.Gate="Sensibilità"
+LumaKeyFilter="Chiave Luma"
+Luma.LumaMax="Luma massima"
+Luma.LumaMin="Luma minima"
+Luma.LumaMaxSmooth="Sfumatura massima di Luma"
+Luma.LumaMinSmooth="Sfumatura minima di Luma"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ja-JP.ini
Changed
Expander.Presets="プリセット"
Expander.Presets.Expander="エキスパンダー"
Expander.Presets.Gate="ゲート"
+LumaKeyFilter="ルマキー"
+Luma.LumaMax="最大輝度"
+Luma.LumaMin="最小輝度"
+Luma.LumaMaxSmooth="ルマ最大スムーズ"
+Luma.LumaMinSmooth="ルマ最小スムーズ"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ka-GE.ini
Changed
Expander.Presets="მზა პარამეტრები"
Expander.Presets.Expander="გამშლელი"
Expander.Presets.Gate="ჩამკეტი"
+LumaKeyFilter="კაშკაშა არეების ჩანაცვლება (Luma Key)"
+Luma.LumaMax="სიკაშკაშის ზედა ზღვარი"
+Luma.LumaMin="სიკაშკაშის ქვედა ზღვარი"
+Luma.LumaMaxSmooth="სიკაშკაშის ზედა ზღვრის სიგლუვე"
+Luma.LumaMinSmooth="სიკაშკაშის ქვედა ზღვრის სიგლუვე"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini
Changed
NoiseGate.CloseThreshold="폐쇄 역치값 (dB)"
NoiseGate.AttackTime="개방 준비 시간 (밀리세컨드)"
NoiseGate.HoldTime="개방 유지 시간 (밀리세컨드)"
-NoiseGate.ReleaseTime="폐쇄 준비 시간 (밀리세컨드)"
+NoiseGate.ReleaseTime="폐쇄 준비 시간 (밀리세컨드)"
Gain.GainDB="증폭 (dB)"
StretchImage="이미지 늘리기 (이미지 가로 세로 비율 포기)"
Resolution="해상도"
Expander.Presets="사전 설정"
Expander.Presets.Expander="확장기"
Expander.Presets.Gate="게이트"
+LumaKeyFilter="루마 키"
+Luma.LumaMax="루마 최대값"
+Luma.LumaMin="루마 최소값"
+Luma.LumaMaxSmooth="루마 스무스 최대값"
+Luma.LumaMinSmooth="루마 스무스 최소값"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini
Changed
ScaleFiltering.Bilinear="Bilineær"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
+ScaleFiltering.Area="Område"
NoiseSuppress.SuppressLevel="Dempelse Nivå (dB)"
Saturation="Metning"
HueShift="Fargetone Skifte"
Compressor.ReleaseTime="Slipp (ms)"
Compressor.OutputGain="Utdataforsterkning (dB)"
Compressor.SidechainSource="Lydduppe-kilde"
+Limiter="Begrenser"
+Limiter.Threshold="Terskel (dB)"
+Limiter.ReleaseTime="Slipp (ms)"
+Expander="Utvider"
+Expander.Ratio="Forhold (X:1)"
+Expander.Threshold="Terskel (dB)"
+Expander.AttackTime="Responstid (ms)"
+Expander.ReleaseTime="Slipp (ms)"
+Expander.OutputGain="Utdataforsterkning (dB)"
+Expander.Detector="Identifisering"
+Expander.RMS="RMS"
+Expander.Peak="Topp"
+Expander.None="Ingen"
+Expander.Presets="Forhåndsinnstillinger"
+Expander.Presets.Expander="Utvider"
+Expander.Presets.Gate="Port"
+LumaKeyFilter="Luma Key"
+Luma.LumaMax="Luma maks."
+Luma.LumaMin="Luma min."
+Luma.LumaMaxSmooth="Luma maks. glidende"
+Luma.LumaMinSmooth="Luma min. glidende"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini
Changed
Expander.Presets="Predefiniowane"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Brama"
+LumaKeyFilter="Kluczowanie luma key"
+Luma.LumaMax="Luma Max"
+Luma.LumaMin="Luma Min"
+Luma.LumaMaxSmooth="Luma wygładzanie max"
+Luma.LumaMinSmooth="Luma wygładzanie min"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini
Changed
Expander.Presets="Predefinições"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Portão"
+LumaKeyFilter="Luma Key"
+Luma.LumaMax="Luminância Máxima"
+Luma.LumaMin="Luminância Mínima"
+Luma.LumaMaxSmooth="Suavização da Luminância Máxima"
+Luma.LumaMinSmooth="Suavização da Luminância Mínima"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ro-RO.ini
Changed
SharpnessFilter="Accentuare"
ScaleFilter="Scalare/Rație Aspect"
NoiseGate="Poartă de zgomot"
+InvertPolarity="Inversează polaritatea"
Gain="Amplificare"
DelayMs="Întârziere (milisecunde)"
Type="Tip"
KeyColorType="Tipul culorii cheie"
KeyColor="Culoare cheie"
Similarity="Similaritate (1-100)"
-Smoothness="Netezire (1-1000)"
+Smoothness="Netezime (1-1000)"
ColorSpillReduction="Reducere pentru devărsarea culorii cheie (1-1000)"
Crop.Left="Stânga"
Crop.Right="Dreapta"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
Saturation="Saturație"
+Compressor="Compresor"
+Compressor.Ratio="Raport (X:1)"
+Compressor.Threshold="Prag (dB)"
+Compressor.AttackTime="Atacare (ms)"
+Compressor.ReleaseTime="Eliberare (ms)"
+Compressor.OutputGain="Amplificare pentru ieșire (dB)"
+Limiter="Limitor"
+Limiter.Threshold="Prag (dB)"
+Limiter.ReleaseTime="Eliberare (ms)"
+Expander.Ratio="Raport (X:1)"
+Expander.Threshold="Prag (dB)"
+Expander.OutputGain="Amplificare pentru ieșire (dB)"
+Expander.Detector="Detectare"
+Expander.RMS="RMS"
+Expander.Peak="Valoare de vârf"
+Expander.None="Niciuna"
+Expander.Presets="Presetări"
+Expander.Presets.Expander="Expandor"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini
Changed
Expander.Presets="Предустановки"
Expander.Presets.Expander="Экспандер"
Expander.Presets.Gate="Гейт"
+LumaKeyFilter="Яркостный ключ"
+Luma.LumaMax="Макс. яркость"
+Luma.LumaMin="Мин. яркость"
+Luma.LumaMaxSmooth="Сглаживание макс. яркости"
+Luma.LumaMinSmooth="Сглаживание мин. яркости"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini
Changed
Expander.Presets="Förinställningar"
Expander.Presets.Expander="Utvidgare"
Expander.Presets.Gate="Port"
+LumaKeyFilter="Ljusstyrkefilter"
+Luma.LumaMax="Maximal ljusstyrka"
+Luma.LumaMin="Minimal ljusstyrka"
+Luma.LumaMaxSmooth="Max. utjämning av ljusstyrka"
+Luma.LumaMinSmooth="Min. utjämning av ljusstyrka"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini
Changed
ScaleFiltering.Bilinear="Білінійний"
ScaleFiltering.Bicubic="Бікубічний"
ScaleFiltering.Lanczos="Ланцош"
+ScaleFiltering.Area="Усереднення площ"
NoiseSuppress.SuppressLevel="Рівень подавлення (дБ)"
Saturation="Насиченість"
HueShift="Відтінок"
Expander.Presets="Шаблони"
Expander.Presets.Expander="Експандер"
Expander.Presets.Gate="Пороговий"
+LumaKeyFilter="Фільтр яскравості"
+Luma.LumaMax="Максимум яскравості"
+Luma.LumaMin="Мінімум яскравості"
+Luma.LumaMaxSmooth="Максимум яскравості припуск"
+Luma.LumaMinSmooth="Мінімум яскравості припуск"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/zh-CN.ini
Changed
Expander.Presets="预设"
Expander.Presets.Expander="扩展效果"
Expander.Presets.Gate="门限"
+LumaKeyFilter="亮度键"
+Luma.LumaMax="最大亮度"
+Luma.LumaMin="最小亮度"
+Luma.LumaMaxSmooth="最大亮度平滑"
+Luma.LumaMinSmooth="最小亮度平滑"
obs-studio-23.1.0.tar.xz/plugins/obs-filters/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/locale/zh-TW.ini
Changed
Expander.Presets="預先設定"
Expander.Presets.Expander="展開特效"
Expander.Presets.Gate="開門特效"
+LumaKeyFilter="亮度鍵"
+Luma.LumaMax="亮度最大值"
+Luma.LumaMin="亮度最小值"
+Luma.LumaMaxSmooth="亮度最大平滑度"
+Luma.LumaMinSmooth="亮度最小平滑度"
obs-studio-23.2.0.tar.xz/plugins/obs-filters/data/luma_key_filter.effect
Added
+uniform float4x4 ViewProj;
+uniform texture2d image;
+
+uniform float lumaMax;
+uniform float lumaMin;
+uniform float lumaMaxSmooth;
+uniform float lumaMinSmooth;
+
+sampler_state textureSampler {
+ Filter = Linear;
+ AddressU = Clamp;
+ AddressV = Clamp;
+};
+
+struct VertData {
+ float4 pos : POSITION;
+ float2 uv : TEXCOORD0;
+};
+
+VertData VSDefault(VertData v_in)
+{
+ VertData vert_out;
+ vert_out.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj);
+ vert_out.uv = v_in.uv;
+ return vert_out;
+}
+
+float4 PSALumaKeyRGBA(VertData v_in) : TARGET
+{
+ float4 rgba = image.Sample(textureSampler, v_in.uv);
+
+ float4 lumaCoef = float4(0.2989, 0.5870, 0.1140, 0.0);
+
+ float luminance = dot(rgba, lumaCoef);
+
+ float clo = smoothstep(lumaMin, lumaMin + lumaMinSmooth, luminance);
+ float chi = 1. - smoothstep(lumaMax - lumaMaxSmooth, lumaMax, luminance);
+
+ float amask = clo * chi;
+
+ return float4(rgba.rgb, amask);
+}
+
+technique Draw
+{
+ pass
+ {
+ vertex_shader = VSDefault(v_in);
+ pixel_shader = PSALumaKeyRGBA(v_in);
+ }
+}
obs-studio-23.1.0.tar.xz/plugins/obs-filters/expander-filter.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/expander-filter.c
Changed
#define TEXT_PRESETS_EXP MT_("expander.Presets.Expander")
#define TEXT_PRESETS_GATE MT_("expander.Presets.Gate")
-#define MIN_RATIO 1.0
-#define MAX_RATIO 20.0
-#define MIN_THRESHOLD_DB -60.0
+#define MIN_RATIO 1.0f
+#define MAX_RATIO 20.0f
+#define MIN_THRESHOLD_DB -60.0f
#define MAX_THRESHOLD_DB 0.0f
-#define MIN_OUTPUT_GAIN_DB -32.0
-#define MAX_OUTPUT_GAIN_DB 32.0
+#define MIN_OUTPUT_GAIN_DB -32.0f
+#define MAX_OUTPUT_GAIN_DB 32.0f
#define MIN_ATK_RLS_MS 1
#define MAX_RLS_MS 1000
#define MAX_ATK_MS 100
static void resize_env_buffer(struct expander_data *cd, size_t len)
{
cd->envelope_buf_len = len;
- for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
- cd->envelope_buf[i] = brealloc(cd->envelope_buf[i], len * sizeof(float));
- }
+ for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
+ cd->envelope_buf[i] = brealloc(cd->envelope_buf[i],
+ cd->envelope_buf_len * sizeof(float));
}
static void resize_runaverage_buffer(struct expander_data *cd, size_t len)
{
cd->runaverage_len = len;
- for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
- cd->runaverage[i] = brealloc(cd->runaverage[i], len * sizeof(float));
- }
+ for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
+ cd->runaverage[i] = brealloc(cd->runaverage[i],
+ cd->runaverage_len * sizeof(float));
}
static void resize_env_in_buffer(struct expander_data *cd, size_t len)
{
cd->env_in_len = len;
- cd->env_in = brealloc(cd->env_in, len * sizeof(float));
+ cd->env_in = brealloc(cd->env_in, cd->env_in_len * sizeof(float));
}
static void resize_gaindB_buffer(struct expander_data *cd, size_t len)
{
cd->gaindB_len = len;
- for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
- cd->gaindB[i] = brealloc(cd->gaindB[i], len * sizeof(float));
- }
+ for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
+ cd->gaindB[i] = brealloc(cd->gaindB[i],
+ cd->gaindB_len * sizeof(float));
}
static inline float gain_coefficient(uint32_t sample_rate, float time)
{
- return (float)exp(-1.0f / (sample_rate * time));
+ return expf(-1.0f / (sample_rate * time));
}
static const char *expander_name(void *unused)
static void analyze_envelope(struct expander_data *cd,
float **samples, const uint32_t num_samples)
{
- if (cd->envelope_buf_len < num_samples) {
+ if (cd->envelope_buf_len < num_samples)
resize_env_buffer(cd, num_samples);
- }
- if (cd->runaverage_len < num_samples) {
+ if (cd->runaverage_len < num_samples)
resize_runaverage_buffer(cd, num_samples);
- }
- if (cd->env_in_len < num_samples) {
+ if (cd->env_in_len < num_samples)
resize_env_in_buffer(cd, num_samples);
- }
// 10 ms RMS window
- const float rmscoef = exp2f((float)-100.0 / (float)cd->sample_rate);
+ const float rmscoef = exp2f(-100.0f / cd->sample_rate);
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
- memset(cd->envelope_buf[i], 0, num_samples * sizeof(cd->envelope_buf[i][0]));
- memset(cd->runaverage[i], 0, num_samples * sizeof(cd->runaverage[i][0]));
+ memset(cd->envelope_buf[i], 0,
+ num_samples * sizeof(cd->envelope_buf[i][0]));
+ memset(cd->runaverage[i], 0,
+ num_samples * sizeof(cd->runaverage[i][0]));
}
memset(cd->env_in, 0, num_samples * sizeof(cd->env_in[0]));
float *envelope_buf = cd->envelope_buf[chan];
float *runave = cd->runaverage[chan];
float *env_in = cd->env_in;
- float RMSdet = 0;
if (cd->detector == RMS_DETECT) {
runave[0] = rmscoef * cd->runave[chan] +
- (1 - rmscoef) * powf(samples[chan][0], 2.0);
+ (1 - rmscoef) * powf(samples[chan][0], 2.0f);
env_in[0] = sqrtf(fmaxf(runave[0], 0));
for (uint32_t i = 1; i < num_samples; ++i) {
runave[i] = rmscoef * runave[i - 1] +
(1 - rmscoef) *
- powf(samples[chan][i], 2.0);
+ powf(samples[chan][i], 2.0f);
env_in[i] = sqrtf(runave[i]);
}
} else if (cd->detector == PEAK_DETECT) {
static inline void process_expansion(struct expander_data *cd,
float **samples, uint32_t num_samples)
{
-
const float attack_gain = cd->attack_gain;
const float release_gain = cd->release_gain;
for (size_t i = 0; i < num_samples; ++i) {
// gain stage of expansion
float env_db = mul_to_db(cd->envelope_buf[chan][i]);
- float gain = cd->threshold - env_db > 0 ?
- fmaxf(cd->slope * (cd->threshold - env_db),
- -60.0) : 0;
+ float gain = cd->threshold - env_db > 0.0f ?
+ fmaxf(cd->slope *
+ (cd->threshold - env_db), -60.0f) :
+ 0.0f;
// ballistics (attack/release)
if (i > 0) {
if (gain > cd->gaindB[chan][i - 1])
- cd->gaindB[chan][i] = attack_gain * cd->gaindB[chan][i - 1]
- + (1 - attack_gain) * gain;
+ cd->gaindB[chan][i] = attack_gain *
+ cd->gaindB[chan][i - 1] +
+ (1.0f - attack_gain) * gain;
else
- cd->gaindB[chan][i] = release_gain * cd->gaindB[chan][i - 1]
- + (1 - release_gain) * gain;
+ cd->gaindB[chan][i] = release_gain *
+ cd->gaindB[chan][i - 1] +
+ (1.0f - release_gain) * gain;
} else {
if (gain > cd->gaindB_buf[chan])
- cd->gaindB[chan][i] = attack_gain * cd->gaindB_buf[chan]
- + (1 - attack_gain) * gain;
+ cd->gaindB[chan][i] = attack_gain *
+ cd->gaindB_buf[chan] +
+ (1.0f - attack_gain) * gain;
else
- cd->gaindB[chan][i] = release_gain * cd->gaindB_buf[chan]
- + (1 - release_gain) * gain;
+ cd->gaindB[chan][i] = release_gain *
+ cd->gaindB_buf[chan] +
+ (1.0f - release_gain) * gain;
}
gain = db_to_mul(fminf(0, cd->gaindB[chan][i]));
static obs_properties_t *expander_properties(void *data)
{
- struct expander_data *cd = data;
obs_properties_t *props = obs_properties_create();
- obs_source_t *parent = NULL;
-
- if (cd)
- parent = obs_filter_get_parent(cd->context);
obs_property_t *presets = obs_properties_add_list(props, S_PRESETS,
TEXT_PRESETS, OBS_COMBO_TYPE_LIST,
obs-studio-23.1.0.tar.xz/plugins/obs-filters/limiter-filter.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/limiter-filter.c
Changed
static obs_properties_t *limiter_properties(void *data)
{
- struct limiter_data *cd = data;
obs_properties_t *props = obs_properties_create();
obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB, 0.1);
obs-studio-23.2.0.tar.xz/plugins/obs-filters/luma-key-filter.c
Added
+#include <obs-module.h>
+
+#define SETTING_LUMA_MAX "luma_max"
+#define SETTING_LUMA_MIN "luma_min"
+#define SETTING_LUMA_MAX_SMOOTH "luma_max_smooth"
+#define SETTING_LUMA_MIN_SMOOTH "luma_min_smooth"
+
+#define TEXT_LUMA_MAX obs_module_text("Luma.LumaMax")
+#define TEXT_LUMA_MIN obs_module_text("Luma.LumaMin")
+#define TEXT_LUMA_MAX_SMOOTH obs_module_text("Luma.LumaMaxSmooth")
+#define TEXT_LUMA_MIN_SMOOTH obs_module_text("Luma.LumaMinSmooth")
+
+struct luma_key_filter_data {
+ obs_source_t *context;
+
+ gs_effect_t *effect;
+
+ gs_eparam_t *luma_max_param;
+ gs_eparam_t *luma_min_param;
+ gs_eparam_t *luma_max_smooth_param;
+ gs_eparam_t *luma_min_smooth_param;
+
+ float luma_max;
+ float luma_min;
+ float luma_max_smooth;
+ float luma_min_smooth;
+};
+
+static const char *luma_key_name(void *unused)
+{
+ UNUSED_PARAMETER(unused);
+ return obs_module_text("LumaKeyFilter");
+}
+
+static void luma_key_update(void *data, obs_data_t *settings)
+{
+ struct luma_key_filter_data *filter = data;
+
+ double lumaMax = obs_data_get_double(settings, SETTING_LUMA_MAX);
+ double lumaMin = obs_data_get_double(settings, SETTING_LUMA_MIN);
+ double lumaMaxSmooth = obs_data_get_double(settings, SETTING_LUMA_MAX_SMOOTH);
+ double lumaMinSmooth = obs_data_get_double(settings, SETTING_LUMA_MIN_SMOOTH);
+
+ filter->luma_max = (float)lumaMax;
+ filter->luma_min = (float)lumaMin;
+ filter->luma_max_smooth = (float)lumaMaxSmooth;
+ filter->luma_min_smooth = (float)lumaMinSmooth;
+}
+
+static void luma_key_destroy(void *data)
+{
+ struct luma_key_filter_data *filter = data;
+
+ if (filter->effect) {
+ obs_enter_graphics();
+ gs_effect_destroy(filter->effect);
+ obs_leave_graphics();
+ }
+
+ bfree(data);
+}
+
+static void *luma_key_create(obs_data_t *settings, obs_source_t *context)
+{
+ struct luma_key_filter_data *filter =
+ bzalloc(sizeof(struct luma_key_filter_data));
+ char *effect_path = obs_module_file("luma_key_filter.effect");
+
+ filter->context = context;
+
+ obs_enter_graphics();
+
+ filter->effect = gs_effect_create_from_file(effect_path, NULL);
+ if (filter->effect) {
+ filter->luma_max_param = gs_effect_get_param_by_name(
+ filter->effect, "lumaMax");
+ filter->luma_min_param = gs_effect_get_param_by_name(
+ filter->effect, "lumaMin");
+ filter->luma_max_smooth_param = gs_effect_get_param_by_name(
+ filter->effect, "lumaMaxSmooth");
+ filter->luma_min_smooth_param = gs_effect_get_param_by_name(
+ filter->effect, "lumaMinSmooth");
+ }
+
+ obs_leave_graphics();
+
+ bfree(effect_path);
+
+ if (!filter->effect) {
+ luma_key_destroy(filter);
+ return NULL;
+ }
+
+ luma_key_update(filter, settings);
+ return filter;
+}
+
+static void luma_key_render(void *data, gs_effect_t *effect)
+{
+ struct luma_key_filter_data *filter = data;
+
+ if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
+ OBS_ALLOW_DIRECT_RENDERING))
+ return;
+
+ gs_effect_set_float(filter->luma_max_param, filter->luma_max);
+ gs_effect_set_float(filter->luma_min_param, filter->luma_min);
+ gs_effect_set_float(filter->luma_max_smooth_param, filter->luma_max_smooth);
+ gs_effect_set_float(filter->luma_min_smooth_param, filter->luma_min_smooth);
+
+ obs_source_process_filter_end(filter->context, filter->effect, 0, 0);
+
+ UNUSED_PARAMETER(effect);
+}
+
+static obs_properties_t *luma_key_properties(void *data)
+{
+ obs_properties_t *props = obs_properties_create();
+
+ obs_properties_add_float_slider(props, SETTING_LUMA_MAX,
+ TEXT_LUMA_MAX, 0, 1, 0.01);
+ obs_properties_add_float_slider(props, SETTING_LUMA_MAX_SMOOTH,
+ TEXT_LUMA_MAX_SMOOTH, 0, 1, 0.01);
+ obs_properties_add_float_slider(props, SETTING_LUMA_MIN,
+ TEXT_LUMA_MIN, 0, 1, 0.01);
+ obs_properties_add_float_slider(props, SETTING_LUMA_MIN_SMOOTH,
+ TEXT_LUMA_MIN_SMOOTH, 0, 1, 0.01);
+
+ UNUSED_PARAMETER(data);
+ return props;
+}
+
+static void luma_key_defaults(obs_data_t *settings)
+{
+ obs_data_set_default_double(settings, SETTING_LUMA_MAX, 1.0);
+ obs_data_set_default_double(settings, SETTING_LUMA_MIN, 0.0);
+ obs_data_set_default_double(settings, SETTING_LUMA_MAX_SMOOTH, 0.0);
+ obs_data_set_default_double(settings, SETTING_LUMA_MIN_SMOOTH, 0.0);
+}
+
+
+struct obs_source_info luma_key_filter = {
+ .id = "luma_key_filter",
+ .type = OBS_SOURCE_TYPE_FILTER,
+ .output_flags = OBS_SOURCE_VIDEO,
+ .get_name = luma_key_name,
+ .create = luma_key_create,
+ .destroy = luma_key_destroy,
+ .video_render = luma_key_render,
+ .update = luma_key_update,
+ .get_properties = luma_key_properties,
+ .get_defaults = luma_key_defaults
+};
obs-studio-23.1.0.tar.xz/plugins/obs-filters/mask-filter.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/mask-filter.c
Changed
int opacity = (int)obs_data_get_int(settings, SETTING_OPACITY);
char *effect_path;
+ color &= 0xFFFFFF;
color |= (uint32_t)(((double)opacity) * 2.55) << 24;
vec4_from_rgba(&filter->color, color);
obs_properties_add_path(props, SETTING_IMAGE_PATH, TEXT_IMAGE_PATH,
OBS_PATH_FILE, filter_str.array, NULL);
obs_properties_add_color(props, SETTING_COLOR, TEXT_COLOR);
- obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
+ obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
+ 0, 100, 1);
obs_properties_add_bool(props, SETTING_STRETCH, TEXT_STRETCH);
dstr_free(&filter_str);
obs-studio-23.1.0.tar.xz/plugins/obs-filters/obs-filters.c -> obs-studio-23.2.0.tar.xz/plugins/obs-filters/obs-filters.c
Changed
extern struct obs_source_info compressor_filter;
extern struct obs_source_info limiter_filter;
extern struct obs_source_info expander_filter;
+extern struct obs_source_info luma_key_filter;
bool obs_module_load(void)
{
obs_register_source(&compressor_filter);
obs_register_source(&limiter_filter);
obs_register_source(&expander_filter);
+ obs_register_source(&luma_key_filter);
return true;
}
obs-studio-23.1.0.tar.xz/plugins/obs-libfdk/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-libfdk/data/locale/da-DK.ini
Changed
LibFDK="libfdk AAC Encoder"
-Bitrate="Bitrate"
-Afterburner="Aktivere AAC Afterburner"
+Bitrate="Bit-hastighed"
+Afterburner="Aktivér AAC Afterburner"
obs-studio-23.1.0.tar.xz/plugins/obs-libfdk/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-libfdk/data/locale/de-DE.ini
Changed
-LibFDK="libfdk AAC Codierer"
+LibFDK="libfdk-AAC-Kodierer"
Bitrate="Bitrate"
-Afterburner="AAC Afterburner aktivieren"
+Afterburner="AAC-Afterburner aktivieren"
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/ca-ES.ini
Changed
ConnectionReset="La connexió s'ha acabat. Normalment això indica que hi ha problemes de connexió entre el vostre equip i el servei de transmissió."
HostNotFound="Nom d'amfitrió no trobat. Assegureu-vos que hi hagi configurat un servidor de transmissió vàlid i que la seva connexió a Internet / DNS estiguin funcionant correctament."
NoData="S'ha trobat el nom d'amfitrió, però no hi ha dades del tipus sol·licitat. Això pot passar si heu enllaçat a una adreça IPv6 i el seu servei de transmissió només té adreces IPv4 (veieu configuració → avançada)."
-AddressNotAvailable="Adreça no disponible. Potser heu intentat enllaçar amb una adreça IP no vàlida (veieu configuració → avançada)."
+AddressNotAvailable="Adreça no disponible. Potser heu intentat enllaçar amb una adreça IP no vàlida (veieu configuració → avançada)."
SSLCertVerifyFailed="El servidor RTMP ha enviat un certificat SSL no vàlid."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/da-DK.ini
Changed
RTMPStream="RTMP Strøm"
-RTMPStream.DropThreshold="Tabstærskel (millisekunder)"
-FLVOutput="FLV File Output"
+RTMPStream.DropThreshold="Drop-tærskel (millisek.)"
+FLVOutput="FLV-fil output"
FLVOutput.FilePath="Filsti"
Default="Standard"
-ConnectionTimedOut="Forbindelsen fik timeout. Tjek venligst at du har opsat en gyldig streaming-tjeneste og at ingen firewall blokerer forbindelsen."
-PermissionDenied="Forbindelsen blev blokeret. Tjek venligst indstillingerne for firewall/antivirus for at sikre, at OBS har fuld adgang til Internet."
-ConnectionAborted="Forbindelsen blev afbrudt. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streaming-tjenesten."
-ConnectionReset="Forbindelsen blev afbrudt. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streaming-tjenesten."
-HostNotFound="Værtsnavn ikke fundet. Tjek at du har angivet en gyldig streaming-server, og at din Internetforbindelse/DNS fungerer korrekt."
-NoData="Værtsnavn fundet, men ingen data af den forespurgte type. Dette kan forekomme, hvis du har tilknyttet en IPv6-adresse, og din streamingtjeneste alene benytter IPv4-adresser (se Indstillinger → Avanceret)."
-AddressNotAvailable="Adresse utilgængelig. Du kan have forsøgt at tilknytte en ugyldig IP-adresse (se Indstillinger → Avanceret)."
+ConnectionTimedOut="Forbindelsen fik timeout. Tjek, at du har opsat en gyldig streamingtjeneste samt at ingen firewall blokerer forbindelsen."
+PermissionDenied="Forbindelsen blev blokeret. Tjek indstillingerne for firewall/antivirus for at sikre, at OBS har fuld Internetadgang."
+ConnectionAborted="Forbindelsen blev afbrudt. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streamingtjenesten."
+ConnectionReset="Forbindelsen afbrudt af modpart. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streamingtjenesten."
+HostNotFound="Værtsnavn ikke fundet. Tjek, at du har angivet en gyldig streamingserver, samt at din Internetforbindelse/DNS fungerer korrekt."
+NoData="Værtsnavn fundet, men ingen data af den forespurgte type. Kan f.eks. forekomme ved en tilknyttet IPv6-adresse ifm. en streamingtjeneste, der alene benytter IPv4-adresser (se Indstillinger → Avanceret)."
+AddressNotAvailable="Adresse utilgængelig. En ugyldig IP-adresse kan være forsøgt tilknyttet (se Indstillinger → Avanceret)."
SSLCertVerifyFailed="RTMP-serveren har sendt et ugyldig SSL-certifikat."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini
Changed
-RTMPStream="RTMP Stream"
-RTMPStream.DropThreshold="Drop Threshold (Millisekunden)"
-FLVOutput="FLV Dateiausgabe"
+RTMPStream="RTMP-Stream"
+RTMPStream.DropThreshold="Drop-Threshold (Millisekunden)"
+FLVOutput="FLV-Dateiausgabe"
FLVOutput.FilePath="Dateipfad"
Default="Standard"
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/en-US.ini
Changed
ConnectionAborted="The connection was aborted. This usually indicates internet connection problems between you and the streaming service."
ConnectionReset="The connection was reset by the peer. This usually indicates internet connection problems between you and the streaming service."
HostNotFound="Hostname not found. Make sure you entered a valid streaming server and your internet connection / DNS are working correctly."
-NoData="Hostname found, but no data of the requested type. This can occur if you have bound to an IPv6 address and your streaming service only has IPv4 addresses (see Settings → Advanced)."
-AddressNotAvailable="Address not available. You may have tried to bind to an invalid IP address (see Settings → Advanced)."
+NoData="Hostname found, but no data of the requested type. This can occur if you have bound to an IPv6 address and your streaming service only has IPv4 addresses (see Settings → Advanced)."
+AddressNotAvailable="Address not available. You may have tried to bind to an invalid IP address (see Settings → Advanced)."
SSLCertVerifyFailed="The RTMP server sent an invalid SSL certificate."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/ja-JP.ini
Changed
ConnectionAborted="接続は中止されました。配信サービスとの間のインターネット接続に問題があることを示しています。"
ConnectionReset="接続はピアによってリセットされました。 配信サービスとの間のインターネット接続に問題があることを示しています。"
HostNotFound="ホスト名が見つかりません。 有効なストリーミングサーバーを入力していることとインターネット接続/DNSが正しく機能していることを確認してください。"
-NoData="ホスト名が見つかりましたが、要求されたタイプのデータがありません。 これはIPv6アドレスにバインドしている状態で配信サービスにIPv4アドレスしかない場合に発生します。 (設定 → 詳細設定 を参照)"
+NoData="ホスト名が見つかりましたが、要求されたタイプのデータがありません。 これはIPv6アドレスにバインドしている状態で配信サービスにIPv4アドレスしかない場合に発生します。 (設定 → 詳細設定 を参照)"
AddressNotAvailable="アドレスを利用できません。 無効なIPアドレスにバインドしようとした可能性があります。 (設定 → 詳細設定 を参照)"
SSLCertVerifyFailed="RTMPサーバーが無効なSSL証明書を送信しました。"
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/ka-GE.ini
Changed
RTMPStream="RTMP-ნაკადი"
RTMPStream.DropThreshold="ქვედა ზღურბლი (მილიწამი)"
-FLVOutput="გამომავალი FLV-ფაილი"
+FLVOutput="გამოტანილი FLV-ფაილი"
FLVOutput.FilePath="ფაილის მისამართი"
Default="ნაგულისხმევი"
ConnectionAborted="კავშირი გაუქმდა. ძირითადად, ეს მიუთითებს ინტერნეტკავშირის ხარვეზების არსებობას, თქვენსა და ნაკადის გაშვების მომსახურების მომწოდებელს შორის."
ConnectionReset="კავშირი გაწყდა ერთ-ერთი მხარის მიერ. ძირითადად, ეს მიუთითებს ინტერნეტკავშირის ხარვეზების არსებობას, თქვენსა და ნაკადის გაშვების მომსახურების მომწოდებელს შორის."
HostNotFound="დაკავშირების წერტილი ვერ მოიძებნა. დარწმუნდით, რომ სწორად უთითებთ ნაკადის გაშვების მომსახურების მონაცემებს და თქვენი DNS / ინტერნეტკავშირის პარამეტრებიც სწორადაა გამართული."
-NoData="დაკავშირების წერტილი მოიძებნა, მაგრამ მოთხოვნილი სახის მონაცემები არა. ეს შეიძლება გამოწვეული იყოს იმით, რომ თქვენ უკავშირდებით IPv6 მისამართზე, ხოლო თქვენს ნაკადის გაშვების მომსახურებას, მხოლოდ IPv4 მისამართები გააჩნია (იხილეთ პარამეტრები → დამატებითი)."
-AddressNotAvailable="მისამართი მიუწვდომელია. შესაძლოა, თქვენ ცდილობთ მცდარ IP მისამართზე დაკავშირებას (იხილეთ პარამეტრები → დამატებით)."
+NoData="დაკავშირების წერტილი მოიძებნა, მაგრამ მოთხოვნილი სახის მონაცემები არა. ეს შეიძლება გამოწვეული იყოს იმით, რომ თქვენ უკავშირდებით IPv6 მისამართზე, ხოლო თქვენს ნაკადის გაშვების მომსახურებას, მხოლოდ IPv4 მისამართები გააჩნია (იხილეთ პარამეტრები → დამატებითი)."
+AddressNotAvailable="მისამართი მიუწვდომელია. შესაძლოა, თქვენ ცდილობთ მცდარ IP-მისამართზე დაკავშირებას (იხილეთ პარამეტრები → დამატებით)."
SSLCertVerifyFailed="RTMP სერვერმა გაგზავნა არამართებული SSL სერტიფიკატი."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/ko-KR.ini
Changed
ConnectionReset="상호 연결 문제로 초기화되었습니다. 보통 사용자와 방송 서비스 간의 연결 상태에 문제가 있음을 의미합니다."
HostNotFound="호스트 이름을 찾을 수 없습니다. 방송 서버 정보가 제대로 입력되었는지 확인하고, 인터넷 접속 혹은 DNS가 제대로 작동하고 있는지 점검하십시오."
NoData="호스트 이름은 찾았지만 요청한 형식의 데이터가 없습니다. 이 문제는 보통 사용자가 IPv6 형식의 주소를 고정하여 사용하면서 IPv4 형식의 주소만 지원하는 방송 서비스에 접속을 시도한 경우 나타납니다 (설정 → 고급 창을 확인하세요)."
-AddressNotAvailable="주소를 사용할 수 없습니다. 잘못된 IP주소를 고정하고 있습니다 (설정 → 고급 창을 확인하세요)."
+AddressNotAvailable="주소를 사용할 수 없습니다. 잘못된 IP주소를 고정하고 있습니다 (설정 → 고급 창을 확인하세요)."
SSLCertVerifyFailed="해당 RTMP 서버는 잘못된 SSL 인증서를 보냈습니다."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini
Changed
ConnectionAborted="Tilkoblingen ble avbrutt. Dette betyr vanligvis at det er problemer med nettverkskoblingen mellom deg og strømmetjenesten."
ConnectionReset="Tilkoblingen ble avbrutt. Dette betyr vanligvis at det er problemer med nettverkskoblingen mellom deg og strømmetjenesten."
HostNotFound="Tjeneren ble ikke funnet. Kontroller at du har angitt en gyldig streaming server og at tilkoblingen / DNS fungerer."
+NoData="Tjeneren funnet, men ingen data for den forespurte typen. Dette kan skje hvis du har bundet til en IPv6-adresse og streaming tjeneste har bare IPv4-adresser (se Innstillinger → Avansert)."
+AddressNotAvailable="Adresse ikke tilgjengelig. Du prøvde å binde til en ugyldig IP-adresse (se Innstillinger → Avansert)."
SSLCertVerifyFailed="RTMP-tjeneren sendte et ugyldig SSL-sertifikat."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/pl-PL.ini
Changed
RTMPStream="Strumień RTMP"
RTMPStream.DropThreshold="Próg odrzucania (w milisekundach)"
FLVOutput="Wyjście do pliku FLV"
-FLVOutput.FilePath="Scieżka do pliku"
+FLVOutput.FilePath="Ścieżka pliku"
Default="Domyślne"
ConnectionTimedOut="Upłynął limit czasu połączenia. Upewnij się, że usługa strumieniowania jest poprawnie skonfigurowana a zapora internetowa nie blokuje połączenia."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/sv-SE.ini
Changed
ConnectionAborted="Anslutningen avbröts. Detta kan indikera problem med Internetanslutningen mellan dig och strömningstjänsten."
ConnectionReset="Anslutningen återställdes av en peer. Detta kan indikera problem med Internetanslutningen mellan dig och strömningstjänsten."
HostNotFound="Värdnamnet hittades inte. Se till att du har angivit en giltigt strömningstjänst och att din Internetanslutning / DNS fungerar på rätt sätt."
-NoData="Värdnamnet hittades, men ingen data av den begärda typen. Detta kan förekomma om du har bundit till en IPv6-adress och din strömtjänst endast har IPv4-adresser (se Inställningar → Avancerat)."
-AddressNotAvailable="Adressen är inte tillgänglig. Du kanske har försökt binda till en ogiltig IP-adress (se Inställningar → Avancerat)."
+NoData="Värdnamnet hittades, men ingen data av den begärda typen. Detta kan förekomma om du har bundit till en IPv6-adress och din strömtjänst endast har IPv4-adresser (se Inställningar → Avancerat)."
+AddressNotAvailable="Adressen är inte tillgänglig. Du kanske har försökt binda till en ogiltig IP-adress (se Inställningar → Avancerat)."
SSLCertVerifyFailed="RTMP-servern skickade ett ogiltigt SSL-certifikat."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/tr-TR.ini
Changed
ConnectionAborted="Bağlantı iptal edildi. Bu genellikle sizin ve yayın servisinin arasındaki internet bağlantısı sorununa işaret eder."
ConnectionReset="Bağlantı karşı taraftan sıfırlandı. Bu genellikle sizin ve yayın servisinin arasındaki internet bağlantısı sorununa işaret eder."
HostNotFound="Ana bilgisayar adı bulunamadı. Geçerli bir yayın sunucusu girdiğinizden ve internet bağlantınızın / DNS'nizin düzgün çalıştığını emin olun."
+NoData="Ana bilgisayar adı bulundu, ancak istenen türde veri bulunamadı. Bu bir IPv6 adresine bağlamış ve yayın servisinizin sadece IPv4 adresleri varsa oluşabilir (bkz: Ayarlar → Gelişmiş)."
+AddressNotAvailable="Adres kullanılamaz. Geçersiz bir IP adresi bağlamayı denemiş olabilirsiniz (bakın: Ayarlar → Gelişmiş)."
SSLCertVerifyFailed="RTMP sunucusu geçersiz bir SSL sertifikası gönderdi."
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/zh-CN.ini
Changed
FLVOutput.FilePath="文件路径"
Default="默认"
-ConnectionTimedOut="连接超时. 请确保您已经配置了一个有效的流媒体服务并且没有防火墙阻止连接."
-PermissionDenied="连接被阻止. 检查您的防火墙 / 防病毒设置以确保允许 OBS 自由访问互联网."
-ConnectionAborted="连接被中止. 这通常表明你和流媒体服务之间的互联网连接问题."
-ConnectionReset="对方重置连接. 这通常表明你和流媒体服务之间的互联网连接问题."
-HostNotFound="找不到 Hostname. 请确保您输入一个有效的流媒体服务器并且您的互联网连接 / DNS 工作正常."
+ConnectionTimedOut="连接超时。请确保您已经配置了一个有效的流媒体服务并且没有防火墙阻止连接。"
+PermissionDenied="连接被阻止。检查您的防火墙 / 防病毒设置以确保允许 OBS 自由访问互联网。"
+ConnectionAborted="连接被中止。这通常表明你和流媒体服务器间的互联网存在连接问题。"
+ConnectionReset="对方重置了连接。这通常表明你和流媒体服务器间的互联网存在连接问题。"
+HostNotFound="找不到主机名。请确保您输入了有效的流媒体服务器并且您的互联网连接 / DNS 工作正常。"
NoData="找到主机名,但没有所请求类型的数据。如果绑定到 IPv6 地址并且流式服务只有 IPv4 地址,则可能发生这种情况(请参阅设置→高级)。"
AddressNotAvailable="地址不可用。您可能试图绑定到一个无效的 IP 地址(请参阅设置→高级)。"
SSLCertVerifyFailed="RTMP 服务器发送了无效的 SSL 证书。"
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini
Changed
ConnectionAborted="連線被中止。通常這代表您與串流服務之間有網際網路連線問題。"
ConnectionReset="連線被對方重置。通常這代表您與串流服務之間有網際網路連線問題。"
HostNotFound="找不到主機名稱。請確定輸入了一個有效的串流服務器且網路連線跟 DNS 工作正常。"
+NoData="找到主機名稱,但沒有要求類型的資料。這可能會在您綁定於 IPv6 位址但串流服務只有 IPv4 位址時發生(請看 設定 → 進階)。"
+AddressNotAvailable="無法使用位址。可能是因為嘗試綁定到不正確的 IP 位址(請檢視 設定 → 進階 的設定)。"
SSLCertVerifyFailed="RTMP 伺服器發送了一則不合法的 SSL 憑證。"
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/flv-output.c -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/flv-output.c
Changed
os_atomic_set_bool(&stream->stopping, true);
}
-static void flv_output_actual_stop(struct flv_output *stream)
+static void flv_output_actual_stop(struct flv_output *stream, int code)
{
os_atomic_set_bool(&stream->active, false);
fclose(stream->file);
}
- obs_output_end_data_capture(stream->output);
+ if (code) {
+ obs_output_signal_stop(stream->output, code);
+ } else {
+ obs_output_end_data_capture(stream->output);
+ }
info("FLV file output complete");
}
if (!active(stream))
goto unlock;
+ if (!packet) {
+ flv_output_actual_stop(stream, OBS_OUTPUT_ENCODE_ERROR);
+ goto unlock;
+ }
+
if (stopping(stream)) {
if (packet->sys_dts_usec >= (int64_t)stream->stop_ts) {
- flv_output_actual_stop(stream);
+ flv_output_actual_stop(stream, 0);
goto unlock;
}
}
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/ftl-stream.c -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/ftl-stream.c
Changed
volatile bool active;
volatile bool disconnected;
+ volatile bool encode_error;
pthread_t send_thread;
int max_shutdown_time_sec;
}
}
+ bool encode_error = os_atomic_load_bool(&stream->encode_error);
+
if (disconnected(stream)) {
info("Disconnected from %s", stream->path.array);
+ } else if (encode_error) {
+ info("Encoder error, disconnecting");
} else {
info("User stopped the stream");
}
if (!stopping(stream)) {
pthread_detach(stream->send_thread);
obs_output_signal_stop(stream->output, OBS_OUTPUT_DISCONNECTED);
+ } else if (encode_error) {
+ obs_output_signal_stop(stream->output, OBS_OUTPUT_ENCODE_ERROR);
} else {
obs_output_end_data_capture(stream->output);
}
if (disconnected(stream) || !active(stream))
return;
+ /* encoder failure */
+ if (!packet) {
+ os_atomic_set_bool(&stream->encode_error, true);
+ os_sem_post(stream->send_sem);
+ return;
+ }
+
if (packet->type == OBS_ENCODER_VIDEO)
obs_parse_avc_packet(&new_packet, packet);
else
}
os_atomic_set_bool(&stream->disconnected, false);
+ os_atomic_set_bool(&stream->encode_error, false);
stream->total_bytes_sent = 0;
stream->dropped_frames = 0;
stream->min_priority = 0;
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/librtmp/rtmp.c -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/librtmp/rtmp.c
Changed
#include <util/platform.h>
+#if !defined(MSG_NOSIGNAL)
+#define MSG_NOSIGNAL 0
+#endif
+
#ifdef CRYPTO
#ifdef __APPLE__
if (r->m_sb.sb_socket != INVALID_SOCKET)
{
+#ifndef _WIN32
+#ifdef SO_NOSIGPIPE
+ setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_NOSIGPIPE, &(int){ 1 }, sizeof(int));
+#endif
+#endif
if(r->m_bindIP.addrLen)
{
if (bind(r->m_sb.sb_socket, (const struct sockaddr *)&r->m_bindIP.addr, r->m_bindIP.addrLen) < 0)
else
#endif
{
- nBytes = recv(sb->sb_socket, sb->sb_start + sb->sb_size, nBytes, 0);
+ nBytes = recv(sb->sb_socket, sb->sb_start + sb->sb_size, nBytes, MSG_NOSIGNAL);
}
if (nBytes > 0)
{
else
#endif
{
- rc = send(sb->sb_socket, buf, len, 0);
+ rc = send(sb->sb_socket, buf, len, MSG_NOSIGNAL);
}
return rc;
}
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/librtmp/rtmp.h -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/librtmp/rtmp.h
Changed
void RTMP_Init(RTMP *r);
void RTMP_Close(RTMP *r);
RTMP *RTMP_Alloc(void);
+ void RTMP_TLS_Free();
void RTMP_Free(RTMP *r);
void RTMP_EnableWrite(RTMP *r);
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/rtmp-stream.c
Changed
}
}
+ RTMP_TLS_Free();
free_packets(stream);
dstr_free(&stream->path);
dstr_free(&stream->key);
}
}
+ bool encode_error = os_atomic_load_bool(&stream->encode_error);
+
if (disconnected(stream)) {
info("Disconnected from %s", stream->path.array);
+ } else if (encode_error) {
+ info("Encoder error, disconnecting");
} else {
info("User stopped the stream");
}
if (!stopping(stream)) {
pthread_detach(stream->send_thread);
obs_output_signal_stop(stream->output, OBS_OUTPUT_DISCONNECTED);
+ } else if (encode_error) {
+ obs_output_signal_stop(stream->output, OBS_OUTPUT_ENCODE_ERROR);
} else {
obs_output_end_data_capture(stream->output);
}
return false;
os_atomic_set_bool(&stream->disconnected, false);
+ os_atomic_set_bool(&stream->encode_error, false);
stream->total_bytes_sent = 0;
stream->dropped_frames = 0;
stream->min_priority = 0;
if (disconnected(stream) || !active(stream))
return;
+ /* encoder fail */
+ if (!packet) {
+ os_atomic_set_bool(&stream->encode_error, true);
+ os_sem_post(stream->send_sem);
+ return;
+ }
+
if (packet->type == OBS_ENCODER_VIDEO) {
if (!stream->got_first_video) {
stream->start_dts_offset =
obs-studio-23.1.0.tar.xz/plugins/obs-outputs/rtmp-stream.h -> obs-studio-23.2.0.tar.xz/plugins/obs-outputs/rtmp-stream.h
Changed
volatile bool active;
volatile bool disconnected;
+ volatile bool encode_error;
pthread_t send_thread;
int max_shutdown_time_sec;
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/data/locale/da-DK.ini
Changed
TargetUsage="TargetUsage"
-Bitrate="Bithastighed"
-MaxBitrate="Maks. bithastighed"
+Bitrate="Bit-hastighed"
+MaxBitrate="Maks. bit-hastighed"
RateControl="Hastighedskontrol"
KeyframeIntervalSec="Keyframe-interval (sek., 0= auto)"
Profile="Profil"
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfxenc.h"
#include "mfxpak.h"
+#define INTEL_VENDOR_ID 0x8086
mfxStatus MFXQueryVersion(mfxSession session, mfxVersion *version);
eVideoFuncTotal
};
+enum ePluginFunc
+{
+ eMFXVideoUSER_Load,
+ eMFXVideoUSER_LoadByPath,
+ eMFXVideoUSER_UnLoad,
+ eMFXAudioUSER_Load,
+ eMFXAudioUSER_UnLoad,
+ ePluginFuncTotal
+};
+
enum eAudioFunc
{
eFakeAudioEnum = eMFXGetPriority,
MFX_DISPATCHER_VERSION_MINOR = 2
};
+struct _mfxSession
+{
+ // A real handle from MFX engine passed to a called function
+ mfxSession session;
+
+ mfxFunctionPointer callTable[eVideoFuncTotal];
+ mfxFunctionPointer callPlugInsTable[ePluginFuncTotal];
+ mfxFunctionPointer callAudioTable[eAudioFuncTotal];
+
+ // Current library's implementation (exact implementation)
+ mfxIMPL impl;
+};
+
// declare a dispatcher's handle
-struct MFX_DISP_HANDLE
+struct MFX_DISP_HANDLE : public _mfxSession
{
// Default constructor
MFX_DISP_HANDLE(const mfxVersion requiredVersion);
// Library's implementation type (hardware or software)
eMfxImplType implType;
- // Current library's implementation (exact implementation)
- mfxIMPL impl;
// Current library's VIA interface
mfxIMPL implInterface;
// Dispatcher's version. If version is 1.1 or lower, then old dispatcher's
// architecture is used. Otherwise it means current dispatcher's version.
mfxVersion dispVersion;
- // A real handle passed to a called function
- mfxSession session;
// Required API version of session initialized
const mfxVersion apiVersion;
// Actual library API version
MFX::MFXPluginStorage pluginHive;
MFX::MFXPluginFactory pluginFactory;
- // function call table
- mfxFunctionPointer callTable[eVideoFuncTotal];
- mfxFunctionPointer callAudioTable[eAudioFuncTotal];
-
private:
// Declare assignment operator and copy constructor to prevent occasional assignment
MFX_DISP_HANDLE(const MFX_DISP_HANDLE &);
- MFX_DISP_HANDLE & operator = (const MFX_DISP_HANDLE &);
+ MFX_DISP_HANDLE & operator = (const MFX_DISP_HANDLE &);
};
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_defs.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_defs.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include <string.h>
#endif
+#define MAX_PLUGIN_PATH 4096
+#define MAX_PLUGIN_NAME 4096
+
#if defined(_WIN32) || defined(_WIN64)
typedef wchar_t msdk_disp_char;
#define MSDK2WIDE(x) x
#endif
-#ifdef __GNUC__
+#if defined(__GNUC__) && !defined(_WIN32) && !defined(_WIN64)
#define sscanf_s sscanf
#define swscanf_s swscanf
#endif
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dxva2_device.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dxva2_device.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2013 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
+
+#define TOSTRING(L) #L
+#define STRINGIFY(L) TOSTRING(L)
+
+#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
+ #if defined(MFX_D3D9_ENABLED) && !defined(MFX_FORCE_D3D9_ENABLED)
+ #undef MFX_D3D9_ENABLED
+ // if you really like to use D3D9 from intel_gfx_api-x64/x86.dll, use MFX_FORCE_D3D9_ENABLED
+ #pragma message("\n\nATTENTION:\nin file\n\t" __FILE__ " (" STRINGIFY(__LINE__) "):\nUsing of D3D9 disabled for UWP!\n\n")
+ #endif
+ #if defined(MFX_FORCE_D3D9_ENABLED)
+ #define MFX_D3D9_ENABLED
+ #endif
+#else
+ #define MFX_D3D9_ENABLED
+ #pragma message("\n\nATTENTION:\nin file\n\t" __FILE__ " (" STRINGIFY(__LINE__) "):\nUsing of D3D9 enabled!\n\n")
+#endif
+
#endif // #if defined(_WIN32) || defined(_WIN64)
#include <mfxdefs.h>
#define DXVA2DEVICE_TRACE_OPERATION(expr) expr;
#else
#define DXVA2DEVICE_TRACE(expr)
-#define DXVA2DEVICE_TRACE_OPERATION(expr)
+#define DXVA2DEVICE_TRACE_OPERATION(expr)
#endif
namespace MFX
void operator=(const DXDevice &);
};
+
#if defined(_WIN32) || defined(_WIN64)
+
+#ifdef MFX_D3D9_ENABLED
class D3D9Device : public DXDevice
{
public:
void *m_pD3D9Ex;
};
+#endif // MFX_D3D9_ENABLED
class DXGI1Device : public DXDevice
{
protected:
+#ifdef MFX_D3D9_ENABLED
// Get vendor & device IDs by alternative way (D3D9 in Remote Desktop sessions)
void UseAlternativeWay(const D3D9Device *pD3D9Device);
-
+#endif // MFX_D3D9_ENABLED
// Number of adapters available
mfxU32 m_numAdapters;
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_exposed_functions_list.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_exposed_functions_list.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2016 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
// FUNCTION(mfxStatus, MFXInitEx, (mfxInitParam par, mfxSession session), (par, session))
FUNCTION(mfxStatus, MFXDoWork, (mfxSession session), (session))
+#undef API_VERSION
+
+#define API_VERSION {{19, 1}}
+
+FUNCTION(mfxStatus, MFXVideoENC_GetVideoParam, (mfxSession session, mfxVideoParam *par), (session, par))
+FUNCTION(mfxStatus, MFXVideoPAK_GetVideoParam, (mfxSession session, mfxVideoParam *par), (session, par))
+FUNCTION(mfxStatus, MFXVideoCORE_QueryPlatform, (mfxSession session, mfxPlatform* platform), (session, platform))
+FUNCTION(mfxStatus, MFXVideoUSER_GetPlugin, (mfxSession session, mfxU32 type, mfxPlugin *par), (session, type, par))
+
#undef API_VERSION
\ No newline at end of file
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_library_iterator.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_library_iterator.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include <mfxvideo.h>
+
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
#include "mfx_win_reg_key.h"
+#endif
+
#include "mfx_dispatcher.h"
#if !defined(_WIN32) && !defined(_WIN64)
MFX_CURRENT_USER_KEY = 0,
MFX_LOCAL_MACHINE_KEY = 1,
MFX_APP_FOLDER = 2,
-
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
+ MFX_PATH_MSDK_FOLDER = 3,
MFX_STORAGE_ID_FIRST = MFX_CURRENT_USER_KEY,
- MFX_STORAGE_ID_LAST = MFX_LOCAL_MACHINE_KEY
+ MFX_STORAGE_ID_LAST = MFX_PATH_MSDK_FOLDER
+#else
+ MFX_PATH_MSDK_FOLDER = 3,
+ MFX_STORAGE_ID_FIRST = MFX_PATH_MSDK_FOLDER,
+ MFX_STORAGE_ID_LAST = MFX_PATH_MSDK_FOLDER
+#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
};
#else
enum
{
MFX_UNKNOWN_KEY = -1,
- MFX_STORAGE_ID_OPT = 0, // storage is: /opt/intel
+ MFX_STORAGE_ID_OPT = 0, // storage is: MFX_MODULES_DIR
MFX_APP_FOLDER = 1,
MFX_STORAGE_ID_FIRST = MFX_STORAGE_ID_OPT,
// Params: adapterNum - in, pImplInterface - in/out, pVendorID - out, pDeviceID - out
mfxStatus SelectImplementationType(const mfxU32 adapterNum, mfxIMPL *pImplInterface, mfxU32 *pVendorID, mfxU32 *pDeviceID);
+const mfxU32 msdk_disp_path_len = 1024;
+
class MFXLibraryIterator
{
public:
mfxStatus Init(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID);
// Get the next library path
- mfxStatus SelectDLLVersion(msdk_disp_char *pPath, size_t pathSize,
+ mfxStatus SelectDLLVersion(msdk_disp_char *pPath, size_t pathSize,
eMfxImplType *pImplType, mfxVersion minVersion);
// Return interface type on which Intel adapter was found (if any): D3D9 or D3D11
- mfxIMPL GetImplementationType();
+ mfxIMPL GetImplementationType();
// Retrun registry subkey name on which dll was selected after sucesfull call to selectDllVesion
bool GetSubKeyName(msdk_disp_char *subKeyName, size_t length) const;
mfxStatus InitFolder(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, const msdk_disp_char * path);
- eMfxImplType m_implType; // Required library implementation
+ eMfxImplType m_implType; // Required library implementation
mfxIMPL m_implInterface; // Required interface (D3D9, D3D11)
mfxU32 m_vendorID; // (mfxU32) property of used graphic card
mfxU32 m_deviceID; // (mfxU32) property of used graphic card
bool m_bIsSubKeyValid;
- wchar_t m_SubKeyName[MFX_MAX_REGISTRY_KEY_NAME]; // registry subkey for selected module loaded
+ wchar_t m_SubKeyName[MFX_MAX_REGISTRY_KEY_NAME]; // registry subkey for selected module loaded
int m_StorageID;
-
+
#if defined(_WIN32) || defined(_WIN64)
- WinRegKey m_baseRegKey; // (WinRegKey) main registry key
+
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
+ WinRegKey m_baseRegKey; // (WinRegKey) main registry key
+#endif
mfxU32 m_lastLibIndex; // (mfxU32) index of previously returned library
mfxU32 m_lastLibMerit; // (mfxU32) merit of previously returned library
struct mfx_libs* m_libs;
#endif // #if defined(_WIN32) || defined(_WIN64)
- msdk_disp_char m_path[260];
+ msdk_disp_char m_path[msdk_disp_path_len];
private:
// unimplemented by intent to make this class non-copyable
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_plugin.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_plugin.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2013-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2016 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
mfxPluginParam plgParams;
PluginModule module;
mfxPlugin plugin;
- FactoryRecord () {}
+ FactoryRecord ()
+ : plugin()
+ {}
FactoryRecord(const mfxPluginParam &plgParams,
PluginModule &module,
mfxPlugin plugin)
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_plugin_hive.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_plugin_hive.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2013-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
namespace MFX {
- enum
- {
- MAX_PLUGIN_PATH = 4096
- };
-
- enum
- {
- MAX_PLUGIN_NAME = 4096
- };
-
inline bool operator == (const mfxPluginUID &lhs, const mfxPluginUID & rhs)
{
return !memcmp(lhs.Data, rhs.Data, sizeof(mfxPluginUID));
MFXPluginsInHive(int mfxStorageID, const msdk_disp_char *msdkLibSubKey, mfxVersion currentAPIVersion);
};
+#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
//plugins are loaded from FS close to executable
class MFXPluginsInFS : public MFXPluginStorageBase
{
bool ParseFile(FILE * f, PluginDescriptionRecord & des);
bool ParseKVPair( msdk_disp_char *key, msdk_disp_char * value, PluginDescriptionRecord & des);
};
-
+#endif //#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
//plugins are loaded from FS close to Runtime library
class MFXDefaultPlugins : public MFXPluginStorageBase
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxcommon.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxcommon.h
Changed
/*******************************************************************************
-Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
MFX_IMPL_HARDWARE2 = 0x0005, /* Hardware accelerated implementation (2nd device) */
MFX_IMPL_HARDWARE3 = 0x0006, /* Hardware accelerated implementation (3rd device) */
MFX_IMPL_HARDWARE4 = 0x0007, /* Hardware accelerated implementation (4th device) */
- MFX_IMPL_RUNTIME = 0x0008,
-
+ MFX_IMPL_RUNTIME = 0x0008,
MFX_IMPL_VIA_ANY = 0x0100,
MFX_IMPL_VIA_D3D9 = 0x0200,
MFX_IMPL_VIA_D3D11 = 0x0300,
MFX_IMPL_VIA_VAAPI = 0x0400,
- MFX_IMPL_AUDIO = 0x8000,
-
+ MFX_IMPL_AUDIO = 0x8000,
+
MFX_IMPL_UNSUPPORTED = 0x0000 /* One of the MFXQueryIMPL returns */
};
mfxU16 reserved[55];
} mfxExtThreadsParam;
+/* PlatformCodeName */
+enum {
+ MFX_PLATFORM_UNKNOWN = 0,
+ MFX_PLATFORM_SANDYBRIDGE = 1,
+ MFX_PLATFORM_IVYBRIDGE = 2,
+ MFX_PLATFORM_HASWELL = 3,
+ MFX_PLATFORM_BAYTRAIL = 4,
+ MFX_PLATFORM_BROADWELL = 5,
+ MFX_PLATFORM_CHERRYTRAIL = 6,
+ MFX_PLATFORM_SKYLAKE = 7,
+ MFX_PLATFORM_APOLLOLAKE = 8,
+ MFX_PLATFORM_KABYLAKE = 9,
+ MFX_PLATFORM_GEMINILAKE = 10,
+ MFX_PLATFORM_COFFEELAKE = 11,
+ MFX_PLATFORM_CANNONLAKE = 20,
+ MFX_PLATFORM_ICELAKE = 30,
+};
+
+typedef struct {
+ mfxU16 CodeName;
+ mfxU16 DeviceId;
+ mfxU16 reserved[14];
+} mfxPlatform;
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxdefs.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxdefs.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2007-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#ifndef __MFXDEFS_H__
#define __MFXDEFS_H__
+#define MFX_VERSION_MAJOR 1
+#define MFX_VERSION_MINOR 27
+
+#define MFX_VERSION_NEXT 1028
+
+#ifndef MFX_VERSION
+#define MFX_VERSION (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR)
+#endif
+
#ifdef __cplusplus
extern "C"
{
MFX_ERR_MORE_BITSTREAM = -18, /* expect more bitstream buffers at output */
MFX_ERR_INCOMPATIBLE_AUDIO_PARAM = -19, /* incompatible audio parameters */
MFX_ERR_INVALID_AUDIO_PARAM = -20, /* invalid audio parameters */
+ MFX_ERR_GPU_HANG = -21, /* device operation failure caused by GPU hang */
+ MFX_ERR_REALLOC_SURFACE = -22, /* bigger output surface required */
/* warnings >0 */
MFX_WRN_IN_EXECUTION = 1, /* the previous asynchronous operation is in execution */
/* threading statuses */
MFX_TASK_DONE = MFX_ERR_NONE, /* task has been completed */
MFX_TASK_WORKING = 8, /* there is some more work to do */
- MFX_TASK_BUSY = 9 /* task is waiting for resources */
+ MFX_TASK_BUSY = 9, /* task is waiting for resources */
+
+ /* plug-in statuses */
+ MFX_ERR_MORE_DATA_SUBMIT_TASK = -10000, /* return MFX_ERR_MORE_DATA but submit internal asynchronous task */
} mfxStatus;
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxenc.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxenc.h
Changed
/******************************************************************************* *\
-Copyright (C) 2014 Intel Corporation. All rights reserved.
+Copyright (C) 2014-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
mfxU16 NumExtParam;
mfxExtBuffer **ExtParam;
} ;
+
typedef struct _mfxENCOutput mfxENCOutput;
struct _mfxENCOutput{
mfxU32 reserved[32];
mfxStatus MFX_CDECL MFXVideoENC_ProcessFrameAsync(mfxSession session, mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp);
+mfxStatus MFX_CDECL MFXVideoENC_GetVideoParam(mfxSession session, mfxVideoParam *par);
#ifdef __cplusplus
} // extern "C"
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxjpeg.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxjpeg.h
Changed
/******************************************************************************* *\
-Copyright (C) 2010-2013 Intel Corporation. All rights reserved.
+Copyright (C) 2010-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
};
enum {
- MFX_EXTBUFF_JPEG_QT = MFX_MAKEFOURCC('J','P','G','Q'),
- MFX_EXTBUFF_JPEG_HUFFMAN = MFX_MAKEFOURCC('J','P','G','H')
+ MFX_EXTBUFF_JPEG_QT = MFX_MAKEFOURCC('J','P','G','Q'),
+ MFX_EXTBUFF_JPEG_HUFFMAN = MFX_MAKEFOURCC('J','P','G','H')
};
enum {
MFX_JPEG_COLORFORMAT_UNKNOWN = 0,
- MFX_JPEG_COLORFORMAT_YCbCr = 1,
- MFX_JPEG_COLORFORMAT_RGB = 2
+ MFX_JPEG_COLORFORMAT_YCbCr = 1,
+ MFX_JPEG_COLORFORMAT_RGB = 2
};
enum {
- MFX_SCANTYPE_UNKNOWN = 0,
- MFX_SCANTYPE_INTERLEAVED = 1,
+ MFX_SCANTYPE_UNKNOWN = 0,
+ MFX_SCANTYPE_INTERLEAVED = 1,
MFX_SCANTYPE_NONINTERLEAVED = 2
};
+enum {
+ MFX_CHROMAFORMAT_JPEG_SAMPLING = 6
+};
+
typedef struct {
mfxExtBuffer Header;
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxpak.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxpak.h
Changed
/******************************************************************************* *\
-Copyright (C) 2014 Intel Corporation. All rights reserved.
+Copyright (C) 2014-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#endif /* __cplusplus */
typedef struct {
- mfxU32 reserved[32];
+ mfxU16 reserved[32];
mfxFrameSurface1 *InSurface;
mfxU16 NumExtParam;
mfxExtBuffer **ExtParam;
+
+ mfxU16 NumPayload;
+ mfxPayload **Payload;
} mfxPAKInput;
typedef struct {
- mfxBitstream *Bs;
+ mfxU16 reserved[32];
+
+ mfxBitstream *Bs;
mfxFrameSurface1 *OutSurface;
typedef struct _mfxSession *mfxSession;
mfxStatus MFX_CDECL MFXVideoPAK_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out);
-mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request);
+mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]);
mfxStatus MFX_CDECL MFXVideoPAK_Init(mfxSession session, mfxVideoParam *par);
mfxStatus MFX_CDECL MFXVideoPAK_Reset(mfxSession session, mfxVideoParam *par);
mfxStatus MFX_CDECL MFXVideoPAK_Close(mfxSession session);
mfxStatus MFX_CDECL MFXVideoPAK_ProcessFrameAsync(mfxSession session, mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp);
+mfxStatus MFX_CDECL MFXVideoPAK_GetVideoParam(mfxSession session, mfxVideoParam *par);
#ifdef __cplusplus
} // extern "C"
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin++.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin++.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2007-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2016 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
virtual mfxStatus Submit(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) = 0;
};
-//decoder plugins may only support this interface
+//decoder plugins may only support this interface
struct MFXDecoderPlugin : MFXCodecPlugin
{
virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxVideoParam *par) = 0;
virtual mfxStatus DecodeFrameSubmit(mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) = 0;
};
-//audio decoder plugins may only support this interface
+//audio decoder plugins may only support this interface
struct MFXAudioDecoderPlugin : MFXAudioCodecPlugin
{
virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxAudioParam *par) = 0;
virtual mfxStatus DecodeFrameSubmit(mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) = 0;
};
-//encoder plugins may only support this interface
+//encoder plugins may only support this interface
struct MFXEncoderPlugin : MFXCodecPlugin
{
virtual mfxStatus EncodeFrameSubmit(mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task) = 0;
};
-//audio encoder plugins may only support this interface
+//audio encoder plugins may only support this interface
struct MFXAudioEncoderPlugin : MFXAudioCodecPlugin
{
virtual mfxStatus EncodeFrameSubmit(mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task) = 0;
};
-//vpp plugins may only support this interface
+//vpp plugins may only support this interface
struct MFXVPPPlugin : MFXCodecPlugin
{
virtual mfxStatus VPPFrameSubmit(mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_out, mfxExtVppAuxData *aux, mfxThreadTask *task) = 0;
: m_core(that.m_core) {
}
MFXCoreInterface &operator = (const MFXCoreInterface & that)
- {
+ {
m_core = that.m_core;
return *this;
}
mfxFrameAllocator & FrameAllocator() {
return m_core.FrameAllocator;
}
-
+ mfxStatus GetFrameHandle(mfxFrameData *fd, mfxHDL *handle) {
+ if (!IsCoreSet()) {
+ return MFX_ERR_NULL_PTR;
+ }
+ return m_core.GetFrameHandle(m_core.pthis, fd, handle);
+ }
+ mfxStatus QueryPlatform(mfxPlatform *platform) {
+ if (!IsCoreSet()) {
+ return MFX_ERR_NULL_PTR;
+ }
+ return m_core.QueryPlatform(m_core.pthis, platform);
+ }
} ;
/* Class adapter between "C" structure mfxPlugin and C++ interface MFXPlugin */
-namespace detail
+namespace detail
{
template <class T>
class MFXPluginAdapterBase
mfxPlugin m_mfxAPI;
public:
MFXPluginAdapterBase( T *plugin, mfxVideoCodecPlugin *pCodec = NULL)
+ : m_mfxAPI()
{
SetupCallbacks(plugin, pCodec);
}
MFXPluginAdapterBase( T *plugin, mfxAudioCodecPlugin *pCodec)
+ : m_mfxAPI()
{
SetupCallbacks(plugin, pCodec);
}
private:
static mfxStatus _PluginInit(mfxHDL pthis, mfxCoreInterface *core) {
- return reinterpret_cast<T*>(pthis)->PluginInit(core);
+ return reinterpret_cast<T*>(pthis)->PluginInit(core);
}
- static mfxStatus _PluginClose(mfxHDL pthis) {
- return reinterpret_cast<T*>(pthis)->PluginClose();
+ static mfxStatus _PluginClose(mfxHDL pthis) {
+ return reinterpret_cast<T*>(pthis)->PluginClose();
}
- static mfxStatus _GetPluginParam(mfxHDL pthis, mfxPluginParam *par) {
- return reinterpret_cast<T*>(pthis)->GetPluginParam(par);
+ static mfxStatus _GetPluginParam(mfxHDL pthis, mfxPluginParam *par) {
+ return reinterpret_cast<T*>(pthis)->GetPluginParam(par);
}
- static mfxStatus _Execute(mfxHDL pthis, mfxThreadTask task, mfxU32 thread_id, mfxU32 call_count) {
- return reinterpret_cast<T*>(pthis)->Execute(task, thread_id, call_count);
+ static mfxStatus _Execute(mfxHDL pthis, mfxThreadTask task, mfxU32 thread_id, mfxU32 call_count) {
+ return reinterpret_cast<T*>(pthis)->Execute(task, thread_id, call_count);
}
- static mfxStatus _FreeResources(mfxHDL pthis, mfxThreadTask task, mfxStatus sts) {
- return reinterpret_cast<T*>(pthis)->FreeResources(task, sts);
+ static mfxStatus _FreeResources(mfxHDL pthis, mfxThreadTask task, mfxStatus sts) {
+ return reinterpret_cast<T*>(pthis)->FreeResources(task, sts);
}
};
m_codecPlg.Close = _Close;
m_codecPlg.GetVideoParam = _GetVideoParam;
}
- MFXCodecPluginAdapterBase(const MFXCodecPluginAdapterBase<T> & that)
+ MFXCodecPluginAdapterBase(const MFXCodecPluginAdapterBase<T> & that)
: MFXPluginAdapterBase<T>(reinterpret_cast<T*>(that.m_mfxAPI.pthis), &m_codecPlg)
, m_codecPlg() {
SetupCallbacks();
m_codecPlg.Close = _Close;
m_codecPlg.GetAudioParam = _GetAudioParam;
}
- MFXAudioCodecPluginAdapterBase(const MFXCodecPluginAdapterBase<T> & that)
+ MFXAudioCodecPluginAdapterBase(const MFXCodecPluginAdapterBase<T> & that)
: MFXPluginAdapterBase<T>(reinterpret_cast<T*>(that.m_mfxAPI.pthis), &m_codecPlg)
, m_codecPlg() {
SetupCallbacks();
return reinterpret_cast<T*>(pthis)->GetAudioParam(par);
}
};
-
+
template <class T>
struct MFXPluginAdapterInternal{};
template<>
}
private:
- static mfxStatus _Submit(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) {
- return reinterpret_cast<MFXGenericPlugin*>(pthis)->Submit(in, in_num, out, out_num, task);
+ static mfxStatus _Submit(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) {
+ return reinterpret_cast<MFXGenericPlugin*>(pthis)->Submit(in, in_num, out, out_num, task);
}
};
{
public:
detail::MFXPluginAdapterInternal<T> m_Adapter;
-
+
operator mfxPlugin () const {
return m_Adapter.operator mfxPlugin();
}
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin.h
Changed
/******************************************************************************* *\
-Copyright (C) 2007-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
mfxU8 Data[16];
} mfxPluginUID;
-static const mfxPluginUID MFX_PLUGINID_HEVCD_SW = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}};
-static const mfxPluginUID MFX_PLUGINID_HEVCD_HW = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}};
-static const mfxPluginUID MFX_PLUGINID_HEVCE_SW = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}};
-static const mfxPluginUID MFX_PLUGINID_HEVCE_GACC = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}};
-static const mfxPluginUID MFX_PLUGINID_HEVCE_HW = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}};
-static const mfxPluginUID MFX_PLUGINID_VP8D_HW = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
-static const mfxPluginUID MFX_PLUGINID_VP8E_HW = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}};
-static const mfxPluginUID MFX_PLUGINID_VP9E_HW = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}};
-static const mfxPluginUID MFX_PLUGINID_VP9D_HW = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
-static const mfxPluginUID MFX_PLUGINID_CAMERA_HW = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}};
-static const mfxPluginUID MFX_PLUGINID_CAPTURE_HW = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}};
-static const mfxPluginUID MFX_PLUGINID_ITELECINE_HW = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}};
-static const mfxPluginUID MFX_PLUGINID_H264LA_HW = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}};
-static const mfxPluginUID MFX_PLUGINID_AACD = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}};
-static const mfxPluginUID MFX_PLUGINID_AACE = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}};
-static const mfxPluginUID MFX_PLUGINID_HEVCE_FEI_HW = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}};
+static const mfxPluginUID MFX_PLUGINID_HEVCD_SW = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}};
+static const mfxPluginUID MFX_PLUGINID_HEVCD_HW = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}};
+static const mfxPluginUID MFX_PLUGINID_HEVCE_SW = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}};
+static const mfxPluginUID MFX_PLUGINID_HEVCE_GACC = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}};
+static const mfxPluginUID MFX_PLUGINID_HEVCE_DP_GACC = {{0x2b, 0xad, 0x6f, 0x9d, 0x77, 0x54, 0x41, 0x2d, 0xbf, 0x63, 0x03, 0xed, 0x4b, 0xb5, 0x09, 0x68}};
+static const mfxPluginUID MFX_PLUGINID_HEVCE_HW = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}};
+static const mfxPluginUID MFX_PLUGINID_VP8D_HW = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
+static const mfxPluginUID MFX_PLUGINID_VP8E_HW = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}};
+static const mfxPluginUID MFX_PLUGINID_VP9E_HW = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}};
+static const mfxPluginUID MFX_PLUGINID_VP9D_HW = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
+static const mfxPluginUID MFX_PLUGINID_CAMERA_HW = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}};
+static const mfxPluginUID MFX_PLUGINID_CAPTURE_HW = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}};
+static const mfxPluginUID MFX_PLUGINID_ITELECINE_HW = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}};
+static const mfxPluginUID MFX_PLUGINID_H264LA_HW = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}};
+static const mfxPluginUID MFX_PLUGINID_AACD = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}};
+static const mfxPluginUID MFX_PLUGINID_AACE = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}};
+static const mfxPluginUID MFX_PLUGINID_HEVCE_FEI_HW = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}};
+static const mfxPluginUID MFX_PLUGINID_HEVC_FEI_ENCODE = {{0x54, 0x18, 0xa7, 0x06, 0x66, 0xf9, 0x4d, 0x5c, 0xb4, 0xf7, 0xb1, 0xca, 0xee, 0x86, 0x33, 0x9b}};
typedef enum {
typedef enum {
MFX_THREADPOLICY_SERIAL = 0,
- MFX_THREADPOLICY_PARALLEL = 1
+ MFX_THREADPOLICY_PARALLEL = 1
} mfxThreadPolicy;
typedef struct mfxPluginParam {
- mfxU32 reserved[6];
- mfxU16 reserved1;
- mfxU16 PluginVersion;
- mfxVersion APIVersion;
- mfxPluginUID PluginUID;
- mfxU32 Type;
- mfxU32 CodecId;
+ mfxU32 reserved[6];
+ mfxU16 reserved1;
+ mfxU16 PluginVersion;
+ mfxVersion APIVersion;
+ mfxPluginUID PluginUID;
+ mfxU32 Type;
+ mfxU32 CodecId;
mfxThreadPolicy ThreadPolicy;
- mfxU32 MaxThreadNum;
+ mfxU32 MaxThreadNum;
} mfxPluginParam;
typedef struct mfxCoreParam{
- mfxU32 reserved[13];
- mfxIMPL Impl;
+ mfxU32 reserved[13];
+ mfxIMPL Impl;
mfxVersion Version;
- mfxU32 NumWorkingThread;
+ mfxU32 NumWorkingThread;
} mfxCoreParam;
typedef struct mfxCoreInterface {
mfxStatus (MFX_CDECL *GetOpaqueSurface)(mfxHDL pthis, mfxFrameSurface1 *surf, mfxFrameSurface1 **op_surf);
mfxStatus (MFX_CDECL *CreateAccelerationDevice)(mfxHDL pthis, mfxHandleType type, mfxHDL *handle);
+ mfxStatus (MFX_CDECL *GetFrameHandle) (mfxHDL pthis, mfxFrameData *fd, mfxHDL *handle);
+ mfxStatus (MFX_CDECL *QueryPlatform) (mfxHDL pthis, mfxPlatform *platform);
- mfxHDL reserved4[3];
+ mfxHDL reserved4[1];
} mfxCoreInterface;
-/* video codec plugin extension*/
+/* video codec plugin extension */
typedef struct _mfxENCInput mfxENCInput;
typedef struct _mfxENCOutput mfxENCOutput;
typedef struct mfxVideoCodecPlugin{
mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out);
- mfxStatus (MFX_CDECL *QueryIOSurf)(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out);
+ mfxStatus (MFX_CDECL *QueryIOSurf)(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out);
mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxVideoParam *par);
mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxVideoParam *par);
mfxStatus (MFX_CDECL *Close)(mfxHDL pthis);
mfxStatus (MFX_CDECL *GetVideoParam)(mfxHDL pthis, mfxVideoParam *par);
mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task);
-
+
mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxVideoParam *par);
mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload);
mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task);
typedef struct mfxAudioCodecPlugin{
mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out);
- mfxStatus (MFX_CDECL *QueryIOSize)(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request);
+ mfxStatus (MFX_CDECL *QueryIOSize)(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request);
mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxAudioParam *par);
mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxAudioParam *par);
mfxStatus (MFX_CDECL *Close)(mfxHDL pthis);
mfxStatus (MFX_CDECL *GetAudioParam)(mfxHDL pthis, mfxAudioParam *par);
mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task);
-
+
mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par);
// mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload);
mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task);
mfxStatus MFX_CDECL MFXVideoUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par);
mfxStatus MFX_CDECL MFXVideoUSER_Unregister(mfxSession session, mfxU32 type);
+mfxStatus MFX_CDECL MFXVideoUSER_GetPlugin(mfxSession session, mfxU32 type, mfxPlugin *par);
mfxStatus MFX_CDECL MFXVideoUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp);
mfxStatus MFX_CDECL MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version);
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h
Changed
/******************************************************************************* *\
-Copyright (C) 2007-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
MFX_FOURCC_RGB4 = MFX_MAKEFOURCC('R','G','B','4'), /* ARGB in that order, A channel is 8 MSBs */
MFX_FOURCC_P8 = 41, /* D3DFMT_P8 */
MFX_FOURCC_P8_TEXTURE = MFX_MAKEFOURCC('P','8','M','B'),
- MFX_FOURCC_P010 = MFX_MAKEFOURCC('P','0','1','0'),
+ MFX_FOURCC_P010 = MFX_MAKEFOURCC('P','0','1','0'),
MFX_FOURCC_P210 = MFX_MAKEFOURCC('P','2','1','0'),
MFX_FOURCC_BGR4 = MFX_MAKEFOURCC('B','G','R','4'), /* ABGR in that order, A channel is 8 MSBs */
MFX_FOURCC_A2RGB10 = MFX_MAKEFOURCC('R','G','1','0'), /* ARGB in that order, A channel is two MSBs */
MFX_FOURCC_R16 = MFX_MAKEFOURCC('R','1','6','U'),
MFX_FOURCC_AYUV = MFX_MAKEFOURCC('A','Y','U','V'), /* YUV 4:4:4, AYUV in that order, A channel is 8 MSBs */
MFX_FOURCC_AYUV_RGB4 = MFX_MAKEFOURCC('A','V','U','Y'), /* ARGB in that order, A channel is 8 MSBs stored in AYUV surface*/
- MFX_FOURCC_UYVY = MFX_MAKEFOURCC('U','Y','V','Y')
+ MFX_FOURCC_UYVY = MFX_MAKEFOURCC('U','Y','V','Y'),
+ MFX_FOURCC_Y210 = MFX_MAKEFOURCC('Y','2','1','0'),
+ MFX_FOURCC_Y410 = MFX_MAKEFOURCC('Y','4','1','0'),
};
/* PicStruct */
MFX_PICSTRUCT_FIELD_REPEATED=0x10, /* first field repeated, pic_struct=5 or 6 in H.264 */
MFX_PICSTRUCT_FRAME_DOUBLING=0x20, /* pic_struct=7 in H.264 */
- MFX_PICSTRUCT_FRAME_TRIPLING=0x40 /* pic_struct=8 in H.264 */
+ MFX_PICSTRUCT_FRAME_TRIPLING=0x40, /* pic_struct=8 in H.264 */
+
+ MFX_PICSTRUCT_FIELD_SINGLE =0x100,
+ MFX_PICSTRUCT_FIELD_TOP =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_TFF,
+ MFX_PICSTRUCT_FIELD_BOTTOM =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_BFF,
+ MFX_PICSTRUCT_FIELD_PAIRED_PREV =0x200,
+ MFX_PICSTRUCT_FIELD_PAIRED_NEXT =0x400,
};
/* ColorFormat */
MFX_CHROMAFORMAT_YUV400 = MFX_CHROMAFORMAT_MONOCHROME,
MFX_CHROMAFORMAT_YUV411 = 4,
MFX_CHROMAFORMAT_YUV422H = MFX_CHROMAFORMAT_YUV422,
- MFX_CHROMAFORMAT_YUV422V = 5
+ MFX_CHROMAFORMAT_YUV422V = 5,
+ MFX_CHROMAFORMAT_RESERVED1 = 6
};
enum {
MFX_CORRUPTION_REFERENCE_LIST = 0x0020
};
+#pragma pack(push, 4)
+typedef struct
+{
+ mfxU32 U : 10;
+ mfxU32 Y : 10;
+ mfxU32 V : 10;
+ mfxU32 A : 2;
+} mfxY410;
+#pragma pack(pop)
+
+#pragma pack(push, 4)
+typedef struct
+{
+ mfxU32 B : 10;
+ mfxU32 G : 10;
+ mfxU32 R : 10;
+ mfxU32 A : 2;
+} mfxA2RGB10;
+#pragma pack(pop)
+
+
/* Frame Data Info */
typedef struct {
union {
};
mfxU16 NumExtParam;
- mfxU16 reserved[10];
+ mfxU16 reserved[9];
+ mfxU16 MemType;
mfxU16 PitchHigh;
mfxU64 TimeStamp;
mfxU8 *U;
mfxU16 *U16;
mfxU8 *G;
+ mfxY410 *Y410; /* for Y410 format (merged AVYU) */
};
union {
mfxU8 *Cr;
mfxU8 *V;
mfxU16 *V16;
mfxU8 *B;
+ mfxA2RGB10 *A2RGB10; /* for A2RGB10 format (merged ARGB) */
};
mfxU8 *A;
mfxMemId MemId;
mfxU16 NumThread;
union {
- struct { /* MPEG-2/H.264 Encoding Options */
+ struct { /* Encoding Options */
mfxU16 TargetUsage;
mfxU16 GopPicSize;
mfxU16 NumRefFrame;
mfxU16 EncodedOrder;
};
- struct { /* H.264, MPEG-2 and VC-1 Decoding Options */
+ struct { /* Decoding Options */
mfxU16 DecodedOrder;
mfxU16 ExtendedPicStruct;
mfxU16 TimeStampCalc;
mfxU16 SliceGroupsPresent;
mfxU16 MaxDecFrameBuffering;
- mfxU16 reserved2[8];
+ mfxU16 EnableReallocRequest;
+ mfxU16 reserved2[7];
};
struct { /* JPEG Decoding Options */
mfxU16 JPEGChromaFormat;
mfxU16 Rotation;
mfxU16 JPEGColorFormat;
mfxU16 InterleavedDec;
- mfxU16 reserved3[9];
+ mfxU8 SamplingFactorH[4];
+ mfxU8 SamplingFactorV[4];
+ mfxU16 reserved3[5];
};
struct { /* JPEG Encoding Options */
mfxU16 Interleaved;
MFX_CODEC_HEVC =MFX_MAKEFOURCC('H','E','V','C'),
MFX_CODEC_MPEG2 =MFX_MAKEFOURCC('M','P','G','2'),
MFX_CODEC_VC1 =MFX_MAKEFOURCC('V','C','1',' '),
- MFX_CODEC_CAPTURE =MFX_MAKEFOURCC('C','A','P','T')
+ MFX_CODEC_CAPTURE =MFX_MAKEFOURCC('C','A','P','T'),
+ MFX_CODEC_VP9 =MFX_MAKEFOURCC('V','P','9',' '),
+ MFX_CODEC_AV1 =MFX_MAKEFOURCC('A','V','1',' ')
};
/* CodecProfile, CodecLevel */
MFX_TIER_HEVC_MAIN = 0,
MFX_TIER_HEVC_HIGH = 0x100,
+
+ /* VP9 Profiles */
+ MFX_PROFILE_VP9_0 = 1,
+ MFX_PROFILE_VP9_1 = 2,
+ MFX_PROFILE_VP9_2 = 3,
+ MFX_PROFILE_VP9_3 = 4,
+
};
/* GopOptFlag */
MFX_RATECONTROL_LA_ICQ =11,
MFX_RATECONTROL_LA_EXT =12,
MFX_RATECONTROL_LA_HRD =13,
- MFX_RATECONTROL_QVBR =14
+ MFX_RATECONTROL_QVBR =14,
};
/* Trellis control*/
MFX_SKIPFRAME_BRC_ONLY = 3,
};
+/* Intra refresh types */
+enum {
+ MFX_REFRESH_NO = 0,
+ MFX_REFRESH_VERTICAL = 1,
+ MFX_REFRESH_HORIZONTAL = 2,
+ MFX_REFRESH_SLICE = 3
+};
+
typedef struct {
mfxExtBuffer Header;
MFX_P_REF_PYRAMID = 2
};
+
typedef struct {
mfxExtBuffer Header;
mfxU16 OverscanAppropriate; /* tri-state option */
mfxU16 TimingInfoPresent; /* tri-state option */
mfxU16 BitstreamRestriction; /* tri-state option */
- mfxU16 reserved1[4];
+ mfxU16 LowDelayHrd; /* tri-state option */
+ mfxU16 MotionVectorsOverPicBoundaries; /* tri-state option */
+ mfxU16 reserved1[2];
mfxU16 ScenarioInfo;
mfxU16 ContentInfo;
mfxU16 PRefType;
mfxU16 FadeDetection; /* tri-state option */
- mfxU16 reserved[225];
+ mfxU16 reserved2[2];
+ mfxU16 GPB; /* tri-state option */
+
+ mfxU32 MaxFrameSizeI;
+ mfxU32 MaxFrameSizeP;
+ mfxU32 reserved3[3];
+
+ mfxU16 EnableQPOffset; /* tri-state option */
+ mfxI16 QPOffset[8]; /* FrameQP = QPX + QPOffset[pyramid_layer]; QPX = QPB for B-pyramid, QPP for P-pyramid */
+
+ mfxU16 NumRefActiveP[8];
+ mfxU16 NumRefActiveBL0[8];
+ mfxU16 NumRefActiveBL1[8];
+
+ mfxU16 reserved6;
+ mfxU16 TransformSkip; /* tri-state option; HEVC transform_skip_enabled_flag */
+ mfxU16 TargetChromaFormatPlus1; /* Minus 1 specifies target encoding chroma format (see ColorFormat enum). May differ from input one. */
+ mfxU16 TargetBitDepthLuma; /* Target encoding bit depth for luma samples. May differ from input one. */
+ mfxU16 TargetBitDepthChroma; /* Target encoding bit depth for chroma samples. May differ from input one. */
+ mfxU16 BRCPanicMode; /* tri-state option */
+
+ mfxU16 LowDelayBRC; /* tri-state option */
+ mfxU16 EnableMBForceIntra; /* tri-state option */
+ mfxU16 AdaptiveMaxFrameSize; /* tri-state option */
+
+ mfxU16 RepartitionCheckEnable; /* tri-state option */
+ mfxU16 reserved5[3];
+ mfxU16 EncodedUnitsInfo; /* tri-state option */
+ mfxU16 EnableNalUnitType; /* tri-state option */
+ mfxU16 ExtBrcAdaptiveLTR; /* tri-state option for ExtBRC */
+ mfxU16 reserved[163];
} mfxExtCodingOption3;
/* IntraPredBlockSize/InterPredBlockSize */
MFX_BITSTREAM_COMPLETE_FRAME = 0x0001, /* the bitstream contains a complete frame or field pair of data */
MFX_BITSTREAM_EOS = 0x0002
};
-
/* Extended Buffer Ids */
enum {
- MFX_EXTBUFF_CODING_OPTION = MFX_MAKEFOURCC('C','D','O','P'),
- MFX_EXTBUFF_CODING_OPTION_SPSPPS = MFX_MAKEFOURCC('C','O','S','P'),
- MFX_EXTBUFF_VPP_DONOTUSE = MFX_MAKEFOURCC('N','U','S','E'),
- MFX_EXTBUFF_VPP_AUXDATA = MFX_MAKEFOURCC('A','U','X','D'),
- MFX_EXTBUFF_VPP_DENOISE = MFX_MAKEFOURCC('D','N','I','S'),
- MFX_EXTBUFF_VPP_SCENE_ANALYSIS = MFX_MAKEFOURCC('S','C','L','Y'),
- MFX_EXTBUFF_VPP_SCENE_CHANGE = MFX_EXTBUFF_VPP_SCENE_ANALYSIS,
- MFX_EXTBUFF_VPP_PROCAMP = MFX_MAKEFOURCC('P','A','M','P'),
- MFX_EXTBUFF_VPP_DETAIL = MFX_MAKEFOURCC('D','E','T',' '),
- MFX_EXTBUFF_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','S','I','N'),
- MFX_EXTBUFF_VPP_DOUSE = MFX_MAKEFOURCC('D','U','S','E'),
- MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION = MFX_MAKEFOURCC('O','P','Q','S'),
- MFX_EXTBUFF_AVC_REFLIST_CTRL = MFX_MAKEFOURCC('R','L','S','T'),
- MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION = MFX_MAKEFOURCC('F','R','C',' '),
- MFX_EXTBUFF_PICTURE_TIMING_SEI = MFX_MAKEFOURCC('P','T','S','E'),
- MFX_EXTBUFF_AVC_TEMPORAL_LAYERS = MFX_MAKEFOURCC('A','T','M','L'),
- MFX_EXTBUFF_CODING_OPTION2 = MFX_MAKEFOURCC('C','D','O','2'),
- MFX_EXTBUFF_VPP_IMAGE_STABILIZATION = MFX_MAKEFOURCC('I','S','T','B'),
- MFX_EXTBUFF_VPP_PICSTRUCT_DETECTION = MFX_MAKEFOURCC('I','D','E','T'),
- MFX_EXTBUFF_ENCODER_CAPABILITY = MFX_MAKEFOURCC('E','N','C','P'),
- MFX_EXTBUFF_ENCODER_RESET_OPTION = MFX_MAKEFOURCC('E','N','R','O'),
- MFX_EXTBUFF_ENCODED_FRAME_INFO = MFX_MAKEFOURCC('E','N','F','I'),
- MFX_EXTBUFF_VPP_COMPOSITE = MFX_MAKEFOURCC('V','C','M','P'),
- MFX_EXTBUFF_VPP_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','V','S','I'),
- MFX_EXTBUFF_ENCODER_ROI = MFX_MAKEFOURCC('E','R','O','I'),
- MFX_EXTBUFF_VPP_DEINTERLACING = MFX_MAKEFOURCC('V','P','D','I'),
- MFX_EXTBUFF_AVC_REFLISTS = MFX_MAKEFOURCC('R','L','T','S'),
- MFX_EXTBUFF_VPP_FIELD_PROCESSING = MFX_MAKEFOURCC('F','P','R','O'),
- MFX_EXTBUFF_CODING_OPTION3 = MFX_MAKEFOURCC('C','D','O','3'),
- MFX_EXTBUFF_CHROMA_LOC_INFO = MFX_MAKEFOURCC('C','L','I','N'),
- MFX_EXTBUFF_MBQP = MFX_MAKEFOURCC('M','B','Q','P'),
- MFX_EXTBUFF_HEVC_TILES = MFX_MAKEFOURCC('2','6','5','T'),
- MFX_EXTBUFF_MB_DISABLE_SKIP_MAP = MFX_MAKEFOURCC('M','D','S','M'),
- MFX_EXTBUFF_HEVC_PARAM = MFX_MAKEFOURCC('2','6','5','P'),
- MFX_EXTBUFF_DECODED_FRAME_INFO = MFX_MAKEFOURCC('D','E','F','I'),
- MFX_EXTBUFF_TIME_CODE = MFX_MAKEFOURCC('T','M','C','D'),
- MFX_EXTBUFF_HEVC_REGION = MFX_MAKEFOURCC('2','6','5','R'),
- MFX_EXTBUFF_PRED_WEIGHT_TABLE = MFX_MAKEFOURCC('E','P','W','T'),
- MFX_EXTBUFF_DIRTY_RECTANGLES = MFX_MAKEFOURCC('D','R','O','I'),
- MFX_EXTBUFF_MOVING_RECTANGLES = MFX_MAKEFOURCC('M','R','O','I'),
- MFX_EXTBUFF_CODING_OPTION_VPS = MFX_MAKEFOURCC('C','O','V','P'),
- MFX_EXTBUFF_VPP_ROTATION = MFX_MAKEFOURCC('R','O','T',' ')
+ MFX_EXTBUFF_CODING_OPTION = MFX_MAKEFOURCC('C','D','O','P'),
+ MFX_EXTBUFF_CODING_OPTION_SPSPPS = MFX_MAKEFOURCC('C','O','S','P'),
+ MFX_EXTBUFF_VPP_DONOTUSE = MFX_MAKEFOURCC('N','U','S','E'),
+ MFX_EXTBUFF_VPP_AUXDATA = MFX_MAKEFOURCC('A','U','X','D'),
+ MFX_EXTBUFF_VPP_DENOISE = MFX_MAKEFOURCC('D','N','I','S'),
+ MFX_EXTBUFF_VPP_SCENE_ANALYSIS = MFX_MAKEFOURCC('S','C','L','Y'),
+ MFX_EXTBUFF_VPP_SCENE_CHANGE = MFX_EXTBUFF_VPP_SCENE_ANALYSIS,
+ MFX_EXTBUFF_VPP_PROCAMP = MFX_MAKEFOURCC('P','A','M','P'),
+ MFX_EXTBUFF_VPP_DETAIL = MFX_MAKEFOURCC('D','E','T',' '),
+ MFX_EXTBUFF_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','S','I','N'),
+ MFX_EXTBUFF_VPP_DOUSE = MFX_MAKEFOURCC('D','U','S','E'),
+ MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION = MFX_MAKEFOURCC('O','P','Q','S'),
+ MFX_EXTBUFF_AVC_REFLIST_CTRL = MFX_MAKEFOURCC('R','L','S','T'),
+ MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION = MFX_MAKEFOURCC('F','R','C',' '),
+ MFX_EXTBUFF_PICTURE_TIMING_SEI = MFX_MAKEFOURCC('P','T','S','E'),
+ MFX_EXTBUFF_AVC_TEMPORAL_LAYERS = MFX_MAKEFOURCC('A','T','M','L'),
+ MFX_EXTBUFF_CODING_OPTION2 = MFX_MAKEFOURCC('C','D','O','2'),
+ MFX_EXTBUFF_VPP_IMAGE_STABILIZATION = MFX_MAKEFOURCC('I','S','T','B'),
+ MFX_EXTBUFF_VPP_PICSTRUCT_DETECTION = MFX_MAKEFOURCC('I','D','E','T'),
+ MFX_EXTBUFF_ENCODER_CAPABILITY = MFX_MAKEFOURCC('E','N','C','P'),
+ MFX_EXTBUFF_ENCODER_RESET_OPTION = MFX_MAKEFOURCC('E','N','R','O'),
+ MFX_EXTBUFF_ENCODED_FRAME_INFO = MFX_MAKEFOURCC('E','N','F','I'),
+ MFX_EXTBUFF_VPP_COMPOSITE = MFX_MAKEFOURCC('V','C','M','P'),
+ MFX_EXTBUFF_VPP_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','V','S','I'),
+ MFX_EXTBUFF_ENCODER_ROI = MFX_MAKEFOURCC('E','R','O','I'),
+ MFX_EXTBUFF_VPP_DEINTERLACING = MFX_MAKEFOURCC('V','P','D','I'),
+ MFX_EXTBUFF_AVC_REFLISTS = MFX_MAKEFOURCC('R','L','T','S'),
+ MFX_EXTBUFF_DEC_VIDEO_PROCESSING = MFX_MAKEFOURCC('D','E','C','V'),
+ MFX_EXTBUFF_VPP_FIELD_PROCESSING = MFX_MAKEFOURCC('F','P','R','O'),
+ MFX_EXTBUFF_CODING_OPTION3 = MFX_MAKEFOURCC('C','D','O','3'),
+ MFX_EXTBUFF_CHROMA_LOC_INFO = MFX_MAKEFOURCC('C','L','I','N'),
+ MFX_EXTBUFF_MBQP = MFX_MAKEFOURCC('M','B','Q','P'),
+ MFX_EXTBUFF_MB_FORCE_INTRA = MFX_MAKEFOURCC('M','B','F','I'),
+ MFX_EXTBUFF_HEVC_TILES = MFX_MAKEFOURCC('2','6','5','T'),
+ MFX_EXTBUFF_MB_DISABLE_SKIP_MAP = MFX_MAKEFOURCC('M','D','S','M'),
+ MFX_EXTBUFF_HEVC_PARAM = MFX_MAKEFOURCC('2','6','5','P'),
+ MFX_EXTBUFF_DECODED_FRAME_INFO = MFX_MAKEFOURCC('D','E','F','I'),
+ MFX_EXTBUFF_TIME_CODE = MFX_MAKEFOURCC('T','M','C','D'),
+ MFX_EXTBUFF_HEVC_REGION = MFX_MAKEFOURCC('2','6','5','R'),
+ MFX_EXTBUFF_PRED_WEIGHT_TABLE = MFX_MAKEFOURCC('E','P','W','T'),
+ MFX_EXTBUFF_DIRTY_RECTANGLES = MFX_MAKEFOURCC('D','R','O','I'),
+ MFX_EXTBUFF_MOVING_RECTANGLES = MFX_MAKEFOURCC('M','R','O','I'),
+ MFX_EXTBUFF_CODING_OPTION_VPS = MFX_MAKEFOURCC('C','O','V','P'),
+ MFX_EXTBUFF_VPP_ROTATION = MFX_MAKEFOURCC('R','O','T',' '),
+ MFX_EXTBUFF_ENCODED_SLICES_INFO = MFX_MAKEFOURCC('E','N','S','I'),
+ MFX_EXTBUFF_VPP_SCALING = MFX_MAKEFOURCC('V','S','C','L'),
+ MFX_EXTBUFF_HEVC_REFLIST_CTRL = MFX_EXTBUFF_AVC_REFLIST_CTRL,
+ MFX_EXTBUFF_HEVC_REFLISTS = MFX_EXTBUFF_AVC_REFLISTS,
+ MFX_EXTBUFF_HEVC_TEMPORAL_LAYERS = MFX_EXTBUFF_AVC_TEMPORAL_LAYERS,
+ MFX_EXTBUFF_VPP_MIRRORING = MFX_MAKEFOURCC('M','I','R','R'),
+ MFX_EXTBUFF_MV_OVER_PIC_BOUNDARIES = MFX_MAKEFOURCC('M','V','P','B'),
+ MFX_EXTBUFF_VPP_COLORFILL = MFX_MAKEFOURCC('V','C','L','F'),
+ MFX_EXTBUFF_DECODE_ERROR_REPORT = MFX_MAKEFOURCC('D', 'E', 'R', 'R'),
+ MFX_EXTBUFF_VPP_COLOR_CONVERSION = MFX_MAKEFOURCC('V', 'C', 'S', 'C'),
+ MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO = MFX_MAKEFOURCC('L', 'L', 'I', 'S'),
+ MFX_EXTBUFF_MASTERING_DISPLAY_COLOUR_VOLUME = MFX_MAKEFOURCC('D', 'C', 'V', 'S'),
+ MFX_EXTBUFF_MULTI_FRAME_PARAM = MFX_MAKEFOURCC('M', 'F', 'R', 'P'),
+ MFX_EXTBUFF_MULTI_FRAME_CONTROL = MFX_MAKEFOURCC('M', 'F', 'R', 'C'),
+ MFX_EXTBUFF_ENCODED_UNITS_INFO = MFX_MAKEFOURCC('E', 'N', 'U', 'I'),
+ MFX_EXTBUFF_VPP_MCTF = MFX_MAKEFOURCC('M', 'C', 'T', 'F'),
+ MFX_EXTBUFF_VP9_SEGMENTATION = MFX_MAKEFOURCC('9', 'S', 'E', 'G'),
+ MFX_EXTBUFF_VP9_TEMPORAL_LAYERS = MFX_MAKEFOURCC('9', 'T', 'M', 'L'),
+ MFX_EXTBUFF_VP9_PARAM = MFX_MAKEFOURCC('9', 'P', 'A', 'R'),
+ MFX_EXTBUFF_AVC_ROUNDING_OFFSET = MFX_MAKEFOURCC('R','N','D','O'),
};
/* VPP Conf: Do not use certain algorithms */
mfxU16 RepeatedFrame;
} mfxExtVppAuxData;
+/* CtrlFlags */
+enum {
+ MFX_PAYLOAD_CTRL_SUFFIX = 0x00000001 /* HEVC suffix SEI */
+};
+
typedef struct {
- mfxU32 reserved[4];
+ mfxU32 CtrlFlags;
+ mfxU32 reserved[3];
mfxU8 *Data; /* buffer pointer */
mfxU32 NumBit; /* number of bits */
mfxU16 Type; /* SEI message type in H.264 or user data start_code in MPEG-2 */
typedef struct {
mfxExtBuffer Header;
- mfxU32 reserved[5];
+ mfxU32 reserved[4];
+ mfxU16 reserved1;
+ mfxU16 MfxNalUnitType;
mfxU16 SkipFrame;
mfxU16 QP; /* per frame QP */
};
/* Frame Memory Types */
-#define MFX_MEMTYPE_BASE(x) (0xf0ff & (x))
+#define MFX_MEMTYPE_BASE(x) (0x90ff & (x))
enum {
MFX_MEMTYPE_DXVA2_DECODER_TARGET =0x0010,
MFX_MEMTYPE_FROM_DECODE = 0x0200,
MFX_MEMTYPE_FROM_VPPIN = 0x0400,
MFX_MEMTYPE_FROM_VPPOUT = 0x0800,
+ MFX_MEMTYPE_FROM_ENC = 0x2000,
+ MFX_MEMTYPE_FROM_PAK = 0x4000, //reserved
MFX_MEMTYPE_INTERNAL_FRAME = 0x0001,
MFX_MEMTYPE_EXTERNAL_FRAME = 0x0002,
MFX_MEMTYPE_OPAQUE_FRAME = 0x0004,
MFX_MEMTYPE_EXPORT_FRAME = 0x0008,
-
- MFX_MEMTYPE_RESERVED2 = 0x1000
+ MFX_MEMTYPE_SHARED_RESOURCE = MFX_MEMTYPE_EXPORT_FRAME,
+ MFX_MEMTYPE_VIDEO_MEMORY_ENCODER_TARGET = 0x1000
};
typedef struct {
MFX_FRAMETYPE_xIDR =0x8000
};
+enum {
+ MFX_HEVC_NALU_TYPE_UNKNOWN = 0,
+ MFX_HEVC_NALU_TYPE_TRAIL_N = ( 0+1),
+ MFX_HEVC_NALU_TYPE_TRAIL_R = ( 1+1),
+ MFX_HEVC_NALU_TYPE_RADL_N = ( 6+1),
+ MFX_HEVC_NALU_TYPE_RADL_R = ( 7+1),
+ MFX_HEVC_NALU_TYPE_RASL_N = ( 8+1),
+ MFX_HEVC_NALU_TYPE_RASL_R = ( 9+1),
+ MFX_HEVC_NALU_TYPE_IDR_W_RADL = (19+1),
+ MFX_HEVC_NALU_TYPE_IDR_N_LP = (20+1),
+ MFX_HEVC_NALU_TYPE_CRA_NUT = (21+1)
+};
+
typedef enum {
MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9 =1, /* IDirect3DDeviceManager9 */
MFX_HANDLE_D3D9_DEVICE_MANAGER = MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9,
MFX_HANDLE_RESERVED1 = 2,
MFX_HANDLE_D3D11_DEVICE = 3,
MFX_HANDLE_VA_DISPLAY = 4,
- MFX_HANDLE_RESERVED3 = 5
+ MFX_HANDLE_RESERVED3 = 5,
} mfxHandleType;
typedef enum {
mfxU16 reserved[11];
} mfxExtVPPImageStab;
+
+enum {
+ MFX_PAYLOAD_OFF = 0,
+ MFX_PAYLOAD_IDR = 1
+};
+
+typedef struct {
+ mfxExtBuffer Header;
+ mfxU16 reserved[15];
+
+ mfxU16 InsertPayloadToggle;
+ mfxU16 DisplayPrimariesX[3];
+ mfxU16 DisplayPrimariesY[3];
+ mfxU16 WhitePointX;
+ mfxU16 WhitePointY;
+ mfxU32 MaxDisplayMasteringLuminance;
+ mfxU32 MinDisplayMasteringLuminance;
+} mfxExtMasteringDisplayColourVolume;
+
+
+typedef struct {
+ mfxExtBuffer Header;
+ mfxU16 reserved[9];
+
+ mfxU16 InsertPayloadToggle;
+ mfxU16 MaxContentLightLevel;
+ mfxU16 MaxPicAverageLightLevel;
+} mfxExtContentLightLevelInfo;
+
+
typedef struct {
mfxExtBuffer Header;
mfxU32 reserved[14];
}Layer[8];
} mfxExtAvcTemporalLayers;
+
typedef struct {
mfxExtBuffer Header;
};
typedef struct {
- mfxExtBuffer Header;
+ mfxExtBuffer Header;
mfxU32 FrameOrder;
mfxU16 PicStruct;
mfxU16 reserved[2];
struct {
- mfxU32 FrameOrder;
- mfxU16 PicStruct;
- mfxU16 LongTermIdx;
- mfxU16 reserved[4];
+ mfxU32 FrameOrder;
+ mfxU16 PicStruct;
+ mfxU16 LongTermIdx;
+ mfxU16 reserved[4];
} UsedRefListL0[32], UsedRefListL1[32];
} mfxExtAVCEncodedFrameInfo;
typedef struct mfxVPPCompInputStream {
- mfxU32 DstX;
- mfxU32 DstY;
- mfxU32 DstW;
- mfxU32 DstH;
+ mfxU32 DstX;
+ mfxU32 DstY;
+ mfxU32 DstW;
+ mfxU32 DstH;
- mfxU16 LumaKeyEnable;
- mfxU16 LumaKeyMin;
- mfxU16 LumaKeyMax;
+ mfxU16 LumaKeyEnable;
+ mfxU16 LumaKeyMin;
+ mfxU16 LumaKeyMax;
- mfxU16 GlobalAlphaEnable;
- mfxU16 GlobalAlpha;
+ mfxU16 GlobalAlphaEnable;
+ mfxU16 GlobalAlpha;
+ mfxU16 PixelAlphaEnable;
- mfxU16 PixelAlphaEnable;
+ mfxU16 TileId;
- mfxU16 reserved2[18];
-} mfxVPPCompInputStream;
+ mfxU16 reserved2[17];
+} mfxVPPCompInputStream;
typedef struct {
mfxExtBuffer Header;
mfxU16 V;
mfxU16 B;
};
+ mfxU16 NumTiles;
+ mfxU16 reserved1[23];
- mfxU16 reserved1[24];
-
- mfxU16 NumInputStream;
- mfxVPPCompInputStream *InputStream;
+ mfxU16 NumInputStream;
+ mfxVPPCompInputStream *InputStream;
} mfxExtVPPComposite;
/* TransferMatrix */
mfxExtBuffer Header;
mfxU16 reserved1[4];
- struct {
- mfxU16 TransferMatrix;
- mfxU16 NominalRange;
- mfxU16 reserved2[6];
- } In, Out;
+ union {
+ struct { // Init
+ struct {
+ mfxU16 TransferMatrix;
+ mfxU16 NominalRange;
+ mfxU16 reserved2[6];
+ } In, Out;
+ };
+ struct { // Runtime
+ mfxU16 TransferMatrix;
+ mfxU16 NominalRange;
+ mfxU16 reserved3[14];
+ };
+ };
} mfxExtVPPVideoSignalInfo;
+/* ROI encoding mode */
+enum {
+ MFX_ROI_MODE_PRIORITY = 0,
+ MFX_ROI_MODE_QP_DELTA = 1
+};
+
typedef struct {
mfxExtBuffer Header;
mfxU16 NumROI;
- mfxU16 reserved1[11];
+ mfxU16 ROIMode;
+ mfxU16 reserved1[10];
struct {
mfxU32 Left;
mfxU32 Top;
mfxU32 Right;
mfxU32 Bottom;
-
- mfxI16 Priority;
+ union {
+ mfxI16 Priority;
+ mfxI16 DeltaQP;
+ };
mfxU16 reserved2[7];
} ROI[256];
} mfxExtEncoderROI;
MFX_DEINTERLACING_FIXED_TELECINE_PATTERN = 8,
MFX_DEINTERLACING_30FPS_OUT = 9,
MFX_DEINTERLACING_DETECT_INTERLACE = 10,
- MFX_DEINTERLACING_ADVANCED_NOREF = 11
+ MFX_DEINTERLACING_ADVANCED_NOREF = 11,
+ MFX_DEINTERLACING_ADVANCED_SCD = 12,
+ MFX_DEINTERLACING_FIELD_WEAVING = 13
};
/*TelecinePattern*/
} mfxExtVPPFieldProcessing;
typedef struct {
+ mfxExtBuffer Header;
+
+ struct mfxIn{
+ mfxU16 CropX;
+ mfxU16 CropY;
+ mfxU16 CropW;
+ mfxU16 CropH;
+ mfxU16 reserved[12];
+ }In;
+
+ struct mfxOut{
+ mfxU32 FourCC;
+ mfxU16 ChromaFormat;
+ mfxU16 reserved1;
+
+ mfxU16 Width;
+ mfxU16 Height;
+
+ mfxU16 CropX;
+ mfxU16 CropY;
+ mfxU16 CropW;
+ mfxU16 CropH;
+ mfxU16 reserved[22];
+ }Out;
+
+ mfxU16 reserved[13];
+} mfxExtDecVideoProcessing;
+
+typedef struct {
mfxExtBuffer Header;
mfxU16 ChromaLocInfoPresentFlag;
mfxU16 reserved[9];
} mfxExtChromaLocInfo;
+/* MBQPMode */
+enum {
+ MFX_MBQP_MODE_QP_VALUE = 0, // supported in CQP mode only
+ MFX_MBQP_MODE_QP_DELTA = 1
+};
+
typedef struct {
mfxExtBuffer Header;
- mfxU32 reserved[11];
- mfxU32 NumQPAlloc;
+ mfxU32 reserved[10];
+ mfxU16 Mode; // see MBQPMode enum
+ mfxU16 BlockSize; // QP block size, valid for HEVC only during Init and Runtime
+ mfxU32 NumQPAlloc; // Size of allocated by application QP or DeltaQP array
union {
- mfxU8 *QP;
+ mfxU8 *QP; // Block QP value. Valid when Mode = MFX_MBQP_MODE_QP_VALUE
+ mfxI8 *DeltaQP; // For block i: QP[i] = BrcQP[i] + DeltaQP[i]. Valid when Mode = MFX_MBQP_MODE_QP_DELTA
mfxU64 reserved2;
};
} mfxExtMBQP;
typedef struct {
mfxExtBuffer Header;
+ mfxU32 reserved[11];
+ mfxU32 MapSize;
+ union {
+ mfxU8 *Map;
+ mfxU64 reserved2;
+ };
+} mfxExtMBForceIntra;
+
+typedef struct {
+ mfxExtBuffer Header;
+
mfxU16 NumTileRows;
mfxU16 NumTileColumns;
mfxU16 reserved[74];
typedef struct {
mfxExtBuffer Header;
-
+
mfxU32 reserved[11];
mfxU32 MapSize;
union {
};
} mfxExtMBDisableSkipMap;
+
/*GeneralConstraintFlags*/
enum {
/* REXT Profile constraint flags*/
MFX_HEVC_CONSTR_REXT_LOWER_BIT_RATE = (1 << 8)
};
+
+/* SampleAdaptiveOffset */
+enum {
+ MFX_SAO_UNKNOWN = 0x00,
+ MFX_SAO_DISABLE = 0x01,
+ MFX_SAO_ENABLE_LUMA = 0x02,
+ MFX_SAO_ENABLE_CHROMA = 0x04
+};
+
+
#pragma pack(push, 4)
typedef struct {
mfxExtBuffer Header;
mfxU16 PicWidthInLumaSamples;
mfxU16 PicHeightInLumaSamples;
mfxU64 GeneralConstraintFlags;
- mfxU16 reserved[118];
+ mfxU16 SampleAdaptiveOffset; /* see enum SampleAdaptiveOffset, valid during Init and Runtime */
+ mfxU16 LCUSize;
+ mfxU16 reserved[116];
} mfxExtHEVCParam;
#pragma pack(pop)
+/*ErrorTypes in mfxExtDecodeErrorReport*/
+enum {
+ MFX_ERROR_PPS = (1 << 0),
+ MFX_ERROR_SPS = (1 << 1),
+ MFX_ERROR_SLICEHEADER = (1 << 2),
+ MFX_ERROR_SLICEDATA = (1 << 3),
+ MFX_ERROR_FRAME_GAP = (1 << 4),
+};
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU32 ErrorTypes;
+ mfxU16 reserved[10];
+} mfxExtDecodeErrorReport;
+
+
typedef struct {
mfxExtBuffer Header;
typedef struct {
mfxExtBuffer Header;
+ mfxU16 EnableRoundingIntra; // tri-state option
+ mfxU16 RoundingOffsetIntra; // valid value [0,7]
+ mfxU16 EnableRoundingInter; // tri-state option
+ mfxU16 RoundingOffsetInter; // valid value [0,7]
+
+ mfxU16 reserved[24];
+} mfxExtAVCRoundingOffset;
+
+
+typedef struct {
+ mfxExtBuffer Header;
+
mfxU16 NumRect;
mfxU16 reserved1[11];
} Rect[256];
} mfxExtMoveRect;
+
/* Angle */
enum {
MFX_ANGLE_0 = 0,
mfxU16 reserved[11];
} mfxExtVPPRotation;
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 SliceSizeOverflow;
+ mfxU16 NumSliceNonCopliant;
+ mfxU16 NumEncodedSlice;
+ mfxU16 NumSliceSizeAlloc;
+ union {
+ mfxU16 *SliceSize;
+ mfxU64 reserved1;
+ };
+
+ mfxU16 reserved[20];
+} mfxExtEncodedSlicesInfo;
+
+/* ScalingMode */
+enum {
+ MFX_SCALING_MODE_DEFAULT = 0,
+ MFX_SCALING_MODE_LOWPOWER = 1,
+ MFX_SCALING_MODE_QUALITY = 2
+};
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 ScalingMode;
+ mfxU16 reserved[11];
+} mfxExtVPPScaling;
+
+
+typedef mfxExtAVCRefListCtrl mfxExtHEVCRefListCtrl;
+typedef mfxExtAVCRefLists mfxExtHEVCRefLists;
+typedef mfxExtAvcTemporalLayers mfxExtHEVCTemporalLayers;
+
+/* MirroringType */
+enum
+{
+ MFX_MIRRORING_DISABLED = 0,
+ MFX_MIRRORING_HORIZONTAL = 1,
+ MFX_MIRRORING_VERTICAL = 2
+};
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 Type;
+ mfxU16 reserved[11];
+} mfxExtVPPMirroring;
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 StickTop; /* tri-state option */
+ mfxU16 StickBottom; /* tri-state option */
+ mfxU16 StickLeft; /* tri-state option */
+ mfxU16 StickRight; /* tri-state option */
+ mfxU16 reserved[8];
+} mfxExtMVOverPicBoundaries;
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 Enable; /* tri-state option */
+ mfxU16 reserved[11];
+} mfxExtVPPColorFill;
+
+
+/* ChromaSiting */
+enum {
+ MFX_CHROMA_SITING_UNKNOWN = 0x0000,
+ MFX_CHROMA_SITING_VERTICAL_TOP = 0x0001, /* Chroma samples are co-sited vertically on the top with the luma samples. */
+ MFX_CHROMA_SITING_VERTICAL_CENTER = 0x0002, /* Chroma samples are not co-sited vertically with the luma samples. */
+ MFX_CHROMA_SITING_VERTICAL_BOTTOM = 0x0004, /* Chroma samples are co-sited vertically on the bottom with the luma samples. */
+ MFX_CHROMA_SITING_HORIZONTAL_LEFT = 0x0010, /* Chroma samples are co-sited horizontally on the left with the luma samples. */
+ MFX_CHROMA_SITING_HORIZONTAL_CENTER = 0x0020 /* Chroma samples are not co-sited horizontally with the luma samples. */
+};
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 ChromaSiting;
+ mfxU16 reserved[27];
+} mfxExtColorConversion;
+
+
+/* VP9ReferenceFrame */
+enum {
+ MFX_VP9_REF_INTRA = 0,
+ MFX_VP9_REF_LAST = 1,
+ MFX_VP9_REF_GOLDEN = 2,
+ MFX_VP9_REF_ALTREF = 3
+};
+
+/* SegmentIdBlockSize */
+enum {
+ MFX_VP9_SEGMENT_ID_BLOCK_SIZE_UNKNOWN = 0,
+ MFX_VP9_SEGMENT_ID_BLOCK_SIZE_8x8 = 8,
+ MFX_VP9_SEGMENT_ID_BLOCK_SIZE_16x16 = 16,
+ MFX_VP9_SEGMENT_ID_BLOCK_SIZE_32x32 = 32,
+ MFX_VP9_SEGMENT_ID_BLOCK_SIZE_64x64 = 64,
+};
+
+/* SegmentFeature */
+enum {
+ MFX_VP9_SEGMENT_FEATURE_QINDEX = 0x0001,
+ MFX_VP9_SEGMENT_FEATURE_LOOP_FILTER = 0x0002,
+ MFX_VP9_SEGMENT_FEATURE_REFERENCE = 0x0004,
+ MFX_VP9_SEGMENT_FEATURE_SKIP = 0x0008 /* (0,0) MV, no residual */
+};
+
+typedef struct {
+ mfxU16 FeatureEnabled; /* see enum SegmentFeature */
+ mfxI16 QIndexDelta;
+ mfxI16 LoopFilterLevelDelta;
+ mfxU16 ReferenceFrame; /* see enum VP9ReferenceFrame */
+ mfxU16 reserved[12];
+} mfxVP9SegmentParam;
+
+typedef struct {
+ mfxExtBuffer Header;
+ mfxU16 NumSegments; /* 0..8 */
+ mfxVP9SegmentParam Segment[8];
+ mfxU16 SegmentIdBlockSize; /* see enum SegmentIdBlockSize */
+ mfxU32 NumSegmentIdAlloc; /* >= (Ceil(Width / SegmentIdBlockSize) * Ceil(Height / SegmentIdBlockSize)) */
+ union {
+ mfxU8 *SegmentId; /*[NumSegmentIdAlloc] = 0..7, index in Segment array, blocks of SegmentIdBlockSize map */
+ mfxU64 reserved1;
+ };
+ mfxU16 reserved[52];
+} mfxExtVP9Segmentation;
+
+typedef struct {
+ mfxU16 FrameRateScale; /* Layer[n].FrameRateScale = Layer[n - 1].FrameRateScale * (uint)m */
+ mfxU16 TargetKbps; /* affected by BRCParamMultiplier, Layer[n].TargetKbps > Layer[n - 1].TargetKbps */
+ mfxU16 reserved[14];
+} mfxVP9TemporalLayer;
+
+typedef struct {
+ mfxExtBuffer Header;
+ mfxVP9TemporalLayer Layer[8];
+ mfxU16 reserved[60];
+} mfxExtVP9TemporalLayers;
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 FrameWidth;
+ mfxU16 FrameHeight;
+
+ mfxU16 WriteIVFHeaders; /* tri-state option */
+
+ mfxI16 reserved1[6];
+ mfxI16 QIndexDeltaLumaDC;
+ mfxI16 QIndexDeltaChromaAC;
+ mfxI16 QIndexDeltaChromaDC;
+ mfxU16 reserved[112];
+} mfxExtVP9Param;
+
+
+/* Multi-Frame Mode */
+enum {
+ MFX_MF_DEFAULT = 0,
+ MFX_MF_DISABLED = 1,
+ MFX_MF_AUTO = 2,
+ MFX_MF_MANUAL = 3
+};
+
+/* Multi-Frame Initialization parameters */
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU16 MFMode;
+ mfxU16 MaxNumFrames;
+
+ mfxU16 reserved[58];
+} mfxExtMultiFrameParam;
+
+/* Multi-Frame Run-time controls */
+typedef struct {
+ mfxExtBuffer Header;
+
+ mfxU32 Timeout; /* timeout in millisecond */
+ mfxU16 Flush; /* Flush internal frame buffer, e.g. submit all collected frames. */
+
+ mfxU16 reserved[57];
+} mfxExtMultiFrameControl;
+
+typedef struct {
+ mfxU16 Type;
+ mfxU16 reserved1;
+ mfxU32 Offset;
+ mfxU32 Size;
+ mfxU32 reserved[5];
+} mfxEncodedUnitInfo;
+
+typedef struct {
+ mfxExtBuffer Header;
+
+ union {
+ mfxEncodedUnitInfo *UnitInfo;
+ mfxU64 reserved1;
+ };
+ mfxU16 NumUnitsAlloc;
+ mfxU16 NumUnitsEncoded;
+
+ mfxU16 reserved[22];
+} mfxExtEncodedUnitsInfo;
+
+
+
+/* MCTF initialization & runtime */
+typedef struct {
+ mfxExtBuffer Header;
+ mfxU16 FilterStrength;
+ mfxU16 reserved[27];
+} mfxExtVppMctf;
+
+
#ifdef __cplusplus
} // extern "C"
#endif
#endif
-
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo++.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo++.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2007-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
virtual mfxStatus SetFrameAllocator(mfxFrameAllocator *allocator) { return MFXVideoCORE_SetFrameAllocator(m_session, allocator); }
virtual mfxStatus SetHandle(mfxHandleType type, mfxHDL hdl) { return MFXVideoCORE_SetHandle(m_session, type, hdl); }
virtual mfxStatus GetHandle(mfxHandleType type, mfxHDL *hdl) { return MFXVideoCORE_GetHandle(m_session, type, hdl); }
+ virtual mfxStatus QueryPlatform(mfxPlatform* platform) { return MFXVideoCORE_QueryPlatform(m_session, platform); }
virtual mfxStatus SyncOperation(mfxSyncPoint syncp, mfxU32 wait) { return MFXVideoCORE_SyncOperation(m_session, syncp, wait); }
virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoENC_Reset(m_session, par); }
virtual mfxStatus Close(void) { return MFXVideoENC_Close(m_session); }
+ virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENC_GetVideoParam(m_session, par); }
virtual mfxStatus ProcessFrameAsync(mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp) { return MFXVideoENC_ProcessFrameAsync(m_session, in, out, syncp); }
protected:
virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoPAK_Reset(m_session, par); }
virtual mfxStatus Close(void) { return MFXVideoPAK_Close(m_session); }
- //virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENCODE_GetVideoParam(m_session, par); }
+ virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoPAK_GetVideoParam(m_session, par); }
//virtual mfxStatus GetEncodeStat(mfxEncodeStat *stat) { return MFXVideoENCODE_GetEncodeStat(m_session, stat); }
virtual mfxStatus ProcessFrameAsync(mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp) { return MFXVideoPAK_ProcessFrameAsync(m_session, in, out, syncp); }
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo.h -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo.h
Changed
/* ****************************************************************************** *\
-Copyright (C) 2007-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2007-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfxsession.h"
#include "mfxvstructures.h"
-#define MFX_VERSION_MAJOR 1
-#define MFX_VERSION_MINOR 17
-
#ifdef __cplusplus
extern "C"
{
mfxStatus MFX_CDECL MFXVideoCORE_SetFrameAllocator(mfxSession session, mfxFrameAllocator *allocator);
mfxStatus MFX_CDECL MFXVideoCORE_SetHandle(mfxSession session, mfxHandleType type, mfxHDL hdl);
mfxStatus MFX_CDECL MFXVideoCORE_GetHandle(mfxSession session, mfxHandleType type, mfxHDL *hdl);
+mfxStatus MFX_CDECL MFXVideoCORE_QueryPlatform(mfxSession session, mfxPlatform* platform);
mfxStatus MFX_CDECL MFXVideoCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait);
/* VideoENCODE */
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/main.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/main.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
\* ****************************************************************************** */
+#include <new>
+#include <memory>
+
#include "mfx_dispatcher.h"
#include "mfx_load_dll.h"
#include "mfx_dispatcher_log.h"
#include "mfx_critical_section.h"
#include <string.h> /* for memset on Linux */
-#include <memory>
+
#include <stdlib.h> /* for qsort on Linux */
#include "mfx_load_plugin.h"
#include "mfx_plugin_hive.h"
{MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE3, 2},
{MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE4, 3},
{MFX_LIB_SOFTWARE, MFX_IMPL_SOFTWARE, 0},
- {MFX_LIB_SOFTWARE, MFX_IMPL_SOFTWARE | MFX_IMPL_AUDIO, 0}
+ {MFX_LIB_SOFTWARE, MFX_IMPL_SOFTWARE | MFX_IMPL_AUDIO, 0},
};
const
mfxU32 maxIndex;
} implTypesRange[] =
- {
- {0, 1}, // MFX_IMPL_AUTO
- {1, 1}, // MFX_IMPL_SOFTWARE
- {0, 0}, // MFX_IMPL_HARDWARE
- {2, 6}, // MFX_IMPL_AUTO_ANY
- {2, 5}, // MFX_IMPL_HARDWARE_ANY
- {3, 3}, // MFX_IMPL_HARDWARE2
- {4, 4}, // MFX_IMPL_HARDWARE3
+ {
+ {0, 1}, // MFX_IMPL_AUTO
+ {1, 1}, // MFX_IMPL_SOFTWARE
+ {0, 0}, // MFX_IMPL_HARDWARE
+ {2, 6}, // MFX_IMPL_AUTO_ANY
+ {2, 5}, // MFX_IMPL_HARDWARE_ANY
+ {3, 3}, // MFX_IMPL_HARDWARE2
+ {4, 4}, // MFX_IMPL_HARDWARE3
{5, 5}, // MFX_IMPL_HARDWARE4
{2, 6}, // MFX_IMPL_RUNTIME, same as MFX_IMPL_HARDWARE_ANY
+ {8, 11}, // MFX_SINGLE_THREAD,
{7, 7} // MFX_IMPL_AUDIO
};
} // namespace
using namespace MFX;
+
+#if defined(MEDIASDK_UWP_LOADER)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+ //
+ // intel_gfx_api-*.dll calls these functions to do not mix MFXInitEx exposed
+ // from dispatcher_proc_table.lib with the libmfx[hw/sw] engines' call MFXInitEx
+ //
+
+ mfxStatus InitMediaSDKSession(mfxInitParam par, mfxSession* session)
+ {
+ return MFXInitEx(par, session);
+ }
+
+ mfxStatus DisposeMediaSDKSession(mfxSession session)
+ {
+ return MFXClose(session);
+ }
+
+#ifdef __cplusplus
+}; //extern "C"
+#endif /* __cplusplus */
+
+#endif // defined(MEDIASDK_UWP_LOADER)
+
+#if !defined(MEDIASDK_UWP_PROCTABLE)
+
//
// Implement DLL exposed functions. MFXInit and MFXClose have to do
// slightly more than other. They require to be implemented explicitly.
VectorHandleGuard(HandleVector& aVector): m_vector(aVector) {}
~VectorHandleGuard()
{
- HandleVector::iterator it = m_vector.begin(),
+ HandleVector::iterator it = m_vector.begin(),
et = m_vector.end();
for ( ; it != et; ++it)
{
const MFX_DISP_HANDLE * lhs = *(const MFX_DISP_HANDLE **)plhs;
const MFX_DISP_HANDLE * rhs = *(const MFX_DISP_HANDLE **)prhs;
- if (lhs->actualApiVersion < rhs->actualApiVersion)
+ if (lhs->actualApiVersion < rhs->actualApiVersion)
{
return -1;
}
- if (rhs->actualApiVersion < lhs->actualApiVersion)
+ if (rhs->actualApiVersion < lhs->actualApiVersion)
{
return 1;
}
- // if versions are equal prefer library with HW
+ // if versions are equal prefer library with HW
if (lhs->loadStatus == MFX_WRN_PARTIAL_ACCELERATION && rhs->loadStatus == MFX_ERR_NONE)
{
return 1;
return 0;
}
-mfxStatus MFXInit(mfxIMPL impl, mfxVersion *pVer, mfxSession *session)
-{
- mfxInitParam par = {};
-
- par.Implementation = impl;
- if (pVer)
- {
- par.Version = *pVer;
- }
- else
- {
- par.Version.Major = DEFAULT_API_VERSION_MAJOR;
- par.Version.Minor = DEFAULT_API_VERSION_MINOR;
- }
- par.ExternalThreads = 0;
-
- return MFXInitEx(par, session);
-}
+// for LEGACY and UWP_LOADER purposes implementation of MFXinitEx is traditionally loading
+// required libmfx*.dll and fill the array of API functions' with corresponded pointers to instantiated libmfx*.dll
mfxStatus MFXInitEx(mfxInitParam par, mfxSession *session)
{
VectorHandleGuard handleGuard(allocatedHandle);
MFX_DISP_HANDLE *pHandle;
- msdk_disp_char dllName[MFX_MAX_DLL_PATH];
+ msdk_disp_char dllName[MFX_MAX_DLL_PATH] = { 0 };
MFX::MFXLibraryIterator libIterator;
+
// there iterators are used only if the caller specified implicit type like AUTO
mfxU32 curImplIdx, maxImplIdx;
// particular implementation value
// Load HW library or RT from system location
curImplIdx = implTypesRange[implMethod].minIndex;
maxImplIdx = implTypesRange[implMethod].maxIndex;
- mfxU32 hwImplIdx = 0;
do
{
int currentStorage = MFX::MFX_STORAGE_ID_FIRST;
do
{
// initialize the library iterator
- mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
+ mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
implInterface,
implTypes[curImplIdx].adapterID,
currentStorage);
if (
MFX_LIB_HARDWARE == implTypes[curImplIdx].implType
- && (!implInterface
+ && (!implInterface
|| MFX_IMPL_VIA_ANY == implInterface))
{
implInterface = libIterator.GetImplementationType();
do
{
- eMfxImplType implType;
+ eMfxImplType implType = implTypes[curImplIdx].implType;
// select a desired DLL
mfxRes = libIterator.SelectDLLVersion(dllName,
break;
}
DISPATCHER_LOG_INFO((("loading library %S\n"), MSDK2WIDE(dllName)));
- if (MFX_LIB_HARDWARE == implTypes[curImplIdx].implType)
- hwImplIdx = curImplIdx;
// try to load the selected DLL
curImpl = implTypes[curImplIdx].impl;
mfxRes = pHandle->LoadSelectedDLL(dllName, implType, curImpl, implInterface, par);
}
else
{
- libIterator.GetSubKeyName(pHandle->subkeyName, sizeof(pHandle->subkeyName)/sizeof(pHandle->subkeyName[0])) ;
+ libIterator.GetSubKeyName(pHandle->subkeyName, sizeof(pHandle->subkeyName) / sizeof(pHandle->subkeyName[0]));
pHandle->storageID = libIterator.GetStorageID();
allocatedHandle.push_back(pHandle);
pHandle = new MFX_DISP_HANDLE(requiredVersion);
} while (MFX_ERR_NONE != mfxRes);
}
- // select another registry key
+ // select another place for loading engine
currentStorage += 1;
} while ((MFX_ERR_NONE != mfxRes) && (MFX::MFX_STORAGE_ID_LAST >= currentStorage));
curImplIdx = implTypesRange[implMethod].minIndex;
maxImplIdx = implTypesRange[implMethod].maxIndex;
+ // SOLID dispatcher checks if there are other available media sdk engines implementations in working dir
+ // UWP dispatcher does not use libraries other than in System32 folder
+#if !defined(MEDIASDK_UWP_LOADER)
// Load RT from app folder (libmfxsw64 with API >= 1.10)
do
{
implInterface = implInterfaceOrig;
// initialize the library iterator
- mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
+ mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
implInterface,
implTypes[curImplIdx].adapterID,
MFX::MFX_APP_FOLDER);
if (
MFX_LIB_HARDWARE == implTypes[curImplIdx].implType
- && (!implInterface
+ && (!implInterface
|| MFX_IMPL_VIA_ANY == implInterface))
{
implInterface = libIterator.GetImplementationType();
}
} while ((MFX_ERR_NONE != mfxRes) && (++curImplIdx <= maxImplIdx));
+#endif // !defined(MEDIASDK_UWP_LOADER)
+
// Load HW and SW libraries using legacy default DLL search mechanism
// set current library index again
curImplIdx = implTypesRange[implMethod].minIndex;
do
{
- mfxU32 backupIdx = curImplIdx;
- if (MFX_LIB_HARDWARE == implTypes[curImplIdx].implType)
- {
- curImplIdx = hwImplIdx;
- }
implInterface = implInterfaceOrig;
-
+
if (par.Implementation & MFX_IMPL_AUDIO)
{
mfxRes = MFX::mfx_get_default_audio_dll_name(dllName,
// try to load the selected DLL using default DLL search mechanism
if (MFX_LIB_HARDWARE == implTypes[curImplIdx].implType)
{
- if (!implInterface)
+ if (!implInterface)
{
implInterface = MFX_IMPL_VIA_ANY;
}
- mfxRes = MFX::SelectImplementationType(implTypes[curImplIdx].adapterID, &implInterface, NULL, NULL);
+ mfxU32 curVendorID = 0, curDeviceID = 0;
+ mfxRes = MFX::SelectImplementationType(implTypes[curImplIdx].adapterID, &implInterface, &curVendorID, &curDeviceID);
+ if (curVendorID != INTEL_VENDOR_ID)
+ mfxRes = MFX_ERR_UNKNOWN;
}
if (MFX_ERR_NONE == mfxRes)
{
pHandle->Close();
}
else
- {
+ {
pHandle->storageID = MFX::MFX_UNKNOWN_KEY;
allocatedHandle.push_back(pHandle);
pHandle = new MFX_DISP_HANDLE(requiredVersion);
}
}
- curImplIdx = backupIdx;
}
while ((MFX_ERR_NONE > mfxRes) && (++curImplIdx <= maxImplIdx));
delete pHandle;
if (allocatedHandle.size() == 0)
return MFX_ERR_UNSUPPORTED;
- bool NeedSort = false;
- HandleVector::iterator first = allocatedHandle.begin(),
- it = allocatedHandle.begin(),
- et = allocatedHandle.end();
- for (it++; it != et; ++it)
- if (HandleSort(&(*first), &(*it)) != 0)
- NeedSort = true;
-
- // select dll with version with lowest version number still greater or equal to requested
- if (NeedSort)
- qsort(&(*allocatedHandle.begin()), allocatedHandle.size(), sizeof(MFX_DISP_HANDLE*), &HandleSort);
-
+ { // sort candidate list
+ bool NeedSort = false;
+ HandleVector::iterator first = allocatedHandle.begin(),
+ it = allocatedHandle.begin(),
+ et = allocatedHandle.end();
+ for (it++; it != et; ++it)
+ if (HandleSort(&(*first), &(*it)) != 0)
+ NeedSort = true;
+
+ // select dll with version with lowest version number still greater or equal to requested
+ if (NeedSort)
+ qsort(&(*allocatedHandle.begin()), allocatedHandle.size(), sizeof(MFX_DISP_HANDLE*), &HandleSort);
+ }
HandleVector::iterator candidate = allocatedHandle.begin();
// check the final result of loading
- try
+ try
{
pHandle = *candidate;
//pulling up current mediasdk version, that required to match plugin version
- mfxVersion apiVerActual;
- mfxStatus stsQueryVersion;
- stsQueryVersion = MFXQueryVersion((mfxSession)pHandle, &apiVerActual);
- if (MFX_ERR_NONE != stsQueryVersion)
+ mfxVersion apiVerActual = { 0 };
+ mfxStatus stsQueryVersion = MFXQueryVersion((mfxSession)pHandle, &apiVerActual);
+
+ if (MFX_ERR_NONE != stsQueryVersion)
{
DISPATCHER_LOG_ERROR((("MFXQueryVersion returned: %d, cannot load plugins\n"), mfxRes))
}
}
//setting up plugins records
- for(int i = MFX::MFX_STORAGE_ID_FIRST; i <= MFX::MFX_STORAGE_ID_LAST; i++)
+ for(int i = MFX::MFX_STORAGE_ID_FIRST; i <= MFX::MFX_STORAGE_ID_LAST; i++)
{
MFX::MFXPluginsInHive plgsInHive(i, NULL, apiVerActual);
hive.insert(hive.end(), plgsInHive.begin(), plgsInHive.end());
}
+#if defined(MEDIASDK_USE_CFGFILES) || !defined(MEDIASDK_UWP_LOADER)
+ // SOLID dispatcher also loads plug-ins from file system
MFX::MFXPluginsInFS plgsInFS(apiVerActual);
hive.insert(hive.end(), plgsInFS.begin(), plgsInFS.end());
+#endif // defined(MEDIASDK_USE_CFGFILES) || !defined(MEDIASDK_UWP_LOADER)
}
+
+ // UWP dispatcher uses stubs
+ pHandle->callPlugInsTable[eMFXVideoUSER_Load] = (mfxFunctionPointer)MFXVideoUSER_Load;
+ pHandle->callPlugInsTable[eMFXVideoUSER_LoadByPath] = (mfxFunctionPointer)MFXVideoUSER_LoadByPath;
+ pHandle->callPlugInsTable[eMFXVideoUSER_UnLoad] = (mfxFunctionPointer)MFXVideoUSER_UnLoad;
+ pHandle->callPlugInsTable[eMFXAudioUSER_Load] = (mfxFunctionPointer)MFXAudioUSER_Load;
+ pHandle->callPlugInsTable[eMFXAudioUSER_UnLoad] = (mfxFunctionPointer)MFXAudioUSER_UnLoad;
+
}
catch(...)
{
}
// everything is OK. Save pointers to the output variable
- *candidate = 0; // keep this one safe from guard destructor
+ *candidate = 0; // keep this one safe from guard destructor
*((MFX_DISP_HANDLE **) session) = pHandle;
return pHandle->loadStatus;
-} // mfxStatus MFXInit(mfxIMPL impl, mfxVersion *ver, mfxSession *session)
+} // mfxStatus MFXInitEx(mfxIMPL impl, mfxVersion *ver, mfxSession *session)
mfxStatus MFXClose(mfxSession session)
{
} // mfxStatus MFXClose(mfxSession session)
-mfxStatus MFXJoinSession(mfxSession session, mfxSession child_session)
-{
- mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE;
- MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *) session;
- MFX_DISP_HANDLE *pChildHandle = (MFX_DISP_HANDLE *) child_session;
-
- // get the function's address and make a call
- if ((pHandle) && (pChildHandle) && (pHandle->apiVersion == pChildHandle->apiVersion))
- {
- /* check whether it is audio session or video */
- int tableIndex = eMFXJoinSession;
- mfxFunctionPointer pFunc;
- if (pHandle->impl & MFX_IMPL_AUDIO)
- {
- pFunc = pHandle->callAudioTable[tableIndex];
- }
- else
- {
- pFunc = pHandle->callTable[tableIndex];
- }
-
- if (pFunc)
- {
- // pass down the call
- mfxRes = (*(mfxStatus (MFX_CDECL *) (mfxSession, mfxSession)) pFunc) (pHandle->session,
- pChildHandle->session);
- }
- }
-
- return mfxRes;
-
-} // mfxStatus MFXJoinSession(mfxSession session, mfxSession child_session)
-
-mfxStatus MFXCloneSession(mfxSession session, mfxSession *clone)
-{
- mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE;
- MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *) session;
- mfxVersion apiVersion;
- mfxIMPL impl;
-
- // check error(s)
- if (pHandle)
- {
- // initialize the clone session
- apiVersion = pHandle->apiVersion;
- impl = pHandle->impl | pHandle->implInterface;
- mfxRes = MFXInit(impl, &apiVersion, clone);
- if (MFX_ERR_NONE != mfxRes)
- {
- return mfxRes;
- }
-
- // join the sessions
- mfxRes = MFXJoinSession(session, *clone);
- if (MFX_ERR_NONE != mfxRes)
- {
- MFXClose(*clone);
- *clone = NULL;
- return mfxRes;
- }
- }
-
- return mfxRes;
-
-} // mfxStatus MFXCloneSession(mfxSession session, mfxSession *clone)
-
-
mfxStatus MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version)
{
mfxStatus sts = MFX_ERR_NONE;
DISPATCHER_LOG_ERROR((("MFXVideoUSER_Load: uid=NULL\n")));
return MFX_ERR_NULL_PTR;
}
- DISPATCHER_LOG_INFO((("MFXVideoUSER_Load: uid="MFXGUIDTYPE()" version=%d\n")
+ DISPATCHER_LOG_INFO((("MFXVideoUSER_Load: uid=" MFXGUIDTYPE()" version=%d\n")
, MFXGUIDTOHEX(uid)
, version))
size_t pluginsChecked = 0;
//check rest in records
if (i->PluginVersion < version)
{
- DISPATCHER_LOG_INFO((("MFXVideoUSER_Load: registered \"Plugin Version\" for GUID="MFXGUIDTYPE()" is %d, that is smaller that requested\n")
+ DISPATCHER_LOG_INFO((("MFXVideoUSER_Load: registered \"Plugin Version\" for GUID=" MFXGUIDTYPE()" is %d, that is smaller that requested\n")
, MFXGUIDTOHEX(uid)
, i->PluginVersion))
continue;
return MFX_ERR_NULL_PTR;
}
- DISPATCHER_LOG_INFO((("MFXVideoUSER_LoadByPath: %S uid="MFXGUIDTYPE()" version=%d\n")
+ DISPATCHER_LOG_INFO((("MFXVideoUSER_LoadByPath: %S uid=" MFXGUIDTYPE()" version=%d\n")
, MSDK2WIDE(path)
, MFXGUIDTOHEX(uid)
, version))
#ifdef _WIN32
msdk_disp_char wPath[MAX_PLUGIN_PATH];
- int res = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, len, wPath, MAX_PLUGIN_PATH);
+ int res = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, len<MAX_PLUGIN_PATH-1 ? len : MAX_PLUGIN_PATH-1, wPath, MAX_PLUGIN_PATH);
+ wPath[res]=0;
+
if (!res)
{
DISPATCHER_LOG_ERROR((("MFXVideoUSER_LoadByPath: cant convert UTF-8 path to UTF-16\n")));
return MFX_ERR_NOT_FOUND;
}
- msdk_disp_char_cpy_s(record.sPath, res < MAX_PLUGIN_PATH ? res : MAX_PLUGIN_PATH, wPath);
-#else // Linux/Android
- msdk_disp_char_cpy_s(record.sPath, len < MAX_PLUGIN_PATH ? len : MAX_PLUGIN_PATH, path);
+ msdk_disp_char_cpy_s(record.sPath, MAX_PLUGIN_PATH, wPath);
+#else // Linux/Android
+ msdk_disp_char_cpy_s(record.sPath, MAX_PLUGIN_PATH, path);
#endif
-
- record.PluginUID = *uid;
+
+ record.PluginUID = *uid;
record.PluginVersion = (mfxU16)version;
record.Default = true;
mfxStatus MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid)
{
MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
- if (!&rHandle)
+ if (!&rHandle)
{
DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad: session=NULL\n")));
return MFX_ERR_NULL_PTR;
}
if (!uid)
{
- DISPATCHER_LOG_ERROR((("MFXVideoUSER_Load: uid=NULL\n")));
+ DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad: uid=NULL\n")));
return MFX_ERR_NULL_PTR;
}
bool bDestroyed = rHandle.pluginFactory.Destroy(*uid);
- if (bDestroyed)
+ if (bDestroyed)
{
- DISPATCHER_LOG_INFO((("MFXVideoUSER_UnLoad : plugin with GUID="MFXGUIDTYPE()" unloaded\n"), MFXGUIDTOHEX(uid)));
- } else
+ DISPATCHER_LOG_INFO((("MFXVideoUSER_UnLoad : plugin with GUID=" MFXGUIDTYPE()" unloaded\n"), MFXGUIDTOHEX(uid)));
+ } else
{
- DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad : plugin with GUID="MFXGUIDTYPE()" not found\n"), MFXGUIDTOHEX(uid)));
+ DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad : plugin with GUID=" MFXGUIDTYPE()" not found\n"), MFXGUIDTOHEX(uid)));
}
return bDestroyed ? MFX_ERR_NONE : MFX_ERR_NOT_FOUND;
DISPATCHER_LOG_ERROR((("MFXAudioUSER_Load: uid=NULL\n")));
return MFX_ERR_NULL_PTR;
}
- DISPATCHER_LOG_INFO((("MFXAudioUSER_Load: uid="MFXGUIDTYPE()" version=%d\n")
+ DISPATCHER_LOG_INFO((("MFXAudioUSER_Load: uid=" MFXGUIDTYPE()" version=%d\n")
, MFXGUIDTOHEX(uid)
, version))
size_t pluginsChecked = 0;
//check rest in records
if (i->PluginVersion < version)
{
- DISPATCHER_LOG_INFO((("MFXAudioUSER_Load: registered \"Plugin Version\" for GUID="MFXGUIDTYPE()" is %d, that is smaller that requested\n")
+ DISPATCHER_LOG_INFO((("MFXAudioUSER_Load: registered \"Plugin Version\" for GUID=" MFXGUIDTYPE()" is %d, that is smaller that requested\n")
, MFXGUIDTOHEX(uid)
, i->PluginVersion))
continue;
mfxStatus MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid)
{
MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
- if (!&rHandle)
+ if (!&rHandle)
{
DISPATCHER_LOG_ERROR((("MFXAudioUSER_UnLoad: session=NULL\n")));
return MFX_ERR_NULL_PTR;
}
bool bDestroyed = rHandle.pluginFactory.Destroy(*uid);
- if (bDestroyed)
+ if (bDestroyed)
{
- DISPATCHER_LOG_INFO((("MFXAudioUSER_UnLoad : plugin with GUID="MFXGUIDTYPE()" unloaded\n"), MFXGUIDTOHEX(uid)));
- } else
+ DISPATCHER_LOG_INFO((("MFXAudioUSER_UnLoad : plugin with GUID=" MFXGUIDTYPE()" unloaded\n"), MFXGUIDTOHEX(uid)));
+ } else
{
- DISPATCHER_LOG_ERROR((("MFXAudioUSER_UnLoad : plugin with GUID="MFXGUIDTYPE()" not found\n"), MFXGUIDTOHEX(uid)));
+ DISPATCHER_LOG_ERROR((("MFXAudioUSER_UnLoad : plugin with GUID=" MFXGUIDTYPE()" not found\n"), MFXGUIDTOHEX(uid)));
}
return bDestroyed ? MFX_ERR_NONE : MFX_ERR_NOT_FOUND;
}
+#else // relates to !defined (MEDIASDK_UWP_PROCTABLE) from line 137, i.e. #else part as if MEDIASDK_UWP_PROCTABLE defined
+
+#include <windows.h>
+#include "intel_api_factory.h"
+
+// for the UWP_PROCTABLE purposes implementation of MFXinitEx is calling
+// InitializeInstance() implemented in intel_uwp-api.dll
+mfxStatus MFXInitEx(mfxInitParam par, mfxSession *session)
+{
+ HRESULT hr = InitialiseMediaSession((HANDLE*)session, &par, nullptr);
+ return (hr == S_OK) ? mfxStatus::MFX_ERR_NONE : (mfxStatus)hr;
+}
+
+// for the UWP_PROCTABLE purposes implementation of MFXClose is calling
+// DisposeInstance() implemented in intel_uwp-api.dll
+mfxStatus MFXClose(mfxSession session)
+{
+ if (nullptr == session) {
+ return MFX_ERR_INVALID_HANDLE;
+ }
+
+ HRESULT hr = DisposeMediaSession(HANDLE(session));
+ session = (mfxSession)NULL;
+ return (hr == S_OK) ? MFX_ERR_NONE : mfxStatus(hr);
+}
+
+#undef FUNCTION
+#define FUNCTION(return_value, func_name, formal_param_list, actual_param_list) \
+ return_value func_name formal_param_list \
+{ \
+ mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE; \
+\
+ _mfxSession *pHandle = (_mfxSession *) session; \
+\
+ /* get the function's address and make a call */ \
+ if (pHandle) \
+{ \
+ mfxFunctionPointer pFunc = pHandle->callPlugInsTable[e##func_name]; \
+ if (pFunc) \
+{ \
+ /* pass down the call */ \
+ mfxRes = (*(mfxStatus (MFX_CDECL *) formal_param_list) pFunc) actual_param_list; \
+} \
+} \
+ return mfxRes; \
+}
+
+FUNCTION(mfxStatus, MFXVideoUSER_Load, (mfxSession session, const mfxPluginUID *uid, mfxU32 version), (session, uid, version))
+FUNCTION(mfxStatus, MFXVideoUSER_LoadByPath, (mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len), (session, uid, version, path, len))
+FUNCTION(mfxStatus, MFXVideoUSER_UnLoad, (mfxSession session, const mfxPluginUID *uid), (session, uid))
+FUNCTION(mfxStatus, MFXAudioUSER_Load, (mfxSession session, const mfxPluginUID *uid, mfxU32 version), (session, uid, version))
+FUNCTION(mfxStatus, MFXAudioUSER_UnLoad, (mfxSession session, const mfxPluginUID *uid), (session, uid))
+
+#endif //!defined(MEDIASDK_UWP_PROCTABLE)
+
+#if !defined(MEDIASDK_UWP_LOADER)
+
+mfxStatus MFXJoinSession(mfxSession session, mfxSession child_session)
+{
+ mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE;
+ MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *)session;
+ MFX_DISP_HANDLE *pChildHandle = (MFX_DISP_HANDLE *)child_session;
+
+ // get the function's address and make a call
+ if ((pHandle) && (pChildHandle) && (pHandle->apiVersion == pChildHandle->apiVersion))
+ {
+ /* check whether it is audio session or video */
+ int tableIndex = eMFXJoinSession;
+ mfxFunctionPointer pFunc;
+ if (pHandle->impl & MFX_IMPL_AUDIO)
+ {
+ pFunc = pHandle->callAudioTable[tableIndex];
+ }
+ else
+ {
+ pFunc = pHandle->callTable[tableIndex];
+ }
+
+ if (pFunc)
+ {
+ // pass down the call
+ mfxRes = (*(mfxStatus(MFX_CDECL *) (mfxSession, mfxSession)) pFunc) (pHandle->session,
+ pChildHandle->session);
+ }
+ }
+
+ return mfxRes;
+
+} // mfxStatus MFXJoinSession(mfxSession session, mfxSession child_session)
+
+mfxStatus MFXCloneSession(mfxSession session, mfxSession *clone)
+{
+ mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE;
+ MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *)session;
+ mfxVersion apiVersion;
+ mfxIMPL impl;
+
+ // check error(s)
+ if (pHandle)
+ {
+ // initialize the clone session
+ apiVersion = pHandle->apiVersion;
+ impl = pHandle->impl | pHandle->implInterface;
+ mfxRes = MFXInit(impl, &apiVersion, clone);
+ if (MFX_ERR_NONE != mfxRes)
+ {
+ return mfxRes;
+ }
+
+ // join the sessions
+ mfxRes = MFXJoinSession(session, *clone);
+ if (MFX_ERR_NONE != mfxRes)
+ {
+ MFXClose(*clone);
+ *clone = NULL;
+ return mfxRes;
+ }
+ }
+
+ return mfxRes;
+
+} // mfxStatus MFXCloneSession(mfxSession session, mfxSession *clone)
+
+#endif // !defined(MEDIASDK_UWP_LOADER)
+
+mfxStatus MFXInit(mfxIMPL impl, mfxVersion *pVer, mfxSession *session)
+{
+ mfxInitParam par = {};
+
+ par.Implementation = impl;
+ if (pVer)
+ {
+ par.Version = *pVer;
+ }
+ else
+ {
+ par.Version.Major = DEFAULT_API_VERSION_MAJOR;
+ par.Version.Minor = DEFAULT_API_VERSION_MINOR;
+ }
+ par.ExternalThreads = 0;
+
+ return MFXInitEx(par, session);
+}
+
+//
//
// implement all other calling functions.
// They just call a procedure of DLL library from the table.
return_value func_name formal_param_list \
{ \
mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE; \
- MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *) session; \
+ _mfxSession *pHandle = (_mfxSession *) session; \
/* get the function's address and make a call */ \
if (pHandle) \
{ \
FUNCTION(mfxStatus, MFXQueryIMPL, (mfxSession session, mfxIMPL *impl), (session, impl))
FUNCTION(mfxStatus, MFXQueryVersion, (mfxSession session, mfxVersion *version), (session, version))
+
+#if !defined(MEDIASDK_UWP_LOADER)
+// these functions are not necessary in LOADER part of dispatcher and
+// need to be included only in in SOLID dispatcher or PROCTABLE part of dispatcher
+
FUNCTION(mfxStatus, MFXDisjoinSession, (mfxSession session), (session))
FUNCTION(mfxStatus, MFXSetPriority, (mfxSession session, mfxPriority priority), (session, priority))
FUNCTION(mfxStatus, MFXGetPriority, (mfxSession session, mfxPriority *priority), (session, priority))
+#endif // !defined(MEDIASDK_UWP_LOADER)
+
#undef FUNCTION
#define FUNCTION(return_value, func_name, formal_param_list, actual_param_list) \
return_value func_name formal_param_list \
{ \
mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE; \
- MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *) session; \
+ _mfxSession *pHandle = (_mfxSession *) session;\
/* get the function's address and make a call */ \
if (pHandle) \
{ \
return_value func_name formal_param_list \
{ \
mfxStatus mfxRes = MFX_ERR_INVALID_HANDLE; \
- MFX_DISP_HANDLE *pHandle = (MFX_DISP_HANDLE *) session; \
+ _mfxSession *pHandle = (_mfxSession *) session; \
/* get the function's address and make a call */ \
if (pHandle) \
{ \
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfx_dispatcher_log.h"
#include "mfx_load_dll.h"
+#include <assert.h>
+
#include <string.h>
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#pragma warning(disable:4355)
#else
-
-#include <dlfcn.h>
-#include <iostream>
-
+ #include <dlfcn.h>
+ #include <iostream>
#endif // defined(_WIN32) || defined(_WIN64)
+
MFX_DISP_HANDLE::MFX_DISP_HANDLE(const mfxVersion requiredVersion) :
- apiVersion(requiredVersion),
- pluginFactory((mfxSession)this)
+ _mfxSession()
+ ,apiVersion(requiredVersion)
+ ,pluginFactory((mfxSession)this)
{
actualApiVersion.Version = 0;
implType = MFX_LIB_SOFTWARE;
loadStatus = MFX_ERR_NOT_FOUND;
dispVersion.Major = MFX_DISPATCHER_VERSION_MAJOR;
dispVersion.Minor = MFX_DISPATCHER_VERSION_MINOR;
- session = (mfxSession) 0;
+ storageID = 0;
+ implInterface = MFX_IMPL_HARDWARE_ANY;
hModule = (mfxModuleHandle) 0;
- memset(callTable, 0, sizeof(callTable));
- memset(callAudioTable, 0, sizeof(callAudioTable));
-
} // MFX_DISP_HANDLE::MFX_DISP_HANDLE(const mfxVersion requiredVersion)
MFX_DISP_HANDLE::~MFX_DISP_HANDLE(void)
loadStatus = MFX_ERR_NOT_FOUND;
dispVersion.Major = MFX_DISPATCHER_VERSION_MAJOR;
dispVersion.Minor = MFX_DISPATCHER_VERSION_MINOR;
- session = (mfxSession) 0;
-
+ *static_cast<_mfxSession*>(this) = _mfxSession();
hModule = (mfxModuleHandle) 0;
-
- memset(callTable, 0, sizeof(callTable));
- memset(callAudioTable, 0, sizeof(callAudioTable));
}
return mfxRes;
} // mfxStatus MFX_DISP_HANDLE::Close(void)
-mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const msdk_disp_char *pPath, eMfxImplType implType,
- mfxIMPL impl, mfxIMPL implInterface, mfxInitParam &par)
+mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const msdk_disp_char *pPath, eMfxImplType reqImplType,
+ mfxIMPL reqImpl, mfxIMPL reqImplInterface, mfxInitParam &par)
{
mfxStatus mfxRes = MFX_ERR_NONE;
// check error(s)
- if ((MFX_LIB_SOFTWARE != implType) &&
- (MFX_LIB_HARDWARE != implType))
+ if ((MFX_LIB_SOFTWARE != reqImplType) &&
+ (MFX_LIB_HARDWARE != reqImplType))
{
- DISPATCHER_LOG_ERROR((("implType == %s, should be either MFX_LIB_SOFTWARE ot MFX_LIB_HARDWARE\n"), DispatcherLog_GetMFXImplString(implType).c_str()));
+ DISPATCHER_LOG_ERROR((("implType == %s, should be either MFX_LIB_SOFTWARE ot MFX_LIB_HARDWARE\n"), DispatcherLog_GetMFXImplString(reqImplType).c_str()));
loadStatus = MFX_ERR_ABORTED;
return loadStatus;
}
// only exact types of implementation is allowed
- if (!(impl & MFX_IMPL_AUDIO) &&
- (MFX_IMPL_SOFTWARE != impl) &&
- (MFX_IMPL_HARDWARE != impl) &&
- (MFX_IMPL_HARDWARE2 != impl) &&
- (MFX_IMPL_HARDWARE3 != impl) &&
- (MFX_IMPL_HARDWARE4 != impl))
+ if (!(reqImpl & MFX_IMPL_AUDIO) &&
+ (MFX_IMPL_SOFTWARE != reqImpl) &&
+ (MFX_IMPL_HARDWARE != reqImpl) &&
+ (MFX_IMPL_HARDWARE2 != reqImpl) &&
+ (MFX_IMPL_HARDWARE3 != reqImpl) &&
+ (MFX_IMPL_HARDWARE4 != reqImpl))
{
DISPATCHER_LOG_ERROR((("invalid implementation impl == %s\n"), DispatcherLog_GetMFXImplString(impl).c_str()));
loadStatus = MFX_ERR_ABORTED;
Close();
// save the library's type
- this->implType = implType;
- this->impl = impl;
- this->implInterface = implInterface;
+ this->implType = reqImplType;
+ this->impl = reqImpl;
+ this->implInterface = reqImplInterface;
{
+ assert(hModule == (mfxModuleHandle)0);
DISPATCHER_LOG_BLOCK(("invoking LoadLibrary(%S)\n", MSDK2WIDE(pPath)));
+
// load the DLL into the memory
hModule = MFX::mfx_dll_load(pPath);
-
+
if (hModule)
{
int i;
else
{
mfxRes = MFXQueryVersion((mfxSession) this, &actualApiVersion);
-
+
if (MFX_ERR_NONE != mfxRes)
{
DISPATCHER_LOG_ERROR((("MFXQueryVersion returned: %d, skiped this library\n"), mfxRes))
if (session)
{
/* check whether it is audio session or video */
- int tableIndex = eMFXClose;
+ int tableIndex = eMFXClose;
mfxFunctionPointer pFunc;
- if (impl & MFX_IMPL_AUDIO)
- {
+ if (impl & MFX_IMPL_AUDIO)
+ {
pFunc = callAudioTable[tableIndex];
- }
+ }
else
{
pFunc = callTable[tableIndex];
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dxva2_device.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dxva2_device.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
void DXDevice::LoadDLLModule(const wchar_t *pModuleName)
{
- DWORD prevErrorMode = 0;
-
// unload the module if it is required
UnloadDLLModule();
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
+ DWORD prevErrorMode = 0;
// set the silent error mode
#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
SetThreadErrorMode(SEM_FAILCRITICALERRORS, &prevErrorMode);
#else
prevErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
#endif
+#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
+
// load specified library
- m_hModule = LoadLibraryExW(pModuleName, NULL, 0);
+ m_hModule = LoadLibraryExW(pModuleName, NULL, 0);
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
// set the previous error mode
#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
SetThreadErrorMode(prevErrorMode, NULL);
#else
SetErrorMode(prevErrorMode);
#endif
+#endif //!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
} // void LoadDLLModule(const wchar_t *pModuleName)
} // void DXDevice::UnloaDLLdModule(void)
-
+#ifdef MFX_D3D9_ENABLED
D3D9Device::D3D9Device(void)
{
m_pD3D9 = (void *) 0;
return true;
} // bool D3D9Device::Init(const mfxU32 adapterNum)
+#endif //MFX_D3D9_ENABLED
typedef
HRESULT (WINAPI *DXGICreateFactoryFunc) (REFIID riid, void **ppFactory);
if (m_hModule)
{
- DXGICreateFactoryFunc pFunc;
- IDXGIFactory1 *pFactory;
- IDXGIAdapter1 *pAdapter;
- DXGI_ADAPTER_DESC1 desc;
- mfxU32 curAdapter, maxAdapters;
- HRESULT hRes;
+ DXGICreateFactoryFunc pFunc = NULL;
+ IDXGIFactory1 *pFactory = NULL;
+ IDXGIAdapter1 *pAdapter = NULL;
+ DXGI_ADAPTER_DESC1 desc = { 0 };
+ mfxU32 curAdapter = 0;
+ mfxU32 maxAdapters = 0;
+ HRESULT hRes = E_FAIL;
// load address of procedure to create DXGI 1.1 factory
pFunc = (DXGICreateFactoryFunc) GetProcAddress(m_hModule, "CreateDXGIFactory1");
+
if (NULL == pFunc)
{
return false;
m_vendorID = 0;
m_deviceID = 0;
+ m_driverVersion = 0;
} // DXVA2Device::DXVA2Device(void)
DXVA2Device::~DXVA2Device(void)
m_vendorID = 0;
m_deviceID = 0;
+ m_driverVersion = 0;
} // void DXVA2Device::Close(void)
+#ifdef MFX_D3D9_ENABLED
bool DXVA2Device::InitD3D9(const mfxU32 adapterNum)
{
D3D9Device d3d9Device;
// ... say goodbye
return true;
} // bool InitD3D9(const mfxU32 adapterNum)
+#else // MFX_D3D9_ENABLED
+bool DXVA2Device::InitD3D9(const mfxU32 adapterNum)
+{
+ (void)adapterNum;
+ return false;
+}
+#endif // MFX_D3D9_ENABLED
bool DXVA2Device::InitDXGI1(const mfxU32 adapterNum)
{
} // bool DXVA2Device::InitDXGI1(const mfxU32 adapterNum)
+#ifdef MFX_D3D9_ENABLED
void DXVA2Device::UseAlternativeWay(const D3D9Device *pD3D9Device)
{
mfxU64 d3d9LUID = pD3D9Device->GetLUID();
// we need to match a DXGI(1) device to the D3D9 device
} // void DXVA2Device::UseAlternativeWay(const D3D9Device *pD3D9Device)
+#endif // MFX_D3D9_ENABLED
mfxU32 DXVA2Device::GetVendorID(void) const
{
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_library_iterator.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_library_iterator.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2015 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include <tchar.h>
#include <windows.h>
+#include <vector>
+
namespace MFX
{
{
return MFX_ERR_NULL_PTR;
}
+ mfxIMPL impl_via = *pImplInterface;
DXVA2Device dxvaDevice;
- if (MFX_IMPL_VIA_D3D9 == *pImplInterface)
+ if (MFX_IMPL_VIA_D3D9 == impl_via)
{
// try to create the Direct3D 9 device and find right adapter
if (!dxvaDevice.InitD3D9(adapterNum))
return MFX_ERR_UNSUPPORTED;
}
}
- else if (MFX_IMPL_VIA_D3D11 == *pImplInterface)
+ else if (MFX_IMPL_VIA_D3D11 == impl_via)
{
// try to open DXGI 1.1 device to get hardware ID
if (!dxvaDevice.InitDXGI1(adapterNum))
DISPATCHER_LOG_INFO((("dxvaDevice.InitDXGI1(%d) Failed "), adapterNum ));
return MFX_ERR_UNSUPPORTED;
}
- }
- else if (MFX_IMPL_VIA_ANY == *pImplInterface)
+ }
+ else if (MFX_IMPL_VIA_ANY == impl_via)
{
// try the Direct3D 9 device
if (dxvaDevice.InitD3D9(adapterNum))
} // void MFXLibraryIterator::Release(void)
+DECLSPEC_NOINLINE HMODULE GetThisDllModuleHandle()
+{
+ HMODULE hDll = HMODULE(-1);
+
+ GetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
+ GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ reinterpret_cast<LPCWSTR>(&GetThisDllModuleHandle), &hDll);
+ return hDll;
+}
+
+// msdk_disp_char* sImplPath must be allocated with size not less then msdk_disp_path_len
+bool GetImplPath(int storageID, msdk_disp_char* sImplPath)
+{
+ HMODULE hModule = NULL;
+
+ sImplPath[0] = L'\0';
+
+ switch (storageID) {
+ case MFX_APP_FOLDER:
+ hModule = 0;
+ break;
+
+#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
+ case MFX_PATH_MSDK_FOLDER:
+ hModule = GetThisDllModuleHandle();
+ break;
+#endif
+
+ }
+
+ if(hModule == HMODULE(-1)) {
+ return false;
+ }
+
+ DWORD nSize = 0;
+ DWORD allocSize = msdk_disp_path_len;
+
+ nSize = GetModuleFileNameW(hModule, &sImplPath[0], allocSize);
+
+ if (nSize == 0 || nSize == allocSize) {
+ // nSize == 0 meanse that system can't get this info for hModule
+ // nSize == allocSize buffer is too small
+ return false;
+ }
+
+ // for any case because WinXP implementation of GetModuleFileName does not add \0 to the end of string
+ sImplPath[nSize] = L'\0';
+
+ msdk_disp_char * dirSeparator = wcsrchr(sImplPath, L'\\');
+ if (dirSeparator != NULL && dirSeparator < (sImplPath + msdk_disp_path_len))
+ {
+ *++dirSeparator = 0;
+ }
+ return true;
+}
+
mfxStatus MFXLibraryIterator::Init(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID)
{
// check error(s)
m_StorageID = storageID;
m_lastLibIndex = 0;
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
if (storageID == MFX_CURRENT_USER_KEY || storageID == MFX_LOCAL_MACHINE_KEY)
{
return InitRegistry(implType, implInterface, adapterNum, storageID);
}
- else if (storageID == MFX_APP_FOLDER)
- {
- msdk_disp_char path[_MAX_PATH] = {};
+#endif
- ::GetModuleFileNameW(0, path, _MAX_PATH);
- msdk_disp_char * dirSeparator = wcsrchr(path, L'\\');
- if (dirSeparator < (path + _MAX_PATH))
- {
- *++dirSeparator = 0;
- }
-
- return InitFolder(implType, implInterface, adapterNum, path);
+ msdk_disp_char sCurrentModulePath[msdk_disp_path_len];
+
+ if(!GetImplPath(storageID, sCurrentModulePath)) {
+ return MFX_ERR_UNSUPPORTED;
}
- return MFX_ERR_UNSUPPORTED;
+ return InitFolder(implType, implInterface, adapterNum, sCurrentModulePath);
+
} // mfxStatus MFXLibraryIterator::Init(eMfxImplType implType, const mfxU32 adapterNum, int storageID)
mfxStatus MFXLibraryIterator::InitRegistry(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID)
{
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
HKEY rootHKey;
bool bRes;
// set the required library's implementation type
m_implType = implType;
- m_implInterface = implInterface != 0
+ m_implInterface = implInterface != 0
? implInterface
: MFX_IMPL_VIA_ANY;
rootDispPath))
return MFX_ERR_NONE;
+#else
+ (void) storageID;
+ (void) adapterNum;
+ (void) implInterface;
+ (void) implType;
+ return MFX_ERR_UNSUPPORTED;
+#endif // #if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
+
} // mfxStatus MFXLibraryIterator::InitRegistry(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID)
mfxStatus MFXLibraryIterator::InitFolder(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, const msdk_disp_char * path)
msdk_disp_char_cpy_s(m_path, maxPathLen, path);
size_t pathLen = wcslen(m_path);
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
// we looking for runtime in application folder, it should be named libmfxsw64 or libmfxsw32
- mfx_get_default_dll_name(m_path + pathLen, maxPathLen - pathLen, MFX_LIB_SOFTWARE);
+ mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen, MFX_LIB_SOFTWARE);
+#else
+ mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen, implType);
+#endif
// set the required library's implementation type
m_implType = implType;
- m_implInterface = implInterface != 0
+ m_implInterface = implInterface != 0
? implInterface
: MFX_IMPL_VIA_ANY;
{
if (m_lastLibIndex != 0)
return MFX_ERR_NOT_FOUND;
+ if (m_vendorID != INTEL_VENDOR_ID)
+ return MFX_ERR_UNKNOWN;
m_lastLibIndex = 1;
msdk_disp_char_cpy_s(pPath, pathSize, m_path);
return MFX_ERR_NONE;
}
+#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
+
+ if (m_StorageID == MFX_PATH_MSDK_FOLDER) {
+
+ if (m_lastLibIndex != 0)
+ return MFX_ERR_NOT_FOUND;
+ if (m_vendorID != INTEL_VENDOR_ID)
+ return MFX_ERR_UNKNOWN;
+
+ m_lastLibIndex = 1;
+ msdk_disp_char_cpy_s(pPath, pathSize, m_path);
+ // do not change impl type
+ //*pImplType = MFX_LIB_HARDWARE;
+ return MFX_ERR_NONE;
+ }
+
+#endif
+
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
wchar_t libPath[MFX_MAX_DLL_PATH] = L"";
DWORD libIndex = 0;
DWORD libMerit = 0;
do
{
WinRegKey subKey;
- wchar_t subKeyName[MFX_MAX_REGISTRY_KEY_NAME];
+ wchar_t subKeyName[MFX_MAX_REGISTRY_KEY_NAME] = { 0 };
DWORD subKeyNameSize = sizeof(subKeyName) / sizeof(subKeyName[0]);
// query next value name
// compare device's and library's IDs
if (MFX_LIB_HARDWARE == m_implType)
{
- if (m_vendorID != vendorID)
+ if (m_vendorID != vendorID)
{
bRes = false;
DISPATCHER_LOG_WRN((("%S conflict, actual = 0x%x : required = 0x%x\n"), vendorIDKeyName, m_vendorID, vendorID));
if ((0 == vendorID) || (0 == deviceID))
{
*pImplType = MFX_LIB_SOFTWARE;
-
DISPATCHER_LOG_INFO((("Library type is MFX_LIB_SOFTWARE\n")));
}
else
m_lastLibMerit = libMerit;
m_bIsSubKeyValid = true;
+#endif
+
return MFX_ERR_NONE;
} // mfxStatus MFXLibraryIterator::SelectDLLVersion(wchar_t *pPath, size_t pathSize, eMfxImplType *pImplType, mfxVersion minVersion)
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_dll.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_dll.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
{
return NULL;
}
-
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
// set the silent error mode
DWORD prevErrorMode = 0;
#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
#else
prevErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
#endif
- // load the library's module
- hModule = LoadLibraryExW(pFileName,NULL,0);
- // set the previous error mode
+#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
+
+ // load the library's module
+ hModule = LoadLibraryExW(pFileName, NULL, 0);
+
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
+ // set the previous error mode
#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
SetThreadErrorMode(prevErrorMode, NULL);
#else
SetErrorMode(prevErrorMode);
#endif
+#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
return hModule;
return !!bRes;
} // bool mfx_dll_free(mfxModuleHandle handle)
+#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
mfxModuleHandle mfx_get_dll_handle(const msdk_disp_char *pFileName)
{
mfxModuleHandle hModule = (mfxModuleHandle) 0;
#endif
return hModule;
}
+#endif //!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
} // namespace MFX
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_plugin.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_plugin.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2013-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfx_load_dll.h"
#include "mfx_dispatcher_log.h"
-#define TRACE_PLUGIN_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[PLUGIN]: "str), __VA_ARGS__))
-#define TRACE_PLUGIN_INFO(str, ...) DISPATCHER_LOG_INFO((("[PLUGIN]: "str), __VA_ARGS__))
+#define TRACE_PLUGIN_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[PLUGIN]: " str), __VA_ARGS__))
+#define TRACE_PLUGIN_INFO(str, ...) DISPATCHER_LOG_INFO((("[PLUGIN]: " str), __VA_ARGS__))
#define CREATE_PLUGIN_FNC "CreatePlugin"
MFX::PluginModule::PluginModule()
: mHmodule()
- , mCreatePluginPtr()
+ , mCreatePluginPtr()
, mPath()
{
}
-MFX::PluginModule::PluginModule(const PluginModule & that)
+MFX::PluginModule::PluginModule(const PluginModule & that)
: mHmodule(mfx_dll_load(that.mPath))
- , mCreatePluginPtr(that.mCreatePluginPtr)
+ , mCreatePluginPtr(that.mCreatePluginPtr)
{
msdk_disp_char_cpy_s(mPath, sizeof(mPath) / sizeof(*mPath), that.mPath);
}
-MFX::PluginModule & MFX::PluginModule::operator = (const MFX::PluginModule & that)
+MFX::PluginModule & MFX::PluginModule::operator = (const MFX::PluginModule & that)
{
- if (this != &that)
+ if (this != &that)
{
Tidy();
mHmodule = mfx_dll_load(that.mPath);
}
MFX::PluginModule::PluginModule(const msdk_disp_char * path)
- : mCreatePluginPtr()
+ : mCreatePluginPtr()
{
mHmodule = mfx_dll_load(path);
if (NULL == mHmodule) {
return ;
}
TRACE_PLUGIN_INFO("Plugin loaded at: %S\n", MSDK2WIDE(path));
-
+
mCreatePluginPtr = (CreatePluginPtr_t)mfx_dll_get_addr(mHmodule, CREATE_PLUGIN_FNC);
if (NULL == mCreatePluginPtr) {
TRACE_PLUGIN_ERROR("Cannot get procedure address: %s\n", CREATE_PLUGIN_FNC);
return ;
}
-
+
msdk_disp_char_cpy_s(mPath, sizeof(mPath) / sizeof(*mPath), path);
}
-bool MFX::PluginModule::Create( mfxPluginUID uid, mfxPlugin& plg)
+bool MFX::PluginModule::Create( mfxPluginUID uid, mfxPlugin& plg)
{
bool result = false;
- if (mCreatePluginPtr)
+ if (mCreatePluginPtr)
{
mfxStatus mfxResult = mCreatePluginPtr(uid, &plg);
result = (MFX_ERR_NONE == mfxResult);
mHmodule = NULL;
}
-MFX::PluginModule::~PluginModule(void)
+MFX::PluginModule::~PluginModule(void)
{
Tidy();
}
+#if !defined(MEDIASDK_UWP_PROCTABLE)
+
bool MFX::MFXPluginFactory::RunVerification( const mfxPlugin & plg, const PluginDescriptionRecord &dsc, mfxPluginParam &pluginParams)
{
if (plg.PluginInit == 0)
TRACE_PLUGIN_ERROR("plg->PluginInit = 0\n", 0);
return false;
}
- if (plg.PluginClose == 0)
+ if (plg.PluginClose == 0)
{
TRACE_PLUGIN_ERROR("plg->PluginClose = 0\n", 0);
return false;
}
- if (plg.GetPluginParam == 0)
+ if (plg.GetPluginParam == 0)
{
TRACE_PLUGIN_ERROR("plg->GetPluginParam = 0\n", 0);
return false;
}
-
- if (plg.Execute == 0)
+
+ if (plg.Execute == 0)
{
TRACE_PLUGIN_ERROR("plg->Execute = 0\n", 0);
return false;
}
- if (plg.FreeResources == 0)
+ if (plg.FreeResources == 0)
{
TRACE_PLUGIN_ERROR("plg->FreeResources = 0\n", 0);
return false;
}
else
{
- if (!dsc.onlyVersionRegistered && pluginParams.CodecId != dsc.CodecId)
+ if (!dsc.onlyVersionRegistered && pluginParams.CodecId != dsc.CodecId)
{
- TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned CodecId="MFXFOURCCTYPE()", but registration has CodecId="MFXFOURCCTYPE()"\n"
+ TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned CodecId=" MFXFOURCCTYPE()", but registration has CodecId=" MFXFOURCCTYPE()"\n"
, MFXU32TOFOURCC(pluginParams.CodecId), MFXU32TOFOURCC(dsc.CodecId));
return false;
}
- if (!dsc.onlyVersionRegistered && pluginParams.Type != dsc.Type)
+ if (!dsc.onlyVersionRegistered && pluginParams.Type != dsc.Type)
{
TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned Type=%d, but registration has Type=%d\n", pluginParams.Type, dsc.Type);
return false;
}
- if (pluginParams.PluginUID != dsc.PluginUID)
+ if (pluginParams.PluginUID != dsc.PluginUID)
{
- TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned UID="MFXGUIDTYPE()", but registration has UID="MFXGUIDTYPE()"\n"
+ TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned UID=" MFXGUIDTYPE()", but registration has UID=" MFXGUIDTYPE()"\n"
, MFXGUIDTOHEX(&pluginParams.PluginUID), MFXGUIDTOHEX(&dsc.PluginUID));
return false;
}
- if (pluginParams.PluginVersion != dsc.PluginVersion)
+ if (pluginParams.PluginVersion != dsc.PluginVersion)
{
TRACE_PLUGIN_ERROR("plg->GetPluginParam() returned PluginVersion=%d, but registration has PlgVer=%d\n", pluginParams.PluginVersion, dsc.PluginVersion);
return false;
}
}
- switch(pluginParams.Type)
+ switch(pluginParams.Type)
{
- case MFX_PLUGINTYPE_VIDEO_DECODE:
- case MFX_PLUGINTYPE_VIDEO_ENCODE:
- case MFX_PLUGINTYPE_VIDEO_VPP:
+ case MFX_PLUGINTYPE_VIDEO_DECODE:
+ case MFX_PLUGINTYPE_VIDEO_ENCODE:
+ case MFX_PLUGINTYPE_VIDEO_VPP:
{
TRACE_PLUGIN_INFO("plugin type= %d\n", pluginParams.Type);
- if (plg.Video == 0)
+ if (plg.Video == 0)
{
TRACE_PLUGIN_ERROR("plg->Video = 0\n", 0);
return false;
}
}
- switch(pluginParams.Type)
+ switch(pluginParams.Type)
{
- case MFX_PLUGINTYPE_VIDEO_DECODE:
+ case MFX_PLUGINTYPE_VIDEO_DECODE:
return VerifyDecoder(*plg.Video);
- case MFX_PLUGINTYPE_AUDIO_DECODE:
+ case MFX_PLUGINTYPE_AUDIO_DECODE:
return VerifyAudioDecoder(*plg.Audio);
- case MFX_PLUGINTYPE_VIDEO_ENCODE:
+ case MFX_PLUGINTYPE_VIDEO_ENCODE:
return VerifyEncoder(*plg.Video);
- case MFX_PLUGINTYPE_AUDIO_ENCODE:
+ case MFX_PLUGINTYPE_AUDIO_ENCODE:
return VerifyAudioEncoder(*plg.Audio);
- case MFX_PLUGINTYPE_VIDEO_VPP:
- return VerifyVpp(*plg.Video);
+ case MFX_PLUGINTYPE_VIDEO_VPP:
+ return VerifyVpp(*plg.Video);
case MFX_PLUGINTYPE_VIDEO_ENC:
return VerifyEnc(*plg.Video);
- default:
+ default:
{
TRACE_PLUGIN_ERROR("unsupported plugin type: %d\n", pluginParams.Type);
return false;
}
}
-bool MFX::MFXPluginFactory::VerifyVpp( const mfxVideoCodecPlugin &vpp )
+bool MFX::MFXPluginFactory::VerifyVpp( const mfxVideoCodecPlugin &vpp )
{
if (vpp.VPPFrameSubmit == 0)
{
TRACE_PLUGIN_ERROR("plg->Video->EncodeFrameSubmit = 0\n", 0);
return false;
}
-
+
return true;
}
TRACE_PLUGIN_ERROR("plg->Audio->EncodeFrameSubmit = 0\n", 0);
return false;
}
-
+
return true;
}
bool MFX::MFXPluginFactory::VerifyDecoder( const mfxVideoCodecPlugin &decoder )
{
- if (decoder.DecodeHeader == 0)
+ if (decoder.DecodeHeader == 0)
{
TRACE_PLUGIN_ERROR("plg->Video->DecodeHeader = 0\n", 0);
return false;
bool MFX::MFXPluginFactory::VerifyAudioDecoder( const mfxAudioCodecPlugin &decoder )
{
- if (decoder.DecodeHeader == 0)
+ if (decoder.DecodeHeader == 0)
{
TRACE_PLUGIN_ERROR("plg->Audio->DecodeHeader = 0\n", 0);
return false;
TRACE_PLUGIN_ERROR("plg->Video->Init = 0\n", 0);
return false;
}
- if (videoCodec.Reset == 0)
+ if (videoCodec.Reset == 0)
{
TRACE_PLUGIN_ERROR("plg->Video->Reset = 0\n", 0);
return false;
}
- if (videoCodec.Close == 0)
+ if (videoCodec.Close == 0)
{
TRACE_PLUGIN_ERROR("plg->Video->Close = 0\n", 0);
return false;
PluginModule plgModule(rec.sPath);
mfxPlugin plg = {};
mfxPluginParam plgParams;
-
- if (!plgModule.Create(rec.PluginUID, plg))
+
+ if (!plgModule.Create(rec.PluginUID, plg))
{
return MFX_ERR_UNKNOWN;
}
-
- if (!RunVerification(plg, rec, plgParams))
+
+ if (!RunVerification(plg, rec, plgParams))
{
//will do not call plugin close since it is not safe to do that until structure is corrected
return MFX_ERR_UNKNOWN;
}
-
+
if (rec.Type == MFX_PLUGINTYPE_AUDIO_DECODE ||
rec.Type == MFX_PLUGINTYPE_AUDIO_ENCODE)
{
mfxStatus sts = MFXAudioUSER_Register(mSession, plgParams.Type, &plg);
- if (MFX_ERR_NONE != sts)
+ if (MFX_ERR_NONE != sts)
{
TRACE_PLUGIN_ERROR(" MFXAudioUSER_Register returned %d\n", sts);
return sts;
else
{
mfxStatus sts = MFXVideoUSER_Register(mSession, plgParams.Type, &plg);
- if (MFX_ERR_NONE != sts)
+ if (MFX_ERR_NONE != sts)
{
TRACE_PLUGIN_ERROR(" MFXVideoUSER_Register returned %d\n", sts);
return sts;
}
}
-
+
mPlugins.push_back(FactoryRecord(plgParams, plgModule, plg));
return MFX_ERR_NONE;
}
-MFX::MFXPluginFactory::~MFXPluginFactory()
+MFX::MFXPluginFactory::~MFXPluginFactory()
{
Close();
}
-MFX::MFXPluginFactory::MFXPluginFactory( mfxSession session )
+MFX::MFXPluginFactory::MFXPluginFactory( mfxSession session )
{
mSession = session;
+ nPlugins = 0;
}
-bool MFX::MFXPluginFactory::Destroy( const mfxPluginUID & uidToDestroy)
+bool MFX::MFXPluginFactory::Destroy( const mfxPluginUID & uidToDestroy)
{
- for (MFXVector<FactoryRecord >::iterator i = mPlugins.begin(); i!= mPlugins.end(); i++)
+ for (MFXVector<FactoryRecord >::iterator i = mPlugins.begin(); i!= mPlugins.end(); i++)
{
- if (i->plgParams.PluginUID == uidToDestroy)
+ if (i->plgParams.PluginUID == uidToDestroy)
{
DestroyPlugin(*i);
//dll unload should happen here
return false;
}
-void MFX::MFXPluginFactory::Close()
+void MFX::MFXPluginFactory::Close()
{
- for (MFXVector<FactoryRecord>::iterator i = mPlugins.begin(); i!= mPlugins.end(); i++)
+ for (MFXVector<FactoryRecord>::iterator i = mPlugins.begin(); i!= mPlugins.end(); i++)
{
DestroyPlugin(*i);
}
sts = MFXVideoUSER_Unregister(mSession, record.plgParams.Type);
TRACE_PLUGIN_INFO(" MFXVideoUSER_Unregister for Type=%d, returned %d\n", record.plgParams.Type, sts);
}
-}
\ No newline at end of file
+}
+
+#endif //!defined(MEDIASDK_UWP_PROCTABLE)
\ No newline at end of file
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_plugin_hive.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_plugin_hive.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2013-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2013-2018 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfx_dispatcher_log.h"
#include "mfx_load_dll.h"
-#define TRACE_HIVE_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[HIVE]: "str), __VA_ARGS__))
-#define TRACE_HIVE_INFO(str, ...) DISPATCHER_LOG_INFO((("[HIVE]: "str), __VA_ARGS__))
-#define TRACE_HIVE_WRN(str, ...) DISPATCHER_LOG_WRN((("[HIVE]: "str), __VA_ARGS__))
+#define TRACE_HIVE_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[HIVE]: " str), __VA_ARGS__))
+#define TRACE_HIVE_INFO(str, ...) DISPATCHER_LOG_INFO((("[HIVE]: " str), __VA_ARGS__))
+#define TRACE_HIVE_WRN(str, ...) DISPATCHER_LOG_WRN((("[HIVE]: " str), __VA_ARGS__))
namespace
{
MFX::MFXPluginsInHive::MFXPluginsInHive(int mfxStorageID, const msdk_disp_char *msdkLibSubKey, mfxVersion currentAPIVersion)
: MFXPluginStorageBase(currentAPIVersion)
{
+#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
HKEY rootHKey;
bool bRes;
WinRegKey regKey;
TRACE_HIVE_ERROR("operator[](%d) = descriptionRecord; - threw exception \n", index);
}
}
+#else
+
+ (void)mfxStorageID;
+ (void)msdkLibSubKey;
+ (void)currentAPIVersion;
+
+#endif //#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
}
+#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
MFX::MFXPluginsInFS::MFXPluginsInFS( mfxVersion currentAPIVersion )
: MFXPluginStorageBase(currentAPIVersion)
, mIsVersionParsed()
return true;
}
+#endif //#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
MFX::MFXDefaultPlugins::MFXDefaultPlugins(mfxVersion currentAPIVersion, MFX_DISP_HANDLE * hdl, int implType)
: MFXPluginStorageBase(currentAPIVersion)
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_win_reg_key.cpp -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_win_reg_key.cpp
Changed
/* ****************************************************************************** *\
-Copyright (C) 2012-2014 Intel Corporation. All rights reserved.
+Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
#include "mfx_win_reg_key.h"
#include "mfx_dispatcher_log.h"
-#define TRACE_WINREG_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[WINREG]: "str), __VA_ARGS__))
+#define TRACE_WINREG_ERROR(str, ...) DISPATCHER_LOG_ERROR((("[WINREG]: " str), __VA_ARGS__))
namespace MFX
{
obs-studio-23.1.0.tar.xz/plugins/obs-qsv11/obs-qsv11.c -> obs-studio-23.2.0.tar.xz/plugins/obs-qsv11/obs-qsv11.c
Changed
add_rate_controls(list, qsv_ratecontrols);
obs_property_set_modified_callback(list, rate_control_modified);
- obs_properties_add_int(props, "bitrate", TEXT_TARGET_BITRATE, 50,
- 10000000, 1);
- obs_properties_add_int(props, "max_bitrate", TEXT_MAX_BITRATE, 50,
- 10000000, 1);
+ obs_property_t *p;
+ p = obs_properties_add_int(props, "bitrate", TEXT_TARGET_BITRATE, 50,
+ 10000000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
+
+ p = obs_properties_add_int(props, "max_bitrate", TEXT_MAX_BITRATE, 50,
+ 10000000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
+
obs_properties_add_int(props, "accuracy", TEXT_ACCURACY, 0, 10000, 1);
obs_properties_add_int(props, "convergence", TEXT_CONVERGENCE, 0, 10, 1);
obs_properties_add_int(props, "qpi", "QPI", 1, 51, 1);
obs-studio-23.1.0.tar.xz/plugins/obs-text/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-text/data/locale/da-DK.ini
Changed
Color="Farve"
Opacity="Gennemsigtighed"
Gradient="Gradient"
-Gradient.Color="Gradient farve"
-Gradient.Opacity="Gradient gennemsigtighed"
-Gradient.Direction="Gradient retning"
+Gradient.Color="Gradientfarve"
+Gradient.Opacity="Gradientgennemsigtighed"
+Gradient.Direction="Gradientretning"
BkColor="Baggrundsfarve"
-BkOpacity="Baggrunds gennemsigtighed"
+BkOpacity="Baggrundsgennemsigtighed"
Alignment="Justering"
Alignment.Left="Venstre"
Alignment.Center="Centreret"
VerticalAlignment.Top="Top"
VerticalAlignment.Bottom="Bund"
Outline="Kontur"
-Outline.Size="Kontur størrelse"
-Outline.Color="Kontur farve"
-Outline.Opacity="Kontur gennemsigtighed"
-ChatlogMode="Chatlog tilstand"
-ChatlogMode.Lines="Chatlog linebegrænsning"
-UseCustomExtents="Brug tilpasset tekstomfang"
+Outline.Size="Konturstørrelse"
+Outline.Color="Konturfarve"
+Outline.Opacity="Konturgennemsigtighed"
+ChatlogMode="Chatlog-tilstand"
+ChatlogMode.Lines="Chatlog-linebegrænsning"
+UseCustomExtents="Benyt tilpasset tekstomfang"
UseCustomExtents.Wrap="Ombryd"
Width="Bredde"
Height="Højde"
obs-studio-23.1.0.tar.xz/plugins/obs-text/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-text/data/locale/de-DE.ini
Changed
Outline.Opacity="Deckkraft der Kontur"
ChatlogMode="Chatprotokollmodus"
ChatlogMode.Lines="Chatprotokollzeilenlimit"
-UseCustomExtents="Nutze benutzerdefinierten Textbereich"
+UseCustomExtents="Benutzerdefinierten Textbereich benutzen"
UseCustomExtents.Wrap="Umbruch"
Width="Breite"
Height="Höhe"
obs-studio-23.2.0.tar.xz/plugins/obs-text/data/locale/fa-IR.ini
Added
+TextGDIPlus="متن (GDI+)"
+Font="فونت"
+Text="متن"
+ReadFromFile="از فایل بخوان"
+TextFile="فایل متن (UTF-8)"
+Filter.TextFiles="پرونده های متنی"
+Filter.AllFiles="همه فایل ها"
+Color="رنگ"
+Opacity="شفافیت"
+Gradient="شیب"
+Gradient.Color="رنگ شیب"
+Gradient.Opacity="شفافیت شیب"
+Gradient.Direction="جهت شیب"
+BkColor="رنگ پس زمینه"
+BkOpacity="شفافیت پس زمینه"
+Alignment="تراز چینش"
+Alignment.Left="چپ"
+Alignment.Center="مرکز"
+Alignment.Right="راست"
+Vertical="عمودی"
+VerticalAlignment="تراز عمودی"
+VerticalAlignment.Top="بالا"
+VerticalAlignment.Bottom="پایین"
+Outline="برون نما"
+Outline.Size="اندازه طرح کلی"
+Outline.Color="رنگ طرح کلی"
+Outline.Opacity="تاری دید"
+ChatlogMode="حالت Chatlog"
+ChatlogMode.Lines="محدودیت Chatlog Line"
+UseCustomExtents="استفاده از متن سفارشی"
+UseCustomExtents.Wrap="پیچ وتاب"
+Width="عرض"
+Height="ارتفاع"
+Transform="تبدیل متن"
+Transform.None="هیچ•کدام"
+Transform.Uppercase="حروف بزرگ"
+Transform.Lowercase="حروف کوچک"
+
obs-studio-23.1.0.tar.xz/plugins/obs-text/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-text/data/locale/sk-SK.ini
Changed
UseCustomExtents.Wrap="Zalomiť"
Width="Šírka"
Height="Výška"
+Transform="Transformácia textu"
+Transform.None="Žiadna"
+Transform.Uppercase="Veľké písmená"
+Transform.Lowercase="Malé písmená"
obs-studio-23.1.0.tar.xz/plugins/obs-text/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-text/data/locale/tr-TR.ini
Changed
UseCustomExtents.Wrap="Metni Kaydır"
Width="Genişlik"
Height="Yükseklik"
+Transform="Metin Dönüşümü"
+Transform.None="Yok"
+Transform.Uppercase="Büyük harf"
+Transform.Lowercase="Küçük harf"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/fade_to_color_transition.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/fade_to_color_transition.effect
Changed
float2 uv : TEXCOORD0;
};
-#include "premultiplied.inc"
-
VertData VSDefault(VertData v_in)
{
VertData vert_out;
float4 PSFadeToColor(VertData v_in) : TARGET
{
- return lerp(convert_pmalpha(tex.Sample(textureSampler, v_in.uv)), color, swp);
+ float4 premultiplied = float4(color.rgb * color.a, color.a);
+ return lerp(tex.Sample(textureSampler, v_in.uv), premultiplied, swp);
}
technique FadeToColor
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/fade_transition.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/fade_transition.effect
Changed
float2 uv : TEXCOORD0;
};
-#include "premultiplied.inc"
-
VertData VSDefault(VertData v_in)
{
VertData vert_out;
float4 PSFade(VertData v_in) : TARGET
{
- float4 a_val = convert_pmalpha(tex_a.Sample(textureSampler, v_in.uv));
- float4 b_val = convert_pmalpha(tex_b.Sample(textureSampler, v_in.uv));
+ float4 a_val = tex_a.Sample(textureSampler, v_in.uv);
+ float4 b_val = tex_b.Sample(textureSampler, v_in.uv);
return lerp(a_val, b_val, fade_val);
}
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini
Changed
FadeTransition="Overgang"
CutTransition="Klip"
-SwipeTransition="Swipe"
+SwipeTransition="Stryg"
SlideTransition="Glide"
StingerTransition="Stinger-overgang"
-FadeToColorTransition="Fade til farve"
+FadeToColorTransition="Farveovergang"
Direction="Retning"
Direction.Left="Venstre"
Direction.Right="Højre"
Direction.Up="Op"
Direction.Down="Ned"
-SwipeIn="Swipe ind"
+SwipeIn="Stryg ind"
Color="Farve"
VideoFile="Videofil"
-TransitionPoint="Overgangspunkt (millisekunder)"
-TransitionPointFrame="Overgangspunkt (ramme)"
+TransitionPoint="Overgangspunkt (millisek.)"
+TransitionPointFrame="Overgangspunkt (billede)"
TransitionPointType="Overgangspunkttype"
TransitionPointTypeFrame="Billede"
-TransitionPointTypeTime="Tid (ms)"
+TransitionPointTypeTime="Tid (millisek.)"
AudioFadeStyle="Lydudtoningsstil"
AudioFadeStyle.FadeOutFadeIn="Udtone til overgangspunkt, dernæst indtone"
AudioFadeStyle.CrossFade="Krydstoning (crossfade)"
-SwitchPoint="Farvepeakpunkt (procent)"
-LumaWipeTransition="Luma overgang"
+SwitchPoint="Farvespidspunkt (procent)"
+LumaWipeTransition="Luma-overgang"
LumaWipe.Image="Billede"
-LumaWipe.Invert="Inverter"
+LumaWipe.Invert="Invertér"
LumaWipe.Softness="Blødhed"
LumaWipe.Type.BarndoorBottomLeft="Stalddør nederst til venstre"
LumaWipe.Type.BarndoorHorizontal="Stalddør horisontal"
LumaWipe.Type.BarndoorTopLeft="Stalddør øverst til venstre"
LumaWipe.Type.BarndoorVertical="Stalddør vertikal"
LumaWipe.Type.BlindsHorizontal="Persienne horisontal"
-LumaWipe.Type.BoxBottomLeft="Boks nederst til venstre"
-LumaWipe.Type.BoxBottomRight="Boks nederst til højre"
-LumaWipe.Type.BoxTopLeft="Boks øverst til venstre"
-LumaWipe.Type.BoxTopRight="Boks øverst til højre"
+LumaWipe.Type.BoxBottomLeft="Kasse nederst til venstre"
+LumaWipe.Type.BoxBottomRight="Kasse nederst til højre"
+LumaWipe.Type.BoxTopLeft="Kasse øverst til venstre"
+LumaWipe.Type.BoxTopRight="Kasse øverst til højre"
LumaWipe.Type.Burst="Sprængning"
LumaWipe.Type.CheckerboardSmall="Små skaktern"
LumaWipe.Type.Circles="Cirkler"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini
Changed
SwitchPoint="Spitzenfarbpunkt (in Prozent)"
LumaWipeTransition="Luma Wipe"
LumaWipe.Image="Bild"
-LumaWipe.Invert="Invertieren"
+LumaWipe.Invert="Umkehren"
LumaWipe.Softness="Weichheit"
LumaWipe.Type.BarndoorBottomLeft="Scheunentor unten links"
LumaWipe.Type.BarndoorHorizontal="Scheunentor Horizontal"
LumaWipe.Type.ZigzagVertical="Zigzag vertikal"
AudioMonitoring="Audiomonitoring"
AudioMonitoring.None="Monitor aus"
-AudioMonitoring.MonitorOnly="Nur Monitor (Ausgabe stumm schalten)"
+AudioMonitoring.MonitorOnly="Nur Monitor (Ausgabe stummschalten)"
AudioMonitoring.Both="Monitor und Ausgabe"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/eu-ES.ini
Changed
LumaWipe.Type.ZigzagHorizontal="Sigi-saga horizontala"
LumaWipe.Type.ZigzagVertical="Sigi-saga bertikala"
AudioMonitoring="Adioaren monitorizazioa"
-AudioMonitoring.None="Monitorea itzalita"
-AudioMonitoring.MonitorOnly="Monitorea bakarrik (isildu irteera)"
+AudioMonitoring.None="Ez monitorizatu"
+AudioMonitoring.MonitorOnly="Monitorea bakarrik (irteera mututua)"
AudioMonitoring.Both="Monitorea eta irteera"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini
Changed
LumaWipe.Type.ZigzagVertical="შვეული ტეხილი"
AudioMonitoring="ხმის მოსმენა"
AudioMonitoring.None="მოსმენის გარეშე"
-AudioMonitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამომავალი სიგნალით)"
+AudioMonitoring.MonitorOnly="მხოლოდ მოსმენა (უხმო გამოტანა)"
AudioMonitoring.Both="მოსმენა და გამოტანა"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini
Changed
TransitionPointTypeTime="Timp (milisecunde)"
SwitchPoint="Punctul de vârf al culorii (procent)"
LumaWipe.Image="Imagine"
+LumaWipe.Invert="Inversează"
+LumaWipe.Softness="Moliciune"
LumaWipe.Type.Clock="Ceas"
LumaWipe.Type.Cloud="Cloud"
LumaWipe.Type.ZigzagHorizontal="Zigzag orizontal"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini
Changed
FadeTransition="淡出"
-CutTransition="剪切"
-SwipeTransition="滑动"
-SlideTransition="滑动"
-StingerTransition="毒刺"
+CutTransition="直接切换"
+SwipeTransition="滑入滑出"
+SlideTransition="幻灯片"
+StingerTransition="插入视频"
FadeToColorTransition="色彩淡入淡出"
Direction="方向"
Direction.Left="左"
Direction.Right="右"
Direction.Up="上"
Direction.Down="下"
-SwipeIn="向上滑动"
+SwipeIn="滑入"
Color="色彩"
VideoFile="视频文件"
-TransitionPoint="转换点 (毫秒)"
-TransitionPointFrame="转换点 (帧)"
+TransitionPoint="转换点(毫秒)"
+TransitionPointFrame="转换点(帧)"
TransitionPointType="转换点类型"
TransitionPointTypeFrame="帧"
-TransitionPointTypeTime="时间 (毫秒)"
+TransitionPointTypeTime="时间(毫秒)"
AudioFadeStyle="音频淡入淡出样式"
AudioFadeStyle.FadeOutFadeIn="淡出到过渡点然后淡入"
AudioFadeStyle.CrossFade="交叉淡入淡出"
LumaWipeTransition="亮度擦除"
LumaWipe.Image="图像"
LumaWipe.Invert="反转"
-LumaWipe.Softness="柔和"
+LumaWipe.Softness="柔和度"
LumaWipe.Type.BarndoorBottomLeft="左下角门"
LumaWipe.Type.BarndoorHorizontal="水平门"
-LumaWipe.Type.BarndoorTopLeft="右上角门"
+LumaWipe.Type.BarndoorTopLeft="左上角门"
LumaWipe.Type.BarndoorVertical="垂直门"
LumaWipe.Type.BlindsHorizontal="水平百叶窗"
LumaWipe.Type.BoxBottomLeft="左下角盒子"
LumaWipe.Type.Cloud="云"
LumaWipe.Type.Curtain="窗帘"
LumaWipe.Type.Fan="风扇"
-LumaWipe.Type.Fractal="不规则碎片"
+LumaWipe.Type.Fractal="分形"
LumaWipe.Type.Iris="中心"
LumaWipe.Type.LinearHorizontal="线性水平"
LumaWipe.Type.LinearTopLeft="线性左上"
LumaWipe.Type.LinearTopRight="线性右上"
LumaWipe.Type.LinearVertical="线性垂直"
-LumaWipe.Type.ParallelZigzagHorizontal="平行水波水平"
-LumaWipe.Type.ParallelZigzagVertical="平行水波垂直"
+LumaWipe.Type.ParallelZigzagHorizontal="并排Z字形水平"
+LumaWipe.Type.ParallelZigzagVertical="并排Z字形垂直"
LumaWipe.Type.Sinus9="Sinus 9"
LumaWipe.Type.Spiral="螺旋"
-LumaWipe.Type.Square="正方型"
+LumaWipe.Type.Square="正方形"
LumaWipe.Type.Squares="方块"
LumaWipe.Type.Stripes="条纹"
LumaWipe.Type.StripsHorizontal="条纹水平"
LumaWipe.Type.Watercolor="水彩"
LumaWipe.Type.ZigzagHorizontal="Z字形水平"
LumaWipe.Type.ZigzagVertical="Z字形垂直"
-AudioMonitoring="音频监测"
-AudioMonitoring.None="关闭监视"
-AudioMonitoring.MonitorOnly="仅显示器(输出静音)"
-AudioMonitoring.Both="显示器和输出"
+AudioMonitoring="音频监听"
+AudioMonitoring.None="关闭监听"
+AudioMonitoring.MonitorOnly="仅监听(不输出音频)"
+AudioMonitoring.Both="监听并输出"
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/luma_wipe_transition.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/luma_wipe_transition.effect
Changed
float2 uv : TEXCOORD0;
};
-#include "premultiplied.inc"
-
VertData VSDefault(VertData v_in)
{
VertData vert_out;
float4 PSLumaWipe(VertData v_in) : TARGET
{
float2 uv = v_in.uv;
- float4 a_color = convert_pmalpha(a_tex.Sample(textureSampler, uv));
- float4 b_color = convert_pmalpha(b_tex.Sample(textureSampler, uv));
+ float4 a_color = a_tex.Sample(textureSampler, uv);
+ float4 b_color = b_tex.Sample(textureSampler, uv);
float luma = l_tex.Sample(textureSampler, uv).x;
if (invert)
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/slide_transition.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/slide_transition.effect
Changed
float2 uv : TEXCOORD0;
};
-#include "premultiplied.inc"
-
VertData VSDefault(VertData v_in)
{
VertData vert_out;
? tex_b.Sample(textureSampler, tex_b_uv)
: tex_a.Sample(textureSampler, tex_a_uv);
- return convert_pmalpha(outc);
+ return outc;
}
technique Slide
obs-studio-23.1.0.tar.xz/plugins/obs-transitions/data/swipe_transition.effect -> obs-studio-23.2.0.tar.xz/plugins/obs-transitions/data/swipe_transition.effect
Changed
float2 uv : TEXCOORD0;
};
-#include "premultiplied.inc"
-
VertData VSDefault(VertData v_in)
{
VertData vert_out;
? tex_b.Sample(textureSampler, v_in.uv)
: tex_a.Sample(textureSampler, swipe_uv);
- return convert_pmalpha(outc);
+ return outc;
}
technique Swipe
obs-studio-23.1.0.tar.xz/plugins/obs-x264/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/da-DK.ini
Changed
-Bitrate="Bitrate"
-CustomBufsize="Brug brugerdefineret bufferstørrelse"
-BufferSize="Bufferstørrelsen"
+Bitrate="Bit-hastighed"
+CustomBufsize="Benyt tilpasset bufferstørrelse"
+BufferSize="Bufferstørrelse"
RateControl="Rate kontrol"
CRF="CRF"
-KeyframeIntervalSec="Keyframe interval (sekunder, 0 = auto)"
-CPUPreset="CPU forbrug indstilling (højere = mindre CPU)"
+KeyframeIntervalSec="Keyframe-interval (sek., 0 = auto)"
+CPUPreset="CPU-forbrugsforvalg (højere = mindre CPU)"
Profile="Profil"
-Tune="Stil ind"
+Tune="Tuning"
None="(Ingen)"
-EncoderOptions="x264 indstillinger (adskilt af mellemrum)"
-VFR="Variable framerate (VFR)"
+EncoderOptions="x264-indstillinger (adskilt af mellemrum)"
+VFR="Variable billedhastighed (VFR)"
obs-studio-23.1.0.tar.xz/plugins/obs-x264/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/de-DE.ini
Changed
Profile="Profil"
Tune="Tune"
None="(Nichts)"
-EncoderOptions="x264 Optionen (durch Leerzeichen getrennt)"
+EncoderOptions="x264-Optionen (durch Leerzeichen getrennt)"
VFR="Variable Framerate (VFR)"
obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/fa-IR.ini
Added
+Bitrate="نرخ بیت"
+CustomBufsize="استفاده از اندازه بافر سفارشی"
+BufferSize="اندازه بافر"
+RateControl="کنترل نرخ"
+CRF="سی آر اف"
+KeyframeIntervalSec="فاصله Keyframe (ثانیه 0 = خودکار)"
+CPUPreset="استفاده پیشفرض از CPU (بالاتر = CPU کمتر)"
+Profile="پروفایل"
+Tune="تون"
+None="(هیچ کدام)"
+EncoderOptions="آپشن های x264 (با فضای جدا شده )"
+VFR="فریم های متغیر (وی اف ار)"
+
obs-studio-23.1.0.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini
Changed
Bitrate="비트레이트"
-CustomBufsize="사용자 임의 버퍼 크기 설정"
+CustomBufsize="사용자 임의 버퍼 크기 설정"
BufferSize="버퍼 크기"
RateControl="데이터율 제어"
CRF="CRF"
obs-studio-23.1.0.tar.xz/plugins/obs-x264/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/sk-SK.ini
Changed
-Bitrate="Bitrate"
+Bitrate="Dátový tok"
CustomBufsize="Použiť vlastnú veľkosť medzipamäte"
BufferSize="Veľkosť medzipamäte"
RateControl="Riadenie toku"
CRF="CRF"
KeyframeIntervalSec="Kľúčová snímka každých (sekúnd, 0 = automaticky)"
+CPUPreset="CPU predvoľba používania (vyššie = menej CPU)"
Profile="Profil"
Tune="Vyladenie"
-None="(Žiadny)"
+None="(Žiadne)"
EncoderOptions="Možnosti enkodéra x264 (oddelené medzerou)"
+VFR="Premenlivá rýchlosť snímkov (VFR)"
obs-studio-23.1.0.tar.xz/plugins/obs-x264/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/data/locale/zh-CN.ini
Changed
Bitrate="比特率"
CustomBufsize="使用自定义缓存大小"
BufferSize="缓冲大小"
-RateControl="速率控制"
+RateControl="码率控制"
CRF="CRF"
KeyframeIntervalSec="关键帧间隔(秒, 0=自动)"
CPUPreset="CPU 使用预设 (高 = 较少的 CPU占用)"
-Profile="配置文件"
-Tune="协调(类型)"
+Profile="配置(Profile)"
+Tune="微调(Tune)"
None="(无)"
EncoderOptions="x264 选项 (用空格分隔)"
VFR="可变帧率 (VFR)"
obs-studio-23.1.0.tar.xz/plugins/obs-x264/obs-x264.c -> obs-studio-23.2.0.tar.xz/plugins/obs-x264/obs-x264.c
Changed
obs_property_set_modified_callback(list, rate_control_modified);
- obs_properties_add_int(props, "bitrate", TEXT_BITRATE, 50, 10000000, 1);
+ p = obs_properties_add_int(props, "bitrate",
+ TEXT_BITRATE, 50, 10000000, 50);
+ obs_property_int_set_suffix(p, " Kbps");
p = obs_properties_add_bool(props, "use_bufsize", TEXT_CUSTOM_BUF);
obs_property_set_modified_callback(p, use_bufsize_modified);
obs-studio-23.1.0.tar.xz/plugins/rtmp-services/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/rtmp-services/data/locale/da-DK.ini
Changed
-StreamingServices="Streaming Tjenester"
-CustomStreamingServer="Brugerdefineret Streaming Server"
-Service="Service"
+StreamingServices="Streamingtjenester"
+CustomStreamingServer="Tilpasset Streamingserver"
+Service="Tjeneste"
Server="Server"
Server.Auto="Auto (anbefalet)"
-StreamKey="Stream nøgle"
-UseAuth="Brug godkendelse"
+StreamKey="Streamnøgle"
+UseAuth="Benyt godkendelse"
Username="Brugernavn"
-Password="Kodeord"
-ShowAll="Vis alle services"
+Password="Adgangskode"
+ShowAll="Vis alle tjenester"
obs-studio-23.1.0.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-23.2.0.tar.xz/plugins/rtmp-services/data/package.json
Changed
{
"url": "https://obsproject.com/obs2_update/rtmp-services",
- "version": 104,
+ "version": 107,
"files": [
{
"name": "services.json",
- "version": 104
+ "version": 107
}
]
}
obs-studio-23.1.0.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-23.2.0.tar.xz/plugins/rtmp-services/data/services.json
Changed
}
],
"recommended": {
- "keyint": 3,
+ "keyint": 2,
"output": "ftl_output",
"max audio bitrate": 160,
"max video bitrate": 10000,
}
],
"recommended": {
- "keyint": 3,
+ "keyint": 2,
"max audio bitrate": 160,
"max video bitrate": 10000,
"profile": "main"
"servers": [
{
"name": "Server Iran",
- "url": "rtmp://gametips.tv:1935/hls"
+ "url": "rtmp://rtmp.cdn.server1.gametips.tv:1935/hls"
}
]
},
"max video bitrate": 3000,
"max audio bitrate": 128
}
+ },
+ {
+ "name": "OnlyFans.com",
+ "servers": [
+ {
+ "name": "USA",
+ "url": "rtmp://route0.onlyfans.com/live"
+ },
+ {
+ "name": "Europe",
+ "url": "rtmp://route0-dc2.onlyfans.com/live"
+ }
+ ],
+ "recommend": {
+ "keyint": 2,
+ "profile": "main",
+ "max video bitrate": 2500,
+ "max audio bitrate": 192,
+ "bframes": 0,
+ "x264opts": "tune=zerolatency"
+ }
}
]
}
obs-studio-23.1.0.tar.xz/plugins/text-freetype2/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/text-freetype2/data/locale/da-DK.ini
Changed
TextFreetype2="Tekst (FreeType 2)"
Font="Skrifttype"
Text="Tekst"
-TextFile="Tekstfil (UTF-8- eller UTF-16)"
+TextFile="Tekstfil (UTF-8/-16)"
TextFileFilter="Tekstfiler (*.txt);;"
ChatLogMode="Chatlogtilstand"
ChatLogLines="Chatloglinjer"
Color2="Farve 2"
Outline="Kontur"
DropShadow="Drop Shadow"
-ReadFromFile="Læse fra fil"
-CustomWidth="Brugerdefineret tekstbredde"
+ReadFromFile="Læs fra fil"
+CustomWidth="Tilpasset tekstbredde"
WordWrap="Tekstombrydning"
obs-studio-23.2.0.tar.xz/plugins/text-freetype2/data/locale/fa-IR.ini
Added
+TextFreetype2="متن (FreeType 2)"
+Font="فونت"
+Text="متن"
+TextFile="فایل متن (UTF-8 یا UTF-16)"
+TextFileFilter="فایل های متنی (*.txt);;"
+ChatLogMode="حالت Chatlog"
+ChatLogLines="خط های Chatlog"
+Color1="رنگ 1"
+Color2="رنگ 2"
+Outline="برون نما"
+DropShadow="افتادن سایه"
+ReadFromFile="از فایل بخوان"
+CustomWidth="رنگ متن سفارشی"
+WordWrap="بسته بندی کلمات"
+
obs-studio-23.1.0.tar.xz/plugins/text-freetype2/obs-convenience.h -> obs-studio-23.2.0.tar.xz/plugins/text-freetype2/obs-convenience.h
Changed
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
+#pragma once
+
#include <obs-module.h>
gs_vertbuffer_t *create_uv_vbuffer(uint32_t num_verts, bool add_color);
obs-studio-23.1.0.tar.xz/plugins/text-freetype2/text-freetype2.h -> obs-studio-23.2.0.tar.xz/plugins/text-freetype2/text-freetype2.h
Changed
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
+#pragma once
+
#include <obs-module.h>
#include <ft2build.h>
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ar-SA.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ar-SA.ini
Changed
VLCSource="مصدر فيديو VLC"
Playlist="قائمة تشغيل"
+SubtitleTrack="مسار الترجمة"
+SubtitleEnable="تفعيل الترجمة"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ca-ES.ini
Changed
Stop="Atura"
PlaylistNext="Següent"
PlaylistPrev="Anterior"
+AudioTrack="Pista d'àudio"
+SubtitleTrack="Pista de subtítols"
+SubtitleEnable="Subtítols activats"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/cs-CZ.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/cs-CZ.ini
Changed
Stop="Zastavit"
PlaylistNext="Další"
PlaylistPrev="Předchozí"
+AudioTrack="Zvuková stopa"
+SubtitleTrack="Stopa titulků"
+SubtitleEnable="Zapnout titulky"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/da-DK.ini
Changed
VLCSource="VLC-videokilde"
Playlist="Afspilningsliste"
LoopPlaylist="Gentag afspilningsliste"
-Shuffle="Bland playliste"
+Shuffle="Bland afspilningsliste"
PlaybackBehavior="Synlighedsadfærd"
PlaybackBehavior.StopRestart="Stop når ikke synlig, genstart når synlig"
PlaybackBehavior.PauseUnpause="Pause når ikke synlig, genoptage når synlig"
Restart="Genstart"
Stop="Stop"
PlaylistNext="Næste"
-PlaylistPrev="Forrige"
+PlaylistPrev="Foregående"
+AudioTrack="Lydspor"
+SubtitleTrack="Undertekstspor"
+SubtitleEnable="Undertekster aktiveret"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/de-DE.ini
Changed
-VLCSource="VLC Videoquelle"
+VLCSource="VLC-Videoquelle"
Playlist="Wiedergabeliste"
LoopPlaylist="Wiedergabeliste wiederholen"
Shuffle="Wiedergabeliste zufällig wiedergeben"
PlaybackBehavior="Sichtbarkeitsverhalten"
-PlaybackBehavior.StopRestart="Anhalten wenn nicht sichtbar, neu starten wenn sichtbar"
-PlaybackBehavior.PauseUnpause="Pausieren wenn nicht sichtbar, fortsetzen wenn sichtbar"
+PlaybackBehavior.StopRestart="Anhalten, wenn nicht sichtbar, neustarten, wenn sichtbar"
+PlaybackBehavior.PauseUnpause="Pausieren, wenn nicht sichtbar, fortsetzen, wenn sichtbar"
PlaybackBehavior.AlwaysPlay="Immer abspielen, auch wenn nicht sichtbar"
NetworkCaching="Netzwerkpuffer (ms)"
PlayPause="Abspielen/Pausieren"
-Restart="Neu starten"
+Restart="Neustarten"
Stop="Stop"
PlaylistNext="Weiter"
PlaylistPrev="Zurück"
+AudioTrack="Audiospur"
+SubtitleTrack="Untertitelspur"
+SubtitleEnable="Untertitel aktivieren"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/en-US.ini
Changed
Stop="Stop"
PlaylistNext="Next"
PlaylistPrev="Previous"
+AudioTrack="Audio Track"
+SubtitleTrack="Subtitle Track"
+SubtitleEnable="Subtitles Enabled"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/es-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/es-ES.ini
Changed
Stop="Detener"
PlaylistNext="Siguiente"
PlaylistPrev="Anterior"
+AudioTrack="Pista de audio"
+SubtitleTrack="Rastreador de subtítulos"
+SubtitleEnable="Subtítulos activados"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/eu-ES.ini
Changed
Stop="Gelditu"
PlaylistNext="Hurrengoa"
PlaylistPrev="Aurrekoa"
+AudioTrack="Audio-pista"
+SubtitleTrack="Azpitituluen pista"
+SubtitleEnable="Azpitituluak gaituta"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/fi-FI.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/fi-FI.ini
Changed
Stop="Pysäytä"
PlaylistNext="Seuraava"
PlaylistPrev="Edellinen"
+AudioTrack="Ääniraita"
+SubtitleTrack="Tekstitysraita"
+SubtitleEnable="Tekstitykset käytössä"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/fr-FR.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/fr-FR.ini
Changed
Stop="Arrêter"
PlaylistNext="Suivant"
PlaylistPrev="Précédent"
+AudioTrack="Piste audio"
+SubtitleTrack="Piste de sous-titre"
+SubtitleEnable="Activer les sous-titres"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/hu-HU.ini
Changed
Stop="Leállítás"
PlaylistNext="Következő"
PlaylistPrev="Előző"
+AudioTrack="Hangsáv"
+SubtitleTrack="Feliratsáv"
+SubtitleEnable="Feliratok engedélyezése"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/it-IT.ini
Changed
Stop="Interrompi"
PlaylistNext="Successivo"
PlaylistPrev="Precedente"
+AudioTrack="Traccia audio"
+SubtitleTrack="Traccia sottotitoli"
+SubtitleEnable="Sottotitoli attivati"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ja-JP.ini
Changed
Stop="停止"
PlaylistNext="次へ"
PlaylistPrev="前へ"
+AudioTrack="音声トラック"
+SubtitleTrack="字幕トラック"
+SubtitleEnable="字幕を有効にする"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ka-GE.ini
Changed
Stop="შეწყვეტა"
PlaylistNext="შემდეგი"
PlaylistPrev="წინა"
+AudioTrack="ხმოვანი ბილიკი"
+SubtitleTrack="სუბტიტრების ჩანაწერი"
+SubtitleEnable="სუბტიტრები ჩართულია"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ko-KR.ini
Changed
Stop="중단"
PlaylistNext="다음"
PlaylistPrev="이전"
+AudioTrack="음성 트랙"
+SubtitleTrack="자막 트랙:"
+SubtitleEnable="자막 활성화"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/nb-NO.ini
Changed
Stop="Stopp avspilling"
PlaylistNext="Neste"
PlaylistPrev="Forrige"
+AudioTrack="Lydspor"
+SubtitleTrack="Undertekstspor"
+SubtitleEnable="Undertekster aktivert"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/nl-NL.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/nl-NL.ini
Changed
Stop="Stop"
PlaylistNext="Volgende"
PlaylistPrev="Vorige"
+AudioTrack="Geluidsspoor"
+SubtitleTrack="Ondertitelspoor"
+SubtitleEnable="Ondertitels ingeschakeld"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/pl-PL.ini
Changed
Stop="Zatrzymaj"
PlaylistNext="Następny"
PlaylistPrev="Poprzedni"
+AudioTrack="Ścieżka audio"
+SubtitleTrack="Ścieżka napisów"
+SubtitleEnable="Napisy włączone"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini
Changed
Stop="Parar"
PlaylistNext="Próximo"
PlaylistPrev="Anterior"
+AudioTrack="Faixa de áudio"
+SubtitleTrack="Faixa de legenda"
+SubtitleEnable="Legendas ativadas"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini
Changed
PlaybackBehavior.AlwaysPlay="Redă întotdeauna chiar si când nu este vizibil"
NetworkCaching="Caching de rețea (ms)"
PlayPause="Redă/Pauză"
-Restart="Repornire"
-Stop="Oprire"
+Restart="Repornește"
+Stop="Oprește"
PlaylistNext="Următorul"
PlaylistPrev="Anteriorul"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/ru-RU.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/ru-RU.ini
Changed
Stop="Остановить"
PlaylistNext="Следующий"
PlaylistPrev="Предыдущий"
+AudioTrack="Звуковая дорожка"
+SubtitleTrack="Дорожка субтитров"
+SubtitleEnable="Субтитры включены"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/sk-SK.ini
Changed
Stop="Zastaviť"
PlaylistNext="Ďalší"
PlaylistPrev="Predchádzajúci"
+AudioTrack="Zvuková stopa"
+SubtitleTrack="Stopa titulkov"
+SubtitleEnable="Zapnuté titulky"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/sv-SE.ini
Changed
Stop="Stoppa"
PlaylistNext="Nästa"
PlaylistPrev="Föregående"
+AudioTrack="Ljudspår"
+SubtitleTrack="Undertextspår"
+SubtitleEnable="Aktivera undertexter"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini
Changed
Stop="Durdur"
PlaylistNext="Sonraki"
PlaylistPrev="Önceki"
+AudioTrack="Ses Parçası"
+SubtitleTrack="Altyazı Parçası"
+SubtitleEnable="Altyazılar Etkin"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/uk-UA.ini
Changed
Stop="Зупинити"
PlaylistNext="Наступний"
PlaylistPrev="Попередній"
+AudioTrack="Аудіо доріжка"
+SubtitleTrack="Доріжка субтитрів"
+SubtitleEnable="Увімкнути субтитри"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/zh-CN.ini
Changed
Stop="停止"
PlaylistNext="下一个"
PlaylistPrev="上一个"
+AudioTrack="音频轨道"
+SubtitleTrack="字幕轨道"
+SubtitleEnable="开启字幕"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/data/locale/zh-TW.ini
Changed
Stop="停止"
PlaylistNext="下一個"
PlaylistPrev="前一個"
+AudioTrack="音樂曲目"
+SubtitleTrack="字幕軌"
+SubtitleEnable="字幕已啟用"
obs-studio-23.1.0.tar.xz/plugins/vlc-video/vlc-video-source.c -> obs-studio-23.2.0.tar.xz/plugins/vlc-video/vlc-video-source.c
Changed
#define S_BEHAVIOR_PAUSE_UNPAUSE "pause_unpause"
#define S_BEHAVIOR_ALWAYS_PLAY "always_play"
#define S_NETWORK_CACHING "network_caching"
+#define S_TRACK "track"
+#define S_SUBTITLE_ENABLE "subtitle_enable"
+#define S_SUBTITLE_TRACK "subtitle"
#define T_(text) obs_module_text(text)
#define T_PLAYLIST T_("Playlist")
#define T_BEHAVIOR_PAUSE_UNPAUSE T_("PlaybackBehavior.PauseUnpause")
#define T_BEHAVIOR_ALWAYS_PLAY T_("PlaybackBehavior.AlwaysPlay")
#define T_NETWORK_CACHING T_("NetworkCaching")
+#define T_TRACK T_("AudioTrack")
+#define T_SUBTITLE_ENABLE T_("SubtitleEnable")
+#define T_SUBTITLE_TRACK T_("SubtitleTrack")
/* ------------------------------------------------------------------------- */
}
static void add_file(struct vlc_source *c, struct darray *array,
- const char *path, int network_caching)
+ const char *path, int network_caching, int track_index,
+ int subtitle_index, bool subtitle_enable)
{
DARRAY(struct media_file_data) new_files;
struct media_file_data data;
network_caching_option.array);
dstr_free(&network_caching_option);
}
+ struct dstr track_option = { 0 };
+ dstr_catf(&track_option,
+ ":audio-track=%d", track_index - 1);
+ libvlc_media_add_option_(new_media, track_option.array);
+ dstr_free(&track_option);
+
+ struct dstr sub_option = {0};
+ if (subtitle_enable) {
+ dstr_catf(&sub_option,
+ ":sub-track=%d", subtitle_index - 1);
+ }
+ libvlc_media_add_option_(new_media, sub_option.array);
+ dstr_free(&sub_option);
data.path = new_path.array;
data.media = new_media;
const char *behavior;
size_t count;
int network_caching;
+ int track_index;
+ int subtitle_index;
+ bool subtitle_enable;
da_init(new_files);
da_init(old_files);
network_caching = (int)obs_data_get_int(settings, S_NETWORK_CACHING);
+ track_index = (int)obs_data_get_int(settings, S_TRACK);
+
+ subtitle_index = (int)obs_data_get_int(settings, S_SUBTITLE_TRACK);
+
+ subtitle_enable = obs_data_get_bool(settings, S_SUBTITLE_ENABLE);
+
if (astrcmpi(behavior, S_BEHAVIOR_PAUSE_UNPAUSE) == 0) {
c->behavior = BEHAVIOR_PAUSE_UNPAUSE;
} else if (astrcmpi(behavior, S_BEHAVIOR_ALWAYS_PLAY) == 0) {
dstr_cat_ch(&dir_path, '/');
dstr_cat(&dir_path, ent->d_name);
add_file(c, &new_files.da, dir_path.array,
- network_caching);
+ network_caching, track_index,
+ subtitle_index,
+ subtitle_enable);
}
dstr_free(&dir_path);
os_closedir(dir);
} else {
- add_file(c, &new_files.da, path, network_caching);
+ add_file(c, &new_files.da, path, network_caching,
+ track_index, subtitle_index,
+ subtitle_enable);
}
obs_data_release(item);
obs_data_set_default_string(settings, S_BEHAVIOR,
S_BEHAVIOR_STOP_RESTART);
obs_data_set_default_int(settings, S_NETWORK_CACHING, 400);
+ obs_data_set_default_int(settings, S_TRACK, 1);
+ obs_data_set_default_bool(settings, S_SUBTITLE_ENABLE, false);
+ obs_data_set_default_int(settings, S_SUBTITLE_TRACK, 1);
}
static obs_properties_t *vlcs_properties(void *data)
obs_properties_add_int(ppts, S_NETWORK_CACHING, T_NETWORK_CACHING,
100, 60000, 10);
+ obs_properties_add_int(ppts, S_TRACK, T_TRACK, 1, 10, 1);
+ obs_properties_add_bool(ppts, S_SUBTITLE_ENABLE, T_SUBTITLE_ENABLE);
+ obs_properties_add_int(ppts, S_SUBTITLE_TRACK, T_SUBTITLE_TRACK,
+ 1, 10, 1);
return ppts;
}
obs-studio-23.1.0.tar.xz/plugins/win-capture/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/win-capture/data/locale/da-DK.ini
Changed
-MonitorCapture="Skærm optager"
-WindowCapture="Vindue optager"
+MonitorCapture="Skærmoptagelse"
+WindowCapture="Vinduesoptagelse"
WindowCapture.Window="Vindue"
-WindowCapture.Priority="Vindue match prioritet"
-WindowCapture.Priority.Title="Vinduestitel skal stemme overens"
-WindowCapture.Priority.Class="Samme titel, ellers find vindue af samme type"
-WindowCapture.Priority.Exe="Samme titel eller find vindue fra samme program"
+WindowCapture.Priority="Vinduesmatchprioritet"
+WindowCapture.Priority.Title="Vinduestitel skal matche"
+WindowCapture.Priority.Class="Match titel, ellers find vindue af samme type"
+WindowCapture.Priority.Exe="Match titel, ellers find vindue fra samme program"
CaptureCursor="Optag markøren"
Compatibility="Multi-adapter kompatibilitet"
SLIFix="SLI-/Crossfire-optagetilstand (langsom)"
AllowTransparency="Tillad gennemsigtighed"
Monitor="Skærm"
PrimaryMonitor="Primære skærm"
-GameCapture="Spil optager"
-GameCapture.AnyFullscreen="Optag ethvert fuldskærms program"
+GameCapture="Spiloptager"
+GameCapture.AnyFullscreen="Optag ethvert fuldskærmsprogram"
GameCapture.CaptureWindow="Optag specifikt vindue"
GameCapture.UseHotkey="Optag forreste vindue med hotkey"
GameCapture.ForceScaling="Tving skalering"
-GameCapture.ScaleRes="Skalere opløsning"
-GameCapture.LimitFramerate="Begræns optagelses framerate"
-GameCapture.CaptureOverlays="Optag fra tredjepart overlays (såsom Steam)"
-GameCapture.AntiCheatHook="Brug anti-cheat kompatibilitet hook"
+GameCapture.ScaleRes="Skaleringsopløsning"
+GameCapture.LimitFramerate="Begræns optagelsesbilledhastighed"
+GameCapture.CaptureOverlays="Optag tredjepartsoverlejringer (såsom steam)"
+GameCapture.AntiCheatHook="Benyt anti-cheat kompatibilitets-hook"
GameCapture.HotkeyStart="Optag forreste vindue"
-GameCapture.HotkeyStop="Deaktiver optagelse"
+GameCapture.HotkeyStop="Deaktivér optagelse"
GameCapture.HookRate="Hook-hastighed"
GameCapture.HookRate.Slow="Langsom"
GameCapture.HookRate.Normal="Normal (anbefalet)"
obs-studio-23.1.0.tar.xz/plugins/win-capture/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-capture/data/locale/de-DE.ini
Changed
WindowCapture.Priority.Exe="Fenstertitel soll übereinstimmen, ansonsten Fenster des gleichen Programms finden"
CaptureCursor="Mauszeiger aufnehmen"
Compatibility="Multi-Adapter-Kompatibilität"
-SLIFix="SLI/Crossfire Aufnahmemodus (Langsam)"
+SLIFix="SLI-/Crossfire-Aufnahmemodus (Langsam)"
AllowTransparency="Erlaube Transparenz"
-Monitor="Anzeige"
+Monitor="Bildschirm"
PrimaryMonitor="Hauptmonitor"
GameCapture="Spielaufnahme"
GameCapture.AnyFullscreen="Beliebige Vollbildanwendung erfassen"
GameCapture.ForceScaling="Erzwinge Skalierung"
GameCapture.ScaleRes="Skaliere Auflösung"
GameCapture.LimitFramerate="Limitiere FPS der Aufnahme"
-GameCapture.CaptureOverlays="Aufnahme von Drittanbieter Overlays (z.B. Steam)"
+GameCapture.CaptureOverlays="Aufnahme von Drittanbieter Overlays (z. B. Steam)"
GameCapture.AntiCheatHook="Verwende Anti-Cheat-Kompatibilität Hook"
GameCapture.HotkeyStart="Fenster im Vordergrund erfassen"
GameCapture.HotkeyStop="Erfassen deaktivieren"
obs-studio-23.1.0.tar.xz/plugins/win-capture/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/plugins/win-capture/data/locale/it-IT.ini
Changed
AllowTransparency="Permetti la trasparenza"
Monitor="Schermo"
PrimaryMonitor="schermo principale"
-GameCapture="Cattura finestra a schermo intero"
+GameCapture="Cattura gioco"
GameCapture.AnyFullscreen="Cattura qualsiasi applicazione a schermo intero"
GameCapture.CaptureWindow="Cattura una finestra specifica"
GameCapture.UseHotkey="Cattura la finestra in primo piano con la scorciatoia"
obs-studio-23.1.0.tar.xz/plugins/win-capture/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/win-capture/data/locale/vi-VN.ini
Changed
GameCapture.AntiCheatHook="Dùng hook tương thích với phần mềm chống gian lận"
GameCapture.HotkeyStart="Quay nền trước cửa sổ"
GameCapture.HotkeyStop="Tắt quay"
+GameCapture.HookRate.Slow="Chậm"
+GameCapture.HookRate.Normal="Bình thường (nên chọn)"
+GameCapture.HookRate.Fast="Nhanh"
+GameCapture.HookRate.Fastest="Nhanh nhất"
Mode="Chế độ"
obs-studio-23.1.0.tar.xz/plugins/win-capture/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/win-capture/data/locale/zh-CN.ini
Changed
WindowCapture.Window="窗口"
WindowCapture.Priority="窗口匹配优先级"
WindowCapture.Priority.Title="窗口标题必须匹配"
-WindowCapture.Priority.Class="匹配标题, 否则查找同样类型的窗口"
-WindowCapture.Priority.Exe="匹配标题, 否则查找同样可执行程序的窗口"
+WindowCapture.Priority.Class="匹配标题,否则查找相同类型的窗口"
+WindowCapture.Priority.Exe="匹配标题,否则查找相同可执行程序的窗口"
CaptureCursor="捕捉光标"
Compatibility="多适配器的兼容性"
SLIFix="SLI/Crossfire 捕获模式 (慢)"
GameCapture.AntiCheatHook="使用反作弊兼容性钩子"
GameCapture.HotkeyStart="捕获前景窗口"
GameCapture.HotkeyStop="停止捕获"
-GameCapture.HookRate="钩子率"
+GameCapture.HookRate="钩子速率"
GameCapture.HookRate.Slow="慢"
GameCapture.HookRate.Normal="正常 (推荐)"
GameCapture.HookRate.Fast="快"
obs-studio-23.1.0.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-23.2.0.tar.xz/plugins/win-capture/game-capture.c
Changed
"devenv",
"taskmgr",
"chrome",
+ "discord",
"firefox",
"systemsettings",
"applicationframehost",
obs-studio-23.1.0.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c -> obs-studio-23.2.0.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c
Changed
static inline int try_lock_shmem_tex(int id)
{
int next = id == 0 ? 1 : 0;
+ DWORD wait_result = WAIT_FAILED;
- if (WaitForSingleObject(tex_mutexes[id], 0) == WAIT_OBJECT_0) {
+ wait_result = WaitForSingleObject(tex_mutexes[id], 0);
+ if (wait_result == WAIT_OBJECT_0 || wait_result == WAIT_ABANDONED) {
return id;
- } else if (WaitForSingleObject(tex_mutexes[next], 0) == WAIT_OBJECT_0) {
+ }
+
+ wait_result = WaitForSingleObject(tex_mutexes[next], 0);
+ if (wait_result == WAIT_OBJECT_0 || wait_result == WAIT_ABANDONED) {
return next;
}
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini
Changed
VideoCaptureDevice="جهاز التقاط الفيديو"
Device="الجهاز"
-ColorSpace="مساحة ألوان YUV"
ColorSpace.Default="الإفتراضي"
-ColorRange="نطاق ألوان YUV"
ColorRange.Partial="جزئي"
ColorRange.Full="كامل"
ConfigureAudio="تكوين الصوت"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/bg-BG.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/bg-BG.ini
Changed
VideoCaptureDevice="Видео входно устройство"
Device="Устройство"
-ColorSpace="Цветово пространство YUV"
ColorSpace.Default="По подразбиране"
-ColorRange="Цветови диапазон YUV"
ColorRange.Partial="Частичен"
ColorRange.Full="Пълен"
ConfigureAudio="Настройки на звук"
Resolution="Резолюция"
VideoFormat="Видео формат"
VideoFormat.Any="Всичко"
-VideoFormat.Unknown="Неизвестно (%1)"
+VideoFormat.Unknown="Неизвестно (%1)"
AudioDevice="Звуково устройство"
Buffering="Буфериране"
Buffering.AutoDetect="Автоматично засичане"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/bn-BD.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/bn-BD.ini
Changed
VideoCaptureDevice="ভিডিও ক্যাপচার ডিভাইস"
ColorSpace.Default="পূর্ব-নির্ধারিত"
-ColorRange="YUV রং বিন্যাস"
ConfigureAudio="অডিও বিন্যাস করুন"
ConfigureVideo="ভিডিও বিন্যাস করুন"
ConfigureCrossbar="Crossbar বিন্যাস করুন"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ca-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ca-ES.ini
Changed
VideoCaptureDevice="Dispositiu de captura de vídeo"
Device="Dispositiu"
-ColorSpace="Espai de color YUV"
+ColorSpace="Espai de color"
ColorSpace.Default="Per defecte"
-ColorRange="Gamma de color YUV"
+ColorRange="Gamma de colors"
ColorRange.Partial="Parcial"
ColorRange.Full="Completa"
ConfigureAudio="Configura l'àudio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/cs-CZ.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/cs-CZ.ini
Changed
VideoCaptureDevice="Zařízení pro záznam obrazu"
Device="Zařízení"
-ColorSpace="Barevný prostor YUV"
+ColorSpace="Barevný prostor"
ColorSpace.Default="Výchozí"
-ColorRange="Oblast barev YUV"
+ColorRange="Rozsah barev"
ColorRange.Partial="Částečná"
ColorRange.Full="Plná"
ConfigureAudio="Natavit zvuk"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/da-DK.ini
Changed
-VideoCaptureDevice="Video Optagelsesenhed"
+VideoCaptureDevice="Videooptagelsesenhed"
Device="Enhed"
-ColorSpace="YUV farverum"
+ColorSpace="Farverum"
ColorSpace.Default="Standard"
-ColorRange="YUV farveområde"
+ColorRange="Farveområde"
ColorRange.Partial="Delvis"
ColorRange.Full="Fuld"
-ConfigureAudio="Konfigurere lyd"
-ConfigureVideo="Konfigurere Video"
-ConfigureCrossbar="Konfigurere overligger"
-ResFPSType="Opløsning/FPS Type"
-ResFPSType.Custom="Brugerdefineret"
-ResFPSType.DevPreferred="Enhedens standard"
-FPS.Matching="Match Udgang FPS"
+ConfigureAudio="Opsæt lyd"
+ConfigureVideo="Opsæt video"
+ConfigureCrossbar="Opsæt overligger"
+ResFPSType="Opløsning/FPS-type"
+ResFPSType.Custom="Tilpasset"
+ResFPSType.DevPreferred="Enhedensstandard"
+FPS.Matching="Match Output-FPS"
FPS.Highest="Højeste FPS"
Resolution="Opløsning"
-VideoFormat="Video Format"
-VideoFormat.Any="Enhver"
+VideoFormat="Videoformat"
+VideoFormat.Any="Enhvert"
VideoFormat.Unknown="Ukendt (%1)"
-AudioOutputMode="Tilstand for lydoutput"
+AudioOutputMode="Lydoutputtilstand"
AudioOutputMode.Capture="Optag kun lyd"
-AudioOutputMode.DirectSound="Output skrivebordslyd (DirectSound)"
-AudioOutputMode.WaveOut="Output skrivebordslyd (WaveOut)"
-UseCustomAudioDevice="Brug brugerdefinerede lydenhed"
+AudioOutputMode.DirectSound="Output Skrivebordslyd (DirectSound)"
+AudioOutputMode.WaveOut="Output Skrivebordslyd (WaveOut)"
+UseCustomAudioDevice="Benyt tilpassede lydenhed"
AudioDevice="Lydenhed"
Buffering="Buffering"
-Buffering.ToolTip="Når aktiveret, vil video/audio data blive bufferet for at sikre den glatteste og mest\nkorrekt afspilning, men på bekostning af øget svartid. Når \nbuffering bruges med et video-capturekort, anbefales det at indstille kort og \nprogrammet til samme framerate for bedste resultat.\n\nNår deaktiveret, sikrer laveste svartids afspilning, men på bekostning af frame\nafspilnings-nøjagtighed. Dette er ideelt til ansigtskameraer, eller når du vil bruge the\nprogrammets eksempelvindue til at spille en konsol.\n\nAutogenkend (standard) indstiller den til aktiveret, hvis enheden har forsinkelse og disabled\nhvis det ikke har nogen forsinkelse."
+Buffering.ToolTip="Når aktiveret, buffers video-/lyddata for at sikre den jævneste og mest\nkorrekte afspilning, men på bekostning af øget responstid. Når \nbuffering benyttes med et videooptagelseskort, anbefales det at opsætte kortet og \nprogrammet til samme billedhastighed for bedste resultat.\n\nNår deaktiveret, sikres laveste responstidsafspilning, dog på bekostning af billed-\nafspilningsnøjagtighed. Dette er ideelt til ansigtskameraer, eller når du vil benytten\nprogrammets eksempelvindue til at spille en konsol.\n\nAutogenkend (standard) indstiller den til aktiveret, hvis enheden har forsinkelse og deaktiveret,\nhvis den ingen forsinkelse har."
Buffering.AutoDetect="Autogenkend"
-Buffering.Enable="Aktiver"
-Buffering.Disable="Deaktiver"
+Buffering.Enable="Aktivér"
+Buffering.Disable="Deaktivér"
Activate="Aktivér"
Deactivate="Deaktivér"
FlipVertically="Spejlvend vertikalt"
-DeactivateWhenNotShowing="Deaktiver når ikke vist"
+DeactivateWhenNotShowing="Deaktivér, når ikke vist"
-Bitrate="Bitrate"
+Bitrate="Bit-hastighed"
Encoder.C985="AVerMedia H.264 Encoder (c985)"
Encoder.C353="AVerMedia H.264 Encoder"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/de-DE.ini
Changed
VideoCaptureDevice="Videoaufnahmegerät"
Device="Gerät"
-ColorSpace="YUV-Farbraum"
+ColorSpace="Farbraum"
ColorSpace.Default="Standard"
-ColorRange="YUV Farbpalette"
+ColorRange="Farbbereich"
ColorRange.Partial="Teilweise"
ColorRange.Full="Voll"
ConfigureAudio="Audio konfigurieren"
ConfigureVideo="Video konfigurieren"
ConfigureCrossbar="Crossbar konfigurieren"
-ResFPSType="Auflösung/FPS Typ"
+ResFPSType="Auflösung/FPS-Typ"
ResFPSType.Custom="Benutzerdefiniert"
ResFPSType.DevPreferred="Gerätestandard"
FPS.Matching="An Ausgabe angleichen"
UseCustomAudioDevice="Benutzerdefiniertes Audiogerät verwenden"
AudioDevice="Audiogerät"
Buffering="Pufferung"
-Buffering.ToolTip="Wenn aktiviert, werden die Video-/Audiodaten gepuffert, um die möglichst flüssigste und genaueste Wiedergabe zu gewährleisten, aber auf Kosten von erhöhter Verzögerung. Wenn eine Capture-Card-Pufferung benutzt wird, wird es empfohlen, die Karte und OBS Studio auf die gleiche FPS-Anzahl zu setzen, um die besten Ergebnisse zu erzielen.\n\nWenn deaktiviert, wird die niedrigste Verzögerung für die Wiedergabe gewährleistet, aber auf Kosten der Framewiedergabegenauigkeit.\nDies ist ideal für Webcams oder, wenn Sie das Vorschaufenster des Programms benutzen wollen, um z.B. an einer Spielekonsole zu spielen.\n\nDie automatisch Erkennung aktiviert es, wenn das Gerät Verzögerung hat und deaktiviert es, wenn es keine Verzögerung gibt."
+Buffering.ToolTip="Wenn aktiviert, werden die Video-/Audiodaten gepuffert, um die möglichst flüssigste und genaueste Wiedergabe zu gewährleisten, aber auf Kosten von erhöhter Verzögerung. Wenn eine Capture-Card-Pufferung benutzt wird, wird es empfohlen, die Karte und OBS Studio auf die gleiche FPS-Anzahl zu setzen, um die besten Ergebnisse zu erzielen.\n\nWenn deaktiviert, wird die niedrigste Verzögerung für die Wiedergabe gewährleistet, aber auf Kosten der Framewiedergabegenauigkeit.\nDies ist ideal für Webcams oder, wenn Sie das Vorschaufenster des Programms benutzen wollen, um z. B. an einer Spielekonsole zu spielen.\n\nDie automatisch Erkennung aktiviert es, wenn das Gerät Verzögerung hat und deaktiviert es, wenn es keine Verzögerung gibt."
Buffering.AutoDetect="Automatisch erkennen"
Buffering.Enable="Aktivieren"
Buffering.Disable="Deaktivieren"
DeactivateWhenNotShowing="Deaktivieren, wenn die Quelle nicht angezeigt wird"
Bitrate="Bitrate"
-Encoder.C985="AVerMedia H.264 Codierer (c985)"
-Encoder.C353="AVerMedia H.264 Codierer"
+Encoder.C985="AVerMedia-H.264-Kodierer (c985)"
+Encoder.C353="AVerMedia-H.264-Kodierer"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/el-GR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/el-GR.ini
Changed
VideoCaptureDevice="Συσκευή Λήψης Βίντεο"
Device="Συσκευή"
-ColorSpace="Χώρος χρωμάτων YUV"
ColorSpace.Default="Προεπιλογή"
-ColorRange="Ποικιλία χρωμάτων YUV"
ColorRange.Partial="Μερικό"
ColorRange.Full="Πλήρες"
ConfigureAudio="Ρύθμιση Ήχου"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/en-US.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/en-US.ini
Changed
# video capture device text
VideoCaptureDevice="Video Capture Device"
Device="Device"
-ColorSpace="YUV Color Space"
+ColorSpace="Color Space"
ColorSpace.Default="Default"
-ColorRange="YUV Color Range"
+ColorRange="Color Range"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
ConfigureAudio="Configure Audio"
UseCustomAudioDevice="Use custom audio device"
AudioDevice="Audio Device"
Buffering="Buffering"
-Buffering.ToolTip="When enabled, buffers video/audio data to ensure the smoothest and most\naccurate playback possible, but at the cost of increased latency. When using\nbuffering with a video capture card, it's recommended to set the card and the\nprogram to the same framerate for best results.\n\nWhen disabled, ensures lowest latency playback, but at the cost of frame\nplayback accuracy. This is ideal for face cameras, or when you want to use the\nprogram's preview window to play a console.\n\nAuto-detect (default) sets it to enabled if the device has delay, and disabled\nif it has no delay."
+Buffering.ToolTip="When enabled, buffers video/audio data to ensure the smoothest and most\naccurate playback possible, but at the cost of increased latency. When using\nbuffering with a video capture card, it's recommended to set the card and the\nprogram to the same framerate for best results.\n\nWhen disabled, ensures lowest latency playback, but at the cost of frame\nplayback accuracy. This is ideal for face cameras, or when you want to use the\nprogram's preview window to play a console.\n\nAuto-detect (default) sets it to enabled if the device has delay, and disabled\nif it has no delay."
Buffering.AutoDetect="Auto-Detect"
Buffering.Enable="Enable"
Buffering.Disable="Disable"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/es-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/es-ES.ini
Changed
VideoCaptureDevice="Dispositivo de captura de video"
Device="Dispositivo"
-ColorSpace="Espacio de color YUV"
+ColorSpace="Espacio de color"
ColorSpace.Default="Por defecto"
-ColorRange="Gama de Color YUV"
+ColorRange="Rango de colores"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
ConfigureAudio="Configurar Audio"
UseCustomAudioDevice="Utilizar dispositivo de audio personalizado"
AudioDevice="Dispositivo de audio"
Buffering="Almacenando en buffer"
-Buffering.ToolTip="Cuando se activa, almacena datos de vídeo/audio para asegurar una reproducción\nlo más suave y precisa posible, pero a costa de un mayor tiempo de respuesta.\nCuando se usa el buffer con una tarjeta capturadora de vídeo, se recomienda establecer\nla tarjeta y el programa a la misma velocidad de fotogramas para un mejor resultado.\n\nCuando se desactiva, se garantiza la reproducción con el tiempo de respuesta más bajo, pero a costa\nde perder precisión en la reproducción de los fotogramas. Esto es ideal para el uso de webcams,\no cuando desea utilizar la ventana de vista previa de programa para jugar a una consola.\n\nAutodetectar (por defecto) se activa si el dispositivo tiene retardo y se desactiva\nsi no tiene ningún retardo."
+Buffering.ToolTip="Cuando se activa, almacena datos de vídeo/audio para asegurar una reproducción\nlo más suave y precisa posible, pero a costa de un mayor tiempo de respuesta.\nCuando se usa el buffer con una tarjeta capturadora de vídeo, se recomienda establecer\nla tarjeta y el programa a la misma velocidad de fotogramas para un mejor resultado.\n\nCuando se desactiva, se garantiza la reproducción con el tiempo de respuesta más bajo, pero a costa\nde perder precisión en la reproducción de los fotogramas. Esto es ideal para el uso de webcams,\no cuando desea utilizar la ventana de vista previa de programa para jugar a una consola.\n\nAutodetectar (por defecto) se activa si el dispositivo tiene retardo y se desactiva\nsi no tiene ningún retardo."
Buffering.AutoDetect="Autodetectar"
Buffering.Enable="Habilitado"
Buffering.Disable="Deshabilitar"
DeactivateWhenNotShowing="Desactive cuando no se vea"
Bitrate="Tasa de bits"
-Encoder.C985="Codificador AVerMedia H.264 (c985)"
+Encoder.C985="Codificador AVerMedia H.264 (c985)"
Encoder.C353="Codificador H.264 de AVerMedia"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/et-EE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/et-EE.ini
Changed
VideoCaptureDevice="Videohõive seade"
Device="Seade"
-ColorSpace="YUV värviruumi"
ColorSpace.Default="Vaikimisi"
-ColorRange="YUV värviruumi vahemik"
ColorRange.Partial="Osaliselt"
ColorRange.Full="Täielik"
ConfigureAudio="Konfigureerige heli"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/eu-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/eu-ES.ini
Changed
VideoCaptureDevice="Bideoa kapturatzeko gailua"
Device="Gailua"
-ColorSpace="YUV kolore-espazioa"
+ColorSpace="Kolore-espazioa"
ColorSpace.Default="Lehenetsia"
-ColorRange="YUV kolore-barrutia"
+ColorRange="Kolore tartea"
ColorRange.Partial="Partziala"
ColorRange.Full="Osoa"
ConfigureAudio="Konfiguratu audioa"
UseCustomAudioDevice="Erabili audio gailu pertsonalizatua"
AudioDevice="Audio gailua"
Buffering="Bufferrereratzen"
-Buffering.ToolTip="Gaitutakoan, bideo/audio datuak oroimeneratzen ditu irakurketa lehunagoa\neta zehatzagoa egiteko, baina atzerapena handitzearen ordainarekin.\nOroimeneratzea bideo harpen txartel batekin erabiltzerakoan, gomendagarria da\ntxartela eta programa frameneurri bera erabiltzeko ezartzea.\n\nEzgaitutakoan, irakurketa atzerapen txikiagoa zihurtatzen du, baina\nframe irakurketa zehaztasunaren ordainarekin. Hau egokia da aurpegi kamerentzat,\nedo programaren aurreikuspen leihoa erabiltzea nahi duzunean kontsola batean irakurtzeko.\n\nBerez-atzemanek (berezkoa) gaitu egiten du gailuak atzerapena badu, eta ezgaitu\natzerapenik ez badu."
+Buffering.ToolTip="Gaituta badago, bideo/audio datuak bufferatzen ditu irakurketa leunagoa\neta zehatzagoa egiteko, baina latentzia handitzearen ordainarekin.\nBufferatzea bideoa kapturatzeko txartel baten bidez egiten denean, gomendagarria da\ntxartela eta programa fotograma neurri bera erabiltzeko ezartzea.\n\nEzgaituta badago, erreprodukzio latentzia txikiagoa ziurtatzen du, baina\nfotograma erreprodukzio zehaztasunaren kaltean. Hau egokia da aurpegi kamerentzat,\nedo programaren aurrebista leihoa erabiltzea nahi duzunean kontsola batean irakurtzeko.\n\nAutodetekzioak (berezkoa) gaitu egiten du gailuak atzerapena badu, eta ezgaitu\natzerapenik ez badu."
Buffering.AutoDetect="Auto-detektatu"
Buffering.Enable="Gaitu"
Buffering.Disable="Ezgaitu"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/fi-FI.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/fi-FI.ini
Changed
VideoCaptureDevice="Videokaappauslaite"
Device="Laite"
-ColorSpace="YUV väriavaruus"
+ColorSpace="Väriavaruus"
ColorSpace.Default="Oletus"
-ColorRange="YUV värialue"
+ColorRange="Värialue"
ColorRange.Partial="Osittainen"
ColorRange.Full="Täysi"
ConfigureAudio="Määritä ääni"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/fil-PH.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/fil-PH.ini
Changed
VideoCaptureDevice="Pagkuha ng Bidyo na device"
Device="Device"
-ColorSpace="Kulay sa Pagitan ng YUV"
ColorSpace.Default="I-Default"
-ColorRange="Saklaw ng Kulat ng YUV"
ColorRange.Partial="Partial"
ColorRange.Full="Puno"
ConfigureAudio="I-Configure ang Audio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/fr-FR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/fr-FR.ini
Changed
VideoCaptureDevice="Périphérique de capture vidéo"
Device="Périphérique"
-ColorSpace="Espace de couleur YUV"
+ColorSpace="Espace de couleurs YUV"
ColorSpace.Default="Par défaut"
ColorRange="Gamme de couleurs YUV"
ColorRange.Partial="Partielle"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/gd-GB.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/gd-GB.ini
Changed
VideoCaptureDevice="Uidheam glacadh video"
Device="Uidheam"
-ColorSpace="Spàs dhathan YUV"
ColorSpace.Default="Bun-roghainn"
-ColorRange="Rainse dhathan YUV"
ColorRange.Partial="Leth-phàirteach"
ColorRange.Full="Làn"
ConfigureAudio="Rèitich an fhuaim"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/gl-ES.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/gl-ES.ini
Changed
VideoCaptureDevice="Dispositivo de captura de vídeo"
Device="Dispositivo"
-ColorSpace="Espazo de cor YUV"
ColorSpace.Default="Por defecto"
-ColorRange="Gama de cor YUV"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
ConfigureAudio="Configurar audio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/he-IL.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/he-IL.ini
Changed
VideoCaptureDevice="התקן לכידת וידאו"
Device="התקן"
-ColorSpace="מרחב צבע YUV"
ColorSpace.Default="ברירת מחדל"
-ColorRange="טווח צבע YUV"
ColorRange.Partial="חלקי"
ColorRange.Full="מלא"
ConfigureAudio="הגדר שמע"
UseCustomAudioDevice="השתמש בהתקן שמע מותאם אישית"
AudioDevice="התקן שמע"
Buffering="אגירה"
-Buffering.ToolTip="כאשר מאופשר, מאגר נתונים וידאו / אודיו כדי להבטיח את ההשמעה חלקה ביותר \n accurate אפשרי, אבל במחיר של חביון מוגברת. בעת שימוש \n בכביסה עם כרטיס לכידת וידאו, מומלץ להגדיר את הכרטיס ואת \ nprogram לאותו פרמטרט לקבלת התוצאות הטובות ביותר. \n\n כאשר הוא מושבת, מבטיח השמעת חביון נמוכה ביותר, אך במחיר של מסגרת \n דיוק חזרה. זה אידיאלי למצלמות פנים, או כאשר ברצונך להשתמש בחלון התצוגה המקדימה של \n כדי להציג קונסולה. \n\n גילוי אוטומטי (ברירת מחדל) מגדיר אותו כך שאם המכשיר יש עיכוב, והוא מושבת \ nif ללא עיכוב."
+Buffering.ToolTip="כאשר מאופשר, מאגר נתונים וידאו / אודיו כדי להבטיח את ההשמעה חלקה ביותר \n accurate אפשרי, אבל במחיר של חביון מוגברת. בעת שימוש \n בכביסה עם כרטיס לכידת וידאו, מומלץ להגדיר את הכרטיס ואת \ nprogram לאותו פרמטרט לקבלת התוצאות הטובות ביותר. \n\n כאשר הוא מושבת, מבטיח השמעת חביון נמוכה ביותר, אך במחיר של מסגרת \n דיוק חזרה. זה אידיאלי למצלמות פנים, או כאשר ברצונך להשתמש בחלון התצוגה המקדימה של \n כדי להציג קונסולה. \n\n גילוי אוטומטי (ברירת מחדל) מגדיר אותו כך שאם המכשיר יש עיכוב, והוא מושבת \ nif ללא עיכוב."
Buffering.AutoDetect="זיהוי אוטומטי"
Buffering.Enable="אפשר"
Buffering.Disable="בטל"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/hr-HR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/hr-HR.ini
Changed
VideoCaptureDevice="Uređaj za snimanje videa"
Device="Uređaj"
-ColorSpace="YUV prostor boja"
ColorSpace.Default="Podrazumevani"
-ColorRange="YUV raspon boja"
ColorRange.Partial="Delimično"
ColorRange.Full="Potpuno"
ConfigureAudio="Podesi zvuk"
UseCustomAudioDevice="Koristi specifičan uređaj za zvuk"
AudioDevice="Uređaj za zvuk"
Buffering="Baferovanje"
-Buffering.ToolTip="Kada je omogućeno, baferovanje video/zvučnih podatke osigurava tečnu i najprecizniju\nmoguću reprodukciju, ali nosi i posledicu produženog kašnjenja. Kada je baferovanje u\nupotrebi sa karticom za hvatanje videa, preporučljivo je postaviti karticu i\nprogram na isti frejmrejt da dobijete najbolje rezultate.\n\nKada je onemogućeno, obezbeđuje najmanje kašnjenje reprodukcije, ali uz posledicu nepreciznosti\nreprodukovanog frejma. Ovo je idealno za kamere koje snimaju lica, ili kada želite\nda koristite programski prozor za pregled da biste igrali na konzoli.\n\nAutomatsko-otkrivanje (podrazumevano) automatski omogućava ovo ako uređaj ima kašnjenje i onemogućava\nako nema kašnjenja."
+Buffering.ToolTip="Kada je omogućeno, baferovanje video/zvučnih podatke osigurava tečnu i najprecizniju\nmoguću reprodukciju, ali nosi i posledicu produženog kašnjenja. Kada je baferovanje u\nupotrebi sa karticom za hvatanje videa, preporučljivo je postaviti karticu i\nprogram na isti frejmrejt da dobijete najbolje rezultate.\n\nKada je onemogućeno, obezbeđuje najmanje kašnjenje reprodukcije, ali uz posledicu nepreciznosti\nreprodukovanog frejma. Ovo je idealno za kamere koje snimaju lica, ili kada želite\nda koristite programski prozor za pregled da biste igrali na konzoli.\n\nAutomatsko-otkrivanje (podrazumevano) automatski omogućava ovo ako uređaj ima kašnjenje i onemogućava\nako nema kašnjenja."
Buffering.AutoDetect="Automatsko-otkrivanje"
Buffering.Enable="Omogući"
Buffering.Disable="Onemogući"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini
Changed
VideoCaptureDevice="Videorögzítő eszköz"
Device="Eszköz"
-ColorSpace="YUV színtér"
+ColorSpace="Színtér"
ColorSpace.Default="Alapértelmezett"
-ColorRange="YUV színtartomány"
+ColorRange="Színtartomány"
ColorRange.Partial="Részleges"
ColorRange.Full="Teljes"
ConfigureAudio="Audio beállítása"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/it-IT.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/it-IT.ini
Changed
VideoCaptureDevice="Dispositivo di cattura video"
Device="Dispositivo"
-ColorSpace="Spazio colore YUV"
+ColorSpace="Spazio colore"
ColorSpace.Default="Predefinito"
-ColorRange="Gamma di colore YUV"
+ColorRange="Gamma di colori"
ColorRange.Partial="Parziale"
ColorRange.Full="Intero"
ConfigureAudio="Configura l'audio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ja-JP.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ja-JP.ini
Changed
VideoCaptureDevice="映像キャプチャデバイス"
Device="デバイス"
-ColorSpace="YUV 色空間"
+ColorSpace="色空間"
ColorSpace.Default="既定"
-ColorRange="YUV 色範囲"
+ColorRange="色範囲"
ColorRange.Partial="一部"
ColorRange.Full="全部"
ConfigureAudio="音声を構成"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ka-GE.ini
Changed
VideoCaptureDevice="ვიდეოს გადამღები მოწყობილობა"
Device="მოწყობილობა"
-ColorSpace="YUV ფერთა სისტემა"
+ColorSpace="ფერთა სივრცე"
ColorSpace.Default="ნაგულისხმევი"
-ColorRange="YUV ფერთა გამა"
+ColorRange="ფერთა გამა"
ColorRange.Partial="ნაწილობრივი"
ColorRange.Full="სრული"
ConfigureAudio="ხმის გამართვა"
ResFPSType="გაფართოება/FPS სახეობა"
ResFPSType.Custom="მითითებული"
ResFPSType.DevPreferred="მოწყობილობის ნაგულისხმევი"
-FPS.Matching="გამომავალი ვიდეოს FPS-ის შესაბამისი"
+FPS.Matching="გამოტანის FPS-ის შესაბამისი"
FPS.Highest="უმაღლესი FPS"
Resolution="გაფართოება"
VideoFormat="ვიდეოს ფორმატი"
VideoFormat.Unknown="უცნობი (%1)"
AudioOutputMode="ხმის გამოტანის რეჟიმი"
AudioOutputMode.Capture="ხმის ჩაწერა მხოლოდ"
-AudioOutputMode.DirectSound="გამომავალი ხმა (DirectSound)"
-AudioOutputMode.WaveOut="გამომავალი ხმა (WaveOut)"
+AudioOutputMode.DirectSound="გამოტანილი ხმა (DirectSound)"
+AudioOutputMode.WaveOut="გამოტანილი ხმა (WaveOut)"
UseCustomAudioDevice="ხმის მითითებული მოწყობილობის გამოყენება"
AudioDevice="ხმის მოწყობილობა"
Buffering="ბუფერიზაცია"
-Buffering.ToolTip="როცა ჩართულია, მიმდინარეობს ვიდეოს/ხმის მონაცემების ბუფერიზაცია, რაც უზრუნველყოფს შეუფერხებლად და უმაღლესი\nხარისხით გადაცემას, თუმცა გაზრდილი დაყოვნების ხარჯზე. როცა იყენებთ\nბუფერიზაციას ვიდეოს ჩამწერი დაფით, სასურველია, რომ აპარატურასა და\nპროგრამას მიეთითოს ერთი და იგივე კადრის სიხშირე, საუკეთესო შედეგის მისაღებად.\n\nროცა გამორთულია, დაყოვნება მეტად მცირეა, თუმცა კადრების\nგადაცემის სისუფთავის ხარჯზე. ეს მეტად გამოსადეგია, კამერით გადაღებისას ან\nპროგრამის შესათვალიერებელი ფანჯრისთვის, ვიდეოთამაშისას.\n\nთვითშერჩევით (ნაგულისხმევი) მიეთითება ჩართვა, თუ მოწყობილობას აქვს დაყოვნება, ხოლო გამორთვა\n იმ შემთხვევაში, თუ არ აქვს დაყოვნება."
+Buffering.ToolTip="როცა ჩართულია, მიმდინარეობს ვიდეოს/ხმის მონაცემების ბუფერიზაცია, რაც უზრუნველყოფს შეუფერხებლად და უმაღლესი\nხარისხით გადაცემას, თუმცა გაზრდილი დაყოვნების ხარჯზე. როცა იყენებთ\nბუფერიზაციას ვიდეოს ჩამწერი დაფით, სასურველია, რომ აპარატურასა და\nპროგრამას მიეთითოს ერთი და იგივე კადრის სიხშირე, საუკეთესო შედეგის მისაღებად.\n\nროცა გამორთულია, დაყოვნება მეტად მცირეა, თუმცა კადრების\nგადაცემის სისუფთავის ხარჯზე. ეს მეტად გამოსადეგია, კამერით გადაღებისას ან\nპროგრამის შესათვალიერებელი ფანჯრისთვის, ვიდეოთამაშისას.\n\nთვითშერჩევით (ნაგულისხმევი) მიეთითება ჩართვა, თუ მოწყობილობას აქვს დაყოვნება, ხოლო გამორთვა\n იმ შემთხვევაში, თუ არ აქვს დაყოვნება."
Buffering.AutoDetect="თვითშერჩევა"
Buffering.Enable="ჩართვა"
Buffering.Disable="გამორთვა"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ko-KR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ko-KR.ini
Changed
VideoCaptureDevice="비디오 캡쳐 장치"
Device="장치"
-ColorSpace="YUV 색 공간"
+ColorSpace="색 공간"
ColorSpace.Default="기본"
-ColorRange="YUV 색상 범위"
+ColorRange="색상 범위"
ColorRange.Partial="부분"
ColorRange.Full="전체"
ConfigureAudio="오디오 설정"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini
Changed
VideoCaptureDevice="Videoopptaksenhet"
Device="Enhet"
-ColorSpace="YUV fargerom"
ColorSpace.Default="Standard"
-ColorRange="YUV fargespekter"
ColorRange.Partial="Delvis"
ColorRange.Full="Full"
ConfigureAudio="Konfigurer lyd"
UseCustomAudioDevice="Bruk egendefinert lydenhet"
AudioDevice="Lydenhet"
Buffering="Bufring"
-Buffering.ToolTip="Når aktivert, buffrer video/lyd-data for å sikre den jevneste og mest\nnøyaktige avspilling mulig, men på bekostning av økt ventetid. Ved\n bruk av et grafikkort for buffering. Er det anbefalt for å sette kortet og \nprogrammet til samme bildefrekvens for beste resultat.\n\nNår deaktivert, sikrer laveste forsinkelse ved avspilling, men på bekostning av\nnøyaktighet. Dette er ideelt for ansiktet kameraer, eller når du skal bruke\nprogrammets forhåndsvisningsvindu for å spille en konsoll.\n\nAutomatisk (standard) aktiverer det hvis enheten har forsinkelse og deaktiverer\ndet hvis kilden har ingen forsinkelse."
+Buffering.ToolTip="Når aktivert, buffrer video/lyd-data for å sikre den jevneste og mest\nnøyaktige avspilling mulig, men på bekostning av økt ventetid. Ved\n bruk av et grafikkort for buffering. Er det anbefalt for å sette kortet og \nprogrammet til samme bildefrekvens for beste resultat.\n\nNår deaktivert, sikrer laveste forsinkelse ved avspilling, men på bekostning av\nnøyaktighet. Dette er ideelt for ansiktet kameraer, eller når du skal bruke\nprogrammets forhåndsvisningsvindu for å spille en konsoll.\n\nAutomatisk (standard) aktiverer det hvis enheten har forsinkelse og deaktiverer\ndet hvis kilden har ingen forsinkelse."
Buffering.AutoDetect="Automatisk søk"
Buffering.Enable="Aktiver"
Buffering.Disable="Deaktiver"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/nl-NL.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/nl-NL.ini
Changed
VideoCaptureDevice="Video opname-apparaat"
Device="Apparaat"
-ColorSpace="YUV-Kleurruimte"
+ColorSpace="Kleurruimte"
ColorSpace.Default="Standaard"
-ColorRange="YUV-Kleurbereik"
+ColorRange="Kleurbereik"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
ConfigureAudio="Audio Instellen"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/pl-PL.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/pl-PL.ini
Changed
VideoCaptureDevice="Urządzenie do przechwytywania wideo"
Device="Urządzenie"
-ColorSpace="Przestrzeń kolorów YUV"
+ColorSpace="Przestrzeń kolorów"
ColorSpace.Default="Domyślne"
-ColorRange="Zakres kolorów YUV"
+ColorRange="Zakres kolorów"
ColorRange.Partial="Częściowy"
ColorRange.Full="Pełny"
ConfigureAudio="Konfiguracja dźwięku"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini
Changed
VideoCaptureDevice="Dispositivo de Captura de Vídeo"
Device="Dispositivo"
-ColorSpace="Espaço de cor YUV"
+ColorSpace="Espaço de cor"
ColorSpace.Default="Padrão"
-ColorRange="Intervalo de Cores YUV"
+ColorRange="Faixa de cores"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
ConfigureAudio="Configurar Áudio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/pt-PT.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/pt-PT.ini
Changed
VideoCaptureDevice="Dispositivo de captura de vídeo"
Device="Dispositivo"
-ColorSpace="Espaço de cor YUV"
ColorSpace.Default="Predefinição"
-ColorRange="Gama de cor YUV"
ColorRange.Partial="Parcial"
ColorRange.Full="Total"
ConfigureAudio="Configurar áudio"
UseCustomAudioDevice="Utilizar dispositivo de áudio personalizado"
AudioDevice="Dispositivo de áudio"
Buffering="Buffering"
-Buffering.ToolTip="Quando ativado, os buffers de dados de vídeo/áudio garantem o melhor e mais suave\nreprodução precisa possível, mas ao custo de uma maior latência. Ao usar o\ncom uma placa de captura de vídeo, recomenda-se definir a placa e o\npara o mesmo frameerate para melhores resultados.\n\nQuando desativado, garante a menor latência de reprodução, mas com o custo de frame\nprecisão de reprodução. Isso é ideal para câmeras de face, ou quando você quiser usar o comando\njanela de pré-visualização do programa para reproduzir um console.\n\nAuto-detecção (predefinição) define-o como activado se o dispositivo tiver atraso e desactivado\nse não houver atraso."
+Buffering.ToolTip="Quando ativado, os buffers de dados de vídeo/áudio garantem o melhor e mais suave\nreprodução precisa possível, mas ao custo de uma maior latência. Ao usar o\ncom uma placa de captura de vídeo, recomenda-se definir a placa e o\npara o mesmo frameerate para melhores resultados.\n\nQuando desativado, garante a menor latência de reprodução, mas com o custo de frame\nprecisão de reprodução. Isso é ideal para câmeras de face, ou quando você quiser usar o comando\njanela de pré-visualização do programa para reproduzir um console.\n\nAuto-detecção (predefinição) define-o como activado se o dispositivo tiver atraso e desactivado\nse não houver atraso."
Buffering.AutoDetect="Detetar Automaticamente"
Buffering.Enable="Ativo"
Buffering.Disable="Desativado"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini
Changed
VideoCaptureDevice="Dispozitiv de captură video"
Device="Dispozitiv"
-ColorSpace="Spațiu de culori YUV"
ColorSpace.Default="Implicit"
-ColorRange="Gamă de culori YUV"
ColorRange.Partial="Parțială"
ColorRange.Full="Completă"
ConfigureAudio="Configurare audio"
AudioOutputMode.WaveOut="Ieșire audio desktop (WaveOut)"
UseCustomAudioDevice="Folosește dispozitiv audio personalizat"
AudioDevice="Dispozitiv audio"
-Buffering="Buffering"
+Buffering="Zonă tampon"
Buffering.AutoDetect="Detectează automat"
+Buffering.Enable="Activează"
+Buffering.Disable="Dezactivează"
Activate="Activează"
Deactivate="Dezactivează"
FlipVertically="Rotește vertical"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/ru-RU.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/ru-RU.ini
Changed
VideoCaptureDevice="Устройство захвата видео"
Device="Устройство"
-ColorSpace="Цветовое пространство YUV"
+ColorSpace="Цветовое пространство"
ColorSpace.Default="По умолчанию"
-ColorRange="Цветовой диапазон YUV"
+ColorRange="Цветовой диапазон"
ColorRange.Partial="Частичный"
ColorRange.Full="Полный"
ConfigureAudio="Настроить звук"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/sk-SK.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/sk-SK.ini
Changed
VideoCaptureDevice="Zariadenie na zachytávanie videa"
Device="Zariadenie"
-ColorSpace="Farebný priestor YUV"
+ColorSpace="Farebný priestor"
ColorSpace.Default="Predvolený"
-ColorRange="Rozsah farieb YUV"
+ColorRange="Farebný rozsah"
ColorRange.Partial="Čiastočný"
ColorRange.Full="Úplný"
ConfigureAudio="Nastaviť zvuk"
VideoFormat="Formát videa"
VideoFormat.Any="Akýkoľvek"
VideoFormat.Unknown="Neznámy (%1)"
-AudioOutputMode="Režim audio výstupu"
+AudioOutputMode="Režim zvukového výstupu"
AudioOutputMode.Capture="Zachytiť iba zvuk"
AudioOutputMode.DirectSound="Zachytiť zvuk plochy (DirectSound)"
AudioOutputMode.WaveOut="Zachytiť zvuk plochy (WaveOut)"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini
Changed
VideoCaptureDevice="Naprava za zajemanje videa"
Device="Naprava"
-ColorSpace="YUV Barvni Prostor"
-ColorRange="YUV Barvni Razpon"
ColorRange.Partial="Delno"
ColorRange.Full="Polno"
ConfigureAudio="Nastavi zvok"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/sr-CS.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/sr-CS.ini
Changed
VideoCaptureDevice="Uređaj za snimanje videa"
Device="Uređaj"
-ColorSpace="YUV prostor boja"
ColorSpace.Default="Podrazumevani"
-ColorRange="YUV raspon boja"
ColorRange.Partial="Delimično"
ColorRange.Full="Potpuno"
ConfigureAudio="Podesi zvuk"
UseCustomAudioDevice="Koristi specifičan uređaj za zvuk"
AudioDevice="Uređaj za zvuk"
Buffering="Baferovanje"
-Buffering.ToolTip="Kada je omogućeno, baferovanje video/zvučnih podatke osigurava tečnu i najprecizniju\nmoguću reprodukciju, ali nosi i posledicu produženog kašnjenja. Kada je baferovanje u\nupotrebi sa karticom za hvatanje videa, preporučljivo je postaviti karticu i\nprogram na isti frejmrejt da dobijete najbolje rezultate.\n\nKada je onemogućeno, obezbeđuje najmanje kašnjenje reprodukcije, ali uz posledicu nepreciznosti\nreprodukovanog frejma. Ovo je idealno za kamere koje snimaju lica, ili kada želite\nda koristite programski prozor za pregled da biste igrali na konzoli.\n\nAutomatsko-otkrivanje (podrazumevano) automatski omogućava ovo ako uređaj ima kašnjenje i onemogućava\nako nema kašnjenja."
+Buffering.ToolTip="Kada je omogućeno, baferovanje video/zvučnih podatke osigurava tečnu i najprecizniju\nmoguću reprodukciju, ali nosi i posledicu produženog kašnjenja. Kada je baferovanje u\nupotrebi sa karticom za hvatanje videa, preporučljivo je postaviti karticu i\nprogram na isti frejmrejt da dobijete najbolje rezultate.\n\nKada je onemogućeno, obezbeđuje najmanje kašnjenje reprodukcije, ali uz posledicu nepreciznosti\nreprodukovanog frejma. Ovo je idealno za kamere koje snimaju lica, ili kada želite\nda koristite programski prozor za pregled da biste igrali na konzoli.\n\nAutomatsko-otkrivanje (podrazumevano) automatski omogućava ovo ako uređaj ima kašnjenje i onemogućava\nako nema kašnjenja."
Buffering.AutoDetect="Automatsko-otkrivanje"
Buffering.Enable="Omogući"
Buffering.Disable="Onemogući"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/sr-SP.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/sr-SP.ini
Changed
VideoCaptureDevice="Уређај за снимање видеа"
Device="Уређај"
-ColorSpace="YUV простор боја"
ColorSpace.Default="Подразумевани"
-ColorRange="YUV распон боја"
ColorRange.Partial="Делимично"
ColorRange.Full="Потпуно"
ConfigureAudio="Подеси звук"
UseCustomAudioDevice="Користи специфичан уређај за звук"
AudioDevice="Уређај за звук"
Buffering="Баферовање"
-Buffering.ToolTip="Када је омогућено, баферовање видео/звучних података осигурава течну и најпрецизнију\nмогућу репродукцију, али носи и последицу продуженог кашњења. Када је баферовање у\nупотреби са картицом за хватање видеа, препоручљиво је поставити картицу и\nпрограм на исти фрејмрејт да добијете најбоље резултате.\n\nКада је онемогућено, обезбеђује најмање кашњење репродукције, али уз последицу непрецизности\nрепродукованог фрејма. Ово је идеално за камере које снимају лица, или када желите\nда користите програмски прозор за преглед да бисте играли на конзоли.\n\nАутоматско-откривање (подразумевано) аутоматски омогућава ово ако уређај има кашњење и онемогућава\nако нема кашњења."
+Buffering.ToolTip="Када је омогућено, баферовање видео/звучних података осигурава течну и најпрецизнију\nмогућу репродукцију, али носи и последицу продуженог кашњења. Када је баферовање у\nупотреби са картицом за хватање видеа, препоручљиво је поставити картицу и\nпрограм на исти фрејмрејт да добијете најбоље резултате.\n\nКада је онемогућено, обезбеђује најмање кашњење репродукције, али уз последицу непрецизности\nрепродукованог фрејма. Ово је идеално за камере које снимају лица, или када желите\nда користите програмски прозор за преглед да бисте играли на конзоли.\n\nАутоматско-откривање (подразумевано) аутоматски омогућава ово ако уређај има кашњење и онемогућава\nако нема кашњења."
Buffering.AutoDetect="Аутоматско-откривање"
Buffering.Enable="Омогући"
Buffering.Disable="Онемогући"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini
Changed
VideoCaptureDevice="Videoinmatningsenhet"
Device="Enhet"
-ColorSpace="YUV-färgrymd"
+ColorSpace="Färgrymd"
ColorSpace.Default="Standard"
-ColorRange="YUV färgområde"
+ColorRange="Färgintervall"
ColorRange.Partial="Partiell"
ColorRange.Full="Full"
ConfigureAudio="Konfigurera ljud"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/tl-PH.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/tl-PH.ini
Changed
VideoCaptureDevice="Ang Video Capture Device"
Device="Ang Device"
-ColorSpace="Ang Kulay Ispasyo ng YUV"
ColorSpace.Default="Mga Default"
-ColorRange="Ang Kulay Hangganan ng YUV"
ColorRange.Partial="Pang-una"
ColorRange.Full="Lahat"
ConfigureAudio="I-configure ang Audio"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini
Changed
VideoCaptureDevice="Video Yakalama Aygıtı"
Device="Aygıt"
-ColorSpace="YUV Renk Uzayı"
+ColorSpace="Renk Uzayı"
ColorSpace.Default="Varsayılan"
-ColorRange="YUV Renk Aralığı"
+ColorRange="Renk Aralığı"
ColorRange.Partial="Kısmi"
ColorRange.Full="Tam"
ConfigureAudio="Ses Ayarları"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/uk-UA.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/uk-UA.ini
Changed
VideoCaptureDevice="Відео пристрій"
Device="Пристрій"
-ColorSpace="YUV, колірний простір"
ColorSpace.Default="За замовчанням"
-ColorRange="YUV, колірний діапазон"
ColorRange.Partial="Частковий"
ColorRange.Full="Повний"
ConfigureAudio="Настроювати Аудіо"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/vi-VN.ini
Changed
VideoCaptureDevice="Thiết bị quay video"
Device="Thiết bị"
-ColorSpace="Không gian màu YUV"
ColorSpace.Default="Mặc định"
-ColorRange="Phạm vi màu YUV"
ColorRange.Partial="Một phần"
ColorRange.Full="Đầy đủ"
ConfigureAudio="Cấu hình âm thanh"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/zh-CN.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/zh-CN.ini
Changed
VideoCaptureDevice="视频捕获设备"
Device="设备"
-ColorSpace="YUV 颜色空间"
+ColorSpace="色彩空间"
ColorSpace.Default="默认"
-ColorRange="YUV 颜色范围"
+ColorRange="色彩范围"
ColorRange.Partial="局部"
ColorRange.Full="全部"
ConfigureAudio="配置音频"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/data/locale/zh-TW.ini -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/data/locale/zh-TW.ini
Changed
VideoCaptureDevice="視訊擷取裝置"
Device="裝置"
-ColorSpace="YUV 色彩空間"
+ColorSpace="色彩空間"
ColorSpace.Default="預設"
-ColorRange="YUV 顏色範圍"
+ColorRange="顏色範圍"
ColorRange.Partial="部分"
ColorRange.Full="全部"
ConfigureAudio="設定音訊"
obs-studio-23.1.0.tar.xz/plugins/win-dshow/ffmpeg-decode.c -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/ffmpeg-decode.c
Changed
static inline enum video_format convert_pixel_format(int f)
{
switch (f) {
- case AV_PIX_FMT_NONE: return VIDEO_FORMAT_NONE;
- case AV_PIX_FMT_YUV420P: return VIDEO_FORMAT_I420;
- case AV_PIX_FMT_NV12: return VIDEO_FORMAT_NV12;
- case AV_PIX_FMT_YUYV422: return VIDEO_FORMAT_YUY2;
- case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY;
- case AV_PIX_FMT_RGBA: return VIDEO_FORMAT_RGBA;
- case AV_PIX_FMT_BGRA: return VIDEO_FORMAT_BGRA;
- case AV_PIX_FMT_BGR0: return VIDEO_FORMAT_BGRX;
+ case AV_PIX_FMT_NONE: return VIDEO_FORMAT_NONE;
+ case AV_PIX_FMT_YUV420P:
+ case AV_PIX_FMT_YUVJ420P: return VIDEO_FORMAT_I420;
+ case AV_PIX_FMT_NV12: return VIDEO_FORMAT_NV12;
+ case AV_PIX_FMT_YUYV422: return VIDEO_FORMAT_YUY2;
+ case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY;
+ case AV_PIX_FMT_RGBA: return VIDEO_FORMAT_RGBA;
+ case AV_PIX_FMT_BGRA: return VIDEO_FORMAT_BGRA;
+ case AV_PIX_FMT_BGR0: return VIDEO_FORMAT_BGRX;
default:;
}
bool ffmpeg_decode_video(struct ffmpeg_decode *decode,
uint8_t *data, size_t size, long long *ts,
- struct obs_source_frame *frame,
+ struct obs_source_frame2 *frame,
bool *got_output)
{
AVPacket packet = {0};
new_format = convert_pixel_format(decode->frame->format);
if (new_format != frame->format) {
bool success;
- enum video_range_type range;
frame->format = new_format;
- frame->full_range =
- decode->frame->color_range == AVCOL_RANGE_JPEG;
-
- range = frame->full_range ?
- VIDEO_RANGE_FULL : VIDEO_RANGE_PARTIAL;
+ frame->range = decode->frame->color_range == AVCOL_RANGE_JPEG
+ ? VIDEO_RANGE_FULL
+ : VIDEO_RANGE_DEFAULT;
success = video_format_get_parameters(VIDEO_CS_601,
- range, frame->color_matrix,
+ frame->range, frame->color_matrix,
frame->color_range_min, frame->color_range_max);
if (!success) {
blog(LOG_ERROR, "Failed to get video format "
obs-studio-23.1.0.tar.xz/plugins/win-dshow/ffmpeg-decode.h -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/ffmpeg-decode.h
Changed
extern bool ffmpeg_decode_video(struct ffmpeg_decode *decode,
uint8_t *data, size_t size, long long *ts,
- struct obs_source_frame *frame,
+ struct obs_source_frame2 *frame,
bool *got_output);
static inline bool ffmpeg_decode_valid(struct ffmpeg_decode *decode)
obs-studio-23.1.0.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-23.2.0.tar.xz/plugins/win-dshow/win-dshow.cpp
Changed
VideoConfig videoConfig;
AudioConfig audioConfig;
- obs_source_frame frame;
+ obs_source_frame2 frame;
obs_source_audio audio;
WinHandle semaphore;
obs_data_t *settings;
settings = obs_source_get_settings(source);
if (!Activate(settings)) {
- obs_source_output_video(source,
+ obs_source_output_video2(source,
nullptr);
}
if (block)
#if LOG_ENCODED_VIDEO_TS
blog(LOG_DEBUG, "video ts: %llu", frame.timestamp);
#endif
- obs_source_output_video(source, &frame);
+ obs_source_output_video2(source, &frame);
}
}
return;
}
- obs_source_output_video(source, &frame);
+ obs_source_output_video2(source, &frame);
UNUSED_PARAMETER(endTime); /* it's the enndd tiimmes! */
UNUSED_PARAMETER(size);
return false;
enum video_colorspace cs = GetColorSpace(settings);
-
- video_range_type range = GetColorRange(settings);
- frame.full_range = range == VIDEO_RANGE_FULL;
+ frame.range = GetColorRange(settings);
if (device.Start() != Result::Success)
return false;
bool success = video_format_get_parameters(
- cs, range,
+ cs, frame.range,
frame.color_matrix,
frame.color_range_min,
frame.color_range_max);
inline void DShowInput::Deactivate()
{
device.ResetGraph();
- obs_source_output_video(source, nullptr);
+ obs_source_output_video2(source, nullptr);
}
/* ------------------------------------------------------------------------- */
obs-studio-23.1.0.tar.xz/plugins/win-mf/data/locale/da-DK.ini -> obs-studio-23.2.0.tar.xz/plugins/win-mf/data/locale/da-DK.ini
Changed
MFAACEnc="Media Foundation AAC Encoder"
-Bitrate="Bithastighed"
+Bitrate="Bit-hastighed"
MF.H264.EncoderName="Media Foundation H264 Encoder"
MF.H264.Encoder="Encodernavn"
-MF.H264.LowLatency="Lav svartid (deaktiver frame re-ordering)"
+MF.H264.LowLatency="Lav responstid (deaktiver billedomarrangering)"
MF.H264.BFrames="Efterfølgende B-frame antal"
-MF.H264.CustomBufsize="Brug tilpasset bufferstørrelse"
+MF.H264.CustomBufsize="Benyt tilpasset bufferstørrelse"
MF.H264.BufferSize="Bufferstørrelse"
-MF.H264.CustomMaxBitrate="Brug tilpasset max bitrate"
-MF.H264.Bitrate="Bitrate"
-MF.H264.MaxBitrate="Maks bitrate"
-MF.H264.KeyframeIntervalSec="Keyframe interval (sekunder, 0=auto)"
-MF.H264.RateControl="Rate kontrol"
-MF.H264.CBR="CBR (Konstant bitrate)"
-MF.H264.VBR="VBR (Variabel bitrate)"
+MF.H264.CustomMaxBitrate="Benyt tilpasset maks. bit-hastighed"
+MF.H264.Bitrate="Bit-hastighed"
+MF.H264.MaxBitrate="Maks. bit-hastighed"
+MF.H264.KeyframeIntervalSec="Keyframe-interval (sek., 0= auto)"
+MF.H264.RateControl="Hastighedskontrol"
+MF.H264.CBR="CBR (konstant bit-hastighed)"
+MF.H264.VBR="VBR (variabel bit-hastighed)"
MF.H264.CQP="CQP (konstant kvalitet)"
MF.H264.MinQP="Minimum QP"
-MF.H264.MaxQP="Maximum QP"
+MF.H264.MaxQP="Maksimum QP"
MF.H264.QPI="QP I-frame"
MF.H264.QPP="QP P-frame"
MF.H264.QPB="QP B-frame"
MF.H264.Profile="Profil"
-MF.H264.Advanced="Advancerede"
+MF.H264.Advanced="Advanceret"
MF.H264.EncoderSWMicrosoft="Microsoft software H.264 encoder"
MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)"
obs-studio-23.1.0.tar.xz/plugins/win-mf/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-mf/data/locale/de-DE.ini
Changed
-MFAACEnc="Media Foundation AAC Codierer"
+MFAACEnc="Media Foundation AAC Kodierer"
Bitrate="Bitrate"
-MF.H264.EncoderName="Media Foundation H264 Codierer"
-MF.H264.Encoder="Codierer-Name"
-MF.H264.LowLatency="Niedrige Latenz (Deaktiviert Frame Neuanordnung)"
-MF.H264.BFrames="Consecutive B-Frame count"
-MF.H264.CustomBufsize="Verwende benutzerdefinierte Puffergröße"
+MF.H264.EncoderName="Media-Foundation-H264-Kodierer"
+MF.H264.Encoder="Kodierername"
+MF.H264.LowLatency="Niedrige Latenz (Deaktiviert Frameneuanordnung)"
+MF.H264.BFrames="Konsekutive B-Frameanzahl"
+MF.H264.CustomBufsize="Benutzerdefinierte Puffergröße verwenden"
MF.H264.BufferSize="Puffergröße"
-MF.H264.CustomMaxBitrate="Verwende benutzerdefinierte Max Bitrate"
+MF.H264.CustomMaxBitrate="Benutzerdefinierte Max. Bitrate verwenden"
MF.H264.Bitrate="Bitrate"
-MF.H264.MaxBitrate="Max Bitrate"
-MF.H264.KeyframeIntervalSec="Keyframeintervall (Sekunden, 0=auto)"
+MF.H264.MaxBitrate="Max. Bitrate"
+MF.H264.KeyframeIntervalSec="Keyframeintervall (Sekunden, 0 – automatisch)"
MF.H264.RateControl="Qualitätsregulierungsmethode"
MF.H264.CBR="CBR (Konstante Bitrate)"
MF.H264.VBR="VBR (Variable Bitrate)"
MF.H264.Profile="Profil"
MF.H264.Advanced="Erweitert"
-MF.H264.EncoderSWMicrosoft="Microsoft-Software-H.264-Codierer"
-MF.H264.EncoderHWAMD="AMD-Video-Coding-Engine-H.264-Codierer (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel-Quick-Sync-H.264-Codierer (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA-NVENC-H.264-Codierer (Media Foundation)"
+MF.H264.EncoderSWMicrosoft="Microsoft-Software-H.264-Kodierer"
+MF.H264.EncoderHWAMD="AMD-Video-Coding-Engine-H.264-Kodierer (Media Foundation)"
+MF.H264.EncoderHWIntel="Intel-Quick-Sync-H.264-Kodierer (Media Foundation)"
+MF.H264.EncoderHWNVIDIA="NVIDIA-NVENC-H.264-Kodierer (Media Foundation)"
obs-studio-23.1.0.tar.xz/plugins/win-wasapi/data/locale/de-DE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-wasapi/data/locale/de-DE.ini
Changed
-AudioInput="Audio Eingabe Aufnahme"
+AudioInput="Audioeingabeaufnahme"
AudioOutput="Audioausgabeaufnahme"
Device="Gerät"
Default="Standard"
-UseDeviceTiming="Gerät Timestamps verwenden"
+UseDeviceTiming="Geräte-Zeitstempel verwenden"
obs-studio-23.1.0.tar.xz/plugins/win-wasapi/data/locale/ka-GE.ini -> obs-studio-23.2.0.tar.xz/plugins/win-wasapi/data/locale/ka-GE.ini
Changed
AudioInput="შემავალი ხმოვანი სიგნალის ჩაწერა"
-AudioOutput="გამომავალი ხმოვანი სიგნალის ჩაწერა"
+AudioOutput="გამოტანილი ხმის ჩაწერა"
Device="მოწყობილობა"
Default="ნაგულისხმევი"
UseDeviceTiming="მოწყობილობის დროითი აღნიშვნები"
obs-studio-23.1.0.tar.xz/plugins/win-wasapi/data/locale/vi-VN.ini -> obs-studio-23.2.0.tar.xz/plugins/win-wasapi/data/locale/vi-VN.ini
Changed
+AudioInput="Thu âm thanh đầu vào"
+AudioOutput="Thu âm thanh đầu ra"
Device="Thiết bị"
Default="Mặc định"
obs-studio-23.1.0.tar.xz/plugins/win-wasapi/win-wasapi.cpp -> obs-studio-23.2.0.tar.xz/plugins/win-wasapi/win-wasapi.cpp
Changed
#include "enum-wasapi.hpp"
#include <obs-module.h>
+#include <obs.h>
#include <util/platform.h>
#include <util/windows/HRError.hpp>
#include <util/windows/ComPtr.hpp>
static void GetWASAPIDefaults(obs_data_t *settings);
-// Fix inconsistent defs of speaker_surround between avutil & wasapi
-#define KSAUDIO_SPEAKER_2POINT1 (KSAUDIO_SPEAKER_STEREO|SPEAKER_LOW_FREQUENCY)
-#define KSAUDIO_SPEAKER_4POINT1 (KSAUDIO_SPEAKER_QUAD|SPEAKER_LOW_FREQUENCY)
+#define OBS_KSAUDIO_SPEAKER_4POINT1 \
+ (KSAUDIO_SPEAKER_SURROUND|SPEAKER_LOW_FREQUENCY)
class WASAPISource {
ComPtr<IMMDevice> device;
switch (layout) {
case KSAUDIO_SPEAKER_2POINT1: return SPEAKERS_2POINT1;
case KSAUDIO_SPEAKER_SURROUND: return SPEAKERS_4POINT0;
- case KSAUDIO_SPEAKER_4POINT1: return SPEAKERS_4POINT1;
+ case OBS_KSAUDIO_SPEAKER_4POINT1: return SPEAKERS_4POINT1;
case KSAUDIO_SPEAKER_5POINT1_SURROUND: return SPEAKERS_5POINT1;
case KSAUDIO_SPEAKER_7POINT1_SURROUND: return SPEAKERS_7POINT1;
}
os_set_thread_name("win-wasapi: reconnect thread");
+ CoInitializeEx(0, COINIT_MULTITHREADED);
+
+ obs_monitoring_type type = obs_source_get_monitoring_type(source->source);
+ obs_source_set_monitoring_type(source->source, OBS_MONITORING_TYPE_NONE);
+
while (!WaitForSignal(source->stopSignal, RECONNECT_INTERVAL)) {
if (source->TryInitialize())
break;
}
+ obs_source_set_monitoring_type(source->source, type);
+
source->reconnectThread = nullptr;
source->reconnecting = false;
return 0;
bool reconnect = false;
/* Output devices don't signal, so just make it check every 10 ms */
- DWORD dur = source->isInputDevice ? INFINITE : 10;
+ DWORD dur = source->isInputDevice ? RECONNECT_INTERVAL : 10;
HANDLE sigs[2] = {
source->receiveSignal,
No build results available
No rpmlint results available
Request History
boombatower created request almost 6 years ago
- Update %post script for new desktop file name.
- Include appdata in files list.
- Include obs-ffmpeg-mux in files list.
- Update to version 23.2.0:
* libobs: Update version to 23.2.0
* Update translations from Crowdin
* UI: Make two-auth message a bit friendlier
* UI: Use better link for Twitch two-factor warning
* win-capture: Add discord to game capture blacklist
* UI: Fix transition A/B labels on macOS/Linux
* UI: Add two-factor authentication warning for Twitch
* UI: Add ability to use rich text in warning dialogs
* UI: Fix output icon size. Add padding to settings list items
* UI/updater: Update some text for clarity
* UI/updater: Add marquee progress bar for existing file check
* UI/updater: Add manifest file for DPI awareness
* UI: Revert Dark theme Scenes font change
* CI: Fix travis test on OSX
* CI: Build CEF with OS X 10.11 target
* UI: Ensure frontend event is removed on object deletion
* win-wasapi: Speaker enum fixes
* UI: Fix "Toggle Preview" hotkeys duplicating
* GitHub: Add funding buttons
* libobs-d3d11: Bad indices in log output
* libobs: Pair encoders only when output actually starts
* UI: Fix issue where rec time left would show negative time
* libobs: Remove unreachable YUV decode paths
* obs-filters: Remove unused key_rgb shader variable
* obs-filters: Remove unused variable for color key
boombatower accepted request almost 6 years ago
ok