android camera2 分析,Android 源码  QCamera2 HAL 分析

我们以 moto Nexus 6 device/moto/shamu/camera/QCamera2/ 为例进行分析。QCamera2Hal.cpp 中给 hw_module_t 结构体 camera_common 进行了赋值,

我们以 moto Nexus 6 device/moto/shamu/camera/QCamera2/ 为例进行分析。QCamera2Hal.cpp 中给 hw_module_t 结构体 camera_common 进行了赋值,然后又给 camera_module_t 结构体 HAL_MODULE_INFO_SYM 赋值,HAL_MODULE_INFO_SYM 名字是固定的,这样 hw_get_module(…) 函数才能正常工作。

device/moto/shamu/camera/QCamera2/QCamera2Hal.cpp

#include "QCamera2Factory.h"

#include "HAL3/QCamera3VendorTags.h"

static hw_module_t camera_common = {

tag: HARDWARE_MODULE_TAG,

module_api_version: CAMERA_MODULE_API_VERSION_2_4,

hal_api_version: HARDWARE_HAL_API_VERSION,

id: CAMERA_HARDWARE_MODULE_ID,

name: "QCamera Module",

author: "Qualcomm Innovation Center Inc",

methods: &qcamera::QCamera2Factory::mModuleMethods,

dso: NULL,

reserved: {0},

};

camera_module_t HAL_MODULE_INFO_SYM = {

common: camera_common,

get_number_of_cameras: qcamera::QCamera2Factory::get_number_of_cameras,

get_camera_info: qcamera::QCamera2Factory::get_camera_info,

set_callbacks: qcamera::QCamera2Factory::set_callbacks,

get_vendor_tag_ops: qcamera::QCamera3VendorTags::get_vendor_tag_ops,

open_legacy: qcamera::QCamera2Factory::open_legacy,

set_torch_mode: qcamera::QCamera2Factory::set_torch_mode,

init: NULL,

reserved: {0}

};

get_number_of_cameras 函数指针具体指向了 qcamera::QCamera2Factory::get_number_of_cameras。

如果 gQCamera2Factory 为空,则先 new 一个对象出来,然后调用其 getNumberOfCameras() 方法。

device/moto/shamu/camera/QCamera2/QCamera2Factory.cpp

namespace qcamera {

......

int QCamera2Factory::get_number_of_cameras()

{

if (!gQCamera2Factory) {

gQCamera2Factory = new QCamera2Factory();

if (!gQCamera2Factory) {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值