1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file expected in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci#include "pipeline_test.h"
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_civoid UtestPipelineTest::SetUpTestCase(void)
18094332d3Sopenharmony_ci{}
19094332d3Sopenharmony_civoid UtestPipelineTest::TearDownTestCase(void)
20094332d3Sopenharmony_ci{}
21094332d3Sopenharmony_civoid UtestPipelineTest::SetUp(void)
22094332d3Sopenharmony_ci{
23094332d3Sopenharmony_ci    if (cameraBase == nullptr)
24094332d3Sopenharmony_ci    cameraBase = std::make_shared<TestCameraBase>();
25094332d3Sopenharmony_ci    cameraBase->FBInit();
26094332d3Sopenharmony_ci    cameraBase->Init();
27094332d3Sopenharmony_ci}
28094332d3Sopenharmony_civoid UtestPipelineTest::TearDown(void)
29094332d3Sopenharmony_ci{
30094332d3Sopenharmony_ci    cameraBase->Close();
31094332d3Sopenharmony_ci}
32094332d3Sopenharmony_ci
33094332d3Sopenharmony_ci/**
34094332d3Sopenharmony_ci  * @tc.name: Check ppl
35094332d3Sopenharmony_ci  * @tc.desc: preview success.
36094332d3Sopenharmony_ci  * @tc.level: Level0
37094332d3Sopenharmony_ci  * @tc.size: MediumTest
38094332d3Sopenharmony_ci  * @tc.type: Function
39094332d3Sopenharmony_ci  */
40094332d3Sopenharmony_ciTEST_F(UtestPipelineTest, camera_ppl_0001)
41094332d3Sopenharmony_ci{
42094332d3Sopenharmony_ci    std::cout << "==========[test log] Check ppl: preview success." << std::endl;
43094332d3Sopenharmony_ci    // Get the stream manager
44094332d3Sopenharmony_ci    cameraBase->AchieveStreamOperator();
45094332d3Sopenharmony_ci    // start stream
46094332d3Sopenharmony_ci    cameraBase->intents = {PREVIEW};
47094332d3Sopenharmony_ci    cameraBase->StartStream(cameraBase->intents);
48094332d3Sopenharmony_ci    // Get preview
49094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
50094332d3Sopenharmony_ci    // release stream
51094332d3Sopenharmony_ci    cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW};
52094332d3Sopenharmony_ci    cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW};
53094332d3Sopenharmony_ci    cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
54094332d3Sopenharmony_ci}
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_ci/**
57094332d3Sopenharmony_ci  * @tc.name: Check ppl
58094332d3Sopenharmony_ci  * @tc.desc: preview + capture success.
59094332d3Sopenharmony_ci  * @tc.level: Level1
60094332d3Sopenharmony_ci  * @tc.size: MediumTest
61094332d3Sopenharmony_ci  * @tc.type: Function
62094332d3Sopenharmony_ci  */
63094332d3Sopenharmony_ciTEST_F(UtestPipelineTest, camera_ppl_0002)
64094332d3Sopenharmony_ci{
65094332d3Sopenharmony_ci    std::cout << "==========[test log] Check ppl: preview + capture success." << std::endl;
66094332d3Sopenharmony_ci    // Get the stream manager
67094332d3Sopenharmony_ci    cameraBase->AchieveStreamOperator();
68094332d3Sopenharmony_ci    // start stream
69094332d3Sopenharmony_ci    cameraBase->intents = {PREVIEW, STILL_CAPTURE};
70094332d3Sopenharmony_ci    cameraBase->StartStream(cameraBase->intents);
71094332d3Sopenharmony_ci    // Get preview
72094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
73094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_CAPTURE, cameraBase->CAPTURE_ID_CAPTURE, false, true);
74094332d3Sopenharmony_ci    // release stream
75094332d3Sopenharmony_ci    cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW, cameraBase->CAPTURE_ID_CAPTURE};
76094332d3Sopenharmony_ci    cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW, cameraBase->STREAM_ID_CAPTURE};
77094332d3Sopenharmony_ci    cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
78094332d3Sopenharmony_ci}
79094332d3Sopenharmony_ci
80094332d3Sopenharmony_ci/**
81094332d3Sopenharmony_ci  * @tc.name: Check ppl
82094332d3Sopenharmony_ci  * @tc.desc: preview + video success.
83094332d3Sopenharmony_ci  * @tc.level: Level1
84094332d3Sopenharmony_ci  * @tc.size: MediumTest
85094332d3Sopenharmony_ci  * @tc.type: Function
86094332d3Sopenharmony_ci  */
87094332d3Sopenharmony_ciTEST_F(UtestPipelineTest, camera_ppl_0003)
88094332d3Sopenharmony_ci{
89094332d3Sopenharmony_ci    std::cout << "==========[test log] Check ppl: preview + video success." << std::endl;
90094332d3Sopenharmony_ci    // Get the stream manager
91094332d3Sopenharmony_ci    cameraBase->AchieveStreamOperator();
92094332d3Sopenharmony_ci    // start stream
93094332d3Sopenharmony_ci    cameraBase->intents = {PREVIEW, VIDEO};
94094332d3Sopenharmony_ci    cameraBase->StartStream(cameraBase->intents);
95094332d3Sopenharmony_ci    // Get preview
96094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
97094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_VIDEO, cameraBase->CAPTURE_ID_VIDEO, false, true);
98094332d3Sopenharmony_ci    // release stream
99094332d3Sopenharmony_ci    cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW, cameraBase->CAPTURE_ID_VIDEO};
100094332d3Sopenharmony_ci    cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW, cameraBase->STREAM_ID_VIDEO};
101094332d3Sopenharmony_ci    cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
102094332d3Sopenharmony_ci}
103094332d3Sopenharmony_ci
104094332d3Sopenharmony_ci/**
105094332d3Sopenharmony_ci  * @tc.name: Check ppl
106094332d3Sopenharmony_ci  * @tc.desc: video mode without preview, system not support, expected return fail.
107094332d3Sopenharmony_ci  * @tc.level: Level2
108094332d3Sopenharmony_ci  * @tc.size: MediumTest
109094332d3Sopenharmony_ci  * @tc.type: Function
110094332d3Sopenharmony_ci  */
111094332d3Sopenharmony_ciTEST_F(UtestPipelineTest, camera_ppl_0004)
112094332d3Sopenharmony_ci{
113094332d3Sopenharmony_ci    std::cout << "==========[test log] Video mode without preview, system not support, ";
114094332d3Sopenharmony_ci    std::cout << "expected return fail." << std::endl;
115094332d3Sopenharmony_ci
116094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase->cameraDevice != nullptr);
117094332d3Sopenharmony_ci    cameraBase->AchieveStreamOperator();
118094332d3Sopenharmony_ci    // Create video stream
119094332d3Sopenharmony_ci    std::vector<std::shared_ptr<StreamInfo>> streamInfos;
120094332d3Sopenharmony_ci    std::shared_ptr<IBufferProducer> producer = IBufferProducer::CreateBufferQueue();
121094332d3Sopenharmony_ci    producer->SetQueueSize(8); // 8:set bufferqueue size
122094332d3Sopenharmony_ci    if (producer->GetQueueSize() != 8) { // 8:get bufferqueue size
123094332d3Sopenharmony_ci        std::cout << "~~~~~~~" << std::endl;
124094332d3Sopenharmony_ci    }
125094332d3Sopenharmony_ci    auto callback = [this](std::shared_ptr<SurfaceBuffer> b) {
126094332d3Sopenharmony_ci        cameraBase->BufferCallback(b, cameraBase->video_mode);
127094332d3Sopenharmony_ci        return;
128094332d3Sopenharmony_ci    };
129094332d3Sopenharmony_ci    producer->SetCallback(callback);
130094332d3Sopenharmony_ci    cameraBase->streamInfo = std::make_shared<StreamInfo>();
131094332d3Sopenharmony_ci    cameraBase->streamInfo->streamId_ = cameraBase->STREAM_ID_VIDEO;
132094332d3Sopenharmony_ci    cameraBase->streamInfo->width_ = 640; // 640:picture width // 640:picture width
133094332d3Sopenharmony_ci    cameraBase->streamInfo->height_ = 480; // 480:picture height // 480:picture height
134094332d3Sopenharmony_ci    cameraBase->streamInfo->format_ = CAMERA_FORMAT_YUYV_422_PKG;
135094332d3Sopenharmony_ci    cameraBase->streamInfo->dataspace_ = 10; // 10:picture dataspace
136094332d3Sopenharmony_ci    cameraBase->streamInfo->intent_ = VIDEO;
137094332d3Sopenharmony_ci    cameraBase->streamInfo->tunneledMode_ = 5; // 5:tunnel mode // 5:tunnel mode
138094332d3Sopenharmony_ci    cameraBase->streamInfo->bufferQueue_ = producer;
139094332d3Sopenharmony_ci    std::vector<std::shared_ptr<StreamInfo>>().swap(streamInfos);
140094332d3Sopenharmony_ci    streamInfos.push_back(cameraBase->streamInfo);
141094332d3Sopenharmony_ci    cameraBase->rc = cameraBase->streamOperator->CreateStreams(streamInfos);
142094332d3Sopenharmony_ci    EXPECT_EQ(false, cameraBase->rc == Camera::METHOD_NOT_SUPPORTED);
143094332d3Sopenharmony_ci    if (cameraBase->rc == Camera::METHOD_NOT_SUPPORTED) {
144094332d3Sopenharmony_ci        std::cout << "==========[test log] CreateStreams METHOD_NOT_SUPPORTED, streamId = ";
145094332d3Sopenharmony_ci        std::cout << cameraBase->STREAM_ID_VIDEO <<", intent = VIDEO" << std::endl;
146094332d3Sopenharmony_ci    } else {
147094332d3Sopenharmony_ci        std::cout << "==========[test log] CreateStreams fail, rc = " << cameraBase->rc << std::endl;
148094332d3Sopenharmony_ci    }
149094332d3Sopenharmony_ci
150094332d3Sopenharmony_ci    cameraBase->rc = cameraBase->streamOperator->CommitStreams(Camera::NORMAL, nullptr);
151094332d3Sopenharmony_ci    EXPECT_EQ(false, cameraBase->rc == NO_ERROR);
152094332d3Sopenharmony_ci    if (cameraBase->rc == NO_ERROR) {
153094332d3Sopenharmony_ci        std::cout << "==========[test log] CommitStreams success." << std::endl;
154094332d3Sopenharmony_ci    } else {
155094332d3Sopenharmony_ci        std::cout << "==========[test log] CommitStreams fail, rc = ." << cameraBase->rc << std::endl;
156094332d3Sopenharmony_ci    }
157094332d3Sopenharmony_ci}