S3C6410 MFC H264 编码

自己的MID平台播放视频支持的格式有限,按照应用要求需要扩展更多的格式。6410自己是带MFC(multi formatcodec),支持MPEG4,H263,H264的硬解码。通过ls -l/dev可以得知s3c-mfc的驱动模块已经加载了,在android中操纵MFC的编解码部分是在external/opencore/codecs_v2/video/s3c_mfc目录下,发出IO控制。在SD卡中拷贝了.mp4视频文件,的确可以播放,下面跟踪下MFC的工作流程。

      内核启动初始化:
1)执行s3c_mfc_init(),打印“S3C6400 MFC Driver, (c) 2007 Samsung Electronics”;
2)注册平台设备platform_driver_register(&s3c_mfc_driver);成功的话打印“S3C6400 MFC driver module init OK”

3)模块加载完毕后,就开始进入s3c_mfc_probe();

4)获取MFC时钟、打开MFC时钟,映射寄存器物理地址;

5)获取中断、注册中断;
6)调用MFC_MemorySetup() 设置SFR buffer, Bitprocessor buffe(code,work,para)r, Data buffer(stream,yuv frame);

7)调用MFC_HW_Init(),初始化硬件;

      1,调用MfcReset(),复位MFC IP;

      2,调用MfcFirmwareIntoCodeBuf(),加载MFC模块内部固件;
      3,调用MfcStartBitProcessor(),启动BitProcessor;

      4,调用MfcConfigSFR_BITPROC_BUF(),为BitProcessor的主控制器code,work,para三个控制寄存器配置地址;

      5,调用MfcConfigSFR_CTRL_OPTS(),设置BitProcessor的其它控制寄存器;

8)禁用时钟,把MFC设置成LP_MODE,进入挂起就绪态;

       上层应用程序开始执行调用H.264 decode时:
0)上层调用s3c_mfc_open()打开MFC设备;
1)调用MFCInst_Create()创建MFC实例,可以创建多个实例;
2)返回s3c_mfc_open: mfc open success,open结束。

3)调用s3c_mfc_ioctl,执行IOCTL_MFC_GET_LINE_BUF_ADDR,设置line_buf或者ring_buf;

4)调用s3c_mfc_ioctl,执行IOCTL_MFC_MPEG4_DEC_INIT,解码初始化;获取流文件长度及输出YUV的frame的宽高

5)调用s3c_mfc_ioctl,执行IOCTL_MFC_MPEG4_DEC_EXE,解码;在内存中对in buf的流数据解码,赋给out buf的YUV frame

6)视频播放过程中,s3c_mfc_ioctl反复调用:IOCTL_MFC_GET_FRAM_BUF_ADDR和IOCTL_MFC_MPEG4_DEC_EXE;
7)解码完毕,调用MFCInst_Delete释放实例;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值