您的位置:首页 > 其它

S3C6410 MFC H264 编码

2012-09-05 20:21 190 查看
自己的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释放实例;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: