自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
camera_device_ops 结构体参考文档
#include <
camera.h
>
|
int(*
|
set_preview_window
)(struct
camera_device
*, struct
preview_stream_ops
*window)
|
|
void(*
|
set_callbacks
)(struct
camera_device
*,
camera_notify_callback
notify_cb,
camera_data_callback
data_cb,
camera_data_timestamp_callback
data_cb_timestamp,
camera_request_memory
get_memory, void *user)
|
|
void(*
|
enable_msg_type
)(struct
camera_device
*, int32_t msg_type)
|
|
void(*
|
disable_msg_type
)(struct
camera_device
*, int32_t msg_type)
|
|
int(*
|
msg_type_enabled
)(struct
camera_device
*, int32_t msg_type)
|
|
int(*
|
start_preview
)(struct
camera_device
*)
|
|
void(*
|
stop_preview
)(struct
camera_device
*)
|
|
int(*
|
preview_enabled
)(struct
camera_device
*)
|
|
int(*
|
store_meta_data_in_buffers
)(struct
camera_device
*, int enable)
|
|
int(*
|
start_recording
)(struct
camera_device
*)
|
|
void(*
|
stop_recording
)(struct
camera_device
*)
|
|
int(*
|
recording_enabled
)(struct
camera_device
*)
|
|
void(*
|
release_recording_frame
)(struct
camera_device
*, const void *opaque)
|
|
int(*
|
auto_focus
)(struct
camera_device
*)
|
|
int(*
|
cancel_auto_focus
)(struct
camera_device
*)
|
|
int(*
|
take_picture
)(struct
camera_device
*)
|
|
int(*
|
cancel_picture
)(struct
camera_device
*)
|
|
int(*
|
set_parameters
)(struct
camera_device
*, const char *parms)
|
|
char *(*
|
get_parameters
)(struct
camera_device
*)
|
|
void(*
|
put_parameters
)(struct
camera_device
*, char *)
|
|
int(*
|
send_command
)(struct
camera_device
*, int32_t cmd, int32_t arg1, int32_t arg2)
|
|
void(*
|
release
)(struct
camera_device
*)
|
|
int(*
|
dump
)(struct
camera_device
*, int fd)
|
|
开始自动对焦,在对焦完成后,系统会使用 CAMERA_MSG_FOCUS 调用一次通知回调例程。如果需要再次自动对焦,系统会再次调用 autoFocus()。
定义位于文件
camera.h
的
227
行。
取消自动对焦功能。如果自动对焦仍在进行中,此函数会取消自动对焦。无论自动对焦是否正在进行,此函数都会将焦点位置返回为默认位置。如果相机不支持自动对焦,则此操作不会执行任何操作。
定义位于文件
camera.h
的
235
行。
取消使用 takePicture 启动的拍照操作。在未拍摄照片时调用此方法不会产生任何操作。
定义位于文件
camera.h
的
246
行。
void(* disable_msg_type)(struct
camera_device
*, int32_t msg_type)
|
停用一条或一组消息。
收到对 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 的调用后,相机 HAL 不应依赖于其客户端调用 releaseRecordingFrame() 来释放相机 HAL 在调用 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 之前和之后发送的视频录制帧。调用 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 后,相机 HAL 客户端不得修改/访问任何视频录制帧。
定义位于文件
camera.h
的
132
行。
void(* enable_msg_type)(struct
camera_device
*, int32_t msg_type)
|
以下三个函数都接受 msg_type,它是 include/ui/Camera.h 中定义的消息的位掩码。启用某个消息或一组消息。
定义位于文件
camera.h
的
120
行。
检索相机参数。如果 put_parameters 不为 NULL,则必须使用 put_parameters 将相机 HAL 返回的缓冲区返回给它。
定义位于文件
camera.h
的
258
行。
int(* msg_type_enabled)(struct
camera_device
*, int32_t msg_type)
|
查询某条消息或一组消息是否已启用。请注意,这会按 AND 运算,如果查询的任何消息处于关闭状态,则会返回 false。
定义位于文件
camera.h
的
139
行。
当我们调用 get_parameters 时,相机 HAL 会使用自己的内存向我们传递参数。如果 put_parameters 不为 NULL,请使用此函数将内存返回给相机 HAL。如果 put_parameters 为 NULL,则必须使用 free() 释放内存。
定义位于文件
camera.h
的
265
行中。
释放此对象拥有的硬件资源。请注意,这
不是
在析构函数中完成的。
定义位于文件
camera.h
的
277
行。
void(* release_recording_frame)(struct
camera_device
*, const void *opaque)
|
释放 CAMERA_MSG_VIDEO_FRAME 之前返回的录制帧。
在相机 HAL 收到对 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 的调用之前,相机 HAL 客户端有责任释放相机 HAL 发送的视频录制帧。收到对 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 的调用后,相机 HAL 负责管理视频录制帧的生命周期。
定义位于文件
camera.h
的
219
行。
int(* send_command)(struct
camera_device
*, int32_t cmd, int32_t arg1, int32_t arg2)
|
设置相机参数。如果任何参数无效或不受支持,此方法会返回 BAD_VALUE。
定义位于文件
camera.h
的
252
行。
开始录制模式。有录制图片可用时,系统会发送 CAMERA_MSG_VIDEO_FRAME 消息以及相应的帧。摄像头 HAL 客户端必须先通过 releaseRecordingFrame() 释放每个录制帧,然后才能调用 disableMsgType(CAMERA_MSG_VIDEO_FRAME)。客户端调用 disableMsgType(CAMERA_MSG_VIDEO_FRAME) 后,摄像头 HAL 负责管理视频录制帧的生命周期,并且客户端不得修改/访问任何视频录制帧。
定义位于文件
camera.h
的
198 行
。
int(* store_meta_data_in_buffers)(struct
camera_device
*, int enable)
|
请求相机 HAL 在通过 CAMERA_MSG_VIDEO_FRAME 发送的视频缓冲区中存储录制会话的元数据或实际 YUV 数据。如果未调用该方法,默认的相机 HAL 行为是在视频缓冲区中存储实际的 YUV 数据。
此方法应在 startRecording() 之前调用,才能生效。
如果元数据存储在视频缓冲区中,则视频缓冲区的接收器需要借助缓冲区中的元数据来解读内容并查找实际帧数据。具体实现方式不在本方法的讨论范围之内。
某些相机 HAL 可能不支持在视频缓冲区中存储元数据,但所有相机 HAL 都应支持在视频缓冲区中存储实际的 YUV 数据。如果相机 HAL 在收到存储元数据到视频缓冲区中的请求时不支持此操作,则必须返回 INVALID_OPERATION。让摄像头 HAL 直接将元数据(而非实际帧数据)传递给视频编码器非常有用,因为如果视频大小较大,未压缩的帧数据量可能会非常大。
-
参数
-
启用
|
如果为 true,则指示相机 HAL 在视频缓冲区中存储元数据;如果为 false,则指示相机 HAL 在视频缓冲区中存储实际的 YUV 数据。
|
-
返回值
-
成功时返回 OK。
定义位于文件
camera.h
的
186
行。
此结构体的文档是根据以下文件生成的:
-
hardware/libhardware/include/hardware/
camera.h
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-26。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-03-26。"],[],[]]