virtual status_t setParameters(const String8& params);
virtual status_t setListener(const sp<IMediaPlayerClient>& listener);
virtual status_t prepare();
virtual status_t getMaxAmplitude(int* max);
virtual status_t start();
virtual status_t stop();
virtual status_t reset();
virtual status_t init();
virtual status_t close();
virtual status_t release();
。。。
}
可以看到,大部分客户端方法在 MediaRecorderClient 中都有对应方法。这样当我们调
用客户端的 recorder.start();时,最后会调用到 MediaRecorderClient 类中的 start 方法。
status_t MediaRecorderClient::start()
{
LOGV("start");
Mutex::Autolock lock(mLock);
if (mRecorder == NULL) {
LOGE("recorder is not initialized");
return NO_INIT;
}
return mRecorder->start(); //转发给mRecorder
}
//这里的 mRecorder 是在 MediaRecorderClient 构造函数中创建的。
MediaRecorderClient::MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid)
{
。。。
#ifndef NO_OPENCORE
{
//创建了PVMediaRecorder用于录音
mRecorder = new PVMediaRecorder();
}
#else
{
mRecorder = NULL;
}
#endif
mMediaPlayerService = service;
}
其他的调用也是一样,所有的请求基本都转发给了PVMediaRecorder,这个PVMediaRecorder就是opencore
中的对应的录音的类。