1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef OHOS_HDI_CAMERA_V1_0_ISTREAMOPERATOR_H
17#define OHOS_HDI_CAMERA_V1_0_ISTREAMOPERATOR_H
18
19#include <stdint.h>
20#include <vector>
21#include <hdf_base.h>
22#include <hdi_base.h>
23#include "buffer_producer_sequenceable.h"
24#include "camera/v1_0/ioffline_stream_operator.h"
25#include "camera/v1_0/istream_operator_callback.h"
26#include "camera/v1_0/types.h"
27
28#ifndef HDI_BUFF_MAX_SIZE
29#define HDI_BUFF_MAX_SIZE (1024 * 200)
30#endif
31
32#ifndef HDI_CHECK_VALUE_RETURN
33#define HDI_CHECK_VALUE_RETURN(lv, compare, rv, ret) do { \
34    if ((lv) compare (rv)) { \
35        return ret; \
36    } \
37} while (false)
38#endif
39
40#ifndef HDI_CHECK_VALUE_RET_GOTO
41#define HDI_CHECK_VALUE_RET_GOTO(lv, compare, rv, ret, value, table) do { \
42    if ((lv) compare (rv)) { \
43        ret = value; \
44        goto table; \
45    } \
46} while (false)
47#endif
48
49namespace OHOS {
50namespace HDI {
51namespace Camera {
52namespace V1_0 {
53using namespace OHOS;
54using namespace OHOS::HDI;
55
56enum {
57    CMD_STREAM_OPERATOR_GET_VERSION = 0,
58    CMD_STREAM_OPERATOR_IS_STREAMS_SUPPORTED = 1,
59    CMD_STREAM_OPERATOR_CREATE_STREAMS = 2,
60    CMD_STREAM_OPERATOR_RELEASE_STREAMS = 3,
61    CMD_STREAM_OPERATOR_COMMIT_STREAMS = 4,
62    CMD_STREAM_OPERATOR_GET_STREAM_ATTRIBUTES = 5,
63    CMD_STREAM_OPERATOR_ATTACH_BUFFER_QUEUE = 6,
64    CMD_STREAM_OPERATOR_DETACH_BUFFER_QUEUE = 7,
65    CMD_STREAM_OPERATOR_CAPTURE = 8,
66    CMD_STREAM_OPERATOR_CANCEL_CAPTURE = 9,
67    CMD_STREAM_OPERATOR_CHANGE_TO_OFFLINE_STREAM = 10,
68};
69
70class IStreamOperator : public HdiBase {
71public:
72    DECLARE_HDI_DESCRIPTOR(u"ohos.hdi.camera.v1_0.IStreamOperator");
73
74    virtual ~IStreamOperator() = default;
75
76    virtual int32_t IsStreamsSupported(OHOS::HDI::Camera::V1_0::OperationMode mode,
77         const std::vector<uint8_t>& modeSetting, const std::vector<OHOS::HDI::Camera::V1_0::StreamInfo>& infos, OHOS::HDI::Camera::V1_0::StreamSupportType& type) = 0;
78
79    virtual int32_t CreateStreams(const std::vector<OHOS::HDI::Camera::V1_0::StreamInfo>& streamInfos) = 0;
80
81    virtual int32_t ReleaseStreams(const std::vector<int32_t>& streamIds) = 0;
82
83    virtual int32_t CommitStreams(OHOS::HDI::Camera::V1_0::OperationMode mode,
84         const std::vector<uint8_t>& modeSetting) = 0;
85
86    virtual int32_t GetStreamAttributes(std::vector<OHOS::HDI::Camera::V1_0::StreamAttribute>& attributes) = 0;
87
88    virtual int32_t AttachBufferQueue(int32_t streamId,
89         const sptr<OHOS::HDI::Camera::V1_0::BufferProducerSequenceable>& bufferProducer) = 0;
90
91    virtual int32_t DetachBufferQueue(int32_t streamId) = 0;
92
93    virtual int32_t Capture(int32_t captureId, const OHOS::HDI::Camera::V1_0::CaptureInfo& info, bool isStreaming) = 0;
94
95    virtual int32_t CancelCapture(int32_t captureId) = 0;
96
97    virtual int32_t ChangeToOfflineStream(const std::vector<int32_t>& streamIds,
98         const sptr<OHOS::HDI::Camera::V1_0::IStreamOperatorCallback>& callbackObj, sptr<OHOS::HDI::Camera::V1_0::IOfflineStreamOperator>& offlineOperator) = 0;
99
100    virtual int32_t GetVersion(uint32_t& majorVer, uint32_t& minorVer)
101    {
102        majorVer = 1;
103        minorVer = 0;
104        return HDF_SUCCESS;
105    }
106
107    virtual bool IsProxy()
108    {
109        return false;
110    }
111
112    virtual const std::u16string GetDesc()
113    {
114        return metaDescriptor_;
115    }
116};
117} // V1_0
118} // Camera
119} // HDI
120} // OHOS
121
122#endif // OHOS_HDI_CAMERA_V1_0_ISTREAMOPERATOR_H
123
124