前面章节我们介绍了startPreview()函数中ICamera对象mCamera的出处,这一章我们介绍前面提到的IBinder指针的由来.
BnMediaRecorder的onTransact()函数是在哪被调用的呢?先看BpMediaRecorder的相关代码:
class BpMediaRecorder: public BpInterface<IMediaRecorder>
{
public:
BpMediaRecorder(const sp<IBinder>& impl)
: BpInterface<IMediaRecorder>(impl)
{
}
status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
{
ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
Parcel data, reply;
data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
data.writeStrongBinder(camera->asBinder());
data.writeStrongBinder(proxy->asBinder());
remote()->transact(SET_CAMERA, data, &reply);
return reply.readInt32
BnMediaRecorder的onTransact()函数是在哪被调用的呢?先看BpMediaRecorder的相关代码:
class BpMediaRecorder: public BpInterface<IMediaRecorder>
{
public:
BpMediaRecorder(const sp<IBinder>& impl)
: BpInterface<IMediaRecorder>(impl)
{
}
status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy)
{
ALOGV("setCamera(%p,%p)", camera.get(), proxy.get());
Parcel data, reply;
data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
data.writeStrongBinder(camera->asBinder());
data.writeStrongBinder(proxy->asBinder());
remote()->transact(SET_CAMERA, data, &reply);
return reply.readInt32