Changes of Revision 77

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,24 @@
2
 -------------------------------------------------------------------
3
+Sun Apr 05 21:29:12 UTC 2020 - jimmy@boombatower.com
4
+
5
+- Update to version 25.0.4:
6
+  * libobs: Update version to 25.0.4
7
+  * win-capture: Update graphics hook version to 1.1.4
8
+  * UI: Don't stretch server field in Qt 5.14
9
+  * obs-browser: Fix interact keyboard input on Linux
10
+  * Decklink: Fix crash when no matching device
11
+  * libobs: Fix macOS 10.15 hotkey crash (temporary)
12
+  * win-capture: Fix crash if GPU can't Vulkan capture
13
+  * docs/sphinx: Bump major OBS version
14
+  * UI: Use Qt dialogs for Font & Color Pickers on Linux
15
+  * obs-qsv11: Fix QuickSync LA_ICQ encoder settings
16
+  * rtmp-services: Remove executable bits from json files
17
+  * obs-ffmpeg: Expose old NVENC on Windows 7
18
+  * UI: Fix text handling for dialogs
19
+  * libobs-winrt: Stronger exception handling
20
+  * UI: Fix silent scenes with imported SL scenes
21
+
22
+-------------------------------------------------------------------
23
 Tue Mar 24 15:03:52 UTC 2020 - jimmy@boombatower.com
24
 
25
 - Update to version 25.0.3:
26
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        25.0.3
4
+Version:        25.0.4
5
 Release:        0
6
 Summary:        A recording/broadcasting program
7
 Group:          Productivity/Multimedia/Video/Editors and Convertors
8
_service Changed
10
 
1
@@ -1,7 +1,7 @@
2
 <services>
3
   <service name="tar_scm" mode="disabled">
4
     <param name="versionformat">@PARENT_TAG@</param>
5
-    <param name="revision">refs/tags/25.0.3</param>
6
+    <param name="revision">refs/tags/25.0.4</param>
7
     <param name="url">git://github.com/jp9000/obs-studio.git</param>
8
     <param name="scm">git</param>
9
     <param name="changesgenerate">enable</param>
10
_servicedata Changed
9
 
1
@@ -1,6 +1,6 @@
2
 <servicedata>
3
   <service name="tar_scm">
4
     <param name="url">git://github.com/jp9000/obs-studio.git</param>
5
-    <param name="changesrevision">3c78a8aa8d5f5c3fd0242697c06582dc96daa012</param>
6
+    <param name="changesrevision">47058d9b6999f14bb5e2c76f7ae449efa2ca1c13</param>
7
   </service>
8
 </servicedata>
9
obs-studio-25.0.3.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-25.0.4.tar.xz/UI/forms/OBSBasicSettings.ui Changed
14
 
1
@@ -958,6 +958,12 @@
2
              </item>
3
              <item row="0" column="1">
4
               <widget class="QStackedWidget" name="serverStackedWidget">
5
+               <property name="sizePolicy">
6
+                <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
7
+                 <horstretch>0</horstretch>
8
+                 <verstretch>0</verstretch>
9
+                </sizepolicy>
10
+               </property>
11
                <property name="currentIndex">
12
                 <number>1</number>
13
                </property>
14
obs-studio-25.0.3.tar.xz/UI/importers/sl.cpp -> obs-studio-25.0.4.tar.xz/UI/importers/sl.cpp Changed
30
 
1
@@ -298,15 +298,8 @@
2
        Json::array filter_items = in_filters["items"].array_items();
3
 
4
        Json in_settings = scene["settings"];
5
-       Json in_sync = scene["syncOffset"];
6
 
7
-       int sync = (int)(in_sync["sec"].number_value() * 1000000000 +
8
-                in_sync["nsec"].number_value());
9
-
10
-       double vol = scene["volume"].number_value();
11
-       bool muted = scene["muted"].bool_value();
12
        string name = scene["name"].string_value();
13
-       int monitoring = scene["monitoringType"].int_value();
14
 
15
        Json::object out_hotkeys = Json::object{};
16
        get_hotkey_bindings(out_hotkeys, hotkey_items, "");
17
@@ -336,11 +329,8 @@
18
                     {"id", "scene"},
19
                     {"sl_id", sl_id},
20
                     {"settings", in_settings},
21
-                    {"sync", sync},
22
-                    {"volume", vol},
23
-                    {"muted", muted},
24
+                    {"volume", 1.0},
25
                     {"name", out_name},
26
-                    {"monitoring_type", monitoring},
27
                     {"private_settings", Json::object{}}};
28
 
29
        Json in_items = scene["sceneItems"];
30
obs-studio-25.0.3.tar.xz/UI/properties-view.cpp -> obs-studio-25.0.4.tar.xz/UI/properties-view.cpp Changed
19
 
1
@@ -1694,7 +1694,7 @@
2
     * other open QDialogs on exit, and
3
     * https://bugreports.qt-project.org/browse/QTBUG-34532
4
     */
5
-#ifdef __APPLE__
6
+#ifndef _WIN32
7
    options |= QColorDialog::DontUseNativeDialog;
8
 #endif
9
 
10
@@ -1728,7 +1728,7 @@
11
 
12
    QFontDialog::FontDialogOptions options;
13
 
14
-#ifdef __APPLE__
15
+#ifndef _WIN32
16
    options = QFontDialog::DontUseNativeDialog;
17
 #endif
18
 
19
obs-studio-25.0.3.tar.xz/UI/window-basic-main.cpp -> obs-studio-25.0.4.tar.xz/UI/window-basic-main.cpp Changed
10
 
1
@@ -7482,7 +7482,7 @@
2
                obs_data_get_string(curPrivData, "color");
3
            const char *customColor = *oldColor != 0 ? oldColor
4
                                 : "#55FF0000";
5
-#ifdef __APPLE__
6
+#ifndef _WIN32
7
            options |= QColorDialog::DontUseNativeDialog;
8
 #endif
9
 
10
obs-studio-25.0.3.tar.xz/UI/window-importer.cpp -> obs-studio-25.0.4.tar.xz/UI/window-importer.cpp Changed
20
 
1
@@ -92,6 +92,9 @@
2
                    QSizePolicy::ControlType::LineEdit));
3
    layout->addWidget(text);
4
 
5
+   QObject::connect(text, SIGNAL(editingFinished()), this,
6
+            SLOT(updateText()));
7
+
8
    QToolButton *browseButton = new QToolButton();
9
    browseButton->setText("...");
10
    browseButton->setSizePolicy(buttonSizePolicy);
11
@@ -121,8 +124,6 @@
12
 {
13
    QLineEdit *text = editor->findChild<QLineEdit *>();
14
    text->setText(index.data().toString());
15
-   QObject::connect(text, SIGNAL(textEdited(QString)), this,
16
-            SLOT(updateText()));
17
    editor->setProperty(PATH_LIST_PROP, QVariant());
18
 }
19
 
20
obs-studio-25.0.3.tar.xz/UI/window-remux.cpp -> obs-studio-25.0.4.tar.xz/UI/window-remux.cpp Changed
20
 
