nowrep / obs-vkcapture

OBS Linux Vulkan/OpenGL game capture
GNU General Public License v2.0
524 stars 25 forks source link

The plugin displays a single application for several outputs #178

Open ogmkp opened 11 months ago

ogmkp commented 11 months ago

Describe the bug If there are several outputs on a program, the plugin displays only one program name.

Screenshots or video In practice, I tested on OBS with 3 outputs (preview, program and a projector). The plugin menu only displays one program, "obs", and I have to switch between "capture any window except obs" and "obs" to get the right capture randomly. For example, to get the projector, I have to switch a dozen times because it will display the preview, the program or the projector randomly.

System (please complete the following information):

OBS log:

16:08:34.923: Using EGL/X11
16:08:34.923: CPU Name: Intel(R) Pentium(R) CPU G4560 @ 3.50GHz
16:08:34.923: CPU Speed: 3499.998MHz
16:08:34.923: Physical Cores: 2, Logical Cores: 4
16:08:34.923: Physical Memory: 15955MB Total, 6387MB Free
16:08:34.923: Kernel Version: Linux 6.1.0-13-amd64
16:08:34.923: Distribution: "Debian GNU/Linux" "12"
16:08:34.923: Desktop Environment: MATE (lightdm-xsession)
16:08:34.923: Session Type: x11
16:08:34.923: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1
16:08:34.924: Qt Version: 6.4.2 (runtime), 6.4.2 (compiled)
16:08:34.924: Portable mode: false
16:08:34.955: OBS 29.1.3 (linux)
16:08:34.955: ---------------------------------
16:08:34.964: ---------------------------------
16:08:34.964: audio settings reset:
16:08:34.964:   samples per sec: 48000
16:08:34.964:   speakers:        2
16:08:34.964:   max buffering:   21 milliseconds
16:08:34.964:   buffering type:  fixed
16:08:34.973: ---------------------------------
16:08:34.973: Initializing OpenGL...
16:08:34.986: Enabling fixed audio buffering, total audio buffering is now 21 milliseconds
16:08:35.052: Loading up OpenGL on adapter AMD AMD Radeon R9 380 Series (tonga, LLVM 15.0.6, DRM 3.49, 6.1.0-13-amd64)
16:08:35.052: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 22.3.6, shading language 4.60
16:08:35.109: ---------------------------------
16:08:35.109: video settings reset:
16:08:35.109:   base resolution:   1920x1080
16:08:35.109:   output resolution: 1920x1080
16:08:35.109:   downscale filter:  Bicubic
16:08:35.109:   fps:               60/1
16:08:35.109:   format:            NV12
16:08:35.109:   YUV mode:          Rec. 709/Partial
16:08:35.110: NV12 texture support not available
16:08:35.110: P010 texture support not available
16:08:35.112: Audio monitoring device:
16:08:35.112:   name: Par défaut
16:08:35.112:   id: default
16:08:35.112: ---------------------------------
16:08:35.128: Failed to load 'en-US' text for module: 'decklink-captions.so'
16:08:35.139: Failed to load 'en-US' text for module: 'decklink-output-ui.so'
16:08:35.149: A DeckLink iterator could not be created.  The DeckLink drivers may not be installed
16:08:35.149: Failed to initialize module 'decklink.so'
16:08:35.408: [pipewire] No captures available
16:08:35.455: [obs-browser]: Version 2.21.1
16:08:35.455: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled)
16:08:35.737: VAAPI: API version 1.17
16:08:35.742: FFmpeg VAAPI H264 encoding supported
16:08:35.758: FFmpeg VAAPI HEVC encoding not supported
16:08:35.842: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1)
16:08:35.842: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.4.2 | Qt version (run-time): 6.4.2
16:08:35.842: [obs-websocket] [obs_module_load] Linked ASIO Version: 102201
16:08:35.848: [obs-websocket] [obs_module_load] Module loaded.
16:08:35.899: [vlc-video]: VLC 3.0.18 Vetinari found, VLC video source enabled
16:08:35.952: [linux-vkcapture] plugin loaded successfully (version 1.4.4)
16:08:36.014: [obs-ndi] obs_module_load: hello ! (version 4.11.1)
16:08:36.014: [obs-ndi] load_ndilib: Trying '/usr/lib/libndi.so.5'
16:08:36.014: [obs-ndi] load_ndilib: Found NDI library at '/usr/lib/libndi.so.5'
16:08:36.015: [obs-ndi] load_ndilib: NDI runtime loaded successfully
16:08:36.015: [obs-ndi] load_ndilib: NDIlib_v5_load found
16:08:36.015: [obs-ndi] obs_module_load: NDI library initialized successfully (NDI SDK LINUX 12:45:43 Apr 10 2023 5.5.4)
16:08:36.119: ---------------------------------
16:08:36.119:   Loaded Modules:
16:08:36.120:     obs-ndi.so
16:08:36.120:     linux-vkcapture.so
16:08:36.120:     vlc-video.so
16:08:36.120:     text-freetype2.so
16:08:36.120:     rtmp-services.so
16:08:36.120:     obs-x264.so
16:08:36.120:     obs-websocket.so
16:08:36.120:     obs-vst.so
16:08:36.120:     obs-transitions.so
16:08:36.120:     obs-outputs.so
16:08:36.120:     obs-libfdk.so
16:08:36.120:     obs-filters.so
16:08:36.120:     obs-ffmpeg.so
16:08:36.120:     obs-browser.so
16:08:36.120:     linux-v4l2.so
16:08:36.120:     linux-pulseaudio.so
16:08:36.120:     linux-pipewire.so
16:08:36.120:     linux-capture.so
16:08:36.120:     image-source.so
16:08:36.120:     frontend-tools.so
16:08:36.120:     decklink-output-ui.so
16:08:36.120:     decklink-captions.so
16:08:36.120: ---------------------------------
16:08:36.120: ==== Startup complete ===============================================
16:08:36.142: Switched to Preview/Program mode
16:08:36.142: ------------------------------------------------
16:08:36.181: All scene data cleared
16:08:36.181: ------------------------------------------------
16:08:36.186: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.65) 15.0.0'
16:08:36.186: pulse-input: Audio format: s32le, 48000 Hz, 2 channels
16:08:36.186: pulse-input: Started recording from 'alsa_output.pci-0000_01_00.1.hdmi-stereo-extra3.monitor'
16:08:36.186: [Loaded global audio device]: 'Audio du Bureau'
16:08:36.207: started A/V threads for source ''
16:08:36.207: A/V thread for 'Source NDI™' started
16:08:36.208: [window-capture: 'Capture de la fenêtre (Xcomposite)'] update settings:
16:08:36.208:   title: unknown
16:08:36.208:   class: unknown
16:08:36.208: 
16:08:36.209: [Media Source 'Source média']: settings:
16:08:36.209:   input:                   /home/ogar/Téléchargements/met.webm
16:08:36.209:   input_format:            (null)
16:08:36.209:   speed:                   100
16:08:36.209:   is_looping:              yes
16:08:36.209:   is_linear_alpha:         no
16:08:36.209:   is_hw_decoding:          yes
16:08:36.209:   is_clear_on_media_end:   yes
16:08:36.209:   restart_on_activate:     yes
16:08:36.209:   close_when_inactive:     no
16:08:36.209:   full_decode:             no
16:08:36.209:   ffmpeg_options:          
16:08:36.210: Switched to scene 'Scène 5'
16:08:36.212: save_or_load_event_callback 0, 973836068
16:08:36.248: unknown mute when setting: ''
16:08:36.257: dock: 260 260 fs: 10
16:08:36.257: target: 234 0
16:08:36.259: ------------------------------------------------
16:08:36.259: Loaded scenes:
16:08:36.260: - scene 'Scène 2 2':
16:08:36.260:     - source: 'Source média' (ffmpeg_source)
16:08:36.260: - scene 'Scène 5':
16:08:36.260:     - source: 'Source NDI™' (ndi_source)
16:08:36.260:     - source: 'Texte (FreeType 2)' (text_ft2_source_v2)
16:08:36.260: - scene 'Scène 7':
16:08:36.260:     - source: 'Capture de la fenêtre (Xcomposite)' (xcomposite_input)
16:08:36.260:     - source: 'Capture du jeu' (vkcapture-source)
16:08:36.260: ------------------------------------------------
16:08:41.121: User switched to scene 'Scène 7'
16:08:42.145: User switched to scene 'Scène 5'
16:08:49.156: [linux-vkcapture] Client 1 connected (pid=34174)
16:08:54.793: User switched to scene 'Scène 2 2'
16:08:55.868: User switched to scene 'Scène 7'
16:08:57.269: User switched to scene 'Scène 2 2'
16:08:58.089: User switched to scene 'Scène 7'
16:09:04.793: save_or_load_event_callback 1, 973836068
16:09:04.794: obs save event
16:09:10.246: [linux-vkcapture] Creating texture from dmabuf 859x566 modifier:72057594037927935
16:09:10.246: [linux-vkcapture]  [0] fd:71 stride:4096 offset:0
16:09:13.279: [linux-vkcapture] Creating texture from dmabuf 859x566 modifier:72057594037927935
16:09:13.279: [linux-vkcapture]  [0] fd:71 stride:4096 offset:0
16:09:16.296: [linux-vkcapture] Creating texture from dmabuf 859x566 modifier:72057594037927935
16:09:16.296: [linux-vkcapture]  [0] fd:71 stride:4096 offset:0
16:09:19.995: save_or_load_event_callback 1, 973836068
16:09:19.995: obs save event

Game log:

[obs-vkcapture] Texture GL_RGBA 859x566
[obs-vkcapture] ------------------ opengl capture started ------------------
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] Texture GL_RGBA 859x566
[obs-vkcapture] ------------------ opengl capture started ------------------
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] Texture GL_RGBA 859x566
[obs-vkcapture] ------------------ opengl capture started ------------------

Thanks for this project !

nowrep commented 11 months ago

Yes, multiple windows from one application aren't really supported. Games usually only have one window.

What exactly is your usecase?

ogmkp commented 11 months ago

I'm using a second OBS as a playout and I wanted to get away from using the less efficient xcomposite window capture.

Maksym-L commented 2 months ago

@nowrep I am having the same issue with Godot.

When I run Godot as:

env OBS_VKCAPTURE=1 godot

Then I run my game from Godot. I got two "godot" entries for it, and it is not possible to select the game output Screenshot from 2024-07-23 11-32-18

My use case is to record games in progress for the dev log/streams or to share.