nowrep / obs-vkcapture

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

The plugin displays a single application for several outputs #178

Open ogmkp opened 1 year ago

ogmkp commented 1 year 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 1 year ago

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

What exactly is your usecase?

ogmkp commented 1 year 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 3 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.