rigaya / rkmppenc

Rockchip系SoCのHWエンコーダ(rkmpp)の性能実験
https://rigaya34589.blog.fc2.com/blog-category-35.html
Other
78 stars 8 forks source link

OrangePi 3B (RK3566) で --check-mppinfo が Segmentation fault #9

Closed tentaisan closed 4 months ago

tentaisan commented 4 months ago

OrangePi 3B (RK3566) で

$ ./rkmppenc --check-mppinfo
Segmentation fault

となります。gdb をあてると

(gdb) r --check-mppinfo
Starting program: /home/orangepi/rkmppenc/rkmppenc --check-mppinfo
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
[Detaching after vfork from child process 1974]
[Detaching after vfork from child process 1977]
[Detaching after vfork from child process 1980]

Program received signal SIGSEGV, Segmentation fault.
0x00000055559b1004 in getMPPDecoderSupport () at mppcore/mpp_device.cpp:55
55                  if ((cap->cap_coding & (RK_U32)(1 << codec_idx))) {
(gdb) p cap
$1 = (const MppDecHwCap *) 0x0
(gdb) 

となり、nullptr の cap を参照しています。 少し追ってみましたが、どうやら mpp_get_soc_info() が NULL を含んだ array を返す実装のようでした。

https://github.com/rockchip-linux/mpp/blob/4cc3fb25f72fd862596743778575b1aae5b2e9aa/osal/mpp_soc.cpp#L866

とりあえず

 if (cap && (cap->cap_coding & (RK_U32)(1 << codec_idx))) {

と null check を入れると --chck-mppinfo が segmentation fault で落ちる事がなくなるのは確認しましたが、問題がここだけに限るかがわからなかったので issue としました。

rigaya commented 4 months ago

ご指摘、原因調査、修正方法まですべてお教えいただきありがとうございました。

ご提示いただいた修正方法で問題ないと思います。また他の箇所では該当情報を使用している箇所はないようでした。

rkmppenc 0.08にてご提示の修正を反映しております。

rigaya commented 4 months ago

すみません、rkmppenc 0.08はまだ準備中ですので、少々お待ちください。

rigaya commented 4 months ago

お待たせしました。rkmppenc 0.08を公開しました。

tentaisan commented 4 months ago

build/compile して動作を確認し現象が生じていた OrangePi 3B (RK3566) で問題が解消していることを確認しました。

$ ./rkmppenc --version
rkmppenc (aarch64) 0.08 (r318) by rigaya, May  2 2024 19:55:54 (gcc 11.4.0/Linux)
$ ./rkmppenc --check-mppinfo
SoC name        : rockchip,rk3566-orangepi-3b rockchip,rk3566
Mpp service     : yes [mpp_service_v1] (okay)
Mpp kernel      : 5.10
2D accerelation : iepv2(okay) rga(okay)
HW Encode       : H.264/AVC H.265/HEVC
HW Decode       : H.264/AVC(10bit) H.265/HEVC(10bit) MPEG2 VP9(10bit)

$ 

ご対応ありがとうございます。

rigaya commented 4 months ago

ご確認いただきありがとうございました。

rk3566は所持していないので、大変助かりました。