jjm2473 / ffmpeg-rk

支持rockchip mpp硬件加速编解码的ffmpeg版本。Forked ffmpeg that supports rkmpp decodeing, encoding and rga scaling
https://ffmpeg.org
Other
178 stars 31 forks source link

RK3399 使用ffmpeg warp硬编码导致系统奔溃重启 #31

Closed zhu327 closed 9 months ago

zhu327 commented 9 months ago

SOC:RK3399 系统信息:Linux rockpi-4b 4.4.213-rockchip64 #1 SMP Wed Jun 22 07:29:00 UTC 2022 aarch64 GNU/Linux

设备信息:

root@rockpi-4b:~# for dev in iep rga dri dma_heap mpp_service mpp-service vpu_service vpu-service \
>         hevc_service hevc-service rkvdec rkvenc avsd vepu h265e ; do \
>       echo "/dev/$dev"; \
>     done
/dev/iep
/dev/rga
/dev/dri
/dev/dma_heap
/dev/mpp_service
/dev/mpp-service
/dev/vpu_service
/dev/vpu-service
/dev/hevc_service
/dev/hevc-service
/dev/rkvdec
/dev/rkvenc
/dev/avsd
/dev/vepu
/dev/h265e

二进制ffmpeg ffmpeg.mpp 以及so是从jellyfin-mpp docker image拷贝出来

使用ffmpeg.mpp进行hevc格式视频的压缩硬编码,可以成功

root@rockpi-4b:~/disk/Movies# /root/ffmpeg/ffmpeg.mpp -i The.Super.Mario.Bros..Movie.2023.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv -vf 'scale_rga' -c:v h264_rkmpp -q:v 80 -f matroska -y test.mkv
ffmpeg version git-2022-06-18-83b0e20 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 8.3.0 (OpenWrt GCC 8.3.0 r0-83b0e20)
  configuration: --enable-cross-compile --cross-prefix=aarch64-openwrt-linux-gnu- --arch=aarch64 --cpu=cortex-a53 --target-os=linux --prefix=/usr --pkg-config=pkg-config --enable-shared --enable-static --enable-pthreads --enable-zlib --disable-doc --disable-debug --disable-lzma --disable-vaapi --disable-vdpau --disable-outdevs --disable-runtime-cpudetect --enable-lto --enable-neon --enable-vfp --enable-gnutls --disable-encoder=svq1 --enable-libopus --enable-hardcoded-tables --enable-libmp3lame --enable-gpl --enable-libx264 --enable-version3 --enable-nonfree --enable-libdrm --enable-librga --enable-rkmpp --enable-libfdk-aac
  libavutil      57. 33.101 / 57. 33.101
  libavcodec     59. 42.101 / 59. 42.101
  libavformat    59. 30.100 / 59. 30.100
  libavdevice    59.  8.101 / 59.  8.101
  libavfilter     8. 46.103 /  8. 46.103
  libswscale      6.  8.102 /  6.  8.102
  libswresample   4.  8.100 /  4.  8.100
  libpostproc    56.  7.100 / 56.  7.100
Input #0, matroska,webm, from 'The.Super.Mario.Bros..Movie.2023.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv':
  Metadata:
    ENCODER         : Lavf59.33.100
  Duration: 01:32:25.92, start: 0.000000, bitrate: 6387 kb/s
  Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default) (original)
    Metadata:
      ENCODER         : Lavc59.48.100 libx265
      DURATION        : 01:32:25.916000000
  Stream #0:1: Audio: aac (LC), 48000 Hz, 5.1, fltp (default)
    Metadata:
      ENCODER         : Lavc59.48.100 libfdk_aac
      DURATION        : 01:32:24.699000000
  Stream #0:2(eng): Subtitle: subrip (default)
    Metadata:
      DURATION        : 01:32:21.408000000
  Stream #0:3(eng): Subtitle: subrip
    Metadata:
      title           : SDH
      DURATION        : 01:32:21.408000000
  Stream #0:4(spa): Subtitle: subrip
    Metadata:
      title           : Latin American
      DURATION        : 01:32:23.676000000
  Stream #0:5(fre): Subtitle: subrip
    Metadata:
      title           : Canadian
      DURATION        : 01:32:23.384000000
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (hevc_rkmpp) -> h264 (h264_rkmpp))
  Stream #0:1 -> #0:1 (aac (native) -> ac3 (native))
  Stream #0:2 -> #0:2 (subrip (srt) -> ass (ssa))
Press [q] to stop, [?] for help
[hevc_rkmpp @ 0x2e7fa740] Decoder noticed an info change (3840x2160), stride(4864x2160), format=1
librga fail to get driver version! Compatibility mode will be enabled.

rga_api version 1.9.1_[3]
[h264_rkmpp @ 0x2e7f18d0] Unsupport profile -99, force set to 100
[h264_rkmpp @ 0x2e7f18d0] Unsupport level -99, force set to 51
Output #0, matroska, to 'test.mkv':
  Metadata:
    encoder         : Lavf59.30.100
  Stream #0:0: Video: h264 (H264 / 0x34363248), drm_prime(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 23.98 fps, 1k tbn (default) (original)
    Metadata:
      DURATION        : 01:32:25.916000000
      encoder         : Lavc59.42.101 h264_rkmpp
  Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1, fltp, 448 kb/s (default)
    Metadata:
      DURATION        : 01:32:24.699000000
      encoder         : Lavc59.42.101 ac3
  Stream #0:2(eng): Subtitle: ass (default)
    Metadata:
      DURATION        : 01:32:21.408000000
      encoder         : Lavc59.42.101 ssa
