4418linux内核源码,linux下4418的硬件解码有人搞过没?

linux下4418的硬件解码有人搞过没?

最近在做4418硬件解码H.264转yuv,代码运行不下去,请教一下各路大神

我的smart4418内核版本是Linux NanoPi2 3.4.39-s5p4418 就是友善官方的

按照网上的说法,linux3.0的硬解码设备节点是/dev/s3c-mfc

linux3.5的硬解码设备节点是/dev/videox 我一看/dev/下的文件,有video4/video5/video6/video7/video8/video9/video10

好家伙这么多,只能一个个试了。

我从安卓4.2.2的源码里找到了硬解码的相关api

SsbSipMfcDecAPI.c (android-4.2.2_r1\hardware\samsung_slsi\exynos4\multimedia\codecs\video\exynos4\mfc_v4l2\dec\src)

拷贝到我自己的代码中,这个文件中有很多的LOGA LOGI函数全部用printf代替

又从安卓源码中,找到硬件编解码的固件s5p-mfc.fw,把它放到/lib/firmware下

然后我又找到了一些参考代码,在此基础上修改。

参考代码应该还是linux3.0的硬件解码api,因为他的驱动节点还是/dev/s3c-mfc

3.0与3.5的SsbSipMfcDecAPI.c代码差分较大,函数接口名字差别倒不是太大,就是SsbSipMfcDecOpen这个函数3.5版本没有入口参数了

附件是我的代码 input.h264是待解码的文件

gcc(arm-none-linux-gnueabi-gcc) mainDec.c color_space_convertor.c SsbSipMfcDecAPI.c -o mainDec

直接./mainDec就行了

SsbSipMfcDecAPI.c中开头有两个定义

static char *mfc_dev_name = SAMSUNG_MFC_DEV_NAME;   //"/dev/video"

static int mfc_dev_node = 9;

程序会把两个字符串连在一起,然后去打开设备

hMFCOpen = open(mfc_dev_name, O_RDWR|O_NONBLOCK, 0);

打开设备后会发送命令VIDIOC_QUERYCAP来获取设备的能力

ret = ioctl(pCTX->hMFC, VIDIOC_QUERYCAP, &cap);     //获取设备的能力

if (ret != 0) {

printf("[%s] VIDIOC_QUERYCAP failed",__func__);

goto error_case2;

}

if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)) {

printf("[%s] Device does not support capture",__func__);    //设备不支持捕获

goto error_case2;

}

if (!(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT_MPLANE)) {

printf("[%s] Device does not support output",__func__);     //设备不支持输出

goto error_case2;

}

if (!(cap.capabilities & V4L2_CAP_STREAMING)) {

printf("[%s] Device does not support streaming",__func__);  //设备不支持流

goto error_case2;

}

结果我的系统上除了video6之外,其他的video4-video10 各种不支持,不知道是怎么回事

接着又会发送VIDIOC_S_FMT命令,然后我的代码就S_FMT failed了

ret = ioctl(pCTX->hMFC, VIDIOC_S_FMT, &fmt);

if (ret != 0) {

printf("[%s] S_FMT failed\n",__func__);

goto error_case2;

}

百度了一下 VIDIOC_S_FMT意思是设置当前驱动的视频捕获格式 硬解码和视频捕获有关系吗?我运行程序的时候没有插摄像头,这个没关系的吧

我的猜测是不是要linux3.5的内核版本才可以,有3.5内核的不妨试一下,看看是不是可以运行的

接下来准备自己搞一个3.5版本的内核试一试,另外我还有一个疑问,就是看到其他板子的硬件编解码要用superboot,superboot是啥?是友善自己修改的bootloader吗?是的话4418的superboot哪里能找到啊?

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值