Openmax IL (二)Android多媒体编解码Component

带着三个问题学习这个部分: 
问题1:Android中间各种编解码库的加载与管理? 
问题1:Android如何确定使用那个编解码器并且初始化? 
问题2:Android如何集成一个新的编解码器,硬件平台相关/非硬件平台相关两种情况?

按照OpenMax IL的简述,编解码架构中间至关重要的是如下两点: 
1,各个不同功能的conponent 
2,平台商实现的“media.resouce_manager”,用来管理conponent需要的资源。从而控制component状态的变化。

PS: 
本文是基于Android7.0+QCOM8909高通平台,播放本地视频的情况分析代码,先对架构有一个整体的认识,后面再开始对流媒体以及协议的学习与分析。

1,编解码加载与管理流程

1.1,系统相关的uml类图—看编解码相关成员模块


分析类图: 
其中主要包括个模块 
1,nuplay 
2,MediaCodec 
3,OMXConponent 
4,FileSouce

1.2编解码库的加载和初始化管理


二,加载初始化时序图,以及流程分析

一,系统包含的编解码库文件的描述文件 
“/etc/media_codecs.xml” 
“/etc/media_codecs_performance.xml”

这两个文件列举了这个系统支持的所有音视频编解码对应的支持格式,仅仅在开机初始化的时候加载一次 
project 编译文件:

# media_profiles and media_codecs xmls for msm8909
ifeq ($(TARGET_ENABLE_QC_AV_ENHANCEMENTS), true)
PRODUCT_COPY_FILES += device/Project/media/media_profiles_8909.xml:system/etc/media_profiles.xml \ 
                      device/Project/media/media_codecs_8909.xml:system/etc/media_codecs.xml \ device/Project/media/media_codecs_performance_8909.xml:system/etc/media_codecs_performance.xml endif
  • 1
  • 2
  • 3
  • 4
  • 5

qcom/base.mk编译文件

PRODUCT_COPY_FILES += \    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \  frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:system/etc/media_codecs_google_video.xml \ device/qcom/common/media/media_profiles.xml:system/etc/media_profiles.xml \ #覆盖 device/qcom/common/media/media_codecs.xml:system/etc/media_codecs.xml #覆盖 
  • 1
  • 2
  • 3
  • 4

相关文件描述

//media_codecs.xml(media_codecs_8909.xml)
<CodecList>
    <Include href="media_codecs_google_audio.xml" /> <Include href="media_codecs_google_telephony.xml" /> <Settings> <Setting name="max-video-encoder-input-buffers" value="9" /> </Settings> <Encoders> <!-- Video Hardware --> <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" > <Quirk name="requires-allocate-on-input-ports" /> <Quirk name="requires-allocate-on-output-ports" /> <Quirk name="requires-loaded-to-idle-after-allocation" /> <Limit name="size" min="96x64" max="1280x720" /> <Limit name="alignment" value="2x2" /> <Limit name="block-size" value="16x16" /> <Limit name="blocks-per-second" min="1" max="108000" /> <Limit name="bitrate" range="1-14000000" /> <Limit name="concurrent-instances" max="8" /> <Feature name="intra-refresh" /> </MediaCodec> </Encoders> <Decoders> <!-- Audio Software --> <MediaCodec name="OMX.qti.audio.decoder.flac" type="audio/flac" > <Limit name="concurrent-instances" max="10" /> </MediaCodec> <!-- Video Hardware --> <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" > <Quirk name="requires-allocate-on-input-ports" /> <Quirk name="requires-allocate-on-output-ports" /> <Quirk name="defers-output-buffer-allocation" /> <Limit name="size" min="64x64" max="1920x1088" /> <Limit name="alignment" value="2x2" /> <Limit name="block-size" value="16x16" /> <Limit name="blocks-per-second" min="1" max="244800" /> <Limit name="bitrate" range="1-20000000" /> <Feature name="adaptive-playback" /> <Limit name="concurrent-instances" max="8" /> </MediaCodec> </Decoders> <Include href="media_codecs_google_video.xml" /> </CodecList> // media_codecs_performance.xml (media_codecs_performance_8909.xml) <MediaCodecs> <Encoders> <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" update="true"> <Limit name="measured-frame-rate-320x240" range="183-183" /> <Limit name="measured-frame-rate-720x480" range="56-56" /> <Limit name="measured-frame-rate-1280x720" range="25-25" /> </MediaCodec> <!--还有很多MediaCodec成员--> </Encoders> <Decoders> <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" update="true"> <Limit name="measured-frame-rate-320x240" range="457-457" /> <Limit name="measured-frame-rate-720x480" range="274-274" /> <Limit name="measured-frame-rate-1280x720" range="168-168" /> <Limit name="measured-frame-rate-1920x1088" range="54-54" /> </

转载于:https://www.cnblogs.com/yangjies145/p/8910618.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值