完整讲解了android中camera的工作机制,代码分析。对了解整个android工作流程会有很大的帮助。
DECLARE_META_INTERFACE(Camera);virtualvoidvirtualstatus_tvirtualvoidvirtualstatus_tvirtualvoidvirtualstatus_tvirtualstatus_tvirtualstatus_tvirtualString8
};
classBnCamera:publicBnInterface<ICamera>{public:
virtualstatus_t
onTransact(uint32_tcode,
constParcel&data,Parcel*reply,uint32_tflags=0);
};
ICamera.h描述的内容是一个实现Camera功能的接口,其定义如下所示:
在camera类中,主要定义Camera的功能接口,这个类必须被继承才能够使用。值得注意的是,这些接口和Camera类的接口有些类似,但是它们并没有直接的关系。事实上,在Camera类的各种实现中,一般都会通过调用ICamera类的实现类来完成。
2.5头文件ICameraService.h
ICameraService.h用于描述一个Camera的服务,定义方式如下所示:classICameraService:publicIInterface{public:
DECLARE_META_INTERFACE(CameraService);virtualsp<ICamera>
};
classBnCameraService:publicBnInterface<ICameraService>{public:
virtualstatus_t
onTransact(uint32_tcode,
constParcel&data,Parcel*reply,uint32_tflags=0);
};
由于具有纯虚函数,ICameraService以及BnCameraService必须被继承实现才能够使用,在
ICameraService只定义了一个connect()接口,它的返回值的类型是sp<ICamera>,这个ICamera是提供实现功能的接口。注意,ICameraService只有连接函数connect(),没有断开函数,断开的功能由ICamera接口来提供。
connect(constsp<ICameraClient>&cameraClient)=0;disconnect()=0;
setPreviewDisplay(constsp<ISurface>&surface)=0;
setHasFrameCallback(boolinstalled)=0;startPreview()=0;
stopPreview()=0;autoFocus()=0;takePicture()=0;
setParameters(constString8¶ms)=0;getParameters()const=0;