驱动代码: https://github.com/torvalds/linux/tree/master/drivers/staging/media/sunxi/cedrus
make menuconfig 必须选择以下内核配置参数:
CONFIG_MEDIA_SUPPORT
CONFIG_MEDIA_CONTROLLER_REQUEST_API
CONFIG_MEDIA_CONTROLLER
CONFIG_V4L_MEM2MEM_DRIVERS
CONFIG_VIDEO_SUNXI_CEDRUS
Device Drivers ---> Generic Driver Options --->
(256) Size in Mega Bytes
Device Drivers ---> Multimedia support
[*] Cameras/video grabbers support
[*] Media Controller API
[*] Enable Media controller Request API (EXPERIMENTAL)
[*] V4L2 sub-device userspace API
[*] Enable advanced debug functionality on V4L2 drivers
[*] V4L platform devices --->
<M> Allwinner V3s Camera Sensor Interface driver
[*] Memory-to-memory multimedia devices --->
<M> Deinterlace support
<M> SuperH VEU mem2mem video processing driver
[*] Media test drivers --->
<M> Virtual Media Controller Driver (VIMC)
<M> Virtual Video Test Driver
[ ] Enable CEC emulation support (NEW)
(64) Maximum number of devices (NEW)
<M> Virtual Memory-to-Memory Driver
<M> Virtual Codec Driver
Device Drivers ---> Staging drivers ---> Media staging drivers --->
[*] Allwinner sunXi family Video Devices
<M> Allwinner Cedrus VPU driver
解码测试:
ffmpeg -hwaccel drm -hwaccel_device /dev/dri/card0 -i h264.mp4 -pix_fmt bgra -f fbdev /dev/fb0
参考链接1: 已删除
参考链接2: https://lkml.org/lkml/2019/8/22/1425
在线
这个意思是全志那一票的芯片在Linux下的H264硬解应该是可以了?
离线
应该是的 https://github.com/torvalds/linux/blob/master/drivers/staging/media/sunxi/cedrus/cedrus.c
目前直接支持 A10/A13/A20/A33/H3/A64/H5/H6
但是 V3s/S3 使用需要可能还需要修改一点点
static const struct of_device_id cedrus_dt_match[] = {
{
.compatible = "allwinner,sun4i-a10-video-engine",
.data = &sun4i_a10_cedrus_variant,
},
{
.compatible = "allwinner,sun5i-a13-video-engine",
.data = &sun5i_a13_cedrus_variant,
},
{
.compatible = "allwinner,sun7i-a20-video-engine",
.data = &sun7i_a20_cedrus_variant,
},
{
.compatible = "allwinner,sun8i-a33-video-engine",
.data = &sun8i_a33_cedrus_variant,
},
{
.compatible = "allwinner,sun8i-h3-video-engine",
.data = &sun8i_h3_cedrus_variant,
},
{
.compatible = "allwinner,sun50i-a64-video-engine",
.data = &sun50i_a64_cedrus_variant,
},
{
.compatible = "allwinner,sun50i-h5-video-engine",
.data = &sun50i_h5_cedrus_variant,
},
{
.compatible = "allwinner,sun50i-h6-video-engine",
.data = &sun50i_h6_cedrus_variant,
},
{ /* sentinel */ }
};
在线
牛逼,赶紧试试
离线
离线
照着H3改过v3s的,但是sram的初始化不对,工作不起来
离线
测试过官方的库在V3S的BSP内核,初始化成功,但是编码出错,由于官方只提供库,测试的现象是一读取编码结果就死机,追踪到的结果是编码获取地址没有映射成功,但是又没有源码排查,只能乖乖用camdroid
离线
shaoxi2010 说:照着H3改过v3s的,但是sram的初始化不对,工作不起来
SRAM? 为什么要改SRAM?SRAM不是 boot0才用的吗?
主线的代码在初始化的时候要将SRAM特殊初始化给VE使用,H3的SRAM布局和V3S的不一样,然后就卡死在上面了。没记错的话USB和eMAC都在用SRAM
离线
晕哥 说:shaoxi2010 说:照着H3改过v3s的,但是sram的初始化不对,工作不起来
SRAM? 为什么要改SRAM?SRAM不是 boot0才用的吗?
主线的代码在初始化的时候要将SRAM特殊初始化给VE使用,H3的SRAM布局和V3S的不一样,然后就卡死在上面了。没记错的话USB和eMAC都在用SRAM
找到了,在这里有提到的。有一段C1的SRAM用于VE,但是V3S在手册没得提到这东西,看看那位大佬可以搞定这个不。
https://linux-sunxi.org/SRAM_Controller_Register_Guide
离线
好期待啊
离线
shaoxi2010 说:晕哥 说:SRAM? 为什么要改SRAM?SRAM不是 boot0才用的吗?
主线的代码在初始化的时候要将SRAM特殊初始化给VE使用,H3的SRAM布局和V3S的不一样,然后就卡死在上面了。没记错的话USB和eMAC都在用SRAM
找到了,在这里有提到的。有一段C1的SRAM用于VE,但是V3S在手册没得提到这东西,看看那位大佬可以搞定这个不。
https://linux-sunxi.org/SRAM_Controller_Register_Guide
你说的是这个mmap吧,手册59页里面有提到,就给了映射地址,具体详细介绍没有,我之间弄过,初始化成功,编码会死掉,核心库全志没有开放代码,追踪不到死掉的原因
离线
shaoxi2010 说:shaoxi2010 说:主线的代码在初始化的时候要将SRAM特殊初始化给VE使用,H3的SRAM布局和V3S的不一样,然后就卡死在上面了。没记错的话USB和eMAC都在用SRAM
找到了,在这里有提到的。有一段C1的SRAM用于VE,但是V3S在手册没得提到这东西,看看那位大佬可以搞定这个不。
https://linux-sunxi.org/SRAM_Controller_Register_Guidehttps://whycan.cn/files/members/1974/_20191021140119.png
你说的是这个mmap吧,手册59页里面有提到,就给了映射地址,具体详细介绍没有,我之间弄过,初始化成功,编码会死掉,核心库全志没有开放代码,追踪不到死掉的原因
还不是那个地方吧,因为全志复用ip核的可能性极大,看社区说的是在H3上改过来的,我按着H3修改后驱动报错的位置是在,SRAM contorl里面,然后加了几个打印发现SRAM功能配置失败了,我也就没管了。
离线
在S3上跑起来Cedrus了,只可惜好像出BUG了
某些帧还是能看出来有那么几块是处理正确的
离线
楼上威武!
离线
我就挖一铲子,这样通过搜索引擎过来的人也知道传统的CedarX框架也支持主线了
https://whycan.cn/t_4219.html
离线
我们去年7月份就用上这个了,用在a10/a20/h3的片子上,出了大概600k的货,虽然有一些问题(比如B帧P帧的解码马赛克,绿屏等等),但是解决后还是不错的
离线
我们去年7月份就用上这个了,用在a10/a20/h3的片子上,出了大概600k的货,虽然有一些问题(比如B帧P帧的解码马赛克,绿屏等等),但是解决后还是不错的
牛,方便分享一些使用方法吗?
离线
牛,方便分享一些使用方法吗?
用户空间用sunxi-cedrus开源项目配套的libva-v4l2-request+ffmpeg,ffmpeg的avcodec_decode_video2里使用vaapi context做硬件加速,解码完之后,用drm接口提交buffer去显示
离线
好消息~~~
离线
好消息!硬件很重要!全志的系列芯片,驱动是硬伤啊!
离线
晕哥要不要出些成品的板子,已经比较有规模了,应该很多人为此做贡献吧
离线
我们去年7月份就用上这个了,用在a10/a20/h3的片子上,出了大概600k的货,虽然有一些问题(比如B帧P帧的解码马赛克,绿屏等等),但是解决后还是不错的
这个设备树该如何写呢?
离线
我参考:https://patchwork.kernel.org/project/linux-arm-kernel/cover/20200912143052.30952-1-m.cerveny@computer.org/
在v3s上开启cedrus,然而kernel运行时,也是报了sram的错误:
[ 1.347934] cedrus 1c0e000.video-codec: Failed to claim SRAM
[ 1.353612] cedrus 1c0e000.video-codec: Failed to probe hardware
有没有大佬能指点一下。
离线
@晕哥
我的ffmpeg提示 No device available for decoder: device type drm needed for codec h264.
请问要怎么处理呢?
谢谢!
离线
有梦的地方 说:牛,方便分享一些使用方法吗?
用户空间用sunxi-cedrus开源项目配套的libva-v4l2-request+ffmpeg,ffmpeg的avcodec_decode_video2里使用vaapi context做硬件加速,解码完之后,用drm接口提交buffer去显示
请问是在v3s吗?主线linux版本是多少?libva-v4l2-request好像不支持 linux 6.0.
离线