XBMC crash with vaapi vdpau

Anonymous swell.k at gmail.com
Mon Jan 10 00:42:31 UTC 2011


Mickaël Maillot <mickael.maillot at gmail.com> writes:

> i recompiled libva & vdpau-video WITH_DEBUG
> but no more usefull information in bt:
> (gdb) bt
> #0  0x0000000812e14349 in __vaDriverInit_0_31 () from
> /usr/local/lib/va/nvidia_drv_video.so
> #1  0x0000000812e11794 in __vaDriverInit_0_31 () from
> /usr/local/lib/va/nvidia_drv_video.so
> #2  0x0000000812e119a7 in __vaDriverInit_0_31 () from
> /usr/local/lib/va/nvidia_drv_video.so
> #3  0x0000000812e11ad2 in __vaDriverInit_0_31 () from
> /usr/local/lib/va/nvidia_drv_video.so
> #4  0x0000000801344b63 in vaCopySurfaceGLX () from /usr/local/lib/libva-glx.so.1
> #5  0x000000080134315f in vaCopySurfaceGLX () from /usr/local/lib/libva-glx.so.1

libva/vdpau-video are still compiled without symbols since you've likely
ignored the note about empty STRIP in my previous message. Try

  $ make install WITH_DEBUG= STRIP= DEBUG_FLAGS='-O0 -ggdb3'

