stagefright 架构分析(五) 初始化 VideoDecoder

VideoDecoder的初始化实际就是OMX的创建,Stagefright提供了OMX的封装OMXCodec在平台上stagefright -l 可以看到所有的组件VideoDecoder的创建流程status_t AwesomePlayer::initVideoDecoder(uint32_t flags) {//最重要的创建mVideoSource    sp
摘要由CSDN通过智能技术生成

VideoDecoder的初始化实际就是OMX的创建,Stagefright提供了OMX的封装OMXCodec

在平台上stagefright -l 可以看到所有的组件


VideoDecoder的创建流程

status_t AwesomePlayer::initVideoDecoder(uint32_t flags) {

//最重要的创建mVideoSource

    sp<MediaSource> decoder = OMXCodec::Create(
            mClient.interface(), mVideoTrack->getFormat(),
            false, // createEncoder
            mVideoTrack,
            NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);

        status_t err = mVideoSource->start();

}


sp<MediaSource> OMXCodec::Create(
        const sp<IOMX> &omx,
        const sp<MetaData> &meta, bool createEncoder,
        const sp<MediaSource> &source,
        const char *matchComponentName,
        uint32_t flags,
        const sp<ANativeWindow> &nativeWindow) {

//得到MediaExtractor解析的MIME

    bool success = meta->findCString(kKeyMIMEType, &mime);

//找到对应的decoder name

    findMatchingCodecs(
            mime, createEncoder, matchComponentName, flags,
            &matchingCodecs, &matchingCodecQuirks);

//可能会找到多个匹配的codec

    for (size_t i = 0; i < matchingCodecs.size(); ++i) {

//得到对应的component name

        const char *componentNameBase = matchingCodecs[i].string();

//创建软件codec

            softwareCodec = InstantiateSoftwareDecoder(componentName, source);

//根据component name创建OMX NODE

        status_t err = omx->allocateNode(componentName, observer, &node);

//创建OMXCodec

            sp<OMXCodec> codec = new OMXCodec(
                    omx, node, quirks, flags,
                    createEncoder, mime, componentName,
                    source, nativeWindow);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值