1 /*
2 * Copyright (c) 2023-2024 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 #include "codec_callback_if.h"
16 #include "codec_component_manager.h"
17 #include <gtest/gtest.h>
18 #include <osal_mem.h>
19 using namespace std;
20 using namespace testing::ext;
21 namespace {
22 class CodecHdiManagerTestAdditional : public testing::Test {
23 public:
SetUpTestCase()24 static void SetUpTestCase() {}
TearDownTestCase()25 static void TearDownTestCase() {}
SetUp()26 void SetUp() { manager_ = GetCodecComponentManager(); }
TearDown()27 void TearDown()
28 {
29 CodecComponentManagerRelease();
30 manager_ = nullptr;
31 }
32
33 public:
34 struct CodecComponentManager *manager_ = nullptr;
35 };
36
37 /**
38 * @tc.number SUB_Driver_Codec_CodecHdi_0600
39 * @tc.name testCodecGetComponentNum001
40 * @tc.desc Determines whether the function gets the param correctly
41 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentNum001, Function | MediumTest | Level1)42 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentNum001, Function | MediumTest | Level1)
43 {
44 ASSERT_TRUE(manager_ != nullptr);
45 auto count = -1;
46 count = manager_->GetComponentNum();
47 EXPECT_TRUE(count >= 0);
48 }
49
50 /**
51 * @tc.number SUB_Driver_Codec_CodecHdi_0700
52 * @tc.name testCodecGetComponentCapabilityList001
53 * @tc.desc Determine whether the function can obtain the correct value if there are existing values in the structure
54 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList001, Function | MediumTest | Level1)55 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList001, Function | MediumTest | Level1)
56 {
57 ASSERT_TRUE(manager_ != nullptr);
58 auto count = manager_->GetComponentNum();
59 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
60 ASSERT_TRUE(capList != nullptr);
61 capList->role = MEDIA_ROLETYPE_INVALID;
62 auto err = manager_->GetComponentCapabilityList(capList, count);
63 EXPECT_EQ(err, HDF_SUCCESS);
64 }
65
66 /**
67 * @tc.number SUB_Driver_Codec_CodecHdi_0800
68 * @tc.name testCodecGetComponentCapabilityList002
69 * @tc.desc Determine whether the function can obtain the correct value if there are existing values in the structure
70 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList002, Function | MediumTest | Level1)71 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList002, Function | MediumTest | Level1)
72 {
73 ASSERT_TRUE(manager_ != nullptr);
74 auto count = manager_->GetComponentNum();
75 ASSERT_TRUE(count > 0);
76 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
77 ASSERT_TRUE(capList != nullptr);
78 capList->role = MEDIA_ROLETYPE_IMAGE_JPEG;
79 auto err = manager_->GetComponentCapabilityList(capList, count);
80 EXPECT_EQ(err, HDF_SUCCESS);
81 }
82
83 /**
84 * @tc.number SUB_Driver_Codec_CodecHdi_0900
85 * @tc.name testCodecGetComponentCapabilityList003
86 * @tc.desc Determine whether the function can obtain the correct value if there are existing values in the structure
87 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList003, Function | MediumTest | Level1)88 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList003, Function | MediumTest | Level1)
89 {
90 ASSERT_TRUE(manager_ != nullptr);
91 auto count = manager_->GetComponentNum();
92 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
93 ASSERT_TRUE(capList != nullptr);
94 capList->type = INVALID_TYPE;
95 auto err = manager_->GetComponentCapabilityList(capList, count);
96 EXPECT_EQ(err, HDF_SUCCESS);
97 }
98
99 /**
100 * @tc.number SUB_Driver_Codec_CodecHdi_1000
101 * @tc.name testCodecGetComponentCapabilityList004
102 * @tc.desc Determine whether the function can obtain the correct value if there are existing values in the structure
103 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList004, Function | MediumTest | Level1)104 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList004, Function | MediumTest | Level1)
105 {
106 ASSERT_TRUE(manager_ != nullptr);
107 auto count = manager_->GetComponentNum();
108 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
109 ASSERT_TRUE(capList != nullptr);
110 capList->maxInst = -1;
111 auto err = manager_->GetComponentCapabilityList(capList, count);
112 EXPECT_EQ(err, HDF_SUCCESS);
113 }
114
115 /**
116 * @tc.number SUB_Driver_Codec_CodecHdi_1100
117 * @tc.name testCodecGetComponentCapabilityList005
118 * @tc.desc Determine whether the function can obtain the correct value if there are existing values in the structure
119 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList005, Function | MediumTest | Level1)120 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList005, Function | MediumTest | Level1)
121 {
122 ASSERT_TRUE(manager_ != nullptr);
123 auto count = manager_->GetComponentNum();
124 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
125 ASSERT_TRUE(capList != nullptr);
126 capList->capsMask = -1;
127 auto err = manager_->GetComponentCapabilityList(capList, count);
128 EXPECT_EQ(err, HDF_SUCCESS);
129 }
130
131 /**
132 * @tc.number SUB_Driver_Codec_CodecHdi_1200
133 * @tc.name testCodecGetComponentCapabilityList006
134 * @tc.desc When the number of codec components is negative, the validity of the function is judged
135 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList006, Function | MediumTest | Level2)136 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList006, Function | MediumTest | Level2)
137 {
138 ASSERT_TRUE(manager_ != nullptr);
139 int count = -1;
140 CodecCompCapability *capList =
141 (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * (manager_->GetComponentNum()));
142 ASSERT_TRUE(capList != nullptr);
143 auto err = manager_->GetComponentCapabilityList(capList, count);
144 EXPECT_NE(err, HDF_SUCCESS);
145 }
146
147 /**
148 * @tc.number SUB_Driver_Codec_CodecHdi_1300
149 * @tc.name testCodecCreateComponent001
150 * @tc.desc When the parameter passed by the function already has a value, determine whether it will have an effect
151 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent001, Function | MediumTest | Level1)152 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent001, Function | MediumTest | Level1)
153 {
154 ASSERT_TRUE(manager_ != nullptr);
155 std::string compName("");
156 auto count = manager_->GetComponentNum();
157 ASSERT_TRUE(count > 0);
158 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
159 ASSERT_TRUE(capList != nullptr);
160 auto err = manager_->GetComponentCapabilityList(capList, count);
161 ASSERT_TRUE(err == HDF_SUCCESS);
162 compName = capList[0].compName;
163 OsalMemFree(capList);
164 capList = nullptr;
165
166 ASSERT_FALSE(compName.empty());
167 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
168 struct CodecComponentType *component = nullptr;
169 uint32_t componentId = -1;
170 ASSERT_TRUE(callback != nullptr);
171
172 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
173 EXPECT_EQ(ret, HDF_SUCCESS);
174 CodecCallbackTypeRelease(callback);
175 }
176
177 /**
178 * @tc.number SUB_Driver_Codec_CodecHdi_1400
179 * @tc.name testCodecCreateComponent002
180 * @tc.desc Open the OpenMax component based on a non-existent compName
181 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent002, Function | MediumTest | Level2)182 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent002, Function | MediumTest | Level2)
183 {
184 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
185 ASSERT_TRUE(callback != nullptr);
186 ASSERT_TRUE(manager_ != nullptr);
187 std::string compName(" ");
188 struct CodecComponentType *component = nullptr;
189 uint32_t componentId = 0;
190 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
191 EXPECT_NE(ret, HDF_SUCCESS);
192 EXPECT_EQ(component, nullptr);
193 CodecCallbackTypeRelease(callback);
194 }
195
196 /**
197 * @tc.number SUB_Driver_Codec_CodecHdi_1500
198 * @tc.name testCodecCreateComponent003
199 * @tc.desc Open the OpenMax component based on a non-existent compName
200 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent003, Function | MediumTest | Level2)201 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent003, Function | MediumTest | Level2)
202 {
203 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
204 ASSERT_TRUE(callback != nullptr);
205 ASSERT_TRUE(manager_ != nullptr);
206 std::string compName("//\a");
207 struct CodecComponentType *component = nullptr;
208 uint32_t componentId = 0;
209 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
210 EXPECT_NE(ret, HDF_SUCCESS);
211 EXPECT_EQ(component, nullptr);
212 CodecCallbackTypeRelease(callback);
213 }
214
215 /**
216 * @tc.number SUB_Driver_Codec_CodecHdi_1600
217 * @tc.name testCodecCreateComponent004
218 * @tc.desc Open the OpenMax component based on a non-existent compName
219 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent004, Function | MediumTest | Level2)220 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent004, Function | MediumTest | Level2)
221 {
222 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
223 ASSERT_TRUE(callback != nullptr);
224 ASSERT_TRUE(manager_ != nullptr);
225 std::string compName("a,,");
226 struct CodecComponentType *component = nullptr;
227 uint32_t componentId = 0;
228 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
229 EXPECT_NE(ret, HDF_SUCCESS);
230 EXPECT_EQ(component, nullptr);
231 CodecCallbackTypeRelease(callback);
232 }
233
234 /**
235 * @tc.number SUB_Driver_Codec_CodecHdi_1700
236 * @tc.name testCodecCreateComponent005
237 * @tc.desc Open the OpenMax component based on a non-existent compName
238 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent005, Function | MediumTest | Level2)239 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent005, Function | MediumTest | Level2)
240 {
241 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
242 ASSERT_TRUE(callback != nullptr);
243 ASSERT_TRUE(manager_ != nullptr);
244 std::string compName("12344");
245 struct CodecComponentType *component = nullptr;
246 uint32_t componentId = 0;
247 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
248 EXPECT_NE(ret, HDF_SUCCESS);
249 EXPECT_EQ(component, nullptr);
250 CodecCallbackTypeRelease(callback);
251 }
252
253 /**
254 * @tc.number SUB_Driver_Codec_CodecHdi_1800
255 * @tc.name testCodecCreateComponent006
256 * @tc.desc Open the OpenMax component based on a non-existent compName
257 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent006, Function | MediumTest | Level1)258 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent006, Function | MediumTest | Level1)
259 {
260 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
261 ASSERT_TRUE(callback != nullptr);
262 ASSERT_TRUE(manager_ != nullptr);
263 std::string compName("a@%");
264 struct CodecComponentType *component = nullptr;
265 uint32_t componentId = 0;
266 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
267 EXPECT_NE(ret, HDF_SUCCESS);
268 EXPECT_EQ(component, nullptr);
269 CodecCallbackTypeRelease(callback);
270 }
271
272 /**
273 * @tc.number SUB_Driver_Codec_CodecHdi_1900
274 * @tc.name testCodecCreateComponent007
275 * @tc.desc Open the OpenMax component based on a non-existent compName
276 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent007, Function | MediumTest | Level2)277 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent007, Function | MediumTest | Level2)
278 {
279 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
280 ASSERT_TRUE(callback != nullptr);
281 ASSERT_TRUE(manager_ != nullptr);
282 std::string compName("a~~~");
283 struct CodecComponentType *component = nullptr;
284 uint32_t componentId = 0;
285 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
286 EXPECT_NE(ret, HDF_SUCCESS);
287 EXPECT_EQ(component, nullptr);
288 CodecCallbackTypeRelease(callback);
289 }
290
291 /**
292 * @tc.number SUB_Driver_Codec_CodecHdi_2000
293 * @tc.name testCodecCreateComponent008
294 * @tc.desc Open the OpenMax component based on a non-existent compName
295 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent008, Function | MediumTest | Level2)296 HWTEST_F(CodecHdiManagerTestAdditional, testCodecCreateComponent008, Function | MediumTest | Level2)
297 {
298 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
299 ASSERT_TRUE(callback != nullptr);
300 ASSERT_TRUE(manager_ != nullptr);
301 std::string compName("a~~~");
302 struct CodecComponentType *component = nullptr;
303 uint32_t componentId = 0;
304 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
305 EXPECT_NE(ret, HDF_SUCCESS);
306 EXPECT_EQ(component, nullptr);
307 CodecCallbackTypeRelease(callback);
308 }
309
310 /**
311 * @tc.number SUB_Driver_Codec_CodecHdi_2100
312 * @tc.name testCodecDestroyComponent001
313 * @tc.desc Test its stability by iterating through the DestroyComponent function
314 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent001, Function | MediumTest | Level1)315 HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent001, Function | MediumTest | Level1)
316 {
317 ASSERT_TRUE(manager_ != nullptr);
318 uint32_t componentId = 0;
319 int32_t ret;
320 int i = 0;
321 while (i < 50) {
322 ret = manager_->DestroyComponent(componentId);
323 ASSERT_EQ(ret, HDF_SUCCESS);
324 i++;
325 }
326 }
327
328 /**
329 * @tc.number SUB_Driver_Codec_CodecHdi_2200
330 * @tc.name testCodecDestroyComponent002
331 * @tc.desc Open the OpenMax component based on a non-existent compName
332 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent002, Function | MediumTest | Level1)333 HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent002, Function | MediumTest | Level1)
334 {
335 ASSERT_TRUE(manager_ != nullptr);
336 uint32_t componentId = -1;
337 int32_t ret = manager_->DestroyComponent(componentId);
338 ASSERT_EQ(ret, HDF_SUCCESS);
339 }
340
341 /**
342 * @tc.number SUB_Driver_Codec_CodecHdi_2300
343 * @tc.name testCodecGetComponentCapabilityList007
344 * @tc.desc Verify when GetComponentCapabilityList function into the parameter to 0,
345 * the second result returned failure
346 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList007, Function | MediumTest | Level2)347 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList007, Function | MediumTest | Level2)
348 {
349 ASSERT_TRUE(manager_ != nullptr);
350 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * 0);
351 auto err = manager_->GetComponentCapabilityList(capList, 0);
352 EXPECT_NE(err, HDF_SUCCESS);
353 }
354
355 /**
356 * @tc.number SUB_Driver_Codec_CodecHdi_2400
357 * @tc.name testCodecGetComponentCapabilityList008
358 * @tc.desc Verify when GetComponentCapabilityList function into the parameter to 100000,
359 * the second result returned failure
360 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList008, Function | MediumTest | Level2)361 HWTEST_F(CodecHdiManagerTestAdditional, testCodecGetComponentCapabilityList008, Function | MediumTest | Level2)
362 {
363 ASSERT_TRUE(manager_ != nullptr);
364 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * 100000);
365 auto err = manager_->GetComponentCapabilityList(capList, 100000);
366 EXPECT_NE(err, HDF_SUCCESS);
367 }
368
369 /**
370 * @tc.number SUB_Driver_Codec_CodecHdi_2500
371 * @tc.name testCodecDestroyComponent003
372 * @tc.desc Verify that the DestroyComponent function returns success when the CreateComponent
373 * function returns success
374 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent003, Function | MediumTest | Level1)375 HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent003, Function | MediumTest | Level1)
376 {
377 ASSERT_TRUE(manager_ != nullptr);
378 std::string compName("");
379 auto count = manager_->GetComponentNum();
380 ASSERT_TRUE(count > 0);
381 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
382 ASSERT_TRUE(capList != nullptr);
383 auto err = manager_->GetComponentCapabilityList(capList, count);
384 ASSERT_TRUE(err == HDF_SUCCESS);
385 compName = capList[0].compName;
386 OsalMemFree(capList);
387 capList = nullptr;
388
389 ASSERT_FALSE(compName.empty());
390 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
391 struct CodecComponentType *component = nullptr;
392 uint32_t componentId = 1;
393 ASSERT_TRUE(callback != nullptr);
394
395 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
396 EXPECT_EQ(ret, HDF_SUCCESS);
397 EXPECT_EQ(manager_->DestroyComponent(componentId), 0);
398
399 CodecCallbackTypeRelease(callback);
400 }
401
402 /**
403 * @tc.number SUB_Driver_Codec_CodecHdi_2600
404 * @tc.name testCodecDestroyComponent004
405 * @tc.desc Verify that a failure is returned when the CreateComponent function returns success and the entry of the
406 * DestroyComponent function is 1000, the second entry of the CreateComponent function
407 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent004, Function | MediumTest | Level1)408 HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent004, Function | MediumTest | Level1)
409 {
410 ASSERT_TRUE(manager_ != nullptr);
411 std::string compName("");
412 auto count = manager_->GetComponentNum();
413 ASSERT_TRUE(count > 0);
414 CodecCompCapability *capList = (CodecCompCapability *)OsalMemAlloc(sizeof(CodecCompCapability) * count);
415 ASSERT_TRUE(capList != nullptr);
416 auto err = manager_->GetComponentCapabilityList(capList, count);
417 ASSERT_TRUE(err == HDF_SUCCESS);
418 compName = capList[0].compName;
419 OsalMemFree(capList);
420 capList = nullptr;
421
422 ASSERT_FALSE(compName.empty());
423 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
424 struct CodecComponentType *component = nullptr;
425 uint32_t componentId = 1;
426 ASSERT_TRUE(callback != nullptr);
427
428 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
429 EXPECT_EQ(ret, HDF_SUCCESS);
430 componentId = 1000;
431 EXPECT_EQ(manager_->DestroyComponent(componentId), 0);
432
433 CodecCallbackTypeRelease(callback);
434 }
435
436 /**
437 * @tc.number SUB_Driver_Codec_CodecHdi_2700
438 * @tc.name testCodecDestroyComponent005
439 * @tc.desc Verify that the DestroyComponent result returns a failure when the CreateComponent
440 * function returns a failure
441 */
HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent005, Function | MediumTest | Level1)442 HWTEST_F(CodecHdiManagerTestAdditional, testCodecDestroyComponent005, Function | MediumTest | Level1)
443 {
444 struct CodecCallbackType *callback = CodecCallbackTypeGet(nullptr);
445 ASSERT_TRUE(callback != nullptr);
446 ASSERT_TRUE(manager_ != nullptr);
447 std::string compName(" ");
448 struct CodecComponentType *component = nullptr;
449 uint32_t componentId = 1000;
450 int32_t ret = manager_->CreateComponent(&component, &componentId, compName.data(), (int64_t)this, callback);
451 EXPECT_NE(ret, HDF_SUCCESS);
452
453 EXPECT_EQ(manager_->DestroyComponent(componentId), 0);
454 CodecCallbackTypeRelease(callback);
455 }
456 } // namespace
457