Ошибка Python "ожидается LP_SDL_Window" при попытке "SDL_GetWindowID" - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь получить идентификатор окна окна SDL, чтобы передать VLC, чтобы он мог воспроизводить видео в окне.

Будучи новичком в Python, я смутно осознаю, что это должноделать с преобразованиями типов переменных, чтобы хорошо играть с SDL, и использовать правильную привязку Python ...

Строка с ошибкой: "win_id = SDL_GetWindowID (window)"

Вот мой код;

import sys
import sdl2.ext
import vlc

import ctypes
from sdl2 import *

RESOURCES = sdl2.ext.Resources(__file__, "resources")
sdl2.ext.init()

window = sdl2.ext.Window("Hello World!", size=(640, 480))
window.show()

factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("hello.bmp"))

spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)


vlcInstance = vlc.Instance("--no-xlib")
player = vlcInstance.media_player_new()
win_id = SDL_GetWindowID(window)
player.set_xwindow(win_id)
player.set_mrl("agro.mp4")
player.play()

processor = sdl2.ext.TestEventProcessor()
processor.run(window)
sdl2.ext.quit()

1 Ответ

0 голосов
/ 12 февраля 2019

То, что вы получаете с SDL_GetWindowID, это внутренний идентификатор окна SDL, на который он сам ссылается, например, в событиях.Вам нужен идентификатор окна X11, который вы можете получить через SDL_GetWindowWMInfo .Это, однако, требует некоторой хитрости с версионированием SDL, например (я не уверен, что это безопасно называть это в python, если версия SDL изменяется, но pysdl2 не обновляется):

wminfo = SDL_SysWMinfo();
SDL_GetVersion(wminfo.version);
if(SDL_GetWindowWMInfo(window.window, wminfo) == 0):
    print("can't get SDL WM info");
    sys.exit(1);

win_id = wminfo.info.x11.window;

Затем используйте это win_idподать на vlc.

...