Android camera主要结构如图所示。
我们可以从三个层次去使用它:JAVA层,service层和hardwareinterface。
流程都大同小异,不同编程语言具体实现上接口略有不同, 流程框架如下:
open,
getParameters,
parameters。set
setParameters,
addcallback,
startpreview(takepicture)
Java层具体例子:
android.hardware.Camera提供了一个接口对象: Camera,用户在程序内调用这个对象的各个功能就可以了. 值得注意的是它的callback, 是可以通过setPreviewCallbackWithBuffer来设置外部缓冲区接受Camera 帧数据的,接口名为PreviewCallback, 需要你在程序中设置实现。每当camera一帧数据采集到时,这个接口会被自动调用。用户可以从你自己所属的缓冲取出数据操作了。
service层:
接口:ICamera。
调用方法:
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("camera"));
sp<ICameraService> service = interface_cast<ICameraService>(binder);
sp<ICamera>camera= service->connect(const sp<ICameraClient>& cameraClient);
其中参数ICameraClient可以设定callback函数:
notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2)
dataCallback(int32_t msgType, const sp<IMemory>& data)
dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& data)
其他使用方法不再赘述。
HardwareInterface层:
接口:CameraHardwareInterface,
调用方法:
CameraHardwareInterface= openCameraHardware();
流程例子:
camera_hw = openCameraHardware();
if(camera_hw == NULL){
LOGE("openCameraHardware() failed/n");
return -1;
}
camera_hw->setCallbacks(notify_cb,
data_cb,
data_cb_timestamp,
(void *)NULL);
CameraParameters parameters = camera_hw->getParameters();
parameters.setPreviewSize(1024, 600);
camera_hw->setParameters(parameters);
camera_hw->startPreview();
萝卜和青菜--Android camera框架与使用
最新推荐文章于 2024-05-24 16:44:21 发布