HAL层如何获取驱动数据及hal中的四个callback

基于高通平台的V4L2结构及代码分析
https://blog.csdn.net/RadianceBlau/article/details/79515317

就是使用 V4L2 架构,在 dev 下面产生如下节点

在这里插入图片描述
在这里插入图片描述

然后在 HAL中通过open ID 来进行打开的

hal中的四个callback

CameraHardwareInterface.h定义了CameraService和CameraHAL之间的接口,在这个文件中定义了四个回调函数

typedef camera_memory_t* (*camera_request_memory)(int fd, size_t buf_size, unsigned int num_bufs,
                                                  void *user);
 
typedef void (*camera_notify_callback)(int32_t msg_type,
        int32_t ext1,
        int32_t ext2,
        void *user);
 
typedef void (*camera_data_callback)(int32_t msg_type,
        const camera_memory_t *data, unsigned int index,
        camera_frame_metadata_t *metadata, void *user);
 
typedef void (*camera_data_timestamp_callback)(int64_t timestamp,
        int32_t msg_type,
        const camera_memory_t *data, unsigned int index,
        void *user);

这四个回调函数在frameworks/av/services/camera/libcameraservice/CameraClient.cpp中实现。

camera_request_memory

Camera HAL通知CameraService申请buffer

@buf_size: buf的大小

@num_bufs:buf数目

msg_type的取值范围定义在 android/system/core/include/system/camera.h中

/** msgType in notifyCallback and dataCallback functions */
enum {
    CAMERA_MSG_ERROR = 0x0001,            // notifyCallback
    CAMERA_MSG_SHUTTER = 0x0002,          // notifyCallback
    CAMERA_MSG_FOCUS = 0x0004,            // notifyCallback
    CAMERA_MSG_ZOOM = 0x0008,             // notifyCallback
    CAMERA_MSG_PREVIEW_FRAME = 0x0010,    // dataCallback
    CAMERA_MSG_VIDEO_FRAME = 0x0020,      // data_timestamp_callback
    CAMERA_MSG_POSTVIEW_FRAME = 0x0040,   // dataCallback
    CAMERA_MSG_RAW_IMAGE = 0x0080,        // dataCallback
    CAMERA_MSG_COMPRESSED_IMAGE = 0x0100, // dataCallback
    CAMERA_MSG_RAW_IMAGE_NOTIFY = 0x0200, // dataCallback
    // Preview frame metadata. This can be combined with
    // CAMERA_MSG_PREVIEW_FRAME in dataCallback. For example, the apps can
    // request FRAME and METADATA. Or the apps can request only FRAME or only
    // METADATA.
    CAMERA_MSG_PREVIEW_METADATA = 0x0400, // dataCallback
    // Notify on autofocus start and stop. This is useful in continuous
    // autofocus - FOCUS_MODE_CONTINUOUS_VIDEO and FOCUS_MODE_CONTINUOUS_PICTURE.
    CAMERA_MSG_FOCUS_MOVE = 0x0800,       // notifyCallback
    CAMERA_MSG_ALL_MSGS = 0xFFFF
};

camera_notify_callback

用来传递一些消息: 如快门消息,自动对焦完成消息,出错消息,拍照编码结束等

参数@msg_type可以是:

CAMERA_MSG_ERROR
CAMERA_MSG_SHUTTER
CAMERA_MSG_FOCUS
CAMERA_MSG_ZOOM
CAMERA_MSG_FOCUS_MOVE

camera_data_callback

该函数用于从camera HAL返回数据,

返回的数据可以是:

preview的数据帧,
preview的元数据,
以及压缩为jpeg格式的帧数据
参数@msg_type可以是:

CAMERA_MSG_PREVIEW_FRAME
CAMERA_MSG_PREVIEW_METADATA
CAMERA_MSG_COMPRESSED_IMAGE
CAMERA_MSG_RAW_IMAGE
CAMERA_MSG_RAW_IMAGE_NOTIFY
CAMERA_MSG_POSTVIEW_FRAME
参数@data 用来返回图像数据

参数@metadata 用来返回图像的元数据

camera_data_timestamp_callback

该回调函数用来从Camera HAL返回帧数据以及对应的时间戳,这个callback用于录像的场景。

@timestamp:生成帧数据的时间戳

@msg_type: 取值为CAMERA_MSG_VIDEO_FRAME

@data:用来返回帧数据
————————————————

原文链接:https://blog.csdn.net/kickxxx/article/details/19111005

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣敢飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值