代码拉取完成,页面将自动刷新
同步操作将从 OpenHarmony/drivers_peripheral 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
OHOS相机驱动框架模型对上实现相机HDI接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 各层的基本概念如下:
HDI实现层,对上实现OHOS相机标准南向接口。
框架层,对接HDI实现层的控制、流的转发,实现数据通路的搭建、管理相机各个硬件设备等功能。
适配层,屏蔽底层芯片和OS差异,支持多平台适配。
/drivers/peripheral/input
.
├── hal # camera模块的hal层代码
│ ├── adapter # camera hal平台适配层的实现
│ ├── buffer_manager # camera hal统一的Buffer管理
│ ├── device_manager # 提供camera hal层设备管理能力,包括设备枚举、设备能力查询等
│ ├── hdi_impl # camera hal HDI的具体实现
│ ├── include # camera hal层内部的头文件
│ ├── init # camera hal层HDI接口使用样例实现
│ ├── pipeline_core # camera hal层pipeline核心代码
│ ├── test # camera hal层测试代码实现
│ └── utils # camera hal层工具类代码,目前提供的是watchdog
├── hal_c # 提供C实现的HAL接口
│ ├── hdi_cif # C实现的HDI接口适配代码
│ └── include # C形式的HDI接口
└── interfaces # camera hal对上层服务提供的驱动能力接口
├── hdi_ipc # IPC模式的HDI实现
├── hdi_passthrough # 直通模式的HDI实现
└── include # camera hal对外提供的HDI定义
头文件 | 接口名称 | 功能描述 | |
icamera_device.h | CamRetCode
IsStreamsSupported( OperationMode mode, const std::shared_ptr<CameraStandard::CameraMetadata>& modeSetting, const std::vector<std::shared_ptr<StreamInfo>> &info, StreamSupportType &type) |
查询是否支持添加参数对应的流 | |
CamRetCode CreateStreams(const std::vector<std::shared_ptr<StreamInfo>> &streamInfos) | 创建流 此函数接口依据输入的流信息创建流,调用该接口之前需先通过 {@link IsStreamsSupported} 查询HAL是否支持要创建的流 |
||
CamRetCode ReleaseStreams(const std::vector<int> &streamIds) | 释放流 | ||
CamRetCode
CommitStreams(OperationMode mode, const std::shared_ptr<CameraMetadata> &modeSetting) |
配置流 本接口需在调用{@link CreateStreams}创建流之后调用 |
||
CamRetCode
GetStreamAttributes( std::vector<std::shared_ptr<StreamAttribute>> &attributes) |
获取流的属性 | ||
CamRetCode AttachBufferQueue(int streamId, const OHOS::sptr<OHOS::IBufferProducer> &producer) | 绑定生产者句柄和指定流 如果在{@link CreateStreams}创建流时已经指定了生产者句柄,则不需要调用该接口。如果需要重新绑定, 对于一些IOT设备,可能不需要或者不支持预览流的图像数据缓存流转,那么不需要绑定生产者句柄, 此时在创建流时{@link CreateStreams} 的 {@link StreamInfo} 参数的生产者句柄bufferQueue_为空,而 tunneledMode_需设置为false。 |
||
CamRetCode DetachBufferQueue(int streamId) | 解除生产者句柄和指定流的绑定关系 | ||
CamRetCode
Capture(int captureId, const std::shared_ptr<CaptureInfo> &info, bool isStreaming) |
捕获图像 本接口必须在调用 {@link CommitStreams} 配置流之后调用。 图像捕获有两种模式,分别是连续捕获和单次捕获。连续捕获即触发之后模块内部进行连续的捕获, 消费者可以连续收到图像数据,不需要多次调用本接口,若再次调用了本接口, 则停止当前捕获,更新捕获信息,再进行一次新的捕获,多用于预览、录像或者连拍场景。 单次捕获即触发之后只捕获一帧图像数据,用于单次拍照场景 |
||
CamRetCode CancelCapture(int captureId) | 取消捕获 | ||
CamRetCode
ChangeToOfflineStream(const std::vector<int> &streamIds, OHOS::sptr<IStreamOperatorCallback> &callback, OHOS::sptr<IOfflineStreamOperator> &offlineOperator) |
将指定流转换成离线流 | ||
icamera_device_callback.h | void OnError(ErrorType type, int32_t errorCode) | 设备发生错误时调用,由调用者实现,用于返回错误信息给调用者 | |
void OnResult(uint64_t timestamp, const std::shared_ptr<CameraMetadata> &result) | 上报camera设备相关的metadata的回调 | ||
icamera_host.h | CamRetCode SetCallback(const OHOS::sptr<ICameraHostCallback> &callback) | 设置ICameraHost回调接口 | |
CamRetCode GetCameraIds(std::vector<std::string> &cameraIds) | 获取当前可用的Camera设备ID列表 | ||
CamRetCode
GetCameraAbility(const std::string &cameraId, std::shared_ptr<CameraAbility> &ability) |
获取Camera设备能力集合 | ||
CamRetCode
OpenCamera(const std::string &cameraId, const OHOS::sptr<ICameraDeviceCallback> &callback, OHOS::sptr<ICameraDevice> &device) |
打开Camera设备 | ||
CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable) | 打开或关闭闪光灯 | ||
icamera_host_callback.h | void OnCameraStatus(const std::string &cameraId, CameraStatus status) | Camera设备状态变化上报 | |
void OnFlashlightStatus(const std::string &cameraId, FlashlightStatus status) | 闪光灯状态变化回调 | ||
ioffline_stream_operator.h | CamRetCode CancelCapture(int captureId) | 取消捕获请求 | |
CamRetCode ReleaseStreams(const std::vector<int> &streamIds) | 释放流 | ||
CamRetCode Release() | 释放所有离线流 | ||
istream_operator.h | CamRetCode
IsStreamsSupported( OperationMode mode, const std::shared_ptr<CameraStandard::CameraMetadata> &modeSetting, const std::vector<std::shared_ptr<StreamInfo>> &info, StreamSupportType &type) |
查询是否支持添加参数对应的流 | |
CamRetCode CreateStreams(const std::vector<std::shared_ptr<StreamInfo>> &streamInfos) | 创建流 | ||
CamRetCode ReleaseStreams(const std::vector<int> &streamIds) | 释放流 | ||
CamRetCode
CommitStreams(OperationMode mode, const std::shared_ptr<CameraMetadata> &modeSetting) |
配置流 |
||
CamRetCode
GetStreamAttributes( std::vector<std::shared_ptr<StreamAttribute>> &attributes) |
获取流的属性 | ||
CamRetCode AttachBufferQueue(int streamId, const OHOS::sptr<OHOS::IBufferProducer> &producer) | 绑定生产者句柄和指定流 | ||
CamRetCode DetachBufferQueue(int streamId) | 解除生产者句柄和指定流的绑定关系 | ||
CamRetCode
Capture(int captureId, const std::shared_ptr<CaptureInfo> &info, bool isStreaming) |
捕获图像 * * 本接口必须在调用 {@link CommitStreams} 配置流之后调用。 * 图像捕获有两种模式,分别是连续捕获和单次捕获。连续捕获即触发之后模块内部进行连续的捕获, * 消费者可以连续收到图像数据,不需要多次调用本接口,若再次调用了本接口, * 则停止当前捕获,更新捕获信息,再进行一次新的捕获,多用于预览、录像或者连拍场景。 * 单次捕获即触发之后只捕获一帧图像数据,用于单次拍照场景。 * 捕获启动时,会调用 {@link OnCaptureStarted}来通知调用者捕获已经启动。 * 连续捕获需调用 {@link CancelCapture} 来停止捕获。 * 捕获结束时,会调用 {@link OnCaptureEnded}来通知调用者捕获的帧计数等信息。 * {@link CaptureInfo} 的 enableShutterCallback_ 使能 {@link OnFrameShutter},使能后每次捕获触发 {@link OnFrameShutter} * 对于多个流同时捕获的场景,本模块内部保证同时上报多路流捕获数据。 |
||
CamRetCode CancelCapture(int captureId) | 取消捕获 | ||
CamRetCode
ChangeToOfflineStream(const std::vector<int> &streamIds, OHOS::sptr<IStreamOperatorCallback> &callback, OHOS::sptr<IOfflineStreamOperator> &offlineOperator) |
将指定流转换成离线流 | ||
istream_operator_callback.h | void OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamIds) | 捕获开始回调,在捕获开始时调用 | |
void
OnCaptureEnded(int32_t captureId, const std::vector<std::shared_ptr<CaptureEndedInfo>> &infos) |
捕获结束回调,在捕获结束时调用 | ||
void
OnCaptureError(int32_t captureId, const std::vector<std::shared_ptr<CaptureErrorInfo>> &infos) |
捕获错误回调,在捕获过程中发生错误时调用 | ||
void
OnFrameShutter(int32_t captureId, const std::vector<int32_t> &streamIds, uint64_t timestamp) |
帧捕获回调 |
std::shared_ptr<Camera::CameraHost> cameraHost = Camera::CameraHost::CreateCameraHost();
std::vector<std::string> cameraIds;
cameraHost->GetCameraIds(cameraIds); #
const std::shared_ptr<Camera::ICameraDeviceCallback> callback = std::make_shared<Camera::ICameraDeviceCallback>();
std::shared_ptr<Camera::CameraDevice> device;
std::cout << "cameraIds.front() = " << cameraIds.front() << std::endl;
Camera::CamRetCode rc = cameraHost->OpenCamera(cameraIds.front(), callback, device);
std::make_shared<Camera::IStreamOperatorCallback>();
std::shared_ptr<Camera::StreamOperator> streamOperator = nullptr;
rc = device->GetStreamOperator(streamOperatorCallback, streamOperator);`
std::vector<std::shared_ptr<Camera::StreamInfo>> streamInfos;
std::shared_ptr<Camera::StreamInfo> streamInfo = std::make_shared<Camera::StreamInfo>();
streamInfo->streamId_ = 1001;
streamInfo->width_ = 1280;
streamInfo->height_ = 720;
streamInfo->format_ = 2;
streamInfo->datasapce_ = 10;
streamInfo->intent_ = Camera::PREVIEW;
streamInfo->tunneledMode_ = 5;
streamInfos.push_back(streamInfo);
rc = streamOperator->CreateStreams(streamInfos);
rc = streamOperator->CommitStreams(Camera::NORMAL, nullptr);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。