frame=  339 fps=6.7 q=-0.0 Lsize=   72030kB time=00:00:14.13 bitrate=41733.2kbits/s dup=0 drop=1 speed=0.281x
video:71301kB audio:721kB subtitle:0kB other streams:0kB global headers:1kB muxing overhead: 0.011017%
Exiting normally, received signal 2.

使用ffmepg warp执行以上命令,系统崩溃重启

root@rockpi-4b:~/disk/Movies# /root/ffmpeg/ffmpeg -i The.Super.Mario.Bros..Movie.2023.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv -vf 'scale_rga' -c:v h264_rkmpp -q:v 80 -f matroska -y test.mkv

ffmpeg "-i" "The.Super.Mario.Bros..Movie.2023.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv" "-c:v" "h264_rkmpp" "-q:v" "80" "-f" "matroska" "-y" "test.mkv"
ffmpeg version git-2022-06-18-83b0e20 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 8.3.0 (OpenWrt GCC 8.3.0 r0-83b0e20)
  configuration: --enable-cross-compile --cross-prefix=aarch64-openwrt-linux-gnu- --arch=aarch64 --cpu=cortex-a53 --target-os=linux --prefix=/usr --pkg-config=pkg-config --enable-shared --enable-static --enable-pthreads --enable-zlib --disable-doc --disable-debug --disable-lzma --disable-vaapi --disable-vdpau --disable-outdevs --disable-runtime-cpudetect --enable-lto --enable-neon --enable-vfp --enable-gnutls --disable-encoder=svq1 --enable-libopus --enable-hardcoded-tables --enable-libmp3lame --enable-gpl --enable-libx264 --enable-version3 --enable-nonfree --enable-libdrm --enable-librga --enable-rkmpp --enable-libfdk-aac
  libavutil      57. 33.101 / 57. 33.101
  libavcodec     59. 42.101 / 59. 42.101
  libavformat    59. 30.100 / 59. 30.100
  libavdevice    59.  8.101 / 59.  8.101
  libavfilter     8. 46.103 /  8. 46.103
  libswscale      6.  8.102 /  6.  8.102
  libswresample   4.  8.100 /  4.  8.100
  libpostproc    56.  7.100 / 56.  7.100
Input #0, matroska,webm, from 'The.Super.Mario.Bros..Movie.2023.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv':
  Metadata:
    ENCODER         : Lavf59.33.100
  Duration: 01:32:25.92, start: 0.000000, bitrate: 6387 kb/s
  Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default) (original)
    Metadata:
      ENCODER         : Lavc59.48.100 libx265
      DURATION        : 01:32:25.916000000
  Stream #0:1: Audio: aac (LC), 48000 Hz, 5.1, fltp (default)
    Metadata:
      ENCODER         : Lavc59.48.100 libfdk_aac
      DURATION        : 01:32:24.699000000
  Stream #0:2(eng): Subtitle: subrip (default)
    Metadata:
      DURATION        : 01:32:21.408000000
  Stream #0:3(eng): Subtitle: subrip
    Metadata:
      title           : SDH
      DURATION        : 01:32:21.408000000
  Stream #0:4(spa): Subtitle: subrip
    Metadata:
      title           : Latin American
      DURATION        : 01:32:23.676000000
  Stream #0:5(fre): Subtitle: subrip
    Metadata:
      title           : Canadian
      DURATION        : 01:32:23.384000000
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (hevc_rkmpp) -> h264 (h264_rkmpp))
  Stream #0:1 -> #0:1 (aac (native) -> ac3 (native))
  Stream #0:2 -> #0:2 (subrip (srt) -> ass (ssa))
Press [q] to stop, [?] for help
[hevc_rkmpp @ 0x32824720] Decoder noticed an info change (3840x2160), stride(4864x2160), format=1
[h264_rkmpp @ 0x3281b8b0] Unsupport profile -99, force set to 100
[h264_rkmpp @ 0x3281b8b0] Unsupport level -99, force set to 51

Message from syslogd@rockpi-4b at Nov 11 10:21:42 ...
 kernel:[45265.759063] BUG: spinlock lockup suspected on CPU#4, systemd-journal/560

Message from syslogd@rockpi-4b at Nov 11 10:21:42 ...
 kernel:[45272.759131] BUG: spinlock lockup suspected on CPU#4, systemd-journal/560

Message from syslogd@rockpi-4b at Nov 11 10:21:42 ...
 kernel:[45272.759137]  lock: 0xffffffc0f7f23380, .magic: dead4ead, .owner: in:imklog/1113, .owner_cpu: 3

Message from syslogd@rockpi-4b at Nov 11 10:21:42 ...
 kernel:[45280.160946]  lock: 0xffffffc0f7f23380, .magic: dead4ead, .owner: in:imklog/1113, .owner_cpu: -1
client_loop: send disconnect: Broken pipe

同样的问题在jellyfin-mpp docker容器运行时,特权模式下可以复现,在转码时,系统崩溃

jjm2473 commented 9 months ago

不要使用ffmepg warp,这个是给jellyfin封装参数用的,也就是把libx264的参数转成h264_rkmpp的参数,一般的项目用不上,如果用了有问题也不要反馈,这个warp本来就只给jellyfin调用。