上周惊奇的发现Tiny210没有在Linux下的MFC库。折腾了好几天,终于把Android下的MFC库移植过来了。
Linux下已经有MFC的驱动了,设备名是/dev/s3c-mfc,可以ls -l /dev/s3c-mfc验证一下
所以移植的基本步骤就很简单了,把Android4源码中 device/friendly-arm/mini210/sec_mm/sec_omx/sec_codecs/video/mfc_c110 整个目录拷贝到linux下。
编码的话只用到3个文件 mfc_interface.h, SsbSipMfcApi.h 和 SsbSipMfcEncAPI.c,解码再多一个SsbSipMfcDecAPI.c
然后SsbSipMfcEncAPI.c中需要把对 utils/Log.h 相关调用(LOGE,LOGV,LOGI等)改掉,因为linux没有这个库。LOGE改成fprintf(stderr,...)就行,LOGV,LOGI可以直接注释掉。或者自己用fprintf定义宏LOGE。
然后就可以调用SsbSipMfc的API了。
注意几点:
1)输入yuv格式必须是nv12,这个和6410是不同的。
2)参数里面FrameRate应该是实际fps的1000倍。比如30fps就应该设FrameRate=30000,这个在s5pv210的datasheet里面有说明。
3)bootloader必须用superboot。我之前为了开发方便一直用u-boot+tftp+nfs,结果总是出错,换成superboot,就没问题了。不知道superboot对mfc做了什么初始化之类的
测试程序和修改的API源码附上供大家参考。