分享

Android camera HAL四个callback

 barry525 2015-05-29

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

  1. typedef camera_memory_t* (*camera_request_memory)(int fd, size_t buf_size, unsigned int num_bufs,  
  2.                                                   void *user);  
  3.   
  4. typedef void (*camera_notify_callback)(int32_t msg_type,  
  5.         int32_t ext1,  
  6.         int32_t ext2,  
  7.         void *user);  
  8.   
  9. typedef void (*camera_data_callback)(int32_t msg_type,  
  10.         const camera_memory_t *data, unsigned int index,  
  11.         camera_frame_metadata_t *metadata, void *user);  
  12.   
  13. typedef void (*camera_data_timestamp_callback)(int64_t timestamp,  
  14.         int32_t msg_type,  
  15.         const camera_memory_t *data, unsigned int index,  
  16.         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中

  1. /** msgType in notifyCallback and dataCallback functions */  
  2. enum {  
  3.     CAMERA_MSG_ERROR = 0x0001,            // notifyCallback  
  4.     CAMERA_MSG_SHUTTER = 0x0002,          // notifyCallback  
  5.     CAMERA_MSG_FOCUS = 0x0004,            // notifyCallback  
  6.     CAMERA_MSG_ZOOM = 0x0008,             // notifyCallback  
  7.     CAMERA_MSG_PREVIEW_FRAME = 0x0010,    // dataCallback  
  8.     CAMERA_MSG_VIDEO_FRAME = 0x0020,      // data_timestamp_callback  
  9.     CAMERA_MSG_POSTVIEW_FRAME = 0x0040,   // dataCallback  
  10.     CAMERA_MSG_RAW_IMAGE = 0x0080,        // dataCallback  
  11.     CAMERA_MSG_COMPRESSED_IMAGE = 0x0100, // dataCallback  
  12.     CAMERA_MSG_RAW_IMAGE_NOTIFY = 0x0200, // dataCallback  
  13.     // Preview frame metadata. This can be combined with  
  14.     // CAMERA_MSG_PREVIEW_FRAME in dataCallback. For example, the apps can  
  15.     // request FRAME and METADATA. Or the apps can request only FRAME or only  
  16.     // METADATA.  
  17.     CAMERA_MSG_PREVIEW_METADATA = 0x0400, // dataCallback  
  18.     // Notify on autofocus start and stop. This is useful in continuous  
  19.     // autofocus - FOCUS_MODE_CONTINUOUS_VIDEO and FOCUS_MODE_CONTINUOUS_PICTURE.  
  20.     CAMERA_MSG_FOCUS_MOVE = 0x0800,       // notifyCallback  
  21.     CAMERA_MSG_ALL_MSGS = 0xFFFF  
  22. };  

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:用来返回帧数据


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多