[Android Audio]AudioFlinger(一)AudioFlinger的启动

就是学习笔记,当然参考过网上资料,不一定准确,只是记录。

AudioFlinger属于Android的Native层。所以,它会按照自己的特定方式去决定如何启动。像AudioFlinger就是由Linux来间接创建的。

在frameworks/base/media/mediaserver/main_mediaserver.cpp

int main(int argc, char** argv)
{
    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm = defaultServiceManager();
    LOGI("ServiceManager: %p", sm.get());
    AudioFlinger::instantiate();        //启动AudioFlinger
    MediaPlayerService::instantiate();  //启动MediaPlayerService
    CameraService::instantiate();       //启动CameraService
    AudioPolicyService::instantiate();  //启动AudioPolicyService
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

这个main函数会启动和音频media相关的Native层服务。我们来看看这个文件的Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
	main_mediaserver.cpp                      #要编译的源文件

LOCAL_SHARED_LIBRARIES := \                       #依赖的共享库
	libaudioflinger \
	libcameraservice \
	libmediaplayerservice \
	libutils \
	libbinder

base := $(LOCAL_PATH)/../..                       #定义一下base变量,他是一个路径,供下面使用

LOCAL_C_INCLUDES := \                             #本次编译需要的头文件路径
    $(base)/services/audioflinger \
    $(base)/services/camera/libcameraservice \
    $(base)/media/libmediaplayerservice

LOCAL_MODULE:= mediaserver                        #生成模块的名字

include $(BUILD_EXECUTABLE)


因为AudioFlinger的源码在libaudioflinger库中,所以必须在编译的时候依赖这个库。当然,其他的服务也要以来其他的库。

当系统启动的时候,init进程会加载init.rc,在init.rc中,启动了我们的服务mediaserver


service media /system/bin/mediaserver
    class main
    user media
    group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc
    ioprio rt 4

这样就启动了mediaserver,从而启动了AndroidFlinger。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值