完整讲解了android中camera的工作机制,代码分析。对了解整个android工作流程会有很大的帮助。
staticsp<Camera>connect();
~Camera();
voidstatus_tstatus_tstatus_tvoidstatus_tstatus_tstatus_tString8voidvoidvoidvoidvoid
void
disconnect();
getStatus(){returnmStatus;}
setPreviewDisplay(constsp<Surface>&surface);startPreview();
stopPreview();autoFocus();takePicture();
setParameters(constString8¶ms);getParameters()const;
setShutterCallback(shutter_callbackcb,void*cookie);setRawCallback(frame_callbackcb,void*cookie);setJpegCallback(frame_callbackcb,void*cookie);setFrameCallback(frame_callbackcb,void*cookie);setErrorCallback(error_callbackcb,void*cookie);
setAutoFocusCallback(autofocus_callbackcb,void*cookie);
//ICameraClientinterfacevirtualvoidvirtualvoidvirtualvoidvirtualvoidvirtualvoidvirtualvoid
//……}
从接口中可以看出Camera类刚好实现了一个Camera的基本操作,例如播放(startPreview)、
停止(stopPreview)、暂停(takePicture)等。在Camera类中connect()是一个静态函数,它用于得到一个Camera的实例。在这个类中,具有设置回调函数的几个函数:setShutterCallback、setRawCallback和setJpegCallback等,这几个函数是为了提供给上层使用,上层利用这几个设置回调函数,这些回调函数在相应的回调函数中调用,例如使用setShutterCallback设置的回调函数指针被shutterCallback所调用。
在定义中,ICameraClient类双继承了IInterface和IBinder::DeathRecipient,并定义了一
个Camera客户端的接口,BnCameraClient继承了BnInterface<ICameraClient>,这是为基于Android的基础类Binder机制实现在进程通讯而构建的。事实上,根据BnInterface类模版的定义BnInterface<ICameraClient>类相当于双继承了BnInterface和ICameraClient。这是Android一种常用的定义方式。
继承了DeathNotifier类之后,这样当这个类作为IBinder使用的时候,当这个Binder即将Died
的时候被调用其中的binderDied函数。继承这个类基本上实现了一个回调函数的功能。
2.4头文件ICamera.h
ICamera.h描述的内容是一个实现Camera功能的接口,其定义如下所示:classICamera:publicIInterface{public:
shutterCallback();
rawCallback(constsp<IMemory>&picture);jpegCallback(constsp<IMemory>&picture);frameCallback(constsp<IMemory>&frame);errorCallback(status_terror);autoFocusCallback(boolfocused);