android P MediaCodec编解码流程分析

本文详细分析了Android P中MediaCodec的初始化、组件实例化、MediaCodecList、OMX插件加载、硬编解码MtkOMXPlugin的初始化、回调设置、参数配置、设置InputSurface流程、编解码过程以及数据填充等步骤,深入探讨了MediaCodec在Android系统中的工作原理。
摘要由CSDN通过智能技术生成

1.MediaCodec初始化流程分析

 通过上面流程分析可知,MediaCodecList初始化是通过调用它的getLocalInstance函数,然后在里面new的MediaCodecList对象。在MediaCodec的CreateByType函数中new了MediaCodec对象。

allocateNode调用流程是在ACodec.cpp中的onAllocateComponent中,然后调用到IOMX.cpp中的allocateNode,再调用到WOmx.cpp的allocateNode中,再调用到Omx.cpp(IOmx.hal)中的allocateNode:

 

 所以ACodec中的omxNode是LWOmxNode,其中的mBase是Omx.cpp,LWOmxNode中的mBase是TWOmxNode,TWOmxNode中的mBase是OMXNodeInstance。

2. makeComponentInstance流程分析

在OMX得allocateNode中调用了makeComponentInstance函数,

 <1>. 获取了&handle,这个handle就是调用MtkOmxBase.h中得GetComponentHandle得到的:

mCompHandle的初始化,最后framework层调用handle的函数都在这里面对应: 

 <2>. 回调函数分析:

OMX_ERRORTYPE err = mMaster->makeComponentInstance(
                name.c_str(), &OMXNodeInstance::kCallbacks,
                instance.get(), &handle);

主要是三个回调:

OMX_ERRORTYPE (*EventHandler)(
        OMX_IN OMX_HANDLETYPE hComponent,
        OMX_IN OMX_PTR pAppData,
        OMX_IN OMX_EVENTTYPE eEvent,
        OMX_IN OMX_U32 nData1,
        OMX_IN OMX_U32 nData2,
        OMX_IN OMX_PTR pEventData);

OMX_ERRORTYPE (*EmptyBufferDone)(
        OMX_IN OMX_HANDL
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值