现在的位置: 首页 > 综合 > 正文

S3C6410 MFC H264 编码

2013年04月09日 ⁄ 综合 ⁄ 共 1342字 ⁄ 字号 评论关闭

自己的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释放实例;

抱歉!评论已关闭.