ICameraClient.h用于描述一个Camera客户端的接口,定义以下所示:java
class ICameraClient: public IInterface { public: DECLARE_META_INTERFACE(CameraClient); virtual void shutterCallback() = 0; virtual void rawCallback(const sp<IMemory>& picture) = 0; virtual void jpegCallback(const sp<IMemory>& picture) = 0; virtual void frameCallback(const sp<IMemory>& frame) = 0; virtual void errorCallback(status_t error) = 0; virtual void autoFocusCallback(bool focused) = 0; }; class BnCameraClient: public BnInterface<ICameraClient> { public: virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0); };在定义中,ICameraClient 类继承IInterface,并定义了一个Camera客户端的接口,BnCameraClient 继承了BnInterface<ICameraClient>,这是为基于Android的基础类Binder机制实如今进程通信而构建的。根据BnInterface类模版的定义BnInterface<ICameraClient>类至关于双继承了BnInterface和 ICameraClient。
Camera.h是Camera对外的接口头文件,它被实现Camera JNI的文件android_hardware_Camera.cpp所调用。Camera.h最主要是定义了一个Camera类:android
class Camera : public BnCameraClient, public IBinder:: DeathRecipient { public: static sp<Camera> connect(); ~Camera(); void disconnect(); status_t getStatus() { return mStatus; } status_t setPreviewDisplay(const sp<Surface>& surface); status_t startPreview(); void stopPreview(); status_t autoFocus(); status_t takePicture(); status_t setParameters(const String8& params); String8 getParameters() const; void setShutterCallback(shutter_callback cb, void *cookie); void setRawCallback(frame_callback cb, void *cookie); void setJpegCallback(frame_callback cb, void *cookie); void setFrameCallback(frame_callback cb, void *cookie); void setErrorCallback(error_callback cb, void *cookie); void setAutoFocusCallback(autofocus_callback cb, void *cookie); // ICameraClient interface virtual void shutterCallback(); virtual void rawCallback(const sp<IMemory>& picture); virtual void jpegCallback(const sp<IMemory>& picture); virtual void frameCallback(const sp<IMemory>& frame); virtual void errorCallback(status_t error); virtual void autoFocusCallback(bool focused); //…… }从接口中能够看出Camera类恰好实现了一个Camera的基本操做,例如播放(startPreview)、中止(stopPreview)、暂停(takePicture)等。在Camera类中connect()是一个静态函数,它用于获得一个Camera的实例。在这个类中,具备设置回调函数的几个函数:setShutterCallback、setRawCallback和setJpegCallback等,这几个函数是为了提供给上层使用,上层利用这几个设置回调函数,这些回调函数在相应的回调函数中调用,例如使用setShutterCallback设置的回调函数指针被 shutterCallback所调用。