mpp
mpp copied to clipboard
最新版本
解码H264视频没问题,但是解码jpg图片会抛出段错误异常 "mpp_dec_parser" received signal SIGSEGV, Segmentation fault.
本地测试没问题 1、git log看一下 2、如何复现的?
commit ac4c6718fc8661fe80b5309dd2f4526cf0b7953c (HEAD -> develop, origin/develop, origin/HEAD) Author: Johnson Ding [email protected] Date: Tue Jul 20 15:25:58 2021 +0800
[vepu_common]: Support RGBA little endian format
Change-Id: Ic7a390a1db11d3416f1783d72c7be3a052bb6e89
Signed-off-by: Johnson Ding <[email protected]>
commit 9274775ae9c66605fa2ae5a1375f98f11700191e Author: Johnson Ding [email protected] Date: Mon Jul 19 18:06:05 2021 +0800
[jpegd]: Support RGB 16-bit format output
Change-Id: I54763a031b538c24860573e3c639c79a978e4a58
Signed-off-by: Johnson Ding <[email protected]>
commit be76be4634c591d3a536e61402405c4978930e0b Author: Herman Chen [email protected] Date: Wed Aug 11 09:39:26 2021 +0800
[hal_jpegd_vdpu]: Add pp switch for MppDev
Change-Id: I9e38ac2097b4fff6e33fd8c4fd9f16fbe92adf68
Signed-off-by: Herman Chen <[email protected]>
Signed-off-by: Yandong Lin <[email protected]>
commit 957b5e0365ecd6db7fd0557daefc5a589ea09419 Author: sayon.chen [email protected] Date: Fri Aug 6 10:37:08 2021 +0800
[h265e_ps]: Svc case disable tmvp_en
Change-Id: I93068be4cc528c228258c757d6bd05bb18245212
Signed-off-by: sayon.chen <[email protected]>
commit 49f29006a3c728bb3570279b7b5407ec29e09f6d
就是使用rkmedia中的rkmedia_vdec_test.c测试发现的,视频解码时没有问题的,但是JPG解码就不行。mpp version: 2ceca7b5 author: sayon.chen 2021-07-01 [hal_jpege_vpu]: Fix qtable memory leak这个版本是OK的
有没有完整的崩溃的调用栈信息?使用mpi_dec_test是否有问题?
mpp[3683]: mpp_info: mpp version: c7ed08c9 author: Yandong Lin 2021-08-16 [h264d_parser]: optimize the size of some struct mpp[3683]: mpp_rt: NOT found ion allocator mpp[3683]: mpp_rt: found drm allocator [New LWP 3690] [New LWP 3691] mpp[3683]: mpp_info: mpp version: c7ed08c9 author: Yandong Lin 2021-08-16 [h264d_parser]: optimize the size of some struct [New LWP 3692] [New LWP 3693] [New LWP 3694] [New LWP 3695] [New LWP 3696] [New LWP 3697] [New LWP 3698] [New LWP 3699] [New LWP 3700] [New LWP 3701] [LWP 3695 exited] [New LWP 3702]
Thread 10 "mpp_dec_parser" received signal SIGSEGV, Segmentation fault. [Switching to LWP 3692] 0x9c60f140 in ?? () from /lib/libc.so.6 (gdb) bt #0 0x9c60f140 in ?? () from /lib/libc.so.6 #1 0xa150be08 in ?? () from /oem/usr/lib/librockchip_mpp.so.1 Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb)
只能看到这个。根据mpp_dec_parser这个,应该是mpp/codec/mpp_dec.cpp --> void *mpp_dec_parser_thread(void *data)这个线程出现问题了
可以编译个debug库试试看。还有用
mpi_dec_test -i <input.jpg> -t 8 -w <width> -h <height>
看下解码有没有问题。
mpi_dec_test 在MPP的编译后的build/linux目录下可以找到
Starting program: /root/xindun/mpi_dec_test -i /root/xindun/signal.jpg -t 8 -w 1280 -h 720 warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. mpp[3807]: mpi_dec_utils: cmd parse result: mpp[3807]: mpi_dec_utils: input file name: /root/xindun/signal.jpg mpp[3807]: mpi_dec_utils: output file name: mpp[3807]: mpi_dec_utils: config file name: mpp[3807]: mpi_dec_utils: width : 1280 mpp[3807]: mpi_dec_utils: height : 720 mpp[3807]: mpi_dec_utils: type : 8 mpp[3807]: mpi_dec_utils: debug flag : 0 mpp[3807]: mpi_dec_utils: max frames : 0 mpp[3807]: mpi_dec_test: mpi_dec_test start mpp[3807]: mpi_dec_test: input file size 45585 mpp[3807]: mpp_rt: NOT found ion allocator mpp[3807]: mpp_rt: found drm allocator mpp[3807]: mpp_info: mpp version: c7ed08c9 author: Yandong Lin 2021-08-16 [h264d_parser]: optimize the size of some struct mpp[3807]: mpi_dec_test: 0x2fea0 mpi_dec_test decoder test start w 1280 h 720 type 8 [New LWP 3808] mpp[3807]: mpp_device: mpp_dev_init found unsupported client type 3 in platform 50202 mpp[3807]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt dev type 1 -> 3 switch failed ret -6 mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs setup output format 0 failed mpp[3807]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory mpp[3807]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5 mpp[3807]: mpi_dec_test: 0x2fea0 decoded frame 0 mpp[3807]: mpp_device: mpp_dev_init found unsupported client type 3 in platform 50202 mpp[3807]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt dev type 1 -> 3 switch failed ret -6 mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs setup output format 0 failed mpp[3807]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12 mpp[3807]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5 mpp[3807]: mpi_dec_test: 0x2fea0 decoded frame 1 mpp[3807]: mpp_device: mpp_dev_init found unsupported client type 3 in platform 50202 mpp[3807]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt dev type 1 -> 3 switch failed ret -6 mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs setup output format 0 failed mpp[3807]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12 mpp[3807]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5 mpp[3807]: mpi_dec_test: 0x2fea0 decoded frame 2 mpp[3807]: mpp_device: mpp_dev_init found unsupported client type 3 in platform 50202 mpp[3807]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt dev type 1 -> 3 switch failed ret -6 mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs setup output format 0 failed mpp[3807]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory mpp[3807]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12
这个倒是不会崩溃,但是也解不了码
这个是什么芯片平台?跑下 mpp_platform_test
是RV1126,SDK是1.7.0
你们那边有RV1126的EVB板吗?在板上更换最新编译的mpp库,在板子上跑jpg解码正常吗?
加这个补丁看看 8ca5be7.diff.zip
额,打了补丁后还是一样的问题
有出错 log 么?
Thread 10 "mpp_dec_parser" received signal SIGSEGV, Segmentation fault. [Switching to LWP 695] 0x9c670140 in ?? () from /lib/libc.so.6 (gdb) bt #0 0x9c670140 in ?? () from /lib/libc.so.6 #1 0xa156ce08 in ?? () from /oem/usr/lib/librockchip_mpp.so.1 Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb)
到这里取一下最新版本看看: https://github.com/hermanchen/mpp/
Thread 10 "mpp_dec_parser" received signal SIGSEGV, Segmentation fault. [Switching to LWP 1155] 0x9c5da140 in ?? () from /lib/libc.so.6 (gdb) bt #0 0x9c5da140 in ?? () from /lib/libc.so.6 #1 0xa14d702c in ?? () from /oem/usr/lib/librockchip_mpp.so.1 Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb)
还是有问题的
width:[1280], height:[720], path:[./signal.jpg], mode:[hard], type:[jpeg], calib:[false], flip:[n] opencv version:[4.5.3] mpp[1176]: mpp_info: mpp version: 2ceca7b5 author: sayon.chen 2021-07-01 [hal_jpege_vpu]: Fix qtable memory leak mpp[1176]: mpp_rt: NOT found ion allocator mpp[1176]: mpp_rt: found drm allocator mpp[1176]: mpp_info: mpp version: 2ceca7b5 author: sayon.chen 2021-07-01 [hal_jpege_vpu]: Fix qtable memory leak
这个版本是正常的
了解,可以二分法试下看看哪个版本出现的问题…… 我们这边测试 https://github.com/hermanchen/mpp/ 这里的最新版本应该是好的
[drm]: Add DRM_CLOEXEC|DRM_RDWR flag on fd import …
- Add drm fd open flag.
- Remove unused handle process on mmap. Change-Id: Id0b29b8914c1e8e8ae6af40877df21f73b46346e Signed-off-by: Jeffy Chen [email protected] @HermanChen HermanChen committed on 15 Jul
刚试了下,从这个开始(包括这个)d到最新的不行了
了解,这个补丁后面还有几个 drm 的补丁,主要是修改 drm fd 打开时候的访问权限问题
可能外部分配的 buffer 也要修改下。
现在可以用的这个CPU占用比较高
请问下,这个问题啥时候能修好呢?
我碰到了一样的问题,我去看了一下代码,意思是如果解码 jpeg 输出要是默认以外的格式都要使用 PP
结尾的解码器?
rv1126
的支持列表里面没有 PP
结尾的解码类型,意思是 rv1126
的 VPU 硬件上不支持 post process 吗?
测试试一下 https://github.com/hermanchen/mpp/ 这里的最新版本,看看还会不会有问题
如果没有问题,我就把开发分支的版本同步过来
@HermanChen 还是有问题
mpp[899]: mpp_rt: NOT found ion allocator
mpp[899]: mpp_rt: found drm allocator
mpp[899]: mpp_info: mpp version: 0faeb94 author: Johnson Ding 2021-08-23 [hal_jpegd]: Check output format before decoding
mpp[899]: jpegd_parser: jpegd_init exit
mpp[899]: mpp_dec: detail: 0x8c4600 control cmd 0031000a param 0xaef01434 start
mpp[899]: mpp_dec: ctrl proc 0 cmd 0031000a
mpp[899]: jpegd_parser: jpegd_control enter
mpp[899]: jpegd_parser: jpegd_control exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_control enter
mpp[899]: HAL_JPEG_VDPU2: output_format:2
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_control exit ret 0
mpp[899]: mpp_dec: ctrl proc 1 done send 1
mpp[899]: mpp_dec: mpp_pkt_in_rdy 0
mpp[899]: mpp_dec: detail: 0x8c4600 control cmd 0031000a param 0xaef01434 finish
unsupported descriptor subtype VS_STILL_IMAGE_FRAME
unsupported descriptor subtype VS_COLORFORMAT
unsupported descriptor subtype VS_STILL_IMAGE_FRAME
unsupported descriptor subtype VS_COLORFORMAT
bmHint: 0001
bFormatIndex: 2
bFrameIndex: 10
dwFrameInterval: 333333
wKeyFrameRate: 0
wPFrameRate: 0
wCompQuality: 0
wCompWindowSize: 0
wDelay: 32
dwMaxVideoFrameSize: 1843200
dwMaxPayloadTransferSize: 3072
bInterfaceNumber: 1
attempt to claim already-claimed interface 1
mpp[899]: mpp_dec: mpp_pkt_in_rdy 0
mpp[899]: mpp_dec: poll ready
mpp[899]: mpp_dec: task in ready
mpp[899]: jpegd_parser: jpegd_prepare enter
mpp[899]: jpegd_parser: jpegd_split_frame enter
mpp[899]: jpegd_parser: jpegd_split_frame exit
mpp[899]: jpegd_parser: jpegd_prepare exit
mpp[899]: jpegd_parser: jpegd_parse enter
mpp[899]: jpegd_parser: jpegd_decode_frame enter
mpp[899]: jpegd_parser: jpegd_decode_frame exit
mpp[899]: jpegd_parser: jpegd_allocate_frame enter
mpp[899]: jpegd_parser: jpegd_allocate_frame exit
mpp[899]: jpegd_parser: jpegd_update_frame enter
mpp[899]: jpegd_parser: jpegd_update_frame exit
mpp[899]: jpegd_parser: jpegd_parse exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_gen_regs enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_regs_init enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_regs_init exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_write_code_word_number enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_write_code_word_number exit
mpp[899]: HAL_JPEGD_COMMON: jpegd_write_qp_ac_dc_table enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_write_qp_ac_dc_table exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_chroma_table_id enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_chroma_table_id exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_stream_offset enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_stream_offset exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp pp_enable 0
mpp[899]: HAL_JPEG_VDPU2: output_frame_fd:2, reg131:2
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_gen_regs exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start enter
mpp[899]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 14 Bad address
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 14
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait enter
mpp[899]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait exit
mpp[899]: mpp_dec: mpp_pkt_in_rdy 0
mpp[899]: mpp_dec: mpp_pkt_in_rdy 0
mpp[899]: mpp_dec: poll ready
mpp[899]: mpp_dec: task in ready
mpp[899]: jpegd_parser: jpegd_prepare enter
mpp[899]: jpegd_parser: jpegd_split_frame enter
mpp[899]: jpegd_parser: jpegd_split_frame exit
mpp[899]: jpegd_parser: jpegd_prepare exit
mpp[899]: jpegd_parser: jpegd_parse enter
mpp[899]: jpegd_parser: jpegd_decode_frame enter
mpp[899]: jpegd_parser: jpegd_decode_frame exit
mpp[899]: jpegd_parser: jpegd_allocate_frame enter
mpp[899]: jpegd_parser: jpegd_allocate_frame exit
mpp[899]: jpegd_parser: jpegd_update_frame enter
mpp[899]: jpegd_parser: jpegd_update_frame exit
mpp[899]: jpegd_parser: jpegd_parse exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_setup_output_fmt exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_gen_regs enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_regs_init enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_regs_init exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_write_code_word_number enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_write_code_word_number exit
mpp[899]: HAL_JPEGD_COMMON: jpegd_write_qp_ac_dc_table enter
mpp[899]: HAL_JPEGD_COMMON: jpegd_write_qp_ac_dc_table exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_chroma_table_id enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_chroma_table_id exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_stream_offset enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_set_stream_offset exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp enter
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp pp_enable 0
mpp[899]: HAL_JPEG_VDPU2: output_frame_fd:2, reg131:2
mpp[899]: HAL_JPEG_VDPU2: jpegd_setup_pp exit
mpp[899]: HAL_JPEG_VDPU2: jpegd_gen_regs exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_gen_regs exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start enter
mpp[899]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start exit
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait enter
^Cmpp[899]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5
mpp[899]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait exit
@HermanChen mpi_dec_test 的日志
linaro@rv1126:~$ sudo mpi_dec_test -i ./IMG_20210709_202627R_20210709_202718093.jpg -o jpg.bin -width 960 -height 1280 -t 8 -d
mpp[460]: mpi_dec_utils: invalid debug flag
mpp[460]: mpi_dec_utils: cmd parse result:
mpp[460]: mpi_dec_utils: input file name: ./IMG_20210709_202627R_20210709_202718093.jpg
mpp[460]: mpi_dec_utils: output file name: jpg.bin
mpp[460]: mpi_dec_utils: config file name:
mpp[460]: mpi_dec_utils: width : 960
mpp[460]: mpi_dec_utils: height : 1280
mpp[460]: mpi_dec_utils: type : 8
mpp[460]: mpi_dec_utils: debug flag : 0
mpp[460]: mpi_dec_utils: max frames : 0
mpp[460]: mpi_dec_test: mpi_dec_test start
mpp[460]: mpi_dec_test: input file size 85561
mpp[460]: mpp_rt: NOT found ion allocator
mpp[460]: mpp_rt: found drm allocator
mpp[460]: mpp_info: mpp version: 0faeb94 author: Johnson Ding 2021-08-23 [hal_jpegd]: Check output format before decoding
mpp[460]: mpi_dec_test: 0x43d1a0 mpi_dec_test decoder test start w 960 h 1280 type 8
mpp[460]: HAL_JPEG_VDPU2: jpegd_setup_pp pp_enable 0
mpp[460]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 14 Bad address
mpp[460]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 14
mpp[460]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error
mpp[460]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5
mpp[460]: mpi_dec_test: 0x43d1a0 decoded frame 0
mpp[460]: HAL_JPEG_VDPU2: jpegd_setup_pp pp_enable 0
mpp[460]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory
mpp[460]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12
mpp[460]: mpp_serivce: mpp_service_cmd_poll ioctl MPP_IOC_CFG_V1 failed ret -1 errno 5 Input/output error
mpp[460]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait poll cmd failed 5
mpp[460]: mpi_dec_test: 0x43d1a0 decoded frame 1
mpp[460]: HAL_JPEG_VDPU2: jpegd_setup_pp pp_enable 0
mpp[460]: mpp_serivce: mpp_service_cmd_send ioctl MPP_IOC_CFG_V1 failed ret -1 errno 12 Cannot allocate memory
mpp[460]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_start send cmd failed 12
@HermanChen 我应该升级内核么?我看是系统调用报的错。
看下编译的时候有没有加上 HAVE_DRM?