音视频编解码学习(二):ffmpeg rockchip之利用rkmpp进行硬解码——在VM端gdb-multiarch调试开发板rkmppdec.c源码
·
1、环境准备
- 虚拟机、开发板。环境配置请参考文章:x86虚拟机(Ubuntu)交叉编译arm架构的ffmpeg-rockchip、rkmpp、rkrga等
- vscode或者TRAE 都行,(我的vscode copilot总被封,所以我现在用TRAE),用来看源码
2、注意事项
2.1、ffmpeg rockchip在configure的时候,记得打开调试符号-g,并且–disable-stripping(禁止剥离符号)
命令如下:
./configure --pkg-config=pkgconf --arch=aarch64 --target-os=linux
--cross-prefix=aarch64-linux-gnu- --prefix=/opt/rockchip/ffmpeg-rockchip/ --enable-gpl
--enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-shared
--enable-cross-compile --disable-static --disable-stripping
--extra-cflags="-g -I/opt/rockchip/rkrga-cross/include
-I/opt/rockchip/rklibdrm-cross/include
-I/opt/rockchip/rkmpp-cross/include"
--extra-ldflags="-g -L/opt/rockchip/rkrga-cross/lib
-L/opt/rockchip/rklibdrm-cross/lib
-L/opt/rockchip/rkmpp-cross/lib"
否则会报错:
(No debugging symbols found in target:/opt/ffmpeg-rockchip/bin/ffmpeg)
(No debugging symbols found in target:/lib/ld-linux-aarch64.so.1)
# 配置编译ffmpeg的时候如果添加了-g --disable-stripping
# 使用以下命令查看是否有符号
readelf -s /opt/rockchip/ffmpeg-rockchip/bin/ffmpeg | grep "FUNC"
// 正确会有如下输出:
// 0: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avcodec_receive_frame
// 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avcodec_send_packet
// 等很长一堆
2.2、重新配置ffmpeg的时候记得先make clean
2.3、由于VM上的虚拟机是x86架构,直接sudo apt install gdb是无法远程调试arm架构的开发板,需要使用gdb-multiarch
sudo apt-get install gdb-multiarch
gdb-multiarch // 开启gdb-multiarch
target remote 192.168.137.11:1234 // 连接开发板
# 在调试之前,记得在VM上的gdb中设置符号路径
set sysroot /opt/rockchip/ffmpeg-rockchip
否则会提示报错:
warning: while parsing target description (at line 4): Target description specified unknown architecture "aarch64"
3、运行程序并调试
开发板上执行命令:
# 我现在主要是想先看下rkmppdec.c中的几个重要函数,所以确保在开发板上执行的命令会调用相关函数
gdbserver :1234 ffmpeg -hwaccel rkmpp -i ./MPP_DEMO/test.mp4 -c:v h264_rkmpp output.mp4
现在开发板终端输出如图所示:
VM终端执行命令:
gdb-multiarch
target remote 192.168.137.11:1234 // 直接写你的开发板ip地址以及对外提供的监听端口号
VM终端输出如图所示:
此时就进入了gdb-multiarch,可以进行远程调试。
# 我在rkmpp_decode_init函数打了个断点
b rkmpp_decode_init
VM终端输出如图:
直接continue / c继续执行,这时候开发板就会继续运行命令,当运行到rkmpp_decode_init时就会暂停
开发板输出如图所示:
可以看到硬解过程暂停了
此时在VM,我们就可以看到如图所示:
我们就可以对应着TARE打开的同版本源码去看代码调试了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)