搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2018-3-31 14:38:29 | 显示全部楼层 |阅读模式
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哪里能找到啊?

以上





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2018-4-2 10:04:30 | 显示全部楼层
自己顶一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-3 20:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表