1 /*
2 * Copyright (c) 2023-2023 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 #include "gtest/gtest.h"
17 #include "plugin/common/plugin_meta.h"
18 #include "pipeline/filters/common/plugin_utils.h"
19 #include "plugin/common/plugin_tags.h"
20 #include "plugin/common/plugin_types.h"
21 #include "plugin/plugins/codec_adapter/codec_utils.h"
22 #include "pipeline/filters/common/plugin_settings.h"
23 #include "pipeline/core/filter_type.h"
24 #include "plugin/convert/ffmpeg_convert.h"
25 #include "hdf_base.h"
26 #include "OMX_Core.h"
27
28 using namespace testing::ext;
29 using namespace OHOS::Media::Plugin;
30 using namespace OHOS::Media::Plugin::CodecAdapter;
31 using namespace OHOS::Media::Pipeline;
32
33 namespace OHOS {
34 namespace Media {
35 namespace Test {
HWTEST(TestMeta, find_unavailable_plugins, TestSize.Level1)36 HWTEST(TestMeta, find_unavailable_plugins, TestSize.Level1)
37 {
38 Meta meta;
39 std::string artist("abcd");
40 meta.Set<Tag::MEDIA_TITLE>(artist);
41 auto cap = MetaToCapability(meta);
42 auto plugins = FindAvailablePlugins(*cap, Plugin::PluginType::AUDIO_DECODER);
43 ASSERT_TRUE(plugins.size() == 0);
44 }
45
HWTEST(TestMeta, set_para_to_sink_plugins, TestSize.Level1)46 HWTEST(TestMeta, set_para_to_sink_plugins, TestSize.Level1)
47 {
48 std::shared_ptr<Ffmpeg::ResamplePara> resamplePara = std::make_shared<Ffmpeg::ResamplePara>();
49 resamplePara->channels = 2;
50 resamplePara->sampleRate = 96000;
51 resamplePara->bitsPerSample = 16;
52 resamplePara->channelLayout = 3;
53 resamplePara->srcFfFmt = AVSampleFormat::AV_SAMPLE_FMT_FLTP;
54 resamplePara->destSamplesPerFrame = 2048;
55 resamplePara->destFmt = AVSampleFormat::AV_SAMPLE_FMT_S16;
56 std::shared_ptr<Ffmpeg::Resample> resample = std::make_shared<Ffmpeg::Resample>();
57 auto src = new uint8_t;
58 size_t srcLength = 16384;
59 auto des = new uint8_t;
60 size_t desLength = 16384;
61 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK);
62 ASSERT_TRUE(resample->Convert(src, srcLength, des, desLength) == Status::OK);
63 resamplePara->destFmt = AVSampleFormat::AV_SAMPLE_FMT_U8P;
64 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK);
65 ASSERT_TRUE(resample->Convert(src, srcLength, des, desLength) == Status::OK);
66
67 resamplePara->bitsPerSample = 8;
68 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK);
69 ASSERT_FALSE(resample->Convert(src, srcLength, des, desLength) == Status::OK);
70
71 resamplePara->bitsPerSample = 24;
72 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK);
73 ASSERT_FALSE(resample->Convert(src, srcLength, des, desLength) == Status::OK);
74 }
75
HWTEST(TestMeta, hdf_status_to_string, TestSize.Level1)76 HWTEST(TestMeta, hdf_status_to_string, TestSize.Level1)
77 {
78 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_SUCCESS) != "null");
79 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_FAILURE) != "null");
80 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_NOT_SUPPORT) != "null");
81 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_INVALID_PARAM) != "null");
82 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_INVALID_OBJECT) != "null");
83 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_MALLOC_FAIL) != "null");
84 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_TIMEOUT) != "null");
85 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_THREAD_CREATE_FAIL) != "null");
86 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_QUEUE_FULL) != "null");
87 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_DEVICE_BUSY) != "null");
88 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_IO) != "null");
89 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_BAD_FD) != "null");
90 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_NOPERM) != "null");
91 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_BSP_ERR_OP) != "null");
92 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_BSP_PLT_API_ERR) != "null");
93 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_PAL_ERR_DEV_CREATE) != "null");
94 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_PAL_ERR_INNER) != "null");
95 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_MEMORY) != "null");
96 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_DEVICE) != "null");
97 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_DEVICE_SERVICE) != "null");
98 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_DEV_INIT_FAIL) != "null");
99 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_PUBLISH_FAIL) != "null");
100 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_ATTACHDEV_FAIL) != "null");
101 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NODATA) != "null");
102 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NORANGE) != "null");
103 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_OP) != "null");
104 ASSERT_TRUE(HdfStatus2String(100) == "null");
105 }
106
HWTEST(TestMeta, omx_error_type_to_string, TestSize.Level1)107 HWTEST(TestMeta, omx_error_type_to_string, TestSize.Level1)
108 {
109 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorNone) == "OMX_ErrorNone");
110 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInsufficientResources) == "OMX_ErrorInsufficientResources");
111 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorUndefined) == "OMX_ErrorUndefined");
112 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInvalidComponentName) == "OMX_ErrorInvalidComponentName");
113 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorComponentNotFound) == "OMX_ErrorComponentNotFound");
114 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInvalidComponent) == "OMX_ErrorInvalidComponent");
115 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorBadParameter) == "OMX_ErrorBadParameter");
116 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorNotImplemented) == "OMX_ErrorNotImplemented");
117 ASSERT_TRUE(OmxErrorType2String(100) == "OMX_ErrorNone");
118 }
119
HWTEST(TestMeta, transfor_hdi_ret_value_to_status, TestSize.Level1)120 HWTEST(TestMeta, transfor_hdi_ret_value_to_status, TestSize.Level1)
121 {
122 ASSERT_TRUE(TransHdiRetVal2Status(HDF_SUCCESS) == Status::OK);
123 ASSERT_TRUE(TransHdiRetVal2Status(HDF_FAILURE) == Status::ERROR_UNKNOWN);
124 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_NOT_SUPPORT) == Status::ERROR_INVALID_OPERATION);
125 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_INVALID_PARAM) == Status::ERROR_INVALID_PARAMETER);
126 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_MALLOC_FAIL) == Status::ERROR_NO_MEMORY);
127 ASSERT_TRUE(TransHdiRetVal2Status(100) == Status::ERROR_UNKNOWN);
128 }
129
HWTEST(TestMeta, translate_to_omx_flag_set, TestSize.Level1)130 HWTEST(TestMeta, translate_to_omx_flag_set, TestSize.Level1)
131 {
132 ASSERT_TRUE(Translate2omxFlagSet(BUFFER_FLAG_EOS) == OMX_BUFFERFLAG_EOS);
133 ASSERT_TRUE(Translate2omxFlagSet(100) == 0);
134 ASSERT_TRUE(Translate2PluginFlagSet(OMX_BUFFERFLAG_EOS) == BUFFER_FLAG_EOS);
135 ASSERT_TRUE(Translate2PluginFlagSet(100) == 0);
136 }
137
HWTEST(TestMeta, coding_type_hst_to_hdi, TestSize.Level1)138 HWTEST(TestMeta, coding_type_hst_to_hdi, TestSize.Level1)
139 {
140 ASSERT_TRUE(CodingTypeHstToHdi(MEDIA_MIME_VIDEO_H264) == OMX_VIDEO_CodingAVC);
141 ASSERT_TRUE(CodingTypeHstToHdi(MEDIA_MIME_VIDEO_H265)
142 == static_cast<OMX_VIDEO_CODINGTYPE>(CODEC_OMX_VIDEO_CodingHEVC));
143 ASSERT_TRUE(CodingTypeHstToHdi("NULL") == OMX_VIDEO_CodingUnused);
144 }
145
HWTEST(TestMeta, format_hst_to_omx, TestSize.Level1)146 HWTEST(TestMeta, format_hst_to_omx, TestSize.Level1)
147 {
148 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::NV12) == OMX_COLOR_FormatYUV420SemiPlanar);
149 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::NV21) == OMX_COLOR_FormatYUV420SemiPlanar);
150 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::BGRA) == OMX_COLOR_Format32bitBGRA8888);
151 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::RGBA) == OMX_COLOR_Format32bitARGB8888);
152 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::YUV420P) == OMX_COLOR_FormatYUV420Planar);
153 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::RGB24) == OMX_COLOR_FormatUnused);
154 }
155
HWTEST(TestMeta, omx_state_to_string, TestSize.Level1)156 HWTEST(TestMeta, omx_state_to_string, TestSize.Level1)
157 {
158 ASSERT_TRUE(OmxStateToString(OMX_StateInvalid) == "OMX_StateInvalid");
159 ASSERT_TRUE(OmxStateToString(OMX_StateLoaded) == "OMX_StateLoaded");
160 ASSERT_TRUE(OmxStateToString(OMX_StateLoaded) == "OMX_StateLoaded");
161 ASSERT_TRUE(OmxStateToString(OMX_StateIdle) == "OMX_StateIdle");
162 ASSERT_TRUE(OmxStateToString(OMX_StateExecuting) == "OMX_StateExecuting");
163 ASSERT_TRUE(OmxStateToString(OMX_StatePause) == "OMX_StatePause");
164 ASSERT_TRUE(OmxStateToString(OMX_StateWaitForResources) == "OMX_StateWaitForResources");
165 ASSERT_TRUE(OmxStateToString(OMX_StateKhronosExtensions) == "OMX_StateKhronosExtensions");
166 ASSERT_TRUE(OmxStateToString(OMX_StateVendorStartUnused) == "OMX_StateVendorStartUnused");
167 ASSERT_TRUE(OmxStateToString(OMX_StateMax) == "OMX_StateMax");
168 }
169
HWTEST(TestMeta, get_omx_buffer_type, TestSize.Level1)170 HWTEST(TestMeta, get_omx_buffer_type, TestSize.Level1)
171 {
172 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SHARE_MEMORY), true)
173 == CODEC_BUFFER_TYPE_AVSHARE_MEM_FD);
174 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SURFACE_BUFFER), true)
175 == CODEC_BUFFER_TYPE_DYNAMIC_HANDLE);
176 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SURFACE_BUFFER), false)
177 == CODEC_BUFFER_TYPE_HANDLE);
178 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::VIRTUAL_ADDR), true)
179 == CODEC_BUFFER_TYPE_INVALID);
180 }
181
HWTEST(TestMeta, codec_buffer_pool, TestSize.Level1)182 HWTEST(TestMeta, codec_buffer_pool, TestSize.Level1)
183 {
184 PluginParaAllowedMap map = PluginParameterTable::FindAllowedParameterMap(FilterType::MEDIA_SOURCE);
185 ASSERT_TRUE(map.size() == 0);
186 map = PluginParameterTable::FindAllowedParameterMap(FilterType::CAPTURE_SOURCE);
187 ASSERT_TRUE(map.size() == 0);
188 map = PluginParameterTable::FindAllowedParameterMap(FilterType::DEMUXER);
189 ASSERT_TRUE(map.size() == 0);
190 map = PluginParameterTable::FindAllowedParameterMap(FilterType::MUXER);
191 ASSERT_TRUE(map.size() > 0);
192 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_DECODER);
193 ASSERT_TRUE(map.size() > 0);
194 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_DECODER);
195 ASSERT_TRUE(map.size() > 0);
196 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_ENCODER);
197 ASSERT_TRUE(map.size() > 0);
198 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_ENCODER);
199 ASSERT_TRUE(map.size() > 0);
200 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_SINK);
201 ASSERT_TRUE(map.size() > 0);
202 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_SINK);
203 ASSERT_TRUE(map.size() > 0);
204 map = PluginParameterTable::FindAllowedParameterMap(FilterType::OUTPUT_SINK);
205 ASSERT_TRUE(map.size() == 0);
206 map = PluginParameterTable::FindAllowedParameterMap(FilterType::NONE);
207 ASSERT_TRUE(map.size() == 0);
208 }
209
HWTEST(TestMeta, assign_parameter_if_match, TestSize.Level1)210 HWTEST(TestMeta, assign_parameter_if_match, TestSize.Level1)
211 {
212 uint32_t value = 0;
213 uint32_t ret;
214 ASSERT_FALSE(AssignParameterIfMatch(Tag::SECTION_REGULAR_START, ret, value));
215 ASSERT_FALSE(AssignParameterIfMatch(Tag::MIME, value, 0));
216 ASSERT_TRUE(AssignParameterIfMatch(Tag::TRACK_ID, ret, value));
217 }
218
HWTEST(TestMeta, translate_plugin_status, TestSize.Level1)219 HWTEST(TestMeta, translate_plugin_status, TestSize.Level1)
220 {
221 auto status = TranslatePluginStatus(Plugin::Status::END_OF_STREAM);
222 ASSERT_TRUE(status == ErrorCode::END_OF_STREAM);
223 status = TranslatePluginStatus(Plugin::Status::OK);
224 ASSERT_TRUE(status == ErrorCode::SUCCESS);
225 status = TranslatePluginStatus(Plugin::Status::NO_ERROR);
226 ASSERT_TRUE(status == ErrorCode::SUCCESS);
227 status = TranslatePluginStatus(Plugin::Status::ERROR_UNKNOWN);
228 ASSERT_TRUE(status == ErrorCode::ERROR_UNKNOWN);
229 status = TranslatePluginStatus(Plugin::Status::ERROR_CLIENT);
230 ASSERT_TRUE(status == ErrorCode::ERROR_UNKNOWN);
231 }
232
HWTEST(TestMeta, translate_into_parameter, TestSize.Level1)233 HWTEST(TestMeta, translate_into_parameter, TestSize.Level1)
234 {
235 Tag tag = Tag::SECTION_REGULAR_START;
236 auto ret = TranslateIntoParameter(-1, tag);
237 ASSERT_FALSE(ret);
238 ASSERT_TRUE(tag == Tag::SECTION_REGULAR_START);
239 ret = TranslateIntoParameter(static_cast<const int>(Tag::SECTION_REGULAR_START), tag);
240 ASSERT_TRUE(ret);
241 ASSERT_TRUE(tag == Tag::SECTION_REGULAR_START);
242 }
243
HWTEST(TestMeta, capability_to_string, TestSize.Level1)244 HWTEST(TestMeta, capability_to_string, TestSize.Level1)
245 {
246 std::shared_ptr<Capability> capability = std::make_shared<Capability>();
247 std::string string = Capability2String(*capability);
248 ASSERT_TRUE(string == "Capability{mime:}");
249 capability->SetMime("video/avc");
250 capability->AppendFixedKey(Capability::Key::MEDIA_BITRATE, nullptr);
251 capability->AppendFixedKey(Capability::Key::VIDEO_BIT_STREAM_FORMAT, nullptr);
252 string = Capability2String(*capability);
253 ASSERT_TRUE(string == "Capability{mime:video/avc, ");
254 }
255
HWTEST(TestMeta, find_allowed_parameter_map, TestSize.Level1)256 HWTEST(TestMeta, find_allowed_parameter_map, TestSize.Level1)
257 {
258 FilterType filterType = FilterType::NONE;
259 PluginParaAllowedMap map = PluginParameterTable::FindAllowedParameterMap(filterType);
260 ASSERT_TRUE(map.size() == 0);
261 filterType = FilterType::AUDIO_DECODER;
262 map = PluginParameterTable::FindAllowedParameterMap(filterType);
263 ASSERT_TRUE(map.size() != 0);
264 }
265 } // namespace Test
266 } // namespace Media
267 } // namespace OHOS
268