[FFmpeg-user] Intel libmfx Crash with Hardware Decoding
Dennis Mungai
dmngaie at gmail.com
Tue Oct 15 22:55:00 EEST 2024
On Tue, 15 Oct 2024 at 21:48, Shane Warren <shanew at innovsys.com> wrote:
> > -----Original Message-----
> > From: ffmpeg-user <ffmpeg-user-bounces at ffmpeg.org> On Behalf Of Dennis
> > Mungai
> > Sent: Monday, October 14, 2024 4:50 PM
> > To: FFmpeg user questions <ffmpeg-user at ffmpeg.org>
> > Subject: Re: [FFmpeg-user] Intel libmfx Crash with Hardware Decoding
> >
> >
> > On Mon, 14 Oct 2024 at 18:57, Shane Warren <shanew at innovsys.com> wrote:
> >
> > >> I have a system with Intel Flex 140 cards and use ffmpeg to
> > >> transcode video on an Ubuntu 22.x system. Through a lot of testing,
> > >> I have come up with a flow that handles multicast h264 input
> > >> (decoding using
> > >> vaapi) with
> > >> h264/h265 output using QSV. I wanted to use QSV decoding but if I
> > >> used QSV decoding and QSV encoding, but QSV decoding seems to strip
> > >> A53 captions (which I need).
> > >>
> > >> I found one input stream that eventually crashes the vaapi decoder
> > >> inside of libmfx.
> > >>
> > >> The call stack ends up in some function in libfmx:
> > >>
> > >> Program terminated with signal SIGSEGV, Segmentation fault.
> > >>
> > >> #0 0x00007f14b22d9f88 in ?? () from
> > >> /usr/lib/x86_64-linux-gnu/libmfx-gen.so.1.2.10
> > >>
> > >> Is there a way to get symbols for libmfx so I can get a better bug
> > >> report, or some suggestion on how to debug this.
> > >>
> > >> I have switched this stream to software decoding then QSV encoding,
> > >> and it is stable but obviously uses a bit more cpu.
> > >>
> > >> An extra question is: Will the QSV hardware decoder ever support
> > >> passing through a53 captions?
> > >>
> > >> Thanks,
> > >>
> > >> Shane Warren
> > >>
> >
> > > Full ffmpeg command and uncut console output would help in
> > > understanding
> >> what's going on in your setup.
> >>
> >> Full ffmpeg command and full output follows (I can upload the ts file
> >> that makes it core dump if needed):
> >>
> >> root at restarttv:~# ffmpeg -y -threads 2 -nostats -loglevel verbose
> >> -fflags
> >> +genpts -fflags discardcorrupt -hwaccel vaapi -vaapi_device
> >> /dev/dri/renderD130 -hwaccel_output_format vaapi -extra_hw_frames 2
> >> -init_hw_device qsv=hw3 -filter_hw_device hw3 -i /tmp/crash-intel.ts
> >> -filter:a:0 "aresample=async=10000" -c:a:0 aac -ac:a:0 2 -ar:a:0
> >> 48000
> >> -b:a:0 192k -flush_packets 0 -filter_complex
> >>
> "[0:v:0]hwmap=derive_device=qsv,vpp_qsv=deinterlace=2:w=1280:h=720,fps=60000/1001,format=yuv420p[vout]"
> >> -map "[vout]" -map "0:a:0" -map 0:d? -c:v h264_qsv -b:v 4000k
> >> -minrate:v 4000k -maxrate:v 4000k -bufsize:v 8000k -scenario
> >> livestreaming -strict_gop
> >> 1 -forced_idr 1 -profile:v high -level:v 4.2 -bf:v 0 -g:v 30 -f mpegts
> >> -muxrate 4953560 -pes_payload_size 1528 /tmp/intel-output.ts
> >>
> >> ffmpeg version N-112548-g48a1b7005d Copyright (c) 2000-2023 the FFmpeg
> >> developers
> >> built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
> >> configuration: --nvcc=/usr/local/cuda/bin/nvcc --enable-debug
> >> --disable-shared --enable-static --enable-version3 --arch=x86_64
> >> --target-os=linux --enable-cuda --enable-cuvid --enable-nvenc
> >> --enable-gpl --enable-nonfree --enable-runtime-cpudetect
> >> --enable-libnpp --extra-cflags='-I/usr/local/cuda/include --static'
> >> --extra-ldflags=-L/usr/local/cuda/lib64 --enable-gpl
> >> --enable-cuda-nvcc --enable-libfreetype --enable-libvpl
> >> --enable-ffnvcodec --enable-cuda-llvm --disable-ffplay
> >> --pkg-config-flags=--static --enable-libnpp-static --enable-opengl
> --enable-filter=gltransition --extra-libs='-lGLEW -lEGL'
> >> --logfile=./config.log --enable-libfreetype --enable-libharfbuzz
> >> --enable-libsrt
> >> libavutil 58. 37.100 / 58. 37.100
> >> libavcodec 60. 30.102 / 60. 30.102
> >> libavformat 60. 15.101 / 60. 15.101
> >> libavdevice 60. 2.101 / 60. 2.101
> >> libavfilter 9. 11.100 / 9. 11.100
> >> libswscale 7. 4.100 / 7. 4.100
> >> libswresample 4. 11.100 / 4. 11.100
> >> libpostproc 57. 2.100 / 57. 2.100
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] libva: VA-API version 1.20.0
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] libva: Trying to open
> >> /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] libva: Found init function
> >> __vaDriverInit_1_20
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] libva: va_openDriver() returns 0
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] Initialised VAAPI connection:
> >> version
> >> 1.20
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] VAAPI driver: Intel iHD driver
> >> for
> >> Intel(R) Gen Graphics - 23.4.3 ().
> >> [AVHWDeviceContext @ 0x55c1ddf49b40] Driver not found in known
> >> nonstandard list, using standard behaviour.
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] Trying to use DRM render node for
> >> device 0.
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] libva: VA-API version 1.20.0
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] libva: User requested driver 'iHD'
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] libva: Trying to open
> >> /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] libva: Found init function
> >> __vaDriverInit_1_20
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] libva: va_openDriver() returns 0
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] Initialised VAAPI connection:
> >> version
> >> 1.20
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] VAAPI driver: Intel iHD driver
> >> for
> >> Intel(R) Gen Graphics - 23.4.3 ().
> >> [AVHWDeviceContext @ 0x55c1ddf7b080] Driver not found in known
> >> nonstandard list, using standard behaviour.
> >> [AVHWDeviceContext @ 0x55c1ddf78680] Use Intel(R) oneVPL to create MFX
> >> session, API version is 2.9, the required implementation version is
> >> 1.3 libva info: VA-API version 1.20.0 libva info: Trying to open
> >> /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 [AVHWDeviceContext @ 0x55c1ddf78680]
> >> Initialize MFX session:
> >> implementation version is 2.10
> >> [Parsed_fps_2 @ 0x55c1de1e5c40] 0 frames in, 0 frames out; 0 frames
> >> dropped, 0 frames duplicated.
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] non-existing PPS 0 referenced
> >> Last message repeated 1 times
> >> [h264 @ 0x55c1de19a480] decode_slice_header error
> >> [h264 @ 0x55c1de19a480] no frame!
> >> [h264 @ 0x55c1de19a480] Reinit context to 1280x720, pix_fmt: yuv420p
> >> [mpegts @ 0x55c1de1f8ac0] max_analyze_duration 5000000 reached at
> >> 5013333 microseconds st:1 [mpegts @ 0x55c1de1f8ac0] start time for
> >> stream 2 is not set in estimate_timings_from_pts Selecting decoder
> >> 'h264' because of requested hwaccel method vaapi Input #0, mpegts,
> >> from '/tmp/crash-intel.ts':
> >> Duration: 00:00:29.14, start: 26553.922556, bitrate: 6855 kb/s
> >> Program 1
> >> Metadata:
> >> service_name : Service01
> >> service_provider: FFmpeg
> >> Stream #0:0[0x100]: Video: h264 (High), 1 reference frame
> >> ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive, left),
> >> 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 59.94 fps, 59.94 tbr, 90k
> tbn
> >> Stream #0:1[0x101](eng): Audio: aac (LC) ([15][0][0][0] / 0x000F),
> >> 48000 Hz, stereo, fltp, 193 kb/s
> >> Stream #0:2[0x102]: Data: scte_35
> >> [out#0/mpegts @ 0x55c1df079c80] Adding streams from explicit maps...
> >> [out#0/mpegts @ 0x55c1df079c80] Creating output stream from an
> >> explicitly mapped complex filtergraph 0, output [vout]
> >> [vost#0:0/h264_qsv @ 0x55c1dee9dec0] Created video stream from complex
> >> filtergraph 0:[format:default] [vost#0:0/h264_qsv @ 0x55c1dee9dec0]
> >> [aost#0:1/aac @ 0x55c1de151700] Created audio stream from input stream
> >> 0:1 [dost#0:2/copy @ 0x55c1de291840] Created data stream from input
> >> stream 0:2 Stream mapping:
> >> Stream #0:0 (h264) -> hwmap:default (graph 0)
> >> format:default (graph 0) -> Stream #0:0 (h264_qsv)
> >> Stream #0:1 -> #0:1 (aac (native) -> aac (native))
> >> Stream #0:2 -> #0:2 (copy)
> >> Press [q] to stop, [?] for help
> >> [graph_1_in_0_1 @ 0x55c1de750b40] tb:1/48000 samplefmt:fltp
> >> samplerate:48000 chlayout:stereo
> >> [Parsed_aresample_0 @ 0x55c1de1c4900] ch:2 chl:stereo fmt:fltp
> >> r:48000Hz
> >> -> ch:2 chl:stereo fmt:fltp r:48000Hz
> >> [h264 @ 0x55c1de2513c0] Reinit context to 1280x720, pix_fmt: vaapi
> >> [graph 0 input from stream 0:0 @ 0x55c1de20a040] w:1280 h:720
> >> pixfmt:vaapi
> >> tb:1/90000 fr:60000/1001 sar:1/1
> >> [auto_scale_0 @ 0x55c1de1f4180] w:iw h:ih flags:'' interl:0
> >> [Parsed_format_3 @ 0x55c1dee0c280] auto-inserting filter 'auto_scale_0'
> >> between the filter 'Parsed_fps_2' and the filter 'Parsed_format_3'
> >> [auto_scale_1 @ 0x55c1defb3240] w:iw h:ih flags:'' interl:0 [format @
> >> 0x55c1de1c5780] auto-inserting filter 'auto_scale_1' between the
> >> filter 'Parsed_format_3' and the filter 'format'
> >> [AVHWDeviceContext @ 0x55c1de113600] Use Intel(R) oneVPL to create MFX
> >> session, API version is 2.9, the required implementation version is
> >> 1.3 libva info: VA-API version 1.20.0 libva info: Trying to open
> >> /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 libva info: VA-API version 1.20.0 libva
> >> info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
> >> libva info: Found init function __vaDriverInit_1_20 libva info:
> >> va_openDriver() returns 0 [AVHWDeviceContext @ 0x55c1de113600]
> >> Initialize MFX session:
> >> implementation version is 2.10
> >> [Parsed_vpp_qsv_1 @ 0x55c1de758c00] Use Intel(R) oneVPL to create MFX
> >> session with the specified MFX loader
> >> [Parsed_vpp_qsv_1 @ 0x55c1de758c00] VPP: input is video memory surface
> >> [Parsed_vpp_qsv_1 @ 0x55c1de758c00] VPP: output is system memory
> >> surface
> >> [Parsed_fps_2 @ 0x55c1de1e4980] fps=60000/1001
> >> [auto_scale_0 @ 0x55c1de1f4180] w:1280 h:720 fmt:nv12 sar:1/1 ->
> >> w:1280
> >> h:720 fmt:yuv420p sar:1/1 flags:0x00000004
> >> [auto_scale_1 @ 0x55c1defb3240] w:1280 h:720 fmt:yuv420p sar:1/1 ->
> >> w:1280
> >> h:720 fmt:nv12 sar:1/1 flags:0x00000004
> >> [Parsed_fps_2 @ 0x55c1de1e4980] Set first pts to 33
> >> [auto_scale_0 @ 0x55c1de1f4180] w:1280 h:720 fmt:nv12 sar:1/1 ->
> >> w:1280
> >> h:720 fmt:yuv420p sar:1/1 flags:0x00000004
> >> Last message repeated 2 times
> >> [auto_scale_1 @ 0x55c1defb3240] w:1280 h:720 fmt:yuv420p sar:1/1 ->
> >> w:1280
> >> h:720 fmt:nv12 sar:1/1 flags:0x00000004
> >> Last message repeated 2 times
> >> [h264_qsv @ 0x55c1de150b00] Using device hw3 (type qsv) with h264_qsv
> >> encoder.
> >> [h264_qsv @ 0x55c1de150b00] Encoder: input is system memory surface
> >> [h264_qsv @ 0x55c1de150b00] Use Intel(R) oneVPL to create MFX session
> >> with the specified MFX loader [h264_qsv @ 0x55c1de150b00] Using the
> >> constant bitrate (CBR) ratecontrol method [h264_qsv @ 0x55c1de150b00]
> >> profile: avc high; level: 32 [h264_qsv @ 0x55c1de150b00] GopPicSize:
> >> 30; GopRefDist: 1; GopOptFlag:
> >> closed; IdrInterval: 0
> >> [h264_qsv @ 0x55c1de150b00] TargetUsage: 4; RateControlMethod: CBR
> >> [h264_qsv @ 0x55c1de150b00] BufferSizeInKB: 1000; InitialDelayInKB:
> >> 750;
> >> TargetKbps: 4000; MaxKbps: 4000; BRCParamMultiplier: 1 [h264_qsv @
> >> 0x55c1de150b00] NumSlice: 1; NumRefFrame: 2 [h264_qsv @
> >> 0x55c1de150b00] RateDistortionOpt: OFF [h264_qsv @ 0x55c1de150b00]
> >> RecoveryPointSEI: OFF [h264_qsv @ 0x55c1de150b00] VDENC: ON [h264_qsv
> >> @ 0x55c1de150b00] Entropy coding: CABAC; MaxDecFrameBuffering: 2
> >> [h264_qsv @ 0x55c1de150b00] NalHrdConformance: ON; SingleSeiNalUnit:
> >> ON;
> >> VuiVclHrdParameters: OFF VuiNalHrdParameters: ON [h264_qsv @
> >> 0x55c1de150b00] FrameRateExtD: 1001; FrameRateExtN: 60000 [h264_qsv @
> >> 0x55c1de150b00] IntRefType: 0; IntRefCycleSize: 0;
> >> IntRefQPDelta: 0
> >> [h264_qsv @ 0x55c1de150b00] MaxFrameSize: 0; MaxSliceSize: 0 [h264_qsv
> >> @ 0x55c1de150b00] BitrateLimit: OFF; MBBRC: OFF; ExtBRC: OFF [h264_qsv
> >> @ 0x55c1de150b00] Trellis: auto [h264_qsv @ 0x55c1de150b00] RepeatPPS:
> >> OFF; NumMbPerSlice: 0; LookAheadDS:
> >> 2x
> >> [h264_qsv @ 0x55c1de150b00] AdaptiveI: OFF; AdaptiveB: OFF;
> >> BRefType:off [h264_qsv @ 0x55c1de150b00] MinQPI: 0; MaxQPI: 0; MinQPP:
> >> 0; MaxQPP: 0;
> >> MinQPB: 0; MaxQPB: 0
> >> [h264_qsv @ 0x55c1de150b00] DisableDeblockingIdc: 0 [h264_qsv @
> >> 0x55c1de150b00] SkipFrame: no_skip [h264_qsv @ 0x55c1de150b00]
> >> PRefType: simple [h264_qsv @ 0x55c1de150b00] TransformSkip: unknown
> >> [h264_qsv @ 0x55c1de150b00] IntRefCycleDist: 0 [h264_qsv @
> >> 0x55c1de150b00] LowDelayBRC: OFF [h264_qsv @ 0x55c1de150b00]
> >> MaxFrameSizeI: 0; MaxFrameSizeP: 0 [h264_qsv @ 0x55c1de150b00]
> >> ScenarioInfo: 4 Automatically inserted bitstream filter
> >> 'scte35ptsadjust'; args=''
> >> [mpegts @ 0x55c1de167180] service 1 using PCR in pid=256,
> >> pcr_period=20ms [mpegts @ 0x55c1de167180] muxrate 4953560, sdt every
> >> 500 ms, pat/pmt every
> >> 100 ms
> >> Output #0, mpegts, to '/tmp/intel-output.ts':
> >> Metadata:
> >> encoder : Lavf60.15.101
> >> Stream #0:0: Video: h264, 1 reference frame, nv12(tv, bt709,
> >> progressive, left), 1280x720 (0x0) [SAR 1:1 DAR 16:9], q=2-31, 4000
> >> kb/s,
> >> 59.94 fps, 90k tbn
> >> Metadata:
> >> encoder : Lavc60.30.102 h264_qsv
> >> Side data:
> >> cpb: bitrate max/min/avg: 4000000/4000000/4000000 buffer size:
> >> 8000000 vbv_delay: N/A
> >> Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp, delay
> >> 1024,
> >> 192 kb/s
> >> Metadata:
> >> encoder : Lavc60.30.102 aac
> >> Stream #0:2: Data: scte_35
> >> Segmentation fault (core dumped)
> >>
>
> > Please upload the sample source file triggering the segfault.
> >
> > Also, test with these variants:
> >
> > 1. Initializing a QSV instance from VAAPI.
> >
> > ffmpeg -y -threads 2 -nostats -loglevel verbose -fflags +genpts -fflags
> discardcorrupt -hwaccel vaapi -init_hw_device vaapi=va:/dev/dri/renderD130
> -hwaccel_output_format vaapi -extra_hw_frames 2 -init_hw_device qsv=qs at va
> -filter_hw_device qs -autorotate 0 -i /tmp/crash-intel.ts -autoscale 0
> > -filter:a:0 "aresample=async=10000" -c:a:0 aac -ac:a:0 2 -ar:a:0 48000
> > -b:a:0 192k -flush_packets 0 -filter_complex
> "[0:v:0]vpp_qsv=deinterlace=2:w=1280:h=720,fps=60000/1001,format=yuv420p[vout]"
> > -map "[vout]" -map "0:a:0" -map 0:d? -c:v h264_qsv -b:v 4000k -minrate:v
> 4000k -maxrate:v 4000k -bufsize:v 8000k -scenario livestreaming -strict_gop
> > 1 -forced_idr 1 -profile:v high -level:v 4.2 -bf:v 0 -g:v 30 -f mpegts
> -muxrate 4953560 -pes_payload_size 1528 /tmp/intel-output.ts
> >
> >
> > 2. Using hwmap to derive QSV from VAAPI H/W:
> >
> > ffmpeg -y -threads 2 -nostats -loglevel verbose -fflags +genpts -fflags
> discardcorrupt -hwaccel vaapi -init_hw_device vaapi=va:/dev/dri/renderD130
> -hwaccel_output_format vaapi -extra_hw_frames 2 -filter_hw_device va
> -autorotate 0 -i /tmp/crash-intel.ts -autoscale 0
> > -filter:a:0 "aresample=async=10000" -c:a:0 aac -ac:a:0 2 -ar:a:0 48000
> > -b:a:0 192k -flush_packets 0 -filter_complex
> "[0:v:0]hwmap=derive_device=qsv,format=qsv,vpp_qsv=deinterlace=2:w=1280:h=720,fps=60000/1001,format=yuv420p[vout]"
> > -map "[vout]" -map "0:a:0" -map 0:d? -c:v h264_qsv -b:v 4000k -minrate:v
> 4000k -maxrate:v 4000k -bufsize:v 8000k -scenario livestreaming -strict_gop
> > 1 -forced_idr 1 -profile:v high -level:v 4.2 -bf:v 0 -g:v 30 -f mpegts
> -muxrate 4953560 -pes_payload_size 1528 /tmp/intel-output.ts
> >
> > 3. Using hwupload to derive QSV from VAAPI H/W:
> >
> > The extra_hw_frames argument is now passed directly to hwupload's
> derive_device option, with the value of 64.
> >
> > ffmpeg -y -threads 2 -nostats -loglevel verbose -fflags +genpts -fflags
> discardcorrupt \
> > -hwaccel vaapi -init_hw_device vaapi=va:/dev/dri/renderD130
> -hwaccel_output_format vaapi -filter_hw_device va -autorotate 0 \
> > -i /tmp/crash-intel.ts -autoscale 0 -filter:a:0 "aresample=async=10000"
> -c:a:0 aac -ac:a:0 2 -ar:a:0 48000 -b:a:0 192k -flush_packets 0 \
> > -filter_complex
> "[0:v:0]hwmap=derive_device=qsv:extra_hw_frames=64,format=qsv,vpp_qsv=deinterlace=2:w=1280:h=720,fps=60000/1001,format=yuv420p[vout]"
> \
> > -map "[vout]" -map "0:a:0" -map 0:d? \
> > -c:v h264_qsv -b:v 4000k -minrate:v 4000k -maxrate:v 4000k -bufsize:v
> 8000k -scenario livestreaming -strict_gop 1 -forced_idr 1 -profile:v high
> -level:v 4.2 -bf:v 0 -g:v 30 \
> > -f mpegts -muxrate 4953560 -pes_payload_size 1528 /tmp/intel-output.ts
> >
> > Extra parameters added:
> >
> > (a). -autororate 0 : This disables the automatic rotation of the video
> according to file metadata. Known to make some H/W decoders to misbehave.
> > (b). -noautoscale : Used to prevent the automatic insertion of a scale
> filter in the pipeline(s), ensuring better resilience against crashes due
> to changing input resolutions with *some* encoder & decoder combinations.
> >
> > Test and report back.
>
> Link to input ts file:
> https://drive.google.com/file/d/1Vy67szauLHemJMaVYHAQ9qZvpwO2qBnj/view?usp=sharing
>
> 1. Had to add this to start of the filter (or I got invalid conversion
> errors): hwmap=derive_device=qsv, Result: Segfaults
> 2. Segfaults
> 3. Had to change to this at the start of the filter (or I got invalid
> conversion errors): hwmap=derive_device=qsv, Result: Segfaults
>
> I have also been testing directly decoding with QSV and encoding QSV using
> this test stream, this works 100% no crash. The only issue with QSV is the
> decoder strips A53 captions.
>
> Today I have been digging around in ffmpeg source and I think the problem
> is the QSV decoder is not copying out the a53 captions and putting them in
> the sideband data for the qsv endoder to use. In theory this should be easy
> to fix.
>
Somehow, this seems to work correctly on the current ffmpeg git tip (master
branch) and release points 7.0 and 7.1 with the command:
ffmpeg -y -threads 2 -loglevel verbose -fflags +genpts -fflags
discardcorrupt \
-hwaccel vaapi -init_hw_device vaapi=va:/dev/dri/renderD128
-hwaccel_output_format vaapi \
-filter_hw_device va -noautorotate -i "crash-intel.ts" \
-noautoscale -filter:a:0 "aresample=async=10000" -c:a:0 aac -ac:a:0 2
-ar:a:0 48000 -b:a:0 192k -flush_packets 0 \
-filter_complex
"[0:v:0]hwmap=derive_device=qsv,format=qsv,vpp_qsv=deinterlace=2:w=1280:h=720:framerate=60000/1001[vout]"
\
-map "[vout]" -map "0:a:0" -map 0:d? -c:v h264_qsv -b:v 4000k -minrate:v
4000k -maxrate:v 4000k -bufsize:v 8000k \
-scenario livestreaming -strict_gop 1 -forced_idr 1 -profile:v high
-level:v 4.2 -bf:v 0 -g:v 30 \
-y -f mpegts -muxrate 4953560 -pes_payload_size 1528 "intel-output.ts"
And the output has the A53 captions:
mediainfo intel-output.ts
General
ID : 1 (0x1)
Complete name : intel-output.ts
Format : MPEG-TS
File size : 17.2 MiB
Duration : 29 s 179 ms
Overall bit rate mode : Constant
Overall bit rate : 4 954 kb/s
Frame rate : 59.940 FPS
Movie name : My Blue Heaven
Law rating : TV-PG (DL)
Video
ID : 256 (0x100)
Menu ID : 1 (0x1)
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High at L4
Format settings : CABAC / 2 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 2 frames
Format settings, GOP : M=1, N=30
Codec ID : 27
Duration : 28 s 587 ms
Bit rate mode : Constant
Nominal bit rate : 4 000 kb/s
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Frame rate : 59.940 (60000/1001) FPS
Standard : Component
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.072
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Audio
ID : 257 (0x101)
Menu ID : 1 (0x1)
Format : AAC LC
Format/Info : Advanced Audio Codec Low
Complexity
Format version : Version 4
Muxing mode : ADTS
Codec ID : 15-2
Duration : 29 s 141 ms
Bit rate mode : Variable
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 SPF)
Compression mode : Lossy
Delay relative to video : -572 ms
Language : English
Text #1
ID : 256 (0x100)-CC1
Menu ID : 1 (0x1)
Format : EIA-608
Muxing mode : SCTE 128 / DTVCC Transport
Muxing mode, more info : Muxed in Video #1
Duration : 28 s 587 ms
Duration of the visible content : 25 s 592 ms
Start time (commands) : 2 s 522 ms
Start time : 2 s 623 ms
End time : 28 s 215 ms
Bit rate mode : Constant
Stream size : 0.00 Byte (0%)
Count of events : 9
Count of PopOn events : 9
Count of lines : 15
Maximum count of lines per event : 3
Count of frames before first event : 39
Type of the first event : PopOn
Text #2
ID : 256 (0x100)-CC3
Menu ID : 1 (0x1)
Format : EIA-608
Muxing mode : SCTE 128 / DTVCC Transport
Muxing mode, more info : Muxed in Video #1
Duration : 28 s 587 ms
Start time (commands) : 10 s 981 ms
Bit rate mode : Constant
Stream size : 0.00 Byte (0%)
Count of lines : 0
Text #3
ID : 256 (0x100)-1
Menu ID : 1 (0x1)
Format : EIA-708
Muxing mode : SCTE 128 / DTVCC Transport
Muxing mode, more info : Muxed in Video #1
Duration : 28 s 587 ms
Bit rate mode : Constant
Stream size : 0.00 Byte (0%)
Text #4
ID : 256 (0x100)-2
Menu ID : 1 (0x1)
Format : EIA-708
Muxing mode : SCTE 128 / DTVCC Transport
Muxing mode, more info : Muxed in Video #1
Duration : 28 s 587 ms
Bit rate mode : Constant
Stream size : 0.00 Byte (0%)
Menu
ID : 4096 (0x1000)
Menu ID : 1 (0x1)
Format : AVC / AAC
Duration : 29 s 179 ms
List : 256 (0x100) (AVC) / 257 (0x101)
(AAC, English)
Title : My Blue Heaven
Language : / English
Service name : Service01
Service provider : FFmpeg
Service type : digital television
Law rating : TV-PG (DL)
More information about the ffmpeg-user
mailing list