【六】Android MediaPlayer整体架构源码分析 -【start请求播放处理流程】【Part 5】【02】

承接上一章节分析:【六】Android MediaPlayer整体架构源码分析 -【start请求播放处理流程】【Part 5】【01】
本系列文章分析的安卓源码版本:【Android 10.0 版本】

【此章节小节编号就接着上一章节排列】
1、setComponentRole(encoder /* isEncoder */, mime)实现分析:
设置组件角色信息

// [frameworks/av/media/libstagefright/ACodec.cpp]
status_t ACodec::setComponentRole(
        bool isEncoder, const char *mime) {
   
    // 由前面很早章节分析过AVUtils该类实现方式,因此此处我们直接分析默认实现
    // 见1.1小节分析    
    const char *role = AVUtils::get()->getComponentRole(isEncoder, mime);
    if (role == NULL) {
   
        return BAD_VALUE;
    }
    // 设置组建角色信息,mOMXNode为此前【allocateNode】流程中创建的OMX组件节点接口对象
    // 见1.2小节分析
    status_t err = SetComponentRole(mOMXNode, role);
    if (err != OK) {
   
        ALOGW("[%s] Failed to set standard component role '%s'.",
             mComponentName.c_str(), role);
    }
    return err;
}

1.1、AVUtils::get()->getComponentRole(isEncoder, mime)实现分析:
由前面很早章节分析过AVUtils该类实现方式,因此此处我们直接分析默认实现

// [frameworks/av/media/libavextensions/stagefright/ACodec.cpp]
const char *AVUtils::getComponentRole(bool isEncoder, const char *mime) {
   
    return GetComponentRole(isEncoder,mime);
}

// [frameworks/av/media/libstagefright/omx/OMXUtils.cpp]
const char *GetComponentRole(bool isEncoder, const char *mime) {
   
	// 定义方法内结构,mime信息和编解码器角色信息映射
    struct MimeToRole {
   
        const char *mime;
        const char *decoderRole;
        const char *encoderRole;
    };

    // 定义该结构静态数组【所有mime信息的映射】
    static const MimeToRole kMimeToRole[] = {
   
#ifdef __ANDROID_VNDK_EXT__
// 默认该值在【libstagefright/foundation/Android.bp】和【libstagefright/omx/Android.bp】编译文件中已定义,因此将执行此处
        {
    MEDIA_MIMETYPE_AUDIO_EVRC,
          "audio_decoder.evrchw", "audio_encoder.evrc" },
        {
    MEDIA_MIMETYPE_AUDIO_QCELP,
          "audio_decoder.qcelp13Hw", "audio_encoder.qcelp13" },
        {
    MEDIA_MIMETYPE_VIDEO_DIVX,
          "video_decoder.divx", NULL },
        {
    MEDIA_MIMETYPE_VIDEO_DIVX4,
          "video_decoder.divx4", NULL },
        {
    MEDIA_MIMETYPE_VIDEO_DIVX311,
          "video_decoder.divx311", NULL },
        {
    MEDIA_MIMETYPE_VIDEO_WMV,
          "video_decoder.vc1",  NULL },
        {
    MEDIA_MIMETYPE_VIDEO_WMV_VC1,
          "video_decoder.vc1",  NULL },
        {
    MEDIA_MIMETYPE_AUDIO_AC3,
          "audio_decoder.ac3", NULL },
        {
    MEDIA_MIMETYPE_AUDIO_WMA,
          "audio_decoder.wma", NULL },
        {
    MEDIA_MIMETYPE_AUDIO_ALAC,
          "audio_decoder.alac", NULL },
        {
    MEDIA_MIMETYPE_AUDIO_APE,
          "audio_decoder.ape", NULL },
        {
    MEDIA_MIMETYPE_VIDEO_HEVC,
          "video_decoder.hevc", "video_encoder.hevc" },
        {
    MEDIA_MIMETYPE_AUDIO_AMR_WB_PLUS,
            "audio_decoder.amrwbplus", "audio_encoder.amrwbplus" },
        {
    MEDIA_MIMETYPE_AUDIO_EVRC,
            "audio_decoder.evrchw", "audio_encoder.evrc" },
        {
    MEDIA_MIMETYPE_AUDIO_QCELP,
            "audio_decoder.qcelp13Hw", "audio_encoder.qcelp13" },
        {
    MEDIA_MIMETYPE_VIDEO_MPEG4_DP,
            "video_decoder.mpeg4", NULL },
        {
    MEDIA_MIMETYPE_VIDEO_TME,
          NULL, "video_encoder.tme" },
        {
    MEDIA_MIMETYPE_AUDIO_MHAS,
            "audio_decoder.mpegh", "audio_encoder.mpegh" },
#endif
        {
    MEDIA_MIMETYPE_AUDIO_MPEG,
            "audio_decoder.mp3", "audio_encoder.mp3" },
        {
    MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I,
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值