1
@@ -112,6 +112,9 @@
2
                    QSizePolicy::ControlType::LineEdit));
3
        layout->addWidget(text);
4
 
5
+       QObject::connect(text, SIGNAL(editingFinished()), this,
6
+                SLOT(updateText()));
7
+
8
        QToolButton *browseButton = new QToolButton();
9
        browseButton->setText("...");
10
        browseButton->setSizePolicy(buttonSizePolicy);
11
@@ -143,8 +146,6 @@
12
 {
13
    QLineEdit *text = editor->findChild<QLineEdit *>();
14
    text->setText(index.data().toString());
15
-   QObject::connect(text, SIGNAL(textEdited(QString)), this,
16
-            SLOT(updateText()));
17
    editor->setProperty(PATH_LIST_PROP, QVariant());
18
 }
19
 
20
obs-studio-25.0.3.tar.xz/docs/sphinx/conf.py -> obs-studio-25.0.4.tar.xz/docs/sphinx/conf.py Changed
13
 
1
@@ -57,9 +57,9 @@
2
 # built documents.
3
 #
4
 # The short X.Y version.
5
-version = '20.1.0'
6
+version = '25.0.0'
7
 # The full version, including alpha/beta/rc tags.
8
-release = '20.1.0'
9
+release = '25.0.0'
10
 
11
 # The language for content autogenerated by Sphinx. Refer to documentation
12
 # for a list of supported languages.
13
obs-studio-25.0.3.tar.xz/libobs-winrt/winrt-capture.cpp -> obs-studio-25.0.4.tar.xz/libobs-winrt/winrt-capture.cpp Changed
59
 
1
@@ -18,10 +18,14 @@
2
    return winrt::Windows::Foundation::Metadata::ApiInformation::
3
        IsApiContractPresent(L"Windows.Foundation.UniversalApiContract",
4
                     8);
5
-} catch (winrt::hresult_error &err) {
6
+} catch (const winrt::hresult_error &err) {
7
    blog(LOG_ERROR, "winrt_capture_supported (0x%08X): %ls", err.to_abi(),
8
         err.message().c_str());
9
    return false;
10
+} catch (...) {
11
+   blog(LOG_ERROR, "winrt_capture_supported (0x%08X)",
12
+        winrt::to_hresult());
13
+   return false;
14
 }
15
 
16
 extern "C" EXPORT BOOL winrt_capture_cursor_toggle_supported()
17
@@ -34,10 +38,14 @@
18
 #else
19
    return false;
20
 #endif
21
-} catch (winrt::hresult_error &err) {
22
+} catch (const winrt::hresult_error &err) {
23
    blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X): %ls",
24
         err.to_abi(), err.message().c_str());
25
    return false;
26
+} catch (...) {
27
+   blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X)",
28
+        winrt::to_hresult());
29
+   return false;
30
 }
31
 
32
 template<typename T>
33
@@ -353,6 +361,10 @@
34
        blog(LOG_ERROR, "CreateForWindow (0x%08X): %ls", err.to_abi(),
35
             err.message().c_str());
36
        return nullptr;
37
+   } catch (...) {
38
+       blog(LOG_ERROR, "CreateForWindow (0x%08X)",
39
+            winrt::to_hresult());
40
+       return nullptr;
41
    }
42
 
43
    const winrt::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice
44
@@ -406,10 +418,13 @@
45
 
46
    return capture;
47
 
48
-} catch (winrt::hresult_error &err) {
49
+} catch (const winrt::hresult_error &err) {
50
    blog(LOG_ERROR, "winrt_capture_init (0x%08X): %ls", err.to_abi(),
51
         err.message().c_str());
52
    return nullptr;
53
+} catch (...) {
54
+   blog(LOG_ERROR, "winrt_capture_init (0x%08X)", winrt::to_hresult());
55
+   return nullptr;
56
 }
57
 
58
 extern "C" EXPORT void winrt_capture_free(struct winrt_capture *capture)
59
obs-studio-25.0.3.tar.xz/libobs/obs-cocoa.m -> obs-studio-25.0.4.tar.xz/libobs/obs-cocoa.m Changed
62
 
1
@@ -175,6 +175,8 @@
2
    blog(LOG_INFO, "OS Name: %s", name ? name : "Unknown");
3
 }
4
 
5
+static bool using_10_15_or_above = true;
6
+
7
 static void log_os_version(id pi, SEL UTF8StringSel)
8
 {
9
    typedef id (*version_func)(id, SEL);
10
@@ -186,6 +188,16 @@
11
    const char *version = UTF8String(vs, UTF8StringSel);
12
 
13
    blog(LOG_INFO, "OS Version: %s", version ? version : "Unknown");
14
+
15
+   if (version) {
16
+       int major;
17
+       int minor;
18
+
19
+       int count = sscanf(version, "Version %d.%d", &major, &minor);
20
+       if (count == 2 && major == 10) {
21
+           using_10_15_or_above = minor >= 15;
22
+       }
23
+   }
24
 }
25
 
26
 static void log_os(void)
27
@@ -239,6 +251,7 @@
28
 
