vliaskov

kmscube -V on i965 segfault

Oct 1st, 2018
86
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. kmscube -V /opt/Videos/test.mp4
  2.  
  3. (gdb) bt
  4. #0 0x00007f64487eaebf in __memmove_avx_unaligned_erms () at /lib64/libc.so.6
  5. #1 0x0000000000409c61 in buf_to_fd (gbm=<optimized out>, ptr=0x7f64223710a0, size=1) at gst-decoder.c:363
  6. #2 0x0000000000409c61 in buffer_to_image (buf=0x7f643019d8e0, dec=0x1aa7ff0) at gst-decoder.c:428
  7. #3 0x0000000000409c61 in video_frame (dec=0x1aa7ff0) at gst-decoder.c:527
  8. #4 0x0000000000408b58 in draw_cube_video (i=0) at cube-video.c:234
  9. #5 0x0000000000408120 in legacy_run (gbm=0x571760 <gbm>, egl=0x571800 <gl>) at drm-legacy.c:76
  10. #6 0x0000000000404dd8 in main (argc=<optimized out>, argv=<optimized out>) at kmscube.c:162
  11.  
  12. Digging a bit deeper:
  13. gbm_bo_create() fails in gst-decoder.c
  14.  
  15. The i965 fail path is:
  16. intel_create_image_common ->
  17. isl_surf_init_s ->
  18. isl_calc_row_pitch ->
  19.  
  20. Specifically this happens: !pitch_in_range(row_pitch, RENDER_SURFACE_STATE_SurfacePitch_bits(dev->info))
  21.  
  22. An i420 1920x1080 video frame is 3110400 bytes long (1920x1080 Y plane + 2 * 1920/1080/4, for UV subsampled planes).
  23. The width and height passed into the isl_surf_init_info surf_into is width=3110400 and height=1.
  24. So the 3110400 pitch is larger than the 2^18=256K (from RENDER_SURFACE_STATE_SurfacePitch_bits == 18) maximum pitch.
  25.  
  26. Should the bo object in gst-decoder.c be created with different dimensions? E.g. as in cube-tex.c ?
  27.  
  28. same kmsube -V with same video file works fine on other GPUs (e.g. amdgpu).
  29.  
  30. I am not sure if the problem is:
  31. - a i965 hw limitation i.e. only smaller video frames can be used as texture
  32. - a i965 driver issue or
  33. - kmscube's gst-decoder issue.
RAW Paste Data Copied