创建和提交请求

创建和提交请求

construct_default_request_settings

为标准相机用例创建拍照设置。设备必须返回配置为满足所请求用例的设置缓冲区,该用例必须是其中一个 CAMERA3_TEMPLATE_* 枚举。所有请求控制字段都必须包括在内。
HAL 保留对此结构的所有权,但指向该结构的指针必须在设备关闭之前保持有效。此调用返回缓冲区后,框架和 HAL 不能对其进行修改。可以为同一模板或其他模板的后续调用返回相同的缓冲区。

返回值

  • 有效的元数据:在成功创建默认设置缓冲区时返回。
  • NULL:在发生致命错误时返回。返回此值后,框架只能成功调用 close() 方法。

process_capture_request

向 HAL 发送新的拍照请求。HAL 在准备好接受下一个要处理的请求之前,不会从这里调用返回。框架一次只能对 process_capture_request() 执行一次调用,而且调用将全部来自同一个线程。新请求及其关联的缓冲区可用后,会立即对 process_capture_request() 进行下一次调用。在正常的预览场景中,这意味着框架几乎会立即重新调用该函数。
实际请求处理是异步的,拍照结果由 HAL 通过 process_capture_result() 调用返回。此调用要求结果元数据可用,但输出缓冲区可以只提供等待的同步栅栏。多个请求应同时发出,以保持全输出帧速率。
框架保留对请求结构的所有权。这仅保证在此调用中有效。HAL 设备必须复制需要保留用于拍照处理的信息。HAL 负责等待和关闭缓冲区的栅栏并将缓冲区句柄返回给框架。
如果 input_buffer 的返回值不是 NULL,则 HAL 必须将输入缓冲区释放同步栅栏的文件描述符写入 input_buffer->release_fence。如果 HAL 为输入缓冲区释放同步栅栏返回 -1,则框架可以立即重新使用输入缓冲区。否则,框架将等待同步栅栏,然后再重新填充和重新使用输入缓冲区。

返回值

  • 0:在成功开始处理拍照请求时返回。
  • -EINVAL:在输入格式不正确(在不允许的情况下设置为 NULL、没有输出缓冲区等),且拍照处理无法开始时返回。请求处理过程中的故障应通过调用 camera3_callback_ops_t.notify() 来处理。如果出现此错误,框架仍会负责处理流缓冲区的栅栏和缓冲区句柄;HAL 不应通过 process_capture_result 关闭栅栏或者返回这些缓冲区。
  • -ENODEV:在相机设备遇到严重错误时返回。返回此错误后,框架只能成功调用 close() 方法。

其他方法

get_metadata_vendor_tag_ops

获取方法以查询供应商扩展元数据标签信息。HAL 应填充所有供应商标签操作方法;或者在没有定义供应商标签的情况下,保持操作不变。vendor_tag_query_ops_t 的定义可以在 system/media/camera/include/system/camera_metadata.h 中找到。

转储

打印出相机设备的调试状态。当相机服务要求进行调试转储时,框架将调用调试转储。在使用 dumpsys 工具或捕获错误报告时,就会出现这种情况。传入文件描述符可用于使用 dprintf() 或 write() 来编写调试文本。该文本应仅采用 ASCII 编码。

刷新

在给定设备上的管道中,刷新当前正在进行的所有拍照和所有缓冲区。框架将使用它来尽快转储所有状态,以准备 configure_streams() 调用。
由于无需成功返回缓冲区,因此在 flush()(不管是否成功填充)时持有的每个缓冲区都可能返回 CAMERA3_BUFFER_STATUS_ERROR。请注意,仍允许 HAL 在此调用期间返回有效的 (STATUS_OK) 缓冲区,前提是已成功填充缓冲区。
目前在 HAL 中的所有请求都会尽快返回。未在处理的请求会立即返回错误。所有可中断的硬件块均会停止,而所有不可中断的块均会等待。
仅当 HAL 中不再有未完成的缓冲区或请求时,flush() 才会返回。框架可能会调用 configure_streams(因为 HAL 状态现在为已停顿),也可能会发出新的请求。
flush() 调用只需要 100 毫秒或更短时间,最多花费 1 秒钟。

版本信息

版本信息仅在设备版本不低于 CAMERA_DEVICE_API_VERSION_3_1 时可用。

返回值

  • 0:在成功刷新相机 HAL 时返回。
  • -EINVAL:在输入格式不正确时(设备无效)返回。
  • -ENODEV:在相机设备遇到严重错误时返回。返回此错误后,框架只能成功调用 close() 方法。