1 // Copyright (C) 2020 The Android Open Source Project
2 //
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 #include <string>
15
16 #include "InputConfig.pb.h"
17 #include "Options.pb.h"
18 #include "gmock/gmock-matchers.h"
19 #include "gmock/gmock.h"
20 #include "gtest/gtest.h"
21 #include "runner/client_interface/PipeOptionsConverter.h"
22 #include "types/Status.h"
23
24 using ::aidl::android::automotive::computepipe::runner::PipeDescriptor;
25 using ::aidl::android::automotive::computepipe::runner::PipeInputConfigCameraType;
26 using ::aidl::android::automotive::computepipe::runner::PipeInputConfigFormatType;
27 using ::aidl::android::automotive::computepipe::runner::PipeInputConfigImageFileType;
28 using ::aidl::android::automotive::computepipe::runner::PipeInputConfigInputType;
29 using ::aidl::android::automotive::computepipe::runner::PipeInputConfigVideoFileType;
30
31 namespace android {
32 namespace automotive {
33 namespace computepipe {
34 namespace runner {
35 namespace client_interface {
36 namespace aidl_client {
37 namespace {
38
TEST(OptionsToPipeDescriptorTest,InputTypesConvertAsExpected)39 TEST(OptionsToPipeDescriptorTest, InputTypesConvertAsExpected) {
40 proto::Options options;
41
42 // Add a driver view camera type
43 options.add_input_configs()->add_input_stream()->set_type(
44 proto::InputStreamConfig_InputType_CAMERA);
45 options.mutable_input_configs(0)->mutable_input_stream(0)->mutable_cam_config()->set_camera_type(
46 proto::CameraConfig_CameraType_DRIVER_VIEW_CAMERA);
47 options.mutable_input_configs(0)->set_config_id(0);
48
49 // Add an occupant view camera type
50 options.add_input_configs()->add_input_stream()->set_type(
51 proto::InputStreamConfig_InputType_CAMERA);
52 options.mutable_input_configs(1)->mutable_input_stream(0)->mutable_cam_config()->set_camera_type(
53 proto::CameraConfig_CameraType_OCCUPANT_VIEW_CAMERA);
54 options.mutable_input_configs(1)->set_config_id(1);
55
56 // Add external camera type
57 options.add_input_configs()->add_input_stream()->set_type(
58 proto::InputStreamConfig_InputType_CAMERA);
59 options.mutable_input_configs(2)->mutable_input_stream(0)->mutable_cam_config()->set_camera_type(
60 proto::CameraConfig_CameraType_EXTERNAL_CAMERA);
61 options.mutable_input_configs(2)->set_config_id(2);
62
63 // Add surround camera type
64 options.add_input_configs()->add_input_stream()->set_type(
65 proto::InputStreamConfig_InputType_CAMERA);
66 options.mutable_input_configs(3)->mutable_input_stream(0)->mutable_cam_config()->set_camera_type(
67 proto::CameraConfig_CameraType_SURROUND_VIEW_CAMERA);
68 options.mutable_input_configs(3)->set_config_id(3);
69
70 // Add image file type
71 options.add_input_configs()->add_input_stream()->set_type(
72 proto::InputStreamConfig_InputType_IMAGE_FILES);
73 options.mutable_input_configs(4)->mutable_input_stream(0)->mutable_image_config()->set_file_type(
74 proto::ImageFileConfig_ImageFileType_PNG);
75 options.mutable_input_configs(4)->set_config_id(4);
76
77 // Add video file type
78 options.add_input_configs()->add_input_stream()->set_type(
79 proto::InputStreamConfig_InputType_VIDEO_FILE);
80 options.mutable_input_configs(5)->mutable_input_stream(0)->mutable_video_config()->set_file_type(
81 proto::VideoFileConfig_VideoFileType_MPEG);
82 options.mutable_input_configs(5)->set_config_id(5);
83
84 PipeDescriptor desc = OptionsToPipeDescriptor(options);
85
86 ASSERT_EQ(desc.inputConfig.size(), 6);
87 ASSERT_EQ(desc.inputConfig[0].inputSources.size(), 1);
88 EXPECT_EQ(desc.inputConfig[0].inputSources[0].type, PipeInputConfigInputType::CAMERA);
89 EXPECT_EQ(desc.inputConfig[0].inputSources[0].camDesc.type,
90 PipeInputConfigCameraType::DRIVER_VIEW_CAMERA);
91 EXPECT_EQ(desc.inputConfig[0].configId, 0);
92
93 ASSERT_EQ(desc.inputConfig[1].inputSources.size(), 1);
94 EXPECT_EQ(desc.inputConfig[1].inputSources[0].type, PipeInputConfigInputType::CAMERA);
95 EXPECT_EQ(desc.inputConfig[1].inputSources[0].camDesc.type,
96 PipeInputConfigCameraType::OCCUPANT_VIEW_CAMERA);
97 EXPECT_EQ(desc.inputConfig[1].configId, 1);
98
99 ASSERT_EQ(desc.inputConfig[2].inputSources.size(), 1);
100 EXPECT_EQ(desc.inputConfig[2].inputSources[0].type, PipeInputConfigInputType::CAMERA);
101 EXPECT_EQ(desc.inputConfig[2].inputSources[0].camDesc.type,
102 PipeInputConfigCameraType::EXTERNAL_CAMERA);
103 EXPECT_EQ(desc.inputConfig[2].configId, 2);
104
105 ASSERT_EQ(desc.inputConfig[3].inputSources.size(), 1);
106 EXPECT_EQ(desc.inputConfig[3].inputSources[0].type, PipeInputConfigInputType::CAMERA);
107 EXPECT_EQ(desc.inputConfig[3].inputSources[0].camDesc.type,
108 PipeInputConfigCameraType::SURROUND_VIEW_CAMERA);
109 EXPECT_EQ(desc.inputConfig[3].configId, 3);
110
111 ASSERT_EQ(desc.inputConfig[4].inputSources.size(), 1);
112 EXPECT_EQ(desc.inputConfig[4].inputSources[0].type, PipeInputConfigInputType::IMAGE_FILES);
113 EXPECT_EQ(desc.inputConfig[4].inputSources[0].imageDesc.fileType,
114 PipeInputConfigImageFileType::PNG);
115 EXPECT_EQ(desc.inputConfig[4].configId, 4);
116
117 ASSERT_EQ(desc.inputConfig[5].inputSources.size(), 1);
118 EXPECT_EQ(desc.inputConfig[5].inputSources[0].type, PipeInputConfigInputType::VIDEO_FILE);
119 EXPECT_EQ(desc.inputConfig[5].inputSources[0].videoDesc.fileType,
120 PipeInputConfigVideoFileType::MPEG);
121 EXPECT_EQ(desc.inputConfig[5].configId, 5);
122 }
123
TEST(OptionsToPipeDescriptorTest,FormatTypesConvertAsExpected)124 TEST(OptionsToPipeDescriptorTest, FormatTypesConvertAsExpected) {
125 proto::Options options;
126
127 // Add an RGB format
128 options.add_input_configs()->add_input_stream()->set_format(
129 proto::InputStreamConfig_FormatType_RGB);
130
131 options.add_input_configs()->add_input_stream()->set_format(
132 proto::InputStreamConfig_FormatType_NIR);
133
134 options.add_input_configs()->add_input_stream()->set_format(
135 proto::InputStreamConfig_FormatType_NIR_DEPTH);
136
137 PipeDescriptor desc = OptionsToPipeDescriptor(options);
138
139 ASSERT_EQ(desc.inputConfig.size(), 3);
140 ASSERT_EQ(desc.inputConfig[0].inputSources.size(), 1);
141 EXPECT_EQ(desc.inputConfig[0].inputSources[0].format, PipeInputConfigFormatType::RGB);
142
143 ASSERT_EQ(desc.inputConfig[1].inputSources.size(), 1);
144 EXPECT_EQ(desc.inputConfig[1].inputSources[0].format, PipeInputConfigFormatType::NIR);
145
146 ASSERT_EQ(desc.inputConfig[2].inputSources.size(), 1);
147 EXPECT_EQ(desc.inputConfig[2].inputSources[0].format, PipeInputConfigFormatType::NIR_DEPTH);
148 }
149
TEST(OptionsToPipeDescriptorTest,ImageDimensionsAreTranslatedCorrectly)150 TEST(OptionsToPipeDescriptorTest, ImageDimensionsAreTranslatedCorrectly) {
151 proto::Options options;
152
153 options.add_input_configs()->add_input_stream()->set_width(640);
154 options.mutable_input_configs(0)->mutable_input_stream(0)->set_height(480);
155 options.mutable_input_configs(0)->mutable_input_stream(0)->set_stride(640 * 3);
156 options.mutable_input_configs(0)->mutable_input_stream(0)->set_stride(640 * 3);
157
158 PipeDescriptor desc = OptionsToPipeDescriptor(options);
159 ASSERT_EQ(desc.inputConfig.size(), 1);
160 ASSERT_EQ(desc.inputConfig[0].inputSources.size(), 1);
161 ASSERT_EQ(desc.inputConfig[0].inputSources[0].width, 640);
162 ASSERT_EQ(desc.inputConfig[0].inputSources[0].height, 480);
163 ASSERT_EQ(desc.inputConfig[0].inputSources[0].stride, 640 * 3);
164 }
165
TEST(OptionsToPipeDescriptorTest,CameraIdIsReflectedCorrectly)166 TEST(OptionsToPipeDescriptorTest, CameraIdIsReflectedCorrectly) {
167 proto::Options options;
168 std::string expectedCameraName = "Camera 1";
169 options.add_input_configs()->add_input_stream()->mutable_cam_config()->set_cam_id(
170 expectedCameraName);
171
172 PipeDescriptor desc = OptionsToPipeDescriptor(options);
173 ASSERT_EQ(desc.inputConfig.size(), 1);
174 ASSERT_EQ(desc.inputConfig[0].inputSources.size(), 1);
175 EXPECT_EQ(desc.inputConfig[0].inputSources[0].camDesc.camId, expectedCameraName);
176 }
177
178 } // namespace
179 } // namespace aidl_client
180 } // namespace client_interface
181 } // namespace runner
182 } // namespace computepipe
183 } // namespace automotive
184 } // namespace android
185