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
16094332d3Sopenharmony_ci#include "logic_camera_test.h"
17094332d3Sopenharmony_ci
18094332d3Sopenharmony_ciconstexpr int QUEUE_SIZE = 8;
19094332d3Sopenharmony_ciconstexpr int DEFAULT_TEST_DATASPACE_VALUE = 8;
20094332d3Sopenharmony_ciconstexpr int DEFAULT_TEST_TUNNELEDMODE_VALUE = 5;
21094332d3Sopenharmony_ci
22094332d3Sopenharmony_civoid UtestLogicCameraTest::SetUpTestCase(void)
23094332d3Sopenharmony_ci{}
24094332d3Sopenharmony_civoid UtestLogicCameraTest::TearDownTestCase(void)
25094332d3Sopenharmony_ci{}
26094332d3Sopenharmony_civoid UtestLogicCameraTest::SetUp(void)
27094332d3Sopenharmony_ci{
28094332d3Sopenharmony_ci    if (cameraBase == nullptr)
29094332d3Sopenharmony_ci    cameraBase = std::make_shared<TestCameraBase>();
30094332d3Sopenharmony_ci    cameraBase->FBInit();
31094332d3Sopenharmony_ci    cameraBase->Init();
32094332d3Sopenharmony_ci}
33094332d3Sopenharmony_civoid UtestLogicCameraTest::TearDown(void)
34094332d3Sopenharmony_ci{
35094332d3Sopenharmony_ci    cameraBase->Close();
36094332d3Sopenharmony_ci}
37094332d3Sopenharmony_ci
38094332d3Sopenharmony_ci/**
39094332d3Sopenharmony_ci  * @tc.name: test logic csamera
40094332d3Sopenharmony_ci  * @tc.desc: single stream
41094332d3Sopenharmony_ci  * @tc.level: Level0
42094332d3Sopenharmony_ci  * @tc.size: MediumTest
43094332d3Sopenharmony_ci  * @tc.type: Function
44094332d3Sopenharmony_ci  */
45094332d3Sopenharmony_ciTEST_F(UtestLogicCameraTest, camera_logic_0001)
46094332d3Sopenharmony_ci{
47094332d3Sopenharmony_ci    std::cout << "==========[test log] test single stream"<< std::endl;
48094332d3Sopenharmony_ci    // Get the stream manager
49094332d3Sopenharmony_ci    cameraBase->AchieveStreamOperator();
50094332d3Sopenharmony_ci    // Configure preview stream information
51094332d3Sopenharmony_ci    std::shared_ptr<IBufferProducer> producer = IBufferProducer::CreateBufferQueue();
52094332d3Sopenharmony_ci    producer->SetQueueSize(QUEUE_SIZE);
53094332d3Sopenharmony_ci    if (producer->GetQueueSize() != QUEUE_SIZE) {
54094332d3Sopenharmony_ci        std::cout << "~~~~~~~" << std::endl;
55094332d3Sopenharmony_ci    }
56094332d3Sopenharmony_ci    auto callback = [this](std::shared_ptr<SurfaceBuffer> b) {
57094332d3Sopenharmony_ci        cameraBase->BufferCallback(b, cameraBase->preview_mode);
58094332d3Sopenharmony_ci        return;
59094332d3Sopenharmony_ci    };
60094332d3Sopenharmony_ci    producer->SetCallback(callback);
61094332d3Sopenharmony_ci    std::shared_ptr<StreamInfo> streamInfoPre = std::make_shared<StreamInfo>();
62094332d3Sopenharmony_ci    streamInfoPre->streamId_ = cameraBase->STREAM_ID_PREVIEW;
63094332d3Sopenharmony_ci    streamInfoPre->width_ = DEFAULT_TEST_WIDTH_VALUE;
64094332d3Sopenharmony_ci    streamInfoPre->height_ = DEFAULT_TEST_HEIGHT_VALUE;
65094332d3Sopenharmony_ci    streamInfoPre->format_ = CAMERA_FORMAT_YUYV_422_PKG;
66094332d3Sopenharmony_ci    streamInfoPre->dataspace_ = DEFAULT_TEST_DATASPACE_VALUE;
67094332d3Sopenharmony_ci    streamInfoPre->intent_ = PREVIEW;
68094332d3Sopenharmony_ci    streamInfoPre->tunneledMode_ = DEFAULT_TEST_TUNNELEDMODE_VALUE;
69094332d3Sopenharmony_ci    streamInfoPre->bufferQueue_ = producer;
70094332d3Sopenharmony_ci    cameraBase->streamInfos.push_back(streamInfoPre);
71094332d3Sopenharmony_ci    cameraBase->rc = cameraBase->streamOperator->CreateStreams(cameraBase->streamInfos);
72094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase->rc == NO_ERROR);
73094332d3Sopenharmony_ci    if (cameraBase->rc == NO_ERROR) {
74094332d3Sopenharmony_ci        std::cout << "==========[test log] CreateStreams success, streamId = ";
75094332d3Sopenharmony_ci        std::cout << cameraBase->STREAM_ID_CAPTURE, <<", intent = STILL_CAPTURE" << std::endl;
76094332d3Sopenharmony_ci    } else {
77094332d3Sopenharmony_ci        std::cout << "==========[test log] CreateStreams fail, rc = " << cameraBase->rc <<" , streamId = ";
78094332d3Sopenharmony_ci        std::cout << cameraBase->STREAM_ID_CAPTURE, <<", intent = STILL_CAPTURE" << std::endl;
79094332d3Sopenharmony_ci    }
80094332d3Sopenharmony_ci    // Submit stream information
81094332d3Sopenharmony_ci    cameraBase->rc = cameraBase->streamOperator->CommitStreams(DUAL, nullptr);
82094332d3Sopenharmony_ci    EXPECT_EQ(false, cameraBase->rc != NO_ERROR);
83094332d3Sopenharmony_ci    if (cameraBase->rc == NO_ERROR) {
84094332d3Sopenharmony_ci        std::cout << "==========[test log] CommitStreams DUAL success." << std::endl;
85094332d3Sopenharmony_ci    } else {
86094332d3Sopenharmony_ci        std::cout << "==========[test log] CommitStreams DUAL fail, rc = " << cameraBase->rc << std::endl;
87094332d3Sopenharmony_ci    }
88094332d3Sopenharmony_ci    // capture
89094332d3Sopenharmony_ci    cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
90094332d3Sopenharmony_ci    // post-processing
91094332d3Sopenharmony_ci    cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW};
92094332d3Sopenharmony_ci    cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW};
93094332d3Sopenharmony_ci    cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
94094332d3Sopenharmony_ci}