萝卜和青菜--Android camera框架与使用

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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值