Compare commits

...
129 Commits
Author SHA1 Message Date
Cameron Gutman b23a36908c Add EGLFS GBM and Wayland support to AppImage 2022-04-09 18:23:09 -05:00
Cameron Gutman e3a7b54f90 Use EGL fences to reduce video latency 2022-04-08 19:28:22 -05:00
Cameron Gutman 81d5e7f014 Wait for the VDPAU output surface to be idle in waitToRender() 2022-04-07 22:16:52 -05:00
Cameron Gutman 9790c218dc Wait on the display link callback before rendering to reduce latency 2022-04-07 22:08:43 -05:00
Cameron Gutman 6d3d51553b Wait on our D3D11 swapchain before rendering to reduce latency 2022-04-07 21:46:48 -05:00
Cameron Gutman 474591c6a5 Use a separate callback to indicate EOS instead of renderFrame() 2022-04-07 21:30:20 -05:00
Cameron Gutman 5de0dc2713 Disable the decoder selection options when HDR is enabled 2022-04-05 20:09:09 -05:00
Cameron Gutman 57a34a7abb Update README.md 2022-04-05 19:56:20 -05:00
Cameron Gutman 54517bda1b Switch back to upstream SDL 2022-04-05 00:59:58 -05:00
Cameron Gutman 4291e15b60 Use NDC helpers in D3D11VA renderer 2022-04-05 00:57:14 -05:00
Cameron Gutman 940ae6406b Add helper functions to perform NDC transformations 2022-04-05 00:50:04 -05:00
Cameron Gutman 6a0cf4bfd3 Fix some #if -> #ifdefs 2022-04-05 00:26:13 -05:00
Cameron Gutman fee6f75223 Fix VAAPIRenderer build error with neither HAVE_EGL nor HAVE_DRM defined 2022-04-05 00:24:00 -05:00
Cameron Gutman 8c93b2d54c Fix VAAPIRenderer build error with HAVE_DRM but not HAVE_EGL 2022-04-04 19:40:31 -05:00
Cameron Gutman 09ed82db65 Fix build with HAVE_MMAL 2022-04-02 16:16:40 -05:00
Cameron Gutman a56cb0e88a Don't waste time retrying the same renderer again 2022-04-02 16:14:04 -05:00
Cameron Gutman 9acf5ff0ef Update workaround to prevent deadlock with h264_mmal 2022-04-02 16:06:39 -05:00
Cameron Gutman 64a7790aed Patch SDL to work around GLX crash 2022-04-02 15:50:32 -05:00
Cameron Gutman 9a5134ffcf Use QString not QByteArray for string equality 2022-04-02 15:49:07 -05:00
Cameron Gutman 1d2c4d0843 Prepare for v4.0.0 2022-04-01 19:18:51 -05:00
Cameron Gutman efad34be62 Set SDL_MOUSE_AUTO_CAPTURE=0 since we manage mouse capture ourselves 2022-03-31 23:54:58 -05:00
Cameron Gutman 52761ade87 Update SDL_ttf to 81f9e9b 2022-03-31 23:30:59 -05:00
Cameron Gutman e6b816e776 Update SDL in AppImage 2022-03-30 23:31:01 -05:00
Cameron Gutman 6d3bcba5d0 Update SDL, SDL_ttf, and FreeType
SDL -> 2c04df8
SDL_ttf -> 80d909 (Windows)
FreeType -> 3f83da (Windows)
2022-03-30 23:27:40 -05:00
Cameron Gutman 2e7ffa606b Fix missing DLL in ARM64 builds 2022-03-30 22:43:31 -05:00
Cameron Gutman 055cae90b8 Only apply the AMD color range workaround to new drivers
Applying it to older drivers introduces the very same issues it's meant to fix
2022-03-30 22:43:08 -05:00
Cameron Gutman 23acf92803 Update SDL_GameControllerDB 2022-03-30 22:07:33 -05:00
Cameron Gutman 91ee7d76eb Rerun lupdate and lrelease 2022-03-30 22:07:11 -05:00
Cameron Gutman 570888e2b8 Merge remote-tracking branch 'origin/weblate' 2022-03-30 22:06:02 -05:00
sanhoe 282f27f0c8 Translated using Weblate (Korean)
Currently translated at 100.0% (193 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/ko/
2022-03-30 18:10:36 +02:00
Cameron Gutman 98376ade45 Update SDL to cbdb67b 2022-03-29 22:39:09 -05:00
Cameron Gutman 9682968b55 Fix FFmpeg URL for AppImage 2022-03-29 21:34:34 -05:00
Cameron Gutman 877cb5f1b0 Update SDL2, SDL_ttf, and FFmpeg in AppImage build 2022-03-29 21:03:35 -05:00
Cameron Gutman 6972573a6e Add pointer lock key combo
Fixes #737
2022-03-29 18:26:09 -05:00
Cameron Gutman 742f1b1283 Prefer hevc_nvv4l2 over hevc_nvmpi 2022-03-26 22:54:54 -05:00
The Great Wizard Azkali 0b127a2f3b Add support for h264_nvv4l2 and hevc_nvv4l2 (#745)
* Add support for h264_nvv4l2

A new implementation of nvv4l2 decoder has been made by @CTCaer and will be released in thr next switchroot (Linux for Nintendo Switch) update. This implementation of ffmpeg can also be used by other Jetson boards. A repository will be soon hosted so Jetson users can install it.
Prior to the new implementation distribution, we add it to the project who currently use nvmpi implementation.

* Add support for hevc_nvv4l2

Following previous PR, add hevc support as well.
2022-03-26 22:02:00 -05:00
Wen-haur Chiu a6057835a8 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (193 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/zh_Hant/
2022-03-25 18:11:42 +01:00
CorteX c32794477e Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (193 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/zh_Hans/
2022-03-23 06:58:35 +01:00
reloxx13 999ac60bda Translated using Weblate (German)
Currently translated at 100.0% (193 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/de/
2022-03-21 09:59:13 +01:00
bruh bca4b832a8 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (193 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/vi/
2022-03-19 22:58:21 +01:00
Cameron Gutman 2fc1dda232 Partially revert e64b15d and b85d5b8
These changes cause excessive window recreation using the Flatpak on Nvidia with Wayland
2022-03-19 14:50:38 -05:00
Cameron Gutman 99495cff90 Add logging for cases where color range/encoding cannot be set 2022-03-19 13:12:41 -05:00
Caio Gabriel 795962a4ba Translated using Weblate (Portuguese (Brazil))
Currently translated at 7.7% (15 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/pt_BR/
2022-03-18 22:29:44 +01:00
Caio Gabriel 7bde9f447a Translated using Weblate (Portuguese (Brazil))
Currently translated at 7.7% (15 of 193 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/pt_BR/
2022-03-18 20:05:48 +01:00
Cameron Gutman b45c3e3c7f Tweak wording on the keep awake option 2022-03-16 21:59:06 -05:00
Cameron Gutman ce2a01fc59 Allow the screensaver toggle to work even if running on an embedded platform 2022-03-16 21:57:03 -05:00
Cameron Gutman edeea65c3e Rerun lupdate and lrelease 2022-03-16 21:51:17 -05:00
Cameron Gutman 6e8ee94b91 Merge remote-tracking branch 'origin/weblate' 2022-03-16 21:49:44 -05:00
Cameron Gutman 97d8274911 Add option to allow PC to sleep while streaming 2022-03-16 21:48:56 -05:00
Cameron Gutman 73d84dc13f Update SDL and OpenSSL prebuilts 2022-03-15 22:30:55 -05:00
Cameron Gutman f32501d498 Update moonlight-common-c 2022-03-15 21:22:44 -05:00
Cameron Gutman 9c289c3fe9 Update SDL_GameControllerDB 2022-03-15 21:22:21 -05:00
Cameron Gutman 2a610584ee Fix handling of line continuations in FFmpeg logs (for real this time) 2022-03-11 19:15:36 -06:00
sanhoe 8e06421567 Translated using Weblate (Korean)
Currently translated at 100.0% (191 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/ko/
2022-03-10 18:59:01 +01:00
Wen-haur Chiu 57dc3725f5 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (191 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/zh_Hant/
2022-03-09 15:58:49 +01:00
Cameron Gutman d6ef8945f5 Replace Deviare In-Proc with Microsoft Detours 2022-03-08 20:58:40 -06:00
Cameron Gutman e078a8b7b6 Don't recreate the decoder while the window is minimized
Fixes #726
2022-03-06 15:21:43 -06:00
Cameron Gutman a6395b9025 Fix short UI hang when manually stopping the stream after losing connection with the host 2022-03-06 13:11:36 -06:00
Cameron Gutman 6c0983d77c Reset the audio device if it enters a failed state
Fixes #734
2022-03-05 16:50:06 -06:00
Cameron Gutman 4ae39f2bd5 Properly synchronize rumble with gamepad removal 2022-03-05 13:32:38 -06:00
bruh 71fc701809 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (191 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/vi/
2022-03-02 11:57:09 +01:00
Aurora Robb Kristiansen d418921e4b Translated using Weblate (Norwegian Bokmål)
Currently translated at 73.2% (140 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/nb_NO/
2022-02-28 11:55:22 +01:00
Cameron Gutman 4b83b022d3 Remove unnecessary assert 2022-02-25 22:47:20 -06:00
Cameron Gutman 8b13e5b47e Update AppImage to libva 2.14 2022-02-25 22:46:52 -06:00
Benjamín Bustos 0bfd565bda Translated using Weblate (Spanish)
Currently translated at 100.0% (191 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/es/
2022-02-23 16:56:13 +01:00
Emanuele Conti 2224a558ee Translated using Weblate (Italian)
Currently translated at 100.0% (191 of 191 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/it/
2022-02-22 15:56:43 +01:00
Cameron Gutman 93c02fb43a Print GPU info in D3D11VA renderer 2022-02-20 22:10:18 -06:00
Cameron Gutman 93ee51cabb Integrate new languages from Weblate 2022-02-20 14:15:08 -06:00
Cameron Gutman cd6ba554a4 Merge remote-tracking branch 'origin/weblate' 2022-02-20 13:44:11 -06:00
Cameron Gutman 89aa2be358 Rerun lupdate and lrelease 2022-02-20 13:41:48 -06:00
Cameron Gutman da261246b9 Change HDR to be a separate option like other clients 2022-02-19 11:21:06 -06:00
Cameron Gutman 4d3e09f4a0 Raise minimum custom resolution to 256x256 2022-02-19 10:47:25 -06:00
Cameron Gutman 9add6b3696 Add DXVA2 quirk for AMD GPUs to fix color range on the latest drivers 2022-02-17 00:35:33 -06:00
Cameron Gutman ef037e18d0 Add colorspace and color range override options 2022-02-17 00:26:56 -06:00
Cameron Gutman 36db791516 Refactor D3D11 shaders to reduce duplicated code 2022-02-16 19:38:18 -06:00
Emanuele Conti 25d2ea5e94 Translated using Weblate (Italian)
Currently translated at 100.0% (189 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/it/
2022-02-16 13:57:22 +01:00
Jorys Paulin 34f2d18f27 Translated using Weblate (French)
Currently translated at 100.0% (189 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/fr/
2022-02-16 13:57:21 +01:00
Aurora Robb Kristiansen 4935c846aa Translated using Weblate (Norwegian Bokmål)
Currently translated at 73.0% (138 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/nb_NO/
2022-02-14 01:57:01 +01:00
Cameron Gutman b1f980c216 Fix handling of line continuations in FFmpeg logs 2022-02-13 16:06:04 -06:00
Cameron Gutman 738f64c903 Use FP32 for position and texcoords
We need that extra precision for sampling large textures
2022-02-13 13:41:39 -06:00
Emanuele Conti 7235663447 Translated using Weblate (Italian)
Currently translated at 46.0% (87 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/it/
2022-02-11 11:55:30 +01:00
Emanuele Conti 9d78c416f7 Translated using Weblate (Italian)
Currently translated at 44.9% (85 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/it/
2022-02-10 10:57:51 +01:00
Cameron Gutman 9a64c026ea Use optimized pixel shaders for the normal SDR and HDR colorspaces 2022-02-09 20:46:02 -06:00
Cameron Gutman be2af1d17a Add environment variables to configure DXVA2 and D3D11VA options 2022-02-08 22:27:27 -06:00
Cameron Gutman b21131a466 Use FP16 in the D3D11 shaders 2022-02-08 21:43:25 -06:00
Emanuele Conti 41c5126472 Translated using Weblate (Italian)
Currently translated at 39.6% (75 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/it/
2022-02-08 18:54:36 +01:00
Cameron Gutman b96cb1abaf Remove per-app HDR support check
It doesn't seem to make a difference anymore whether it's supported or not.
GFE seems happy to enter HDR mode anyway.
2022-02-07 20:02:19 -06:00
Emanuele Conti 20143606e2 Added translation using Weblate (Italian) 2022-02-07 09:27:18 +01:00
Cameron Gutman 1d79bcc657 Disable waitable swapchains in full-screen mode 2022-02-06 00:28:59 -06:00
Cameron Gutman e8b4494fc3 Add an extra buffer for DirectFlip 2022-02-05 23:22:07 -06:00
Cameron Gutman 2518208c5c Don't set fullScreenDesc fields to prevent entering "proxy" full-screen mode 2022-02-05 19:32:05 -06:00
Cameron Gutman 918fea7d4b Precompute the aspect ratio stretch to avoid having to change viewports twice each frame 2022-02-05 15:44:37 -06:00
Cameron Gutman 4dc07bf63f Don't render the alignment padding area 2022-02-05 15:23:29 -06:00
Cameron Gutman 04a0aca221 Create SRVs for all textures in the pool during initialization 2022-02-05 14:49:08 -06:00
Cameron Gutman 1942e72474 Only bind the constant buffer once 2022-02-05 14:15:35 -06:00
Cameron Gutman f256407789 Implement D3D11VA video rendering 2022-02-04 21:51:34 -06:00
Cameron Gutman 67612f607e WIP: D3D11VA support
Overlays work, but drawing the actual video is unimplemented
2022-02-03 19:45:07 -06:00
Wh1t3st4r 7274c42126 Translated using Weblate (Portuguese)
Currently translated at 100.0% (189 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/pt/
2022-02-01 16:52:52 +01:00
Wh1t3st4r e288402e88 Added translation using Weblate (Portuguese (Brazil)) 2022-01-31 16:08:53 +01:00
Cameron Gutman 76bd4a1c7b Don't set the HDR metadata blob if we don't have one 2022-01-30 22:57:53 -06:00
Cameron Gutman 13dbad6f35 Fix build with old libdrm headers 2022-01-30 22:56:22 -06:00
Cameron Gutman cf089fdfe9 Add support for HDR with VAAPI using DRM frontend renderer 2022-01-29 18:16:39 -06:00
Cameron Gutman 9755e31fa2 Refactor VAAPI surface export check into separate function 2022-01-29 17:45:36 -06:00
Cameron Gutman 3fcf31d009 Improve robustness of EGL retry logic for 10-bit color 2022-01-29 01:12:38 -06:00
Cameron Gutman 1cbdd0e675 Display the HDR option if the platform has a decoder that supports it 2022-01-29 00:59:04 -06:00
Cameron Gutman e0fd84d6f5 Fix build with old libdrm headers 2022-01-29 00:28:46 -06:00
Cameron Gutman 443720c3de Plumb HDR metadata into DRM renderer 2022-01-28 22:40:07 -06:00
Cameron Gutman 254526a213 Plumb HDR mode information to the decoders 2022-01-28 22:10:50 -06:00
Cameron Gutman ad0afb5fc9 Prefer direct rendering when using HDR 2022-01-27 22:36:49 -06:00
Cameron Gutman e64b15d2a7 Rework how we deal with window re-creation for EGLRenderer
Previously we opted to just lie to SDL and tell it that the current
GL context is actually GLES 3.0 when it wasn't. This meant that
we avoided our window being recreated for GLES usage on Wayland
and KMSDRM, but that meant our 10-bit color change didn't apply
either. I suspect this hackery is what led EGLRenderer to get
stuck in a state where SDL_CreateRenderer() always failed.

Now SDL will recreate our window once to configure a compatible GL
API for our renderer. If that fails, we'll move on to a different
renderer (which may recreate the window again).
2022-01-27 21:49:03 -06:00
Cameron Gutman cdc3352318 Ensure SDL also uses X11 if Qt is using X11 2022-01-26 19:00:41 -06:00
Cameron Gutman 2416618b34 Don't require 2 bits of alpha for 10-bit color 2022-01-26 18:55:56 -06:00
GeraltOfTrivia c951d77a52 Translated using Weblate (Greek)
Currently translated at 96.2% (182 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/el/
2022-01-25 17:53:11 +01:00
GeraltOfTrivia 759ddc0b4b Added translation using Weblate (Greek) 2022-01-24 16:49:31 +01:00
Cameron Gutman a0709bec51 Improve debugging and add missing break 2022-01-23 21:12:32 -06:00
Cameron Gutman f5bc4e7a24 Add color properties to DRM renderer 2022-01-23 21:03:56 -06:00
Cameron Gutman b4665b6e5a Pick a 10-bit DRM overlay for Main10 streaming 2022-01-23 19:19:16 -06:00
Cameron Gutman b85d5b8822 Enable P010 surface export from VAAPI to EGL 2022-01-23 18:33:30 -06:00
Cameron Gutman 12ad75a6b0 Move hybrid decode detection logic into a central location 2022-01-23 15:41:33 -06:00
Cameron Gutman af92fe6ad1 Fix Apple silicon CPU check 2022-01-23 13:01:20 -06:00
Cameron Gutman fcf7ed4faa Only use the VT rasterization workaround on Apple silicon 2022-01-22 20:25:50 -06:00
Cameron Gutman a58649fd10 Update Windows and macOS to FFmpeg 5.0 2022-01-22 13:44:05 -06:00
Cameron Gutman ee5918cf4e Revert "Add workaround for duplicate size changed events on Wayland"
Skipping size changed events can cause EGLRenderer to get stuck in
a state where it can't reset itself properly. This seems to happen
consistently when starting a maximized stream then transitioning
to full-screen.

This reverts commit e1b3f90f8b.
2022-01-22 12:29:44 -06:00
Wh1t3st4r d7de3301ed Translated using Weblate (Portuguese)
Currently translated at 76.7% (145 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/pt/
2022-01-22 07:20:29 +01:00
Wh1t3st4r bd1988c775 Added translation using Weblate (Portuguese) 2022-01-22 00:51:36 +01:00
Faiq Chilmi 474010b31d Translated using Weblate (Hindi)
Currently translated at 18.5% (35 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/hi/
2022-01-21 15:52:46 +01:00
Cameron Gutman dd941154d6 Fix EGL renderer overlay rendering with SDL_ttf 2.0.18
Fixes #721
2022-01-20 18:02:44 -06:00
WoweePaw cbb53745f6 Translated using Weblate (German)
Currently translated at 99.4% (188 of 189 strings)

Translation: Moonlight Game Streaming/moonlight-qt
Translate-URL: https://hosted.weblate.org/projects/moonlight/moonlight-qt/de/
2022-01-20 15:09:46 +01:00
Faiq Chilmi 3dff62e0cf Added translation using Weblate (Hindi) 2022-01-20 15:09:46 +01:00
105 changed files with 10464 additions and 2109 deletions
+4 -1
View File
@@ -12,8 +12,11 @@ contains(QT_ARCH, i386) {
contains(QT_ARCH, x86_64) {
LIBS += -L$$PWD/../libs/windows/lib/x64
}
contains(QT_ARCH, arm64) {
LIBS += -L$$PWD/../libs/windows/lib/arm64
}
LIBS += -lNktHookLib
LIBS += -ldetours
DEFINES += ANTIHOOKING_LIBRARY
SOURCES += antihookingprotection.cpp
HEADERS += antihookingprotection.h
+44 -21
View File
@@ -1,6 +1,9 @@
#include "antihookingprotection.h"
#include <NktHookLib.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <detours.h>
typedef HMODULE (WINAPI *LoadLibraryAFunc)(LPCSTR lpLibFileName);
typedef HMODULE (WINAPI *LoadLibraryWFunc)(LPCWSTR lpLibFileName);
@@ -12,25 +15,35 @@ class AntiHookingProtection
public:
static void enable()
{
#ifdef QT_DEBUG
s_HookManager.SetEnableDebugOutput(true);
#endif
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
HINSTANCE kernel32Handle = NktHookLibHelpers::GetModuleBaseAddress(L"kernel32.dll");
SIZE_T hookId;
s_RealLoadLibraryA = LoadLibraryA;
DetourAttach(&(PVOID&)s_RealLoadLibraryA, LoadLibraryAHook);
s_HookManager.Hook(&hookId, (LPVOID*)&s_RealLoadLibraryA,
NktHookLibHelpers::GetProcedureAddress(kernel32Handle, "LoadLibraryA"),
(LPVOID)AntiHookingProtection::LoadLibraryAHook);
s_HookManager.Hook(&hookId, (LPVOID*)&s_RealLoadLibraryW,
NktHookLibHelpers::GetProcedureAddress(kernel32Handle, "LoadLibraryW"),
(LPVOID)AntiHookingProtection::LoadLibraryWHook);
s_HookManager.Hook(&hookId, (LPVOID*)&s_RealLoadLibraryExA,
NktHookLibHelpers::GetProcedureAddress(kernel32Handle, "LoadLibraryExA"),
(LPVOID)AntiHookingProtection::LoadLibraryExAHook);
s_HookManager.Hook(&hookId, (LPVOID*)&s_RealLoadLibraryExW,
NktHookLibHelpers::GetProcedureAddress(kernel32Handle, "LoadLibraryExW"),
(LPVOID)AntiHookingProtection::LoadLibraryExWHook);
s_RealLoadLibraryW = LoadLibraryW;
DetourAttach(&(PVOID&)s_RealLoadLibraryW, LoadLibraryWHook);
s_RealLoadLibraryExA = LoadLibraryExA;
DetourAttach(&(PVOID&)s_RealLoadLibraryExA, LoadLibraryExAHook);
s_RealLoadLibraryExW = LoadLibraryExW;
DetourAttach(&(PVOID&)s_RealLoadLibraryExW, LoadLibraryExWHook);
DetourTransactionCommit();
}
static void disable()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)s_RealLoadLibraryA, LoadLibraryAHook);
DetourDetach(&(PVOID&)s_RealLoadLibraryW, LoadLibraryWHook);
DetourDetach(&(PVOID&)s_RealLoadLibraryExA, LoadLibraryExAHook);
DetourDetach(&(PVOID&)s_RealLoadLibraryExW, LoadLibraryExWHook);
DetourTransactionCommit();
}
private:
@@ -124,7 +137,6 @@ private:
return s_RealLoadLibraryExW(lpLibFileName, hFile, dwFlags);
}
static CNktHookLib s_HookManager;
static LoadLibraryAFunc s_RealLoadLibraryA;
static LoadLibraryWFunc s_RealLoadLibraryW;
static LoadLibraryExAFunc s_RealLoadLibraryExA;
@@ -209,7 +221,6 @@ private:
};
};
CNktHookLib AntiHookingProtection::s_HookManager;
LoadLibraryAFunc AntiHookingProtection::s_RealLoadLibraryA;
LoadLibraryWFunc AntiHookingProtection::s_RealLoadLibraryW;
LoadLibraryExAFunc AntiHookingProtection::s_RealLoadLibraryExA;
@@ -218,14 +229,26 @@ LoadLibraryExWFunc AntiHookingProtection::s_RealLoadLibraryExW;
AH_EXPORT void AntiHookingDummyImport() {}
extern "C"
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID)
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (DetourIsHelperProcess()) {
return TRUE;
}
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DetourRestoreAfterWith();
AntiHookingProtection::enable();
DisableThreadLibraryCalls(hinstDLL);
break;
case DLL_PROCESS_DETACH:
// Ignore DLL_PROCESS_DETACH on process exit. No need to waste time
// unhooking everything if the whole process is being destroyed.
if (lpvReserved == NULL) {
AntiHookingProtection::disable();
}
break;
}
return TRUE;
+2 -1
View File
@@ -1,6 +1,6 @@
# Moonlight PC
[Moonlight PC](https://moonlight-stream.org) is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built to run on Windows, Mac, and Linux. This client is the successor to [Moonlight Chrome](https://github.com/moonlight-stream/moonlight-chrome) for streaming on PC.
[Moonlight PC](https://moonlight-stream.org) is an open source PC client for NVIDIA GameStream, as used by the NVIDIA Shield.
Moonlight also has mobile versions for [Android](https://github.com/moonlight-stream/moonlight-android) and [iOS](https://github.com/moonlight-stream/moonlight-ios).
@@ -14,6 +14,7 @@ You can follow development on our [Discord server](https://moonlight-stream.org/
- Hardware accelerated video decoding on Windows, Mac, and Linux
- Supports streaming at up to 120 FPS (high refresh rate monitor recommended)
- Supports streaming at 720p, 1080p, 1440p, 4K, and the client PC's native screen resolution
- HDR streaming support
- 7.1 surround sound audio support
- Support for both pointer capture (for games) and direct mouse control (for remote desktop)
- Support for passing system-wide keyboard shortcuts like Alt+Tab to the host
+18 -10
View File
@@ -108,14 +108,14 @@ unix:!macx {
}
}
win32 {
LIBS += -llibssl -llibcrypto -lSDL2 -lSDL2_ttf -lavcodec -lavutil -lopus
LIBS += -llibssl -llibcrypto -lSDL2 -lSDL2_ttf -lavcodec -lavutil -lopus -ldxgi -ld3d11
CONFIG += ffmpeg
}
win32:!winrt {
CONFIG += soundio discord-rpc
}
macx {
LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -lopus -framework SDL2 -framework SDL2_ttf
LIBS += -lssl -lcrypto -lavcodec.59 -lavutil.57 -lopus -framework SDL2 -framework SDL2_ttf
LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit -framework Metal
# For libsoundio
@@ -296,15 +296,20 @@ config_SL {
streaming/video/slvid.h \
streaming/audio/renderers/slaud.h
}
win32 {
HEADERS += streaming/video/ffmpeg-renderers/dxutil.h
}
win32:!winrt {
message(DXVA2 renderer selected)
message(DXVA2 and D3D11VA renderers selected)
SOURCES += \
streaming/video/ffmpeg-renderers/dxva2.cpp \
streaming/video/ffmpeg-renderers/d3d11va.cpp \
streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.cpp
HEADERS += \
streaming/video/ffmpeg-renderers/dxva2.h \
streaming/video/ffmpeg-renderers/d3d11va.h \
streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.h
}
macx {
@@ -355,7 +360,12 @@ TRANSLATIONS += \
languages/qml_sv.ts \
languages/qml_tr.ts \
languages/qml_uk.ts \
languages/qml_zh_Hant.ts
languages/qml_zh_Hant.ts \
languages/qml_el.ts \
languages/qml_hi.ts \
languages/qml_it.ts \
languages/qml_pt.ts \
languages/qml_pt_BR.ts
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
@@ -394,13 +404,11 @@ INCLUDEPATH += $$PWD/../h264bitstream/h264bitstream
DEPENDPATH += $$PWD/../h264bitstream/h264bitstream
!winrt {
contains(QT_ARCH, i386)|contains(QT_ARCH, x86_64) {
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../AntiHooking/release/ -lAntiHooking
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../AntiHooking/debug/ -lAntiHooking
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../AntiHooking/release/ -lAntiHooking
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../AntiHooking/debug/ -lAntiHooking
INCLUDEPATH += $$PWD/../AntiHooking
DEPENDPATH += $$PWD/../AntiHooking
}
INCLUDEPATH += $$PWD/../AntiHooking
DEPENDPATH += $$PWD/../AntiHooking
}
unix:!macx: {
+1 -11
View File
@@ -64,16 +64,6 @@ SystemProperties::SystemProperties()
hasDiscordIntegration = false;
#endif
// TODO: Do something smarter than this. We should be able to query
// this from the decoder (or just try VIDEO_FORMAT_H265_MAIN10 and
// fail if we don't get a hardware accelerated decoder).
#ifdef Q_OS_DARWIN
// HDR is supported by the VideoToolbox renderer
supportsHdr = true;
#else
supportsHdr = false;
#endif
unmappedGamepads = SdlInputHandler::getUnmappedGamepads();
// Populate data that requires talking to SDL. We do it all in one shot
@@ -158,7 +148,7 @@ void SystemProperties::querySdlVideoInfoInternal()
}
}
Session::getDecoderInfo(testWindow, hasHardwareAcceleration, rendererAlwaysFullScreen, maximumResolution);
Session::getDecoderInfo(testWindow, hasHardwareAcceleration, rendererAlwaysFullScreen, supportsHdr, maximumResolution);
SDL_DestroyWindow(testWindow);
+4
View File
@@ -312,6 +312,7 @@ void StreamCommandLineParser::parse(const QStringList &args, StreamingPreference
parser.addToggleOption("background-gamepad", "background gamepad input");
parser.addToggleOption("reverse-scroll-direction", "inverted scroll direction");
parser.addToggleOption("swap-gamepad-buttons", "swap A/B and X/Y gamepad buttons (Nintendo-style)");
parser.addToggleOption("keep-awake", "prevent display sleep while streaming");
parser.addChoiceOption("capture-system-keys", "capture system key combos", m_CaptureSysKeysModeMap.keys());
parser.addChoiceOption("video-codec", "video codec", m_VideoCodecMap.keys());
parser.addChoiceOption("video-decoder", "video decoder", m_VideoDecoderMap.keys());
@@ -423,6 +424,9 @@ void StreamCommandLineParser::parse(const QStringList &args, StreamingPreference
// Resolve --swap-gamepad-buttons and --no-swap-gamepad-buttons options
preferences->swapFaceButtons = parser.getToggleOptionValue("swap-gamepad-buttons", preferences->swapFaceButtons);
// Resolve --keep-awake and --no-keep-awake options
preferences->keepAwake = parser.getToggleOptionValue("keep-awake", preferences->keepAwake);
// Resolve --capture-system-keys option
if (parser.isSet("capture-system-keys")) {
preferences->captureSysKeysMode = mapValue(m_CaptureSysKeysModeMap, parser.getChoiceOptionValue("capture-system-keys"));
@@ -36,6 +36,29 @@
</screenshots>
<releases>
<release version="4.0.0" date="2022-04-02">
<description>
<p>New features:</p>
<ul>
<li>Added a new key combo for locking the mouse cursor to the window (Ctrl+Alt+Shift+L)</li>
<li>Added an option to avoid keeping the client display awake while streaming</li>
</ul>
<p>Behavior Changes:</p>
<ul>
<li>HDR streaming is now a separate option rather than being part of the Video Codec override dropdown</li>
<li>HDR streaming is no longer restricted to apps that are certified by NVIDIA as compatible with GameStream HDR. Some newer games may require an HDR display or EDID emulator dongle connected to your host PC for HDR options to be available.</li>
</ul>
<p>Bugfixes:</p>
<ul>
<li>Fixed loss of all audio if the active audio device is unplugged while streaming</li>
<li>Fixed the GUI being unresponsive after manually quitting when connection to the host is lost</li>
<li>Fixed a rare crash if a controller disconnects right as rumble is starting</li>
<li>Fixed text rendering on the overlay UI when using SDL_ttf 2.0.18 on Linux</li>
<li>Updated included gamepad mappings</li>
<li>Updated community-contributed translations from Weblate</li>
</ul>
</description>
</release>
<release version="3.2.0" date="2022-01-18">
<description>
<p>New features:</p>
+101 -13
View File
@@ -345,7 +345,7 @@ Flickable {
maximumLength: 5
inputMethodHints: Qt.ImhDigitsOnly
placeholderText: resolutionListModel.get(resolutionComboBox.currentIndex).video_width
validator: IntValidator{bottom:128; top:8192}
validator: IntValidator{bottom:256; top:8192}
focus: true
onTextChanged: {
@@ -374,7 +374,7 @@ Flickable {
maximumLength: 5
inputMethodHints: Qt.ImhDigitsOnly
placeholderText: resolutionListModel.get(resolutionComboBox.currentIndex).video_height
validator: IntValidator{bottom:128; top:8192}
validator: IntValidator{bottom:256; top:8192}
onTextChanged: {
// standardButton() was added in Qt 5.10, so we must check for it first
@@ -833,6 +833,26 @@ Flickable {
text: "繁体字" // Traditional Chinese
val: StreamingPreferences.LANG_ZH_HANT
}
ListElement {
text: "Português" // Portuguese
val: StreamingPreferences.LANG_PT
}
/* ListElement {
text: "Português do Brasil" // Brazilian Portuguese
val: StreamingPreferences.LANG_PT_BR
} */
ListElement {
text: "Ελληνικά" // Greek
val: StreamingPreferences.LANG_EL
}
ListElement {
text: "Italiano" // Italian
val: StreamingPreferences.LANG_IT
}
/* ListElement {
text: "हिन्दी, हिंदी" // Hindi
val: StreamingPreferences.LANG_HI
} */
}
// ::onActivated must be used, as it only listens for when the index is changed by a human
onActivated : {
@@ -933,6 +953,22 @@ Flickable {
ToolTip.visible: hovered
ToolTip.text: qsTr("Updates your Discord status to display the name of the game you're streaming.")
}
CheckBox {
id: keepAwakeCheck
width: parent.width
text: qsTr("Keep the display awake while streaming")
font.pointSize: 12
checked: StreamingPreferences.keepAwake
onCheckedChanged: {
StreamingPreferences.keepAwake = checked
}
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.visible: hovered
ToolTip.text: qsTr("Prevents the screensaver from starting or the display from going to sleep while streaming.")
}
}
}
}
@@ -1252,6 +1288,7 @@ Flickable {
id: decoderComboBox
textRole: "text"
enabled: !enableHdr.checked
model: ListModel {
id: decoderListModel
ListElement {
@@ -1268,9 +1305,26 @@ Flickable {
}
}
// ::onActivated must be used, as it only listens for when the index is changed by a human
onActivated : {
StreamingPreferences.videoDecoderSelection = decoderListModel.get(currentIndex).val
onActivated: {
if (enabled) {
StreamingPreferences.videoDecoderSelection = decoderListModel.get(currentIndex).val
}
}
// This handles the state of the enableHdr checkbox changing
onEnabledChanged: {
if (enabled) {
StreamingPreferences.videoDecoderSelection = decoderListModel.get(currentIndex).val
}
else {
StreamingPreferences.videoDecoderSelection = StreamingPreferences.VDS_AUTO
}
}
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.visible: hovered && !enabled
ToolTip.text: qsTr("Enabling HDR overrides manual decoder selections.")
}
Label {
@@ -1284,15 +1338,12 @@ Flickable {
AutoResizingComboBox {
// ignore setting the index at first, and actually set it when the component is loaded
Component.onCompleted: {
if (SystemProperties.supportsHdr) {
codecListModel.append({
"text": qsTr("HEVC HDR (Experimental)"),
"val": StreamingPreferences.VCC_FORCE_HEVC_HDR
});
}
var saved_vcc = StreamingPreferences.videoCodecConfig
// Default to Automatic (relevant if HDR is enabled,
// where we will match none of the codecs in the list)
currentIndex = 0
for(var i = 0; i < codecListModel.count; i++) {
var el_vcc = codecListModel.get(i).val;
if (saved_vcc === el_vcc) {
@@ -1300,11 +1351,13 @@ Flickable {
break
}
}
activated(currentIndex)
}
id: codecComboBox
textRole: "text"
enabled: !enableHdr.checked
model: ListModel {
id: codecListModel
ListElement {
@@ -1319,12 +1372,47 @@ Flickable {
text: qsTr("HEVC (H.265)")
val: StreamingPreferences.VCC_FORCE_HEVC
}
/* HEVC HDR will be appended here */
}
// ::onActivated must be used, as it only listens for when the index is changed by a human
onActivated : {
StreamingPreferences.videoCodecConfig = codecListModel.get(currentIndex).val
if (enabled) {
StreamingPreferences.videoCodecConfig = codecListModel.get(currentIndex).val
}
}
// This handles the state of the enableHdr checkbox changing
onEnabledChanged: {
if (enabled) {
StreamingPreferences.videoCodecConfig = codecListModel.get(currentIndex).val
}
else {
StreamingPreferences.videoCodecConfig = StreamingPreferences.VCC_FORCE_HEVC_HDR
}
}
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.visible: hovered && !enabled
ToolTip.text: qsTr("Enabling HDR overrides manual codec selections.")
}
CheckBox {
id: enableHdr
width: parent.width
text: qsTr("Enable HDR (Experimental)")
font.pointSize: 12
enabled: SystemProperties.supportsHdr
checked: enabled && StreamingPreferences.videoCodecConfig == StreamingPreferences.VCC_FORCE_HEVC_HDR
// Updating StreamingPreferences.videoCodecConfig is handled above
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.visible: hovered
ToolTip.text: enabled ?
qsTr("The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.")
:
qsTr("HDR streaming is not supported on this PC.")
}
CheckBox {
+4
View File
@@ -103,7 +103,10 @@ Item {
streamSegueErrorDialog.open()
}
}
}
function sessionReadyForDeletion()
{
// Garbage collect the Session object since it's pretty heavyweight
// and keeps other libraries (like SDL_TTF) around until it is deleted.
session = null
@@ -130,6 +133,7 @@ Item {
session.displayLaunchWarning.connect(displayLaunchWarning)
session.quitStarting.connect(quitStarting)
session.sessionFinished.connect(sessionFinished)
session.readyForDeletion.connect(sessionReadyForDeletion)
// Kick off the stream
spinnerTimer.start()
Binary file not shown.
+118 -94
View File
@@ -160,7 +160,7 @@
<message>
<location filename="../gui/PcView.qml" line="224"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
<translation>Diese Version von GeForce Experience wird auf %1 noch nicht von dieser Moonlight Version unterstützt. Du musst Moonlight aktualisieren, um von %1 zu streamen.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="247"/>
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Kein Video vom Host empfangen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Prüfe die Host Firewall und Portweiterleitungsregeln für die Ports: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Deine Netzwerkverbindung ist nicht gut genug. Reduziere die Video Bitrate oder wechsel zu einer schnelleren Vebrindung.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Auf deinem Host ist etwas beim Starten vom Stream schiefgelaufen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Stelle sicher, dass du keine DRM-geschützen Inhalte auf deinem Host geöffnet hast. Du kannst auch einen Neustart des Hosts probieren.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Wenn das Problem bestehen bleibt, versuche es mit einer Neuinstallation des Grafikkartentreibers und GeFore Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Verbindung getrennt</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
<translation>Diese Version von GeForce Experience auf %1 wird von diesem Build von Moonlight nicht unterstützt. Du musst Moonlight aktualisieren, um von %1 zu streamen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>Die Auswahl des Remote Desktop Maus Modus kann in Spielen zu Problemen führen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR wird nicht von Software Dekodierung unterstützt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Software Dekodierung kann zu schlecher streaming Leitung führen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>Nicht unterstützte FPS Optionen können stottern verursachen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-Sync wird deaktiviert wenn mit einer höheren Framerate als der des Display gestreamt wird.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Da deine Grafikkarte kein HEVC Decodierung unterstützt wird Software Dekodierung benutzt. Die kann zu einer schlechten streaming Leistung führen.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">Die Grafikkarte deines PC&apos;s unterstützt keine HEVC Dekodierung.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>Die Grafikkarte deines Host&apos;s unterstützt kein HEVC. Es wird mindestens eine GeForce GTX 900-Series (Maxwell) oder neuer benötigt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>Verwendung der Software-Decodierung aufgrund deiner Auswahl, H.264 ohne GPU-Unterstützung zu erzwingen. Dies kann zu einer schlechten Streaming-Leistung führen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>Dein Host-PC und dein Client-PC unterstützen nicht die gleichen Videocodecs. Dies kann zu einer schlechten Streaming-Leistung führen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>Deine Client-GPU unterstützt die H.264-Dekodierung nicht. Dies kann zu einer schlechten Streaming-Leistung führen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 unterstützt kein HDR10.</translation>
<translation type="vanished">%1 unterstützt kein HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>Die Grafikkarte deines Host&apos;s unterstützt kein HDR. Es wird mindestens eine GeForce GTX 1000-Series (Pascal) oder neuer benötigt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>Die Grafikkarte deines PC&apos;s unterstützt keine HEVC Main10 Dekodierung für HDR streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>Für 4K Streaming wird mindestens GeForce Experience 3.0 benötigt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Deine ausgewählte Surround Sound Einstellung wird von dem momentanen Audiogerät nicht untertützt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>Zugriff auf das Audiogerät fehlgeschlagen. Es wird kein Ton für diese Session verfügbar sein.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Ein angeschlossener Controller hat keine Tastenbelegung und ist somit nicht nutzbar. Besuche die Moonlight Hilfe um dies zu lösen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>Die Grafikkarte deines Host&apos;s unterstüzt keine Videoauflösung über 4K zum Streamen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Videoauflösungen über 4K sind nur mit dem HEVC Codec Verfügbar.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Erzwungene Hardware Dekodierung kann nicht ausgewählt werden, da der PC keine Hardware Decodierung unterstützt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>Erzwungene Hardware Dekodierung ist nicht mit deinem ausgewähltem Codec kompatibel, da die Grafikkarte deines PC&apos;s den ausgewählen Codec nicht unterstützt.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience hat einen Fehler gemeldet: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>Video Decoder konnte nicht initialisiert werden. Bitte prüfe deine Streaming Einstellungen und versuche es erneut.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Vollbild</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Fenster</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Automatisch</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Du musst Moonlight neustarten, damit diese Einstellung aktiv wird</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Anzeigemodus der Oberfläche</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Maximiert</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Eingabe Einstellungen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Dies ermöglicht eine nahtlose Maussteuerung, ohne den Mauszeiger des PCs zu erfassen. Es ist ideal für die Remote-Desktop-Nutzung, funktioniert aber bei den meisten Spielen nicht.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>HINWEIS: Aufgrund eines Fehlers in GeForce Experience funktioniert diese Option möglicherweise nicht richtig, wenn Ihr Host mehrere Monitore hat.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>Das Aktivieren von HDR überschriebt die manuelle Codec Auswahl.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>HDR aktivieren (Experimentell)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>Der Stream wird HDR unterstützen, aber einige Spiele erfordern einen angeschlossenen HDR Monitor am Host-PC, um den HDR Modus zu aktiveren.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>HDR Streaming ist an diesem Client-PC nicht unterstützt.</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>HINWEIS: Bestimmte Tastenkombinationen wie Strg+Alt+Entf unter Windows können von keiner Anwendung abgefangen werden, auch nicht von Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Touchscreen als virtuelles Trackpad verwenden</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Linke und rechte Maustaste vertauschen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Scrollrichtung umkehren</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Controller Einstellungen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Tausche A/B und X/Y Controller Tasten</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Dies ändert das Controller Tastenlayout in ein Nintento Controller Style Layout</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Erzwinge das Controller #1 immer verbunden ist</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Erzwingt, dass ein Controller immer mit dem Host verbunden bleibt, auch wenn keine Gamepads an diesen PC angeschlossen sind.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Du kannst dies während des Streamens umstellen mit Strg+Alt+Shift+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Aktivieren Sie die Maussteuerung mit Controllern, indem Sie die &apos;Start&apos;-Taste gedrückt halten</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Controller-Eingaben ausführen auch wenn Moonlight im Hintergrund ist</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Erlaubt es Moonlight Controller-Eingaben an den Stream zu schicken auch wenn es nicht das aktive Fenster ist</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Host Einstellungen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Erweiterte Einstellungen</translation>
</message>
@@ -771,123 +790,128 @@
<translation>Audio Einstellungen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Warnung bei Verbindungsproblemen anzeigen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Integration von Discord Rich Presence</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Aktualisiert deinen Discord Status um den Namen der aktuellen App anzuzeigen, wenn du streamst.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>Aktiviere diese Option nur wenn du ein Spiel streamst, dass die Verbindung von Controllern nach dem Start nicht unterstützt.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimiere die Maus für Remote Desktop statt für Apps</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation>Verhindere den Bildschirmschoner während des Streamens</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation>Verhindern, dass der Bildschirmschoner gestartet wird oder der Monitor in den Standby-Modus wechselt, während ein Stream aktiv ist.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Erfasse Systemtastatur Shortcuts</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Dies aktiviert das Erfassen von Systemweiten Tastatur Shortcuts wie Alt+Tab, welche nomalerweise auf dem Client ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>im Vollbildmodus</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>immer</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Wenn aktiviert, verhält sich der Touchscreen wie ein Trackpad. Wenn deaktiviert, steuert der Touchscreen direkt den Mauszeiger.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimiere die Spieleinstellungen für das Streamen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Schließe die App auf dem Host nach dem beenden des Streams</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Dadurch wird die App, dass du streamst, geschlossen, wenn du deinen Stream beendest. Du verlierst dabei alle ungespeicherten Fortschritte!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Video Decoder</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automatisch (empfohlen)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Erwzinge Software decoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Erzwinge Hardware decoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Video Codec</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Zeige nicht unterstützte FPS Optionen an</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Suche automatisch nach Hosts im lokalen Netzwerk (empfohlen)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Erkenne automatisch geblockte Verbindungen (empfohlen)</translation>
</message>
@@ -921,22 +945,22 @@
<translation>Die Internetverbindung blockiert Moonlight. Streamen übers Internet könnte in diesem Netzwerk nicht funktionieren.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Tipp:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Drücke %1 um die Session zu trennen</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Strg+Alt+Shift+Q</translation>
</message>
@@ -1013,7 +1037,7 @@
<message>
<location filename="../gui/main.qml" line="415"/>
<source>No functioning hardware accelerated video decoder was detected by Moonlight. Your streaming performance may be severely degraded in this configuration.</source>
<translation type="unfinished"></translation>
<translation>Moonlight hat keinen funktionierenden hardwarebeschleunigten Videodecoder erkannt. Deine Streaming-Leistung kann in dieser Konfiguration stark beeinträchtigt sein.</translation>
</message>
<message>
<location filename="../gui/main.qml" line="417"/>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+113 -85
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>No se ha recibido ningún vídeo del anfitrión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Compruebe su cortafuegos y las reglas de reenvío de puertos para los puertos: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Tu conexión de red no funciona bien. Reduce la tasa de bits del vídeo o prueba con una conexión más rápida.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Algo salió mal en su PC host al iniciar la transmisión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Asegúrate de que no tienes ningún contenido protegido por DRM abierto en tu PC anfitrión. También puedes probar a reiniciar el PC anfitrión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Si el problema persiste, prueba a reinstalar los controladores de la GPU y GeForce Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Conexión terminada</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>La versión de GeForce Experience en %1 no es compatible con esta versión de Moonlight. Debes actualizar Moonlight para transmitir desde %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>La selección de activar el modo de ratón de escritorio remoto puede causar problemas en los juegos.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR no es compatible con la decodificación por software.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Su selección de ajustes para forzar la decodificación por software puede causar un rendimiento deficiente de la transmisión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>El uso de opciones de FPS no compatibles puede causar tartamudeo o retraso.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-sync se desactivará cuando se transmita a una velocidad de fotogramas superior a la de la pantalla.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Usando decodificación por software debido a su selección de forzar HEVC sin soporte de GPU. Esto puede causar un bajo rendimiento de streaming.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">La GPU de este PC no soporta la descodificación HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>La GPU de tu PC no es compatible con HEVC. Se necesita una GPU GeForce GTX serie 900 (Maxwell) o posterior para la transmisión de HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>Usando decodificación de software debido a su selección para forzar H.264 sin soporte de GPU. Esto puede provocar un rendimiento de transmisión deficiente.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>Su PC anfitrión y el PC cliente no soportan los mismos códecs de vídeo. Esto puede causar un bajo rendimiento de la transmisión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>Su GPU cliente no soporta la decodificación H.264. Esto puede causar un bajo rendimiento de la transmisión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 no soporta HDR10.</translation>
<translation type="vanished">%1 no soporta HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>La GPU de tu PC no es compatible con la transmisión de HDR. Se necesita una GPU de la serie GeForce GTX 1000 (Pascal) o posterior para la transmisión de HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>La GPU de este PC no es compatible con la decodificación HEVC Main10 para la transmisión de HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>Se requiere GeForce Experience 3.0 o superior para la transmisión en 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>La configuración de sonido envolvente seleccionada no es compatible con el dispositivo de audio actual.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>No se ha podido abrir el dispositivo de audio. El audio no estará disponible durante esta sesión.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Un mando conectado no tiene mapeo y no será utilizable. Visita la ayuda de Moonlight para resolver esto.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>La GPU de su PC anfitrión no admite la transmisión de resoluciones de vídeo superiores a 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Las resoluciones de vídeo superiores a 4K solo son compatibles con el códec HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Su selección para forzar la decodificación por hardware no puede ser satisfecha debido a la falta de soporte de decodificación por hardware en la GPU de este PC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>La selección del códec y la configuración de la decodificación forzada por hardware no son compatibles. La GPU de este PC no es compatible con la descodificación del códec elegido.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience ha devuelto el error: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>No se ha podido inicializar el decodificador de vídeo. Por favor, compruebe la configuración de la transmisión y vuelva a intentarlo.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Pantalla completa</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Ventana</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Automático</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Debe reiniciar Moonlight para que este cambio surta efecto</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Modo de visualización GUI</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Maximizado</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Ajustes de entrada</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Esto permite un control perfecto del ratón sin capturar el cursor del ratón del cliente. Es ideal para el uso del escritorio remoto, pero no funcionará en la mayoría de los juegos.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>NOTA: Debido a un error en GeForce Experience, es posible que esta opción no funcione correctamente si su PC host tiene varios monitores.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>Activar HDR anula la selección manual de codecs.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>Activar HDR (Experimental)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>La transmisión podrá utilizar HDR, pero algunos juegos pueden requerir un monitor HDR en el PC anfitrión para permitir el modo HDR.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>La transmisión HDR no esta soportada en este PC.</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>NOTA: Ciertos atajos de teclado como Ctrl+Alt+Supr en Windows no pueden ser interceptados por ninguna aplicación, incluyendo Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Utilice la pantalla táctil como un trackpad virtual</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Intercambiar los botones izquierdo y derecho del ratón</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Invertir la dirección de desplazamiento del ratón</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Configuración del mando</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Cambiar los botones del mando A / B y X / Y</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Esto cambia los mandos a un diseño de botones al estilo de Nintendo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Forzar que el mando #1 esté siempre conectado</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Obliga a un solo mando a permanecer siempre conectado al host, aunque no haya ningún mando conectado a este PC.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Puedes alternar esto mientras transmites usando Ctrl+Alt+Mayús+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Activa el control del ratón con los mandos manteniendo pulsado el botón &apos;Start&apos;</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Procesar la entrada del mando cuando Moonlight está en segundo plano</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Permite a Moonlight capturar las entradas del mando incluso si no es la ventana actual</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Configuración de host</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Configuración avanzada</translation>
</message>
@@ -771,123 +790,132 @@
<translation>Configuración de audio</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Mostrar avisos de calidad de la conexión</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Integración de Discord Rich Presence</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Actualiza tu estado de Discord para mostrar el nombre del juego que estás transmitiendo.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>Sólo active esta opción cuando transmita un juego que no admita la conexión de mandos después del inicio.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimizar el ratón para el escritorio remoto en lugar de los juegos</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Capturar los atajos de teclado del sistema</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Esto permite capturar los atajos de teclado de todo el sistema, como Alt+Tab, que normalmente serían manejados por el sistema operativo del cliente durante la transmisión.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>en pantalla completa</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>siempre</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Cuando está marcada, la pantalla táctil actúa como un trackpad. Si no está marcada, la pantalla táctil controlará directamente el puntero del ratón.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimizar la configuración del juego para la transmisión</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Salir de la aplicación en el PC anfitrión después de terminar la transmisión</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Esto cerrará la aplicación o el juego que estás transmitiendo cuando termines tu transmisión. ¡Perderás todo el progreso que no hayas guardado!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Descodificador de vídeo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automático (recomendado)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Forzar la decodificación por software</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Forzar la decodificación por hardware</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Códec de vídeo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (Experimental)</translation>
<translation type="vanished">HEVC HDR (Experimental)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Desbloquea las opciones de FPS no compatibles</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Encuentre automáticamente los ordenadores de la red local (recomendado)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Detectar automáticamente las conexiones bloqueadas (recomendado)</translation>
</message>
@@ -921,22 +949,22 @@
<translation>La conexión a Internet de este PC está bloqueando Moonlight. Es posible que la transmisión por Internet no funcione mientras esté conectado a esta red.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Consejo:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Pulse %1 para desconectar su sesión</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Mayús+Q</translation>
</message>
Binary file not shown.
+114 -86
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Aucune vidéo reçue de l&apos;hôte. Vérifiez le pare-feu et les règles de transfert de port du PC hôte.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Aucune vidéo reçue de l&apos;hôte.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Vérifiez votre pare-feu ainsi que les règles de redirection pour le(s) port(s) suivant(s)&#x202f;: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Votre connexion réseau ne fonctionne pas très bien. Réduisez votre débit vidéo ou essayez une connexion plus rapide.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Quelque chose s&apos;est mal passé sur votre PC hôte lors du lancement du streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Vérifiez que vous n&apos;avez pas de contenu protégé par DRM ouvert sur votre PC hôte. Vous pouvez également essayer de redémarrer le PC hôte.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Si le problème persiste, essayez de réinstaller vos pilotes GPU et GeForce Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Connexion terminée</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>La version de GeForce Experience sur %1 n&apos;est pas supportée par cette version de Moonlight. Vous devez mettre à jour Moonlight pour streamer depuis %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>Le mode souris pour bureau à distance que vous avez activé peut causer des problèmes dans les jeux.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>Le HDR n&apos;est pas pris en charge par le décodeur logiciel.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Vos réglages pour forcer le décodage logiciel peut causer de mauvaises performances.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>L&apos;utilisation d&apos;options FPS non prises en charge peut entraîner des saccades ou des lags.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>La synchronisation verticale (V-sync) sera désactivée lors de la diffusion en continu à une fréquence d&apos;images supérieure à celle de l&apos;affichage.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Utilisation du décodage logiciel dû à votre sélection pour forcer le codec HEVC sans support GPU. Ceci peut entraîner de mauvaises performances de streaming.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">Le GPU de ce PC ne prend pas en charge le décodage HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>Le GPU de votre PC hôte ne prend pas en charge le codec HEVC. Un GPU GeForce GTX série 900 (Maxwell) ou plus récent est nécessaire pour le streaming HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>Le décodage logiciel est utilisé car vous voulez forcer l&apos;utilisation du H.264 sans support matériel du GPU. Ceci peut causer des problèmes de performances.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>Votre PC hôte et PC client ne supportent pas les mêmes codecs vidéo. Ceci peut causer des problèmes de performance.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>Le GPU de votre client ne supporte pas le décodage matériel du H.264. Ceci peut causer des problèmes de performance.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 ne prend pas en charge le HDR10.</translation>
<translation type="vanished">%1 ne prend pas en charge le HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>Le GPU de votre PC hôte ne prend pas en charge le streaming HDR. Un GPU GeForce GTX série 1000 (Pascal) ou plus récent est nécessaire pour la diffusion HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>Le GPU de ce PC ne prend pas en charge le décodage HEVC pour le streaming HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>GeForce Experience 3.0 ou supérieur est requis pour le streaming 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Le réglage du son surround que vous avez sélectionné n&apos;est pas pris en charge par l&apos;appareil audio actuel.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>L&apos;ouverture de l&apos;appareil audio à échoué. L&apos;audio ne sera pas disponible pendant cette session.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Une manette de jeu attachée n&apos;a pas été configurée et ne sera pas utilisable. Visitez l&apos;aide Moonlight pour résoudre ce problème.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>Le GPU de votre PC hôte ne prend pas en charge le streaming dans des résolutions supérieures à la 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Les résolutions vidéo supérieures à 4K sont uniquement prises en charge par le codec HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Impossible d&apos;utiliser le décodage matériel car le GPU de cet ordinateur ne supporte pas le décodage matériel.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>Votre sélection de codecs et le réglage du décodage matériel ne sont pas compatibles. Le GPU de ce PC ne prend pas en charge le décodage du codec que vous avez choisi.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience a renvoyé l&apos;erreur : %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>Impossible d&apos;initialiser le décodeur vidéo. Veuillez vérifier vos paramètres de diffusion en continu et réessayez.</translation>
</message>
@@ -552,7 +551,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Plein écran</translation>
</message>
@@ -572,7 +571,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Fenêtré</translation>
</message>
@@ -656,131 +655,161 @@
<translation>Automatique</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Vous devez redémarrer Moonlight pour que ce changement prenne effet</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Mode d&apos;affichage de l&apos;interface graphique</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Maximisé</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Paramètres d&apos;entrée</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Cela permet un contrôle transparent de la souris, sans capturer le curseur du client. C&apos;est idéal pour l’utilisation du bureau à distance, mais ne fonctionnera pas dans la plupart des jeux.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>REMARQUE : En raison d&apos;un bogue dans GeForce Experience, cette option peut ne pas fonctionner correctement si votre PC hôte a plusieurs moniteurs.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>REMARQUE : Certains raccourcis clavier comme Ctrl+Alt+Suppr sur Windows ne peuvent jamais être interceptés, y compris par Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>en plein écran</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>toujours</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Utiliser l&apos;écran tactile comme un trackpad virtuel</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Permuter les boutons gauche et droit de la souris</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Inverser le sens de défilement de la souris</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Paramètres de la manette</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Inverser les boutons A/B et X/Y de la manette</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Permet d&apos;utiliser les boutons comme sur une manette Nintendo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Forcer la manette #1 à être toujours connectée</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Force une seule manette de jeu à toujours rester connectée à l&apos;hôte, même si aucune manette de jeu n&apos;est réellement connectée à ce PC.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This enables mouse control without capturing the client&apos;s mouse cursor. It will not work in most games.</source>
<translation type="vanished">Cela permet de contrôler la souris sans avoir à capturer le curseur du client. Cela ne fonctionne pas dans la plupart des jeux.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Vous pouvez basculer ceci pendant la diffusion en utilisant Ctrl+Alt+Maj+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Capturer les raccourcis clavier système</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Ceci permet la capture de raccourcis clavier système comme Alt+Tab, qui seraient normalement utilisés par le système d’exploitation client.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Active le contrôle de la souris par la manette en maintenant « Start »</translation>
<translation>Activer le contrôle de la souris par la manette en maintenant « Start »</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Capturer la manette même quand Moonlight est en arrière-plan</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Permet à Moonlight de capturer la manette même si Moonlight n&apos;est pas au premier plan</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Paramètres de l&apos;hôte</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Paramètres avancés</translation>
</message>
@@ -794,17 +823,17 @@
<translation type="vanished">Maximiser la fenêtre Moonlight au démarrage</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Afficher des avertissements sur la qualité de la connexion</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Activer l&apos;intégration Discord Rich Presence</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Met à jour votre statut Discord pour afficher le nom du jeu que vous diffusez en continu.</translation>
</message>
@@ -813,12 +842,12 @@
<translation type="vanished">Forcé la manette de jeu Force #1 à être toujours présente</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>N&apos;activez cette option que lorsque vous diffusez en continu un jeu qui ne prend pas en charge la connexion des manettes de jeu après le démarrage.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimiser la souris pour le bureau à distance plutôt que pour les jeux</translation>
</message>
@@ -827,7 +856,7 @@
<translation type="vanished">Utiliser l&apos;écran tactile comme trackpad</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Lorsqu&apos;il est coché, l&apos;écran tactile agit comme un pavé tactile. Lorsqu&apos;il n&apos;est pas coché, l&apos;écran tactile contrôle directement le pointeur de la souris.</translation>
</message>
@@ -848,7 +877,7 @@
<translation type="vanished">Lorsque la case est cochée, permuter les boutons gauche et droit de la souris</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimiser les paramètres du jeu pour la diffusion en continu</translation>
</message>
@@ -857,68 +886,67 @@
<translation type="vanished">Lecture audio sur le PC hôte</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Fermer l&apos;application sur le PC hôte à la fin du stream</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Ceci fermera l&apos;application ou le jeu que vous êtes en train de diffuser lorsque vous aurez terminé votre flux. Vous perdrez tout progrès non sauvegardé !</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Décodeur vidéo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automatique (recommandé)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Forcer le décodage logiciel</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Forcer le décodage matériel</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Codec vidéo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (Expérimental)</translation>
<translation type="vanished">HEVC HDR (Expérimental)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Débloquer les options FPS non supportées</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Trouver automatiquement les PC sur le réseau local (recommandé)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Détecter automatiquement les connexions bloquées (recommandé)</translation>
</message>
@@ -952,22 +980,22 @@
<translation>La connexion Internet de ce PC bloque Moonlight. Le streaming à travers Internet peut ne pas fonctionner lorsqu&apos;il est connecté à ce réseau.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Astuce :</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Appuyez sur %1 pour déconnecter votre session</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start + Select + L1 + R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl + Alt + Maj + Q</translation>
</message>
Binary file not shown.
File diff suppressed because it is too large Load Diff
+111 -91
View File
@@ -292,157 +292,152 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -544,7 +539,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
@@ -569,7 +564,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
@@ -649,35 +644,55 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -687,77 +702,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -767,123 +782,128 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation type="unfinished"></translation>
</message>
@@ -917,22 +937,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation type="unfinished"></translation>
</message>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+112 -88
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>ホストから映像を受信していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>ファイアウォールと次のポートのポートフォワーディングルールを確認してください: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>ネットワーク接続がうまくいっていません。ビデオビットレートの設定を下げるか、より高速な回線を使用してください。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>ストリーミングを開始する際に、ホストPCで何か問題が発生しました。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>ホストPCでDRM保護コンテンツを開いていないことを確認してください。また、ホストPCの再起動もお試しください。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>問題が解決しない場合は、GPUドライバーとGeForce Experienceを再インストールしてみてください。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>接続が終了しました</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>%1のGeForce Experienceのバージョンは、このビルドのMoonlightではサポートされていません。%1からストリーミングするには、Moonlightをアップデートする必要があります。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>リモートデスクトップマウスモードを有効にすると、ゲームで問題が発生する場合があります。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>ソフトウェアデコードではHDRに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>ソフトウェアデコードを強制する設定になっていると、ストリーミングのパフォーマンスが低下する場合があります。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>サポートされていないFPSオプションを使用すると、スタッタリングやラグの原因となることがあります。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>ディスプレイよりも高いフレームレートでストリーミングする場合、垂直同期は無効になります。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>GPUをサポートしていないHEVCを強制する設定を選択したため、ソフトウェアデコーディングを使用しています。これによってストリーミングパフォーマンスが低下する可能性があります。</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">このPCのGPUはHEVCデコーディングに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>ホストPCのGPUはHEVCに対応していません。HEVCストリーミングにはGeForce GTX 900シリーズ(Maxwell)以降のGPUが必要です。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1はHDR10に対応していません。</translation>
<translation type="vanished">%1はHDR10に対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>ホストPCのGPUはHDRストリーミングに対応していません。HDRストリーミングにはGeForce GTX 1000シリーズ(Pascal)以降のGPUが必要です。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>このPCのGPUはHDRストリーミングのHEVC Main10デコーディングに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>4KストリーミングにはGeForce Experience 3.0以降が必要です。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>選択したサラウンド音声設定は現在のオーディオデバイスに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>オーディオデバイスのオープンに失敗しました。このセッションでは音声は利用できません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>接続されたゲームパッドはマッピングされていないため、使用できません。この問題を解決するには、Moonlightのヘルプをご覧ください。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>ホストPCのGPUは4Kを超えるビデオ解像度でのストリーミングに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>4Kを超えるビデオ解像度はHEVCコーデックでのみ対応しています。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>このPCのGPUはハードウェアデコードに対応していないため、ハードウェアデコードを強制するという選択を満たすことができません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>選択したコーデックとハードウェアデコードを強制する設定には互換性がありません。このPCのGPUは、選択したコーデックのデコードに対応していません。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experienceがエラーを返しました: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>ビデオデコーダを初期化できませんでした。ストリーミングの設定を確認して再度お試しください。</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>全画面表示</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>ウィンドウ</translation>
</message>
@@ -653,35 +652,55 @@
<translation>自動</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>この変更を有効にするには、Moonlightを再起動する必要があります</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>GUI表示モード</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>最大化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>入力設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>これにより、クライアントのマウスカーソルをキャプチャすることなく、シームレスなマウスコントロールが可能になります。リモートデスクトップでの使用に最適ですが、ほとんどのゲームでは動作しません。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>注: GeForce Experienceのバグにより、ホストPCにマルチモニターがある場合、このオプションは正しく動作しない可能性があります。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>注: WindowsのCtrl+Alt+Delのような特定のキーボードショートカットは、Moonlightを含むいかなるアプリケーションでも傍受することができません。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>タッチスクリーンを仮想トラックパッドとして使用する</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>マウスの左右のボタンを入れ替える</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>マウスのスクロール方向を逆にする</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>ゲームパッドの設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>ゲームパッドのA/BとX/Yボタンを入れ替える</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>ゲームパッドを任天堂スタイルのボタン配置に変更します</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>ゲームパッド#1を常時接続するよう強制</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>実際にはゲームパッドがPCに接続されていなくても、1台のゲームパッドが常にホストに接続されているように強制します。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>ストリーミング中でもCtrl+Alt+Shift+Mで切り替えることができます。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>ゲームパッドで「スタート」ボタンを押しながらマウス操作ができるようにする</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Moonlightがバックグラウンドで動作しているときにゲームパッドの入力を処理する</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>現在のウィンドウがフォーカスされていない場合でも、Moonlightがゲームパッドの入力をキャプチャできるようにします</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>ホスト設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>高度な設定</translation>
</message>
@@ -771,123 +790,128 @@
<translation>オーディオ構成</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>接続品質に関する警告の表示</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Discord Rich Presenceの統合</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Discordのステータスを更新して、ストリーミングしているゲームの名前を表示します。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>起動後のゲームパッドの接続をサポートしていないゲームをストリーミングする場合のみ、このオプションを有効にしてください。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>ゲームではなくリモートデスクトップにマウスを最適化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>システムのキーボードショートカットをキャプチャ</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>これにより、通常はストリーミング中にクライアントOSが処理するAlt+Tabなどのシステム全体のキーボードショートカットをキャプチャすることができます。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>フルスクリーン時</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>常時</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>チェックすると、タッチスクリーンはトラックパッドのように動作します。チェックを外すと、タッチスクリーンが直接マウスポインターを操作するようになります。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>ストリーミング用にゲーム設定を最適化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>ストリーミング終了後にホストPCのアプリを終了させる</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>ストリーミングを終了すると、ストリーミング中のアプリやゲームが終了します。保存されていない進行状況は失われます!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>映像デコーダ</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>自動 (推奨)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>ソフトウェアデコードを強制</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>ハードウェアデコードを強制</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>ビデオコーデック</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>サポートされていないFPSオプションをアンロック</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>ローカルネットワーク上のPCを自動的に検出 (推奨)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>ブロックされた接続を自動的に検出 (推奨)</translation>
</message>
@@ -921,22 +945,22 @@
<translation>このPCのインターネット接続がMoonlightをブロックしています。このネットワークに接続している間はインターネットでのストリーミングができない場合があります。</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>ヒント:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>%1を押してセッションを切断します</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
+116 -92
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>호스트로부터 받은 영상이 없습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>방화벽 및 다음 포트의 포트 포워딩 규칙을 확인하여 주십시오: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>네트워크 연결이 제대로 작동하지 않습니다. 영상 비트레이트 설정을 줄이거나 더 빠른 연결을 시도하십시오.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>스트리밍을 시작할 때 호스트 PC에서 문제가 발생했습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>호스트 PC에 DRM으로 보호된 콘텐츠가 열려 있지 않은지 확인하십시오. 또한 호스트 PC를 다시 시작하는 것을 시도해 볼 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>문제가 지속되면 GPU 드라이버와 GeForce Experience를 다시 설치해보십시오.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>연결이 종료되었습니다</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>%1의 GeForce Experience 버전은 이 빌드의 Moonlight에서 지원되지 않습니다. %1에서 스트리밍하려면 Moonlight를 업데이트 해야 합니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>원격 데스크톱 마우스 모드를 활성화하도록 선택하면 게임에서 문제가 발생할 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR는 소프트웨어 디코딩에서 지원되지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>소프트웨어 디코딩을 강제하도록 선택하면 스트리밍 성능이 저하 될 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>지원되지 않는 FPS 옵션을 사용하면 끊김 또는 지연이 발생할 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>수직동기화는 디스플레이보다 높은 프레임 레이트로 스트리밍 할 때 비활성화됩니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>GPU 지원 없이 HEVC를 강제하도록 선택하여 소프트웨어 디코딩을 사용합니다. 이로 인해 스트리밍 성능이 저하 될 수 있습니다.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">이 PC의 GPU는 HEVC 디코딩을 지원하지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>호스트 PC의 GPU가 HEVC를 지원하지 않습니다. HEVC 스트리밍에는 GeForce GTX 900 시리즈 (Maxwell) 이상의 GPU가 필요합니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>H.264 사용을 강제하도록 선택하였으나 GPU 미지원으로 인해 소프트웨어 디코딩을 사용 중입니다. 이로 인해 스트리밍 성능이 저하될 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>호스트 PC와 클라이언트 PC가 동일한 비디오 코덱을 지원하지 않습니다. 이로 인해 스트리밍 성능이 저하될 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
<translation>클라이언트 GPU가 H.264 디코딩을 지원하지 않습니다. 이로 인해 스트리밍 성능이 저하될 수 있습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1은(는) HDR10을 지원하지 않습니다.</translation>
<translation type="vanished">%1은(는) HDR10을 지원하지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>호스트 PC의 GPU가 HDR 스트리밍을 지원하지 않습니다. HDR 스트리밍에는 GeForce GTX 1000 시리즈 (Pascal) 이상의 GPU가 필요합니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>이 PC의 GPU는 HDR 스트리밍을 위한 HEVC Main10 디코딩을 지원하지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>4K 스트리밍에는 GeForce Experience 3.0 이상이 필요합니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>선택한 서라운드 사운드 설정은 현재 오디오 장치에서 지원되지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>오디오 장치를 열지 못했습니다. 이 세션에서는 오디오를 사용할 수 없습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>연결된 게임 패드에 매핑이 없으며 사용할 수 없습니다. 이 문제를 해결하려면 Moonlight 도움말을 방문하십시오.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>호스트 PC의 GPU가 4K 이상의 비디오 해상도의 스트리밍을 지원하지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>4K 이상의 비디오 해상도는 HEVC 코덱에서만 지원됩니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>이 PC의 GPU가 하드웨어 디코딩을 지원하지 않아 하드웨어 디코딩을 강제하도록 선택하였으나 지원되지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>선택한 코덱과 하드웨어 디코딩을 강제하도록 선택한 설정이 호환되지 않습니다. 이 PC의 GPU는 선택한 코덱의 디코딩을 지원하지 않습니다.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience에서 오류를 반환했습니다: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>비디오 디코더를 초기화 할 수 없습니다. 스트리밍 설정을 확인하고 다시 시도하십시오.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>전체 화면</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>창</translation>
</message>
@@ -653,35 +652,55 @@
<translation>자동</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>이 변경 사항을 적용하려면 Moonlight를 다시 시작해야합니다</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>GUI 디스플레이 모드</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>최대화</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>입력 설정</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>클라이언트의 마우스 커서 캡처없이 원활한 마우스 제어가 가능합니다. 원격 데스크톱 사용에 이상적이지만 대부분의 게임에서는 작동하지 않습니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>참고: GeForce Experience의 버그로 인해 호스트 PC에 다중 모니터가 있는 경우 이 옵션이 제대로 작동하지 않을 수 있습니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>HDR을 활성화하면 지정된 코덱 선택이 무시됩니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>HDR 활성화 (실험적 기능)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>이 스트림은 HDR을 지원하지만 일부 게임에서는 HDR 모드를 활성화하기 위해 호스트 PC에 HDR 모니터가 필요할 수 있습니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>이 PC에서는 HDR 스트리밍이 지원되지 않습니다.</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>참고: Windows의 Ctrl+Alt+Del과 같은 특정 키보드 단축키는 Moonlight를 포함한 모든 응용 프로그램에서 가로챌 수 없습니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>터치스크린을 가상 트랙패드로 사용</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>왼쪽과 오른쪽 마우스 버튼 전환</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>마우스 스크롤 방향 반전</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>게임패드 설정</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>게임패드 버튼 A/B와 X/Y 전환</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>게임패드를 Nintendo 스타일의 레이아웃으로 전환합니다</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>게임패드 #1을 항상 연결</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>이 PC에 실제로 연결된 게임패드가 없는 경우에도 단일 게임패드가 항상 호스트에 연결되도록 합니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>스트리밍 중에 Ctrl+Alt+Shift+M을 사용하여 전환 할 수 있습니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>&apos;Start&apos; 버튼을 누르는 동안 게임패드로 마우스 제어를 활성화</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Moonlight가 백그라운드에 있을 때 게임패드 입력 처리</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Moonlight가 현재 초점이 맞춰진 창이 아닌 경우에도 게임패드 입력을 캡처할 수 있습니다</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>호스트 설정</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>고급 설정</translation>
</message>
@@ -771,123 +790,128 @@
<translation>오디오 구성</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>연결 품질 경고 표시</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Discord Rich Presence 통합</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>스트리밍중인 게임의 이름을 표시하도록 Discord 상태를 업데이트합니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>시작 후 연결되는 게임패드를 지원하지 않는 게임을 스트리밍할 때만 이 옵션을 활성화하십시오.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>게임 대신 원격 데스크톱에 맞게 마우스 최적화</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation>스트리밍 중 화면 켜짐 유지</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation>스트리밍 도중 화면 보호기의 시작 또는 디스플레이 잠자기를 방지합니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>시스템 키보드 단축키 캡처</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>일반적으로 클라이언트 OS에서 처리하는 Alt+Tab과 같은 시스템 전체 키보드 단축키를 캡처합니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>전체 화면에서</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>항상</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>선택하면 터치스크린이 트랙패드처럼 작동합니다. 선택하지 않으면 터치스크린이 마우스 포인터를 직접 제어합니다.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>게임 설정을 스트리밍을 위해 최적화</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>스트리밍 종료 후 호스트 PC에서 앱 종료</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>스트리밍을 종료하면 스트리밍 중인 앱이나 게임이 종료됩니다. 저장하지 않은 진행 상황을 잃게됩니다!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>비디오 디코더</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>자동 (권장)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>소프트웨어 디코딩 강제</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>하드웨어 디코딩 강제</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>비디오 코덱</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>지원되지 않는 FPS 옵션 잠금 해제</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>로컬 네트워크에서 자동으로 PC 찾기 (권장)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>차단된 연결 자동 감지 (권장)</translation>
</message>
@@ -921,22 +945,22 @@
<translation>이 PC의 인터넷 연결이 Moonlight를 차단하고 있습니다. 이 네트워크에 연결되어 있으면 인터넷을 통한 스트리밍이 작동하지 않을 수 있습니다.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>팁:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>세션 연결을 끊으려면 %1을(를) 누르십시오</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
@@ -1013,7 +1037,7 @@
<message>
<location filename="../gui/main.qml" line="415"/>
<source>No functioning hardware accelerated video decoder was detected by Moonlight. Your streaming performance may be severely degraded in this configuration.</source>
<translation type="unfinished"></translation>
<translation>Moonlight에서 작동하는 하드웨어 가속 비디오 디코더가 감지되지 않았습니다. 이 구성에서는 스트리밍 성능이 심각하게 저하될 수 있습니다.</translation>
</message>
<message>
<location filename="../gui/main.qml" line="417"/>
Binary file not shown.
+137 -109
View File
@@ -7,18 +7,18 @@
<location filename="../gui/AppView.qml" line="144"/>
<location filename="../gui/AppView.qml" line="298"/>
<source>Resume Game</source>
<translation>Fortsett spill</translation>
<translation>Fortsett Spill</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="170"/>
<location filename="../gui/AppView.qml" line="303"/>
<source>Quit Game</source>
<translation>Avslutt spill</translation>
<translation>Avslutt Spill</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="298"/>
<source>Launch Game</source>
<translation>Kjør spill</translation>
<translation>Kjør Spill</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="311"/>
@@ -28,12 +28,12 @@
<message>
<location filename="../gui/AppView.qml" line="315"/>
<source>Launch this app immediately when the host is selected, bypassing the app selection grid.</source>
<translation>Kjør dette programmet umiddelbart når vert er valgt, noe som hopper over utvalgsrutenettet.</translation>
<translation>Kjør dette programmet umiddelbart når verten er valgt, samtidig som programrutenettet hoppes over.</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="324"/>
<source>Hide Game</source>
<translation>Skjul spill</translation>
<translation>Skjul Spill</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="328"/>
@@ -56,12 +56,12 @@
<message>
<location filename="../gui/CliQuitStreamSegue.qml" line="9"/>
<source>Establishing connection to PC...</source>
<translation type="unfinished">Etablerer tilkobling til PC …</translation>
<translation>Etablerer tilkobling til PC...</translation>
</message>
<message>
<location filename="../gui/CliQuitStreamSegue.qml" line="13"/>
<source>Quitting app...</source>
<translation type="unfinished">Avslutter program …</translation>
<translation>Avslutter program...</translation>
</message>
</context>
<context>
@@ -69,12 +69,12 @@
<message>
<location filename="../gui/CliStartStreamSegue.qml" line="9"/>
<source>Establishing connection to PC...</source>
<translation>Etablerer tilkobling til PC …</translation>
<translation>Etablerer tilkobling til PC...</translation>
</message>
<message>
<location filename="../gui/CliStartStreamSegue.qml" line="13"/>
<source>Loading app list...</source>
<translation>Laster inn programliste …</translation>
<translation>Laster inn programlisten...</translation>
</message>
<message>
<location filename="../gui/CliStartStreamSegue.qml" line="81"/>
@@ -87,7 +87,7 @@
<message>
<location filename="../gui/GamepadMapper.qml" line="4"/>
<source>Gamepad Mapping</source>
<translation type="unfinished">Tastetilknytning</translation>
<translation>Knappetilordning</translation>
</message>
</context>
<context>
@@ -95,7 +95,7 @@
<message>
<location filename="../backend/nvhttp.cpp" line="378"/>
<source>Missing audio capture device. Reinstalling GeForce Experience should resolve this error.</source>
<translation>Manglende lydopptaksenhet. Å reinstallere GeForce Experience bør løse dette problemet.</translation>
<translation>Manglende lydopptaksenhet. Reinstallasjon av GeForce Experience bør løse dette problemet.</translation>
</message>
</context>
<context>
@@ -108,17 +108,17 @@
<message>
<location filename="../gui/PcView.qml" line="67"/>
<source>Unable to connect to the specified PC.</source>
<translation type="unfinished">Ikke ikke koble til denne PC-en.</translation>
<translation>Kunne ikke koble til den spesifiserte PC-en.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="70"/>
<source>This PC&apos;s Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network.</source>
<translation type="unfinished">Internett-tilkoblingen på denne PC-en blokkerer Moonlight. Strømming over Internett vil muligens ikke fungere når tilkoblet gjennom dette nettverket.</translation>
<translation>Internettforbindelsen til denne PC-en blokkerer Moonlight. Strømming via internett vil muligens ikke fungere på dette nettverket.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="73"/>
<source>Click the Help button for possible solutions.</source>
<translation type="unfinished">Klikk «Hjelp»-knappen for mulige løsninger.</translation>
<translation>Trykk på Hjelp-knappen for mulige løsninger.</translation>
</message>
<message>
<source>Searching for PCs with NVIDIA GameStream enabled...</source>
@@ -127,7 +127,7 @@
<message>
<location filename="../gui/PcView.qml" line="103"/>
<source>Automatic PC discovery is disabled. Add your PC manually.</source>
<translation type="unfinished">Automatisk oppdaging av PC er avskrudd. Leg til din PC manuelt.</translation>
<translation>Automatisk PC-oppdaging er avskrudd. Legg PC-en din manuelt.</translation>
</message>
<message>
<source>View Apps</source>
@@ -145,12 +145,12 @@
<message>
<location filename="../gui/PcView.qml" line="193"/>
<source>Test Network</source>
<translation>Test nettverk</translation>
<translation>Test Nettverk</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="202"/>
<source>Rename PC</source>
<translation>Gi PC nytt navn</translation>
<translation>Omdøp PC</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="211"/>
@@ -165,12 +165,12 @@
<message>
<location filename="../gui/PcView.qml" line="247"/>
<source>You cannot pair while a previous session is still running on the host PC. Quit any running games or reboot the host PC, then try pairing again.</source>
<translation type="unfinished">Du kan ikke parre mens en tidligere økt fremdeles kjører på din verts-PC. Avslutt alle kjørende spill eller utfør omstart av verts-PC-en, før du prøver parring igjen.</translation>
<translation>Du kan ikke koble til maskinen mens en tidligere økt fremdeles kjører på din verts-PC. Avslutt alle kjørende spill eller ta omstart av verten, prøv deretter å koble til igjen.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="302"/>
<source>Please enter %1 on your GameStream PC. This dialog will close when pairing is completed.</source>
<translation>Skriv inn %1 på din GameStream-PC. Denne dialogen vil lukkes når parringen er fullført.</translation>
<translation>Skriv inn %1 på din GameStream-PC. Denne dialogen vil lukkes når tilkoblingen er fullført.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="313"/>
@@ -180,12 +180,12 @@
<message>
<location filename="../gui/PcView.qml" line="330"/>
<source>Moonlight is testing your network connection to determine if NVIDIA GameStream is blocked.</source>
<translation>Moonlight tester din nettverkstilkobling for å fastsette hvorvidt NViDIA GameStream er blokkert.</translation>
<translation>Moonlight tester nettverkstilkoblingen din for å se om NVIDIA GameStream er blokkert.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="330"/>
<source>This may take a few seconds…</source>
<translation type="unfinished">Dette kan ta noen sekunder …</translation>
<translation>Dette kan ta noen sekunder…</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="341"/>
@@ -195,17 +195,17 @@
<message>
<location filename="../gui/PcView.qml" line="341"/>
<source>If you are trying to stream over the Internet, install the Moonlight Internet Hosting Tool on your gaming PC and run the included Internet Streaming Tester to check your gaming PC&apos;s Internet connection.</source>
<translation type="unfinished">Hvis du prøver å strømme over Internett, installer Moonlight Internett-vertstjeningsverktøyet på din spill-PC og kjør den inkluderte Internett-strømmingstesteren for å teste tilknytningen den har til Internett.</translation>
<translation>Hvis du prøver å strømme over Internett, installer &quot;Moonlight Internet Hosting Tool&quot; på verts-PCen din, og kjør det inkluderte programmet &quot;Internet Streaming Tester&quot; for å teste vertens Internett-tilkobling.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="345"/>
<source>Your PC&apos;s current network connection seems to be blocking Moonlight. Streaming over the Internet may not work while connected to this network.</source>
<translation>Nettverkstilkoblingen på din PC ser ut til å blokkere Moonlight. Strømming over Internett vil muligens ikke virke når tilknyttet fra dette nettverket.</translation>
<translation>Det ser ut som nettverkstilkoblingen på PCen din blokkerer Moonlight. Strømming via Internett vil muligens ikke virke fra dette nettverket.</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="345"/>
<source>The following network ports were blocked:</source>
<translation type="unfinished">Følgende nettverksporter ble blokkert:</translation>
<translation>Følgende nettverksporter var blokkert:</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="337"/>
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Fikk ingen video fra vert.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Sjekk din brannmur og portvideresendingsregler for port(ene): %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Din nettverkstilknytning fungerer ikke så bra. Reduser videobitraten fra dens innstilling, eller prøv en raskere tilkobling.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Noe gikk galt på din vetts-PC under oppstart av strømmen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Forsikre deg om at du ikke har noe DRM-beskyttet innhold åpent på din verts-PC. Du kan også prøve å starte verts-PC-en på ny.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Hvis problemet vedvarer kan du prøve å reinstallere dine GPU-drivere og GeForce Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Tilkobling avsluttet</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>Versjonen av GeForce Experience på %1 støttes ikke av denne byggversjonen av Moonlight. Du må oppdatere Moonlight for å strømme fra %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation type="unfinished">At du har satt på fjernskrivebordsmusemodus kan forårsake problemer i spill.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR er ikke støttet med mykvaredekoding.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation type="unfinished">At du har satt på tvungen mykvaredekoding kan forårsake dårlig strømmingsytelse.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>Bruk av ustøttede BPS-valg kan forårsake hakking eller forsinkelse.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>VSync vil bli avskrudd under strømming i høyere bilderammetakt enn skjermen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished">Bruker mykvaredekoding som følge av ditt valg om påtvungen HEVC uten skjermkortsstøtte. Dette kan forårsake dårlig strømmingsytelse.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">PC-ens skjermkort støtter ikke HEVC-dekoding.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation type="unfinished">Skjermkortet i din verts-PC støtter ikke HEVC. Et GeForce GTX kort i 900-serien (Maxwell) eller senere kreves.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 støtter ikke HDR10.</translation>
<translation type="vanished">%1 støtter ikke HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation type="unfinished">Skjermkortet i din verts-PC støtter ikke HDR-strømming. Et GeForce GTX kort i 1000-serien (Pascal) eller senere kreves.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>Denne PC-ens skjermkort støtter ikke HEVC Main10-dekoding for HDR-strømming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation type="unfinished">GeForce Experience 3.0 eller senere kreves for 4k-strømming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Din valgte kringlydsinnstilling støttes ikke på nåværende lydenhet.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>Klarte ikke å åpne lydenhet. Lyd vil være utilgjengelig under denne økten.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>En tilknyttet spillkontroller har ingen tastetilknytninger, og vil ikke kunne brukes. Besøk Moonlight-hjelpen for å løse dette.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished">Skjermkortet i din verts-PC støtter ikke strømming av videooppløsninger over 4k.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Videooppløsninger over 4k støttes kun av HEVC-kodeket.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished">At du har satt på tvungen maskinvaredekoding har ingen innvirkning siden det ikke er støtte for det på denne PC-ens skjermkort.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished">At du har valgt tungen maskinvaredekoding fungerer ikke sammen med kodekvalget. Denne PC-ens skjermkort mangler støtte for dekoding i valgt kodek.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience returnerte en feil: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished">Kunne ikke starte videodekoder. Sjekk strømmingsinnstillingene dine og prøv igjen.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Fullskjermsvisning</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Vindusmodus</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Automatisk</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Du må starte Moonlight på ny for at denne endringen skal tre i effekt</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Visningsmodus for brukergrensesnitt</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Maksimert</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished">Inndata-innstillinger</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished">Skrur på sømløs musekontroll uten å fange klientens musepeker. Dette er ideelt for fjernskrivebordsbruk, men fungerer ikke i de fleste spill.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished">Merk: Som følge av en feil i GeForce Experience, vil dette alternativet muligens ikke fungere riktig hvis din verts-PC har flere skjermer.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished">Merk: Gitte tastatursnarveier, som Ctrl+Alt+Del på Windows kan ikke fanges av noe program, inkludert Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Bruk pekeskjerm som virtuell pekeflate</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Bytt venstre og høyre musetaster</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Omvendt muserullingsretning</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Spillkontrolller-innstillinger</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Veksle A/B- og X/Y-spillkontrollerknapper</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Dette bytter spillkontrollere til knappeoppsett i Nintendo-stil</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished">Krev at spillkontroller nr. 1 alltid er tilkoblet</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished">Krever at én spillkontroller alltid er tilkoblet verten, selv om ingen spillkontrollere faktisk er tilkoblet til denne PC-en.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Du kan veksle dette under strømming ved bruk av Ctrl+Alt+Shift+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished">Skrur på musekontroll ved bruk av spillkontrollere ved å holde «Start»-knappen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Behandle spillkontrollerinndata når Moonlight er i bakgrunnen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished">Lar Moonlight fange opp spillkontollerinndata selv når det ikke er i fokus</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Vertsinnstillinger</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Avanserte innstillinger</translation>
</message>
@@ -771,123 +790,132 @@
<translation>Lydoppsett</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Vis kvalitetsadvarsler om tilkoblingen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Rik tilstedeværelsesintegrasjon for Discord</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Oppdaterer din Discord-status til å vise navnet på spillet du strømmer.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished">Kun skru på dette når du strømmer et spill som ikke støtter av spillkontrollere er tilkoblet etter oppstart.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimaliser mus for fjernskrivebord istedenfor spill</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Fang systemtastatursarveier</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Lar deg fange tastatursnarveier på hele systemet, slik som Alt+Tav som normalt ville blitt håndtert av klient-OS under strømming.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>i fullskjermsmodus</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>alltid</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished">Får pekeskjermen til å oppføre seg som pekeflate. Ellers vil pekeskjermen kontrollere musepekeren direkte.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimaliser spillinnstillinger for strømming</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Avslutt program på verts-PC etter at strømmen fullendes</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Dette vil lukke programmet eller spillet du strømmer når du avslutter strømmen din. All ulagret fremdrift vil gå tapt.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Videodekoder</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automatisk (anbefalt)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Påtving mykvaredekoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Påtving maskinvaredekoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Videokodek</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC-HDR (eksperimentelt)</translation>
<translation type="vanished">HEVC-HDR (eksperimentelt)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Lås opp ustøttede BPS-innstillinger</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Finn PC-er på lokalnettverket automatisk (anbefales)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Oppdag blokkerte tilkoblinger automatisk (anbefales)</translation>
</message>
@@ -921,22 +949,22 @@
<translation type="unfinished">Internett-tilknytningen på denne PC-en blokkerer Moonlight. Strømming over Internett vil muligens ikke virke når tilknyttet fra dette nettverket.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Tips:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Trykk %1 for å koble fra økten</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
+113 -85
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Geen video ontvangen van de host.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Controleer je firewall en port forwarding regels voor poort(en): %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Je netwerk verbinding is niet erg snel. Verminder je video bitrate instellingen of probeer een snellere verbinding te gebruiken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Er is iets mis gegaan op de host PC tijdens het starten van de stream.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Controleer of je geen DRM-beschermde content op je host PC open hebt staan. Je kunt ook proberen de host PC opnieuw op te starten.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Als de fout blijft aanhouden, probeer dan je Videokaart drivers en GeForce Experience opnieuw te installeren.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Verbinding verbroken</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>De versie van Geforce Experience op %1 word niet ondersteund door deze versie van Moonlight. Je moet Moonlight updaten om te streamen vanaf %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>Je keuze om remote desktop muis modus te gebruiken kan problemen veroorzaken in games.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR wordt niet ondersteund door software decoding.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Je instelling om software decoding te forceren kan slechte prestaties veroorzaken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>Niet ondersteunde FPS instellingen kunnen lag of stotteren veroorzaken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-sync wordt uitgeschakeld wanneer je streamt op een hogere framerate dan het display.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Software decoding wordt gebruikt door je keuze om HEVC te forceren zonder Videokaart ondersteuning. Dit kan slechte stream prestaties opleveren.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">De videokaart van deze PC ondersteunt geen HEVC decoding.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>De videokaart van de host PC ondersteund geen HEVC. een GeForce GTX 900-serie (Maxwell) of nieuwer is vereist voor HEVC streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>Gebruik maken van software decodering door selectie om H.264 te forceren zonder GPU ondersteuning. Dit kan slechte streamingkwaliteit veroorzaken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>Uw server pc en cliënt pc ondersteunen niet dezelfde videocodering. Dit kan slechte streamingkwaliteit veroorzaken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>Uw cliënt GPU ondersteund geen H.264 decodering. Dit kan slechte streamingkwaliteit veroorzaken.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 ondersteunt geen HDR10.</translation>
<translation type="vanished">%1 ondersteunt geen HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>De videokaart van je host PC ondersteund geen HDR streamen. Een GeForce GTX 1000-serie (Pascal) of nieuwer is vereist voor HDR streamen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>De videokaart van deze PC ondersteunt geen HEVC Main10 decodatie voor HDR streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>GeForce Experience 3.0 of nieuwer is vereist voor 4K streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Je geselecteerde surround sound instelling wordt niet ondersteund door het huidige audio apparaat.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>Openen van audio apparaat mislukt. Audio is niet beschikbaar tijdens deze sessie.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Een aangesloten gamepad heeft geen instellingen en is dus niet bruikbaar. Bezoek Moonlight help om dit op te lossen.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>De videokaart van de host PC ondersteund geen video resoluties hoger dan 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Video resoluties hoger dan 4K worden alleen ondersteund door de HEVC codec.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Je keuze om hardware decoding te forceren kon niet worden volbracht omdat de videokaart op deze PC geen ondersteuning bied voor hardware decoding.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>Je codec keuze en de keuze voor het forceren van hardware decodatie zijn niet compatibel. De videokaart van deze PC ondersteund de gekozen codec niet.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience gaf de volgende error: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>Niet gelukt om de video decoder te initialiseren. Controleer je stream instellingen en probeer opnieuw.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Volledig scherm</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Windowed</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Automatisch</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Je moet Moonlight opnieuw opstarten voordat de verandering actief word</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>GUI weergave modus</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Gemaximaliseerd</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Invoer instellingen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Dit activeert vloeiende muis besturing zonder de muis cursor van de client over te nemen. Het is ideal voor remote desktop maar werkt niet goed in de meeste games.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>INFO: Door een bug in GeForce Experience, kan deze optie niet goed werken als je meerdere monitoren hebt.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>INFO: Sommige toetsenbord snelkoppelingen zoals Ctrl+Alt+Del in Windows kunnen niet worden opgevangen door applicaties, ook niet door Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Gebruik een touchscreen als virtueel trackpad</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Verwissel linker- en rechtermuisknop</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Keer muis scroll richting om</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Gamepad instellingen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Verwissel A/B en X/Y gamepad knoppen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Dit veranderd gamepads naar een Nintendo-stijl knoppen layout</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Forceer gamepad #1 als altijd verbonden</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Forceer een enkele gamepad om altijd verbonden te blijven met de host, zelfs als er geen gamepads verbonden zijn met deze PC.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Je kunt deze instelling tijdens het streamen aan of uit zetten met Ctrl+Alt+Shift+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Activeer muis besturing met gamepads door de &apos;Start&apos; toets vast te houden</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Verwerk gamepad input wanneer Moonlight in de achtergrond staat</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Sta Moonlight toe gamepad input te verwerken zelfs als het niet het actieve window is</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Host instellingen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Geavanceerde instellingen</translation>
</message>
@@ -771,123 +790,132 @@
<translation>Audio configuratie</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Geef verbindingskwaliteit waarschuwingen weer</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Discord Rich Presence integratie</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Update je Discord status om de game weer te geven die je streamed.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>Zet deze optie alleen aan als je een game streamed die het niet ondersteund als gamepads verbonden worden nadat de game opgestart is.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimaliseer de muis voor remote desktop in plaats van games</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Verwerk systeem-toetsenbordsnelkoppelingen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Dit activeert het verwerken van systeem-toetsenbordsnelkoppelingen zoals Alt+Tab die normaal door het besturingssysteem verwerkt worden tijdens het streamen.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>in volledig scherm</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>altijd</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Wanneer aangevinkt, fungeert het toutchscreen als een trackpad. Wanneer niet aangevinkt, bedient het touchscreen direct de muis cursor.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimaliseer game instellingen voor streamen</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Stop app op de host PC na het stoppen van de stream</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Dit zal de applicatie of de game die je streamed afsluiten wanneer je stopt met streamen. Alle niet opgeslagen voortgang zal verloren gaan!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Video decoder</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automatisch (Aanbevolen)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Forceer software decoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Forceer hardware decoding</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Video codec</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (Experimenteel)</translation>
<translation type="vanished">HEVC HDR (Experimenteel)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Ontgrendel niet ondersteunde FPS opties</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Ontdek automatisch PCs op het lokale netwerk (Aanbevolen)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Detecteer geblokkeerde verbindingen automatisch (Aanbevolen)</translation>
</message>
@@ -921,22 +949,22 @@
<translation>De Internet verbinding van deze PC blokkeert Moonlight. Streamen via het Internet zal wellicht niet werken terwijl je verbonden bent met dit netwerk.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Tip:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Druk op %1 om de verbinding met de sessie te verbreken</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+113 -85
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Не удалось загрузить видео с хост-ПК. (No video received from host.)</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Проверьте настройки брандмауэра и проброса портов для следующих портов: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Ваше сетевое подключение не справляется с заданными настройками. Попробуйте изменить битрейт или использовать более быстрое подключение.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Что-то пошло не так на хост-ПК при попытке начать стрим.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Убедитесь, что на нём не открыто защищённых DRM материалов. Также попытайтесь перезагрузить ПК.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Если проблема не уходит, попробуйте переустановить драйвер видеокарты и/или GeForce Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Подключение разорвано</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>Версия GeForce Experience на %1 не поддерживается данной сборкой Moonlight. Вы должны обновить Moonlight для потоковой передачи с %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>Вы выбрали режим удалённого рабочего стола. Это может вызвать проблемы с мышью в некоторых играх.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR не поддерживается с программным декодированием.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Вы выбрали программное декодирование, что может ухудшить производительность.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>Неподдерживаемые значения FPS могут вызвать подтормаживания или повысить задержку.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-sync будет отключён, если частота кадров стрима превышает частоту развёртки экрана.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Ваша видеокарта не поддерживает аппаратное декодирование HEVC, используется программное декодирование. Это может ухудшить производительность.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">Видеокарта этого ПК не поддерживает декодирование HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>Видеокарта хост-ПК не поддеживает HEVC. Требуется видеокарты GTX 900 серии или новее. Используйте H264.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 не поддеживает HDR10.</translation>
<translation type="vanished">%1 не поддеживает HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>Видеокарты ПК-хоста не поддеживает стрим в HDR. Нужна видеокарта GTX серии 1000 или новее.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>Видеокарта этого ПК не поддерживает декодирование HEVC профиля Main10, HDR недоступен.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>Разрешение 4K требует GeForce Experience 3.0 или новее.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Ваша настройка объёмного звука не поддерживается текущим аудиоустройством.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>Не удалось открыть аудиоустройство на этом ПК. Звук будет отключён на этот раз.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Подключённый геймпад не настроен и не может быть использован. Посетите раздел помощи Moonlight, чтобы исправить это.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>Видеокарта хост-ПК не поддерживает разрешения выше 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Разрешения выше 4K работают только с HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Вы выбрали аппаратное декодирование, но видеокарта этого ПК не поддерживает аппаратное декодирование для выбранного кодека.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>Вы выбрали аппаратное декодирование, но видеокарта этого ПК не поддерживает аппаратное декодирование для выбранного кодека.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>Ошибка GeForce Experience: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>Не удалось запустить декодирование видео. Проверьте настройки стрима и попробуйте ещё раз.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>На весь экран</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>В окне</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Автоматически</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Для применения изменений необходим перезапуск Moonlight</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Режим показа интерфейса</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Развёрнуто</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Настройки ввода</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Удобно для удалённого рабочего стола, т.к. курсор мыши не будет &quot;захвачен&quot; и может уходить за пределы окна Moonlight. Не будет работать в большинстве игр.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>Предупреждение: Из-за бага GeForce Experience эта настройка может не работать, если к хост-ПК подключено несколько мониторов.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>Предупреждение: некоторые комбинации клавиш, вроде Ctrl-Alt-Del, не могут быть перехвачены.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Использовать сенсорный экран как виртуальный тачпад</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Поменять местами левую и правую кнопки мыши</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Колесо мыши крутит в обратном направлении</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Настройки геймпада</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Поменять местами кнопки A/B и X/Y</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Меняет назначения кнопок в стиль Nintendo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Принудительно оставить геймпад №1 подключённым</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Хотя бы один виртуальный геймпад всегда будет &quot;подключён&quot; к хост-ПК, даже если физически к ПК-хосту не подключено ни одного.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Вы можете переключить эту настройку во время стрима нажатием Ctrl+Alt+Shift+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Переходить в режим управления курсором мыши удержанием кнопки &quot;Start&quot;</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Геймпад работает, когда окно Moonlight в фоне</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Позволяет захватывать ввод с геймпада, даже когда окно Moonlight неактивно</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Настройки ПК-хоста</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Расширенные настройки</translation>
</message>
@@ -771,123 +790,132 @@
<translation>Настройки звука</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Показывать предупреждения о качестве соединения</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Интеграция в Discord Rich Presence</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Пишет статус в Discord с названием запущенноый игры.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>Необходимо для игр, не поддерживающих &quot;горячее&quot; подключение геймпадов.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Оптимизировать мышь для удалённого рабочего стола вместо игр</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Захватывать нажатия горячих клавиш</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Это включает захват комбинаций вроде Alt+Tab, которые иначе бы обычно обрабатывались операционной системой.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>только в режиме на весь экран</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>всегда</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Если включено, сенсорный экран будет использоваться как тачпад. Если отключено, сенсорный экран будет прямо управлять курсором мыши.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Позволить GeForce Experience оптимизировать настройки игры</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Завершить игру на ПК-хосте при выходе</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Это выйдет из игры или приложения при закрытии окна Moonlight или нажатии Ctrl+Alt+Shift+Q. Несохранённый прогресс может быть утерян!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Декодер видео</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Автоматически (рекомендуется)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Программный</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Аппаратный</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Видеокодек</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (Экспериментальный)</translation>
<translation type="vanished">HEVC HDR (Экспериментальный)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Включить неподдерживаемые настройки FPS</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Автоматически найти ПК-хосты в локальной сети (рекомендуется)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Автоматически определять проблемы с подключением (рекомендуется)</translation>
</message>
@@ -921,22 +949,22 @@
<translation>Интернет-соединение этого ПК блокирует Moonlight. Стриминг через интернет может не работать.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Совет:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Нажмите %1, чтобы отсоединиться</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
+112 -88
View File
@@ -292,157 +292,156 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 stödjer inte HDR10.</translation>
<translation type="vanished">%1 stödjer inte HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>GeForce Experience 3.0 eller högre krävs för 4K-streaming.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Videoupplösningar över 4K stöds endast av HEVC-codec.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience returnerade fel: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -544,7 +543,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Helskärm</translation>
</message>
@@ -569,7 +568,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Fönsterläge</translation>
</message>
@@ -649,35 +648,55 @@
<translation>Automatisk</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Maximerad</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -687,77 +706,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Värdinställningar</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Avancerade inställningar</translation>
</message>
@@ -767,123 +786,128 @@
<translation>Ljudkonfiguration</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Optimera musen för fjärrskrivbord istället för spel</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>i helskärm</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>alltid</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Optimera spelinställningar för streaming</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Automatisk (rekommenderas)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Videokodec</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation type="unfinished"></translation>
</message>
@@ -917,22 +941,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Tips:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
+112 -88
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>ไม่ได้รับวิดีโอจากเครื่องหลัก</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>ตรวจสอบ Firewall และ Port forwarding rules สำหรับ port(s): %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>การเชื่อมต่อเครื่อข่ายทำงานได้ไม่ค่อยดี ลด Bitrate ของวิดีโอหรือลองใช้การเชื่อมต่อที่เร็วกว่านี้</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>เกิดข้อผิดพลาดบางอย่างบนคอมพิวเตอร์หลักขณะที่กำลังเริ่มสตรีม</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>ทำให้แน่ใจว่าคุณไม่ได้เปิดเนื้อหาที่ถูกป้องกันด้วย DRM บนคอมพิวเตอร์หลัก คุณก็สามารถลองรีสตาร์ทคอมพิวเตอร์หลักได้ด้วย</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>หากยังคงมีปัญหาอยู่ ลองติดตั้งไดร์เวอร์ของการ์ดจอและ GeForce Experience ใหม่</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>ยุติการเชื่อมต่อแล้ว</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>รุ่นของ GeForce Experience บน %1 ไม่รองรับ Moonlight รุ่นนี้ คุณต้องอัปเดต Moonlight เพื่อสตรีมจาก % 1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>การเลือกการตั้งค่าของคุณที่จะเปิดโหมดเมาส์ Remote Desktop อาจจะทำให้เกิดปัญหาในเกม</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>ไม่รองรับ HDR ด้วยการถอดรหัสแบบซอฟต์แวร์</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>การเลือกการตั้งค่าของคุณเพื่อบังคับให้ถอดรหัสแบบซอฟต์แวร์อาจทำให้ประสิทธิภาพการสตรีมไม่ดี</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>การใช้ FPS ที่ไม่รองรับอาจจะทำให้เกิดการกระตุกหรือความล่าช้าได้</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-sync จะถูกปิดเมื่อสตรีมที่เฟรมเรทที่สูงกว่าจอ</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>การใช้การถอดรหัสแบบซอฟต์แวร์เนื่องจากการบังคับ HEVC โดยที่การ์จอไม่รองรับ ให้ประสิทธิภาพการสตรีมไม่ดี</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">การ์ดจอของคอมพิวเตอร์เครื่องนี้ไม่รองรับการถอดรหัส HEVC</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>การ์ดจอของคอมพิวเตอร์หลักไม่รองรับ HEVC ต้องใช้ GeForce GTX รุ่น 900 (Maxwell) หรือใหม่กว่าสำหรับการสตรีม HEVC</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 ไม่รองรับ HDR10</translation>
<translation type="vanished">%1 ไม่รองรับ HDR10</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>คอมพิวเตอร์หลักไม่รองรับการสตรีม HDR ต้องใช้ GeForce GTX รุ่น 1000 (Pascal) หรือใหม่กว่าสำหรับการสตรีม HDR</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>คอมพิวเตอร์นี้ไม่รองรับการถอดรหัส HEVC Main10 สำหรับการสตรีม HDR</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>ต้องใช้ GeForce Experience 3.0 หรือใหม่กว่าสำหรับการสตรีมแบบ 4K</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>อุปกรณ์เสียงปัจจุบัน ไม่รองรับการตั้งค่าเสียงรอบทิศทางที่คุณเลือก</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>ไม่สามารถเปิดอุปกรณ์เสียงได้ จะไม่สามารถใช้งานเสียงได้ในเซสชันนี้</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
@@ -653,35 +652,55 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -771,123 +790,128 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation type="unfinished"></translation>
</message>
@@ -921,22 +945,22 @@
<translation type="unfinished">การเชื่อมต่ออินเทอร์เน็ตของคอมพิวเตอร์บล็อก Moonlight ไว้ การสตรีมผ่านอินเทอร์เน็ตอาจไม่ทำงานในขณะที่เชื่อมต่อกับเครือข่ายนี้</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation type="unfinished"></translation>
</message>
+111 -91
View File
@@ -292,157 +292,152 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -544,7 +539,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
@@ -569,7 +564,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
@@ -649,35 +644,55 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -687,77 +702,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -767,123 +782,128 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation type="unfinished"></translation>
</message>
@@ -917,22 +937,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation type="unfinished"></translation>
</message>
+111 -91
View File
@@ -292,157 +292,152 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -544,7 +539,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
@@ -569,7 +564,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
@@ -649,35 +644,55 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -687,77 +702,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation type="unfinished"></translation>
</message>
@@ -767,123 +782,128 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation type="unfinished"></translation>
</message>
@@ -917,22 +937,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation type="unfinished"></translation>
</message>
Binary file not shown.
+113 -85
View File
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>Không nhận được video từ máy chủ.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>Hãy kiểm tra tường lửa và các quy tắc chuyển tiếp cổng cho (các) cổng: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>Kết nối mạng của bạn đang không hoạt động tốt. Hãy giảm cài đặt tốc độ bit video hoặc thử một kết nối nhanh hơn.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>Có gì đó sai đã xảy ra trên PC chủ của bạn khi bắt đầu stream.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>Hãy chắc chắn là bạn không mở bất kỳ nội dung được DRM bảo vệ nào trên PC chủ. Bạn cũng có thể thử khởi động lại PC chủ.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>Nếu vấn đề vẫn tiếp diễn, hãy thử cài đặt lại driver GPU và GeForce Experience.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>Kết nối bị chấm dứt</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>Phiên bản của GeForce Experience trên %1 không được bản dựng Moonlight này hỗ trợ. Bạn phải cập nhật Moonlight để stream từ %1.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>Lựa chọn bật chế độ chuột máy tính từ xa của bạn có thể sẽ gây ra vấn đề trong các trò chơi.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>HDR không được hỗ trợ với giải mã phần mềm.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>Lựa chọn cài đặt buộc giải mã phần mềm của bạn có thể sẽ gây ra hiệu năng stream kém.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>Việc sử dụng các tuỳ chọn FPS không được hỗ trợ có thể sẽ gây ra khựng hoặc lag.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>V-sync sẽ bị tắt khi stream tại tốc độ khung hình cao hơn màn hình.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>Đang sử dụng giải mã phần mềm do lựa chọn buộc HEVC của bạn mà không có sự hỗ trợ của GPU. Việc này có thể sẽ gây ra hiệu năng stream kém.</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">GPU của PC này không hỗ trợ giải mã HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>GPU của PC chủ không hỗ trợ HEVC. Một GPU GeForce GTX 900-series (Maxwell) hoặc mới hơn được yêu cầu để stream HEVC.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>Đang sử dụng giải mã phần mềm do lựa chọn buộc dùng H.264 mà GPU không hỗ trợ. Việc này có thể gây ra hiệu năng stream thấp.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>PC chủ và PC khách không hỗ trợ cùng codec video. Việc này có thể gây ra hiệu năng stream thấp.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>GPU khách không hỗ trợ giải mã H.264. Việc này có thể gây ra hiệu năng stream thấp.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 không hỗ trợ HDR10.</translation>
<translation type="vanished">%1 không hỗ trợ HDR10.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>GPU của PC chủ không hỗ trợ stream HDR. Một GPU GTX 1000-series (Pascal) hoặc mới hơn được yêu cầu để stream HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>GPU của PC chủ không hỗ trợ giải mã HEVC Main10 để stream HDR.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>GeForce Experience 3.0 hoặc cao hơn được yêu cầu để stream 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>Cài đặt âm thanh bao quanh đã chọn của bạn không được thiết bị âm thanh hiện tại hỗ trợ.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>Mở thiết bị âm thanh thất bại. Âm thanh sẽ không có sẵn trong phiên làm việc này.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>Một tay cầm điều khiển không được chỉ định nút và sẽ không thể sử dụng được. Hãy đi đến trợ giúp của Moonlight để giải quyết điều này.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>GPU của PC chủ không hỗ trợ stream độ phân giải video trên 4K.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>Các độ phân giải video trên 4K chỉ được codec HEVC hỗ trợ.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>Lựa chọn buộc giải mã phần cứng của bạn không thể được thoả mãn do thiếu sự hỗ trợ giải mã phần cứng trên GPU của PC này.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>Lựa chọn codec và cài đặt buộc giải mã phần cứng của bạn không tương thích. GPU của PC này thiếu sự hỗ trợ cho việc giải mã codec đã chọn.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience đã trả lời bằng lỗi: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>Không thể khởi tạo trình giải mã video. Vui lòng kiểm tra cài đặt stream của bạn và thử lại.</translation>
</message>
@@ -548,7 +547,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>Toàn màn hình</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>Cửa sổ</translation>
</message>
@@ -653,35 +652,55 @@
<translation>Tự động</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>Bạn phải khởi động lại Moonlight để thay đổi này có hiệu lực</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>Chế độ hiển thị giao diện đồ hoạ</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>Phóng to</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>Cài đặt đầu vào</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>Việc này bật điều khiển chuột liền mạch mà không bắt con trỏ chuột của máy khách. Nó là lý tưởng cho việc sử dụng máy tính từ xa nhưng sẽ không hoạt động trong đa số trò chơi.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>LƯU Ý: Vì một lỗi trong GeForce Experience, tuỳ chọn này có thể sẽ không hoạt động đúng nếu PC chủ của bạn có nhiều màn hình.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>Việc bật HDR sẽ được ưu tiên trước lựa chọn codec thủ công.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>Bật HDR (Thử nghiệm)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>Stream sẽ có khả năng là HDR, nhưng một số trò chơi có thể yêu cầu màn hình HDR trên PC chủ để bật chế độ HDR.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>Việc stream HDR không được hỗ trợ trên PC này.</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">Erfassen von System-Tastaturkürzeln beim Streaming im Vollbildmodus</translation>
@@ -691,77 +710,77 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>LƯU Ý: Một số lối tắt bàn phím cụ thể như Ctrl+Alt+Del trên Windows không thể được bất kỳ ứng dụng nào can thiệp, bao gồm cả Moonlight.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>Sử dụng màn hình cảm ứng như một trackpad ảo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>Đảo các nút chuột trái và phải</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>Đảo ngược hướng cuộn chuột</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>Cài đặt tay cầm điều khiển</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>Đảo các nút A/B và X/Y của tay cầm điều khiển</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>Việc này chuyển các tay cầm điều khiển sang một bố cục nút giống Nintendo</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>Buộc tay cầm điều khiển #1 luôn được kết nối</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>Buộc một tay cầm điều khiển luôn giữ trạng thái đã kết nối đến máy chủ, kể cả nếu không có tay cầm điều khiển nào thực sự được kết nối đến PC.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>Bạn có thể bật/tắt việc này trong khi stream bằng Ctrl+Alt+Shift+M.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>Bật điều khiển chuột bằng tay cầm điều khiển bằng cách giữ nút &apos;Start&apos;</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>Xử lý đầu vào của tay cầm điều khiển khi Moonlight ở trong nền</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>Cho phép Moonlight nắm bắt đầu vào của tay cầm điều khiển kể cả nếu nó không phải là cửa sổ hiện được tập trung</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>Cài đặt máy chủ</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>Cài đặt nâng cao</translation>
</message>
@@ -771,123 +790,132 @@
<translation>Thiết lập âm thanh</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>Hiện cảnh báo chất lượng kết nối</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Tích hợp với Discord Rich Presence</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>Cập nhật trạng thái Discord của bạn để hiển thị tên trò chơi bạn đang stream.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>Chỉ bật tuỳ chọn này khi stream một trò chơi không hỗ trợ tay cầm điều khiển được kết nối sau khi khởi động.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>Tối ưu hoá chuột cho máy tính từ xa thay vì trò chơi</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation>Giữ màn hình bật trong khi stream</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation>Ngăn screensaver hoạt động hoặc màn hình tắt trong khi stream.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>Nắm bắt các lối tắt bàn phím hệ thống</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>Việc này bật việc nắm bắt các lối tắt bàn phím toàn hệ thống như Alt+Tab (bình thường sẽ được HĐH máy khách xử lý) trong khi stream.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>trong toàn màn hình</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>luôn luôn</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>Khi được đánh dấu, màn hình cảm ứng hoạt động như một trackpad. Khi không được đánh dấu, màn hình cảm ứng sẽ trực tiếp điều khiển con trỏ chuột.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>Tối ưu hoá cài đặt trò chơi cho việc stream</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>Thoát ứng dụng trên PC chủ sau khi kết thúc stream</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>Việc này sẽ đóng ứng dụng hoặc trò chơi bạn đang stream khi bạn kết thúc stream. Bạn sẽ mất công việc đang làm chưa được lưu!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>Trình giải mã video</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>Tự động (Được khuyến nghị)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>Buộc giải mã phần mềm</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>Buộc giải mã phần cứng</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>Codec video</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (Thử nghiệm)</translation>
<translation type="vanished">HEVC HDR (Thử nghiệm)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>Mở khoá các tuỳ chọn FPS không được hỗ trợ</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>Tự động tìm các PC trên mạng cục bộ (Được khuyến nghị)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>Tự động phát hiện các kết nối bị chặn (Được khuyến nghị)</translation>
</message>
@@ -921,22 +949,22 @@
<translation>Kết nối Internet của PC này đang chặn Moonlight. Việc stream qua Internet có thể sẽ không được khi kết nối đến mạng này.</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>Mẹo:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>Nhấn %1 để ngắt kết nối phiên làm việc của bạn</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
Binary file not shown.
+171 -143
View File
@@ -13,7 +13,7 @@
<location filename="../gui/AppView.qml" line="170"/>
<location filename="../gui/AppView.qml" line="303"/>
<source>Quit Game</source>
<translation>退出遊戲</translation>
<translation>結束遊戲</translation>
</message>
<message>
<location filename="../gui/AppView.qml" line="298"/>
@@ -48,7 +48,7 @@
<message>
<location filename="../gui/AppView.qml" line="343"/>
<source>Are you sure you want to quit %1? Any unsaved progress will be lost.</source>
<translation>你確定要退出 %1 嗎? 所有未儲存的進度將會遺失。</translation>
<translation>你確定要結束 %1 嗎? 所有未儲存的進度將會遺失。</translation>
</message>
</context>
<context>
@@ -61,7 +61,7 @@
<message>
<location filename="../gui/CliQuitStreamSegue.qml" line="13"/>
<source>Quitting app...</source>
<translation>應用程式退出中...</translation>
<translation>應用程式結束中...</translation>
</message>
</context>
<context>
@@ -79,7 +79,7 @@
<message>
<location filename="../gui/CliStartStreamSegue.qml" line="81"/>
<source>Are you sure you want to quit %1? Any unsaved progress will be lost.</source>
<translation>你確定要退出 %1 嗎? 所有未儲存的進度將會遺失。</translation>
<translation>你確定要結束 %1 嗎? 所有未儲存的進度將會遺失。</translation>
</message>
</context>
<context>
@@ -87,7 +87,7 @@
<message>
<location filename="../gui/GamepadMapper.qml" line="4"/>
<source>Gamepad Mapping</source>
<translation>手把映射</translation>
<translation>手把對應</translation>
</message>
</context>
<context>
@@ -95,7 +95,7 @@
<message>
<location filename="../backend/nvhttp.cpp" line="378"/>
<source>Missing audio capture device. Reinstalling GeForce Experience should resolve this error.</source>
<translation>缺少音訊捕捉裝置。重新安裝 GeForce Experience 可以解決此錯誤。</translation>
<translation>缺少音訊擷取裝置。重新安裝 GeForce Experience 可以解決此錯誤。</translation>
</message>
</context>
<context>
@@ -118,7 +118,7 @@
<message>
<location filename="../gui/PcView.qml" line="73"/>
<source>Click the Help button for possible solutions.</source>
<translation>點選幫助按鈕取的可能的解決方法。</translation>
<translation>點選說明按鈕取的可能的解決方法。</translation>
</message>
<message>
<source>Searching for PCs with NVIDIA GameStream enabled...</source>
@@ -160,12 +160,12 @@
<message>
<location filename="../gui/PcView.qml" line="224"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>此 Moonlight 版本不支持 %1 上的 GeForce Experience 版本。您必須更新 Moonlight 才能從 %1 串流傳輸。</translation>
<translation>此 Moonlight 版本不支援 %1 上的 GeForce Experience 版本。您必須更新 Moonlight 才能從 %1 串流傳輸。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="247"/>
<source>You cannot pair while a previous session is still running on the host PC. Quit any running games or reboot the host PC, then try pairing again.</source>
<translation>當上一個連線仍在主機 PC 上運行時,您無法配對。退出所有正在運行的遊戲或重新啟動主機,然後再次嘗試配對。</translation>
<translation>當上一個工作階段仍在主機 PC 上執行時,您無法配對。結束所有正在執行的遊戲或重新啟動主機,然後再次嘗試配對。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="302"/>
@@ -180,7 +180,7 @@
<message>
<location filename="../gui/PcView.qml" line="330"/>
<source>Moonlight is testing your network connection to determine if NVIDIA GameStream is blocked.</source>
<translation>Moonlight 正在測試您的網絡連線以確定 NVIDIA GameStream 是否被阻擋。</translation>
<translation>Moonlight 正在測試您的網路連線以確定 NVIDIA GameStream 是否被阻擋。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="330"/>
@@ -190,7 +190,7 @@
<message>
<location filename="../gui/PcView.qml" line="341"/>
<source>This network does not appear to be blocking Moonlight. If you still have trouble connecting, check your PC&apos;s firewall settings.</source>
<translation>此網絡似乎並未阻擋 Moonlight。如果您仍然無法連線,請檢查您電腦的防火牆設定。</translation>
<translation>此網路似乎並未阻擋 Moonlight。如果您仍然無法連線,請檢查您電腦的防火牆設定。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="341"/>
@@ -200,22 +200,22 @@
<message>
<location filename="../gui/PcView.qml" line="345"/>
<source>Your PC&apos;s current network connection seems to be blocking Moonlight. Streaming over the Internet may not work while connected to this network.</source>
<translation>您電腦的當前網絡連線似乎阻擋了 Moonlight。連接到此網絡時,可能無法通過網際網路進行流式傳輸。</translation>
<translation>您電腦的當前網路連線似乎阻擋了 Moonlight。連線到此網路時,可能無法透過網際網路進行流式傳輸。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="345"/>
<source>The following network ports were blocked:</source>
<translation>以下網絡埠被阻擋:</translation>
<translation>以下網路埠被阻擋:</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="337"/>
<source>The network test could not be performed because none of Moonlight&apos;s connection testing servers were reachable from this PC. Check your Internet connection or try again later.</source>
<translation>無法執行網絡測試,因為此 PC 無法訪問 Moonlight 的任何連接測試服務器。請檢查您的網際網路連線或稍後重試。</translation>
<translation>無法執行網路測試,因為此 PC 無法連線 Moonlight 的任何連線測試伺服器。請檢查您的網際網路連線或稍後重試。</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="102"/>
<source>Searching for PCs on your local network with NVIDIA GameStream enabled...</source>
<translation>正在本地網絡上搜尋開啟了 NVIDIA GameStream 的主機...</translation>
<translation>正在區域網路上搜尋開啟了 NVIDIA GameStream 的主機...</translation>
</message>
<message>
<location filename="../gui/PcView.qml" line="171"/>
@@ -248,7 +248,7 @@
<message>
<location filename="../backend/computermanager.cpp" line="540"/>
<source>The running game wasn&apos;t started by this PC. You must quit the game on the host PC manually or use the device that originally started the game.</source>
<translation>正在執行的遊戲不是由這台電腦啟動的。您必須手動退出主機上的遊戲或使用最初啟動遊戲的裝置。</translation>
<translation>正在執行的遊戲不是由這台電腦啟動的。您必須手動結束主機上的遊戲或使用最初啟動遊戲的裝置。</translation>
</message>
</context>
<context>
@@ -269,7 +269,7 @@
<location filename="../cli/quitstream.cpp" line="102"/>
<location filename="../cli/startstream.cpp" line="126"/>
<source>Quitting app failed, reason: %1</source>
<translation>退出應用程式失敗,原因:%1</translation>
<translation>結束應用程式失敗,原因:%1</translation>
</message>
<message>
<location filename="../cli/startstream.cpp" line="137"/>
@@ -292,72 +292,72 @@
<translation type="vanished">Kein Videosignal vom Host empfangen. Prüfe die Host Firewall und Portweiterleitungsregeln.</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>沒有接收到來自主機的影像。</translation>
<translation>沒有接收到來自主機的視訊。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>檢查防火牆和連接埠轉發規則:%1</translation>
<translation>檢查防火牆和埠轉送規則:%1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>您的網絡連線不佳。降低影像位元率或嘗試更快的連線方式。</translation>
<translation>您的網路連線不佳。降低視訊位元速率或嘗試更快的連線方式。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>啟動串流時,您的主機出現問題。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>確認您的主機上沒有打開任何受 DRM 保護的內容。您也可以嘗試重新啟動主機。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>如果問題仍然存在,請嘗試重新安裝 GPU 驅動程式和 GeForce Experience。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>連線已終止</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>此 Moonlight 版本不支持 %1 上的 GeForce Experience 版本。您必須更新 Moonlight 才能從 %1 串流傳輸。</translation>
<translation>此 Moonlight 版本不支援 %1 上的 GeForce Experience 版本。您必須更新 Moonlight 才能從 %1 串流傳輸。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>您選擇啟動遠端桌面游標模式可能會導致遊戲出現問題。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>軟體解碼不支持 HDR。</translation>
<translation>軟體解碼不支援 HDR。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>您選擇強制軟體解碼的設定可能會導致串流媒體效能不佳。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>使用不支援的 FPS 選項可能會導致卡頓或延遲。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>當以高於顯示器的刷新率進行串流傳輸時,垂直同步將被禁用。</translation>
<translation>當以高於顯示器的畫面更新率進行串流傳輸時,垂直同步將被停用。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>由於你選擇使用 GPU 不支援的 HEVC 格式,因此使用軟體進行解碼。這可能會導致串流效能不佳。</translation>
</message>
@@ -366,87 +366,86 @@
<translation type="vanished">此 PC 的 GPU 不支援 HEVC 解碼。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>您的主機 GPU 不支援 HEVC。HEVC 串流傳輸需要 GeForce GTX 900 系列 (Maxwell) 或更高階的 GPU。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>由於你選擇強制使用 GPU 不支援的 HEVC 格式,因此使用軟體進行解碼。這可能會導致串流效能不佳。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>您的主機和用戶端不支援相同的視訊編解碼器。這可能會導致串流效能不佳。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>您的用戶端 GPU 不支援 H.264 解碼。這能會導致串流效能不佳。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 不支援 HDR10。</translation>
<translation type="vanished">%1 不支援 HDR10。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>您的主機 GPU 不支援 HDR。HDR 串流傳輸需要 GeForce GTX 1000 系列 (Pascal) 或更高階的 GPU。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>此電腦的 GPU 不支援 HEVC Main10 解碼器來進行 HDR 串流。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>4K串流需要GeForce Experience 3.0 或更高的版本。</translation>
<translation>4K 串流需要 GeForce Experience 3.0 或更高的版本。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>您所選擇的環繞音效設定並不支援目前的音訊裝置。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>無法開啟音訊裝置。音訊在本次的會話中將無法使用。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>附加的手把沒有映射,將無法使用。請造訪 Moonlight 幫助解決問題。</translation>
<translation>附加的手把沒有對應,將無法使用。請造訪 Moonlight 協助解決問題。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>您的主機GPU不支援4K影像串流。</translation>
<translation>您的主機 GPU 不支援 4K 視訊串流。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>只有 HEVC 轉碼器支援 4K 以上的視訊解析度。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>由於此電腦的 GPU 缺乏硬體解碼支援,故無法強制使用硬體解碼。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>你選擇的編解碼器和強制硬體解碼設定不相容。此電腦的顯示卡不支援解碼你選擇的解編碼器。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience 回傳錯誤:%1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>無法初始化畫面解碼器。請檢查您的串流設定並再試一次。</translation>
</message>
@@ -496,7 +495,7 @@
<message>
<location filename="../gui/SettingsView.qml" line="331"/>
<source>Custom resolutions are not officially supported by GeForce Experience, so it will not set your host display resolution. You will need to set it manually while in game.</source>
<translation>自訂解析度不受GeForce Experience官方支援,因此不會設定目標主機的顯示解析度。您需要在遊戲內手動設定。</translation>
<translation>自訂解析度不受 GeForce Experience 官方支援,因此不會設定目標主機的顯示解析度。您需要在遊戲內手動設定。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="332"/>
@@ -523,7 +522,7 @@
<message>
<location filename="../gui/SettingsView.qml" line="493"/>
<source>Video bitrate:</source>
<translation>視訊位元率:</translation>
<translation>視訊位元速率:</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="501"/>
@@ -533,7 +532,7 @@
<message>
<location filename="../gui/SettingsView.qml" line="519"/>
<source>Video bitrate: %1 Mbps</source>
<translation>視訊位元率:%1 Mbps</translation>
<translation>視訊位元速率:%1 Mbps</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="527"/>
@@ -544,11 +543,11 @@
<location filename="../gui/SettingsView.qml" line="545"/>
<source> (Recommended)</source>
<translatorcomment>Dont put the space in ransaltions</translatorcomment>
<translation> (建議使用)</translation>
<translation> (建議)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>全螢幕</translation>
</message>
@@ -573,7 +572,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>視窗化</translation>
</message>
@@ -585,17 +584,17 @@
<message>
<location filename="../gui/SettingsView.qml" line="609"/>
<source>Disabling V-Sync allows sub-frame rendering latency, but it can display visible tearing</source>
<translation>禁用垂直同步可允許子幀渲染延遲,但會造成顯示畫面撕裂</translation>
<translation>停用垂直同步可允許子影格渲染延遲,但會造成顯示畫面撕裂</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="616"/>
<source>Frame pacing</source>
<translation>影格配速</translation>
<translation>影格調步</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="626"/>
<source>Frame pacing reduces micro-stutter by delaying frames that come in too early</source>
<translation>影格配速能夠延後顯示過早傳入的影格來減小延遲</translation>
<translation>影格調步能夠延後顯示過早傳入的影格來減小延遲</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="636"/>
@@ -605,17 +604,17 @@
<message>
<location filename="../gui/SettingsView.qml" line="671"/>
<source>Stereo</source>
<translation>雙聲道</translation>
<translation>立體聲</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="675"/>
<source>5.1 surround sound</source>
<translation>5.1 環繞音效</translation>
<translation>5.1 環場音效</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="679"/>
<source>7.1 surround sound</source>
<translation>7.1 環繞音效</translation>
<translation>7.1 環場音效</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="693"/>
@@ -653,34 +652,54 @@
<translation>自動</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>您必須重新啟動 Moonlight 以套用此更動</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>GUI(使用者介面)顯示模式</translation>
<translation>圖形使用者介面顯示模式</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>最大化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>輸入設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>這可以實現無縫滑鼠控制,而無須捕捉用戶端的滑鼠指標。這是理想的遠端桌面選擇,但在大多數遊戲中不起作用。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>提醒:由於 GeForce Experience 的 Bug,如果您的主機有多個螢幕,此選項可能無法正常運作。</translation>
<translation>提醒:由於 GeForce Experience 的 Bug,如果您的主機有多部顯示器,此選項可能無法正常運作。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>啟用 HDR 將覆寫手動編解碼器的選擇。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>啟用 HDR (實驗性)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>串流將支援 HDR,但一些遊戲可能需要你主機 PC 上的 HDR 監視器來啟用 HDR 模式。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>此 PC 不支援 HDR 串流。</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
@@ -691,203 +710,212 @@
<translation type="vanished">Dies ermöglicht die Erfassung von systemweiten Tastenkombinationen wie Alt+Tab, die normalerweise vom Client beim Streamen im Vollbildmodus ausgeführt werden würden.</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>提醒:某些鍵盤快捷鍵,例如 Ctrl+Alt+Del,無法在 Windows 上被任何應用程式攔截,包括 Moonlight。</translation>
<translation>提醒:某些鍵盤快速鍵,例如 Ctrl+Alt+Del,無法在 Windows 上被任何應用程式攔截,包括 Moonlight。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>將觸控式螢幕用作虛擬觸控板</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>交換滑鼠左右鍵</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>反轉滑鼠滾輪滾動方向</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>手把設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>交換手把的 A/B 和 X/Y 按鈕</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>這將手把切換為任天堂風格的按鍵布局</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>強制手把 #1 始終連線</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>強制使單個手把始終與主機保持連線,即使沒有任何手把實際連線到此電腦。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>您可以在串流時按下 Ctrl+Alt+Shift+M 以切換。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>透過按下手把的「開始」鍵啟用滑鼠控制</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>當 Moonlight 在背景工作時處理手把輸入</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>即使不是焦點視窗,也允許 Moonlight 捕獲手把輸入</translation>
<translation>即使不是焦點視窗,也允許 Moonlight 擷取手把輸入</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>主機設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>進階設定</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="646"/>
<source>Audio configuration</source>
<translation>音訊設定</translation>
<translation>音訊組態</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>顯示連線品質警告</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Discord Rich Presence 整合</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>更新你的 Discord 狀態,以顯示正在執行的遊戲名稱。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>僅在遊戲啟動後不支援手把連線時才啟用此選項。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>為遠端桌面而不是遊戲優化滑鼠</translation>
<translation>為遠端桌面而不是遊戲最佳化滑鼠</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation>串流時保持螢幕始終亮起</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation>防止螢幕保護程式啟動或是螢幕在串流時進入睡眠狀態。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>擷取系統鍵盤快捷鍵</translation>
<translation>擷取系統鍵盤快速鍵</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>這可以捕獲系統範圍的鍵盤快速鍵,例如 Alt + Tab,這些快速鍵通常在串流時由用戶端系統處理。</translation>
<translation>這可以擷取系統範圍的鍵盤快速鍵,例如 Alt + Tab,這些快速鍵通常在串流時由用戶端系統處理。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>全螢幕時</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>總是</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>選中時,觸控式螢幕就像一個觸控板。取消選中時,觸控式螢幕將直接控制滑鼠指標。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>最佳化遊戲設定以進行串流</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>串流結束後退出主機電腦上的應用程式</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>當你結束串流時,這將關閉正在執行的應用程式或遊戲。這會導致你失去所有未保存的遊戲進度!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>視訊解碼器</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>自動 (建議使用)</translation>
<translation>自動 (建議)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>強制使用軟體解碼</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>強制使用硬體解碼</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>視訊轉碼器</translation>
<translation>視訊編解碼器</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (實驗性)</translation>
<translation type="vanished">HEVC HDR (實驗性)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>解除鎖定不支援的 FPS 選項</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>自動尋找在區域網路中的電腦 (建議使用)</translation>
<translation>自動尋找在區域網路中的電腦 (建議)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>自動檢測被封鎖的連線 (建議)</translation>
</message>
@@ -913,7 +941,7 @@
<message>
<location filename="../gui/StreamSegue.qml" line="28"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>檢查防火牆和連接埠轉發規則:%1</translation>
<translation>檢查防火牆和埠轉送規則:%1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="74"/>
@@ -921,22 +949,22 @@
<translation>此主機的網路連線遭到封鎖。當連線到此網路時,網際網路上的串流傳輸可能無法使用。</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>提示:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>按下 %1 以中斷您的工作階段</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
@@ -979,12 +1007,12 @@
<message>
<location filename="../gui/main.qml" line="377"/>
<source>Gamepad Mapper</source>
<translation>手把映射</translation>
<translation>手把對應</translation>
</message>
<message>
<location filename="../gui/main.qml" line="381"/>
<source>Gamepad Mapping</source>
<translation>手把映射</translation>
<translation>手把對應</translation>
</message>
<message>
<location filename="../gui/main.qml" line="423"/>
@@ -994,42 +1022,42 @@
<message>
<location filename="../gui/main.qml" line="432"/>
<source>This version of Moonlight isn&apos;t optimized for your PC. Please download the &apos;%1&apos; version of Moonlight for the best streaming performance.</source>
<translation>此版本的 Moonlight 尚未針對你的電腦最佳化。請下載 &apos;%1&apos; 版本的 Moonlight,以獲得最佳的串流效能。</translation>
<translation>此版本的 Moonlight 尚未針對你的電腦最佳化。請下載「%1」版本的 Moonlight,以獲得最佳的串流效能。</translation>
</message>
<message>
<location filename="../gui/main.qml" line="441"/>
<source>Moonlight detected gamepads without a mapping:</source>
<translation>Moonlight 檢測到沒有映射的手把:</translation>
<translation>Moonlight 檢測到沒有對應的手把:</translation>
</message>
<message>
<location filename="../gui/main.qml" line="354"/>
<source>Help</source>
<translation>幫助</translation>
<translation>說明</translation>
</message>
<message>
<location filename="../gui/main.qml" line="415"/>
<source>No functioning hardware accelerated video decoder was detected by Moonlight. Your streaming performance may be severely degraded in this configuration.</source>
<translation>Moonlight 沒有檢測到有效的硬體加速視訊解碼器。在這種配置下,你的串流效能可能會嚴重下降。</translation>
<translation>Moonlight 沒有檢測到有效的硬體加速視訊解碼器。在這種組態下,你的串流效能可能會嚴重下降。</translation>
</message>
<message>
<location filename="../gui/main.qml" line="417"/>
<source>Click the Help button for more information on solving this problem.</source>
<translation>點選幫助按鈕以了解更多如何解決此問題的資訊。</translation>
<translation>點選說明按鈕以瞭解更多如何解決此問題的資訊。</translation>
</message>
<message>
<location filename="../gui/main.qml" line="425"/>
<source>Click the Help button for more information.</source>
<translation>點選幫助按鈕以了解詳情。</translation>
<translation>點選說明按鈕以瞭解詳情。</translation>
</message>
<message>
<location filename="../gui/main.qml" line="443"/>
<source>Click the Help button for information on how to map your gamepads.</source>
<translation>點選幫助按鈕以獲取有關如何映射手把的資訊。</translation>
<translation>點選說明按鈕以獲取有關如何對應手把的資訊。</translation>
</message>
<message>
<location filename="../gui/main.qml" line="451"/>
<source>Are you sure you want to quit?</source>
<translation>您確定要退出嗎?</translation>
<translation>您確定要結束嗎?</translation>
</message>
<message>
<location filename="../gui/main.qml" line="481"/>
Binary file not shown.
+113 -85
View File
@@ -276,72 +276,72 @@
<context>
<name>Session</name>
<message>
<location filename="../streaming/session.cpp" line="89"/>
<location filename="../streaming/session.cpp" line="91"/>
<source>No video received from host.</source>
<translation>没有从目标计算机接收到视频画面。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="90"/>
<location filename="../streaming/session.cpp" line="92"/>
<source>Check your firewall and port forwarding rules for port(s): %1</source>
<translation>检查防火墙和端口转发规则: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="95"/>
<location filename="../streaming/session.cpp" line="97"/>
<source>Your network connection isn&apos;t performing well. Reduce your video bitrate setting or try a faster connection.</source>
<translation>网络连接性能不佳。请降低视频比特率或尝试更快的网络连接。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="100"/>
<location filename="../streaming/session.cpp" line="102"/>
<source>Something went wrong on your host PC when starting the stream.</source>
<translation>目标计算机启动流式传输时出现问题。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="101"/>
<location filename="../streaming/session.cpp" line="103"/>
<source>Make sure you don&apos;t have any DRM-protected content open on your host PC. You can also try restarting your host PC.</source>
<translation>确保目标计算机上没有打开任何受 DRM 保护的内容。你也可以尝试重新启动目标计算机。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="102"/>
<location filename="../streaming/session.cpp" line="104"/>
<source>If the issue persists, try reinstalling your GPU drivers and GeForce Experience.</source>
<translation>如果问题仍然存在,请尝试重新安装显卡驱动程序和 GeForce Experience。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="107"/>
<location filename="../streaming/session.cpp" line="109"/>
<source>Connection terminated</source>
<translation>会话已终止</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="613"/>
<location filename="../streaming/session.cpp" line="661"/>
<source>The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.</source>
<translation>%1 上的 GeForce Experience 版本不受当前版本的 Moonlight 支持。你必须更新 Moonlight才能从 %1 串流。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="618"/>
<location filename="../streaming/session.cpp" line="666"/>
<source>Your selection to enable remote desktop mouse mode may cause problems in games.</source>
<translation>启用远程桌面鼠标模式可能会导致游戏出现问题。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="623"/>
<location filename="../streaming/session.cpp" line="671"/>
<source>HDR is not supported with software decoding.</source>
<translation>软件解码不支持 HDR。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="627"/>
<location filename="../streaming/session.cpp" line="675"/>
<source>Your settings selection to force software decoding may cause poor streaming performance.</source>
<translation>你选择的用于强制软件解码的设置可能会导致流式传输性能不佳。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="632"/>
<location filename="../streaming/session.cpp" line="680"/>
<source>Using unsupported FPS options may cause stuttering or lag.</source>
<translation>使用不受支持的 FPS 选项可能会导致卡顿或延迟。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="635"/>
<location filename="../streaming/session.cpp" line="683"/>
<source>V-sync will be disabled when streaming at a higher frame rate than the display.</source>
<translation>当流式传输的帧率高于显示时,垂直同步将被禁用。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="662"/>
<location filename="../streaming/session.cpp" line="710"/>
<source>Using software decoding due to your selection to force HEVC without GPU support. This may cause poor streaming performance.</source>
<translation>根据你的选择使用软件解码,以在没有显卡支持的情况下强制 HEVC。这可能会导致流式传输性能不佳。</translation>
</message>
@@ -350,87 +350,86 @@
<translation type="vanished">此计算机的显卡不支持 HEVC 解码。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="645"/>
<location filename="../streaming/session.cpp" line="693"/>
<source>Your host PC GPU doesn&apos;t support HEVC. A GeForce GTX 900-series (Maxwell) or later GPU is required for HEVC streaming.</source>
<translation>目标计算机的显卡不支持 HEVC。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="676"/>
<location filename="../streaming/session.cpp" line="724"/>
<source>Using software decoding due to your selection to force H.264 without GPU support. This may cause poor streaming performance.</source>
<translation>使用软件解码,因为你选择强制使用没有 GPU 支持的H.264。这可能会导致较差的流性能。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="686"/>
<location filename="../streaming/session.cpp" line="734"/>
<source>Your host PC and client PC don&apos;t support the same video codecs. This may cause poor streaming performance.</source>
<translation>你的主机和客户端 PC 不支持相同的视频编解码器。这可能会导致较差的流性能。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="689"/>
<location filename="../streaming/session.cpp" line="737"/>
<source>Your client GPU doesn&apos;t support H.264 decoding. This may cause poor streaming performance.</source>
<translation>你的客户端 GPU 不支持 H.264 解码。这可能会导致较差的流性能。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="700"/>
<source>%1 doesn&apos;t support HDR10.</source>
<translation>%1 不支持 HDR10。</translation>
<translation type="vanished">%1 不支持 HDR10。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="704"/>
<location filename="../streaming/session.cpp" line="748"/>
<source>Your host PC GPU doesn&apos;t support HDR streaming. A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming.</source>
<translation>目标计算机的显卡不支持 HDR 流。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="713"/>
<location filename="../streaming/session.cpp" line="757"/>
<source>This PC&apos;s GPU doesn&apos;t support HEVC Main10 decoding for HDR streaming.</source>
<translation>此计算机的显卡不支持 HEVC Main10 解码 HDR 流。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="726"/>
<location filename="../streaming/session.cpp" line="770"/>
<source>GeForce Experience 3.0 or higher is required for 4K streaming.</source>
<translation>4K 流式传输需要 GeForce Experience 3.0 或更高版本。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="741"/>
<location filename="../streaming/session.cpp" line="785"/>
<source>Your selected surround sound setting is not supported by the current audio device.</source>
<translation>当前音频设备不支持你选择的环绕声设置。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="748"/>
<location filename="../streaming/session.cpp" line="792"/>
<source>Failed to open audio device. Audio will be unavailable during this session.</source>
<translation>无法打开音频设备。音频在此会话期间将不可用。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="753"/>
<location filename="../streaming/session.cpp" line="797"/>
<source>An attached gamepad has no mapping and won&apos;t be usable. Visit the Moonlight help to resolve this.</source>
<translation>附加的手柄没有映射,因此无法使用。请访问 Moonlight 帮助解决此问题。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="761"/>
<location filename="../streaming/session.cpp" line="805"/>
<source>Your host PC&apos;s GPU doesn&apos;t support streaming video resolutions over 4K.</source>
<translation>目标计算机的显卡不支持 4K 以上的流式传输视频分辨率。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="765"/>
<location filename="../streaming/session.cpp" line="809"/>
<source>Video resolutions over 4K are only supported by the HEVC codec.</source>
<translation>只有 HEVC 编解码器才支持 4K 以上的视频分辨率。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="779"/>
<location filename="../streaming/session.cpp" line="823"/>
<source>Your selection to force hardware decoding cannot be satisfied due to missing hardware decoding support on this PC&apos;s GPU.</source>
<translation>由于此计算机的显卡上缺少硬件解码支持,无法满足强制硬件解码的选择。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="782"/>
<location filename="../streaming/session.cpp" line="826"/>
<source>Your codec selection and force hardware decoding setting are not compatible. This PC&apos;s GPU lacks support for decoding your chosen codec.</source>
<translation>你选择的编解码器和强制硬件解码设置不兼容。此计算机的显卡不支持解码你选择的编解码器。</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1107"/>
<location filename="../streaming/session.cpp" line="1159"/>
<source>GeForce Experience returned error: %1</source>
<translation>GeForce Experience 返回错误: %1</translation>
</message>
<message>
<location filename="../streaming/session.cpp" line="1639"/>
<location filename="../streaming/session.cpp" line="1691"/>
<source>Unable to initialize video decoder. Please check your streaming settings and try again.</source>
<translation>无法初始化视频解码器。请检查你的流式传输设置,然后重试。</translation>
</message>
@@ -536,7 +535,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="573"/>
<location filename="../gui/SettingsView.qml" line="899"/>
<location filename="../gui/SettingsView.qml" line="919"/>
<source>Fullscreen</source>
<translation>全屏</translation>
</message>
@@ -547,7 +546,7 @@
</message>
<message>
<location filename="../gui/SettingsView.qml" line="581"/>
<location filename="../gui/SettingsView.qml" line="891"/>
<location filename="../gui/SettingsView.qml" line="911"/>
<source>Windowed</source>
<translation>窗口化</translation>
</message>
@@ -637,70 +636,100 @@
<translation>自动化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="844"/>
<location filename="../gui/SettingsView.qml" line="864"/>
<source>You must restart Moonlight for this change to take effect</source>
<translation>你必须重新启动 Moonlight 才能使更改生效</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="858"/>
<location filename="../gui/SettingsView.qml" line="878"/>
<source>GUI display mode</source>
<translation>窗口显示模式</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="895"/>
<location filename="../gui/SettingsView.qml" line="915"/>
<source>Maximized</source>
<translation>最大化</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="912"/>
<location filename="../gui/SettingsView.qml" line="932"/>
<source>Show connection quality warnings</source>
<translation>显示连接质量警告</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="924"/>
<location filename="../gui/SettingsView.qml" line="944"/>
<source>Discord Rich Presence integration</source>
<translation>Discord Rich Presence 集成</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="934"/>
<location filename="../gui/SettingsView.qml" line="954"/>
<source>Updates your Discord status to display the name of the game you&apos;re streaming.</source>
<translation>更新你的 Discord 状态,以显示正在运行的游戏名称。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="952"/>
<location filename="../gui/SettingsView.qml" line="960"/>
<source>Keep the display awake while streaming</source>
<translation>在串流时保持屏幕开启</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="970"/>
<source>Prevents the screensaver from starting or the display from going to sleep while streaming.</source>
<translation>防止串流时进入屏保或屏幕休眠。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="988"/>
<source>Input Settings</source>
<translation>输入设置</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="963"/>
<location filename="../gui/SettingsView.qml" line="999"/>
<source>Optimize mouse for remote desktop instead of games</source>
<translation>为远程桌面而不是游戏优化鼠标</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="973"/>
<location filename="../gui/SettingsView.qml" line="1009"/>
<source>This enables seamless mouse control without capturing the client&apos;s mouse cursor. It is ideal for remote desktop usage but will not work in most games.</source>
<translation>这可以实现无缝鼠标控制,而无需捕获客户端的鼠标光标。这是理想的远程桌面使用方案,但不会在大多数游戏中工作。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="974"/>
<location filename="../gui/SettingsView.qml" line="1010"/>
<source>You can toggle this while streaming using Ctrl+Alt+Shift+M.</source>
<translation>你可以使用 Ctrl+Alt+Shift+M 切换鼠标控制模式。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="975"/>
<location filename="../gui/SettingsView.qml" line="1011"/>
<source>NOTE: Due to a bug in GeForce Experience, this option may not work properly if your host PC has multiple monitors.</source>
<translation>注意:由于 GeForce Experience 的 Bug,如果你的目标计算机有多个显示器,则此选项可能无法正常工作。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="985"/>
<location filename="../gui/SettingsView.qml" line="1021"/>
<source>Capture system keyboard shortcuts</source>
<translation>捕获系统快捷键</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="993"/>
<location filename="../gui/SettingsView.qml" line="1029"/>
<source>This enables the capture of system-wide keyboard shortcuts like Alt+Tab that would normally be handled by the client OS while streaming.</source>
<translation>这样可以捕获系统范围的键盘快捷键,例如 Alt + Tab,这些快捷键通常在流式传输时由客户端系统处理。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1378"/>
<source>Enabling HDR overrides manual codec selections.</source>
<translation>启用HDR将覆盖编码器选择设置。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1384"/>
<source>Enable HDR (Experimental)</source>
<translation>启用HDR(实验性)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1395"/>
<source>The stream will be HDR-capable, but some games may require an HDR monitor on your host PC to enable HDR mode.</source>
<translation>HDR功能将在串流中可用,但一些游戏可能需要PC端接入HDR显示器以启用HDR模式。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1397"/>
<source>HDR streaming is not supported on this PC.</source>
<translation>此PC不支持HDR。</translation>
</message>
<message>
<source>Capture system keyboard shortcuts while streaming in fullscreen</source>
<translation type="vanished">在全屏流式传输时捕获系统键盘快捷键</translation>
@@ -710,163 +739,162 @@
<translation type="vanished">这允许捕获系统范围内的键盘快捷键(如Alt+Tab),这些快捷键通常在全屏流式传输时由客户端操作系统处理。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="994"/>
<location filename="../gui/SettingsView.qml" line="1030"/>
<source>NOTE: Certain keyboard shortcuts like Ctrl+Alt+Del on Windows cannot be intercepted by any application, including Moonlight.</source>
<translation>注意:Windows 上的某些键盘快捷键(如 Ctrl+Alt+Del)不能被任何应用程序截获,包括 Moonlight。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1023"/>
<location filename="../gui/SettingsView.qml" line="1059"/>
<source>in fullscreen</source>
<translation>全屏</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1027"/>
<location filename="../gui/SettingsView.qml" line="1063"/>
<source>always</source>
<translation>总是</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1057"/>
<location filename="../gui/SettingsView.qml" line="1093"/>
<source>Use touchscreen as a virtual trackpad</source>
<translation>将触摸屏用作虚拟触控板</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1067"/>
<location filename="../gui/SettingsView.qml" line="1103"/>
<source>When checked, the touchscreen acts like a trackpad. When unchecked, the touchscreen will directly control the mouse pointer.</source>
<translation>选中时,触摸屏就像一个触控板。取消选中时,触摸屏将直接控制鼠标指针。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1074"/>
<location filename="../gui/SettingsView.qml" line="1110"/>
<source>Swap left and right mouse buttons</source>
<translation>交换鼠标左键和右键</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1086"/>
<location filename="../gui/SettingsView.qml" line="1122"/>
<source>Reverse mouse scrolling direction</source>
<translation>反转鼠标滚动方向</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1100"/>
<location filename="../gui/SettingsView.qml" line="1136"/>
<source>Gamepad Settings</source>
<translation>手柄设置</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1110"/>
<location filename="../gui/SettingsView.qml" line="1146"/>
<source>Swap A/B and X/Y gamepad buttons</source>
<translation>交换手柄的 A/B 和 X/Y 按钮</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1128"/>
<location filename="../gui/SettingsView.qml" line="1164"/>
<source>This switches gamepads into a Nintendo-style button layout</source>
<translation>这会将手柄切换为任天堂风格的按钮布局</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1134"/>
<location filename="../gui/SettingsView.qml" line="1170"/>
<source>Force gamepad #1 always connected</source>
<translation>强制手柄 #1 始终连接</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1144"/>
<location filename="../gui/SettingsView.qml" line="1180"/>
<source>Forces a single gamepad to always stay connected to the host, even if no gamepads are actually connected to this PC.</source>
<translation>强制单个手柄始终与目标计算机保持连接,即使没有任何手柄实际连接到此计算机。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1145"/>
<location filename="../gui/SettingsView.qml" line="1181"/>
<source>Only enable this option when streaming a game that doesn&apos;t support gamepads being connected after startup.</source>
<translation>仅在游戏启动后不支持手柄连接时才启用此选项。</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1152"/>
<location filename="../gui/SettingsView.qml" line="1188"/>
<source>Enable mouse control with gamepads by holding the &apos;Start&apos; button</source>
<translation>按住手柄的“Start”按钮启用鼠标控制</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1163"/>
<location filename="../gui/SettingsView.qml" line="1199"/>
<source>Process gamepad input when Moonlight is in the background</source>
<translation>当 Moonlight 在后台时处理手柄输入</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1174"/>
<location filename="../gui/SettingsView.qml" line="1210"/>
<source>Allows Moonlight to capture gamepad inputs even if it&apos;s not the current window in focus</source>
<translation>即使不是焦点窗口,也允许 Moonlight 捕获手柄的输入</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1183"/>
<location filename="../gui/SettingsView.qml" line="1219"/>
<source>Host Settings</source>
<translation>目标计算机设置</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1193"/>
<location filename="../gui/SettingsView.qml" line="1229"/>
<source>Optimize game settings for streaming</source>
<translation>优化游戏设置以进行流式传输</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1204"/>
<location filename="../gui/SettingsView.qml" line="1240"/>
<source>Quit app on host PC after ending stream</source>
<translation>流式传输结束后退出目标计算机上的应用程序</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1214"/>
<location filename="../gui/SettingsView.qml" line="1250"/>
<source>This will close the app or game you are streaming when you end your stream. You will lose any unsaved progress!</source>
<translation>当你结束流式传输时,这将关闭正在运行的应用程序或游戏。这会导致你失去所有未保存的游戏进度!</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1223"/>
<location filename="../gui/SettingsView.qml" line="1259"/>
<source>Advanced Settings</source>
<translation>高级设置</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1233"/>
<location filename="../gui/SettingsView.qml" line="1269"/>
<source>Video decoder</source>
<translation>视频解码器</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1258"/>
<location filename="../gui/SettingsView.qml" line="1311"/>
<location filename="../gui/SettingsView.qml" line="1294"/>
<location filename="../gui/SettingsView.qml" line="1346"/>
<source>Automatic (Recommended)</source>
<translation>自动 (推荐)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1262"/>
<location filename="../gui/SettingsView.qml" line="1298"/>
<source>Force software decoding</source>
<translation>强制软件解码</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1266"/>
<location filename="../gui/SettingsView.qml" line="1302"/>
<source>Force hardware decoding</source>
<translation>强制硬件解码</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1279"/>
<location filename="../gui/SettingsView.qml" line="1315"/>
<source>Video codec</source>
<translation>视频编解码器</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1315"/>
<location filename="../gui/SettingsView.qml" line="1350"/>
<source>H.264</source>
<translation>H.264</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1319"/>
<location filename="../gui/SettingsView.qml" line="1354"/>
<source>HEVC (H.265)</source>
<translation>HEVC (H.265)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1289"/>
<source>HEVC HDR (Experimental)</source>
<translation>HEVC HDR (实验性)</translation>
<translation type="vanished">HEVC HDR (实验性)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1333"/>
<location filename="../gui/SettingsView.qml" line="1403"/>
<source>Unlock unsupported FPS options</source>
<translation>解锁不受支持的 FPS 选项</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1352"/>
<location filename="../gui/SettingsView.qml" line="1422"/>
<source>Automatically find PCs on the local network (Recommended)</source>
<translation>自动在本地网络上查找计算机 (推荐)</translation>
</message>
<message>
<location filename="../gui/SettingsView.qml" line="1377"/>
<location filename="../gui/SettingsView.qml" line="1447"/>
<source>Automatically detect blocked connections (Recommended)</source>
<translation>自动检测被阻止的连接 (推荐)</translation>
</message>
@@ -900,22 +928,22 @@
<translation>此计算机的互联网连接被阻塞。当连接到此网络时,互联网上的流式传输可能无法工作。</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Tip:</source>
<translation>提示:</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="161"/>
<location filename="../gui/StreamSegue.qml" line="165"/>
<source>Press %1 to disconnect your session</source>
<translation>按 %1 来断开会话</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Start+Select+L1+R1</source>
<translation>Start+Select+L1+R1</translation>
</message>
<message>
<location filename="../gui/StreamSegue.qml" line="162"/>
<location filename="../gui/StreamSegue.qml" line="166"/>
<source>Ctrl+Alt+Shift+Q</source>
<translation>Ctrl+Alt+Shift+Q</translation>
</message>
+22 -8
View File
@@ -22,7 +22,7 @@
#include "streaming/video/ffmpeg.h"
#endif
#if defined(Q_OS_WIN32) && defined(Q_PROCESSOR_X86)
#if defined(Q_OS_WIN32)
#include "antihookingprotection.h"
#elif defined(Q_OS_LINUX)
#include <openssl/ssl.h>
@@ -167,12 +167,22 @@ void ffmpegLogToDiskHandler(void* ptr, int level, const char* fmt, va_list vl)
return;
}
// We need to use the *previous* printPrefix value to determine whether to
// print the prefix this time. av_log_format_line() will set the printPrefix
// value to indicate whether the prefix should be printed *next time*.
bool shouldPrefixThisMessage = printPrefix != 0;
av_log_format_line(ptr, level, fmt, vl, lineBuffer, sizeof(lineBuffer), &printPrefix);
QTime logTime = QTime::fromMSecsSinceStartOfDay(s_LoggerTime.elapsed());
QString txt = QString("%1 - FFmpeg: %2").arg(logTime.toString()).arg(lineBuffer);
logToLoggerStream(txt);
if (shouldPrefixThisMessage) {
QTime logTime = QTime::fromMSecsSinceStartOfDay(s_LoggerTime.elapsed());
QString txt = QString("%1 - FFmpeg: %2").arg(logTime.toString()).arg(lineBuffer);
logToLoggerStream(txt);
}
else {
QString txt = QString(lineBuffer);
logToLoggerStream(txt);
}
}
#endif
@@ -288,10 +298,9 @@ int main(int argc, char *argv[])
SetUnhandledExceptionFilter(UnhandledExceptionHandler);
#endif
#if defined(Q_OS_WIN32) && defined(Q_PROCESSOR_X86)
#if defined(Q_OS_WIN32)
// Force AntiHooking.dll to be statically imported and loaded
// by ntdll on x86/x64 platforms by calling a dummy function.
// AntiHooking.dll is not currently built for ARM64.
// by ntdll on Win32 platforms by calling a dummy function.
AntiHookingDummyImport();
#elif defined(Q_OS_LINUX)
// Force libssl.so to be directly linked to our binary, so
@@ -448,6 +457,10 @@ int main(int argc, char *argv[])
SDL_SetHint("SDL_AUDIO_DEVICE_APP_NAME", "Moonlight");
SDL_SetHint("SDL_APP_NAME", "Moonlight");
// We handle capturing the mouse ourselves when it leaves the window, so we don't need
// SDL doing it for us behind our backs.
SDL_SetHint("SDL_MOUSE_AUTO_CAPTURE", "0");
#ifdef QT_DEBUG
// Allow thread naming using exceptions on debug builds. SDL doesn't use SEH
// when throwing the exceptions, so we don't enable it for release builds out
@@ -466,6 +479,7 @@ int main(int argc, char *argv[])
if (WMUtils::isRunningWayland() && QGuiApplication::platformName() == "xcb") {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Detected XWayland. This will probably break hardware decoding! Try running with QT_QPA_PLATFORM=wayland or switch to X11.");
qputenv("SDL_VIDEODRIVER", "x11");
}
else if (QGuiApplication::platformName().startsWith("wayland")) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Detected Wayland");
+16
View File
@@ -49,6 +49,17 @@
<file>languages/qml_uk.qm</file>
<file>languages/qml_zh_Hant.ts</file>
<file>languages/qml_zh_Hant.qm</file>
<file>languages/qml_el.ts</file>
<file>languages/qml_el.qm</file>
<file>languages/qml_hi.ts</file>
<file>languages/qml_hi.qm</file>
<file>languages/qml_it.ts</file>
<file>languages/qml_it.qm</file>
<file>languages/qml_pt.ts</file>
<file>languages/qml_pt.qm</file>
<!-- Don't include pt_BR until it is more complete -->
<!--file>languages/qml_pt_BR.qm</file-->
<!--file>languages/qml_pt_BR.ts</file-->
</qresource>
<qresource prefix="/data">
<file alias="gamecontrollerdb.txt">SDL_GameControllerDB/gamecontrollerdb.txt</file>
@@ -59,5 +70,10 @@
<file alias="egl_opaque.vert">shaders/egl_opaque.vert</file>
<file alias="egl_overlay.frag">shaders/egl_overlay.frag</file>
<file alias="egl_overlay.vert">shaders/egl_overlay.vert</file>
<file alias="d3d11_vertex.fxc">shaders/d3d11_vertex.fxc</file>
<file alias="d3d11_overlay_pixel.fxc">shaders/d3d11_overlay_pixel.fxc</file>
<file alias="d3d11_genyuv_pixel.fxc">shaders/d3d11_genyuv_pixel.fxc</file>
<file alias="d3d11_bt601lim_pixel.fxc">shaders/d3d11_bt601lim_pixel.fxc</file>
<file alias="d3d11_bt2020lim_pixel.fxc">shaders/d3d11_bt2020lim_pixel.fxc</file>
</qresource>
</RCC>
+12
View File
@@ -41,6 +41,7 @@
#define SER_REVERSESCROLL "reversescroll"
#define SER_SWAPFACEBUTTONS "swapfacebuttons"
#define SER_CAPTURESYSKEYS "capturesyskeys"
#define SER_KEEPAWAKE "keepawake"
#define SER_LANGUAGE "language"
#define CURRENT_DEFAULT_VER 1
@@ -95,6 +96,7 @@ void StreamingPreferences::reload()
backgroundGamepad = settings.value(SER_BACKGROUNDGAMEPAD, false).toBool();
reverseScrollDirection = settings.value(SER_REVERSESCROLL, false).toBool();
swapFaceButtons = settings.value(SER_SWAPFACEBUTTONS, false).toBool();
keepAwake = settings.value(SER_KEEPAWAKE, true).toBool();
captureSysKeysMode = static_cast<CaptureSysKeysMode>(settings.value(SER_CAPTURESYSKEYS,
static_cast<int>(CaptureSysKeysMode::CSK_OFF)).toInt());
audioConfig = static_cast<AudioConfig>(settings.value(SER_AUDIOCFG,
@@ -215,6 +217,16 @@ QString StreamingPreferences::getSuffixFromLanguage(StreamingPreferences::Langua
return "uk";
case LANG_ZH_HANT:
return "zh_Hant";
case LANG_PT:
return "pt";
case LANG_PT_BR:
return "pt_BR";
case LANG_EL:
return "el";
case LANG_IT:
return "it";
case LANG_HI:
return "hi";
case LANG_AUTO:
default:
return QLocale::system().name();
+9 -1
View File
@@ -82,7 +82,12 @@ public:
LANG_SV,
LANG_TR,
LANG_UK,
LANG_ZH_HANT
LANG_ZH_HANT,
LANG_PT,
LANG_PT_BR,
LANG_EL,
LANG_IT,
LANG_HI,
};
Q_ENUM(Language);
@@ -123,6 +128,7 @@ public:
Q_PROPERTY(bool backgroundGamepad MEMBER backgroundGamepad NOTIFY backgroundGamepadChanged)
Q_PROPERTY(bool reverseScrollDirection MEMBER reverseScrollDirection NOTIFY reverseScrollDirectionChanged)
Q_PROPERTY(bool swapFaceButtons MEMBER swapFaceButtons NOTIFY swapFaceButtonsChanged)
Q_PROPERTY(bool keepAwake MEMBER keepAwake NOTIFY keepAwakeChanged)
Q_PROPERTY(CaptureSysKeysMode captureSysKeysMode MEMBER captureSysKeysMode NOTIFY captureSysKeysModeChanged)
Q_PROPERTY(Language language MEMBER language NOTIFY languageChanged);
@@ -152,6 +158,7 @@ public:
bool backgroundGamepad;
bool reverseScrollDirection;
bool swapFaceButtons;
bool keepAwake;
int packetSize;
AudioConfig audioConfig;
VideoCodecConfig videoCodecConfig;
@@ -190,6 +197,7 @@ signals:
void reverseScrollDirectionChanged();
void swapFaceButtonsChanged();
void captureSysKeysModeChanged();
void keepAwakeChanged();
void languageChanged();
private:
+6
View File
@@ -0,0 +1,6 @@
fxc /T vs_4_0_level_9_3 /Fo d3d11_vertex.fxc d3d11_vertex.hlsl
fxc /T ps_4_0_level_9_3 /Fo d3d11_overlay_pixel.fxc d3d11_overlay_pixel.hlsl
fxc /T ps_4_0_level_9_3 /Fo d3d11_genyuv_pixel.fxc d3d11_genyuv_pixel.hlsl
fxc /T ps_4_0_level_9_3 /Fo d3d11_bt601lim_pixel.fxc d3d11_bt601lim_pixel.hlsl
fxc /T ps_4_0_level_9_3 /Fo d3d11_bt2020lim_pixel.fxc d3d11_bt2020lim_pixel.hlsl
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
#include "d3d11_video_pixel_start.hlsli"
static const min16float3x3 cscMatrix =
{
1.1644, 1.1644, 1.1644,
0.0, -0.1874, 2.1418,
1.6781, -0.6505, 0.0,
};
static const min16float3 offsets =
{
16.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0
};
#include "d3d11_video_pixel_end.hlsli"
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
#include "d3d11_video_pixel_start.hlsli"
static const min16float3x3 cscMatrix =
{
1.1644, 1.1644, 1.1644,
0.0, -0.3917, 2.0172,
1.5960, -0.8129, 0.0,
};
static const min16float3 offsets =
{
16.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0
};
#include "d3d11_video_pixel_end.hlsli"
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
#include "d3d11_video_pixel_start.hlsli"
cbuffer CSC_CONST_BUF : register(b0)
{
min16float3x3 cscMatrix;
min16float3 offsets;
};
#include "d3d11_video_pixel_end.hlsli"
Binary file not shown.
+13
View File
@@ -0,0 +1,13 @@
Texture2D<min16float4> theTexture : register(t0);
SamplerState theSampler : register(s0);
struct ShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXCOORD0;
};
min16float4 main(ShaderInput input) : SV_TARGET
{
return theTexture.Sample(theSampler, input.tex);
}
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
struct ShaderInput
{
float2 pos : POSITION;
float2 tex : TEXCOORD0;
};
struct ShaderOutput
{
float4 pos : SV_POSITION;
float2 tex : TEXCOORD0;
};
ShaderOutput main(ShaderInput input)
{
ShaderOutput output;
output.pos = float4(input.pos, 0.0, 1.0);
output.tex = input.tex;
return output;
}
+13
View File
@@ -0,0 +1,13 @@
min16float4 main(ShaderInput input) : SV_TARGET
{
min16float3 yuv = min16float3(luminancePlane.Sample(theSampler, input.tex),
chrominancePlane.Sample(theSampler, input.tex));
// Subtract the YUV offset for limited vs full range
yuv -= offsets;
// Multiply by the conversion matrix for this colorspace
yuv = mul(yuv, cscMatrix);
return min16float4(yuv, 1.0);
}
@@ -0,0 +1,9 @@
Texture2D<min16float> luminancePlane : register(t0);
Texture2D<min16float2> chrominancePlane : register(t1);
SamplerState theSampler : register(s0);
struct ShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXCOORD0;
};
+6
View File
@@ -88,6 +88,12 @@ void* SdlAudioRenderer::getAudioBuffer(int*)
bool SdlAudioRenderer::submitAudio(int bytesWritten)
{
// Our device may enter a permanent error status upon removal, so we need
// to recreate the audio device to pick up the new default audio device.
if (SDL_GetAudioDeviceStatus(m_AudioDevice) == SDL_AUDIO_STOPPED) {
return false;
}
if (bytesWritten == 0) {
// Nothing to do
return true;
+9 -17
View File
@@ -21,6 +21,7 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s
m_MousePositionLock(0),
m_MouseWasInVideoRegion(false),
m_PendingMouseButtonsAllUpOnVideoRegionLeave(false),
m_PointerRegionLockActive(false),
m_FakeCaptureActive(false),
m_CaptureSystemKeysMode(prefs.captureSysKeysMode),
m_MouseCursorCapturedVisibilityState(SDL_DISABLE),
@@ -115,6 +116,11 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s
m_SpecialKeyCombos[KeyComboPasteText].scanCode = SDL_SCANCODE_V;
m_SpecialKeyCombos[KeyComboPasteText].enabled = true;
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].keyCombo = KeyComboTogglePointerRegionLock;
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].keyCode = SDLK_l;
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].scanCode = SDL_SCANCODE_L;
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].enabled = true;
m_OldIgnoreDevices = SDL_GetHint(SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES);
m_OldIgnoreDevicesExcept = SDL_GetHint(SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT);
@@ -389,15 +395,6 @@ bool SdlInputHandler::isSystemKeyCaptureActive()
void SdlInputHandler::setCaptureActive(bool active)
{
if (active) {
// If we're in full-screen exclusive mode, grab the cursor so it can't accidentally leave our window.
if ((SDL_GetWindowFlags(m_Window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN) {
#if SDL_VERSION_ATLEAST(2, 0, 15)
SDL_SetWindowMouseGrab(m_Window, SDL_TRUE);
#else
SDL_SetWindowGrab(m_Window, SDL_TRUE);
#endif
}
// If we're in relative mode, try to activate SDL's relative mouse mode
if (m_AbsoluteMouseMode || SDL_SetRelativeMouseMode(SDL_TRUE) < 0) {
// Relative mouse mode didn't work or was disabled, so we'll just hide the cursor
@@ -433,16 +430,11 @@ void SdlInputHandler::setCaptureActive(bool active)
else {
SDL_SetRelativeMouseMode(SDL_FALSE);
}
#if SDL_VERSION_ATLEAST(2, 0, 15)
// Allow the cursor to leave the bounds of our window again.
SDL_SetWindowMouseGrab(m_Window, SDL_FALSE);
#else
// Allow the cursor to leave the bounds of our window again.
SDL_SetWindowGrab(m_Window, SDL_FALSE);
#endif
}
// Update mouse pointer region constraints
updatePointerRegionLock();
// Now update the keyboard grab
updateKeyboardGrabState();
}
+4
View File
@@ -93,6 +93,8 @@ public:
void updateKeyboardGrabState();
void updatePointerRegionLock();
static
QString getUnmappedGamepads();
@@ -106,6 +108,7 @@ private:
KeyComboToggleCursorHide,
KeyComboToggleMinimize,
KeyComboPasteText,
KeyComboTogglePointerRegionLock,
KeyComboMax
};
@@ -156,6 +159,7 @@ private:
SDL_atomic_t m_MousePositionUpdated;
bool m_MouseWasInVideoRegion;
bool m_PendingMouseButtonsAllUpOnVideoRegionLeave;
bool m_PointerRegionLockActive;
int m_GamepadMask;
GamepadState m_GamepadState[MAX_GAMEPADS];
+7
View File
@@ -126,6 +126,13 @@ void SdlInputHandler::performSpecialKeyCombo(KeyCombo combo)
break;
}
case KeyComboTogglePointerRegionLock:
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Detected pointer region lock toggle combo");
m_PointerRegionLockActive = !m_PointerRegionLockActive;
updatePointerRegionLock();
break;
default:
Q_UNREACHABLE();
}
+45
View File
@@ -272,3 +272,48 @@ Uint32 SdlInputHandler::mouseMoveTimerCallback(Uint32 interval, void *param)
return interval;
}
void SdlInputHandler::updatePointerRegionLock()
{
// Pointer region lock is irrelevant in relative mouse mode
if (SDL_GetRelativeMouseMode()) {
return;
}
// If we're in full-screen exclusive mode or region lock is enabled, grab the cursor so it can't accidentally leave our window.
if (isCaptureActive() &&
(m_PointerRegionLockActive ||
(SDL_GetWindowFlags(m_Window) & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN)) {
#if SDL_VERSION_ATLEAST(2, 0, 18)
SDL_Rect src, dst;
src.x = src.y = 0;
src.w = m_StreamWidth;
src.h = m_StreamHeight;
dst.x = dst.y = 0;
SDL_GetWindowSize(m_Window, &dst.w, &dst.h);
// Use the stream and window sizes to determine the video region
StreamUtils::scaleSourceToDestinationSurface(&src, &dst);
// SDL 2.0.18 lets us lock the cursor to a specific region
SDL_SetWindowMouseRect(m_Window, &dst);
#elif SDL_VERSION_ATLEAST(2, 0, 15)
// SDL 2.0.15 only lets us lock the cursor to the whole window
SDL_SetWindowMouseGrab(m_Window, SDL_TRUE);
#else
SDL_SetWindowGrab(m_Window, SDL_TRUE);
#endif
}
else {
// Allow the cursor to leave the bounds of our video region or window
#if SDL_VERSION_ATLEAST(2, 0, 18)
SDL_SetWindowMouseRect(m_Window, nullptr);
#elif SDL_VERSION_ATLEAST(2, 0, 15)
SDL_SetWindowMouseGrab(m_Window, SDL_FALSE);
#else
SDL_SetWindowGrab(m_Window, SDL_FALSE);
#endif
}
}
+132 -81
View File
@@ -23,6 +23,7 @@
#endif
#define SDL_CODE_FLUSH_WINDOW_EVENT_BARRIER 100
#define SDL_CODE_GAMECONTROLLER_RUMBLE 101
#include <openssl/rand.h>
@@ -45,7 +46,8 @@ CONNECTION_LISTENER_CALLBACKS Session::k_ConnCallbacks = {
Session::clConnectionTerminated,
Session::clLogMessage,
Session::clRumble,
Session::clConnectionStatusUpdate
Session::clConnectionStatusUpdate,
Session::clSetHdrMode,
};
Session* Session::s_ActiveSession;
@@ -133,13 +135,15 @@ void Session::clLogMessage(const char* format, ...)
void Session::clRumble(unsigned short controllerNumber, unsigned short lowFreqMotor, unsigned short highFreqMotor)
{
// The input handler can be closed during the stream if LiStopConnection() hasn't completed yet
// but the stream has been stopped by the user. In this case, just discard the rumble.
SDL_AtomicLock(&s_ActiveSession->m_InputHandlerLock);
if (s_ActiveSession->m_InputHandler != nullptr) {
s_ActiveSession->m_InputHandler->rumble(controllerNumber, lowFreqMotor, highFreqMotor);
}
SDL_AtomicUnlock(&s_ActiveSession->m_InputHandlerLock);
// We push an event for the main thread to handle in order to properly synchronize
// with the removal of game controllers that could result in our game controller
// going away during this callback.
SDL_Event rumbleEvent = {};
rumbleEvent.type = SDL_USEREVENT;
rumbleEvent.user.code = SDL_CODE_GAMECONTROLLER_RUMBLE;
rumbleEvent.user.data1 = (void*)(uintptr_t)controllerNumber;
rumbleEvent.user.data2 = (void*)(uintptr_t)((lowFreqMotor << 16) | highFreqMotor);
SDL_PushEvent(&rumbleEvent);
}
void Session::clConnectionStatusUpdate(int connectionStatus)
@@ -175,6 +179,20 @@ void Session::clConnectionStatusUpdate(int connectionStatus)
}
}
void Session::clSetHdrMode(bool enabled)
{
// If we're in the process of recreating our decoder when we get
// this callback, we'll drop it. The main thread will make the
// callback when it finishes creating the new decoder.
if (SDL_AtomicTryLock(&s_ActiveSession->m_DecoderLock)) {
IVideoDecoder* decoder = s_ActiveSession->m_VideoDecoder;
if (decoder != nullptr) {
decoder->setHdrMode(enabled);
}
SDL_AtomicUnlock(&s_ActiveSession->m_DecoderLock);
}
}
bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds,
SDL_Window* window, int videoFormat, int width, int height,
int frameRate, bool enableVsync, bool enableFramePacing, bool testOnly, IVideoDecoder*& chosenDecoder)
@@ -195,6 +213,10 @@ bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds,
params.enableFramePacing = enableFramePacing;
params.vds = vds;
memset(&params.hdrMetadata, 0, sizeof(params.hdrMetadata));
params.hdrMetadata.eotf = 2; // SMPTE ST 2084
params.hdrMetadata.staticMetadataDescriptorId = 0; // Static Metadata Type 1
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"V-sync %s",
enableVsync ? "enabled" : "disabled");
@@ -289,39 +311,55 @@ int Session::drSubmitDecodeUnit(PDECODE_UNIT du)
}
void Session::getDecoderInfo(SDL_Window* window,
bool& isHardwareAccelerated, bool& isFullScreenOnly, QSize& maxResolution)
bool& isHardwareAccelerated, bool& isFullScreenOnly,
bool& isHdrSupported, QSize& maxResolution)
{
IVideoDecoder* decoder;
if (!chooseDecoder(StreamingPreferences::VDS_AUTO,
window, VIDEO_FORMAT_H264, 1920, 1080, 60,
false, false, true, decoder)) {
isHardwareAccelerated = isFullScreenOnly = false;
// Try an HEVC Main10 decoder first to see if we have HDR support
if (chooseDecoder(StreamingPreferences::VDS_FORCE_HARDWARE,
window, VIDEO_FORMAT_H265_MAIN10, 1920, 1080, 60,
false, false, true, decoder)) {
isHardwareAccelerated = decoder->isHardwareAccelerated();
isFullScreenOnly = decoder->isAlwaysFullScreen();
isHdrSupported = decoder->isHdrSupported();
maxResolution = decoder->getDecoderMaxResolution();
delete decoder;
return;
}
isHardwareAccelerated = decoder->isHardwareAccelerated();
isFullScreenOnly = decoder->isAlwaysFullScreen();
maxResolution = decoder->getDecoderMaxResolution();
// HDR can only be supported by a hardware codec that can handle HEVC Main10.
// If we made it this far, we don't have one, so HDR will not be available.
isHdrSupported = false;
delete decoder;
// Try a regular hardware accelerated HEVC decoder now
if (chooseDecoder(StreamingPreferences::VDS_FORCE_HARDWARE,
window, VIDEO_FORMAT_H265, 1920, 1080, 60,
false, false, true, decoder)) {
isHardwareAccelerated = decoder->isHardwareAccelerated();
isFullScreenOnly = decoder->isAlwaysFullScreen();
maxResolution = decoder->getDecoderMaxResolution();
delete decoder;
// If we don't get back a hardware H.264 decoder, see if we have a hardware
// HEVC decoder. This can be the case on the Raspberry Pi with Full KMS
// when not running in X11. Everything since Maxwell in 2014 can encode HEVC,
// so we probably don't need to be concerned about a lack of fast H.264
// decoding enough to bug the user about it every launch.
if (!isHardwareAccelerated) {
if (chooseDecoder(StreamingPreferences::VDS_FORCE_HARDWARE,
window, VIDEO_FORMAT_H265, 1920, 1080, 60,
false, false, true, decoder)) {
isHardwareAccelerated = decoder->isHardwareAccelerated();
isFullScreenOnly = decoder->isAlwaysFullScreen();
maxResolution = decoder->getDecoderMaxResolution();
delete decoder;
}
return;
}
// If we still didn't find a hardware decoder, try H.264 now.
// This will fall back to software decoding, so it should always work.
if (chooseDecoder(StreamingPreferences::VDS_AUTO,
window, VIDEO_FORMAT_H264, 1920, 1080, 60,
false, false, true, decoder)) {
isHardwareAccelerated = decoder->isHardwareAccelerated();
isFullScreenOnly = decoder->isAlwaysFullScreen();
maxResolution = decoder->getDecoderMaxResolution();
delete decoder;
return;
}
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Failed to find ANY working H.264 or HEVC decoder!");
}
bool Session::isHardwareDecodeAvailable(SDL_Window* window,
@@ -365,7 +403,30 @@ bool Session::populateDecoderProperties(SDL_Window* window)
m_VideoCallbacks.submitDecodeUnit = drSubmitDecodeUnit;
}
m_StreamConfig.colorSpace = decoder->getDecoderColorspace();
{
bool ok;
m_StreamConfig.colorSpace = qEnvironmentVariableIntValue("COLOR_SPACE_OVERRIDE", &ok);
if (ok) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Using colorspace override: %d",
m_StreamConfig.colorSpace);
}
else {
m_StreamConfig.colorSpace = decoder->getDecoderColorspace();
}
m_StreamConfig.colorRange = qEnvironmentVariableIntValue("COLOR_RANGE_OVERRIDE", &ok);
if (ok) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Using color range override: %d",
m_StreamConfig.colorRange);
}
else {
// Limited is the default for GFE
m_StreamConfig.colorRange = COLOR_RANGE_LIMITED;
}
}
if (decoder->isAlwaysFullScreen()) {
m_IsFullScreen = true;
@@ -391,7 +452,6 @@ Session::Session(NvComputer* computer, NvApp& app, StreamingPreferences *prefere
m_PendingWindowedTransition(false),
m_UnexpectedTermination(true), // Failure prior to streaming is unexpected
m_InputHandler(nullptr),
m_InputHandlerLock(0),
m_MouseEmulationRefCount(0),
m_FlushingWindowEventsRef(0),
m_AsyncConnectionSuccess(false),
@@ -404,16 +464,6 @@ Session::Session(NvComputer* computer, NvApp& app, StreamingPreferences *prefere
SDL_AtomicSet(&m_NeedsIdr, 0);
}
// NB: This may not get destroyed for a long time! Don't put any vital cleanup here.
// Use Session::exec() or DeferredSessionCleanupTask instead.
Session::~Session()
{
// Acquire session semaphore to ensure all cleanup is done before the destructor returns
// and the object is deallocated.
s_ActiveSessionSemaphore.acquire();
s_ActiveSessionSemaphore.release();
}
bool Session::initialize()
{
if (SDL_InitSubSystem(SDL_INIT_VIDEO) != 0) {
@@ -607,8 +657,6 @@ void Session::emitLaunchWarning(QString text)
bool Session::validateLaunch(SDL_Window* testWindow)
{
QStringList warningList;
if (!m_Computer->isSupportedServerVersion) {
emit displayLaunchError(tr("The version of GeForce Experience on %1 is not supported by this build of Moonlight. You must update Moonlight to stream from %1.").arg(m_Computer->name));
return false;
@@ -695,12 +743,8 @@ bool Session::validateLaunch(SDL_Window* testWindow)
// Turn HDR back off unless all criteria are met.
m_StreamConfig.enableHdr = false;
// Check that the app supports HDR
if (!m_App.hdrSupported) {
emitLaunchWarning(tr("%1 doesn't support HDR10.").arg(m_App.name));
}
// Check that the server GPU supports HDR
else if (!(m_Computer->serverCodecModeSupport & 0x200)) {
if (!(m_Computer->serverCodecModeSupport & 0x200)) {
emitLaunchWarning(tr("Your host PC GPU doesn't support HDR streaming. "
"A GeForce GTX 1000-series (Pascal) or later GPU is required for HDR streaming."));
}
@@ -802,6 +846,9 @@ private:
// Allow another session to start now that we're cleaned up
Session::s_ActiveSession = nullptr;
Session::s_ActiveSessionSemaphore.release();
// Notify that the session is ready to be cleaned up
emit m_Session->readyForDeletion();
}
void run() override
@@ -1262,6 +1309,7 @@ void Session::execInternal()
// called on the main thread.
if (!initialize()) {
emit sessionFinished(0);
emit readyForDeletion();
return;
}
@@ -1317,6 +1365,11 @@ void Session::execInternal()
SDL_Delay(500);
#endif
// Request at least 8 bits per color for GL
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
m_Window = SDL_CreateWindow("Moonlight",
x,
y,
@@ -1395,7 +1448,6 @@ void Session::execInternal()
bool needsFirstEnterCapture = false;
bool needsPostDecoderCreationCapture = false;
bool ignoreDuplicateResizes = false;
// HACK: For Wayland, we wait until we get the first SDL_WINDOWEVENT_ENTER
// event where it seems to work consistently on GNOME. For other platforms,
@@ -1404,13 +1456,6 @@ void Session::execInternal()
if (strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0) {
// Native Wayland: Capture on SDL_WINDOWEVENT_ENTER
needsFirstEnterCapture = true;
// As of SDL 2.0.20, we get duplicate SDL_WINDOWEVENT_SIZE_CHANGED events
// when focus is lost and gained under GNOME Wayland. This causes us to
// recreate our renderer needlessly. This is fixed in SDL 2.0.21.
#if !SDL_VERSION_ATLEAST(2, 0, 21)
ignoreDuplicateResizes = true;
#endif
}
else {
// X11/XWayland: Capture after decoder creation
@@ -1423,8 +1468,10 @@ void Session::execInternal()
// on macOS.
SDL_StopTextInput();
// Disable the screen saver
SDL_DisableScreenSaver();
// Disable the screen saver if requested
if (m_Preferences->keepAwake) {
SDL_DisableScreenSaver();
}
// Hide Qt's fake mouse cursor on EGLFS systems
if (QGuiApplication::platformName() == "eglfs") {
@@ -1448,7 +1495,6 @@ void Session::execInternal()
// Hijack this thread to be the SDL main thread. We have to do this
// because we want to suspend all Qt processing until the stream is over.
SDL_Event event;
Sint32 lastResizeW = -1, lastResizeH = -1;
for (;;) {
#if SDL_VERSION_ATLEAST(2, 0, 18) && !defined(STEAM_LINK)
// SDL 2.0.18 has a proper wait event implementation that uses platform
@@ -1504,6 +1550,11 @@ void Session::execInternal()
case SDL_CODE_FLUSH_WINDOW_EVENT_BARRIER:
m_FlushingWindowEventsRef--;
break;
case SDL_CODE_GAMECONTROLLER_RUMBLE:
m_InputHandler->rumble((unsigned short)(uintptr_t)event.user.data1,
(unsigned short)((uintptr_t)event.user.data2 >> 16),
(unsigned short)((uintptr_t)event.user.data2 & 0xFFFF));
break;
default:
SDL_assert(false);
}
@@ -1547,6 +1598,15 @@ void Session::execInternal()
break;
}
}
#ifdef Q_OS_WIN32
// We can get a resize event after being minimized. Recreating the renderer at that time can cause
// us to start drawing on the screen even while our window is minimized. Minimizing on Windows also
// moves the window to -32000, -32000 which can cause a false window display index change. Avoid
// that whole mess by never recreating the decoder if we're minimized.
else if (SDL_GetWindowFlags(m_Window) & SDL_WINDOW_MINIMIZED) {
break;
}
#endif
// Complete any repositioning that was deferred until
// the resize from full-screen to windowed had completed.
@@ -1572,19 +1632,6 @@ void Session::execInternal()
break;
}
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
if (ignoreDuplicateResizes && lastResizeW == event.window.data1 && lastResizeH == event.window.data2) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Dropping duplicate size changed event: %d %d",
event.window.data1,
event.window.data2);
break;
}
lastResizeW = event.window.data1;
lastResizeH = event.window.data2;
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Recreating renderer for window event: %d (%d %d)",
event.window.event,
@@ -1657,6 +1704,13 @@ void Session::execInternal()
// Request an IDR frame to complete the reset
SDL_AtomicSet(&m_NeedsIdr, 1);
// Set HDR mode. We may miss the callback if we're in the middle
// of recreating our decoder at the time the HDR transition happens.
m_VideoDecoder->setHdrMode(LiGetCurrentHostDisplayHdrMode());
// After a window resize, we need to reset the pointer lock region
m_InputHandler->updatePointerRegionLock();
SDL_AtomicUnlock(&m_DecoderLock);
break;
@@ -1712,14 +1766,11 @@ DispatchDeferredCleanup:
// Raise any keys that are still down
m_InputHandler->raiseAllKeys();
// Destroy the input handler now. Any rumble callbacks that
// occur after this point will be discarded. This must be destroyed
// before allow the UI to continue execution or it could interfere
// with SDLGamepadKeyNavigation.
SDL_AtomicLock(&m_InputHandlerLock);
// Destroy the input handler now. This must be destroyed
// before allowwing the UI to continue execution or it could
// interfere with SDLGamepadKeyNavigation.
delete m_InputHandler;
m_InputHandler = nullptr;
SDL_AtomicUnlock(&m_InputHandlerLock);
// Destroy the decoder, since this must be done on the main thread
// NB: This must happen before LiStopConnection() for pull-based
+11 -3
View File
@@ -22,13 +22,16 @@ class Session : public QObject
public:
explicit Session(NvComputer* computer, NvApp& app, StreamingPreferences *preferences = nullptr);
virtual ~Session();
// NB: This may not get destroyed for a long time! Don't put any cleanup here.
// Use Session::exec() or DeferredSessionCleanupTask instead.
virtual ~Session() {};
Q_INVOKABLE void exec(int displayOriginX, int displayOriginY);
static
void getDecoderInfo(SDL_Window* window,
bool& isHardwareAccelerated, bool& isFullScreenOnly, QSize& maxResolution);
bool& isHardwareAccelerated, bool& isFullScreenOnly,
bool& isHdrSupported, QSize& maxResolution);
static Session* get()
{
@@ -59,6 +62,9 @@ signals:
void sessionFinished(int portTestResult);
// Emitted after sessionFinished() when the session is ready to be destroyed
void readyForDeletion();
private:
void execInternal();
@@ -117,6 +123,9 @@ private:
static
void clConnectionStatusUpdate(int connectionStatus);
static
void clSetHdrMode(bool enabled);
static
int arInit(int audioConfiguration,
const POPUS_MULTISTREAM_CONFIGURATION opusConfig,
@@ -157,7 +166,6 @@ private:
bool m_PendingWindowedTransition;
bool m_UnexpectedTermination;
SdlInputHandler* m_InputHandler;
SDL_SpinLock m_InputHandlerLock;
int m_MouseEmulationRefCount;
int m_FlushingWindowEventsRef;
+16
View File
@@ -32,6 +32,22 @@ void StreamUtils::scaleSourceToDestinationSurface(SDL_Rect* src, SDL_Rect* dst)
}
}
void StreamUtils::screenSpaceToNormalizedDeviceCoords(SDL_FRect* rect, int viewportWidth, int viewportHeight)
{
rect->x = (rect->x / (viewportWidth / 2.0f)) - 1.0f;
rect->y = (rect->y / (viewportHeight / 2.0f)) - 1.0f;
rect->w = rect->w / (viewportWidth / 2.0f);
rect->h = rect->h / (viewportHeight / 2.0f);
}
void StreamUtils::screenSpaceToNormalizedDeviceCoords(SDL_Rect* src, SDL_FRect* dst, int viewportWidth, int viewportHeight)
{
dst->x = ((float)src->x / (viewportWidth / 2.0f)) - 1.0f;
dst->y = ((float)src->y / (viewportHeight / 2.0f)) - 1.0f;
dst->w = (float)src->w / (viewportWidth / 2.0f);
dst->h = (float)src->h / (viewportHeight / 2.0f);
}
int StreamUtils::getDisplayRefreshRate(SDL_Window* window)
{
int displayIndex = SDL_GetWindowDisplayIndex(window);
+17
View File
@@ -2,6 +2,17 @@
#include <SDL.h>
// SDL_FRect wasn't added until 2.0.10
#if !SDL_VERSION_ATLEAST(2, 0, 10)
typedef struct SDL_FRect
{
float x;
float y;
float w;
float h;
} SDL_FRect;
#endif
class StreamUtils
{
public:
@@ -11,6 +22,12 @@ public:
static
void scaleSourceToDestinationSurface(SDL_Rect* src, SDL_Rect* dst);
static
void screenSpaceToNormalizedDeviceCoords(SDL_FRect* rect, int viewportWidth, int viewportHeight);
static
void screenSpaceToNormalizedDeviceCoords(SDL_Rect* src, SDL_FRect* dst, int viewportWidth, int viewportHeight);
static
bool getRealDesktopMode(int displayIndex, SDL_DisplayMode* mode);
+20
View File
@@ -28,6 +28,23 @@ typedef struct _VIDEO_STATS {
uint32_t measurementStartTimestamp;
} VIDEO_STATS, *PVIDEO_STATS;
typedef struct _HDR_MASTERING_METADATA {
uint8_t eotf;
uint8_t staticMetadataDescriptorId;
struct {
uint16_t x;
uint16_t y;
} displayPrimaries[3];
struct {
uint16_t x;
uint16_t y;
} whitePoint;
uint16_t maxDisplayMasteringLuminance;
uint16_t minDisplayMasteringLuminance;
uint16_t maxContentLightLevel;
uint16_t maxFrameAverageLightLevel;
} HDR_MASTERING_METADATA, *PHDR_MASTERING_METADATA;
typedef struct _DECODER_PARAMETERS {
SDL_Window* window;
StreamingPreferences::VideoDecoderSelection vds;
@@ -38,6 +55,7 @@ typedef struct _DECODER_PARAMETERS {
int frameRate;
bool enableVsync;
bool enableFramePacing;
HDR_MASTERING_METADATA hdrMetadata;
} DECODER_PARAMETERS, *PDECODER_PARAMETERS;
class IVideoDecoder {
@@ -46,9 +64,11 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) = 0;
virtual bool isHardwareAccelerated() = 0;
virtual bool isAlwaysFullScreen() = 0;
virtual bool isHdrSupported() = 0;
virtual int getDecoderCapabilities() = 0;
virtual int getDecoderColorspace() = 0;
virtual QSize getDecoderMaxResolution() = 0;
virtual int submitDecodeUnit(PDECODE_UNIT du) = 0;
virtual void renderFrameOnMainThread() = 0;
virtual void setHdrMode(bool enabled) = 0;
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,73 @@
#pragma once
#include "renderer.h"
#include "pacer/pacer.h"
#include <d3d11_1.h>
#include <dxgi1_5.h>
extern "C" {
#include <libavutil/hwcontext_d3d11va.h>
}
class D3D11VARenderer : public IFFmpegRenderer
{
public:
D3D11VARenderer();
virtual ~D3D11VARenderer() override;
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary**) override;
virtual bool prepareDecoderContextInGetFormat(AVCodecContext* context, AVPixelFormat pixelFormat) override;
virtual void renderFrame(AVFrame* frame) override;
virtual void waitToRender() override;
virtual void notifyOverlayUpdated(Overlay::OverlayType) override;
virtual void setHdrMode(bool enabled) override;
virtual int getRendererAttributes() override;
private:
static void lockContext(void* lock_ctx);
static void unlockContext(void* lock_ctx);
bool setupRenderingResources();
bool setupTexturePoolViews(AVD3D11VAFramesContext* frameContext);
void renderOverlay(Overlay::OverlayType type);
void bindColorConversion(AVFrame* frame);
void renderVideo(AVFrame* frame);
bool checkDecoderSupport(IDXGIAdapter* adapter);
IDXGIFactory5* m_Factory;
ID3D11Device* m_Device;
IDXGISwapChain4* m_SwapChain;
ID3D11DeviceContext* m_DeviceContext;
ID3D11RenderTargetView* m_RenderTargetView;
SDL_mutex* m_ContextLock;
DECODER_PARAMETERS m_DecoderParams;
int m_TextureAlignment;
int m_DisplayWidth;
int m_DisplayHeight;
bool m_Windowed;
AVColorSpace m_LastColorSpace;
AVColorRange m_LastColorRange;
bool m_AllowTearing;
HANDLE m_FrameWaitableObject;
ID3D11PixelShader* m_VideoGenericPixelShader;
ID3D11PixelShader* m_VideoBt601LimPixelShader;
ID3D11PixelShader* m_VideoBt2020LimPixelShader;
ID3D11Buffer* m_VideoVertexBuffer;
#define DECODER_BUFFER_POOL_SIZE 17
ID3D11ShaderResourceView* m_VideoTextureResourceViews[DECODER_BUFFER_POOL_SIZE][2];
SDL_SpinLock m_OverlayLock;
ID3D11Buffer* m_OverlayVertexBuffers[Overlay::OverlayMax];
ID3D11Texture2D* m_OverlayTextures[Overlay::OverlayMax];
ID3D11ShaderResourceView* m_OverlayTextureResourceViews[Overlay::OverlayMax];
ID3D11PixelShader* m_OverlayPixelShader;
AVBufferRef* m_HwDeviceContext;
AVBufferRef* m_HwFramesContext;
};
+379 -49
View File
@@ -6,6 +6,21 @@ extern "C" {
#include <libdrm/drm_fourcc.h>
// Special Rockchip type
#ifndef DRM_FORMAT_NV12_10
#define DRM_FORMAT_NV12_10 fourcc_code('N', 'A', '1', '2')
#endif
// Special Raspberry Pi type (upstreamed)
#ifndef DRM_FORMAT_P030
#define DRM_FORMAT_P030 fourcc_code('P', '0', '3', '0')
#endif
// Regular P010 (not present in some old libdrm headers)
#ifndef DRM_FORMAT_P010
#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0')
#endif
#include <unistd.h>
#include <fcntl.h>
@@ -16,14 +31,24 @@ extern "C" {
#include <SDL_syswm.h>
DrmRenderer::DrmRenderer()
: m_HwContext(nullptr),
DrmRenderer::DrmRenderer(IFFmpegRenderer *backendRenderer)
: m_BackendRenderer(backendRenderer),
m_HwContext(nullptr),
m_DrmFd(-1),
m_SdlOwnsDrmFd(false),
m_SupportsDirectRendering(false),
m_Main10Hdr(false),
m_ConnectorId(0),
m_EncoderId(0),
m_CrtcId(0),
m_PlaneId(0),
m_CurrentFbId(0)
m_CurrentFbId(0),
m_LastColorRange(AVCOL_RANGE_UNSPECIFIED),
m_LastColorSpace(AVCOL_SPC_UNSPECIFIED),
m_ColorEncodingProp(nullptr),
m_ColorRangeProp(nullptr),
m_HdrOutputMetadataProp(nullptr),
m_HdrOutputMetadataBlobId(0)
{
#ifdef HAVE_EGL
m_EGLExtDmaBuf = false;
@@ -36,10 +61,29 @@ DrmRenderer::DrmRenderer()
DrmRenderer::~DrmRenderer()
{
// Ensure we're out of HDR mode
setHdrMode(false);
if (m_CurrentFbId != 0) {
drmModeRmFB(m_DrmFd, m_CurrentFbId);
}
if (m_HdrOutputMetadataBlobId != 0) {
drmModeDestroyPropertyBlob(m_DrmFd, m_HdrOutputMetadataBlobId);
}
if (m_ColorEncodingProp != nullptr) {
drmModeFreeProperty(m_ColorEncodingProp);
}
if (m_ColorRangeProp != nullptr) {
drmModeFreeProperty(m_ColorRangeProp);
}
if (m_HdrOutputMetadataProp != nullptr) {
drmModeFreeProperty(m_HdrOutputMetadataProp);
}
if (m_HwContext != nullptr) {
av_buffer_unref(&m_HwContext);
}
@@ -67,6 +111,8 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
{
int i;
m_Main10Hdr = (params->videoFormat == VIDEO_FORMAT_H265_MAIN10);
#if SDL_VERSION_ATLEAST(2, 0, 15)
SDL_SysWMinfo info;
@@ -146,7 +192,10 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
// stuff, since we have EGLRenderer and SDLRenderer that we can use
// for indirect rendering. Our FFmpeg renderer selection code will
// handle the case where those also fail to render the test frame.
const bool DIRECT_RENDERING_INIT_FAILED = true;
// If we are just acting as a frontend renderer (m_BackendRenderer
// == nullptr), we want to fail if we can't render directly since
// that's the whole point it's trying to use us for.
const bool DIRECT_RENDERING_INIT_FAILED = (m_BackendRenderer == nullptr);
// If we're not sharing the DRM FD with SDL, that means we don't
// have DRM master, so we can't call drmModeSetPlane(). We can
@@ -166,19 +215,21 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
}
// Look for a connected connector and get the associated encoder
uint32_t encoderId = 0;
for (i = 0; i < resources->count_connectors && encoderId == 0; i++) {
m_ConnectorId = 0;
m_EncoderId = 0;
for (i = 0; i < resources->count_connectors && m_EncoderId == 0; i++) {
drmModeConnector* connector = drmModeGetConnector(m_DrmFd, resources->connectors[i]);
if (connector != nullptr) {
if (connector->connection == DRM_MODE_CONNECTED && connector->count_modes > 0) {
encoderId = connector->encoder_id;
m_ConnectorId = resources->connectors[i];
m_EncoderId = connector->encoder_id;
}
drmModeFreeConnector(connector);
}
}
if (encoderId == 0) {
if (m_EncoderId == 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"No connected displays found!");
drmModeFreeResources(resources);
@@ -190,7 +241,7 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
for (i = 0; i < resources->count_encoders && m_CrtcId == 0; i++) {
drmModeEncoder* encoder = drmModeGetEncoder(m_DrmFd, resources->encoders[i]);
if (encoder != nullptr) {
if (encoder->encoder_id == encoderId) {
if (encoder->encoder_id == m_EncoderId) {
m_CrtcId = encoder->crtc_id;
}
@@ -236,16 +287,32 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
return DIRECT_RENDERING_INIT_FAILED;
}
// Find an NV12 overlay plane to render on
// Find an overlay plane with the required format to render on
//
// FIXME: We should check the actual DRM format in a real AVFrame rather
// than just assuming it will be a certain hardcoded type like NV12 based
// on the chosen video format.
m_PlaneId = 0;
for (uint32_t i = 0; i < planeRes->count_planes && m_PlaneId == 0; i++) {
drmModePlane* plane = drmModeGetPlane(m_DrmFd, planeRes->planes[i]);
if (plane != nullptr) {
bool matchingFormat = false;
for (uint32_t j = 0; j < plane->count_formats; j++) {
if (plane->formats[j] == DRM_FORMAT_NV12) {
matchingFormat = true;
break;
for (uint32_t j = 0; j < plane->count_formats && !matchingFormat; j++) {
if (m_Main10Hdr) {
switch (plane->formats[j]) {
case DRM_FORMAT_P010:
case DRM_FORMAT_P030:
case DRM_FORMAT_NV12_10:
matchingFormat = true;
break;
}
}
else {
switch (plane->formats[j]) {
case DRM_FORMAT_NV12:
matchingFormat = true;
break;
}
}
}
@@ -257,14 +324,22 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
if ((plane->possible_crtcs & (1 << crtcIndex)) && plane->crtc_id == 0) {
drmModeObjectPropertiesPtr props = drmModeObjectGetProperties(m_DrmFd, planeRes->planes[i], DRM_MODE_OBJECT_PLANE);
if (props != nullptr) {
for (uint32_t j = 0; j < props->count_props && m_PlaneId == 0; j++) {
for (uint32_t j = 0; j < props->count_props; j++) {
drmModePropertyPtr prop = drmModeGetProperty(m_DrmFd, props->props[j]);
if (prop != nullptr) {
if (!strcmp(prop->name, "type") && props->prop_values[j] == DRM_PLANE_TYPE_OVERLAY) {
m_PlaneId = plane->plane_id;
}
drmModeFreeProperty(prop);
if (!strcmp(prop->name, "COLOR_ENCODING")) {
m_ColorEncodingProp = prop;
}
else if (!strcmp(prop->name, "COLOR_RANGE")) {
m_ColorRangeProp = prop;
}
else {
drmModeFreeProperty(prop);
}
}
}
@@ -280,38 +355,142 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
if (m_PlaneId == 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Failed to find suitable NV12 overlay plane!");
"Failed to find suitable overlay plane!");
return DIRECT_RENDERING_INIT_FAILED;
}
drmModeObjectPropertiesPtr props = drmModeObjectGetProperties(m_DrmFd, m_ConnectorId, DRM_MODE_OBJECT_CONNECTOR);
if (props != nullptr) {
for (uint32_t j = 0; j < props->count_props; j++) {
drmModePropertyPtr prop = drmModeGetProperty(m_DrmFd, props->props[j]);
if (prop != nullptr) {
if (!strcmp(prop->name, "HDR_OUTPUT_METADATA")) {
m_HdrOutputMetadataProp = prop;
}
else {
drmModeFreeProperty(prop);
}
}
}
drmModeFreeObjectProperties(props);
}
// If we have an HDR output metadata property, construct the metadata blob
// to apply when we are called to enter HDR mode.
if (m_HdrOutputMetadataProp != nullptr) {
DrmDefs::hdr_output_metadata outputMetadata;
outputMetadata.metadata_type = 0; // HDMI_STATIC_METADATA_TYPE1
outputMetadata.hdmi_metadata_type1.eotf = params->hdrMetadata.eotf;
outputMetadata.hdmi_metadata_type1.metadata_type = params->hdrMetadata.staticMetadataDescriptorId;
for (int i = 0; i < 3; i++) {
outputMetadata.hdmi_metadata_type1.display_primaries[i].x = params->hdrMetadata.displayPrimaries[i].x;
outputMetadata.hdmi_metadata_type1.display_primaries[i].y = params->hdrMetadata.displayPrimaries[i].y;
}
outputMetadata.hdmi_metadata_type1.white_point.x = params->hdrMetadata.whitePoint.x;
outputMetadata.hdmi_metadata_type1.white_point.y = params->hdrMetadata.whitePoint.y;
outputMetadata.hdmi_metadata_type1.max_display_mastering_luminance = params->hdrMetadata.maxDisplayMasteringLuminance;
outputMetadata.hdmi_metadata_type1.min_display_mastering_luminance = params->hdrMetadata.minDisplayMasteringLuminance;
outputMetadata.hdmi_metadata_type1.max_cll = params->hdrMetadata.maxContentLightLevel;
outputMetadata.hdmi_metadata_type1.max_fall = params->hdrMetadata.maxFrameAverageLightLevel;
err = drmModeCreatePropertyBlob(m_DrmFd, &outputMetadata, sizeof(outputMetadata), &m_HdrOutputMetadataBlobId);
if (err < 0) {
m_HdrOutputMetadataBlobId = 0;
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmModeCreatePropertyBlob() failed: %d",
errno);
// Non-fatal
}
}
// If we got this far, we can do direct rendering via the DRM FD.
m_SupportsDirectRendering = true;
return true;
}
enum AVPixelFormat DrmRenderer::getPreferredPixelFormat(int)
enum AVPixelFormat DrmRenderer::getPreferredPixelFormat(int videoFormat)
{
// DRM PRIME buffers
return AV_PIX_FMT_DRM_PRIME;
// DRM PRIME buffers, or whatever the backend renderer wants
if (m_BackendRenderer != nullptr) {
return m_BackendRenderer->getPreferredPixelFormat(videoFormat);
}
else {
return AV_PIX_FMT_DRM_PRIME;
}
}
bool DrmRenderer::isPixelFormatSupported(int videoFormat, AVPixelFormat pixelFormat) {
// Pass through the backend renderer if we have one. Otherwise we use
// the default behavior which only supports the preferred format.
if (m_BackendRenderer != nullptr) {
return m_BackendRenderer->isPixelFormatSupported(videoFormat, pixelFormat);
}
else {
return getPreferredPixelFormat(videoFormat);
}
}
int DrmRenderer::getRendererAttributes()
{
int attributes = 0;
// This renderer can only draw in full-screen
return RENDERER_ATTRIBUTE_FULLSCREEN_ONLY;
attributes |= RENDERER_ATTRIBUTE_FULLSCREEN_ONLY;
// This renderer supports HDR
attributes |= RENDERER_ATTRIBUTE_HDR_SUPPORT;
return attributes;
}
void DrmRenderer::setHdrMode(bool enabled)
{
if (m_HdrOutputMetadataProp != nullptr && m_HdrOutputMetadataBlobId != 0) {
int err = drmModeObjectSetProperty(m_DrmFd, m_ConnectorId, DRM_MODE_OBJECT_CONNECTOR,
m_HdrOutputMetadataProp->prop_id,
enabled ? m_HdrOutputMetadataBlobId : 0);
if (err == 0) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Set display HDR mode: %s", enabled ? "enabled" : "disabled");
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmModeObjectSetProperty(%s) failed: %d",
m_HdrOutputMetadataProp->name,
errno);
// Non-fatal
}
}
else if (enabled) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"HDR_OUTPUT_METADATA is unavailable on this display. Unable to enter HDR mode!");
}
}
void DrmRenderer::renderFrame(AVFrame* frame)
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
AVDRMFrameDescriptor mappedFrame;
AVDRMFrameDescriptor* drmFrame;
// If we are acting as the frontend renderer, we'll need to have the backend
// map this frame into a DRM PRIME descriptor that we can render.
if (m_BackendRenderer != nullptr) {
if (!m_BackendRenderer->mapDrmPrimeFrame(frame, &mappedFrame)) {
return;
}
drmFrame = &mappedFrame;
}
else {
// If we're the backend renderer, the frame should already have it.
SDL_assert(frame->format == AV_PIX_FMT_DRM_PRIME);
drmFrame = (AVDRMFrameDescriptor*)frame->data[0];
}
AVDRMFrameDescriptor* drmFrame = (AVDRMFrameDescriptor*)frame->data[0];
int err;
uint32_t primeHandle;
uint32_t handles[4] = {};
uint32_t pitches[4] = {};
uint32_t offsets[4] = {};
@@ -327,29 +506,33 @@ void DrmRenderer::renderFrame(AVFrame* frame)
StreamUtils::scaleSourceToDestinationSurface(&src, &dst);
// Convert the FD in the AVDRMFrameDescriptor to a PRIME handle
// that can be used in drmModeAddFB2()
SDL_assert(drmFrame->nb_objects == 1);
err = drmPrimeFDToHandle(m_DrmFd, drmFrame->objects[0].fd, &primeHandle);
if (err < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmPrimeFDToHandle() failed: %d",
errno);
return;
}
// Pass along the modifiers to DRM if there are some in the descriptor
if (drmFrame->objects[0].format_modifier != DRM_FORMAT_MOD_INVALID) {
flags |= DRM_MODE_FB_MODIFIERS;
}
// DRM requires composed layers rather than separate layers per plane
SDL_assert(drmFrame->nb_layers == 1);
SDL_assert(drmFrame->layers[0].nb_planes == 2);
for (int i = 0; i < drmFrame->layers[0].nb_planes; i++) {
handles[i] = primeHandle;
pitches[i] = drmFrame->layers[0].planes[i].pitch;
offsets[i] = drmFrame->layers[0].planes[i].offset;
modifiers[i] = drmFrame->objects[0].format_modifier;
const auto &layer = drmFrame->layers[0];
for (int i = 0; i < layer.nb_planes; i++) {
const auto &object = drmFrame->objects[layer.planes[i].object_index];
err = drmPrimeFDToHandle(m_DrmFd, object.fd, &handles[i]);
if (err < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmPrimeFDToHandle() failed: %d",
errno);
if (m_BackendRenderer != nullptr) {
SDL_assert(drmFrame == &mappedFrame);
m_BackendRenderer->unmapDrmPrimeFrame(drmFrame);
}
return;
}
pitches[i] = layer.planes[i].pitch;
offsets[i] = layer.planes[i].offset;
modifiers[i] = object.format_modifier;
// Pass along the modifiers to DRM if there are some in the descriptor
if (modifiers[i] != DRM_FORMAT_MOD_INVALID) {
flags |= DRM_MODE_FB_MODIFIERS;
}
}
// Remember the last FB object we created so we can free it
@@ -363,6 +546,12 @@ void DrmRenderer::renderFrame(AVFrame* frame)
handles, pitches, offsets,
(flags & DRM_MODE_FB_MODIFIERS) ? modifiers : NULL,
&m_CurrentFbId, flags);
if (m_BackendRenderer != nullptr) {
SDL_assert(drmFrame == &mappedFrame);
m_BackendRenderer->unmapDrmPrimeFrame(drmFrame);
}
if (err < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmModeAddFB2WithModifiers() failed: %d",
@@ -371,6 +560,90 @@ void DrmRenderer::renderFrame(AVFrame* frame)
return;
}
if (frame->color_range != m_LastColorRange) {
const char* desiredValue = getDrmColorRangeValue(frame);
if (m_ColorRangeProp != nullptr && desiredValue != nullptr) {
int i;
for (i = 0; i < m_ColorRangeProp->count_enums; i++) {
if (!strcmp(desiredValue, m_ColorRangeProp->enums[i].name)) {
err = drmModeObjectSetProperty(m_DrmFd, m_PlaneId, DRM_MODE_OBJECT_PLANE,
m_ColorRangeProp->prop_id, m_ColorRangeProp->enums[i].value);
if (err == 0) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"%s: %s",
m_ColorRangeProp->name,
desiredValue);
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmModeObjectSetProperty(%s) failed: %d",
m_ColorRangeProp->name,
errno);
// Non-fatal
}
break;
}
}
if (i == m_ColorRangeProp->count_enums) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Unable to find matching COLOR_RANGE value for '%s'. Colors may be inaccurate!",
desiredValue);
}
}
else if (desiredValue != nullptr) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"COLOR_RANGE property does not exist on output plane. Colors may be inaccurate!");
}
m_LastColorRange = frame->color_range;
}
if (frame->colorspace != m_LastColorSpace) {
const char* desiredValue = getDrmColorEncodingValue(frame);
if (m_ColorEncodingProp != nullptr && desiredValue != nullptr) {
int i;
for (i = 0; i < m_ColorEncodingProp->count_enums; i++) {
if (!strcmp(desiredValue, m_ColorEncodingProp->enums[i].name)) {
err = drmModeObjectSetProperty(m_DrmFd, m_PlaneId, DRM_MODE_OBJECT_PLANE,
m_ColorEncodingProp->prop_id, m_ColorEncodingProp->enums[i].value);
if (err == 0) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"%s: %s",
m_ColorEncodingProp->name,
desiredValue);
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"drmModeObjectSetProperty(%s) failed: %d",
m_ColorEncodingProp->name,
errno);
// Non-fatal
}
break;
}
}
if (i == m_ColorEncodingProp->count_enums) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Unable to find matching COLOR_ENCODING value for '%s'. Colors may be inaccurate!",
desiredValue);
}
}
else if (desiredValue != nullptr) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"COLOR_ENCODING property does not exist on output plane. Colors may be inaccurate!");
}
m_LastColorSpace = frame->colorspace;
}
// Update the overlay
err = drmModeSetPlane(m_DrmFd, m_PlaneId, m_CrtcId, m_CurrentFbId, 0,
dst.x, dst.y,
@@ -396,11 +669,58 @@ bool DrmRenderer::needsTestFrame()
return true;
}
bool DrmRenderer::testRenderFrame(AVFrame* frame) {
// If we have a backend renderer, we must make sure it can
// successfully export DRM PRIME frames.
if (m_BackendRenderer != nullptr) {
AVDRMFrameDescriptor drmDescriptor;
// We shouldn't get here unless the backend at least claims
// it can export DRM PRIME frames.
SDL_assert(m_BackendRenderer->canExportDrmPrime());
if (!m_BackendRenderer->mapDrmPrimeFrame(frame, &drmDescriptor)) {
// It can't, so we can't use this renderer.
return false;
}
m_BackendRenderer->unmapDrmPrimeFrame(&drmDescriptor);
}
return true;
}
bool DrmRenderer::isDirectRenderingSupported()
{
return m_SupportsDirectRendering;
}
const char* DrmRenderer::getDrmColorEncodingValue(AVFrame* frame)
{
switch (frame->colorspace) {
case AVCOL_SPC_SMPTE170M:
return "ITU-R BT.601 YCbCr";
case AVCOL_SPC_BT709:
return "ITU-R BT.709 YCbCr";
case AVCOL_SPC_BT2020_NCL:
return "ITU-R BT.2020 YCbCr";
default:
return NULL;
}
}
const char* DrmRenderer::getDrmColorRangeValue(AVFrame* frame)
{
switch (frame->color_range) {
case AVCOL_RANGE_MPEG:
return "YCbCr limited range";
case AVCOL_RANGE_JPEG:
return "YCbCr full range";
default:
return NULL;
}
}
#ifdef HAVE_EGL
bool DrmRenderer::canExportEGL() {
@@ -409,6 +729,16 @@ bool DrmRenderer::canExportEGL() {
"Using direct rendering due to environment variable");
return false;
}
else if (qgetenv("DRM_FORCE_EGL") == "1") {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using EGL rendering due to environment variable");
return true;
}
else if (m_SupportsDirectRendering && m_Main10Hdr) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using direct rendering for HDR support");
return false;
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"DRM backend supports exporting EGLImage");
@@ -452,7 +782,7 @@ ssize_t DrmRenderer::exportEGLImages(AVFrame *frame, EGLDisplay dpy,
memset(images, 0, sizeof(EGLImage) * EGL_MAX_PLANES);
SDL_assert(drmFrame->nb_objects == 1);
// DRM requires composed layers rather than separate layers per plane
SDL_assert(drmFrame->nb_layers == 1);
// Max 30 attributes (1 key + 1 value for each)
+53 -1
View File
@@ -5,17 +5,56 @@
#include <xf86drm.h>
#include <xf86drmMode.h>
// Newer libdrm headers have these HDR structs, but some older ones don't.
namespace DrmDefs
{
// HDR structs is copied from linux include/linux/hdmi.h
struct hdr_metadata_infoframe
{
uint8_t eotf;
uint8_t metadata_type;
struct
{
uint16_t x, y;
} display_primaries[3];
struct
{
uint16_t x, y;
} white_point;
uint16_t max_display_mastering_luminance;
uint16_t min_display_mastering_luminance;
uint16_t max_cll;
uint16_t max_fall;
};
struct hdr_output_metadata
{
uint32_t metadata_type;
union {
struct hdr_metadata_infoframe hdmi_metadata_type1;
};
};
}
class DrmRenderer : public IFFmpegRenderer {
public:
DrmRenderer();
DrmRenderer(IFFmpegRenderer *backendRenderer = nullptr);
virtual ~DrmRenderer() override;
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override;
virtual void renderFrame(AVFrame* frame) override;
virtual enum AVPixelFormat getPreferredPixelFormat(int videoFormat) override;
virtual bool isPixelFormatSupported(int videoFormat, AVPixelFormat pixelFormat) override;
virtual int getRendererAttributes() override;
virtual bool needsTestFrame() override;
virtual bool testRenderFrame(AVFrame* frame) override;
virtual bool isDirectRenderingSupported() override;
virtual void setHdrMode(bool enabled) override;
#ifdef HAVE_EGL
virtual bool canExportEGL() override;
virtual AVPixelFormat getEGLImagePixelFormat() override;
@@ -25,13 +64,26 @@ public:
#endif
private:
const char* getDrmColorEncodingValue(AVFrame* frame);
const char* getDrmColorRangeValue(AVFrame* frame);
IFFmpegRenderer* m_BackendRenderer;
AVBufferRef* m_HwContext;
int m_DrmFd;
bool m_SdlOwnsDrmFd;
bool m_SupportsDirectRendering;
bool m_Main10Hdr;
uint32_t m_ConnectorId;
uint32_t m_EncoderId;
uint32_t m_CrtcId;
uint32_t m_PlaneId;
uint32_t m_CurrentFbId;
AVColorRange m_LastColorRange;
AVColorSpace m_LastColorSpace;
drmModePropertyPtr m_ColorEncodingProp;
drmModePropertyPtr m_ColorRangeProp;
drmModePropertyPtr m_HdrOutputMetadataProp;
uint32_t m_HdrOutputMetadataBlobId;
SDL_Rect m_OutputRect;
#ifdef HAVE_EGL
@@ -0,0 +1,60 @@
#pragma once
#include <Limelight.h>
class DXUtil
{
public:
static bool isFormatHybridDecodedByHardware(int videoFormat, unsigned int vendorId, unsigned int deviceId) {
if (vendorId == 0x8086) {
// Intel seems to encode the series in the high byte of
// the device ID. We want to avoid the "Partial" acceleration
// support explicitly. Those will claim to have HW acceleration
// but perform badly.
// https://en.wikipedia.org/wiki/Intel_Graphics_Technology#Capabilities_(GPU_video_acceleration)
// https://raw.githubusercontent.com/GameTechDev/gpudetect/master/IntelGfx.cfg
switch (deviceId & 0xFF00) {
case 0x0400: // Haswell
case 0x0A00: // Haswell
case 0x0D00: // Haswell
case 0x1600: // Broadwell
case 0x2200: // Cherry Trail and Braswell
// Block these for HEVC to avoid hybrid decode
return (videoFormat & VIDEO_FORMAT_MASK_H265) != 0;
case 0x1900: // Skylake
// Blacklist these for HEVC Main10 to avoid hybrid decode.
// Regular HEVC Main is fine though.
if (videoFormat == VIDEO_FORMAT_H265_MAIN10) {
return true;
}
default:
break;
}
}
else if (vendorId == 0x10DE) {
// For NVIDIA, we wait to avoid those GPUs with Feature Set E
// for HEVC decoding, since that's hybrid. It appears that Kepler GPUs
// also had some hybrid decode support (per DXVA2 Checker) so we'll
// blacklist those too.
// https://en.wikipedia.org/wiki/Nvidia_PureVideo
// https://bluesky23.yukishigure.com/en/dxvac/deviceInfo/decoder.html
// http://envytools.readthedocs.io/en/latest/hw/pciid.html (missing GM200)
if ((deviceId >= 0x1180 && deviceId <= 0x11BF) || // GK104
(deviceId >= 0x11C0 && deviceId <= 0x11FF) || // GK106
(deviceId >= 0x0FC0 && deviceId <= 0x0FFF) || // GK107
(deviceId >= 0x1000 && deviceId <= 0x103F) || // GK110/GK110B
(deviceId >= 0x1280 && deviceId <= 0x12BF) || // GK208
(deviceId >= 0x1340 && deviceId <= 0x137F) || // GM108
(deviceId >= 0x1380 && deviceId <= 0x13BF) || // GM107
(deviceId >= 0x13C0 && deviceId <= 0x13FF) || // GM204
(deviceId >= 0x1617 && deviceId <= 0x161A) || // GM204
(deviceId == 0x1667) || // GM204
(deviceId >= 0x17C0 && deviceId <= 0x17FF)) { // GM200
// Avoid HEVC on Feature Set E GPUs
return (videoFormat & VIDEO_FORMAT_MASK_H265) != 0;
}
}
return false;
}
};
+87 -109
View File
@@ -4,6 +4,7 @@
#include <initguid.h>
#include "dxva2.h"
#include "dxutil.h"
#include "../ffmpeg.h"
#include <streaming/streamutils.h>
#include <streaming/session.h>
@@ -38,7 +39,8 @@ DXVA2Renderer::DXVA2Renderer() :
m_ProcService(nullptr),
m_Processor(nullptr),
m_FrameIndex(0),
m_BlockingPresent(false)
m_BlockingPresent(false),
m_DeviceQuirks(0)
{
RtlZeroMemory(m_DecSurfaces, sizeof(m_DecSurfaces));
RtlZeroMemory(&m_DXVAContext, sizeof(m_DXVAContext));
@@ -83,7 +85,7 @@ void DXVA2Renderer::ffPoolDummyDelete(void*, uint8_t*)
/* Do nothing */
}
AVBufferRef* DXVA2Renderer::ffPoolAlloc(void* opaque, int)
AVBufferRef* DXVA2Renderer::ffPoolAlloc(void* opaque, FF_POOL_SIZE_TYPE)
{
DXVA2Renderer* me = reinterpret_cast<DXVA2Renderer*>(opaque);
@@ -285,7 +287,7 @@ bool DXVA2Renderer::initializeRenderer()
m_DisplayWidth = renderTargetDesc.Width;
m_DisplayHeight = renderTargetDesc.Height;
if (!isDXVideoProcessorAPIBlacklisted()) {
if (!(m_DeviceQuirks & DXVA2_QUIRK_NO_VP)) {
hr = DXVA2CreateVideoService(m_Device, IID_IDirectXVideoProcessorService,
reinterpret_cast<void**>(&m_ProcService));
@@ -366,16 +368,23 @@ bool DXVA2Renderer::initializeRenderer()
return true;
}
bool DXVA2Renderer::isDXVideoProcessorAPIBlacklisted()
bool DXVA2Renderer::initializeDeviceQuirks()
{
IDirect3D9* d3d9;
HRESULT hr;
bool result = false;
if (qgetenv("DXVA2_DISABLE_VIDPROC_BLACKLIST") == "1") {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"IDirectXVideoProcessor blacklist is disabled");
return false;
SDL_assert(m_DeviceQuirks == 0);
{
bool ok;
m_DeviceQuirks = qEnvironmentVariableIntValue("DXVA2_QUIRK_FLAGS", &ok);
if (ok) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Using DXVA2 quirk override: 0x%x",
m_DeviceQuirks);
return true;
}
}
hr = m_Device->GetDirect3D(&d3d9);
@@ -396,7 +405,7 @@ bool DXVA2Renderer::isDXVideoProcessorAPIBlacklisted()
// effects that the GPU driver forces on us. In many cases, this makes the video
// actually look worse. We can avoid these by using StretchRect() instead on these
// platforms.
result = true;
m_DeviceQuirks |= DXVA2_QUIRK_NO_VP;
}
else if (id.VendorId == 0x4d4f4351) { // QCOM in ASCII
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
@@ -404,15 +413,30 @@ bool DXVA2Renderer::isDXVideoProcessorAPIBlacklisted()
// On Qualcomm GPUs (all D3D9on12 GPUs?), the scaling quality of VideoProcessBlt()
// is absolutely horrible. StretchRect() is much much better.
result = true;
m_DeviceQuirks |= DXVA2_QUIRK_NO_VP;
}
else {
result = false;
else if (id.VendorId == 0x1002 &&
(id.DriverVersion.HighPart > 0x1E0000 ||
(id.DriverVersion.HighPart == 0x1E0000 && HIWORD(id.DriverVersion.LowPart) >= 14000))) { // AMD 21.12.1 or later
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using DestFormat quirk for recent AMD GPU driver");
// AMD's GPU driver doesn't correctly handle color range conversion.
//
// This used to just work because we used Rec 709 Limited which happened to be what AMD's
// driver defaulted to. However, AMD's driver behavior changed to default to Rec 709 Full
// in the 21.12.1 driver, so we must adapt to that.
//
// 30.0.13037.1003 - 21.11.3 - Limited
// 30.0.14011.3017 - 21.12.1 - Full
//
// To sort out this mess, we will use a quirk to tell us to populate DestFormat for AMD.
// For other GPUs, we'll avoid populating it as was our previous behavior.
m_DeviceQuirks |= DXVA2_QUIRK_SET_DEST_FORMAT;
}
}
else {
result = false;
}
return true;
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
@@ -426,7 +450,7 @@ bool DXVA2Renderer::isDXVideoProcessorAPIBlacklisted()
"GetDirect3D() failed: %x", hr);
}
return result;
return false;
}
bool DXVA2Renderer::isDecoderBlacklisted()
@@ -464,90 +488,25 @@ bool DXVA2Renderer::isDecoderBlacklisted()
HIWORD(id.DriverVersion.LowPart),
LOWORD(id.DriverVersion.LowPart));
if (id.VendorId == 0x8086) {
// Intel seems to encode the series in the high byte of
// the device ID. We want to avoid the "Partial" acceleration
// support explicitly. Those will claim to have HW acceleration
// but perform badly.
// https://en.wikipedia.org/wiki/Intel_Graphics_Technology#Capabilities_(GPU_video_acceleration)
// https://raw.githubusercontent.com/GameTechDev/gpudetect/master/IntelGfx.cfg
switch (id.DeviceId & 0xFF00) {
case 0x0400: // Haswell
case 0x0A00: // Haswell
case 0x0D00: // Haswell
case 0x1600: // Broadwell
case 0x2200: // Cherry Trail and Braswell
// Blacklist these for HEVC to avoid hybrid decode
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"GPU blacklisted for HEVC due to hybrid decode");
result = (m_VideoFormat & VIDEO_FORMAT_MASK_H265) != 0;
break;
case 0x1900: // Skylake
// Blacklist these for HEVC Main10 to avoid hybrid decode.
// Regular HEVC Main is fine though.
if (m_VideoFormat == VIDEO_FORMAT_H265_MAIN10) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"GPU blacklisted for HEVC Main10 due to hybrid decode");
result = false;
break;
}
default:
// Intel drivers from before late-2017 had a bug that caused some strange artifacts
// when decoding HEVC. Avoid HEVC on drivers prior to build 4836 which I confirmed
// is not affected on my Intel HD 515. Also account for the driver version rollover
// that happened with the 101.1069 series.
// https://github.com/moonlight-stream/moonlight-qt/issues/32
// https://www.intel.com/content/www/us/en/support/articles/000005654/graphics-drivers.html
if (HIWORD(id.DriverVersion.LowPart) < 100 && LOWORD(id.DriverVersion.LowPart) < 4836) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Detected buggy Intel GPU driver installed. Update your Intel GPU driver to enable HEVC!");
result = (m_VideoFormat & VIDEO_FORMAT_MASK_H265) != 0;
}
else {
// Everything else is fine with whatever it says it supports
result = false;
}
break;
}
if (DXUtil::isFormatHybridDecodedByHardware(m_VideoFormat, id.VendorId, id.DeviceId)) {
result = true;
}
else if (id.VendorId == 0x10DE) {
// For NVIDIA, we wait to avoid those GPUs with Feature Set E
// for HEVC decoding, since that's hybrid. It appears that Kepler GPUs
// also had some hybrid decode support (per DXVA2 Checker) so we'll
// blacklist those too.
// https://en.wikipedia.org/wiki/Nvidia_PureVideo
// https://bluesky23.yukishigure.com/en/dxvac/deviceInfo/decoder.html
// http://envytools.readthedocs.io/en/latest/hw/pciid.html (missing GM200)
if ((id.DeviceId >= 0x1180 && id.DeviceId <= 0x11BF) || // GK104
(id.DeviceId >= 0x11C0 && id.DeviceId <= 0x11FF) || // GK106
(id.DeviceId >= 0x0FC0 && id.DeviceId <= 0x0FFF) || // GK107
(id.DeviceId >= 0x1000 && id.DeviceId <= 0x103F) || // GK110/GK110B
(id.DeviceId >= 0x1280 && id.DeviceId <= 0x12BF) || // GK208
(id.DeviceId >= 0x1340 && id.DeviceId <= 0x137F) || // GM108
(id.DeviceId >= 0x1380 && id.DeviceId <= 0x13BF) || // GM107
(id.DeviceId >= 0x13C0 && id.DeviceId <= 0x13FF) || // GM204
(id.DeviceId >= 0x1617 && id.DeviceId <= 0x161A) || // GM204
(id.DeviceId == 0x1667) || // GM204
(id.DeviceId >= 0x17C0 && id.DeviceId <= 0x17FF)) { // GM200
// Avoid HEVC on Feature Set E GPUs
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"GPU blacklisted for HEVC due to hybrid decode");
result = (m_VideoFormat & VIDEO_FORMAT_MASK_H265) != 0;
}
else {
result = false;
}
}
else if (id.VendorId == 0x1002) {
// AMD doesn't seem to do hybrid acceleration?
result = false;
}
else {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Unrecognized vendor ID: %x",
id.VendorId);
// Intel drivers from before late-2017 had a bug that caused some strange artifacts
// when decoding HEVC. Avoid HEVC on drivers prior to build 4836 which I confirmed
// is not affected on my Intel HD 515. Also account for the driver version rollover
// that happened with the 101.1069 series.
// https://github.com/moonlight-stream/moonlight-qt/issues/32
// https://www.intel.com/content/www/us/en/support/articles/000005654/graphics-drivers.html
else if (id.VendorId == 0x8086 && HIWORD(id.DriverVersion.LowPart) < 100 && LOWORD(id.DriverVersion.LowPart) < 4836) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Detected buggy Intel GPU driver installed. Update your Intel GPU driver to enable HEVC!");
result = (m_VideoFormat & VIDEO_FORMAT_MASK_H265) != 0;
}
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"GetAdapterIdentifier() failed: %x", hr);
}
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
@@ -563,7 +522,7 @@ bool DXVA2Renderer::isDecoderBlacklisted()
if (result) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"GPU blacklisted for format %x",
"GPU decoding for format %x is blocked due to hardware limitations",
m_VideoFormat);
}
@@ -733,6 +692,17 @@ bool DXVA2Renderer::initializeDevice(SDL_Window* window, bool enableVsync)
bool DXVA2Renderer::initialize(PDECODER_PARAMETERS params)
{
// Don't use DXVA2 for HDR10. While it can render 10-bit color, it doesn't support
// the HDR colorspace and HDR display metadata required to enable HDR mode properly.
if (params->videoFormat == VIDEO_FORMAT_H265_MAIN10) {
return false;
}
else if (qgetenv("DXVA2_ENABLED") == "0") {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"DXVA2 is disabled by environment variable");
return false;
}
m_VideoFormat = params->videoFormat;
m_VideoWidth = params->width;
m_VideoHeight = params->height;
@@ -774,6 +744,10 @@ bool DXVA2Renderer::initialize(PDECODER_PARAMETERS params)
return false;
}
if (!initializeDeviceQuirks()) {
return false;
}
if (!initializeDecoder()) {
return false;
}
@@ -989,25 +963,21 @@ Exit:
int DXVA2Renderer::getDecoderColorspace()
{
if (isDXVideoProcessorAPIBlacklisted()) {
if (m_DeviceQuirks & DXVA2_QUIRK_NO_VP) {
// StretchRect() assumes Rec 601 on Intel and Qualcomm GPUs.
return COLORSPACE_REC_601;
}
else {
// VideoProcessBlt() *should* properly handle whatever, since
// we provide colorspace information. However, AMD GPUs seem to
// always assume Rec 709, so we'll use that as our default.
// VideoProcessBlt() should properly handle whatever, since
// we provide colorspace information. We used to use this because
// we didn't know how to get AMD to respect the requested colorspace,
// but now it's just because it's what we used before.
return COLORSPACE_REC_709;
}
}
void DXVA2Renderer::renderFrame(AVFrame *frame)
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
IDirect3DSurface9* surface = reinterpret_cast<IDirect3DSurface9*>(frame->data[3]);
HRESULT hr;
@@ -1133,7 +1103,12 @@ void DXVA2Renderer::renderFrame(AVFrame *frame)
bltParams.TargetRect = sample.DstRect;
bltParams.BackgroundColor.Alpha = 0xFFFF;
bltParams.DestFormat.SampleFormat = DXVA2_SampleProgressiveFrame;
if (m_DeviceQuirks & DXVA2_QUIRK_SET_DEST_FORMAT) {
bltParams.DestFormat = m_Desc.SampleFormat;
}
else {
bltParams.DestFormat.SampleFormat = DXVA2_SampleProgressiveFrame;
}
bltParams.ProcAmpValues.Brightness = m_BrightnessRange.DefaultValue;
bltParams.ProcAmpValues.Contrast = m_ContrastRange.DefaultValue;
@@ -1176,6 +1151,9 @@ void DXVA2Renderer::renderFrame(AVFrame *frame)
}
if (!m_Processor) {
// StretchRect() assumes Rec 601 on Intel and Qualcomm GPUs.
SDL_assert(m_Desc.SampleFormat.VideoTransferMatrix == DXVA2_VideoTransferMatrix_BT601);
// This function doesn't trigger any of Intel's garbage video "enhancements"
hr = m_Device->StretchRect(surface, &sample.SrcRect, m_RenderTarget, &sample.DstRect, D3DTEXF_NONE);
if (FAILED(hr)) {
+12 -2
View File
@@ -26,11 +26,17 @@ private:
bool initializeRenderer();
bool initializeDevice(SDL_Window* window, bool enableVsync);
bool isDecoderBlacklisted();
bool isDXVideoProcessorAPIBlacklisted();
bool initializeDeviceQuirks();
void renderOverlay(Overlay::OverlayType type);
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 68, 0)
#define FF_POOL_SIZE_TYPE size_t
#else
#define FF_POOL_SIZE_TYPE int
#endif
static
AVBufferRef* ffPoolAlloc(void* opaque, int size);
AVBufferRef* ffPoolAlloc(void* opaque, FF_POOL_SIZE_TYPE size);
static
void ffPoolDummyDelete(void*, uint8_t*);
@@ -68,4 +74,8 @@ private:
DXVA2_VideoDesc m_Desc;
REFERENCE_TIME m_FrameIndex;
bool m_BlockingPresent;
#define DXVA2_QUIRK_NO_VP 0x01
#define DXVA2_QUIRK_SET_DEST_FORMAT 0x02
int m_DeviceQuirks;
};
+170 -44
View File
@@ -15,7 +15,7 @@
#include <SDL_render.h>
#include <SDL_syswm.h>
// These are EGL extensions, so some platform headers may not provide them
// These are extensions, so some platform headers may not provide them
#ifndef EGL_PLATFORM_WAYLAND_KHR
#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
#endif
@@ -25,6 +25,9 @@
#ifndef EGL_PLATFORM_GBM_KHR
#define EGL_PLATFORM_GBM_KHR 0x31D7
#endif
#ifndef GL_UNPACK_ROW_LENGTH_EXT
#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2
#endif
typedef struct _OVERLAY_VERTEX
{
@@ -56,6 +59,7 @@ typedef struct _OVERLAY_VERTEX
"EGLRenderer: " __VA_ARGS__)
SDL_Window* EGLRenderer::s_LastFailedWindow = nullptr;
int EGLRenderer::s_LastFailedVideoFormat = 0;
EGLRenderer::EGLRenderer(IFFmpegRenderer *backendRenderer)
:
@@ -72,11 +76,19 @@ EGLRenderer::EGLRenderer(IFFmpegRenderer *backendRenderer)
m_Backend(backendRenderer),
m_VAO(0),
m_BlockingSwapBuffers(false),
m_LastRenderSync(EGL_NO_SYNC),
m_LastFrame(av_frame_alloc()),
m_glEGLImageTargetTexture2DOES(nullptr),
m_glGenVertexArraysOES(nullptr),
m_glBindVertexArrayOES(nullptr),
m_glDeleteVertexArraysOES(nullptr),
m_eglCreateSync(nullptr),
m_eglCreateSyncKHR(nullptr),
m_eglDestroySync(nullptr),
m_eglClientWaitSync(nullptr),
m_GlesMajorVersion(0),
m_GlesMinorVersion(0),
m_HasExtUnpackSubimage(false),
m_DummyRenderer(nullptr)
{
SDL_assert(backendRenderer);
@@ -93,6 +105,10 @@ EGLRenderer::~EGLRenderer()
if (m_Context) {
// Reattach the GL context to the main thread for destruction
SDL_GL_MakeCurrent(m_Window, m_Context);
if (m_LastRenderSync != EGL_NO_SYNC) {
SDL_assert(m_eglDestroySync != nullptr);
m_eglDestroySync(m_EGLDisplay, m_LastRenderSync);
}
if (m_ShaderProgram) {
glDeleteProgram(m_ShaderProgram);
}
@@ -179,15 +195,35 @@ void EGLRenderer::renderOverlay(Overlay::OverlayType type)
SDL_assert(!SDL_MUSTLOCK(newSurface));
glBindTexture(GL_TEXTURE_2D, m_OverlayTextures[type]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, newSurface->w, newSurface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, newSurface->pixels);
// SDL_FRect wasn't added until 2.0.10
struct {
float x;
float y;
float w;
float h;
} overlayRect = {};
void* packedPixelData = nullptr;
if (m_GlesMajorVersion >= 3 || m_HasExtUnpackSubimage) {
// If we are GLES 3.0+ or have GL_EXT_unpack_subimage, GL can handle any pitch
SDL_assert(newSurface->pitch % newSurface->format->BytesPerPixel == 0);
glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, newSurface->pitch / newSurface->format->BytesPerPixel);
}
else if (newSurface->pitch != newSurface->w * newSurface->format->BytesPerPixel) {
// If we can't use GL_UNPACK_ROW_LENGTH and the surface isn't tightly packed,
// we must allocate a tightly packed buffer and copy our pixels there.
packedPixelData = malloc(newSurface->w * newSurface->h * newSurface->format->BytesPerPixel);
if (!packedPixelData) {
SDL_FreeSurface(newSurface);
return;
}
SDL_ConvertPixels(newSurface->w, newSurface->h,
newSurface->format->format, newSurface->pixels, newSurface->pitch,
newSurface->format->format, packedPixelData, newSurface->w * newSurface->format->BytesPerPixel);
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, newSurface->w, newSurface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE,
packedPixelData ? packedPixelData : newSurface->pixels);
if (packedPixelData) {
free(packedPixelData);
}
SDL_FRect overlayRect;
// These overlay positions differ from the other renderers because OpenGL
// places the origin in the lower-left corner instead of the upper-left.
@@ -210,12 +246,7 @@ void EGLRenderer::renderOverlay(Overlay::OverlayType type)
SDL_FreeSurface(newSurface);
// Convert screen space to normalized device coordinates
overlayRect.x /= m_ViewportWidth / 2;
overlayRect.w /= m_ViewportWidth / 2;
overlayRect.y /= m_ViewportHeight / 2;
overlayRect.h /= m_ViewportHeight / 2;
overlayRect.x -= 1.0f;
overlayRect.y -= 1.0f;
StreamUtils::screenSpaceToNormalizedDeviceCoords(&overlayRect, m_ViewportWidth, m_ViewportHeight);
OVERLAY_VERTEX verts[] =
{
@@ -371,7 +402,7 @@ bool EGLRenderer::compileShaders() {
SDL_assert(m_EGLImagePixelFormat != AV_PIX_FMT_NONE);
// XXX: TODO: other formats
if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12) {
if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12 || m_EGLImagePixelFormat == AV_PIX_FMT_P010) {
m_ShaderProgram = compileShader("egl_nv12.vert", "egl_nv12.frag");
if (!m_ShaderProgram) {
return false;
@@ -412,11 +443,6 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
{
m_Window = params->window;
if (params->videoFormat == VIDEO_FORMAT_H265_MAIN10) {
// EGL doesn't support rendering YUV 10-bit textures yet
return false;
}
// It's not safe to attempt to opportunistically create a GLES2
// renderer prior to 2.0.10. If GLES2 isn't available, SDL will
// attempt to dereference a null pointer and crash Moonlight.
@@ -429,16 +455,19 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
// HACK: Work around bug where renderer will repeatedly fail with:
// SDL_CreateRenderer() failed: Could not create GLES window surface
if (m_Window == s_LastFailedWindow) {
// Don't retry if we've already failed to create a renderer for this
// window *unless* the format has changed from 10-bit to 8-bit.
if (m_Window == s_LastFailedWindow &&
(params->videoFormat & VIDEO_FORMAT_H265_MAIN10) ==
(s_LastFailedVideoFormat & VIDEO_FORMAT_H265_MAIN10)) {
EGL_LOG(Error, "SDL_CreateRenderer() already failed on this window!");
return false;
}
/*
* Create a dummy renderer in order to craft an accelerated SDL Window.
* Request opengl ES 3.0 context, otherwise it will SIGSEGV
* https://gitlab.freedesktop.org/mesa/mesa/issues/1011
*/
// This hint will ensure we use EGL to retreive our GL context,
// even on X11 where that is not the default. EGL is required
// to avoid a crash in Mesa.
// https://gitlab.freedesktop.org/mesa/mesa/issues/1011
SDL_SetHint(SDL_HINT_OPENGL_ES_DRIVER, "1");
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
@@ -462,9 +491,34 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
return false;
}
if (!(m_DummyRenderer = SDL_CreateRenderer(m_Window, renderIndex, SDL_RENDERER_ACCELERATED))) {
m_DummyRenderer = SDL_CreateRenderer(m_Window, renderIndex, SDL_RENDERER_ACCELERATED);
if (!m_DummyRenderer) {
// Print the error here (before it gets clobbered), but ensure that we flush window
// events just in case SDL re-created the window before eventually failing.
EGL_LOG(Error, "SDL_CreateRenderer() failed: %s", SDL_GetError());
}
// SDL_CreateRenderer() can end up having to recreate our window (SDL_RecreateWindow())
// to ensure it's compatible with the renderer's OpenGL context. If that happens, we
// can get spurious SDL_WINDOWEVENT events that will cause us to (again) recreate our
// renderer. This can lead to an infinite to renderer recreation, so discard all
// SDL_WINDOWEVENT events after SDL_CreateRenderer().
Session* session = Session::get();
if (session != nullptr) {
// If we get here during a session, we need to synchronize with the event loop
// to ensure we don't drop any important events.
session->flushWindowEvents();
}
else {
// If we get here prior to the start of a session, just pump and flush ourselves.
SDL_PumpEvents();
SDL_FlushEvent(SDL_WINDOWEVENT);
}
// Now we finally bail if we failed during SDL_CreateRenderer() above.
if (!m_DummyRenderer) {
s_LastFailedWindow = m_Window;
s_LastFailedVideoFormat = params->videoFormat;
return false;
}
@@ -515,6 +569,23 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
return false;
}
{
int r, g, b, a;
SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &r);
SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &g);
SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &b);
SDL_GL_GetAttribute(SDL_GL_ALPHA_SIZE, &a);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Color buffer is: R%dG%dB%dA%d",
r, g, b, a);
}
SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &m_GlesMajorVersion);
SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &m_GlesMinorVersion);
// We can use GL_UNPACK_ROW_LENGTH for a more optimized upload of non-tightly-packed textures
m_HasExtUnpackSubimage = SDL_GL_ExtensionSupported("GL_EXT_unpack_subimage");
const EGLExtensions eglExtensions(m_EGLDisplay);
if (!eglExtensions.isSupported("EGL_KHR_image_base") &&
!eglExtensions.isSupported("EGL_KHR_image")) {
@@ -553,6 +624,30 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
return false;
}
// EGL_KHR_fence_sync is an extension for EGL 1.1+
if (eglExtensions.isSupported("EGL_KHR_fence_sync")) {
// eglCreateSyncKHR() has a slightly different prototype to eglCreateSync()
m_eglCreateSyncKHR = (typeof(m_eglCreateSyncKHR))eglGetProcAddress("eglCreateSyncKHR");
m_eglDestroySync = (typeof(m_eglDestroySync))eglGetProcAddress("eglDestroySyncKHR");
m_eglClientWaitSync = (typeof(m_eglClientWaitSync))eglGetProcAddress("eglClientWaitSyncKHR");
}
else {
// EGL 1.5 introduced sync support to the core specification
m_eglCreateSync = (typeof(m_eglCreateSync))eglGetProcAddress("eglCreateSync");
m_eglDestroySync = (typeof(m_eglDestroySync))eglGetProcAddress("eglDestroySync");
m_eglClientWaitSync = (typeof(m_eglClientWaitSync))eglGetProcAddress("eglClientWaitSync");
}
if (!(m_eglCreateSync || m_eglCreateSyncKHR) || !m_eglDestroySync || !m_eglClientWaitSync) {
EGL_LOG(Warn, "Failed to find sync functions");
// Sub-optimal, but not fatal
m_eglCreateSync = nullptr;
m_eglCreateSyncKHR = nullptr;
m_eglDestroySync = nullptr;
m_eglClientWaitSync = nullptr;
}
/* Compute the video region size in order to keep the aspect ratio of the
* video stream.
*/
@@ -752,16 +847,28 @@ bool EGLRenderer::specialize() {
return err == GL_NO_ERROR;
}
void EGLRenderer::cleanupRenderContext()
{
// Detach the context from the render thread so the destructor can attach it
SDL_GL_MakeCurrent(m_Window, nullptr);
}
void EGLRenderer::waitToRender()
{
// Ensure our GL context is active on this thread
// See comment in renderFrame() for more details.
SDL_GL_MakeCurrent(m_Window, m_Context);
if (m_LastRenderSync != 0) {
SDL_assert(m_eglClientWaitSync != nullptr);
m_eglClientWaitSync(m_EGLDisplay, m_LastRenderSync, EGL_SYNC_FLUSH_COMMANDS_BIT, EGL_FOREVER);
}
}
void EGLRenderer::renderFrame(AVFrame* frame)
{
EGLImage imgs[EGL_MAX_PLANES];
if (frame == nullptr) {
// End of stream - unbind the GL context
SDL_GL_MakeCurrent(m_Window, nullptr);
return;
}
// Attach our GL context to the render thread
// NB: It should already be current, unless the SDL render event watcher
// performs a rendering operation (like a viewport update on resize) on
@@ -795,7 +902,7 @@ void EGLRenderer::renderFrame(AVFrame* frame)
m_glBindVertexArrayOES(m_VAO);
// Bind parameters for the shaders
if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12) {
if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12 || m_EGLImagePixelFormat == AV_PIX_FMT_P010) {
glUniformMatrix3fv(m_ShaderProgramParams[NV12_PARAM_YUVMAT], 1, GL_FALSE, getColorMatrix(frame));
glUniform3fv(m_ShaderProgramParams[NV12_PARAM_OFFSET], 1, getColorOffsets(frame));
glUniform1i(m_ShaderProgramParams[NV12_PARAM_PLANE1], 0);
@@ -816,15 +923,34 @@ void EGLRenderer::renderFrame(AVFrame* frame)
SDL_GL_SwapWindow(m_Window);
if (m_BlockingSwapBuffers) {
// This glClear() forces us to block until the buffer swap is
// complete to continue rendering. Mesa won't actually wait
// for the swap with just glFinish() alone. Waiting here keeps us
// in lock step with the display refresh rate. If we don't wait
// here, we'll stall on the first GL call next frame. Doing the
// wait here instead allows more time for a newer frame to arrive
// for next renderFrame() call.
glClear(GL_COLOR_BUFFER_BIT);
glFinish();
// If we this EGL implementation supports fences, use those to delay
// rendering the next frame until this one is completed.
if (m_eglClientWaitSync != nullptr) {
// Delete the sync object from last render
if (m_LastRenderSync != EGL_NO_SYNC) {
m_eglDestroySync(m_EGLDisplay, m_LastRenderSync);
}
// Create a new sync object that will be signalled when the buffer swap is completed
if (m_eglCreateSync != nullptr) {
m_LastRenderSync = m_eglCreateSync(m_EGLDisplay, EGL_SYNC_FENCE, nullptr);
}
else {
SDL_assert(m_eglCreateSyncKHR != nullptr);
m_LastRenderSync = m_eglCreateSyncKHR(m_EGLDisplay, EGL_SYNC_FENCE, nullptr);
}
}
else {
// This glClear() forces us to block until the buffer swap is
// complete to continue rendering. Mesa won't actually wait
// for the swap with just glFinish() alone. Waiting here keeps us
// in lock step with the display refresh rate. If we don't wait
// here, we'll stall on the first GL call next frame. Doing the
// wait here instead allows more time for a newer frame to arrive
// for next renderFrame() call.
glClear(GL_COLOR_BUFFER_BIT);
glFinish();
}
}
m_Backend->freeEGLImages(m_EGLDisplay, imgs);
@@ -11,6 +11,8 @@ public:
virtual ~EGLRenderer() override;
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override;
virtual void cleanupRenderContext() override;
virtual void waitToRender() override;
virtual void renderFrame(AVFrame* frame) override;
virtual bool testRenderFrame(AVFrame* frame) override;
virtual void notifyOverlayUpdated(Overlay::OverlayType) override;
@@ -44,11 +46,19 @@ private:
IFFmpegRenderer *m_Backend;
unsigned int m_VAO;
bool m_BlockingSwapBuffers;
EGLSync m_LastRenderSync;
AVFrame* m_LastFrame;
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_glEGLImageTargetTexture2DOES;
PFNGLGENVERTEXARRAYSOESPROC m_glGenVertexArraysOES;
PFNGLBINDVERTEXARRAYOESPROC m_glBindVertexArrayOES;
PFNGLDELETEVERTEXARRAYSOESPROC m_glDeleteVertexArraysOES;
PFNEGLCREATESYNCPROC m_eglCreateSync;
PFNEGLCREATESYNCKHRPROC m_eglCreateSyncKHR;
PFNEGLDESTROYSYNCPROC m_eglDestroySync;
PFNEGLCLIENTWAITSYNCPROC m_eglClientWaitSync;
int m_GlesMajorVersion;
int m_GlesMinorVersion;
bool m_HasExtUnpackSubimage;
#define NV12_PARAM_YUVMAT 0
#define NV12_PARAM_OFFSET 1
@@ -69,4 +79,5 @@ private:
// HACK: Work around bug where renderer will repeatedly fail with:
// SDL_CreateRenderer() failed: Could not create GLES window surface
static SDL_Window* s_LastFailedWindow;
static int s_LastFailedVideoFormat;
};
@@ -277,7 +277,7 @@ bool MmalRenderer::getDtDeviceStatus(QString name, bool ifUnknown)
QString statusString(statusData);
// Per Device Tree docs, 'okay' and 'ok' are both acceptable
return statusData == "okay" || statusData == "ok";
return statusString == "okay" || statusString == "ok";
}
bool MmalRenderer::isMmalOverlaySupported()
@@ -345,11 +345,6 @@ bool MmalRenderer::needsTestFrame()
void MmalRenderer::renderFrame(AVFrame* frame)
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
MMAL_BUFFER_HEADER_T* buffer = (MMAL_BUFFER_HEADER_T*)frame->data[3];
MMAL_STATUS_T status;
@@ -46,8 +46,9 @@ Pacer::~Pacer()
SDL_WaitThread(m_RenderThread, nullptr);
}
else {
// Send a null AVFrame to indicate end of stream on the main thread
m_VsyncRenderer->renderFrame(nullptr);
// Notify the renderer that it is being destroyed soon
// NB: This must happen on the same thread that calls renderFrame().
m_VsyncRenderer->cleanupRenderContext();
}
// Delete any remaining unconsumed frames
@@ -90,6 +91,9 @@ int Pacer::renderThread(void* context)
}
while (!me->m_Stopping) {
// Wait for the renderer to be ready for the next frame
me->m_VsyncRenderer->waitToRender();
// Acquire the frame queue lock to protect the queue and
// the not empty condition
me->m_FrameQueueLock.lock();
@@ -110,8 +114,9 @@ int Pacer::renderThread(void* context)
me->renderLastFrameAndUnlock();
}
// Send a null AVFrame to indicate end of stream on the render thread
me->m_VsyncRenderer->renderFrame(nullptr);
// Notify the renderer that it is being destroyed soon
// NB: This must happen on the same thread that calls renderFrame().
me->m_VsyncRenderer->cleanupRenderContext();
return 0;
}
@@ -7,6 +7,10 @@
extern "C" {
#include <libavcodec/avcodec.h>
#ifdef HAVE_DRM
#include <libavutil/hwcontext_drm.h>
#endif
}
#ifdef HAVE_EGL
@@ -17,9 +21,19 @@ extern "C" {
#ifndef EGL_VERSION_1_5
typedef intptr_t EGLAttrib;
typedef void *EGLImage;
typedef void *EGLSync;
#define EGL_NO_SYNC ((EGLSync)0)
#define EGL_SYNC_FENCE 0x30F9
#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
#endif
#if !defined(EGL_VERSION_1_5) || !defined(EGL_EGL_PROTOTYPES)
typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync);
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image);
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
@@ -36,6 +50,10 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGL
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
#endif
#if !defined(EGL_KHR_fence_sync) || !defined(EGL_EGLEXT_PROTOTYPES)
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
#endif
#ifndef EGL_EXT_image_dma_buf_import
#define EGL_LINUX_DMA_BUF_EXT 0x3270
#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
@@ -90,6 +108,7 @@ private:
#define RENDERER_ATTRIBUTE_FULLSCREEN_ONLY 0x01
#define RENDERER_ATTRIBUTE_1080P_MAX 0x02
#define RENDERER_ATTRIBUTE_HDR_SUPPORT 0x04
class IFFmpegRenderer : public Overlay::IOverlayRenderer {
public:
@@ -97,6 +116,18 @@ public:
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) = 0;
virtual void renderFrame(AVFrame* frame) = 0;
// Called for threaded renderers to allow them to wait prior to us latching
// the next frame for rendering (as opposed to waiting on buffer swap with
// an older frame already queued for display).
virtual void waitToRender() {
// Don't wait by default
}
// Called on the same thread as renderFrame() during destruction of the renderer
virtual void cleanupRenderContext() {
// Nothing
}
virtual bool testRenderFrame(AVFrame*) {
// If the renderer doesn't provide an explicit test routine,
// we will always assume that any returned AVFrame can be
@@ -150,6 +181,15 @@ public:
return getPreferredPixelFormat(videoFormat) == pixelFormat;
}
virtual void setHdrMode(bool) {
// Nothing
}
virtual bool prepareDecoderContextInGetFormat(AVCodecContext*, AVPixelFormat) {
// Assume no further initialization is required
return true;
}
// IOverlayRenderer
virtual void notifyOverlayUpdated(Overlay::OverlayType) override {
// Nothing
@@ -179,4 +219,17 @@ public:
// Free the ressources allocated during the last `exportEGLImages` call
virtual void freeEGLImages(EGLDisplay, EGLImage[EGL_MAX_PLANES]) {}
#endif
#ifdef HAVE_DRM
// By default we can't do DRM PRIME export
virtual bool canExportDrmPrime() {
return false;
}
virtual bool mapDrmPrimeFrame(AVFrame*, AVDRMFrameDescriptor*) {
return false;
}
virtual void unmapDrmPrimeFrame(AVDRMFrameDescriptor*) {}
#endif
};
@@ -344,11 +344,6 @@ void SdlRenderer::renderFrame(AVFrame* frame)
int err;
AVFrame* swFrame = nullptr;
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
if (frame->hw_frames_ctx != nullptr && frame->format != AV_PIX_FMT_CUDA) {
#ifdef HAVE_CUDA
ReadbackRetry:
+93 -12
View File
@@ -113,6 +113,7 @@ VAAPIRenderer::initialize(PDECODER_PARAMETERS params)
{
int err;
m_VideoFormat = params->videoFormat;
m_VideoWidth = params->width;
m_VideoHeight = params->height;
@@ -313,6 +314,11 @@ VAAPIRenderer::isDirectRenderingSupported()
"Using indirect rendering due to WM or blacklist");
return false;
}
else if (m_VideoFormat == VIDEO_FORMAT_H265_MAIN10) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using indirect rendering for 10-bit video");
return false;
}
AVHWDeviceContext* deviceContext = (AVHWDeviceContext*)m_HwContext->data;
AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)deviceContext->hwctx;
@@ -345,11 +351,6 @@ int VAAPIRenderer::getDecoderColorspace()
void
VAAPIRenderer::renderFrame(AVFrame* frame)
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
VASurfaceID surface = (VASurfaceID)(uintptr_t)frame->data[3];
AVHWDeviceContext* deviceContext = (AVHWDeviceContext*)m_HwContext->data;
AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)deviceContext->hwctx;
@@ -409,11 +410,11 @@ VAAPIRenderer::renderFrame(AVFrame* frame)
}
}
#ifdef HAVE_EGL
#if defined(HAVE_EGL) || defined(HAVE_DRM)
// Ensure that vaExportSurfaceHandle() is supported by the VA-API driver
bool
VAAPIRenderer::canExportEGL() {
VAAPIRenderer::canExportSurfaceHandle(int layerTypeFlag) {
AVHWDeviceContext* deviceContext = (AVHWDeviceContext*)m_HwContext->data;
AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)deviceContext->hwctx;
VASurfaceID surfaceId;
@@ -443,11 +444,13 @@ VAAPIRenderer::canExportEGL() {
attrs[attributeCount].type = VASurfaceAttribPixelFormat;
attrs[attributeCount].flags = VA_SURFACE_ATTRIB_SETTABLE;
attrs[attributeCount].value.type = VAGenericValueTypeInteger;
attrs[attributeCount].value.value.i = VA_FOURCC_NV12;
attrs[attributeCount].value.value.i = (m_VideoFormat == VIDEO_FORMAT_H265_MAIN10) ?
VA_FOURCC_P010 : VA_FOURCC_NV12;
attributeCount++;
st = vaCreateSurfaces(vaDeviceContext->display,
VA_RT_FORMAT_YUV420,
m_VideoFormat == VIDEO_FORMAT_H265_MAIN10 ?
VA_RT_FORMAT_YUV420_10 : VA_RT_FORMAT_YUV420,
1280,
720,
&surfaceId,
@@ -463,7 +466,7 @@ VAAPIRenderer::canExportEGL() {
st = vaExportSurfaceHandle(vaDeviceContext->display,
surfaceId,
VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2,
VA_EXPORT_SURFACE_READ_ONLY | VA_EXPORT_SURFACE_SEPARATE_LAYERS,
VA_EXPORT_SURFACE_READ_ONLY | layerTypeFlag,
&descriptor);
vaDestroySurfaces(vaDeviceContext->display, &surfaceId, 1);
@@ -479,12 +482,24 @@ VAAPIRenderer::canExportEGL() {
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"VAAPI driver supports exporting DRM PRIME surface handles");
"VAAPI driver supports exporting DRM PRIME surface handles with %s layers",
layerTypeFlag == VA_EXPORT_SURFACE_COMPOSED_LAYERS ? "composed" : "separate");
return true;
}
#endif
#ifdef HAVE_EGL
bool
VAAPIRenderer::canExportEGL() {
// Our EGL export logic requires exporting separate layers
return canExportSurfaceHandle(VA_EXPORT_SURFACE_SEPARATE_LAYERS);
}
AVPixelFormat VAAPIRenderer::getEGLImagePixelFormat() {
return AV_PIX_FMT_NV12;
return m_VideoFormat == VIDEO_FORMAT_H265_MAIN10 ?
AV_PIX_FMT_P010 : AV_PIX_FMT_NV12;
}
bool
@@ -682,3 +697,69 @@ VAAPIRenderer::freeEGLImages(EGLDisplay dpy, EGLImage images[EGL_MAX_PLANES]) {
}
#endif
#ifdef HAVE_DRM
bool VAAPIRenderer::canExportDrmPrime()
{
// Our DRM renderer requires composed layers
return canExportSurfaceHandle(VA_EXPORT_SURFACE_COMPOSED_LAYERS);
}
bool VAAPIRenderer::mapDrmPrimeFrame(AVFrame* frame, AVDRMFrameDescriptor* drmDescriptor)
{
auto hwFrameCtx = (AVHWFramesContext*)frame->hw_frames_ctx->data;
AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)hwFrameCtx->device_ctx->hwctx;
VASurfaceID vaSurfaceId = (VASurfaceID)(uintptr_t)frame->data[3];
VADRMPRIMESurfaceDescriptor vaDrmPrimeDescriptor;
VAStatus st = vaExportSurfaceHandle(vaDeviceContext->display,
vaSurfaceId,
VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2,
VA_EXPORT_SURFACE_READ_ONLY | VA_EXPORT_SURFACE_COMPOSED_LAYERS,
&vaDrmPrimeDescriptor);
if (st != VA_STATUS_SUCCESS) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"vaExportSurfaceHandle() failed: %d", st);
return false;
}
st = vaSyncSurface(vaDeviceContext->display, vaSurfaceId);
if (st != VA_STATUS_SUCCESS) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"vaSyncSurface() failed: %d", st);
for (uint32_t i = 0; i < vaDrmPrimeDescriptor.num_objects; i++) {
close(vaDrmPrimeDescriptor.objects[i].fd);
}
return false;
}
// Map our VADRMPRIMESurfaceDescriptor to the AVDRMFrameDescriptor our caller wants
drmDescriptor->nb_objects = vaDrmPrimeDescriptor.num_objects;
for (uint32_t i = 0; i < vaDrmPrimeDescriptor.num_objects; i++) {
drmDescriptor->objects[i].fd = vaDrmPrimeDescriptor.objects[i].fd;
drmDescriptor->objects[i].size = vaDrmPrimeDescriptor.objects[i].size;
drmDescriptor->objects[i].format_modifier = vaDrmPrimeDescriptor.objects[i].drm_format_modifier;
}
drmDescriptor->nb_layers = vaDrmPrimeDescriptor.num_layers;
for (uint32_t i = 0; i < vaDrmPrimeDescriptor.num_layers; i++) {
drmDescriptor->layers[i].format = vaDrmPrimeDescriptor.layers[i].drm_format;
drmDescriptor->layers[i].nb_planes = vaDrmPrimeDescriptor.layers[i].num_planes;
for (uint32_t j = 0; j < vaDrmPrimeDescriptor.layers[i].num_planes; j++) {
drmDescriptor->layers[i].planes[j].object_index = vaDrmPrimeDescriptor.layers[i].object_index[j];
drmDescriptor->layers[i].planes[j].offset = vaDrmPrimeDescriptor.layers[i].offset[j];
drmDescriptor->layers[i].planes[j].pitch = vaDrmPrimeDescriptor.layers[i].pitch[j];
}
}
return true;
}
void VAAPIRenderer::unmapDrmPrimeFrame(AVDRMFrameDescriptor* drmDescriptor)
{
for (int i = 0; i < drmDescriptor->nb_objects; i++) {
close(drmDescriptor->objects[i].fd);
}
}
#endif
+12 -1
View File
@@ -26,7 +26,7 @@ extern "C" {
#include <va/va_drm.h>
#endif
#include <libavutil/hwcontext_vaapi.h>
#ifdef HAVE_EGL
#if defined(HAVE_EGL) || defined(HAVE_DRM)
#include <va/va_drmcommon.h>
#endif
}
@@ -50,9 +50,19 @@ public:
virtual void freeEGLImages(EGLDisplay dpy, EGLImage[EGL_MAX_PLANES]) override;
#endif
#ifdef HAVE_DRM
virtual bool canExportDrmPrime() override;
virtual bool mapDrmPrimeFrame(AVFrame* frame, AVDRMFrameDescriptor* drmDescriptor) override;
virtual void unmapDrmPrimeFrame(AVDRMFrameDescriptor* drmDescriptor) override;
#endif
private:
VADisplay openDisplay(SDL_Window* window);
#if defined(HAVE_EGL) || defined(HAVE_DRM)
bool canExportSurfaceHandle(int layerTypeFlag);
#endif
int m_WindowSystem;
AVBufferRef* m_HwContext;
bool m_BlacklistedForDirectRendering;
@@ -63,6 +73,7 @@ private:
int m_VideoWidth;
int m_VideoHeight;
int m_VideoFormat;
int m_DisplayWidth;
int m_DisplayHeight;
+12 -6
View File
@@ -474,13 +474,17 @@ void VDPAURenderer::renderOverlay(VdpOutputSurface destination, Overlay::Overlay
}
}
void VDPAURenderer::waitToRender()
{
VdpOutputSurface chosenSurface = m_OutputSurface[m_NextSurfaceIndex];
// Wait for the next render target surface to be idle before proceeding
VdpTime pts;
m_VdpPresentationQueueBlockUntilSurfaceIdle(m_PresentationQueue, chosenSurface, &pts);
}
void VDPAURenderer::renderFrame(AVFrame* frame)
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
VdpStatus status;
VdpVideoSurface videoSurface = (VdpVideoSurface)(uintptr_t)frame->data[3];
@@ -529,7 +533,9 @@ void VDPAURenderer::renderFrame(AVFrame* frame)
}
}
// Wait for this frame to be off the screen
// Wait for this frame to be off the screen. This will usually be a no-op
// since it already happened in waitToRender(). However, that won't be the
// case is when frame pacing is enabled.
VdpTime pts;
m_VdpPresentationQueueBlockUntilSurfaceIdle(m_PresentationQueue, chosenSurface, &pts);
@@ -16,6 +16,7 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override;
virtual void notifyOverlayUpdated(Overlay::OverlayType type) override;
virtual void waitToRender() override;
virtual void renderFrame(AVFrame* frame) override;
virtual bool needsTestFrame() override;
virtual int getDecoderColorspace() override;
+67 -148
View File
@@ -10,6 +10,8 @@
#include <streaming/session.h>
#include <mach/mach_time.h>
#include <mach/machine.h>
#include <sys/sysctl.h>
#import <Cocoa/Cocoa.h>
#import <VideoToolbox/VideoToolbox.h>
#import <AVFoundation/AVFoundation.h>
@@ -156,14 +158,22 @@ public:
return true;
}
virtual void waitToRender() override
{
if (m_DisplayLink != nullptr) {
// Vsync is enabled, so wait for a swap before returning
SDL_LockMutex(m_VsyncMutex);
if (SDL_CondWaitTimeout(m_VsyncPassed, m_VsyncMutex, 100) == SDL_MUTEX_TIMEDOUT) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"V-sync wait timed out after 100 ms");
}
SDL_UnlockMutex(m_VsyncMutex);
}
}
// Caller frees frame after we return
virtual void renderFrame(AVFrame* frame) override
{
if (frame == nullptr) {
// End of stream - nothing to do for us
return;
}
OSStatus status;
CVPixelBufferRef pixBuf = reinterpret_cast<CVPixelBufferRef>(frame->data[3]);
@@ -178,101 +188,15 @@ public:
return;
}
// Strip the attachments added by VT. They are likely wrong.
CVBufferRemoveAllAttachments(pixBuf);
// FFmpeg 5.0+ sets the CVPixelBuffer attachments properly now, so we don't have to
// fix them up ourselves (except CGColorSpace and PAR attachments).
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaSubsamplingKey,
kCVImageBufferChromaSubsampling_420,
kCVAttachmentMode_ShouldPropagate);
switch (frame->chroma_location) {
case AVCHROMA_LOC_LEFT:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_Left,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCHROMA_LOC_CENTER:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_Center,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCHROMA_LOC_TOPLEFT:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_TopLeft,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCHROMA_LOC_TOP:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_Top,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCHROMA_LOC_BOTTOMLEFT:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_BottomLeft,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCHROMA_LOC_BOTTOM:
CVBufferSetAttachment(pixBuf,
kCVImageBufferChromaLocationTopFieldKey,
kCVImageBufferChromaLocation_Bottom,
kCVAttachmentMode_ShouldPropagate);
break;
default:
break;
}
switch (frame->color_primaries) {
case AVCOL_PRI_BT709:
CVBufferSetAttachment(pixBuf,
kCVImageBufferColorPrimariesKey,
kCVImageBufferColorPrimaries_ITU_R_709_2,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_PRI_SMPTE170M:
CVBufferSetAttachment(pixBuf,
kCVImageBufferColorPrimariesKey,
kCVImageBufferColorPrimaries_SMPTE_C,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_PRI_BT2020:
CVBufferSetAttachment(pixBuf,
kCVImageBufferColorPrimariesKey,
kCVImageBufferColorPrimaries_ITU_R_2020,
kCVAttachmentMode_ShouldPropagate);
break;
default:
break;
}
switch (frame->color_trc) {
case AVCOL_TRC_BT709:
case AVCOL_TRC_SMPTE170M:
CVBufferSetAttachment(pixBuf,
kCVImageBufferTransferFunctionKey,
kCVImageBufferTransferFunction_ITU_R_709_2,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_TRC_BT2020_10:
CVBufferSetAttachment(pixBuf,
kCVImageBufferTransferFunctionKey,
kCVImageBufferTransferFunction_ITU_R_2020,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_TRC_SMPTE2084:
CVBufferSetAttachment(pixBuf,
kCVImageBufferTransferFunctionKey,
kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ,
kCVAttachmentMode_ShouldPropagate);
break;
default:
break;
}
// The VideoToolbox decoder attaches pixel aspect ratio information to the CVPixelBuffer
// which will rescale the video stream in accordance with the host display resolution
// to preserve the original aspect ratio of the host desktop. This behavior currently
// differs from the behavior of all other Moonlight Qt renderers, so we will strip
// these attachments for consistent behavior.
CVBufferRemoveAttachment(pixBuf, kCVImageBufferPixelAspectRatioKey);
// Reset m_ColorSpace if the colorspace changes. This can happen when
// a game enters HDR mode (Rec 601 -> Rec 2020).
@@ -282,39 +206,21 @@ public:
m_ColorSpace = nullptr;
}
m_LastAvColorSpace = frame->colorspace;
}
switch (frame->colorspace) {
case AVCOL_SPC_BT709:
if (m_ColorSpace == nullptr) {
switch (frame->colorspace) {
case AVCOL_SPC_BT709:
m_ColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
}
CVBufferSetAttachment(pixBuf,
kCVImageBufferYCbCrMatrixKey,
kCVImageBufferYCbCrMatrix_ITU_R_709_2,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_SPC_BT2020_NCL:
if (m_ColorSpace == nullptr) {
break;
case AVCOL_SPC_BT2020_NCL:
m_ColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_2020);
}
CVBufferSetAttachment(pixBuf,
kCVImageBufferYCbCrMatrixKey,
kCVImageBufferYCbCrMatrix_ITU_R_2020,
kCVAttachmentMode_ShouldPropagate);
break;
case AVCOL_SPC_SMPTE170M:
if (m_ColorSpace == nullptr) {
break;
case AVCOL_SPC_SMPTE170M:
m_ColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
break;
default:
break;
}
CVBufferSetAttachment(pixBuf,
kCVImageBufferYCbCrMatrixKey,
kCVImageBufferYCbCrMatrix_ITU_R_601_4,
kCVAttachmentMode_ShouldPropagate);
break;
default:
break;
m_LastAvColorSpace = frame->colorspace;
}
if (m_ColorSpace != nullptr) {
@@ -337,16 +243,6 @@ public:
}
}
if (m_DisplayLink != nullptr) {
// Vsync is enabled, so wait for a swap before returning
SDL_LockMutex(m_VsyncMutex);
if (SDL_CondWaitTimeout(m_VsyncPassed, m_VsyncMutex, 100) == SDL_MUTEX_TIMEDOUT) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"V-sync wait timed out after 100 ms");
}
SDL_UnlockMutex(m_VsyncMutex);
}
// Queue this sample for the next v-sync
CMSampleTimingInfo timingInfo = {
.duration = kCMTimeInvalid,
@@ -454,19 +350,36 @@ public:
m_DisplayLayer.videoGravity = AVLayerVideoGravityResizeAspect;
m_DisplayLayer.opaque = YES;
// This workaround prevents the image from going through processing that doesn't preserve
// the colorspace information properly in some cases. HDR seems to be okay without this,
// so we'll exclude it out of caution.
// See https://github.com/moonlight-stream/moonlight-qt/issues/493 for more details.
// This workaround prevents the image from going through processing that causes some
// color artifacts in some cases. HDR seems to be okay without this, so we'll exclude
// it out of caution. The artifacts seem to be far more significant on M1 Macs and
// the workaround can cause performance regressions on Intel Macs, so only use this
// on Apple silicon.
//
// https://github.com/moonlight-stream/moonlight-qt/issues/493
// https://github.com/moonlight-stream/moonlight-qt/issues/722
if (params->videoFormat != VIDEO_FORMAT_H265_MAIN10) {
if (info.info.cocoa.window.screen != nullptr) {
m_DisplayLayer.shouldRasterize = YES;
m_DisplayLayer.rasterizationScale = info.info.cocoa.window.screen.backingScaleFactor;
int err;
uint32_t cpuType;
size_t size = sizeof(cpuType);
// Apple Silicon Macs have CPU_ARCH_ABI64 set, so we need to mask that off.
// For some reason, 64-bit Intel Macs don't seem to have CPU_ARCH_ABI64 set.
err = sysctlbyname("hw.cputype", &cpuType, &size, NULL, 0);
if (err == 0 && (cpuType & ~CPU_ARCH_MASK) == CPU_TYPE_ARM) {
if (info.info.cocoa.window.screen != nullptr) {
m_DisplayLayer.shouldRasterize = YES;
m_DisplayLayer.rasterizationScale = info.info.cocoa.window.screen.backingScaleFactor;
}
else {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Unable to rasterize layer due to missing NSScreen");
SDL_assert(false);
}
}
else {
else if (err != 0) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"Unable to rasterize layer due to missing NSScreen");
SDL_assert(false);
"sysctlbyname(hw.cputype) failed: %d", err);
}
}
@@ -590,6 +503,12 @@ public:
return COLORSPACE_REC_601;
}
int getRendererAttributes() override
{
// AVSampleBufferDisplayLayer supports HDR output
return RENDERER_ATTRIBUTE_HDR_SUPPORT;
}
private:
AVBufferRef* m_HwContext;
AVSampleBufferDisplayLayer* m_DisplayLayer;
+67 -30
View File
@@ -9,6 +9,7 @@
#ifdef Q_OS_WIN32
#include "ffmpeg-renderers/dxva2.h"
#include "ffmpeg-renderers/d3d11va.h"
#endif
#ifdef Q_OS_DARWIN
@@ -57,6 +58,16 @@ bool FFmpegVideoDecoder::isAlwaysFullScreen()
return m_FrontendRenderer->getRendererAttributes() & RENDERER_ATTRIBUTE_FULLSCREEN_ONLY;
}
bool FFmpegVideoDecoder::isHdrSupported()
{
return m_FrontendRenderer->getRendererAttributes() & RENDERER_ATTRIBUTE_HDR_SUPPORT;
}
void FFmpegVideoDecoder::setHdrMode(bool enabled)
{
m_FrontendRenderer->setHdrMode(enabled);
}
int FFmpegVideoDecoder::getDecoderCapabilities()
{
int capabilities = m_BackendRenderer->getDecoderCapabilities();
@@ -103,9 +114,8 @@ enum AVPixelFormat FFmpegVideoDecoder::ffGetFormat(AVCodecContext* context,
// format (if not using hardware decoding). It's crucial
// to override the default get_format() which will try
// to gracefully fall back to software decode and break us.
if (*p == (decoder->m_HwDecodeCfg ?
decoder->m_HwDecodeCfg->pix_fmt :
context->pix_fmt)) {
if (*p == (decoder->m_HwDecodeCfg ? decoder->m_HwDecodeCfg->pix_fmt : context->pix_fmt) &&
decoder->m_BackendRenderer->prepareDecoderContextInGetFormat(context, *p)) {
return *p;
}
}
@@ -113,7 +123,8 @@ enum AVPixelFormat FFmpegVideoDecoder::ffGetFormat(AVCodecContext* context,
// Failed to match the preferred pixel formats. Try non-preferred options for non-hwaccel decoders.
if (decoder->m_HwDecodeCfg == nullptr) {
for (p = pixFmts; *p != -1; p++) {
if (decoder->m_FrontendRenderer->isPixelFormatSupported(decoder->m_VideoFormat, *p)) {
if (decoder->m_FrontendRenderer->isPixelFormatSupported(decoder->m_VideoFormat, *p) &&
decoder->m_BackendRenderer->prepareDecoderContextInGetFormat(context, *p)) {
return *p;
}
}
@@ -215,9 +226,24 @@ void FFmpegVideoDecoder::reset()
}
}
bool FFmpegVideoDecoder::createFrontendRenderer(PDECODER_PARAMETERS params, bool eglOnly)
bool FFmpegVideoDecoder::createFrontendRenderer(PDECODER_PARAMETERS params, bool useAlternateFrontend)
{
if (eglOnly) {
if (useAlternateFrontend) {
#ifdef HAVE_DRM
// If we're trying to stream HDR, we need to use the DRM renderer in direct
// rendering mode so it can set the HDR metadata on the display. EGL does
// not currently support this (and even if it did, Mesa and Wayland don't
// currently have protocols to actually get that metadata to the display).
if (params->videoFormat == VIDEO_FORMAT_H265_MAIN10 && m_BackendRenderer->canExportDrmPrime()) {
m_FrontendRenderer = new DrmRenderer(m_BackendRenderer);
if (m_FrontendRenderer->initialize(params)) {
return true;
}
delete m_FrontendRenderer;
m_FrontendRenderer = nullptr;
}
#endif
#ifdef HAVE_EGL
if (m_BackendRenderer->canExportEGL()) {
m_FrontendRenderer = new EGLRenderer(m_BackendRenderer);
@@ -248,13 +274,13 @@ bool FFmpegVideoDecoder::createFrontendRenderer(PDECODER_PARAMETERS params, bool
return true;
}
bool FFmpegVideoDecoder::completeInitialization(const AVCodec* decoder, PDECODER_PARAMETERS params, bool testFrame, bool eglOnly)
bool FFmpegVideoDecoder::completeInitialization(const AVCodec* decoder, PDECODER_PARAMETERS params, bool testFrame, bool useAlternateFrontend)
{
// In test-only mode, we should only see test frames
SDL_assert(!m_TestOnly || testFrame);
// Create the frontend renderer based on the capabilities of the backend renderer
if (!createFrontendRenderer(params, eglOnly)) {
if (!createFrontendRenderer(params, useAlternateFrontend)) {
return false;
}
@@ -574,8 +600,13 @@ IFFmpegRenderer* FFmpegVideoDecoder::createHwAccelRenderer(const AVCodecHWConfig
if (pass == 0) {
switch (hwDecodeCfg->device_type) {
#ifdef Q_OS_WIN32
// DXVA2 appears in the hwaccel list before D3D11VA, so we will implicitly
// prefer it. When we want to switch to D3D11VA by default, we'll need to
// move it into the second pass set below.
case AV_HWDEVICE_TYPE_DXVA2:
return new DXVA2Renderer();
case AV_HWDEVICE_TYPE_D3D11VA:
return new D3D11VARenderer();
#endif
#ifdef Q_OS_DARWIN
case AV_HWDEVICE_TYPE_VIDEOTOOLBOX:
@@ -622,7 +653,7 @@ bool FFmpegVideoDecoder::tryInitializeRenderer(const AVCodec* decoder,
{
m_HwDecodeCfg = hwConfig;
// i == 0 - Indirect via EGL frontend with zero-copy DMA-BUF passing
// i == 0 - Indirect via EGL or DRM frontend with zero-copy DMA-BUF passing
// i == 1 - Direct rendering or indirect via SDL read-back
#ifdef HAVE_EGL
for (int i = 0; i < 2; i++) {
@@ -632,7 +663,7 @@ bool FFmpegVideoDecoder::tryInitializeRenderer(const AVCodec* decoder,
SDL_assert(m_BackendRenderer == nullptr);
if ((m_BackendRenderer = createRendererFunc()) != nullptr &&
m_BackendRenderer->initialize(params) &&
completeInitialization(decoder, params, m_TestOnly || m_BackendRenderer->needsTestFrame(), i == 0 /* EGL */)) {
completeInitialization(decoder, params, m_TestOnly || m_BackendRenderer->needsTestFrame(), i == 0 /* EGL/DRM */)) {
if (m_TestOnly) {
// This decoder is only for testing capabilities, so don't bother
// creating a usable renderer
@@ -644,7 +675,7 @@ bool FFmpegVideoDecoder::tryInitializeRenderer(const AVCodec* decoder,
reset();
if ((m_BackendRenderer = createRendererFunc()) != nullptr &&
m_BackendRenderer->initialize(params) &&
completeInitialization(decoder, params, false, i == 0 /* EGL */)) {
completeInitialization(decoder, params, false, i == 0 /* EGL/DRM */)) {
return true;
}
else {
@@ -683,10 +714,11 @@ bool FFmpegVideoDecoder::tryInitializeRenderer(const AVCodec* decoder,
} \
}
#define TRY_SUPPORTED_PIXEL_FORMAT(RENDERER_TYPE) \
#define TRY_SUPPORTED_NON_PREFERRED_PIXEL_FORMAT(RENDERER_TYPE) \
{ \
RENDERER_TYPE renderer; \
if (renderer.isPixelFormatSupported(params->videoFormat, decoder->pix_fmts[i])) { \
if (decoder->pix_fmts[i] != renderer.getPreferredPixelFormat(params->videoFormat) && \
renderer.isPixelFormatSupported(params->videoFormat, decoder->pix_fmts[i])) { \
if (tryInitializeRenderer(decoder, params, nullptr, \
[]() -> IFFmpegRenderer* { return new RENDERER_TYPE(); })) { \
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, \
@@ -726,33 +758,37 @@ bool FFmpegVideoDecoder::tryInitializeRendererForDecoderByName(const char *decod
[]() -> IFFmpegRenderer* { return new SdlRenderer(); });
}
#ifdef HAVE_MMAL
// HACK: Avoid using YUV420P on h264_mmal. It can cause a deadlock inside the MMAL libraries.
// Even if it didn't completely deadlock us, the performance would likely be atrocious.
if (strcmp(decoderName, "h264_mmal") == 0) {
for (int i = 0; decoder->pix_fmts[i] != AV_PIX_FMT_NONE; i++) {
TRY_PREFERRED_PIXEL_FORMAT(MmalRenderer);
}
for (int i = 0; decoder->pix_fmts[i] != AV_PIX_FMT_NONE; i++) {
TRY_SUPPORTED_NON_PREFERRED_PIXEL_FORMAT(MmalRenderer);
}
// Give up if we can't use MmalRenderer for h264_mmal
return false;
}
#endif
// Check if any of our decoders prefer any of the pixel formats first
for (int i = 0; decoder->pix_fmts[i] != AV_PIX_FMT_NONE; i++) {
#ifdef HAVE_DRM
TRY_PREFERRED_PIXEL_FORMAT(DrmRenderer);
#endif
#ifdef HAVE_MMAL
TRY_PREFERRED_PIXEL_FORMAT(MmalRenderer);
#endif
// HACK: Avoid using YUV420P on h264_mmal. It can cause a deadlock inside the MMAL libraries.
// Even if it didn't completely deadlock us, the performance would likely be atrocious.
if (strcmp(decoderName, "h264_mmal") != 0) {
TRY_PREFERRED_PIXEL_FORMAT(SdlRenderer);
}
TRY_PREFERRED_PIXEL_FORMAT(SdlRenderer);
}
// Nothing prefers any of them. Let's see if anyone will tolerate one.
for (int i = 0; decoder->pix_fmts[i] != AV_PIX_FMT_NONE; i++) {
#ifdef HAVE_DRM
TRY_SUPPORTED_PIXEL_FORMAT(DrmRenderer);
TRY_SUPPORTED_NON_PREFERRED_PIXEL_FORMAT(DrmRenderer);
#endif
#ifdef HAVE_MMAL
TRY_SUPPORTED_PIXEL_FORMAT(MmalRenderer);
#endif
// HACK: See comment above
if (strcmp(decoderName, "h264_mmal") != 0) {
TRY_SUPPORTED_PIXEL_FORMAT(SdlRenderer);
}
TRY_SUPPORTED_NON_PREFERRED_PIXEL_FORMAT(SdlRenderer);
}
// If we made it here, we couldn't find anything
@@ -851,6 +887,7 @@ bool FFmpegVideoDecoder::initialize(PDECODER_PARAMETERS params)
"h264_mmal",
#endif
"h264_rkmpp",
"h264_nvv4l2",
"h264_nvmpi",
#ifndef HAVE_MMAL
// Only enable V4L2M2M by default on non-MMAL (RPi) builds. The performance
@@ -868,7 +905,7 @@ bool FFmpegVideoDecoder::initialize(PDECODER_PARAMETERS params)
}
}
else {
QList<const char *> knownHevcCodecs = { "hevc_rkmpp", "hevc_nvmpi", "hevc_v4l2m2m" };
QList<const char *> knownHevcCodecs = { "hevc_rkmpp", "hevc_nvv4l2", "hevc_nvmpi", "hevc_v4l2m2m" };
for (const char* codec : knownHevcCodecs) {
if (tryInitializeRendererForDecoderByName(codec, params)) {
return true;
+4 -2
View File
@@ -18,16 +18,18 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool isHardwareAccelerated() override;
virtual bool isAlwaysFullScreen() override;
virtual bool isHdrSupported() override;
virtual int getDecoderCapabilities() override;
virtual int getDecoderColorspace() override;
virtual QSize getDecoderMaxResolution() override;
virtual int submitDecodeUnit(PDECODE_UNIT du) override;
virtual void renderFrameOnMainThread() override;
virtual void setHdrMode(bool enabled) override;
virtual IFFmpegRenderer* getBackendRenderer();
private:
bool completeInitialization(const AVCodec* decoder, PDECODER_PARAMETERS params, bool testFrame, bool eglOnly);
bool completeInitialization(const AVCodec* decoder, PDECODER_PARAMETERS params, bool testFrame, bool useAlternateFrontend);
void stringifyVideoStats(VIDEO_STATS& stats, char* output);
@@ -35,7 +37,7 @@ private:
void addVideoStats(VIDEO_STATS& src, VIDEO_STATS& dst);
bool createFrontendRenderer(PDECODER_PARAMETERS params, bool eglOnly);
bool createFrontendRenderer(PDECODER_PARAMETERS params, bool useAlternateFrontend);
bool tryInitializeRendererForDecoderByName(const char* decoderName,
PDECODER_PARAMETERS params);
+11 -2
View File
@@ -15,7 +15,11 @@ OverlayManager::OverlayManager() :
m_Overlays[OverlayType::OverlayStatusUpdate].color = {0xCC, 0x00, 0x00, 0xFF};
m_Overlays[OverlayType::OverlayStatusUpdate].fontSize = 36;
SDL_assert(TTF_WasInit() == 0);
// While TTF will usually not be initialized here, it is valid for that not to
// be the case, since Session destruction is deferred and could overlap with
// the lifetime of a new Session object.
//SDL_assert(TTF_WasInit() == 0);
if (TTF_Init() != 0) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"TTF_Init() failed: %s",
@@ -36,7 +40,12 @@ OverlayManager::~OverlayManager()
}
TTF_Quit();
SDL_assert(TTF_WasInit() == 0);
// For similar reasons to the comment in the constructor, this will usually,
// but not always, deinitialize TTF. In the cases where Session objects overlap
// in lifetime, there may be an additional reference on TTF for the new Session
// that means it will not be cleaned up here.
//SDL_assert(TTF_WasInit() == 0);
}
bool OverlayManager::isOverlayEnabled(OverlayType type)
+14 -8
View File
@@ -9,16 +9,22 @@ class SLVideoDecoder : public IVideoDecoder
public:
SLVideoDecoder(bool testOnly);
virtual ~SLVideoDecoder();
virtual bool initialize(PDECODER_PARAMETERS params);
virtual bool isHardwareAccelerated();
virtual bool isAlwaysFullScreen();
virtual int getDecoderCapabilities();
virtual int getDecoderColorspace();
virtual QSize getDecoderMaxResolution();
virtual int submitDecodeUnit(PDECODE_UNIT du);
virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool isHardwareAccelerated() override;
virtual bool isAlwaysFullScreen() override;
virtual int getDecoderCapabilities() override;
virtual int getDecoderColorspace() override;
virtual QSize getDecoderMaxResolution() override;
virtual int submitDecodeUnit(PDECODE_UNIT du) override;
// Unused since rendering is done directly from the decode thread
virtual void renderFrameOnMainThread() {}
virtual void renderFrameOnMainThread() override {}
// HDR is not supported by SLVideo
virtual void setHdrMode(bool) override {}
virtual bool isHdrSupported() override {
return false;
}
private:
static void slLogCallback(void* context, ESLVideoLog logLevel, const char* message);
+1 -1
View File
@@ -1 +1 @@
3.2.0
4.0.0
+7 -12
View File
@@ -4,12 +4,6 @@ clone_depth: 1
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
QTDIR: C:\Qt\5.15
- APPVEYOR_BUILD_WORKER_IMAGE: macOS-BigSur
BUILD_TARGET: macos
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1604
BUILD_TARGET: steamlink
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu
BUILD_TARGET: linux
FFMPEG_CONFIGURE_ARGS: --enable-pic --disable-static --enable-shared --disable-all --enable-avcodec --enable-decoder=h264 --enable-decoder=hevc --enable-nvdec --enable-hwaccel=h264_nvdec --enable-hwaccel=hevc_nvdec --enable-hwaccel=h264_vaapi --enable-hwaccel=hevc_vaapi --enable-hwaccel=h264_vdpau --enable-hwaccel=hevc_vdpau
@@ -19,14 +13,15 @@ install:
- sh: '[ "$BUILD_TARGET" != macos ] || npm install --global create-dmg'
- sh: '[ "$BUILD_TARGET" != steamlink ] || sudo apt install -y libc6:i386 libstdc++6:i386'
- sh: '[ "$BUILD_TARGET" != steamlink ] || git clone --depth=1 https://github.com/ValveSoftware/steamlink-sdk.git $HOME/steamlink-sdk'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-bionic'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo add-apt-repository ppa:cgutman/opt-qt-5.15.2-eglfsgbm-bionic'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo add-apt-repository ppa:savoury1/display'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo apt update || true'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo apt install -y qt515base qt515quickcontrols2 qt515svg qt515wayland nasm libgbm-dev libdrm-dev libfreetype6-dev libasound2-dev libdbus-1-dev libegl1-mesa-dev libgl1-mesa-dev libgles2-mesa-dev libglu1-mesa-dev libibus-1.0-dev libpulse-dev libudev-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxkbcommon-dev libxrandr-dev libxss-dev libxt-dev libxv-dev libxxf86vm-dev wayland-protocols libopus-dev libvdpau-dev'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export SDL2_REV=a0e3c884d4519d4ae02f5c22c7557759eaea60ca && git clone https://github.com/libsdl-org/SDL.git SDL2 && cd SDL2 && git checkout $SDL2_REV && ./configure --enable-video-kmsdrm && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export SDL2_TTF_VER=2.0.15 && wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-$SDL2_TTF_VER.tar.gz && tar -xvf SDL2_ttf-$SDL2_TTF_VER.tar.gz && cd SDL2_ttf-$SDL2_TTF_VER && ./configure && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export LIBVA_VER=2.13.0 && git clone https://github.com/intel/libva.git && cd libva && git checkout $LIBVA_VER && ./autogen.sh && ./configure && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: '[ "$BUILD_TARGET" != linux ] || sudo apt install -y qt515base qt515quickcontrols2 qt515svg qt515wayland nasm libgbm-dev libdrm-dev libfreetype6-dev libasound2-dev libdbus-1-dev libegl1-mesa-dev libgl1-mesa-dev libgles2-mesa-dev libglu1-mesa-dev libibus-1.0-dev libpulse-dev libudev-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxkbcommon-dev libxrandr-dev libxss-dev libxt-dev libxv-dev libxxf86vm-dev wayland-protocols libopus-dev libvdpau-dev libdecor-0-dev'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export SDL2_REV=45372b1c276a748e71c373880fbb14d0a92ef6c1 && git clone https://github.com/libsdl-org/SDL.git SDL2 && cd SDL2 && git checkout $SDL2_REV && ./configure --enable-video-kmsdrm && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export SDL2_TTF_VER=2.0.18 && wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-$SDL2_TTF_VER.tar.gz && tar -xvf SDL2_ttf-$SDL2_TTF_VER.tar.gz && cd SDL2_ttf-$SDL2_TTF_VER && ./configure && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export LIBVA_VER=2.14.0 && git clone https://github.com/intel/libva.git && cd libva && git checkout $LIBVA_VER && ./autogen.sh && ./configure && make -j$(nproc) && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export NVHDR_VER=8.1.24.13 && wget https://github.com/FFmpeg/nv-codec-headers/releases/download/n$NVHDR_VER/nv-codec-headers-$NVHDR_VER.tar.gz && tar -xvf nv-codec-headers-$NVHDR_VER.tar.gz && cd nv-codec-headers-$NVHDR_VER && sudo make install && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export FFMPEG_VER=4.4.1 && wget https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VER.tar.bz2 && tar -xvf ffmpeg-$FFMPEG_VER.tar.bz2 && cd ffmpeg-$FFMPEG_VER && ./configure $FFMPEG_CONFIGURE_ARGS && make -j$(nproc) && sudo make install && sudo ldconfig && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then export FFMPEG_VER=5.0 && wget https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VER.tar.bz2 && tar -xvf ffmpeg-$FFMPEG_VER.tar.bz2 && cd ffmpeg-$FFMPEG_VER && ./configure $FFMPEG_CONFIGURE_ARGS && make -j$(nproc) && sudo make install && sudo ldconfig && cd ..; fi'
- sh: 'if [[ "$BUILD_TARGET" = linux ]]; then mkdir $HOME/bin && wget -O $HOME/bin/linuxdeployqt https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage && chmod a+x $HOME/bin/linuxdeployqt; fi'
before_build:

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