FYI, I have a different crash in vdpau-video driver.

  Core was generated by `xbmc.bin'.
  Program terminated with signal 11, Segmentation fault.
  #0  0x000000080d04d6ce in gl_vdpau_bind_surface (s=0x0) at utils_glx.c:1437
  1437        if (s->is_bound)

  (gdb) i thr
  * 9 Thread 80dc07400 (LWP 100736/initial thread)  0x000000080d04d6ce in gl_vdpau_bind_surface (s=0x0) at utils_glx.c:1437
    8 Thread 80410b800 (LWP 101992/xbmc.bin)  0x000000080aae961c in select () at select.S:3
    7 Thread 80410b000 (LWP 101993/xbmc.bin)  0x000000080aa8acac in poll () at poll.S:3
    6 Thread 80410ac00 (LWP 101994/xbmc.bin)  0x000000080aae961c in select () at select.S:3
    5 Thread 80410a800 (LWP 101995/xbmc.bin)  0x000000080aacef7c in nanosleep () at nanosleep.S:3
    4 Thread 80410e400 (LWP 101996/xbmc.bin)  0x000000080ba924ec in _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37
    3 Thread 804108000 (LWP 101997/xbmc.bin)  0x000000080aacef7c in nanosleep () at nanosleep.S:3
    2 Thread 80410a400 (LWP 101998/xbmc.bin)  0x000000080aae961c in select () at select.S:3
    1 Thread 804108c00 (LWP 101386/xbmc.bin)  0x000000080aae961c in select () at select.S:3

  (gdb) bt
  #0  0x000000080d04d6ce in gl_vdpau_bind_surface (s=0x0) at utils_glx.c:1437
  #1  0x000000080d04aca7 in begin_render_glx_surface (driver_data=0x814c15d00, obj_glx_surface=0x814c16c48) at vdpau_video_glx.c:619
  #2  0x000000080d04af4d in copy_glx_surface (driver_data=0x814c15d00, obj_glx_surface=0x814c16c48, obj_surface=0x814c16250, flags=32) at vdpau_video_glx.c:740
  #3  0x000000080d04b086 in vdpau_CopySurfaceGLX (ctx=0x814fe91c0, gl_surface=0x814c16c48, surface=50331649, flags=32) at vdpau_video_glx.c:785
  #4  0x000000080ce335a0 in vaCopySurfaceGLX_impl_driver (ctx=0x814fe91c0, gl_surface=0x814c16c48, surface=50331649, flags=32) at va_glx_impl.c:842
  #5  0x000000080ce31c6b in vaCopySurfaceGLX (dpy=0x814c61080, gl_surface=0x814c16c48, surface=50331649, flags=32) at va_glx.c:163
  #6  0x0000000000ad2e8f in CLinuxRendererGL::UploadVAAPITexture (this=0x814e80600, index=0) at LinuxRendererGL.cpp:2433
  #7  0x0000000000ad24fe in CLinuxRendererGL::Render (this=0x814e80600, flags=<value optimized out>, renderBuffer=0) at LinuxRendererGL.cpp:1283
  #8  0x0000000000acdcfe in CLinuxRendererGL::RenderUpdate (this=0x814e80600, clear=false, flags=64, alpha=<value optimized out>) at LinuxRendererGL.cpp:835
  #9  0x0000000000acc327 in CXBMCRenderManager::RenderUpdate (this=0x1317d08, clear=false, flags=0, alpha=255) at RenderManager.cpp:254
  #10 0x0000000000b55cc7 in CGUIVideoControl::Render (this=0x81346ed80) at GUIVideoControl.cpp:61
  #11 0x0000000000afae27 in CGUIControl::DoRender (this=0x81346ed80, currentTime=<value optimized out>) at GUIControl.cpp:147
  #12 0x0000000000b0d59b in CGUIControlGroup::Render (this=0x813635b00) at GUIControlGroup.cpp:114
  #13 0x0000000000b5775d in CGUIWindow::Render (this=0x813635b00) at GUIWindow.cpp:329
  #14 0x0000000000b62b13 in CGUIWindowManager::Render (this=0x131cd80) at GUIWindowManager.cpp:509
  #15 0x000000000071a13b in CApplication::RenderNoPresent (this=0x1318158) at Application.cpp:1809
  #16 0x000000000070e979 in CApplication::Render (this=0x1318158) at Application.cpp:2046
  #17 0x00000000009a68c1 in CXBApplicationEx::Run (this=0x1318158) at XBApplicationEx.cpp:138
  #18 0x00000000009a706c in main (argc=2, argv=0x7ffffffedf38) at xbmc.cpp:174

However, my ports tree is littered with hacks, some are XBMC related[1]
and some are not. Apps break often. So, it's probably local but

  $ mplayer -vo vaapi:gl -va vaapi

works fine which implies that VA/GLX should, too. And XBMC doesn't
crash with VDPAU_VIDEO_GL_INTEROP=0 or LIBVA_DRIVER_NAME=dummy.

[1] python27 + build hacks for xbmc port - http://pastebin.com/RdgTW8QS

> it crash when i want to read a 1080p mkv file which run fine with VDPAU.
>
> vainfo run fine:
> libva: libva version 0.31.1
> Xlib:  extension "XFree86-DRI" missing on display ":0.0".
> libva: va_getDriverName() returns 0
> libva: Trying to open /usr/local/lib/va/nvidia_drv_video.so
> libva: va_openDriver() returns 0
> vainfo: VA API version: 0.31
> vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for
> VA-API - 0.7.3.pre4
> vainfo: Supported profile and entrypoints
>       VAProfileMPEG2Simple            :	VAEntrypointVLD
>       VAProfileMPEG2Main              :	VAEntrypointVLD
>       VAProfileH264Main               :	VAEntrypointVLD
>       VAProfileH264High               :	VAEntrypointVLD
>       VAProfileVC1Simple              :	VAEntrypointVLD
>       VAProfileVC1Main                :	VAEntrypointVLD
>       VAProfileVC1Advanced            :	VAEntrypointVLD

Just a guess but since vdpau-video may crash on cards that don't support
VDPAU features it may as well crash on "certain" resolutions, too, e.g.

  VDPAU FEATURES NOTE 1 (from nvidia-driver about feature set "B")

  GPUs with this note may not support H.264 streams with the following widths:
  49, 54, 59, 64, 113, 118, 123, 128 macroblocks (769-784, 849-864, 929-944,
  1009-1024, 1793-1808, 1873-1888, 1953-1968, 2033-2048 pixels).

Not that I know what card you have nor the video resolution of the
tested file. So...

- can you play the file with VDPAU but without falling back[1], e.g. to
  software decoder?

- can you play the file with VAAPI in anything else, e.g. mplayer[2], vlc?

- does running with VDPAU_VIDEO_DEBUG=1 produce any debug messages
  besides nvidia-driver version?

[1] XBMC plays video fine with LIBVA_DRIVER_NAME=dummy unlike mplayer and vlc
[2] vaapi hack for mplayer port - http://pastebin.com/A1tcNZM0

> but vatest_10 and 11 failed:
> *** vatest_10: Create and destroy buffers
> libva: libva version 0.31.1
> Xlib:  extension "XFree86-DRI" missing on display ":0.0".
> libva: va_getDriverName() returns 0
> libva: Trying to open /usr/local/lib/va/nvidia_drv_video.so
> libva: va_openDriver() returns 0
> Assertion failed: (VA_STATUS_SUCCESS == va_status), function test,
> file test_10.c, line 112.
> *** vatest_11: Map and unmap buffers
> libva: libva version 0.31.1
> Xlib:  extension "XFree86-DRI" missing on display ":0.0".
> libva: va_getDriverName() returns 0
> libva: Trying to open /usr/local/lib/va/nvidia_drv_video.so
> libva: va_openDriver() returns 0
> --- vaCreateBuffer created buffer 04000000 of type 0
> --- vaCreateBuffer created buffer 04000001 of type 1
> --- vaCreateBuffer created buffer 04000002 of type 2
> Assertion failed: (VA_STATUS_SUCCESS == va_status), function test,
> file test_11.c, line 129.

They do fail on my card (0x0622), too. And asserts are disabled unless
you compile WITH_DEBUG.


More information about the freebsd-multimedia mailing list