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:用來返回幀數據