native takepicture -> camera -> ICamera: class bpbinder: transact -> BpBinder: transact -> IPCThread: transact->IPCThread:writeTransactionData 写到mout中,之后会waitForResponse()

IPCThread : joinThreadPool 为一个无限循环线程,循环中不断调用 getandExecuteCommand(),

getandExecuteCommand() ->talkWithDriver():会从mIn中读取数据,并将mOut中的数据通过ioctl写入共享内存。

getandExecuteCommand() -> executeCommand():从mIn中读取命令及数据,若为transact:reinterpret_cast<BBinder*>(tr.cookie)->transact(tr.code, buffer, &reply, tr.flags);

调用BBinder的transact()->BnCamera:BnInterface -> onTransact()

再调用到hal层的实现

04-28 02:10