承接上一章节分析:【六】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,