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 <string>
17 #include "gtest/gtest.h"
18 #include "AudioEncoderDemoCommon.h"
19 #include "avcodec_info.h"
20 #include "avcodec_errors.h"
21 #include "media_description.h"
22 #include "av_common.h"
23 #include "meta/format.h"
24 #include "avcodec_audio_common.h"
25
26 using namespace std;
27 using namespace testing::ext;
28 using namespace OHOS;
29 using namespace OHOS::MediaAVCodec;
30 constexpr uint32_t SAMPLE_RATE_44100 = 44100;
31 constexpr int64_t BIT_RATE_112000 = 112000;
32
33 namespace {
34 class InnerParamCheckTest : public testing::Test {
35 public:
36 static void SetUpTestCase();
37 static void TearDownTestCase();
38 void SetUp() override;
39 void TearDown() override;
40 };
41
SetUpTestCase()42 void InnerParamCheckTest::SetUpTestCase() {}
TearDownTestCase()43 void InnerParamCheckTest::TearDownTestCase() {}
SetUp()44 void InnerParamCheckTest::SetUp() {}
TearDown()45 void InnerParamCheckTest::TearDown() {}
46 } // namespace
47
48 /**
49 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_001
50 * @tc.name : InnerCreateByMime
51 * @tc.desc : param check test
52 */
53 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_001, TestSize.Level2)
54 {
55 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
56
57 int32_t ret = encoderDemo->InnerCreateByMime("audio/mp4a-latm");
58 ASSERT_EQ(AVCS_ERR_OK, ret);
59 encoderDemo->InnerDestroy();
60
61 ret = encoderDemo->InnerCreateByMime("audio/flac");
62 ASSERT_EQ(AVCS_ERR_OK, ret);
63 encoderDemo->InnerDestroy();
64
65 ret = encoderDemo->InnerCreateByMime("aaa");
66 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION, ret);
67 encoderDemo->InnerDestroy();
68
69 delete encoderDemo;
70 }
71
72 /**
73 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_002
74 * @tc.name : InnerCreateByName
75 * @tc.desc : param check test
76 */
77 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_002, TestSize.Level2)
78 {
79 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
80
81 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
82 ASSERT_EQ(AVCS_ERR_OK, ret);
83 encoderDemo->InnerDestroy();
84
85 ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.Flac");
86 ASSERT_EQ(AVCS_ERR_OK, ret);
87 encoderDemo->InnerDestroy();
88
89 ret = encoderDemo->InnerCreateByName("aaa");
90 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION, ret);
91 encoderDemo->InnerDestroy();
92
93 delete encoderDemo;
94 }
95
96 /**
97 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_003
98 * @tc.name : InnerConfigure - MD_KEY_BITRATE
99 * @tc.desc : param check test
100 */
101 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_003, TestSize.Level2)
102 {
103 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
104
105 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
106 ASSERT_EQ(AVCS_ERR_OK, ret);
107 Format audioParams;
108
109 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
110 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
111 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
112 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
113 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
114 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
115 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
116
117 ret = encoderDemo->InnerConfigure(audioParams);
118 ASSERT_EQ(AVCS_ERR_OK, ret);
119
120 encoderDemo->InnerReset();
121 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, -1);
122 ret = encoderDemo->InnerConfigure(audioParams);
123 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
124
125 encoderDemo->InnerReset();
126 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_BITRATE, 0.1);
127 ret = encoderDemo->InnerConfigure(audioParams);
128 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
129
130 encoderDemo->InnerReset();
131 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_BITRATE, 0.1);
132 ret = encoderDemo->InnerConfigure(audioParams);
133 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
134
135 encoderDemo->InnerReset();
136 uint8_t b[100];
137 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_BITRATE, b, 100);
138 ret = encoderDemo->InnerConfigure(audioParams);
139 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
140
141 encoderDemo->InnerDestroy();
142 delete encoderDemo;
143 }
144
145 /**
146 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_004
147 * @tc.name : InnerConfigure - MD_KEY_BITS_PER_CODED_SAMPLE
148 * @tc.desc : param check test
149 */
150 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_004, TestSize.Level2)
151 {
152 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
153
154 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
155 ASSERT_EQ(AVCS_ERR_OK, ret);
156
157 Format audioParams;
158
159 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
160 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
161 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
162 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
163 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
164 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
165
166 ret = encoderDemo->InnerConfigure(audioParams);
167 ASSERT_EQ(AVCS_ERR_OK, ret);
168 encoderDemo->InnerReset();
169 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, -1);
170 ret = encoderDemo->InnerConfigure(audioParams);
171 ASSERT_EQ(AVCS_ERR_OK, ret);
172 encoderDemo->InnerReset();
173 audioParams.PutStringValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, "aaaaaa");
174 ret = encoderDemo->InnerConfigure(audioParams);
175 ASSERT_EQ(AVCS_ERR_OK, ret);
176 encoderDemo->InnerReset();
177 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, 0);
178 ret = encoderDemo->InnerConfigure(audioParams);
179 ASSERT_EQ(AVCS_ERR_OK, ret);
180 encoderDemo->InnerReset();
181 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, 0);
182 ret = encoderDemo->InnerConfigure(audioParams);
183 ASSERT_EQ(AVCS_ERR_OK, ret);
184 encoderDemo->InnerReset();
185 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, 0.1);
186 ret = encoderDemo->InnerConfigure(audioParams);
187 ASSERT_EQ(AVCS_ERR_OK, ret);
188 encoderDemo->InnerReset();
189 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, 0.1);
190 ret = encoderDemo->InnerConfigure(audioParams);
191 ASSERT_EQ(AVCS_ERR_OK, ret);
192 encoderDemo->InnerReset();
193 uint8_t b[100];
194 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, b, 100);
195 ret = encoderDemo->InnerConfigure(audioParams);
196 ASSERT_EQ(AVCS_ERR_OK, ret);
197 encoderDemo->InnerReset();
198 encoderDemo->InnerDestroy();
199
200 delete encoderDemo;
201 }
202
203 /**
204 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_005
205 * @tc.name : InnerConfigure - MD_KEY_AUDIO_SAMPLE_FORMAT
206 * @tc.desc : param check test
207 */
208 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_005, TestSize.Level2)
209 {
210 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
211
212 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
213 ASSERT_EQ(AVCS_ERR_OK, ret);
214
215 Format audioParams;
216
217 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
218 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
219 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
220 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
221 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
222 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
223
224 ret = encoderDemo->InnerConfigure(audioParams);
225 ASSERT_EQ(AVCS_ERR_OK, ret);
226 encoderDemo->InnerReset();
227 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, -1);
228 ret = encoderDemo->InnerConfigure(audioParams);
229 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
230 encoderDemo->InnerReset();
231 audioParams.PutStringValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, "aaaaaa");
232 ret = encoderDemo->InnerConfigure(audioParams);
233 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
234 encoderDemo->InnerReset();
235 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, 0);
236 ret = encoderDemo->InnerConfigure(audioParams);
237 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
238 encoderDemo->InnerReset();
239 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, 0);
240 ret = encoderDemo->InnerConfigure(audioParams);
241 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
242 encoderDemo->InnerReset();
243 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, 0.1);
244 ret = encoderDemo->InnerConfigure(audioParams);
245 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
246 encoderDemo->InnerReset();
247 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, 0.1);
248 ret = encoderDemo->InnerConfigure(audioParams);
249 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
250 encoderDemo->InnerReset();
251 uint8_t b[100];
252 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, b, 100);
253 ret = encoderDemo->InnerConfigure(audioParams);
254 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
255 encoderDemo->InnerReset();
256 encoderDemo->InnerDestroy();
257
258 delete encoderDemo;
259 }
260
261 /**
262 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_006
263 * @tc.name : InnerConfigure - MD_KEY_CHANNEL_LAYOUT check
264 * @tc.desc : param check test
265 */
266 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_006, TestSize.Level2)
267 {
268 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
269 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
270 ASSERT_EQ(AVCS_ERR_OK, ret);
271
272 Format audioParams;
273
274 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
275 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
276 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
277 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
278 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
279 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
280
281 ret = encoderDemo->InnerConfigure(audioParams);
282 ASSERT_EQ(AVCS_ERR_OK, ret);
283 encoderDemo->InnerReset();
284 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, -1);
285 ret = encoderDemo->InnerConfigure(audioParams);
286 ASSERT_EQ(AVCS_ERR_OK, ret);
287 encoderDemo->InnerReset();
288 audioParams.PutStringValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, "aaaaaa");
289 ret = encoderDemo->InnerConfigure(audioParams);
290 ASSERT_EQ(AVCS_ERR_OK, ret);
291 encoderDemo->InnerReset();
292 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, 0);
293 ret = encoderDemo->InnerConfigure(audioParams);
294 ASSERT_EQ(AVCS_ERR_OK, ret);
295 encoderDemo->InnerReset();
296 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, 0.1);
297 ret = encoderDemo->InnerConfigure(audioParams);
298 ASSERT_EQ(AVCS_ERR_OK, ret);
299 encoderDemo->InnerReset();
300 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, 0.1);
301 ret = encoderDemo->InnerConfigure(audioParams);
302 ASSERT_EQ(AVCS_ERR_OK, ret);
303 encoderDemo->InnerReset();
304 uint8_t b[100];
305 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, b, 100);
306 ret = encoderDemo->InnerConfigure(audioParams);
307 ASSERT_EQ(AVCS_ERR_OK, ret);
308 encoderDemo->InnerReset();
309 encoderDemo->InnerDestroy();
310
311 delete encoderDemo;
312 }
313 /**
314 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_007
315 * @tc.name : InnerConfigure - MD_KEY_CHANNEL_COUNT check
316 * @tc.desc : param check test
317 */
318 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_007, TestSize.Level2)
319 {
320 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
321 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
322 ASSERT_EQ(AVCS_ERR_OK, ret);
323
324 Format audioParams;
325
326 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
327 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
328 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
329 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
330 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
331 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
332
333 ret = encoderDemo->InnerConfigure(audioParams);
334 ASSERT_EQ(AVCS_ERR_OK, ret);
335 encoderDemo->InnerReset();
336 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, -1);
337 ret = encoderDemo->InnerConfigure(audioParams);
338 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
339 encoderDemo->InnerReset();
340 audioParams.PutStringValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, "aaaaaa");
341 ret = encoderDemo->InnerConfigure(audioParams);
342 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
343 encoderDemo->InnerReset();
344 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, -1);
345 ret = encoderDemo->InnerConfigure(audioParams);
346 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
347 encoderDemo->InnerReset();
348 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 0.1);
349 ret = encoderDemo->InnerConfigure(audioParams);
350 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
351 encoderDemo->InnerReset();
352 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 0.1);
353 ret = encoderDemo->InnerConfigure(audioParams);
354 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
355 encoderDemo->InnerReset();
356 uint8_t b[100];
357 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, b, 100);
358 ret = encoderDemo->InnerConfigure(audioParams);
359 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
360 encoderDemo->InnerReset();
361 encoderDemo->InnerDestroy();
362
363 delete encoderDemo;
364 }
365
366 /**
367 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_008
368 * @tc.name : InnerConfigure - MD_KEY_SAMPLE_RATE check
369 * @tc.desc : param check test
370 */
371 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_008, TestSize.Level2)
372 {
373 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
374 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
375 ASSERT_EQ(AVCS_ERR_OK, ret);
376
377 Format audioParams;
378
379 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
380 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
381 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
382 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
383 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
384 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
385
386 ret = encoderDemo->InnerConfigure(audioParams);
387 ASSERT_EQ(AVCS_ERR_OK, ret);
388 encoderDemo->InnerReset();
389 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, -1);
390 ret = encoderDemo->InnerConfigure(audioParams);
391 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
392 encoderDemo->InnerReset();
393 audioParams.PutStringValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, "aaaaaa");
394 ret = encoderDemo->InnerConfigure(audioParams);
395 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
396 encoderDemo->InnerReset();
397 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 0);
398 ret = encoderDemo->InnerConfigure(audioParams);
399 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
400 encoderDemo->InnerReset();
401 audioParams.PutFloatValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 0.1);
402 ret = encoderDemo->InnerConfigure(audioParams);
403 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
404 encoderDemo->InnerReset();
405 audioParams.PutDoubleValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 0.1);
406 ret = encoderDemo->InnerConfigure(audioParams);
407 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
408 encoderDemo->InnerReset();
409 uint8_t b[100];
410 audioParams.PutBuffer(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, b, 100);
411 ret = encoderDemo->InnerConfigure(audioParams);
412 ASSERT_EQ(AVCS_ERR_UNSUPPORT_AUD_PARAMS, ret);
413 encoderDemo->InnerReset();
414 encoderDemo->InnerDestroy();
415
416 delete encoderDemo;
417 }
418
419 /**
420 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_009
421 * @tc.name : InnerQueueInputBuffer - info.size check
422 * @tc.desc : param check test
423 */
424 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_009, TestSize.Level2)
425 {
426 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
427 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
428 ASSERT_EQ(AVCS_ERR_OK, ret);
429 Format audioParams;
430
431 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
432 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
433 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
434 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
435 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
436 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
437 std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
438 std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
439 ret = encoderDemo->InnerSetCallback(cb_);
440 ASSERT_EQ(AVCS_ERR_OK, ret);
441
442 ret = encoderDemo->InnerConfigure(audioParams);
443 ASSERT_EQ(AVCS_ERR_OK, ret);
444
445 encoderDemo->InnerPrepare();
446 encoderDemo->InnerStartWithThread();
447 uint32_t index = encoderDemo->InnerGetInputIndex();
448 AVCodecBufferInfo info;
449 AVCodecBufferFlag flag;
450
451 std::shared_ptr<AVSharedMemory> buffer = signal_->inInnerBufQueue_.front();
452 ASSERT_NE(nullptr, buffer);
453
454 info.presentationTimeUs = 0;
455 info.size = 100;
456 info.offset = 0;
457
458 flag = AVCODEC_BUFFER_FLAG_NONE;
459
460 ret = encoderDemo->InnerQueueInputBuffer(index, info, flag);
461 ASSERT_EQ(AVCS_ERR_OK, ret);
462 index = encoderDemo->InnerGetInputIndex();
463 info.size = -1;
464 ret = encoderDemo->InnerQueueInputBuffer(index, info, flag);
465 ASSERT_EQ(AVCS_ERR_INVALID_VAL, ret);
466
467 encoderDemo->InnerDestroy();
468 delete encoderDemo;
469 }
470
471 /**
472 * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_010
473 * @tc.name : InnerQueueInputBuffer - info.offset check
474 * @tc.desc : param check test
475 */
476 HWTEST_F(InnerParamCheckTest, SUB_MULTIMEDIA_AUDIO_ENCODER_PARAM_CHECK_010, TestSize.Level2)
477 {
478 AudioEncoderDemo *encoderDemo = new AudioEncoderDemo();
479 int32_t ret = encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
480 ASSERT_EQ(AVCS_ERR_OK, ret);
481 Format audioParams;
482
483 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
484 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_44100);
485 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, BIT_RATE_112000);
486 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
487 audioParams.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
488 audioParams.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
489 std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
490 std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
491 ret = encoderDemo->InnerSetCallback(cb_);
492 ASSERT_EQ(AVCS_ERR_OK, ret);
493
494 ret = encoderDemo->InnerConfigure(audioParams);
495 ASSERT_EQ(AVCS_ERR_OK, ret);
496
497 encoderDemo->InnerPrepare();
498 encoderDemo->InnerStartWithThread();
499
500 uint32_t index = encoderDemo->InnerGetInputIndex();
501 AVCodecBufferInfo info;
502 AVCodecBufferFlag flag;
503
504 std::shared_ptr<AVSharedMemory> buffer = signal_->inInnerBufQueue_.front();
505 ASSERT_NE(nullptr, buffer);
506
507 info.presentationTimeUs = 0;
508 info.size = 100;
509 info.offset = 0;
510
511 flag = AVCODEC_BUFFER_FLAG_NONE;
512
513 ret = encoderDemo->InnerQueueInputBuffer(index, info, flag);
514 ASSERT_EQ(AVCS_ERR_OK, ret);
515
516 index = encoderDemo->InnerGetInputIndex();
517 info.offset = -1;
518 ret = encoderDemo->InnerQueueInputBuffer(index, info, flag);
519 ASSERT_EQ(AVCS_ERR_INVALID_VAL, ret);
520
521 encoderDemo->InnerDestroy();
522 delete encoderDemo;
523 }