29
 struct obs_hotkeys_platform {
30
    volatile long refs;
31
+   bool secure_input_activated;
32
    TISInputSourceRef tis;
33
    CFDataRef layout_data;
34
    UCKeyboardLayout *layout;
35
@@ -1749,6 +1762,14 @@
36
    if (key >= OBS_KEY_LAST_VALUE)
37
        return false;
38
 
39
+   /* if secure input is activated, kill hotkeys.
40
+    *
41
+    * TODO: rewrite all mac hotkey code, suspect there's a bug in 10.15
42
+    * causing the crash internally.  */
43
+   if (plat->secure_input_activated) {
44
+       return false;
45
+   }
46
+
47
    for (size_t i = 0; i < plat->keys[key].num;) {
48
        IOHIDElementRef element = plat->keys[key].array[i];
49
        IOHIDValueRef value = 0;
50
@@ -1758,6 +1779,11 @@
51
            continue;
52
        }
53
 
54
+       if (using_10_15_or_above && IsSecureEventInputEnabled()) {
55
+           plat->secure_input_activated = true;
56
+           return false;
57
+       }
58
+
59
        if (IOHIDDeviceGetValue(device, element, &value) !=
60
            kIOReturnSuccess) {
61
            i += 1;
62
obs-studio-25.0.3.tar.xz/libobs/obs-config.h -> obs-studio-25.0.4.tar.xz/libobs/obs-config.h Changed
10
 
1
@@ -41,7 +41,7 @@
2
  *
3
  * Reset to zero each major or minor version
4
  */
5
-#define LIBOBS_API_PATCH_VER 3
6
+#define LIBOBS_API_PATCH_VER 4
7
 
8
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
    ((major << 24) | (minor << 16) | patch)
10
obs-studio-25.0.3.tar.xz/plugins/decklink/decklink-output.cpp -> obs-studio-25.0.4.tar.xz/plugins/decklink/decklink-output.cpp Changed
11
 
1
@@ -60,6 +60,9 @@
2
 
3
    device.Set(deviceEnum->FindByHash(decklink->deviceHash));
4
 
5
+   if (!device)
6
+       return false;
7
+
8
    DeckLinkDeviceMode *mode = device->FindOutputMode(decklink->modeID);
9
 
10
    decklink->SetSize(mode->GetWidth(), mode->GetHeight());
11
obs-studio-25.0.3.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-25.0.4.tar.xz/plugins/obs-browser/CMakeLists.txt Changed
18
 
1
@@ -31,6 +31,16 @@
2
    endif()
3
 endif()
4
 
5
+if(UNIX AND NOT APPLE)
6
+   find_package(X11 REQUIRED)
7
+   if(NOT X11_FOUND)
8
+       message(STATUS "X11 Not found -- obs-browser plugin disabled.")
9
+       return()
10
+   endif()
11
+   include_directories("${X11_INCLUDE_DIR}")
12
+endif()
13
+
14
+
15
 configure_file(
16
    "${CMAKE_CURRENT_SOURCE_DIR}/browser-config.h.in"
17
    "${CMAKE_CURRENT_BINARY_DIR}/browser-config.h")
18
obs-studio-25.0.4.tar.xz/plugins/obs-browser/linux-keyboard-helpers.hpp Added
754
 
1
@@ -0,0 +1,752 @@
2
+#pragma once
3
+
4
+#define XK_3270
5
+#include <X11/keysym.h>
6
+#include <X11/XF86keysym.h>
7
+
8
+#ifndef VKEY_UNKNOWN
9
+
10
+#define VKEY_UNKNOWN 0
11
+
12
+// POSIX specific VKEYs. Note that as of Windows SDK 7.1, 0x97-9F, 0xD8-DA,
13
+// and 0xE8 are unassigned.
14
+#define VKEY_WLAN 0x97
15
+#define VKEY_POWER 0x98
16
+#define VKEY_BRIGHTNESS_DOWN 0xD8
17
+#define VKEY_BRIGHTNESS_UP 0xD9
18
+#define VKEY_KBD_BRIGHTNESS_DOWN 0xDA
19
+#define VKEY_KBD_BRIGHTNESS_UP 0xE8
20
+
21
+// Windows does not have a specific key code for AltGr. We use the unused 0xE1
22
+// (VK_OEM_AX) code to represent AltGr, matching the behaviour of Firefox on
23
+// Linux.
24
+#define VKEY_ALTGR 0xE1
25
+// Windows does not have a specific key code for Compose. We use the unused
26
+// 0xE6 (VK_ICO_CLEAR) code to represent Compose.
27
+#define VKEY_COMPOSE 0xE6
28
+
29
+// Left mouse button
30
+#ifndef VKEY_LBUTTON
31
+#define VKEY_LBUTTON 0x01
32
+#endif
33
+// Right mouse button
34
+#ifndef VKEY_RBUTTON
35
+#define VKEY_RBUTTON 0x02
36
+#endif
37
+// Middle mouse button (three-button mouse)
38
+#ifndef VKEY_MBUTTON
39
+#define VKEY_MBUTTON 0x04
40
+#endif
41
+#ifndef VKEY_XBUTTON1
42
+#define VKEY_XBUTTON1 0x05
43
+#endif
44
+#ifndef VKEY_XBUTTON2
45
+#define VKEY_XBUTTON2 0x06
46
+#endif
47
+
48
+#ifndef VKEY_BACK
49
+#define VKEY_BACK 0x08
50
+#endif
51
+#ifndef VKEY_TAB
52
+#define VKEY_TAB 0x09
53
+#endif
54
+#ifndef VKEY_CLEAR
55
+#define VKEY_CLEAR 0x0C
56
+#endif
57
+#ifndef VKEY_RETURN
58
+#define VKEY_RETURN 0x0D
59
+#endif
60
+#ifndef VKEY_SHIFT
61
+#define VKEY_SHIFT 0x10
62
+#endif
63
+#ifndef VKEY_CONTROL
64
+#define VKEY_CONTROL 0x11 // CTRL key
65
+#endif
66
+#ifndef VKEY_MENU
67
+#define VKEY_MENU 0x12 // ALT key
68
+#endif
69
+#ifndef VKEY_PAUSE
70
+#define VKEY_PAUSE 0x13 // PAUSE key
71
+#endif
72
+#ifndef VKEY_CAPITAL
73
+#define VKEY_CAPITAL 0x14 // CAPS LOCK key
74
+#endif
75
+#ifndef VKEY_KANA
76
+#define VKEY_KANA 0x15 // Input Method Editor (IME) Kana mode
77
+#endif
78
+#ifndef VKEY_HANGUL
79
+#define VKEY_HANGUL 0x15 // IME Hangul mode
80
+#endif
81
+#ifndef VKEY_JUNJA
82
+#define VKEY_JUNJA 0x17 // IME Junja mode
83
+#endif
84
+#ifndef VKEY_FINAL
85
+#define VKEY_FINAL 0x18 // IME final mode
86
+#endif
87
+#ifndef VKEY_HANJA
88
+#define VKEY_HANJA 0x19 // IME Hanja mode
89
+#endif
90
+#ifndef VKEY_KANJI
91
+#define VKEY_KANJI 0x19 // IME Kanji mode
92
+#endif
93
+#ifndef VKEY_ESCAPE
94
+#define VKEY_ESCAPE 0x1B // ESC key
95
+#endif
96
+#ifndef VKEY_CONVERT
97
+#define VKEY_CONVERT 0x1C // IME convert
98
+#endif
99
+#ifndef VKEY_NONCONVERT
100
+#define VKEY_NONCONVERT 0x1D // IME nonconvert
101
+#endif
102
+#ifndef VKEY_ACCEPT
103
+#define VKEY_ACCEPT 0x1E // IME accept
104
+#endif
105
+#ifndef VKEY_MODECHANGE
106
+#define VKEY_MODECHANGE 0x1F // IME mode change request
107
+#endif
108
+#ifndef VKEY_SPACE
109
+#define VKEY_SPACE 0x20 // SPACE key
110
+#endif
111
+#ifndef VKEY_PRIOR
112
+#define VKEY_PRIOR 0x21 // PAGE UP key
113
+#endif
114
+#ifndef VKEY_NEXT
115
+#define VKEY_NEXT 0x22 // PAGE DOWN key
116
+#endif
117
+#ifndef VKEY_END
118
+#define VKEY_END 0x23 // END key
119
+#endif
120
+#ifndef VKEY_HOME
121
+#define VKEY_HOME 0x24 // HOME key
122
+#endif
123
+#ifndef VKEY_LEFT
124
+#define VKEY_LEFT 0x25 // LEFT ARROW key
125
+#endif
126
+#ifndef VKEY_UP
127
+#define VKEY_UP 0x26 // UP ARROW key
128
+#endif
129
+#ifndef VKEY_RIGHT
130
+#define VKEY_RIGHT 0x27 // RIGHT ARROW key
131
+#endif
132
+#ifndef VKEY_DOWN
133
+#define VKEY_DOWN 0x28 // DOWN ARROW key
134
+#endif
135
+#ifndef VKEY_SELECT
136
+#define VKEY_SELECT 0x29 // SELECT key
137
+#endif
138
+#ifndef VKEY_PRINT
139
+#define VKEY_PRINT 0x2A // PRINT key
140
+#endif
141
+#ifndef VKEY_EXECUTE
142
+#define VKEY_EXECUTE 0x2B // EXECUTE key
143
+#endif
144
+#ifndef VKEY_SNAPSHOT
145
+#define VKEY_SNAPSHOT 0x2C // PRINT SCREEN key
146
+#endif
147
+#ifndef VKEY_INSERT
148
+#define VKEY_INSERT 0x2D // INS key
149
+#endif
150
+#ifndef VKEY_DELETE
151
+#define VKEY_DELETE 0x2E // DEL key
152
+#endif
153
+#ifndef VKEY_HELP
154
+#define VKEY_HELP 0x2F // HELP key
155
+#endif
156
+
157
+#define VKEY_0 0x30
158
+#define VKEY_1 0x31
159
+#define VKEY_2 0x32
160
+#define VKEY_3 0x33
161
+#define VKEY_4 0x34
162
+#define VKEY_5 0x35
163
+#define VKEY_6 0x36
164
+#define VKEY_7 0x37
165
+#define VKEY_8 0x38
166
+#define VKEY_9 0x39
167
+#define VKEY_A 0x41
168
+#define VKEY_B 0x42
169
+#define VKEY_C 0x43
170
+#define VKEY_D 0x44
171
+#define VKEY_E 0x45
172
+#define VKEY_F 0x46
173
+#define VKEY_G 0x47
174
+#define VKEY_H 0x48
175
+#define VKEY_I 0x49
176
+#define VKEY_J 0x4A
177
+#define VKEY_K 0x4B
178
+#define VKEY_L 0x4C
179
+#define VKEY_M 0x4D
180
+#define VKEY_N 0x4E
181
+#define VKEY_O 0x4F
182
+#define VKEY_P 0x50
183
+#define VKEY_Q 0x51
184
+#define VKEY_R 0x52
185
+#define VKEY_S 0x53
186
+#define VKEY_T 0x54
187
+#define VKEY_U 0x55
188
+#define VKEY_V 0x56
189
+#define VKEY_W 0x57
190
+#define VKEY_X 0x58
191
+#define VKEY_Y 0x59
192
+#define VKEY_Z 0x5A
193
+
194
+#define VKEY_LWIN 0x5B // Left Windows key (Microsoft Natural keyboard)
195
+
196
+#define VKEY_RWIN 0x5C // Right Windows key (Natural keyboard)
197
+
198
+#define VKEY_APPS 0x5D // Applications key (Natural keyboard)
199
+
200
+#define VKEY_SLEEP 0x5F // Computer Sleep key
201
+
202
+// Num pad keys
203
+#define VKEY_NUMPAD0 0x60
204
+#define VKEY_NUMPAD1 0x61
205
+#define VKEY_NUMPAD2 0x62
206
+#define VKEY_NUMPAD3 0x63
207
+#define VKEY_NUMPAD4 0x64
208
+#define VKEY_NUMPAD5 0x65
209
+#define VKEY_NUMPAD6 0x66
210
+#define VKEY_NUMPAD7 0x67
211
+#define VKEY_NUMPAD8 0x68
212
+#define VKEY_NUMPAD9 0x69
213
+#define VKEY_MULTIPLY 0x6A
214
+#define VKEY_ADD 0x6B
215
+#define VKEY_SEPARATOR 0x6C
216
+#define VKEY_SUBTRACT 0x6D
217
+#define VKEY_DECIMAL 0x6E
218
+#define VKEY_DIVIDE 0x6F
219
+
220
+#define VKEY_F1 0x70
221
+#define VKEY_F2 0x71
222
+#define VKEY_F3 0x72
223
+#define VKEY_F4 0x73
224
+#define VKEY_F5 0x74
225
+#define VKEY_F6 0x75
226
+#define VKEY_F7 0x76
227
+#define VKEY_F8 0x77
228
+#define VKEY_F9 0x78
229
+#define VKEY_F10 0x79
230
+#define VKEY_F11 0x7A
231
+#define VKEY_F12 0x7B
232
+#define VKEY_F13 0x7C
233
+#define VKEY_F14 0x7D
234
+#define VKEY_F15 0x7E
235
+#define VKEY_F16 0x7F
236
+#define VKEY_F17 0x80
237
+#define VKEY_F18 0x81
238
+#define VKEY_F19 0x82
239
+#define VKEY_F20 0x83
240
+#define VKEY_F21 0x84
241
+#define VKEY_F22 0x85
242
+#define VKEY_F23 0x86
243
+#define VKEY_F24 0x87
244
+
245
+#define VKEY_NUMLOCK 0x90
246
+#define VKEY_SCROLL 0x91
247
+#define VKEY_LSHIFT 0xA0
248
+#define VKEY_RSHIFT 0xA1
249
+#define VKEY_LCONTROL 0xA2
250
+#define VKEY_RCONTROL 0xA3
251
+#define VKEY_LMENU 0xA4
252
+#define VKEY_RMENU 0xA5
253
+
254
+#define VKEY_BROWSER_BACK 0xA6      // Windows 2000/XP: Browser Back key
255
+#define VKEY_BROWSER_FORWARD 0xA7   // Windows 2000/XP: Browser Forward key
256
+#define VKEY_BROWSER_REFRESH 0xA8   // Windows 2000/XP: Browser Refresh key
257
+#define VKEY_BROWSER_STOP 0xA9      // Windows 2000/XP: Browser Stop key
258
+#define VKEY_BROWSER_SEARCH 0xAA    // Windows 2000/XP: Browser Search key
259
+#define VKEY_BROWSER_FAVORITES 0xAB // Windows 2000/XP: Browser Favorites key
260
+#define VKEY_BROWSER_HOME 0xAC // Windows 2000/XP: Browser Start and Home key
261
+#define VKEY_VOLUME_MUTE 0xAD  // Windows 2000/XP: Volume Mute key
262
+#define VKEY_VOLUME_DOWN 0xAE  // Windows 2000/XP: Volume Down key
263
+#define VKEY_VOLUME_UP 0xAF    // Windows 2000/XP: Volume Up key
264
+#define VKEY_MEDIA_NEXT_TRACK 0xB0  // Windows 2000/XP: Next Track key
265
+#define VKEY_MEDIA_PREV_TRACK 0xB1  // Windows 2000/XP: Previous Track key
266
+#define VKEY_MEDIA_STOP 0xB2        // Windows 2000/XP: Stop Media key
267
+#define VKEY_MEDIA_PLAY_PAUSE 0xB3  // Windows 2000/XP: Play/Pause Media key
268
+#define VKEY_MEDIA_LAUNCH_MAIL 0xB4 // Windows 2000/XP: Start Mail key
269
+#define VKEY_MEDIA_LAUNCH_MEDIA_SELECT 0xB5 // Windows 2000/XP: Select Media key
270
+#define VKEY_MEDIA_LAUNCH_APP1 \
271
+   0xB6 // VKEY_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key
272
+#define VKEY_MEDIA_LAUNCH_APP2 \
273
+   0xB7 // VKEY_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key
274
+
275
+// VKEY_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard.
276
+// Windows 2000/XP: For the US standard keyboard, the ';:' key
277
+#define VKEY_OEM_1 0xBA
278
+
279
+// Windows 2000/XP: For any country/region, the '+' key
280
+#define VKEY_OEM_PLUS 0xBB
281
+
282
+// Windows 2000/XP: For any country/region, the ',' key
283
+#define VKEY_OEM_COMMA 0xBC
284
+
285
+// Windows 2000/XP: For any country/region, the '-' key
286
+#define VKEY_OEM_MINUS 0xBD
287
+
288
+// Windows 2000/XP: For any country/region, the '.' key
289
+#define VKEY_OEM_PERIOD 0xBE
290
+
291
+// VKEY_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard.
292
+// Windows 2000/XP: For the US standard keyboard, the '/?' key
293
+#define VKEY_OEM_2 0xBF
294
+
295
+// VKEY_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard.
296
+// Windows 2000/XP: For the US standard keyboard, the '`~' key
297
+#define VKEY_OEM_3 0xC0
298
+
299
+// VKEY_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard.
300
+// Windows 2000/XP: For the US standard keyboard, the '[{' key
301
+#define VKEY_OEM_4 0xDB
302
+
303
+// VKEY_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard.
304
+// Windows 2000/XP: For the US standard keyboard, the '\|' key
305
+#define VKEY_OEM_5 0xDC
306
+
307
+// VKEY_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard.
308
+// Windows 2000/XP: For the US standard keyboard, the ']}' key
309
+#define VKEY_OEM_6 0xDD
310
+
311
+// VKEY_OEM_7 (DE) Used for miscellaneous characters; it can vary by keyboard.
312
+// Windows 2000/XP: For the US standard keyboard, the
313
+// 'single-quote/double-quote' key
314
+#define VKEY_OEM_7 0xDE
315
+
316
+// VKEY_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard.
317
+#define VKEY_OEM_8 0xDF
318
+
319
+// VKEY_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the
320
+// backslash key on the RT 102-key keyboard
321
+#define VKEY_OEM_102 0xE2
322
+
323
+#define VKEY_OEM_BACKTAB 0xF5
324
+#define VKEY_OEM_FJ_TOUROKU 0x94
325
+#define VKEY_OEM_FJ_MASSHOU 0x93
326
+
327
+// Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
328
+#define VKEY_PROCESSKEY 0xE5
329
+
330
+// Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes.
331
+// The VKEY_PACKET key is the low word of a 32-bit Virtual Key value used for
332
+// non-keyboard input methods. For more information, see Remark in
333
+// KEYBDINPUT,SendInput, WM_KEYDOWN, and WM_KEYUP
334
+#define VKEY_PACKET 0xE7
335
+
336
+#define VKEY_ATTN 0xF6  // Attn key
337
+#define VKEY_CRSEL 0xF7 // CrSel key
338
+#define VKEY_EXSEL 0xF8 // ExSel key
339
+#define VKEY_EREOF 0xF9 // Erase EOF key
340
+#define VKEY_PLAY 0xFA  // Play key
341
+#define VKEY_ZOOM 0xFB  // Zoom key
342
+
343
+#define VKEY_NONAME 0xFC // Reserved for future use
344
+
345
+#define VKEY_PA1 0xFD // VKEY_PA1 (FD) PA1 key
346
+
347
+#define VKEY_OEM_CLEAR 0xFE // Clear key
348
+
349
+#endif // VKEY_UNKNOWN
350
+
351
+/* ------------------------------------------------------------------------- */
352
+
353
+static uint32_t KeyboardCodeFromXKeysym(unsigned int keysym)
354
+{
355
+   switch (keysym) {
356
+   case XK_BackSpace:
357
+       return VKEY_BACK;
358
+   case XK_Delete:
359
+   case XK_KP_Delete:
360
+       return VKEY_DELETE;
361
+   case XK_Tab:
362
+   case XK_KP_Tab:
363
+   case XK_ISO_Left_Tab:
364
+   case XK_3270_BackTab:
365
+       return VKEY_TAB;
366
+   case XK_Linefeed:
367
+   case XK_Return:
368
+   case XK_KP_Enter:
369
+   case XK_ISO_Enter:
370
+       return VKEY_RETURN;
371
+   case XK_Clear:
372
+   case XK_KP_Begin: // NumPad 5 without Num Lock, for crosbug.com/29169.
373
+       return VKEY_CLEAR;
374
+   case XK_KP_Space:
375
+   case XK_space:
376
+       return VKEY_SPACE;
377
+   case XK_Home:
378
+   case XK_KP_Home:
379
+       return VKEY_HOME;
380
+   case XK_End:
381
+   case XK_KP_End:
382
+       return VKEY_END;
383
+   case XK_Page_Up:
384
+   case XK_KP_Page_Up: // aka XK_KP_Prior
385
+       return VKEY_PRIOR;
386
+   case XK_Page_Down:
387
+   case XK_KP_Page_Down: // aka XK_KP_Next
388
+       return VKEY_NEXT;
389
+   case XK_Left:
390
+   case XK_KP_Left:
391
+       return VKEY_LEFT;
392
+   case XK_Right:
393
+   case XK_KP_Right:
394
+       return VKEY_RIGHT;
395
+   case XK_Down:
396
+   case XK_KP_Down:
397
+       return VKEY_DOWN;
398
+   case XK_Up:
399
+   case XK_KP_Up:
400
+       return VKEY_UP;
401
+   case XK_Escape:
402
+       return VKEY_ESCAPE;
403
+   case XK_Kana_Lock:
404
+   case XK_Kana_Shift:
405
+       return VKEY_KANA;
406
+   case XK_Hangul:
407
+       return VKEY_HANGUL;
408
+   case XK_Hangul_Hanja:
409
+       return VKEY_HANJA;
410
+   case XK_Kanji:
411
+       return VKEY_KANJI;
412
+   case XK_Henkan:
413
+       return VKEY_CONVERT;
414
+   case XK_Muhenkan:
415
+       return VKEY_NONCONVERT;
416
+   case XK_A:
417
+   case XK_a:
418
+       return VKEY_A;
419
+   case XK_B:
420
+   case XK_b:
421
+       return VKEY_B;
422
+   case XK_C:
423
+   case XK_c:
424
+       return VKEY_C;
425
+   case XK_D:
426
+   case XK_d:
427
+       return VKEY_D;
428
+   case XK_E:
429
+   case XK_e:
430
+       return VKEY_E;
431
+   case XK_F:
432
+   case XK_f:
433
+       return VKEY_F;
434
+   case XK_G:
435
+   case XK_g:
436
+       return VKEY_G;
437
+   case XK_H:
438
+   case XK_h:
439
+       return VKEY_H;
440
+   case XK_I:
441
+   case XK_i:
442
+       return VKEY_I;
443
+   case XK_J:
444
+   case XK_j:
445
+       return VKEY_J;
446
+   case XK_K:
447
+   case XK_k:
448
+       return VKEY_K;
449
+   case XK_L:
450
+   case XK_l:
451
+       return VKEY_L;
452
+   case XK_M:
453
+   case XK_m:
454
+       return VKEY_M;
455
+   case XK_N:
456
+   case XK_n:
457
+       return VKEY_N;
458
+   case XK_O:
459
+   case XK_o:
460
+       return VKEY_O;
461
+   case XK_P:
462
+   case XK_p:
463
+       return VKEY_P;
464
+   case XK_Q:
465
+   case XK_q:
466
+       return VKEY_Q;
467
+   case XK_R:
468
+   case XK_r:
469
+       return VKEY_R;
470
+   case XK_S:
471
+   case XK_s:
472
+       return VKEY_S;
473
+   case XK_T:
474
+   case XK_t:
475
+       return VKEY_T;
476
+   case XK_U:
477
+   case XK_u:
478
+       return VKEY_U;
479
+   case XK_V:
480
+   case XK_v:
481
+       return VKEY_V;
482
+   case XK_W:
483
+   case XK_w:
484
+       return VKEY_W;
485
+   case XK_X:
486
+   case XK_x:
487
+       return VKEY_X;
488
+   case XK_Y:
489
+   case XK_y:
490
+       return VKEY_Y;
491
+   case XK_Z:
492
+   case XK_z:
493
+       return VKEY_Z;
494
+
495
+   case XK_0:
496
+   case XK_1:
497
+   case XK_2:
498
+   case XK_3:
499
+   case XK_4:
500
+   case XK_5:
501
+   case XK_6:
502
+   case XK_7:
503
+   case XK_8:
504
+   case XK_9:
505
+       return static_cast<unsigned int>(VKEY_0 + (keysym - XK_0));
506
+
507
+   case XK_parenright:
508
+       return VKEY_0;
509
+   case XK_exclam:
510
+       return VKEY_1;
511
+   case XK_at:
512
+       return VKEY_2;
513
+   case XK_numbersign:
514
+       return VKEY_3;
515
+   case XK_dollar:
516
+       return VKEY_4;
517
+   case XK_percent:
518
+       return VKEY_5;
519
+   case XK_asciicircum:
520
+       return VKEY_6;
521
+   case XK_ampersand:
522
+       return VKEY_7;
523
+   case XK_asterisk:
524
+       return VKEY_8;
525
+   case XK_parenleft:
526
+       return VKEY_9;
527
+
528
+   case XK_KP_0:
529
+   case XK_KP_1:
530
+   case XK_KP_2:
531
+   case XK_KP_3:
532
+   case XK_KP_4:
533
+   case XK_KP_5:
534
+   case XK_KP_6:
535
+   case XK_KP_7:
536
+   case XK_KP_8:
537
+   case XK_KP_9:
538
+       return static_cast<unsigned int>(VKEY_NUMPAD0 +
539
+                        (keysym - XK_KP_0));
540
+
541
+   case XK_multiply:
542
+   case XK_KP_Multiply:
543
+       return VKEY_MULTIPLY;
544
+   case XK_KP_Add:
545
+       return VKEY_ADD;
546
+   case XK_KP_Separator:
547
+       return VKEY_SEPARATOR;
548
+   case XK_KP_Subtract:
549
+       return VKEY_SUBTRACT;
550
+   case XK_KP_Decimal:
551
+       return VKEY_DECIMAL;
552
+   case XK_KP_Divide:
553
+       return VKEY_DIVIDE;
554
+   case XK_KP_Equal:
555
+   case XK_equal:
556
+   case XK_plus:
557
+       return VKEY_OEM_PLUS;
558
+   case XK_comma:
559
+   case XK_less:
560
+       return VKEY_OEM_COMMA;
561
+   case XK_minus:
562
+   case XK_underscore:
563
+       return VKEY_OEM_MINUS;
564
+   case XK_greater:
565
+   case XK_period:
566
+       return VKEY_OEM_PERIOD;
567
+   case XK_colon:
568
+   case XK_semicolon:
569
+       return VKEY_OEM_1;
570
+   case XK_question:
571
+   case XK_slash:
572
+       return VKEY_OEM_2;
573
+   case XK_asciitilde:
574
+   case XK_quoteleft:
575
+       return VKEY_OEM_3;
576
+   case XK_bracketleft:
577
+   case XK_braceleft:
578
+       return VKEY_OEM_4;
579
+   case XK_backslash:
580
+   case XK_bar:
581
+       return VKEY_OEM_5;
582
+   case XK_bracketright:
583
+   case XK_braceright:
584
+       return VKEY_OEM_6;
585
+   case XK_quoteright:
586
+   case XK_quotedbl:
587
+       return VKEY_OEM_7;
588
+   case XK_ISO_Level5_Shift:
589
+       return VKEY_OEM_8;
590
+   case XK_Shift_L:
591
+   case XK_Shift_R:
592
+       return VKEY_SHIFT;
593
+   case XK_Control_L:
594
+   case XK_Control_R:
595
+       return VKEY_CONTROL;
596
+   case XK_Meta_L:
597
+   case XK_Meta_R:
598
+   case XK_Alt_L:
599
+   case XK_Alt_R:
600
+       return VKEY_MENU;
601
+   case XK_ISO_Level3_Shift:
602
+       return VKEY_ALTGR;
603
+   case XK_Multi_key:
604
+       return VKEY_COMPOSE;
605
+   case XK_Pause:
606
+       return VKEY_PAUSE;
607
+   case XK_Caps_Lock:
608
+       return VKEY_CAPITAL;
609
+   case XK_Num_Lock:
610
+       return VKEY_NUMLOCK;
611
+   case XK_Scroll_Lock:
612
+       return VKEY_SCROLL;
613
+   case XK_Select:
614
+       return VKEY_SELECT;
615
+   case XK_Print:
616
+       return VKEY_PRINT;
617
+   case XK_Execute:
618
+       return VKEY_EXECUTE;
619
+   case XK_Insert:
620
+   case XK_KP_Insert:
621
+       return VKEY_INSERT;
622
+   case XK_Help:
623
+       return VKEY_HELP;
624
+   case XK_Super_L:
625
+       return VKEY_LWIN;
626
+   case XK_Super_R:
627
+       return VKEY_RWIN;
628
+   case XK_Menu:
629
+       return VKEY_APPS;
630
+   case XK_F1:
631
+   case XK_F2:
632
+   case XK_F3:
633
+   case XK_F4:
634
+   case XK_F5:
635
+   case XK_F6:
636
+   case XK_F7:
637
+   case XK_F8:
638
+   case XK_F9:
639
+   case XK_F10:
640
+   case XK_F11:
641
+   case XK_F12:
642
+   case XK_F13:
643
+   case XK_F14:
644
+   case XK_F15:
645
+   case XK_F16:
646
+   case XK_F17:
647
+   case XK_F18:
648
+   case XK_F19:
649
+   case XK_F20:
650
+   case XK_F21:
651
+   case XK_F22:
652
+   case XK_F23:
653
+   case XK_F24:
654
+       return static_cast<unsigned int>(VKEY_F1 + (keysym - XK_F1));
655
+   case XK_KP_F1:
656
+   case XK_KP_F2:
657
+   case XK_KP_F3:
658
+   case XK_KP_F4:
659
+       return static_cast<unsigned int>(VKEY_F1 + (keysym - XK_KP_F1));
660
+
661
+   case XK_guillemotleft:
662
+   case XK_guillemotright:
663
+   case XK_degree:
664
+   // In the case of canadian multilingual keyboard layout, VKEY_OEM_102
665
+   // is assigned to ugrave key.
666
+   case XK_ugrave:
667
+   case XK_Ugrave:
668
+   case XK_brokenbar:
669
+       return VKEY_OEM_102; // international backslash key in 102
670
+           // keyboard.
671
+
672
+   // When evdev is in use, /usr/share/X11/xkb/symbols/inet maps F13-18
673
+   // keys to the special XF86XK symbols to support Microsoft Ergonomic
674
+   // keyboards: https://bugs.freedesktop.org/show_bug.cgi?id=5783 In
675
+   // Chrome, we map these X key symbols back to F13-18 since we don't
676
+   // have VKEYs for these XF86XK symbols.
677
+   case XF86XK_Tools:
678
+       return VKEY_F13;
679
+   case XF86XK_Launch5:
680
+       return VKEY_F14;
681
+   case XF86XK_Launch6:
682
+       return VKEY_F15;
683
+   case XF86XK_Launch7:
684
+       return VKEY_F16;
685
+   case XF86XK_Launch8:
686
+       return VKEY_F17;
687
+   case XF86XK_Launch9:
688
+       return VKEY_F18;
689
+   case XF86XK_Refresh:
690
+   case XF86XK_History:
691
+   case XF86XK_OpenURL:
692
+   case XF86XK_AddFavorite:
693
+   case XF86XK_Go:
694
+   case XF86XK_ZoomIn:
695
+   case XF86XK_ZoomOut:
696
+       // ui::AcceleratorGtk tries to convert the XF86XK_ keysyms on
697
+       // Chrome startup. It's safe to return VKEY_UNKNOWN here since
698
+       // ui::AcceleratorGtk also checks a Gdk keysym.
699
+       // http://crbug.com/109843
700
+       return VKEY_UNKNOWN;
701
+   // For supporting multimedia buttons on a USB keyboard.
702
+   case XF86XK_Back:
703
+       return VKEY_BROWSER_BACK;
704
+   case XF86XK_Forward:
705
+       return VKEY_BROWSER_FORWARD;
706
+   case XF86XK_Reload:
707
+       return VKEY_BROWSER_REFRESH;
708
+   case XF86XK_Stop:
709
+       return VKEY_BROWSER_STOP;
710
+   case XF86XK_Search:
711
+       return VKEY_BROWSER_SEARCH;
712
+   case XF86XK_Favorites:
713
+       return VKEY_BROWSER_FAVORITES;
714
+   case XF86XK_HomePage:
715
+       return VKEY_BROWSER_HOME;
716
+   case XF86XK_AudioMute:
717
+       return VKEY_VOLUME_MUTE;
718
+   case XF86XK_AudioLowerVolume:
719
+       return VKEY_VOLUME_DOWN;
720
+   case XF86XK_AudioRaiseVolume:
721
+       return VKEY_VOLUME_UP;
722
+   case XF86XK_AudioNext:
723
+       return VKEY_MEDIA_NEXT_TRACK;
724
+   case XF86XK_AudioPrev:
725
+       return VKEY_MEDIA_PREV_TRACK;
726
+   case XF86XK_AudioStop:
727
+       return VKEY_MEDIA_STOP;
728
+   case XF86XK_AudioPlay:
729
+       return VKEY_MEDIA_PLAY_PAUSE;
730
+   case XF86XK_Mail:
731
+       return VKEY_MEDIA_LAUNCH_MAIL;
732
+   case XF86XK_LaunchA: // F3 on an Apple keyboard.
733
+       return VKEY_MEDIA_LAUNCH_APP1;
734
+   case XF86XK_LaunchB: // F4 on an Apple keyboard.
735
+   case XF86XK_Calculator:
736
+       return VKEY_MEDIA_LAUNCH_APP2;
737
+   case XF86XK_WLAN:
738
+       return VKEY_WLAN;
739
+   case XF86XK_PowerOff:
740
+       return VKEY_POWER;
741
+   case XF86XK_MonBrightnessDown:
742
+       return VKEY_BRIGHTNESS_DOWN;
743
+   case XF86XK_MonBrightnessUp:
744
+       return VKEY_BRIGHTNESS_UP;
745
+   case XF86XK_KbdBrightnessDown:
746
+       return VKEY_KBD_BRIGHTNESS_DOWN;
747
+   case XF86XK_KbdBrightnessUp:
748
+       return VKEY_KBD_BRIGHTNESS_UP;
749
+
750
+       // TODO(sad): some keycodes are still missing.
751
+   }
752
+   return VKEY_UNKNOWN;
753
+}
754
obs-studio-25.0.3.tar.xz/plugins/obs-browser/obs-browser-source.cpp -> obs-studio-25.0.4.tar.xz/plugins/obs-browser/obs-browser-source.cpp Changed
54
 
1
@@ -28,6 +28,10 @@
2
 #include <thread>
3
 #include <mutex>
4
 
5
+#ifdef __linux__
6
+#include "linux-keyboard-helpers.hpp"
7
+#endif
8
+
9
 #ifdef USE_QT_LOOP
10
 #include <QEventLoop>
11
 #include <QThread>
12
@@ -294,13 +298,19 @@
13
 {
14
    uint32_t modifiers = event->modifiers;
15
    std::string text = event->text;
16
+#ifdef __linux__
17
+   uint32_t native_vkey = KeyboardCodeFromXKeysym(event->native_vkey);
18
+#else
19
    uint32_t native_vkey = event->native_vkey;
20
+#endif
21
+   uint32_t native_scancode = event->native_scancode;
22
+   uint32_t native_modifiers = event->native_modifiers;
23
 
24
    ExecuteOnBrowser(
25
        [=](CefRefPtr<CefBrowser> cefBrowser) {
26
            CefKeyEvent e;
27
            e.windows_key_code = native_vkey;
28
-           e.native_key_code = 0;
29
+           e.native_key_code = native_scancode;
30
 
31
            e.type = key_up ? KEYEVENT_KEYUP : KEYEVENT_RAWKEYDOWN;
32
 
33
@@ -311,13 +321,18 @@
34
            }
35
 
36
            //e.native_key_code = native_vkey;
37
-           e.modifiers = modifiers;
38
+           e.modifiers = native_modifiers;
39
 
40
            cefBrowser->GetHost()->SendKeyEvent(e);
41
            if (!text.empty() && !key_up) {
42
                e.type = KEYEVENT_CHAR;
43
+#ifdef __linux__
44
+               e.windows_key_code =
45
+                   KeyboardCodeFromXKeysym(e.character);
46
+#else
47
                e.windows_key_code = e.character;
48
-               e.native_key_code = native_vkey;
49
+#endif
50
+               e.native_key_code = native_scancode;
51
                cefBrowser->GetHost()->SendKeyEvent(e);
52
            }
53
        },
54
obs-studio-25.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c -> obs-studio-25.0.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c Changed
13
 
1
@@ -240,6 +240,11 @@
2
 #ifdef _WIN32
3
        if (get_win_ver_int() > 0x0601) {
4
            jim_nvenc_load();
5
+       } else {
6
+           // if on Win 7, new nvenc isn't available so there's
7
+           // no nvenc encoder for the user to select, expose
8
+           // the old encoder directly
9
+           nvenc_encoder_info.caps &= ~OBS_ENCODER_CAP_INTERNAL;
10
        }
11
 #endif
12
        obs_register_encoder(&nvenc_encoder_info);
13
obs-studio-25.0.3.tar.xz/plugins/obs-qsv11/QSV_Encoder_Internal.cpp -> obs-studio-25.0.4.tar.xz/plugins/obs-qsv11/QSV_Encoder_Internal.cpp Changed
9
 
1
@@ -240,6 +240,7 @@
2
        break;
3
    case MFX_RATECONTROL_LA_ICQ:
4
        m_mfxEncParams.mfx.ICQQuality = pParams->nICQQuality;
5
+       break;
6
    case MFX_RATECONTROL_LA_HRD:
7
        m_mfxEncParams.mfx.TargetKbps = pParams->nTargetBitRate;
8
        m_mfxEncParams.mfx.MaxKbps = pParams->nTargetBitRate;
9
obs-studio-25.0.3.tar.xz/plugins/win-capture/graphics-hook-ver.h -> obs-studio-25.0.4.tar.xz/plugins/win-capture/graphics-hook-ver.h Changed
10
 
1
@@ -13,7 +13,7 @@
2
 
3
 #define HOOK_VER_MAJOR 1
4
 #define HOOK_VER_MINOR 1
5
-#define HOOK_VER_PATCH 3
6
+#define HOOK_VER_PATCH 4
7
 
8
 #define STRINGIFY(s) #s
9
 #define MAKE_VERSION_NAME(major, minor, patch) \
10
obs-studio-25.0.3.tar.xz/plugins/win-capture/graphics-hook/vulkan-capture.c -> obs-studio-25.0.4.tar.xz/plugins/win-capture/graphics-hook/vulkan-capture.c Changed
106
 
1
@@ -1181,18 +1181,17 @@
2
 }
3
 
4
 static VkResult VKAPI OBS_CreateDevice(VkPhysicalDevice phy_device,
5
-                      const VkDeviceCreateInfo *cinfo,
6
+                      const VkDeviceCreateInfo *info,
7
                       const VkAllocationCallbacks *ac,
8
                       VkDevice *p_device)
9
 {
10
-   VkDeviceCreateInfo info = *cinfo;
11
    struct vk_inst_data *idata = get_inst_data(phy_device);
12
    struct vk_inst_funcs *ifuncs = &idata->funcs;
13
    struct vk_data *data = NULL;
14
 
15
    VkResult ret = VK_ERROR_INITIALIZATION_FAILED;
16
 
17
-   VkLayerDeviceCreateInfo *ldci = (void *)info.pNext;
18
+   VkLayerDeviceCreateInfo *ldci = (void *)info->pNext;
19
 
20
    /* -------------------------------------------------------- */
21
    /* step through chain until we get to the link info         */
22
@@ -1222,8 +1221,7 @@
23
    PFN_vkCreateDevice createFunc =
24
        (PFN_vkCreateDevice)gipa(VK_NULL_HANDLE, "vkCreateDevice");
25
 
26
-   ret = createFunc(phy_device, idata->valid ? &info : cinfo, ac,
27
-            p_device);
28
+   ret = createFunc(phy_device, info, ac, p_device);
29
    if (ret != VK_SUCCESS) {
30
        goto fail;
31
    }
32
@@ -1291,6 +1289,7 @@
33
    if (funcs_not_found) {
34
        goto fail;
35
    }
36
+
37
    if (!idata->valid) {
38
        flog("instance not valid");
39
        goto fail;
40
@@ -1320,11 +1319,15 @@
41
    if (!data)
42
        return;
43
 
44
-   for (uint32_t fam_idx = 0; fam_idx < _countof(data->cmd_pools);
45
-        fam_idx++) {
46
-       struct vk_cmd_pool_data *pool_data = &data->cmd_pools[fam_idx];
47
-       if (pool_data->cmd_pool != VK_NULL_HANDLE) {
48
-           vk_shtex_destroy_cmd_pool_objects(data, pool_data);
49
+   if (data->valid) {
50
+       for (uint32_t fam_idx = 0; fam_idx < _countof(data->cmd_pools);
51
+            fam_idx++) {
52
+           struct vk_cmd_pool_data *pool_data =
53
+               &data->cmd_pools[fam_idx];
54
+           if (pool_data->cmd_pool != VK_NULL_HANDLE) {
55
+               vk_shtex_destroy_cmd_pool_objects(data,
56
+                                 pool_data);
57
+           }
58
        }
59
    }
60
 
61
@@ -1339,15 +1342,17 @@
62
               const VkAllocationCallbacks *ac, VkSwapchainKHR *p_sc)
63
 {
64
    struct vk_data *data = get_device_data(device);
65
-   struct vk_device_funcs *funcs = &data->funcs;
66
 
67
    VkSwapchainCreateInfoKHR info = *cinfo;
68
-   info.imageUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
69
+   if (data->valid)
70
+       info.imageUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
71
 
72
+   struct vk_device_funcs *funcs = &data->funcs;
73
    VkResult res = funcs->CreateSwapchainKHR(device, &info, ac, p_sc);
74
    debug_res("CreateSwapchainKHR", res);
75
-   if (res != VK_SUCCESS)
76
+   if ((res != VK_SUCCESS) || !data->valid)
77
        return res;
78
+
79
    VkSwapchainKHR sc = *p_sc;
80
 
81
    uint32_t count = 0;
82
@@ -1379,14 +1384,16 @@
83
    struct vk_data *data = get_device_data(device);
84
    struct vk_device_funcs *funcs = &data->funcs;
85
 
86
-   struct vk_swap_data *swap = get_swap_data(data, sc);
87
-   if (swap) {
88
-       if (data->cur_swap == swap) {
89
-           vk_shtex_free(data);
90
+   if (data->valid) {
91
+       struct vk_swap_data *swap = get_swap_data(data, sc);
92
+       if (swap) {
93
+           if (data->cur_swap == swap) {
94
+               vk_shtex_free(data);
95
+           }
96
+
97
+           swap->sc = VK_NULL_HANDLE;
98
+           swap->hwnd = NULL;
99
        }
100
-
101
-       swap->sc = VK_NULL_HANDLE;
102
-       swap->hwnd = NULL;
103
    }
104
 
105
    funcs->DestroySwapchainKHR(device, sc, ac);
106