接口名称
|
使用说明
|
CamRetCode SetCallback(const OHOS::sptr<ICameraHostCallback> &callback);
|
获取camera_host服务
constexpr const char *TEST_SERVICE_NAME = "camera_service";
sptr<ICameraHost> cameraHost = ICameraHost::Get(TEST_SERVICE_NAME);
判断cameraHost服务指针对象不为空继续以下调用
OHOS::sptr<CameraHostCallback> callback = new CameraHostCallback();
sampleObj->SetCallback(callback);
判断返回值
|
CamRetCode GetCameraIds(std::vector<std::string> &cameraIds) ;
|
获取camera_host服务
判断cameraHost服务指针对象不为空
获取cameraIds
std::vector<std::string> cameraIds;
sampleObj->GetCameraIds(cameraIds);
判断返回值
|
CamRetCode GetCameraAbility(const std::string &cameraId,
std::shared_ptr<CameraAbility> &ability);
|
获取camera_host服务
判断cameraHost服务指针对象不为空
获取cameraIds
cameraId中选取一个获取其对应的属性
std::string cameraId = cameraIds.front();
sampleObj->GetCameraAbility(cameraId, ability);
判断返回值
|
CamRetCode OpenCamera(const std::string &cameraId,
const OHOS::sptr<ICameraDeviceCallback> &callback,
OHOS::sptr<ICameraDevice> &pDevice);
|
获取camera_host服务
判断cameraHost服务指针对象不为空
打开cameraId对应设备
OHOS::sptr<CameraDeviceCallback> deviceCallback = new CameraDeviceCallback();
OHOS::sptr<ICameraDevice> cameraDevice = nullptr;
sampleObj->OpenCamera(cameraId, deviceCallback, cameraDevice);
判断返回值
|
CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable);
|
获取camera_host服务
判断cameraHost服务指针对象不为空
打开手电筒
bool isEnable = true;
sampleObj->SetFlashlight(cameraIds.front(), isEnable);
判断返回值
|
CamRetCode GetStreamOperator(
const OHOS::sptr<IStreamOperatorCallback> &callback,
OHOS::sptr<IStreamOperator> &streamOperator);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用
OHOS::sptr<StreamOperatorCallback> streamOperatorCallback = new StreamOperatorCallback();
OHOS::sptr<IStreamOperator> streamOperator = nullptr;
cameraDevice->GetStreamOperator(streamOperatorCallback, streamOperator);
判断返回值,并判断streamOperator是否为空
|
CamRetCode UpdateSettings(const std::shared_ptr<CameraSetting> &settings);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用
std::shared_ptr<CameraSetting> cameraSetting = new CameraSetting(entryCapacity, dataCapacity);
entryCapacity: 需要设置的tag数量,dataCapacity: 所有tag对应的数据项数量
cameraDevice-> UpdateSettings(cameraSetting);
判断返回值
|
CamRetCode SetResultMode(const ResultCallbackMode &mode);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用
ResultCallbackMode resultCallbackMode = ON_CHANGED;
cameraDevice->SetResultMode(resultCallbackMode);
判断返回值
|
CamRetCode GetEnabledResults(std::vector<MetaType> &results);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用
std::vector<MetaType> results;
cameraDevice->GetEnabledResults(results);
判断返回值
|
CamRetCode EnableResult(const std::vector<MetaType> &results);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用GetEnabledResults接口获取支持的使能后,调用使能接口
std::vector<MetaType> results;
cameraDevice->EnableResult(results);;
判断返回值
|
CamRetCode DisableResult(const std::vector<MetaType> &results);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用GetEnabledResults接口获取支持的使能后,调用取消使能接口
std::vector<MetaType> results;
cameraDevice->EnableResult(results);;
判断返回值
|
void Close();
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用Close关闭当前设备
|
CamRetCode IsStreamsSupported(
OperationMode mode,
const std::shared_ptr<CameraStandard::CameraMetadata> &modeSetting,
const std::shared_ptr<StreamInfo> &pInfo,
StreamSupportType &pType);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
OperationMode operationMode = NORMAL;
StreamSupportType supportType;
std::shared_ptr<StreamInfo> streamInfo = std::make_shared<StreamInfo>();
streamInfo->streamId_ = 1001;
streamInfo->width_ = 720;
streamInfo->height_ = 480;
streamInfo->format_ = PIXEL_FMT_YCRCB_420_SP;
streamInfo->datasapce_ = 8;
streamInfo->intent_ = PREVIEW;
StreamConsumer previewConsumer;
streamInfo->bufferQueue_ = previewConsumer.CreateProducer(
[](void* addr, uint32_t size) { }); // StreamConsumer参见UT,或详细了解BufferProducer的使用
streamInfo->tunneledMode_ = 5;
streamOperator->IsStreamsSupported(NORMAL, ability, streamInfo, supportType);
判断返回值
|
CamRetCode CreateStreams(const std::vector<std::shared_ptr<StreamInfo>> &streamInfos);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
按照IsStreamsSupported步骤的StreamInfo定义方式,创建一个或多个对象放入std::vector<std::shared_ptr<Camera::StreamInfo>> streamInfos;容器中做如下调用
streamOperator->CreateStreams(streamInfos);
判断返回值
|
CamRetCode ReleaseStreams(const std::vector<int> &streamIds);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
std::vector<int> streamIds; // 一个货多个需要释放掉的流id
streamOperator->ReleaseStreams(streamIds);
判断返回值
|
CamRetCode CommitStreams(OperationMode mode,
const std::shared_ptr<CameraStandard::CameraMetadata> &modeSetting);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
与CreateStreams联合使用,先做CreateStreams调用
std::shared_ptr<CameraStandard::CameraMetadata> modeSetting = new CameraSetting(entryCapacity, dataCapacity);
streamOperator->CommitStreams(NORMAL, modeSetting);
判断返回值
|
CamRetCode GetStreamAttributes(
std::vector<std::shared_ptr<StreamAttribute>> &attributes);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
std::vector<std::shared_ptr<StreamAttribute>> attributes;
streamOperator->GetStreamAttributes(attributes);
判断返回值
|
CamRetCode AttachBufferQueue(int streamId,
const OHOS::sptr<OHOS::IBufferProducer> &producer);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
注意:如果CreateStreams时,streamInfo里面bufferQueue_不为空,则这个不用设置,否则视为替换
OHOS::sptr<OHOS::IBufferProducer> producer; // 创建方式见CreateStreams
streamOperator->AttachBufferQueue(producer);
判断返回值
|
CamRetCode DetachBufferQueue(int streamId);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
注意:如果需要调用AttachBufferQueue,最好调用DetachBufferQueue先解绑
OHOS::sptr<OHOS::IBufferProducer> producer; // 创建方式见CreateStreams
streamOperator->AttachBufferQueue( DetachBufferQueue);
判断返回值
|
CamRetCode Capture(int captureId,
const std::shared_ptr<CaptureInfo> &pInfo, bool isStreaming);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
调用CreateStreams创建流,调用CommitStreams配置流
int captureId = 2001; // 调用端提供捕获动作的唯一标识
std::shared_ptr<CaptureInfo> captureInfo = std::make_shared<:CaptureInfo>();
captureInfo->streamIds_ = {streamInfo->streamId_};
captureInfo->captureSetting_ = new CameraMetadata(entryCapacity, dataCapacity); // 需要做数据填充
captureInfo->enableShutterCallback_ = false;
streamOperator->Capture(captureId, captureInfo, true);
判断返回值
|
CamRetCode CancelCapture(int captureId);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
与Capture捕获动作配套使用,并且本次捕获为连续捕获,否则无需调用
int captureId = 2001; // 调用端提供捕获动作的唯一标识
streamOperator->CancelCapture(captureId, captureInfo, true);
|
CamRetCode ChangeToOfflineStream(const std::vector<int> &streamIds,
OHOS::sptr<IStreamOperatorCallback> &callback,
OHOS::sptr<IOfflineStreamOperator> &offlineOperator);
|
获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象
判断流控制器对象streamOperator不为空
与Capture捕获动作配套使用,如果不希望捕获中断,则调用此接口使得未完成的buffer顺利回传
std::vector<int> streamIds = {1001};
OHOS::sptr<IStreamOperatorCallback> offlineStreamOperatorCallback = new StreamOperatorCallback();
OHOS::sptr<IOfflineStreamOperator> offlineOperator;
streamOperator->ChangeToOfflineStream(streamIds, offlineStreamOperatorCallback, offlineOperator);
判断返回值
|
CamRetCode CancelCapture(int captureId);
|
调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator
int captureId = 2001; // 调用端提供捕获动作的唯一标识,切换到离线流的捕获动作标识
offlineStreamOperator->CancelCapture(captureId);
|
CamRetCode ReleaseStreams(const std::vector<int> &streamIds);
|
调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator
int captureId = 2001; // 调用端提供捕获动作的唯一标识,切换到离线流的捕获动作标识
std::vector<int> streamIds = {captureId};
offlineStreamOperator->ReleaseStreams(streamIds);
释放离线流资源后判断返回值
|
CamRetCode Release();
|
调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator
offlineStreamOperator->Release();
释放IOfflineStreamOperator控制的流资源,并且释放IOfflineStreamOprator句柄
|