Bug 110719

Summary: Crash in radeonsi_drv_video.so when attempting to convert rgb video data
Product: Mesa Reporter: Scott Moreau <oreaus>
Component: Drivers/Gallium/radeonsiAssignee: Default DRI bug account <dri-devel>
Status: RESOLVED MOVED QA Contact: Default DRI bug account <dri-devel>
Severity: normal    
Priority: medium CC: yalterz
Version: git   
Hardware: All   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Scott Moreau 2019-05-21 19:01:38 UTC
Kernel 5.0.0
Mesa 19.2.0-devel (git-629806b55b)
OpenGL renderer string: AMD Radeon (TM) RX 460 Graphics (POLARIS11, DRM 3.27.0, 5.0.0, LLVM 8.0.0)

I can reproduce the crash with this command:

`ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf 'format=rgb0,hwupload' -vcodec h264_vaapi -bf 0 output.mp4`

The input video does not have to be rgb0 format, this command just tells it that it is to demonstrate the problem. av_hwframe_transfer_get_formats() reports rgb0 is supported but clearly there's a problem. This is the backtrace for h264_vaapi:

Thread 1 "ffmpeg" received signal SIGSEGV, Segmentation fault.
create (enc=0x555555ec73a0) at ../src/gallium/drivers/radeon/radeon_vce_52.c:188
188			RVCE_CS(enc->chroma->u.legacy.level[0].nblk_x * enc->chroma->bpe); // encRefPicChromaPitch
(gdb) bt full
#0  0x00007fffd740a407 in create (enc=0x555555ec73a0) at ../src/gallium/drivers/radeon/radeon_vce_52.c:188
        begin = 0x7fffc060102c
        sscreen = 0x555555812020
#1  0x00007fffd73bfe13 in rvce_begin_frame (encoder=0x555555ec73a0, source=0x5555561c2ea0, picture=<optimized out>) at ../src/gallium/drivers/radeon/radeon_vce.c:291
        fb = {usage = 4, res = 0x555555ed02f0}
        enc = 0x555555ec73a0
        vid_buf = 0x5555561c2ea0
        pic = <optimized out>
        need_rate_control = true
#2  0x00007fffd72d32ed in vlVaEndPicture (ctx=<optimized out>, context_id=<optimized out>) at ../src/gallium/state_trackers/va/picture.c:655
        drv = 0x55555580c6c0
        context = 0x555555ec3180
        coded_buf = 0x5555561e6360
        surf = 0x5555561f0320
        feedback = 0x555555a6eec0
        screen = <optimized out>
        supported = <optimized out>
        realloc = <optimized out>
        format = <optimized out>
#3  0x00007ffff085d820 in vaEndPicture () at /usr/lib/x86_64-linux-gnu/libva.so.2
#4  0x00007ffff6212e53 in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#5  0x00007ffff6213149 in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#6  0x00007ffff62137be in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#7  0x00007ffff5dbc6c7 in avcodec_encode_video2 () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#8  0x00007ffff5dbcaad in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#9  0x00007ffff5dbcc5a in avcodec_send_frame () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57

and for hevc_vaapi:

Thread 1 "ffmpeg" received signal SIGSEGV, Segmentation fault.
0x00007fffd7406f4f in radeon_uvd_enc_encode_params_hevc (enc=0x555555ec7040) at ../src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c:972
972	   enc->enc_pic.enc_params.allowed_max_bitstream_size = enc->bs_size;
(gdb) bt full
#0  0x00007fffd7406f4f in radeon_uvd_enc_encode_params_hevc (enc=0x555555ec7040) at ../src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c:972
        sscreen = 0x555555812020
#1  0x00007fffd7406f4f in encode (enc=0x555555ec7040) at ../src/gallium/drivers/radeon/radeon_uvd_enc_1_1.c:1104
#2  0x00007fffd72d3304 in vlVaEndPicture (ctx=<optimized out>, context_id=<optimized out>) at ../src/gallium/state_trackers/va/picture.c:656
        drv = 0x55555580c6c0
        context = 0x555555ec4420
        coded_buf = 0x555555ec6180
        surf = 0x5555561f0570
        feedback = 0x5555557bd0c0
        screen = <optimized out>
        supported = <optimized out>
        realloc = <optimized out>
        format = <optimized out>
#3  0x00007ffff085d820 in vaEndPicture () at /usr/lib/x86_64-linux-gnu/libva.so.2
#4  0x00007ffff6212e53 in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#5  0x00007ffff6213149 in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#6  0x00007ffff62137be in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#7  0x00007ffff5dbc6c7 in avcodec_encode_video2 () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#8  0x00007ffff5dbcaad in  () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#9  0x00007ffff5dbcc5a in avcodec_send_frame () at /usr/lib/x86_64-linux-gnu/libavcodec.so.57

It seems the driver should support this format or at least just report only the formats it actually supports.

Please note that this bug was discovered by a screen recorder implementing vaapi. Passing rgb data to the intel vaapi driver works as expected.
Comment 1 GitLab Migration User 2019-09-25 18:50:04 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/1409.

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.