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所調用。