Summary: | Having issue playing video in fullscreen mode in wayland weston with different platform. | ||
---|---|---|---|
Product: | libva | Reporter: | Lim Siew Hoon <siew.hoon.lim> |
Component: | intel | Assignee: | PengChen <peng.c.chen> |
Status: | RESOLVED WONTFIX | QA Contact: | Sean V Kelley <seanvk> |
Severity: | normal | ||
Priority: | medium | ||
Version: | unspecified | ||
Hardware: | x86-64 (AMD64) | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Lim Siew Hoon
2015-11-04 11:17:29 UTC
in snb_hw_codec_info struct, I changed to has_vpp=0 to force it to using software video postprocessing. No longer able to reproduce the the issue. And I'm able to play the video with fullscreen mode as well using same video clip that always causing the segmentation fault in wayland weston environment. Look like the the VPP in VA driver side didn't handle it correctly for SNB platform. In BSW platform, able to play the video in fullscreen mode without segmentation fault, but the video rendering out with multiple vertical green line bar. Using the same video clip, same VA driver version, same gstreamer framework and same Wayland and Weston version in FC22. For BSW platform, playing video in fullscreen will observe the vertical green line issue able to fix it by make sure the dest_x and dest_y is align by 16 in gen8_pp_plx_avs_initialize function . Since the dest_w and dest_h is aligning with 16 too. pp_avs_context->dest_x = ALIGN(dst_rect->x, 16); pp_avs_context->dest_y = ALIGN(dst_rect->y, 16); pp_avs_context->dest_w = ALIGN(dst_rect->width, 16); pp_avs_context->dest_h = ALIGN(dst_rect->height, 16); pp_avs_context->src_w = src_rect->width; pp_avs_context->src_h = src_rect->height; pp_avs_context->horiz_range = (float)src_rect->width / src_width; int dw = (pp_avs_context->src_w - 1) / 16 + 1; For SNB platform, playing video causing segmentation fault looks like another issue need to debug. For SNB plaform, the segmentation fault is causing by the dst_obj->bo is NULL. And decide to fix it by add if checking for dst_obj_surface->bo is NULL return VA_STATUS_ERROR_UNIMPLEMENTED in i965_proc_picture_fast function. By found out by return VA_STATUS_ERROR_UNIMPLEMENTED will causing the GPU hang in ring during video playback halfway. With test by recommend by Yakui to disable the PPGTT, no more GPU hang issue. We previous also tested by using return VA_STATUS_ERROR_INVALID_SURFACE for checking only dst_obj->bo is NULL, it is working fine without purposely to disable PPGTT in boot parameter in grub.cfg. End up decided to use VA_STATUS_ERROR_INVALID_SURFACE instead VA_STATUS_ERROR_UNIMPLEMENTED for dst_obj->bo checking in i965_proc_picture_fast. 1) http://lists.freedesktop.org/archives/libva/2015-November/003719.html 2) http://lists.freedesktop.org/archives/libva/2015-November/003732.html For BSW plaform and GEN 9 issue, the multiple horizontal green line in video region will be able to fix it by correct the coordinate X with 4 alignment before pass to VPP shader. This is due to HW require coordinate X also need to be 4 align. Also add this for Gen7 plaform. http://lists.freedesktop.org/archives/libva/2015-November/003725.html Feedback from Yakui regarding the green line issue in Gen8/Gen9: In order to solve this issue perfectly, I think that the following two factors should be considered: a. Driver should send the correct x coordinate to VPP shader. (It should be multiple of 4). b. add MASK_SETTING to mask out the unaligned data in VPP shader. This is to avoid that the incorrect value is written for the unaligned border. (But this needs more efforts to handle it). Already fixed for a). Left over is b) add Mask setting to mask out the unaligned data in VPP shader not yet implemented. We won't fix b) (unaligned border). |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.