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 #include <OMX_Component.h>
17 #include <OMX_Core.h>
18 #include <OMX_Video.h>
19 #include <OMX_VideoExt.h>
20 #include <ashmem.h>
21 #include <gtest/gtest.h>
22 #include <hdf_log.h>
23 #include <osal_mem.h>
24 #include <securec.h>
25 #include <servmgr_hdi.h>
26
27 #include "codec_component_manager.h"
28 #include "codec_component_type.h"
29 #include "hdf_io_service_if.h"
30 #include "codec_omx_ext.h"
31
32 #define HDF_LOG_TAG codec_hdi_test
33
34 using namespace std;
35 using namespace testing::ext;
36
37 namespace {
38 struct CodecComponentManager *g_manager = nullptr;
39 struct CodecComponentType *g_component = nullptr;
40 uint32_t g_componentId = 0;
41 struct CodecCallbackType *g_callback = nullptr;
42 int32_t g_count = 0;
43
44 constexpr const char *ENCODER_AVC = "rk.video_encoder.avc";
45 constexpr const char *DECODER_AVC = "rk.video_decoder.avc";
46
47 constexpr int32_t INT_TO_STR_LEN = 32;
48 constexpr int32_t ARRAY_TO_STR_LEN = 1000;
49
50 union OMX_VERSIONTYPE g_version;
51 constexpr int32_t BUFFER_SIZE = (640 * 480 * 3);
52 constexpr int32_t ROLE_LEN = 240;
53 constexpr int32_t FRAMERATE = (30 << 16);
54 constexpr uint32_t BUFFER_ID_ERROR = 65000;
55 constexpr int64_t APP_DATA = 64;
56 constexpr int64_t APP_DATA_MAX = 9223372036854775807;
57 constexpr int64_t APP_DATA_MIN = -9223372036854775807;
58 enum class PortIndex { PORT_INDEX_INPUT = 0, PORT_INDEX_OUTPUT = 1, PORT_INDEX_ERROR_INPUT = 2 };
59
60 template <typename T>
InitParam(T & param)61 void InitParam(T ¶m)
62 {
63 memset_s(¶m, sizeof(param), 0x0, sizeof(param));
64 param.nSize = sizeof(param);
65 param.nVersion = g_version;
66 }
67
68 struct BufferInfo {
69 std::shared_ptr<OmxCodecBuffer> omxBuffer;
70 std::shared_ptr<OHOS::Ashmem> sharedMem;
BufferInfo__anona714dde40111::BufferInfo71 BufferInfo()
72 {
73 omxBuffer = nullptr;
74 sharedMem = nullptr;
75 }
~BufferInfo__anona714dde40111::BufferInfo76 ~BufferInfo()
77 {
78 omxBuffer = nullptr;
79 if (sharedMem != nullptr) {
80 sharedMem->UnmapAshmem();
81 sharedMem->CloseAshmem();
82 sharedMem = nullptr;
83 }
84 }
85 };
86 std::map<int32_t, std::shared_ptr<BufferInfo>> inputBuffers;
87 std::map<int32_t, std::shared_ptr<BufferInfo>> outputBuffers;
InitCodecBufferWithAshMem(enum PortIndex portIndex,int bufferSize,shared_ptr<OmxCodecBuffer> omxBuffer,shared_ptr<OHOS::Ashmem> sharedMem)88 static void InitCodecBufferWithAshMem(
89 enum PortIndex portIndex, int bufferSize, shared_ptr<OmxCodecBuffer> omxBuffer, shared_ptr<OHOS::Ashmem> sharedMem)
90 {
91 omxBuffer->size = sizeof(OmxCodecBuffer);
92 omxBuffer->version = g_version;
93 omxBuffer->bufferType = CODEC_BUFFER_TYPE_AVSHARE_MEM_FD;
94 omxBuffer->bufferLen = sizeof(int);
95 omxBuffer->buffer = (uint8_t *)(uintptr_t)sharedMem->GetAshmemFd();
96 omxBuffer->allocLen = bufferSize;
97 omxBuffer->fenceFd = -1;
98 omxBuffer->pts = 0;
99 omxBuffer->flag = 0;
100 if (portIndex == PortIndex::PORT_INDEX_INPUT) {
101 omxBuffer->type = READ_ONLY_TYPE;
102 sharedMem->MapReadAndWriteAshmem();
103 } else {
104 omxBuffer->type = READ_WRITE_TYPE;
105 sharedMem->MapReadOnlyAshmem();
106 }
107 }
108
UseBufferOnPort(enum PortIndex portIndex,int bufferCount,int bufferSize)109 static bool UseBufferOnPort(enum PortIndex portIndex, int bufferCount, int bufferSize)
110 {
111 for (int i = 0; i < bufferCount; i++) {
112 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
113 if (omxBuffer == nullptr) {
114 HDF_LOGE("%{public}s omxBuffer is null", __func__);
115 return false;
116 }
117
118 int fd = OHOS::AshmemCreate(0, bufferSize);
119 shared_ptr<OHOS::Ashmem> sharedMem = make_shared<OHOS::Ashmem>(fd, bufferSize);
120 if (sharedMem == nullptr) {
121 HDF_LOGE("%{public}s sharedMem is null", __func__);
122 if (fd >= 0) {
123 close(fd);
124 fd = -1;
125 }
126 return false;
127 }
128 InitCodecBufferWithAshMem(portIndex, bufferSize, omxBuffer, sharedMem);
129 auto err = g_component->UseBuffer(g_component, (uint32_t)portIndex, omxBuffer.get());
130 if (err != HDF_SUCCESS) {
131 HDF_LOGE("%{public}s failed to UseBuffer with portIndex[%{public}d]", __func__, portIndex);
132 sharedMem->UnmapAshmem();
133 sharedMem->CloseAshmem();
134 sharedMem = nullptr;
135 omxBuffer = nullptr;
136 return false;
137 }
138 omxBuffer->bufferLen = 0;
139 HDF_LOGI("UseBuffer returned bufferID [%{public}d]", omxBuffer->bufferId);
140 std::shared_ptr<BufferInfo> bufferInfo = std::make_shared<BufferInfo>();
141 bufferInfo->omxBuffer = omxBuffer;
142 bufferInfo->sharedMem = sharedMem;
143 if (portIndex == PortIndex::PORT_INDEX_INPUT) {
144 inputBuffers.emplace(std::make_pair(omxBuffer->bufferId, bufferInfo));
145 } else {
146 outputBuffers.emplace(std::make_pair(omxBuffer->bufferId, bufferInfo));
147 }
148 }
149 return true;
150 }
151
152 class CodecHdiAdapterTest : public testing::Test {
153 public:
SetUpTestCase()154 static void SetUpTestCase() {}
TearDownTestCase()155 static void TearDownTestCase() {}
SetUp()156 void SetUp() {}
TearDown()157 void TearDown() {}
158 };
159
160 static char g_arrayStr[ARRAY_TO_STR_LEN];
GetArrayStr(int32_t * array,int32_t arrayLen,int32_t endValue)161 static char *GetArrayStr(int32_t *array, int32_t arrayLen, int32_t endValue)
162 {
163 int32_t len = 0;
164 int32_t totalLen = 0;
165 int32_t ret;
166 char value[INT_TO_STR_LEN];
167 ret = memset_s(g_arrayStr, sizeof(g_arrayStr), 0, sizeof(g_arrayStr));
168 if (ret != EOK) {
169 HDF_LOGE("%{public}s: memset_s g_arrayStr failed, error code: %{public}d", __func__, ret);
170 return g_arrayStr;
171 }
172 for (int32_t i = 0; i < arrayLen; i++) {
173 if (array[i] == endValue) {
174 break;
175 }
176 ret = memset_s(value, sizeof(value), 0, sizeof(value));
177 if (ret != EOK) {
178 HDF_LOGE("%{public}s: memset_s value failed, error code: %{public}d", __func__, ret);
179 return g_arrayStr;
180 }
181 ret = sprintf_s(value, sizeof(value), "0x0%X, ", array[i]);
182 if (ret < 0) {
183 HDF_LOGE("%{public}s: sprintf_s value failed, error code: %{public}d", __func__, ret);
184 return g_arrayStr;
185 }
186 len = strnlen(value, ARRAY_TO_STR_LEN);
187 ret = memcpy_s(g_arrayStr + totalLen, len, value, len);
188 if (ret != EOK) {
189 HDF_LOGE("%{public}s: memcpy_s g_arrayStr failed, error code: %{public}d", __func__, ret);
190 return g_arrayStr;
191 }
192 totalLen += len;
193 }
194 return g_arrayStr;
195 }
196
PrintCapability(CodecCompCapability * cap,int32_t index)197 static void PrintCapability(CodecCompCapability *cap, int32_t index)
198 {
199 HDF_LOGI("---------------------- component capability %{public}d ---------------------", index + 1);
200 HDF_LOGI("role:%{public}d", cap->role);
201 HDF_LOGI("type:%{public}d", cap->type);
202 HDF_LOGI("compName:%{public}s", cap->compName);
203 HDF_LOGI("supportProfiles:%{public}s", GetArrayStr(cap->supportProfiles, PROFILE_NUM, INVALID_PROFILE));
204 HDF_LOGI("maxInst:%{public}d", cap->maxInst);
205 HDF_LOGI("isSoftwareCodec:%{public}d", cap->isSoftwareCodec);
206 HDF_LOGI("processModeMask:0x0%{public}x", cap->processModeMask);
207 HDF_LOGI("capsMask:0x0%{public}x", cap->capsMask);
208 HDF_LOGI("bitRate.min:%{public}d", cap->bitRate.min);
209 HDF_LOGI("bitRate.max:%{public}d", cap->bitRate.max);
210 if (strstr(cap->compName, "video") != NULL) {
211 HDF_LOGI("minSize.width:%{public}d", cap->port.video.minSize.width);
212 HDF_LOGI("minSize.height:%{public}d", cap->port.video.minSize.height);
213 HDF_LOGI("maxSize.width:%{public}d", cap->port.video.maxSize.width);
214 HDF_LOGI("maxSize.height:%{public}d", cap->port.video.maxSize.height);
215 HDF_LOGI("widthAlignment:%{public}d", cap->port.video.whAlignment.widthAlignment);
216 HDF_LOGI("heightAlignment:%{public}d", cap->port.video.whAlignment.heightAlignment);
217 HDF_LOGI("blockCount.min:%{public}d", cap->port.video.blockCount.min);
218 HDF_LOGI("blockCount.max:%{public}d", cap->port.video.blockCount.max);
219 HDF_LOGI("blocksPerSecond.min:%{public}d", cap->port.video.blocksPerSecond.min);
220 HDF_LOGI("blocksPerSecond.max:%{public}d", cap->port.video.blocksPerSecond.max);
221 HDF_LOGI("blockSize.width:%{public}d", cap->port.video.blockSize.width);
222 HDF_LOGI("blockSize.height:%{public}d", cap->port.video.blockSize.height);
223 HDF_LOGI("supportPixFmts:%{public}s", GetArrayStr(cap->port.video.supportPixFmts, PIX_FORMAT_NUM, 0));
224 } else {
225 HDF_LOGI(":%{public}s", GetArrayStr(cap->port.audio.sampleFormats, SAMPLE_FMT_NUM, AUDIO_SAMPLE_FMT_INVALID));
226 HDF_LOGI(":%{public}s", GetArrayStr(cap->port.audio.sampleRate, SAMPLE_RATE_NUM, AUD_SAMPLE_RATE_INVALID));
227 HDF_LOGI(":%{public}s", GetArrayStr(cap->port.audio.channelLayouts, CHANNEL_NUM, -1));
228 HDF_LOGI(":%{public}s", GetArrayStr(cap->port.audio.channelCount, CHANNEL_NUM, -1));
229 }
230 HDF_LOGI("-------------------------------------------------------------------");
231 }
232
233 /**
234 * @tc.name: HdfCodecHdiGetCodecComponentManagerTest_001
235 * @tc.desc: Get codec component manager test.
236 * @tc.type: FUNC
237 * @tc.require: issueI5HAII
238 */
239 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetCodecComponentManagerTest_001, TestSize.Level1)
240 {
241 g_manager = GetCodecComponentManager();
242 ASSERT_TRUE(g_manager != nullptr);
243 g_callback = CodecCallbackTypeGet(nullptr);
244 ASSERT_TRUE(g_callback != nullptr);
245 }
246
247 /**
248 * @tc.name: HdfCodecHdiGetComponentNumTest_001
249 * @tc.desc: Get codec component num test.
250 * @tc.type: FUNC
251 * @tc.require: issueI5HAII
252 */
253 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetComponentNumTest_001, TestSize.Level1)
254 {
255 ASSERT_TRUE(g_manager != nullptr);
256 g_count = g_manager->GetComponentNum();
257 ASSERT_GT(g_count, 0);
258 }
259
260 /**
261 * @tc.name: HdfCodecHdiGetComponentCapabilityListTest_001
262 * @tc.desc: Get codec component capability list test.
263 * @tc.type: FUNC
264 * @tc.require: issueI5HAII
265 */
266 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetComponentCapabilityListTest_001, TestSize.Level1)
267 {
268 ASSERT_GT(g_count, 0);
269 ASSERT_TRUE(g_manager != nullptr);
270 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * g_count);
271 ASSERT_TRUE(capList != nullptr);
272 g_manager->GetComponentCapabilityList(capList, g_count);
273 for (int32_t i = 0; i < g_count; i++) {
274 PrintCapability(&capList[i], i);
275 }
276 OsalMemFree(capList);
277 capList = nullptr;
278 }
279
280 // Test CreateComponent
281 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentCompNameErrorTest_001, TestSize.Level1)
282 {
283 ASSERT_TRUE(g_manager != nullptr);
284 ASSERT_TRUE(g_callback != nullptr);
285 char name[] = "test";
286 int32_t ret = g_manager->CreateComponent(&g_component, &g_componentId, (char *)name, APP_DATA, g_callback);
287 ASSERT_NE(ret, HDF_SUCCESS);
288 ASSERT_TRUE(g_component == nullptr);
289 }
290
291 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentCompNameNullptrTest_002, TestSize.Level1)
292 {
293 ASSERT_TRUE(g_manager != nullptr);
294 ASSERT_TRUE(g_callback != nullptr);
295 int32_t ret = g_manager->CreateComponent(&g_component, &g_componentId, nullptr, APP_DATA, g_callback);
296 ASSERT_NE(ret, HDF_SUCCESS);
297 ASSERT_TRUE(g_component == nullptr);
298 }
299
300 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentAppdataMaxTest_003, TestSize.Level1)
301 {
302 ASSERT_TRUE(g_manager != nullptr);
303 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
304 ASSERT_TRUE(callback != nullptr);
305 struct CodecComponentType *component = nullptr;
306 uint32_t componentId = 0;
307 int32_t ret =
308 g_manager->CreateComponent(&component, &componentId, const_cast<char *>(DECODER_AVC), APP_DATA_MAX, callback);
309 ASSERT_EQ(ret, HDF_SUCCESS);
310 ASSERT_TRUE(component != nullptr);
311 ret = g_manager->DestroyComponent(componentId);
312 ASSERT_EQ(ret, HDF_SUCCESS);
313 CodecCallbackTypeRelease(callback);
314 callback = nullptr;
315 }
316
317 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentAppdataMinTest_004, TestSize.Level1)
318 {
319 ASSERT_TRUE(g_manager != nullptr);
320 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
321 ASSERT_TRUE(callback != nullptr);
322 struct CodecComponentType *component = nullptr;
323 uint32_t componentId = 0;
324 int32_t ret =
325 g_manager->CreateComponent(&component, &componentId, const_cast<char *>(DECODER_AVC), APP_DATA_MIN, callback);
326 ASSERT_EQ(ret, HDF_SUCCESS);
327 ASSERT_TRUE(component != nullptr);
328 ret = g_manager->DestroyComponent(componentId);
329 ASSERT_EQ(ret, HDF_SUCCESS);
330 CodecCallbackTypeRelease(callback);
331 callback = nullptr;
332 }
333
334 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentCallbackIsNullptrTest_005, TestSize.Level1)
335 {
336 ASSERT_TRUE(g_manager != nullptr);
337 struct CodecCallbackType *callback = nullptr;
338 struct CodecComponentType *component = nullptr;
339 uint32_t componentId = 0;
340 int32_t ret =
341 g_manager->CreateComponent(&component, &componentId, const_cast<char *>(DECODER_AVC), APP_DATA, callback);
342 ASSERT_NE(ret, HDF_SUCCESS);
343 }
344
345 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCreateComponentSuccessTest_006, TestSize.Level1)
346 {
347 ASSERT_TRUE(g_manager != nullptr);
348 ASSERT_TRUE(g_callback != nullptr);
349 int32_t ret =
350 g_manager->CreateComponent(&g_component, &g_componentId, const_cast<char *>(ENCODER_AVC), APP_DATA, g_callback);
351 ASSERT_EQ(ret, HDF_SUCCESS);
352 ASSERT_TRUE(g_component != nullptr);
353 }
354
355 // Test GetComponentVersion Adapter not support
356 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetComponentVersionUnsupportedTest_001, TestSize.Level1)
357 {
358 ASSERT_TRUE(g_component != nullptr);
359 struct CompVerInfo verInfo;
360 int32_t ret = g_component->GetComponentVersion(g_component, &verInfo);
361 g_version = verInfo.compVersion;
362 ASSERT_NE(ret, HDF_SUCCESS);
363 }
364
365 // Test GetParameter
366 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetParameterParamStructNullptrTest_001, TestSize.Level1)
367 {
368 ASSERT_TRUE(g_component != nullptr);
369 auto ret = g_component->GetParameter(g_component, OMX_IndexParamVideoPortFormat, nullptr, 0);
370 ASSERT_NE(ret, HDF_SUCCESS);
371 }
372
373 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetParameterSuccessTest_002, TestSize.Level1)
374 {
375 ASSERT_TRUE(g_component != nullptr);
376 OMX_VIDEO_PARAM_PORTFORMATTYPE param;
377 InitParam(param);
378 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
379 param.eCompressionFormat = OMX_VIDEO_CodingAVC;
380 auto ret = g_component->GetParameter(
381 g_component, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), sizeof(param));
382 ASSERT_EQ(ret, HDF_SUCCESS);
383 }
384
385 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetParameterParamIndexNotMatchParamStructTest_003, TestSize.Level1)
386 {
387 ASSERT_TRUE(g_component != nullptr);
388 OMX_VIDEO_CONFIG_BITRATETYPE param;
389 InitParam(param);
390 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
391 auto ret = g_component->GetParameter(
392 g_component, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), sizeof(param));
393 ASSERT_NE(ret, HDF_SUCCESS);
394 }
395
396 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetParameterParamIndexUnusedTest_004, TestSize.Level1)
397 {
398 ASSERT_TRUE(g_component != nullptr);
399 OMX_VIDEO_CONFIG_BITRATETYPE param;
400 InitParam(param);
401 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
402 auto ret = g_component->GetParameter(
403 g_component, OMX_IndexVideoStartUnused, reinterpret_cast<int8_t *>(¶m), sizeof(param));
404 ASSERT_NE(ret, HDF_SUCCESS);
405 }
406
407 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterSuccessTest_001, TestSize.Level1)
408 {
409 ASSERT_TRUE(g_component != nullptr);
410 OMX_VIDEO_PARAM_PORTFORMATTYPE param;
411 InitParam(param);
412 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
413 int32_t ret = g_component->SetParameter(
414 g_component, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), sizeof(param));
415 ASSERT_EQ(ret, HDF_SUCCESS);
416 }
417
418 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterParamStructNullptrTest_002, TestSize.Level1)
419 {
420 ASSERT_TRUE(g_component != nullptr);
421 int32_t ret = g_component->SetParameter(g_component, OMX_IndexParamVideoPortFormat, nullptr, 0);
422 ASSERT_NE(ret, HDF_SUCCESS);
423 }
424
425 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterParamIndexNotMatchParamStructTest_003, TestSize.Level1)
426 {
427 ASSERT_TRUE(g_component != nullptr);
428 OMX_VIDEO_CONFIG_BITRATETYPE param;
429 InitParam(param);
430 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
431 int32_t ret = g_component->SetParameter(
432 g_component, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), sizeof(param));
433 ASSERT_NE(ret, HDF_SUCCESS);
434 }
435
436 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterParamIndexUnusedTest_004, TestSize.Level1)
437 {
438 ASSERT_TRUE(g_component != nullptr);
439 OMX_VIDEO_PARAM_PORTFORMATTYPE param;
440 InitParam(param);
441 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
442 int32_t ret = g_component->SetParameter(
443 g_component, OMX_IndexVideoStartUnused, reinterpret_cast<int8_t *>(¶m), sizeof(param));
444 ASSERT_NE(ret, HDF_SUCCESS);
445 }
446
447 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterCodecComponentTypeNullptrTest_005, TestSize.Level1)
448 {
449 ASSERT_TRUE(g_component != nullptr);
450 OMX_VIDEO_PARAM_PORTFORMATTYPE param;
451 InitParam(param);
452 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
453 int32_t ret = g_component->SetParameter(
454 nullptr, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), sizeof(param));
455 ASSERT_NE(ret, HDF_SUCCESS);
456 }
457
458 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetParameterParamStructLenNotMatchTest_006, TestSize.Level1)
459 {
460 ASSERT_TRUE(g_component != nullptr);
461 OMX_VIDEO_PARAM_PORTFORMATTYPE param;
462 InitParam(param);
463 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_INPUT;
464 int32_t ret =
465 g_component->SetParameter(g_component, OMX_IndexParamVideoPortFormat, reinterpret_cast<int8_t *>(¶m), 0);
466 ASSERT_NE(ret, HDF_SUCCESS);
467 }
468
469 // Test GetConfig Adapter not support
470 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetConfigUnsupportedTest_001, TestSize.Level1)
471 {
472 ASSERT_TRUE(g_component != nullptr);
473 OMX_VIDEO_CONFIG_BITRATETYPE param;
474 InitParam(param);
475 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_OUTPUT;
476 int32_t ret = g_component->GetConfig(
477 g_component, OMX_IndexConfigVideoBitrate, reinterpret_cast<int8_t *>(¶m), sizeof(param));
478 ASSERT_NE(ret, HDF_SUCCESS);
479 }
480
481 // Test SetConfig Adapter not support
482 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetConfigUnsupportedTest_001, TestSize.Level1)
483 {
484 ASSERT_TRUE(g_component != nullptr);
485 OMX_VIDEO_CONFIG_BITRATETYPE param;
486 InitParam(param);
487 param.nPortIndex = (uint32_t)PortIndex::PORT_INDEX_OUTPUT;
488 param.nEncodeBitrate = FRAMERATE;
489 int32_t ret = g_component->SetConfig(
490 g_component, OMX_IndexConfigVideoBitrate, reinterpret_cast<int8_t *>(¶m), sizeof(param));
491 ASSERT_NE(ret, HDF_SUCCESS);
492 }
493
494 // Test GetExtensionIndex Adapter not support
495 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetExtensionIndexUnsupportedTest_001, TestSize.Level1)
496 {
497 ASSERT_TRUE(g_component != nullptr);
498 OMX_INDEXTYPE indexType;
499 int32_t ret =
500 g_component->GetExtensionIndex(g_component, "OMX.Topaz.index.param.extended_video", (uint32_t *)&indexType);
501 ASSERT_NE(ret, HDF_SUCCESS);
502 }
503
504 // Test GetState
505 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetStateSuccessTest_001, TestSize.Level1)
506 {
507 ASSERT_TRUE(g_component != nullptr);
508 OMX_STATETYPE state;
509 int32_t ret = g_component->GetState(g_component, &state);
510 ASSERT_EQ(state, OMX_StateLoaded);
511 ASSERT_EQ(ret, HDF_SUCCESS);
512 }
513
514 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiGetStateStateNullptrTest_002, TestSize.Level1)
515 {
516 ASSERT_TRUE(g_component != nullptr);
517 int32_t ret = g_component->GetState(g_component, nullptr);
518 ASSERT_NE(ret, HDF_SUCCESS);
519 }
520
521 // Test ComponentTunnelRequest Adapter not support
522 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiTunnelRequestUnsupportedTest_001, TestSize.Level1)
523 {
524 ASSERT_TRUE(g_component != nullptr);
525 const int32_t tunneledComp = 1002;
526 const uint32_t tunneledPort = 101;
527 OMX_TUNNELSETUPTYPE tunnelSetup;
528 tunnelSetup.eSupplier = OMX_BufferSupplyInput;
529
530 int32_t ret = g_component->ComponentTunnelRequest(
531 g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, tunneledComp, tunneledPort, &tunnelSetup);
532 ASSERT_NE(ret, HDF_SUCCESS);
533 }
534
535 struct OmxCodecBuffer allocBuffer;
536 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferInvalidInputBufferTypeTest_001, TestSize.Level1)
537 {
538 ASSERT_TRUE(g_component != nullptr);
539 allocBuffer.bufferType = CODEC_BUFFER_TYPE_INVALID;
540 allocBuffer.fenceFd = -1;
541 allocBuffer.version = g_version;
542 allocBuffer.allocLen = BUFFER_SIZE;
543 allocBuffer.buffer = 0;
544 allocBuffer.bufferLen = 0;
545 allocBuffer.pts = 0;
546 allocBuffer.flag = 0;
547 allocBuffer.type = READ_ONLY_TYPE;
548 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, &allocBuffer);
549 ASSERT_NE(ret, HDF_SUCCESS);
550 }
551
552 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferInputBufferNotInitTest_002, TestSize.Level1)
553 {
554 ASSERT_TRUE(g_component != nullptr);
555 allocBuffer.bufferType = CODEC_BUFFER_TYPE_VIRTUAL_ADDR;
556 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, &allocBuffer);
557 ASSERT_NE(ret, HDF_SUCCESS);
558 }
559
560 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferInvalidOutputBufferTypeTest_003, TestSize.Level1)
561 {
562 ASSERT_TRUE(g_component != nullptr);
563 allocBuffer.bufferType = CODEC_BUFFER_TYPE_INVALID;
564 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, &allocBuffer);
565 ASSERT_NE(ret, HDF_SUCCESS);
566 }
567
568 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferOutputBufferNotInitTest_004, TestSize.Level1)
569 {
570 ASSERT_TRUE(g_component != nullptr);
571 allocBuffer.bufferType = CODEC_BUFFER_TYPE_VIRTUAL_ADDR;
572 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, &allocBuffer);
573 ASSERT_NE(ret, HDF_SUCCESS);
574 }
575
576 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferAvshareMemFdInputNotInitTest_005, TestSize.Level1)
577 {
578 ASSERT_TRUE(g_component != nullptr);
579 allocBuffer.bufferType = CODEC_BUFFER_TYPE_AVSHARE_MEM_FD;
580 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, &allocBuffer);
581 ASSERT_NE(ret, HDF_SUCCESS);
582 }
583
584 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiAllocateBufferAvshareMemFdOutputNotInitTest_006, TestSize.Level1)
585 {
586 ASSERT_TRUE(g_component != nullptr);
587 allocBuffer.bufferType = CODEC_BUFFER_TYPE_AVSHARE_MEM_FD;
588 int32_t ret = g_component->AllocateBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, &allocBuffer);
589 ASSERT_NE(ret, HDF_SUCCESS);
590 }
591
592 // Test UseBuffer
593 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferInvalidInputBufferTypeTest_001, TestSize.Level1)
594 {
595 ASSERT_TRUE(g_component != nullptr);
596 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
597 ASSERT_TRUE(omxBuffer != nullptr);
598 omxBuffer->size = sizeof(OmxCodecBuffer);
599 omxBuffer->version = g_version;
600 omxBuffer->bufferType = CODEC_BUFFER_TYPE_INVALID;
601 omxBuffer->bufferLen = 0;
602 omxBuffer->buffer = nullptr;
603 omxBuffer->allocLen = 0;
604 omxBuffer->fenceFd = -1;
605 omxBuffer->pts = 0;
606 omxBuffer->flag = 0;
607
608 auto err = g_component->UseBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, omxBuffer.get());
609 ASSERT_NE(err, HDF_SUCCESS);
610 }
611
612 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferInvalidOutputBufferTypeTest_002, TestSize.Level1)
613 {
614 ASSERT_TRUE(g_component != nullptr);
615 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
616 ASSERT_TRUE(omxBuffer != nullptr);
617 omxBuffer->size = sizeof(OmxCodecBuffer);
618 omxBuffer->version = g_version;
619 omxBuffer->bufferType = CODEC_BUFFER_TYPE_INVALID;
620 omxBuffer->bufferLen = 0;
621 omxBuffer->buffer = nullptr;
622 omxBuffer->allocLen = 0;
623 omxBuffer->fenceFd = -1;
624 omxBuffer->pts = 0;
625 omxBuffer->flag = 0;
626
627 auto err = g_component->UseBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, omxBuffer.get());
628 ASSERT_NE(err, HDF_SUCCESS);
629 }
630
631 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferTestVirtualAddrInputTest_003, TestSize.Level1)
632 {
633 ASSERT_TRUE(g_component != nullptr);
634 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
635 ASSERT_TRUE(omxBuffer != nullptr);
636 omxBuffer->size = sizeof(OmxCodecBuffer);
637 omxBuffer->version = g_version;
638 omxBuffer->bufferType = CODEC_BUFFER_TYPE_VIRTUAL_ADDR;
639 omxBuffer->bufferLen = 0;
640 omxBuffer->buffer = nullptr;
641 omxBuffer->allocLen = 0;
642 omxBuffer->fenceFd = -1;
643 omxBuffer->pts = 0;
644 omxBuffer->flag = 0;
645
646 auto err = g_component->UseBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, omxBuffer.get());
647 ASSERT_NE(err, HDF_SUCCESS);
648 }
649
650 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferTestVirtualAddrOutput_004, TestSize.Level1)
651 {
652 ASSERT_TRUE(g_component != nullptr);
653 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
654 ASSERT_TRUE(omxBuffer != nullptr);
655 omxBuffer->size = sizeof(OmxCodecBuffer);
656 omxBuffer->version = g_version;
657 omxBuffer->bufferType = CODEC_BUFFER_TYPE_VIRTUAL_ADDR;
658 omxBuffer->bufferLen = 0;
659 omxBuffer->buffer = nullptr;
660 omxBuffer->allocLen = 0;
661 omxBuffer->fenceFd = -1;
662 omxBuffer->pts = 0;
663 omxBuffer->flag = 0;
664
665 auto err = g_component->UseBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, omxBuffer.get());
666 ASSERT_NE(err, HDF_SUCCESS);
667 }
668
669 // Use buffer on input index
670 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferInputSuccessTest_005, TestSize.Level1)
671 {
672 ASSERT_TRUE(g_component != nullptr);
673 OMX_PARAM_PORTDEFINITIONTYPE param;
674 InitParam(param);
675 param.nPortIndex = (OMX_U32)PortIndex::PORT_INDEX_INPUT;
676 auto err = g_component->GetParameter(g_component, OMX_IndexParamPortDefinition, (int8_t *)¶m, sizeof(param));
677 ASSERT_EQ(err, HDF_SUCCESS);
678
679 int bufferSize = param.nBufferSize;
680 int bufferCount = param.nBufferCountActual;
681 bool ret = UseBufferOnPort(PortIndex::PORT_INDEX_INPUT, bufferCount, bufferSize);
682 ASSERT_TRUE(ret);
683 }
684
685 // Use Buffer on output index
686 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferOutputSuccessTest_006, TestSize.Level1)
687 {
688 ASSERT_TRUE(g_component != nullptr);
689 OMX_PARAM_PORTDEFINITIONTYPE param;
690 InitParam(param);
691 param.nPortIndex = (OMX_U32)PortIndex::PORT_INDEX_OUTPUT;
692 auto err = g_component->GetParameter(g_component, OMX_IndexParamPortDefinition, (int8_t *)¶m, sizeof(param));
693 ASSERT_EQ(err, HDF_SUCCESS);
694
695 int bufferSize = param.nBufferSize;
696 int bufferCount = param.nBufferCountActual;
697 bool ret = UseBufferOnPort(PortIndex::PORT_INDEX_OUTPUT, bufferCount, bufferSize);
698 ASSERT_TRUE(ret);
699 }
700
701 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferDynamicHandleOutputTest_007, TestSize.Level1)
702 {
703 ASSERT_TRUE(g_component != nullptr);
704 std::shared_ptr<OmxCodecBuffer> omxBuffer = std::make_shared<OmxCodecBuffer>();
705 ASSERT_TRUE(omxBuffer != nullptr);
706 omxBuffer->size = sizeof(OmxCodecBuffer);
707 omxBuffer->version = g_version;
708 omxBuffer->bufferType = CODEC_BUFFER_TYPE_DYNAMIC_HANDLE;
709
710 omxBuffer->bufferLen = 0;
711 omxBuffer->buffer = nullptr;
712 omxBuffer->allocLen = 0;
713 omxBuffer->fenceFd = -1;
714 omxBuffer->pts = 0;
715 omxBuffer->flag = 0;
716
717 auto err = g_component->UseBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, omxBuffer.get());
718 if (err != HDF_SUCCESS) {
719 HDF_LOGE("%{public}s failed to UseBuffer with input port", __func__);
720 omxBuffer = nullptr;
721 }
722 ASSERT_NE(err, HDF_SUCCESS);
723 }
724
725 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseBufferAbnormalPortIndexTest_008, TestSize.Level1)
726 {
727 ASSERT_TRUE(g_component != nullptr);
728 OMX_PARAM_PORTDEFINITIONTYPE param;
729 InitParam(param);
730 param.nPortIndex = (OMX_U32)PortIndex::PORT_INDEX_INPUT;
731 auto err = g_component->GetParameter(g_component, OMX_IndexParamPortDefinition, (int8_t *)¶m, sizeof(param));
732 ASSERT_EQ(err, HDF_SUCCESS);
733
734 int bufferSize = param.nBufferSize;
735 int bufferCount = param.nBufferCountActual;
736 bool ret = UseBufferOnPort(PortIndex::PORT_INDEX_ERROR_INPUT, bufferCount, bufferSize);
737 ASSERT_FALSE(ret);
738 }
739
740 // Test SendCommand
741 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetStateLoadedToIdleTest_001, TestSize.Level1)
742 {
743 ASSERT_TRUE(g_component != nullptr);
744 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StateIdle, nullptr, 0);
745 ASSERT_EQ(ret, HDF_SUCCESS);
746 }
747
748 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetStateIdleToExecutingTest_002, TestSize.Level1)
749 {
750 ASSERT_TRUE(g_component != nullptr);
751 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StateExecuting, nullptr, 0);
752 ASSERT_EQ(ret, HDF_SUCCESS);
753 }
754
755 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetStateExecutingToPauseTest_003, TestSize.Level1)
756 {
757 ASSERT_TRUE(g_component != nullptr);
758 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StatePause, nullptr, 0);
759 ASSERT_EQ(ret, HDF_SUCCESS);
760 }
761
762 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetStatePauseToIdleTest_004, TestSize.Level1)
763 {
764 ASSERT_TRUE(g_component != nullptr);
765 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StateIdle, nullptr, 0);
766 ASSERT_EQ(ret, HDF_SUCCESS);
767
768 OMX_STATETYPE state;
769 ret = g_component->GetState(g_component, &state);
770 ASSERT_EQ(ret, HDF_SUCCESS);
771 }
772
773 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSendCommandCodecComponentTypeNullptrTest_005, TestSize.Level1)
774 {
775 ASSERT_TRUE(g_component != nullptr);
776 int32_t ret = g_component->SendCommand(nullptr, OMX_CommandStateSet, OMX_StateIdle, nullptr, 0);
777 ASSERT_NE(ret, HDF_SUCCESS);
778 }
779
780 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSendCommandAbnormalCommandTest_006, TestSize.Level1)
781 {
782 ASSERT_TRUE(g_component != nullptr);
783 int32_t ret = g_component->SendCommand(g_component, OMX_CommandMax, OMX_StatePause, nullptr, 0);
784 ASSERT_NE(ret, HDF_SUCCESS);
785 }
786
787 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSendCommandAbnormalParamTest_007, TestSize.Level1)
788 {
789 ASSERT_TRUE(g_component != nullptr);
790 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StateMax, nullptr, 0);
791 ASSERT_NE(ret, HDF_SUCCESS);
792 }
793
794 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiUseEglImageUnsupportedTest_001, TestSize.Level1)
795 {
796 ASSERT_TRUE(g_component != nullptr);
797 struct OmxCodecBuffer buffer;
798 buffer.fenceFd = -1;
799 buffer.version = g_version;
800 buffer.bufferType = CODEC_BUFFER_TYPE_AVSHARE_MEM_FD;
801 buffer.allocLen = BUFFER_SIZE;
802 buffer.buffer = 0;
803 buffer.bufferLen = 0;
804 buffer.pts = 0;
805 buffer.flag = 0;
806 buffer.type = READ_ONLY_TYPE;
807 auto eglImage = std::make_unique<int8_t[]>(BUFFER_SIZE);
808 ASSERT_TRUE(eglImage != nullptr);
809 int32_t ret = g_component->UseEglImage(
810 g_component, &buffer, (uint32_t)PortIndex::PORT_INDEX_INPUT, eglImage.get(), BUFFER_SIZE);
811 ASSERT_NE(ret, HDF_SUCCESS);
812 eglImage = nullptr;
813 }
814
815 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiWaitStateIdleTest_001, TestSize.Level1)
816 {
817 ASSERT_TRUE(g_component != nullptr);
818 // wait for Idle status
819 OMX_STATETYPE state = OMX_StateInvalid;
820 do {
821 usleep(100);
822 auto ret = g_component->GetState(g_component, &state);
823 ASSERT_EQ(ret, HDF_SUCCESS);
824 } while (state != OMX_StateIdle);
825 }
826
827 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiFillThisBufferSuccessTest_001, TestSize.Level1)
828 {
829 ASSERT_TRUE(g_component != nullptr);
830 auto iter = outputBuffers.begin();
831 if (iter != outputBuffers.end()) {
832 int32_t ret = g_component->FillThisBuffer(g_component, iter->second->omxBuffer.get());
833 ASSERT_EQ(ret, HDF_SUCCESS);
834 }
835 }
836
837 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiFillThisBufferUseErrorBufferIdTest_002, TestSize.Level1)
838 {
839 ASSERT_TRUE(g_component != nullptr);
840 auto iter = outputBuffers.begin();
841 if (iter != outputBuffers.end()) {
842 auto omxBuffer = iter->second->omxBuffer;
843 auto tempId = omxBuffer->bufferId;
844 omxBuffer->bufferId = BUFFER_ID_ERROR;
845 int32_t ret = g_component->FillThisBuffer(g_component, omxBuffer.get());
846 ASSERT_NE(ret, HDF_SUCCESS);
847 omxBuffer->bufferId = tempId;
848 }
849 }
850
851 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiEmptyThisBufferSuccessTest_001, TestSize.Level1)
852 {
853 ASSERT_TRUE(g_component != nullptr);
854 auto iter = inputBuffers.begin();
855 if (iter != inputBuffers.end()) {
856 int32_t ret = g_component->EmptyThisBuffer(g_component, iter->second->omxBuffer.get());
857 ASSERT_EQ(ret, HDF_SUCCESS);
858 }
859 }
860
861 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiEmptyThisBufferUseErrorBufferIdTest_002, TestSize.Level1)
862 {
863 ASSERT_TRUE(g_component != nullptr);
864 auto iter = inputBuffers.begin();
865 if (iter != inputBuffers.end()) {
866 auto omxBuffer = iter->second->omxBuffer;
867 auto tempId = omxBuffer->bufferId;
868 omxBuffer->bufferId = BUFFER_ID_ERROR;
869 int32_t ret = g_component->EmptyThisBuffer(g_component, iter->second->omxBuffer.get());
870 ASSERT_NE(ret, HDF_SUCCESS);
871 omxBuffer->bufferId = tempId;
872 }
873 }
874
875 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetCallbackSuccessTest_001, TestSize.Level1)
876 {
877 ASSERT_TRUE(g_component != nullptr);
878 if (g_callback != nullptr) {
879 CodecCallbackTypeRelease(g_callback);
880 }
881 g_callback = CodecCallbackTypeGet(nullptr);
882 ASSERT_TRUE(g_callback != nullptr);
883 int32_t ret = g_component->SetCallbacks(g_component, g_callback, APP_DATA);
884 ASSERT_EQ(ret, HDF_SUCCESS);
885 }
886
887 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetCallbackAppDataLenMaxTest_002, TestSize.Level1)
888 {
889 ASSERT_TRUE(g_component != nullptr);
890 if (g_callback != nullptr) {
891 CodecCallbackTypeRelease(g_callback);
892 }
893 g_callback = CodecCallbackTypeGet(nullptr);
894 ASSERT_TRUE(g_callback != nullptr);
895 int32_t ret = g_component->SetCallbacks(g_component, g_callback, APP_DATA_MAX);
896 ASSERT_EQ(ret, HDF_SUCCESS);
897 }
898
899 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetCallbackAppDataLenMinTest_003, TestSize.Level1)
900 {
901 ASSERT_TRUE(g_component != nullptr);
902 if (g_callback != nullptr) {
903 CodecCallbackTypeRelease(g_callback);
904 }
905 g_callback = CodecCallbackTypeGet(nullptr);
906 ASSERT_TRUE(g_callback != nullptr);
907 int32_t ret = g_component->SetCallbacks(g_component, g_callback, APP_DATA_MIN);
908 ASSERT_EQ(ret, HDF_SUCCESS);
909 }
910
911 // Test ComponentRoleEnum Adapter not support
912 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiRoleEnumUnsupportedTest_001, TestSize.Level1)
913 {
914 ASSERT_TRUE(g_component != nullptr);
915 uint8_t role[ROLE_LEN] = {0};
916 int32_t ret = g_component->ComponentRoleEnum(g_component, role, ROLE_LEN, 0);
917 ASSERT_NE(ret, HDF_SUCCESS);
918 }
919
920 // Test FreeBuffer Adapter not support
921 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiFreeBufferPortIndexOutputUnsupportedTest_001, TestSize.Level1)
922 {
923 ASSERT_TRUE(g_component != nullptr);
924 auto iter = outputBuffers.begin();
925 while (iter != outputBuffers.end()) {
926 int32_t ret =
927 g_component->FreeBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_OUTPUT, iter->second->omxBuffer.get());
928 ASSERT_NE(ret, HDF_SUCCESS);
929 iter = outputBuffers.erase(iter);
930 }
931 }
932
933 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiFreeBufferPortIndexInputUnsupportedTest_002, TestSize.Level1)
934 {
935 ASSERT_TRUE(g_component != nullptr);
936 auto iter = inputBuffers.begin();
937 while (iter != inputBuffers.end()) {
938 int32_t ret =
939 g_component->FreeBuffer(g_component, (uint32_t)PortIndex::PORT_INDEX_INPUT, iter->second->omxBuffer.get());
940 ASSERT_NE(ret, HDF_SUCCESS);
941 iter = inputBuffers.erase(iter);
942 }
943 }
944
945 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiSetStateIdleToLoadedTest_001, TestSize.Level1)
946 {
947 ASSERT_TRUE(g_component != nullptr);
948 int32_t ret = g_component->SendCommand(g_component, OMX_CommandStateSet, OMX_StateLoaded, nullptr, 0);
949 ASSERT_EQ(ret, HDF_SUCCESS);
950
951 OMX_STATETYPE state = OMX_StateInvalid;
952 do {
953 usleep(100);
954 auto ret = g_component->GetState(g_component, &state);
955 ASSERT_EQ(ret, HDF_SUCCESS);
956 } while (state != OMX_StateLoaded);
957 }
958
959 // Test ComponentDeInit Adapter not support
960 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiDeInitUnsupportedTest_001, TestSize.Level1)
961 {
962 ASSERT_TRUE(g_component != nullptr);
963 int32_t ret = g_component->ComponentDeInit(g_component);
964 ASSERT_NE(ret, HDF_SUCCESS);
965 }
966
967 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiDestoryComponentSuccessTest_001, TestSize.Level1)
968 {
969 ASSERT_TRUE(g_component != nullptr);
970 ASSERT_TRUE(g_manager != nullptr);
971 int ret = g_manager->DestroyComponent(g_componentId);
972 ASSERT_EQ(ret, HDF_SUCCESS);
973 }
974
975 HWTEST_F(CodecHdiAdapterTest, HdfCodecHdiCallbackTypeReleaseAndManagerReleaseTest_001, TestSize.Level1)
976 {
977 ASSERT_TRUE(g_manager != nullptr);
978 ASSERT_TRUE(g_callback != nullptr);
979 CodecCallbackTypeRelease(g_callback);
980 CodecComponentManagerRelease();
981 g_callback = nullptr;
982 g_manager = nullptr;
983 }
984 } // namespace
985