rockchip ffmpeg 硬件应用编写

博客作者在公司产品需求下尝试使用FFmpeg+SDL实现音频播放器,但在瑞芯微平台上遇到解码格式不支持的问题。通过参考其他文章并修改代码,解决了sws_getContext函数的错误,但av_hwframe_transfer_data导致性能瓶颈。作者转向测试gstreamer以寻求解决方案,同时发现帧率不正确的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)_雷霄骅的博客-优快云博客_ffmpeg sdl 音频

Rockchip之FFmpeg MPP硬解码_arronzou的博客-优快云博客_ffmpeg mpp

由于公司产品需求,需要使用解码+SDL,找到雷霄骅的源代码(simplest_ffmpeg_player_2.5);下载进行编译。

在瑞星微的平台上进行测试,发现不能使用,直接报错。

报错函数sws_getContext, 不支持解码器输出的格式。

百度搜到另一文章,根据文章进行了修改。

// 如果使用 drm 显示该帧可以直接 zero-copy 绘制帧 ...
// 通过以下操作把 drm 帧拷贝到内存并且转换为NV12 ...
pFrameOK->width = pFrame->width;
pFrameOK->height = pFrame->height;
pFrameOK->format = AV_PIX_FMT_NV12;
// 此时 pFrameOK 就是转储出来的 NV12 格式帧
av_hwframe_transfer_data(pFrameOK, pFrame, 0)

直接崩溃,死机;查找原因,发现是需要hwcontext初始化。

从ffmeg的测试代码中,找到一份hw_decode.c,进行修改测试;遇到问题点av_hwdevice_ctx_create fail,一路往ffmpeg源代码中查看,发现要专入drm的路径。将路径传入后,可以正常出始化,解码正常。

参考雷神作品,加入SDL;能正常解码并显示,但发现帧率不对,进行测试,发现帧率在720p时,达到的30帧。

测试发现主要占时是av_hwframe_transfer_data, 百度了解发现此函数是个性能大坑,但没有此函数,你无法从内核中将数据拷贝出来。弃坑,开始下载gstreamer,看是否可行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值