这里用到了ibinder机制。mPlayer 是在 MediaPlayerService调用create创建的sp<IMediaPlayer> MediaPlayerService::create返回值 是 sp<Client>
你应该查看 MediaPlayerService里面的 Client类。通过查看代码可知status_t MediaPlayerService::Client::setVolume(float leftVolume, float rightVolume)
{
LOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume);
// TODO: for hardware output, call player instead
Mutex::Autolock l(mLock);
if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume);
return NO_ERROR;
}调用 mAudioOutput服务的api
你应该查看 MediaPlayerService里面的 Client类。通过查看代码可知status_t MediaPlayerService::Client::setVolume(float leftVolume, float rightVolume)
{
LOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume);
// TODO: for hardware output, call player instead
Mutex::Autolock l(mLock);
if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume);
return NO_ERROR;
}调用 mAudioOutput服务的api
在客户端MediaPlayer里面,mPlayer只相当于一个播放的接口,不用具体的解码类,
它对应MediaPlayerService里的client类。然后client里才具体去创建createPlayer,对应你的AwesomePlayer
this, pid, connId, client, audioSessionId,
IPCThreadState::self()->getCallingUid());player指向的是mediaPlayerService::Client对象,但定义的player类型是sp<IMediaPlayer>,那player到底是哪种类型,真是晕了
this, pid, connId, client, audioSessionId,
IPCThreadState::self()->getCallingUid());player指向的是mediaPlayerService::Client对象,但定义的player类型是sp<IMediaPlayer>,那player到底是哪种类型,真是晕了是个强指针