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