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


發佈了183 篇原創文章 · 獲贊 42 · 訪問量 142萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章