/*
* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file istream_operator.h
*
* @brief Declares APIs for stream operations.
*
* @since 4.0
* @version 1.1
*/
package ohos.hdi.camera.v1_1;
import ohos.hdi.camera.v1_0.IStreamOperator;
import ohos.hdi.camera.v1_1.Types;
interface IStreamOperator extends ohos.hdi.camera.v1_0.IStreamOperator {
/**
* @brief Checks whether a specific stream can be dynamically created.
*
* A stream is a sequence of data elements output from a bottom-layer device, processed by the current module,
* and then transmitted to an upper-layer service or application.
* The current module supports preview streams, video streams, photographing streams, and the like.
* For details, see {@link StreamIntent}.
*
* This function is used to check whether a stream or streams can be dynamically created based on the
* operation mode, configuration information, and existing streams in the current module.
* If the streams can be created without stopping the existing streams or making the upper-layer service or
* application unaware of the stopping of the existing streams,
* type is set to DYNAMIC_SUPPORTED so that the upper-layer service or application
* can directly add the new stream.
* If the streams can be created only after the upper-layer service or application stops capturing all streams,
* type is set to RE_CONFIGURED_REQUIRED.
* If the streams are not supported, type is set to NOT_SUPPORTED.
* This function must be called prior to {@link CreateStreams}.
*
* @param mode Indicates the operation mode of the streams. For details, see {@link OperationMode_V1_1}.
* @param modeSetting Indicates the stream configuration parameters, including the frame rate and 3A.
* 3A stands for automatic focus (AF), automatic exposure (AE), and automatic white-balance (AWB).
* @param infos Indicates the stream configuration information. For details, see {@link StreamInfo}.
* @param type Indicates the support type of the dynamically created stream.
* The supported types are defined in {@link StreamSupportType}.
*
* @return Returns NO_ERROR if the operation is successful;
* returns an error code defined in {@link CamRetCode} otherwise.
*
* @since 4.0
* @version 1.1
*/
IsStreamsSupported_V1_1([in] enum OperationMode_V1_1 mode, [in] unsigned char[] modeSetting,
[in] struct StreamInfo_V1_1[] infos, [out] enum StreamSupportType type);
/**
* @brief Creates streams.
*
* Before calling this function, you must use {@link IsStreamsSupported} to check whether the hardware
* abstraction layer (HAL) supports the streams to create.
*
* @param streamInfos Indicates the list of stream information, which is defined by {@link StreamInfo}.
* The passed stream information may be changed. Therefore, you can run {@link GetStreamAttributes} to
* obtain the latest stream attributes after the stream is created.
*
* @return Returns NO_ERROR if the operation is successful;
* returns an error code defined in {@link CamRetCode} otherwise.
*
* @since 4.0
* @version 1.1
*/
CreateStreams_V1_1([in] struct StreamInfo_V1_1[] streamInfos);
/**
* @brief Configures a stream.
*
* This function must be called after {@link CreateStreams}.
*
* @param mode Indicates the operation mode of the stream. For details, see {@link OperationMode_V1_1}.
* @param modeSetting Indicates the stream configuration parameters, including the frame rate and zoom information.
* @return Returns NO_ERROR if the operation is successful;
* returns an error code defined in {@link CamRetCode} otherwise.
*
* @since 4.0
* @version 1.1
*/
CommitStreams_V1_1([in] enum OperationMode_V1_1 mode, [in] unsigned char[] modeSetting);
}