• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 <queue>
17 #include <mutex>
18 #include <gtest/gtest.h>
19 #include <iostream>
20 #include <unistd.h>
21 #include <atomic>
22 #include <fstream>
23 #include <string>
24 #include <thread>
25 #include "avcodec_codec_name.h"
26 #include "avcodec_common.h"
27 #include "avcodec_errors.h"
28 #include "avcodec_mime_type.h"
29 #include "media_description.h"
30 #include "native_avcodec_base.h"
31 #include "native_avformat.h"
32 #include "avcodec_common.h"
33 #include "avcodec_errors.h"
34 #include "securec.h"
35 #include "avcodec_audio_common.h"
36 #include "native_avbuffer.h"
37 #include "common/native_mfmagic.h"
38 #include "native_avcodec_audiocodec.h"
39 #include "native_audio_channel_layout.h"
40 #include "media_key_system_mock.h"
41 #include "native_avcapability.h"
42 
43 using namespace std;
44 using namespace testing::ext;
45 using namespace OHOS::MediaAVCodec;
46 
47 namespace {
48 constexpr uint32_t DEFAULT_CHANNEL_COUNT = 2;
49 constexpr uint32_t DEFAULT_SAMPLE_RATE = 44100;
50 constexpr uint32_t ABNORMAL_SAMPLE_RATE = 999999;
51 constexpr uint32_t FLAC_192K_SAMPLE_RATE = 192000;
52 constexpr uint32_t DEFAULT_AAC_TYPE = 1;
53 constexpr uint32_t ABNORMAL_AAC_TYPE = 999999;
54 constexpr int32_t DEFAULT_SAMPLE_FORMAT = AudioSampleFormat::SAMPLE_S16LE;
55 constexpr int32_t ABNORMAL_SAMPLE_FORMAT = AudioSampleFormat::INVALID_WIDTH;
56 constexpr int32_t FLAC_S24_SAMPLE_FORMAT = AudioSampleFormat::SAMPLE_S24LE;
57 constexpr int64_t BITS_RATE[7] = {199000, 261000, 60000, 320000};
58 constexpr uint32_t AMRWB_SAMPLE_RATE = 16000;
59 constexpr uint32_t SAMPLE_RATE_8K = 8000;
60 constexpr uint32_t ONE_CHANNEL_COUNT = 1;
61 constexpr uint32_t ABNORMAL_MAX_CHANNEL_COUNT = 999999;
62 constexpr uint32_t ABNORMAL_MIN_CHANNEL_COUNT = 0;
63 constexpr uint32_t ABNORMAL_MAX_INPUT_SIZE = 99999999;
64 constexpr uint64_t CHANNEL_LAYOUT = OH_AudioChannelLayout::CH_LAYOUT_STEREO;
65 constexpr uint64_t ABNORMAL_CHANNEL_LAYOUT = OH_AudioChannelLayout::CH_LAYOUT_5POINT1POINT2;
66 constexpr string_view INPUT_AAC_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k.dat";
67 constexpr string_view OUTPUT_AAC_PCM_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k.pcm";
68 constexpr string_view INPUT_FLAC_FILE_PATH = "/data/test/media/flac_2c_44100hz_261k.dat";
69 constexpr string_view OUTPUT_FLAC_PCM_FILE_PATH = "/data/test/media/flac_2c_44100hz_261k.pcm";
70 constexpr string_view INPUT_FLAC_192K_FILE_PATH = "/data/test/media/FLAC_192k_2c_xxkb.dat";
71 constexpr string_view OUTPUT_FLAC_192K_PCM_FILE_PATH = "/data/test/media/FLAC_192k_2c_xxkb.pcm";
72 constexpr string_view INPUT_MP3_FILE_PATH = "/data/test/media/mp3_2c_44100hz_60k.dat";
73 constexpr string_view OUTPUT_MP3_PCM_FILE_PATH = "/data/test/media/mp3_2c_44100hz_60k.pcm";
74 constexpr string_view INPUT_VORBIS_FILE_PATH = "/data/test/media/vorbis_2c_44100hz_320k.dat";
75 constexpr string_view OUTPUT_VORBIS_PCM_FILE_PATH = "/data/test/media/vorbis_2c_44100hz_320k.pcm";
76 constexpr string_view INPUT_AMRNB_FILE_PATH = "/data/test/media/voice_amrnb_12200.dat";
77 constexpr string_view OUTPUT_AMRNB_PCM_FILE_PATH = "/data/test/media/voice_amrnb_12200.pcm";
78 constexpr string_view INPUT_AMRWB_FILE_PATH = "/data/test/media/voice_amrwb_23850.dat";
79 constexpr string_view OUTPUT_AMRWB_PCM_FILE_PATH = "/data/test/media/voice_amrwb_23850.pcm";
80 constexpr string_view INPUT_G711MU_FILE_PATH = "/data/test/media/g711mu_8kHz.dat";
81 constexpr string_view OUTPUT_G711MU_PCM_FILE_PATH = "/data/test/media/g711mu_8kHz_decode.pcm";
82 constexpr string_view INPUT_OPUS_FILE_PATH = "/data/test/media/voice_opus.dat";
83 constexpr string_view OUTPUT_OPUS_PCM_FILE_PATH = "/data/test/media/opus_decode.pcm";
84 constexpr string_view INPUT_APE_FILE_PATH = "/data/test/media/voice_ape.dat";
85 constexpr string_view OUTPUT_APE_PCM_FILE_PATH = "/data/test/media/ape_decode.pcm";
86 constexpr string_view INPUT_COOK_FILE_PATH = "/data/test/media/voice_cook.dat";
87 constexpr string_view OUTPUT_COOK_PCM_FILE_PATH = "/data/test/media/cook_decode.pcm";
88 constexpr string_view INPUT_AC3_FILE_PATH = "/data/test/media/voice_ac3.dat";
89 constexpr string_view OUTPUT_AC3_PCM_FILE_PATH = "/data/test/media/ac3_decode.pcm";
90 constexpr string_view INPUT_AAC_LC_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_lc.dat";
91 constexpr string_view OUTPUT_AAC_LC_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_lc.pcm";
92 constexpr string_view INPUT_AAC_HE_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_he.dat";
93 constexpr string_view OUTPUT_AAC_HE_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_he.pcm";
94 constexpr string_view INPUT_AAC_HEV2_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_hev2.dat";
95 constexpr string_view OUTPUT_AAC_HEV2_ADTS_FILE_PATH = "/data/test/media/aac_2c_44100hz_199k_hev2.pcm";
96 const string OPUS_SO_FILE_PATH = std::string(AV_CODEC_PATH) + "/libav_codec_ext_base.z.so";
97 } // namespace
98 
99 namespace OHOS {
100 namespace MediaAVCodec {
101 enum class AudioBufferFormatType : int32_t {
102     TYPE_AAC = 0,
103     TYPE_FLAC = 1,
104     TYPE_MP3 = 2,
105     TYPE_VORBIS = 3,
106     TYPE_AMRNB = 4,
107     TYPE_AMRWB = 5,
108     TYPE_G711MU = 6,
109     TYPE_OPUS = 7,
110     TYPE_APE = 8,
111     TYPE_COOK = 9,
112     TYPE_AC3 = 10,
113     TYPE_MAX = 20,
114 };
115 
116 class AudioCodecBufferSignal {
117 public:
118     std::mutex inMutex_;
119     std::mutex outMutex_;
120     std::mutex startMutex_;
121     std::condition_variable inCond_;
122     std::condition_variable outCond_;
123     std::condition_variable startCond_;
124     std::queue<uint32_t> inQueue_;
125     std::queue<uint32_t> outQueue_;
126     std::queue<OH_AVBuffer *> inBufferQueue_;
127     std::queue<OH_AVBuffer *> outBufferQueue_;
128 };
129 
130 static uint32_t g_outputFormatChangedTimes = 0;
131 static int32_t g_outputSampleRate = 0;
132 static int32_t g_outputChannels = 0;
133 
OnError(OH_AVCodec * codec,int32_t errorCode,void * userData)134 static void OnError(OH_AVCodec *codec, int32_t errorCode, void *userData)
135 {
136     (void)codec;
137     (void)errorCode;
138     (void)userData;
139     cout << "Error received, errorCode:" << errorCode << endl;
140 }
141 
OnOutputFormatChanged(OH_AVCodec * codec,OH_AVFormat * format,void * userData)142 static void OnOutputFormatChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData)
143 {
144     (void)codec;
145     (void)userData;
146     g_outputFormatChangedTimes++;
147     OH_AVFormat_GetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, &g_outputChannels);
148     OH_AVFormat_GetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, &g_outputSampleRate);
149     cout << "OnOutputFormatChanged received, rate:" << g_outputSampleRate << ",channel:" << g_outputChannels << endl;
150 }
151 
OnInputBufferAvailable(OH_AVCodec * codec,uint32_t index,OH_AVBuffer * data,void * userData)152 static void OnInputBufferAvailable(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *data, void *userData)
153 {
154     (void)codec;
155     AudioCodecBufferSignal *signal = static_cast<AudioCodecBufferSignal *>(userData);
156     unique_lock<mutex> lock(signal->inMutex_);
157     signal->inQueue_.push(index);
158     signal->inBufferQueue_.push(data);
159     signal->inCond_.notify_all();
160 }
161 
OnOutputBufferAvailable(OH_AVCodec * codec,uint32_t index,OH_AVBuffer * data,void * userData)162 static void OnOutputBufferAvailable(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *data, void *userData)
163 {
164     (void)codec;
165     AudioCodecBufferSignal *signal = static_cast<AudioCodecBufferSignal *>(userData);
166     unique_lock<mutex> lock(signal->outMutex_);
167     signal->outQueue_.push(index);
168     signal->outBufferQueue_.push(data);
169     signal->outCond_.notify_all();
170 }
171 
172 class AudioDecoderBufferCapiUnitTest : public testing::Test {
173 public:
174     static void SetUpTestCase(void);
175     static void TearDownTestCase(void);
176     void SetUp();
177     void TearDown();
178     bool ReadBuffer(OH_AVBuffer *buffer, uint32_t index);
179     int32_t InitFile(AudioBufferFormatType audioType);
180     int32_t InitFile(string_view input, string_view output);
181     void InputFunc();
182     void OutputFunc();
183     int32_t CreateCodecFunc(AudioBufferFormatType audioType);
184     int32_t CheckSoFunc();
185     void HandleInputEOS(const uint32_t index);
186     int32_t Configure(AudioBufferFormatType audioType);
187     void SetTestingFormat(AudioBufferFormatType audioType);
188     int32_t Start();
189     int32_t Stop();
190     void Release();
191 
192 protected:
193     std::atomic<bool> isRunning_ = false;
194     std::unique_ptr<std::thread> inputLoop_;
195     std::unique_ptr<std::thread> outputLoop_;
196     struct OH_AVCodecCallback cb_;
197     AudioCodecBufferSignal *signal_ = nullptr;
198     OH_AVCodec *audioDec_ = nullptr;
199     OH_AVFormat *format_ = nullptr;
200     bool isTestingFormat_ = false;
201     bool isFirstFrame_ = true;
202     uint32_t frameCount_ = 0;
203     std::ifstream inputFile_;
204     std::unique_ptr<std::ifstream> soFile_;
205     std::ofstream pcmOutputFile_;
206 };
207 
SetUpTestCase(void)208 void AudioDecoderBufferCapiUnitTest::SetUpTestCase(void)
209 {
210     cout << "[SetUpTestCase]: " << endl;
211 }
212 
TearDownTestCase(void)213 void AudioDecoderBufferCapiUnitTest::TearDownTestCase(void)
214 {
215     cout << "[TearDownTestCase]: " << endl;
216 }
217 
SetUp(void)218 void AudioDecoderBufferCapiUnitTest::SetUp(void)
219 {
220     g_outputFormatChangedTimes = 0;
221     g_outputSampleRate = 0;
222     g_outputChannels = 0;
223     cout << "[SetUp]: SetUp!!!" << endl;
224 }
225 
TearDown(void)226 void AudioDecoderBufferCapiUnitTest::TearDown(void)
227 {
228     if (isTestingFormat_) {
229         EXPECT_EQ(g_outputFormatChangedTimes, 1);
230     } else {
231         EXPECT_EQ(g_outputFormatChangedTimes, 0);
232     }
233     cout << "[TearDown]: over!!!" << endl;
234 
235     if (signal_) {
236         delete signal_;
237         signal_ = nullptr;
238     }
239     if (inputFile_.is_open()) {
240         inputFile_.close();
241     }
242     if (pcmOutputFile_.is_open()) {
243         pcmOutputFile_.close();
244     }
245 
246     if (format_ != nullptr) {
247         OH_AVFormat_Destroy(format_);
248         format_ = nullptr;
249     }
250 }
251 
Release()252 void AudioDecoderBufferCapiUnitTest::Release()
253 {
254     Stop();
255     OH_AudioCodec_Destroy(audioDec_);
256 }
257 
HandleInputEOS(const uint32_t index)258 void AudioDecoderBufferCapiUnitTest::HandleInputEOS(const uint32_t index)
259 {
260     std::cout << "end buffer\n";
261     OH_AudioCodec_PushInputBuffer(audioDec_, index);
262     signal_->inBufferQueue_.pop();
263     signal_->inQueue_.pop();
264 }
265 
ReadBuffer(OH_AVBuffer * buffer,uint32_t index)266 bool AudioDecoderBufferCapiUnitTest::ReadBuffer(OH_AVBuffer *buffer, uint32_t index)
267 {
268     int64_t size;
269     int64_t pts;
270     inputFile_.read(reinterpret_cast<char *>(&size), sizeof(size));
271     if (inputFile_.eof() || inputFile_.gcount() == 0 || size == 0) {
272         buffer->buffer_->memory_->SetSize(1);
273         buffer->buffer_->flag_ = AVCODEC_BUFFER_FLAGS_EOS;
274         HandleInputEOS(index);
275         cout << "Set EOS" << endl;
276         return false;
277     }
278 
279     if (inputFile_.gcount() != sizeof(size)) {
280         cout << "Fatal: read size fail" << endl;
281         return false;
282     }
283 
284     inputFile_.read(reinterpret_cast<char *>(&buffer->buffer_->pts_), sizeof(buffer->buffer_->pts_));
285     if (inputFile_.gcount() != sizeof(pts)) {
286         cout << "Fatal: read size fail" << endl;
287         return false;
288     }
289 
290     inputFile_.read((char *)OH_AVBuffer_GetAddr(buffer), size);
291     buffer->buffer_->memory_->SetSize(size);
292     if (inputFile_.gcount() != size) {
293         cout << "Fatal: read buffer fail" << endl;
294         return false;
295     }
296 
297     return true;
298 }
299 
InputFunc()300 void AudioDecoderBufferCapiUnitTest::InputFunc()
301 {
302     while (isRunning_.load()) {
303         unique_lock<mutex> lock(signal_->inMutex_);
304         signal_->inCond_.wait(lock, [this]() { return (signal_->inQueue_.size() > 0 || !isRunning_.load()); });
305 
306         if (!isRunning_.load()) {
307             break;
308         }
309 
310         uint32_t index = signal_->inQueue_.front();
311         auto buffer = signal_->inBufferQueue_.front();
312         if (buffer == nullptr) {
313             cout << "Fatal: GetInputBuffer fail" << endl;
314             break;
315         }
316         if (ReadBuffer(buffer, index) == false) {
317             break;
318         }
319 
320         int32_t ret;
321         if (isFirstFrame_) {
322             buffer->buffer_->flag_ = AVCODEC_BUFFER_FLAGS_CODEC_DATA;
323             ret = OH_AudioCodec_PushInputBuffer(audioDec_, index);
324             isFirstFrame_ = false;
325         } else {
326             buffer->buffer_->flag_ = AVCODEC_BUFFER_FLAGS_NONE;
327             ret = OH_AudioCodec_PushInputBuffer(audioDec_, index);
328         }
329         signal_->inQueue_.pop();
330         signal_->inBufferQueue_.pop();
331         frameCount_++;
332         if (ret != AVCS_ERR_OK) {
333             cout << "Fatal error, exit" << endl;
334             break;
335         }
336     }
337     cout << "stop, exit" << endl;
338     inputFile_.close();
339 }
340 
OutputFunc()341 void AudioDecoderBufferCapiUnitTest::OutputFunc()
342 {
343     if (!pcmOutputFile_.is_open()) {
344         std::cout << "open " << OUTPUT_MP3_PCM_FILE_PATH << " failed!" << std::endl;
345     }
346     while (isRunning_.load()) {
347         unique_lock<mutex> lock(signal_->outMutex_);
348         signal_->outCond_.wait(lock, [this]() { return (signal_->outQueue_.size() > 0 || !isRunning_.load()); });
349 
350         if (!isRunning_.load()) {
351             cout << "wait to stop, exit" << endl;
352             break;
353         }
354 
355         uint32_t index = signal_->outQueue_.front();
356         OH_AVBuffer *data = signal_->outBufferQueue_.front();
357 
358         if (data == nullptr) {
359             cout << "OutputFunc OH_AVBuffer is nullptr" << endl;
360             continue;
361         }
362         pcmOutputFile_.write(reinterpret_cast<char *>(OH_AVBuffer_GetAddr(data)), data->buffer_->memory_->GetSize());
363 
364         if (data != nullptr &&
365             (data->buffer_->flag_ == AVCODEC_BUFFER_FLAGS_EOS || data->buffer_->memory_->GetSize() == 0)) {
366             cout << "decode eos" << endl;
367             isRunning_.store(false);
368             signal_->startCond_.notify_all();
369         }
370         signal_->outBufferQueue_.pop();
371         signal_->outQueue_.pop();
372         if (OH_AudioCodec_FreeOutputBuffer(audioDec_, index) != AV_ERR_OK) {
373             cout << "Fatal: FreeOutputData fail" << endl;
374             break;
375         }
376 
377         if (data->buffer_->flag_ == AVCODEC_BUFFER_FLAGS_EOS) {
378             cout << "decode eos" << endl;
379             isRunning_.store(false);
380             signal_->startCond_.notify_all();
381         }
382     }
383     cout << "stop, exit" << endl;
384     pcmOutputFile_.close();
385 }
386 
Start()387 int32_t AudioDecoderBufferCapiUnitTest::Start()
388 {
389     isRunning_.store(true);
390     inputLoop_ = make_unique<thread>(&AudioDecoderBufferCapiUnitTest::InputFunc, this);
391     if (inputLoop_ == nullptr) {
392         cout << "Fatal: No memory" << endl;
393         return OH_AVErrCode::AV_ERR_UNKNOWN;
394     }
395 
396     outputLoop_ = make_unique<thread>(&AudioDecoderBufferCapiUnitTest::OutputFunc, this);
397     if (outputLoop_ == nullptr) {
398         cout << "Fatal: No memory" << endl;
399         return OH_AVErrCode::AV_ERR_UNKNOWN;
400     }
401 
402     return OH_AudioCodec_Start(audioDec_);
403 }
404 
Stop()405 int32_t AudioDecoderBufferCapiUnitTest::Stop()
406 {
407     isRunning_.store(false);
408     if (inputLoop_ != nullptr && inputLoop_->joinable()) {
409         {
410             unique_lock<mutex> lock(signal_->inMutex_);
411             signal_->inCond_.notify_all();
412         }
413         inputLoop_->join();
414         inputLoop_ = nullptr;
415         while (!signal_->inQueue_.empty()) {
416             signal_->inQueue_.pop();
417         }
418         while (!signal_->inBufferQueue_.empty()) {
419             signal_->inBufferQueue_.pop();
420         }
421     }
422 
423     if (outputLoop_ != nullptr && outputLoop_->joinable()) {
424         {
425             unique_lock<mutex> lock(signal_->outMutex_);
426             signal_->outCond_.notify_all();
427         }
428         outputLoop_->join();
429         outputLoop_ = nullptr;
430         while (!signal_->outQueue_.empty()) {
431             signal_->outQueue_.pop();
432         }
433         while (!signal_->outBufferQueue_.empty()) {
434             signal_->outBufferQueue_.pop();
435         }
436     }
437     std::cout << "start stop!\n";
438     return OH_AudioCodec_Stop(audioDec_);
439 }
440 
InitFile(AudioBufferFormatType audioType)441 int32_t AudioDecoderBufferCapiUnitTest::InitFile(AudioBufferFormatType audioType)
442 {
443     if (audioType == AudioBufferFormatType::TYPE_AAC) {
444         inputFile_.open(INPUT_AAC_FILE_PATH, std::ios::binary);
445         pcmOutputFile_.open(OUTPUT_AAC_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
446     } else if (audioType == AudioBufferFormatType::TYPE_FLAC) {
447         inputFile_.open(INPUT_FLAC_FILE_PATH, std::ios::binary);
448         pcmOutputFile_.open(OUTPUT_FLAC_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
449     } else if (audioType == AudioBufferFormatType::TYPE_MP3) {
450         inputFile_.open(INPUT_MP3_FILE_PATH, std::ios::binary);
451         pcmOutputFile_.open(OUTPUT_MP3_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
452     } else if (audioType == AudioBufferFormatType::TYPE_VORBIS) {
453         inputFile_.open(INPUT_VORBIS_FILE_PATH, std::ios::binary);
454         pcmOutputFile_.open(OUTPUT_VORBIS_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
455     } else if (audioType == AudioBufferFormatType::TYPE_AMRNB) {
456         inputFile_.open(INPUT_AMRNB_FILE_PATH, std::ios::binary);
457         pcmOutputFile_.open(OUTPUT_AMRNB_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
458     } else if (audioType == AudioBufferFormatType::TYPE_AMRWB) {
459         inputFile_.open(INPUT_AMRWB_FILE_PATH, std::ios::binary);
460         pcmOutputFile_.open(OUTPUT_AMRWB_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
461     } else if (audioType == AudioBufferFormatType::TYPE_G711MU) {
462         inputFile_.open(INPUT_G711MU_FILE_PATH, std::ios::binary);
463         pcmOutputFile_.open(OUTPUT_G711MU_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
464     } else if (audioType == AudioBufferFormatType::TYPE_OPUS) {
465         inputFile_.open(INPUT_OPUS_FILE_PATH, std::ios::binary);
466         pcmOutputFile_.open(OUTPUT_OPUS_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
467     } else if (audioType == AudioBufferFormatType::TYPE_APE) {
468         inputFile_.open(INPUT_APE_FILE_PATH, std::ios::binary);
469         pcmOutputFile_.open(OUTPUT_APE_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
470     } else if (audioType == AudioBufferFormatType::TYPE_COOK) {
471         inputFile_.open(INPUT_COOK_FILE_PATH, std::ios::binary);
472         pcmOutputFile_.open(OUTPUT_COOK_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
473     } else if (audioType == AudioBufferFormatType::TYPE_AC3) {
474         inputFile_.open(INPUT_AC3_FILE_PATH, std::ios::binary);
475         pcmOutputFile_.open(OUTPUT_AC3_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
476     } else {
477         cout << "Fatal: audio format type not support" << endl;
478         return OH_AVErrCode::AV_ERR_UNKNOWN;
479     }
480 
481     if (!inputFile_.is_open()) {
482         cout << "Fatal: open input file failed" << endl;
483         return OH_AVErrCode::AV_ERR_UNKNOWN;
484     }
485     if (!pcmOutputFile_.is_open()) {
486         cout << "Fatal: open output file failed" << endl;
487         return OH_AVErrCode::AV_ERR_UNKNOWN;
488     }
489     return OH_AVErrCode::AV_ERR_OK;
490 }
491 
InitFile(string_view inputFilename,string_view outputFilename)492 int32_t AudioDecoderBufferCapiUnitTest::InitFile(string_view inputFilename, string_view outputFilename)
493 {
494     inputFile_.open(inputFilename, std::ios::binary);
495     if (!inputFile_.is_open()) {
496         cout << "Fatal: open input file failed:" << inputFilename << endl;
497         return OH_AVErrCode::AV_ERR_UNKNOWN;
498     }
499     pcmOutputFile_.open(outputFilename, std::ios::out | std::ios::binary);
500     if (!pcmOutputFile_.is_open()) {
501         cout << "Fatal: open output file failed" << outputFilename << endl;
502         inputFile_.close();
503         return OH_AVErrCode::AV_ERR_UNKNOWN;
504     }
505     return OH_AVErrCode::AV_ERR_OK;
506 }
507 
CreateCodecFunc(AudioBufferFormatType audioType)508 int32_t AudioDecoderBufferCapiUnitTest::CreateCodecFunc(AudioBufferFormatType audioType)
509 {
510     if (audioType == AudioBufferFormatType::TYPE_MP3) {
511         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_MP3_NAME).data());
512     } else if (audioType == AudioBufferFormatType::TYPE_FLAC) {
513         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_FLAC_NAME).data());
514     } else if (audioType == AudioBufferFormatType::TYPE_AAC) {
515         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AAC_NAME).data());
516     } else if (audioType == AudioBufferFormatType::TYPE_VORBIS) {
517         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_VORBIS_NAME).data());
518     } else if (audioType == AudioBufferFormatType::TYPE_AMRWB) {
519         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AMRWB_NAME).data());
520     } else if (audioType == AudioBufferFormatType::TYPE_AMRNB) {
521         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AMRNB_NAME).data());
522     } else if (audioType == AudioBufferFormatType::TYPE_G711MU) {
523         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_G711MU_NAME).data());
524     } else if (audioType == AudioBufferFormatType::TYPE_OPUS) {
525         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_OPUS_NAME).data());
526     } else if (audioType == AudioBufferFormatType::TYPE_APE) {
527         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_APE_NAME).data());
528     } else if (audioType == AudioBufferFormatType::TYPE_COOK) {
529         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_COOK_NAME).data());
530     } else if (audioType == AudioBufferFormatType::TYPE_AC3) {
531         audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AC3_NAME).data());
532     } else {
533         cout << "audio name not support" << endl;
534         return OH_AVErrCode::AV_ERR_UNKNOWN;
535     }
536 
537     if (audioDec_ == nullptr) {
538         cout << "Fatal: CreateByName fail" << endl;
539         return OH_AVErrCode::AV_ERR_UNKNOWN;
540     }
541 
542     signal_ = new AudioCodecBufferSignal();
543     if (signal_ == nullptr) {
544         cout << "Fatal: create signal fail" << endl;
545         return OH_AVErrCode::AV_ERR_UNKNOWN;
546     }
547     cb_ = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, &OnOutputBufferAvailable};
548     int32_t ret = OH_AudioCodec_RegisterCallback(audioDec_, cb_, signal_);
549     if (ret != OH_AVErrCode::AV_ERR_OK) {
550         cout << "Fatal: SetCallback fail" << endl;
551         return OH_AVErrCode::AV_ERR_UNKNOWN;
552     }
553 
554     return OH_AVErrCode::AV_ERR_OK;
555 }
556 
SetTestingFormat(AudioBufferFormatType audioType)557 void AudioDecoderBufferCapiUnitTest::SetTestingFormat(AudioBufferFormatType audioType)
558 {
559     if (!isTestingFormat_) {
560         OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, DEFAULT_SAMPLE_FORMAT);
561         return;
562     }
563     int32_t notMatchRate = 48000; // 48000 is valid for most codec but not match default
564     if (audioType == AudioBufferFormatType::TYPE_OPUS) {
565         OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AUD_CHANNEL_COUNT, 1);
566     } else {
567         OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AUD_SAMPLE_RATE, notMatchRate);
568     }
569 }
570 
Configure(AudioBufferFormatType audioType)571 int32_t AudioDecoderBufferCapiUnitTest::Configure(AudioBufferFormatType audioType)
572 {
573     format_ = OH_AVFormat_Create();
574     if (format_ == nullptr) {
575         cout << "Fatal: create format failed" << endl;
576         return OH_AVErrCode::AV_ERR_UNKNOWN;
577     }
578     int32_t channelCount = DEFAULT_CHANNEL_COUNT;
579     int32_t sampleRate = DEFAULT_SAMPLE_RATE;
580     if (audioType == AudioBufferFormatType::TYPE_AAC) {
581         OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
582     } else if (audioType == AudioBufferFormatType::TYPE_AMRNB || audioType == AudioBufferFormatType::TYPE_G711MU ||
583         audioType == AudioBufferFormatType::TYPE_APE) {
584         channelCount = 1;
585         sampleRate = SAMPLE_RATE_8K;
586     } else if (audioType == AudioBufferFormatType::TYPE_AMRWB) {
587         channelCount = 1;
588         sampleRate = AMRWB_SAMPLE_RATE;
589     } else if (audioType == AudioBufferFormatType::TYPE_OPUS) {
590         channelCount = DEFAULT_CHANNEL_COUNT;
591         sampleRate = SAMPLE_RATE_8K;
592     }
593     OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AUD_CHANNEL_COUNT, channelCount);
594     OH_AVFormat_SetIntValue(format_, OH_MD_KEY_AUD_SAMPLE_RATE, sampleRate);
595     OH_AVFormat_SetLongValue(format_, OH_MD_KEY_BITRATE, BITS_RATE[(uint32_t)audioType]);
596     if (audioType == AudioBufferFormatType::TYPE_VORBIS || audioType == AudioBufferFormatType::TYPE_COOK) {
597         int64_t extradataSize;
598         if (!inputFile_.is_open()) {
599             cout << "Fatal: file is not open" << endl;
600             return OH_AVErrCode::AV_ERR_UNKNOWN;
601         }
602         inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
603         if (inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0) {
604             cout << "Fatal: read extradataSize bytes error" << endl;
605             return OH_AVErrCode::AV_ERR_UNKNOWN;
606         }
607         char buffer[extradataSize];
608         inputFile_.read(buffer, extradataSize);
609         if (inputFile_.gcount() != extradataSize) {
610             cout << "Fatal: read extradata bytes error" << endl;
611             return OH_AVErrCode::AV_ERR_UNKNOWN;
612         }
613         OH_AVFormat_SetBuffer(format_, OH_MD_KEY_CODEC_CONFIG, (uint8_t *)buffer, extradataSize);
614     }
615     SetTestingFormat(audioType);
616     return OH_AudioCodec_Configure(audioDec_, format_);
617 }
618 
CheckSoFunc()619 int32_t AudioDecoderBufferCapiUnitTest::CheckSoFunc()
620 {
621     soFile_ = std::make_unique<std::ifstream>(OPUS_SO_FILE_PATH, std::ios::binary);
622     if (!soFile_->is_open()) {
623         cout << "Fatal: Open so file failed" << endl;
624         return false;
625     }
626     soFile_->close();
627     return true;
628 }
629 
630 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_CreateByMime_01, TestSize.Level1)
631 {
632     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG.data(), false);
633     EXPECT_NE(nullptr, audioDec_);
634     Release();
635 }
636 
637 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_CreateByName_01, TestSize.Level1)
638 {
639     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_MP3_NAME).data());
640     EXPECT_NE(nullptr, audioDec_);
641     Release();
642 }
643 
644 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Configure_01, TestSize.Level1)
645 {
646     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
647     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
648     Release();
649 }
650 
651 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Configure_02, TestSize.Level1)
652 {
653     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
654     format_ = OH_AVFormat_Create();
655     EXPECT_NE(nullptr, format_);
656 
657     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
658     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
659     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
660         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_MP3]);
661     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
662 
663     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
664     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
665     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
666 
667     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
668     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
669     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal max channel count
670 
671     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
672     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
673     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
674 
675     Release();
676 }
677 
678 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Configure_03, TestSize.Level1)
679 {
680     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
681     format_ = OH_AVFormat_Create();
682     EXPECT_NE(nullptr, format_);
683 
684     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
685     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
686     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
687         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_MP3]);
688     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
689 
690     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
691     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
692     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
693 
694     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
695     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
696     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
697 
698     Release();
699 }
700 
701 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Configure_04, TestSize.Level1)
702 {
703     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
704     format_ = OH_AVFormat_Create();
705     EXPECT_NE(nullptr, format_);
706 
707     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
708     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
709     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
710         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_MP3]);
711     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
712     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT.data(), CHANNEL_LAYOUT);
713     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel layout
714 
715     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
716     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT.data(), ABNORMAL_CHANNEL_LAYOUT);
717     ASSERT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal channel layout
718     Release();
719 }
720 
721 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_SetParameter_01, TestSize.Level1)
722 {
723     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
724     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
725     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
726     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
727     {
728         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0402() 729         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
730     }
731     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
732     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
733     Release();
734 }
735 
736 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_SetParameter_02, TestSize.Level1)
737 {
738     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
739     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
740     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
741     Release();
742 }
743 
744 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Start_01, TestSize.Level1)
745 {
746     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
747     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
748     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
749     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
750     {
751         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0502() 752         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
753     }
754     Release();
755 }
756 
757 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Start_02, TestSize.Level1)
758 {
759     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
760     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
761     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
762     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
763     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
764     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
765     {
766         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0602() 767         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
768     }
769     Release();
770 }
771 
772 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Stop_01, TestSize.Level1)
773 {
774     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
775     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
776     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
777     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
778     sleep(1);
779 
780     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
781     Release();
782 }
783 
784 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Flush_01, TestSize.Level1)
785 {
786     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
787     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
788     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
789     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
790     {
791         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0702() 792         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
793     }
794     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
795     Release();
796 }
797 
798 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Reset_01, TestSize.Level1)
799 {
800     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
801     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
802     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
803     Release();
804 }
805 
806 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Reset_02, TestSize.Level1)
807 {
808     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
809     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
810     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
811     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
812     {
813         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0802() 814         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
815     }
816     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
817     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
818     Release();
819 }
820 
821 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Reset_03, TestSize.Level1)
822 {
823     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
824     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
825     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
826     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
827     {
828         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0902() 829         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
830     }
831     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
832     Release();
833 }
834 
835 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Destroy_01, TestSize.Level1)
836 {
837     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
838     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
839     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
840     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
841     {
842         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0a02() 843         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
844     }
845     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
846     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
847 }
848 
849 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Destroy_02, TestSize.Level1)
850 {
851     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
852     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
853     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
854 
855     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
856 }
857 
858 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_GetOutputFormat_01, TestSize.Level1)
859 {
860     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
861     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
862     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
863 
864     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
865     Release();
866 }
867 
868 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_State_01, TestSize.Level1)
869 {
870     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
871     bool isValid = false;
872     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
873     Release();
874 }
875 
876 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_IsValid_01, TestSize.Level1)
877 {
878     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
879     bool isValid = false;
880     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
881     Release();
882 }
883 
884 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_Prepare_01, TestSize.Level1)
885 {
886     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
887     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
888     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
889     Release();
890 }
891 
892 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_PushInputData_01, TestSize.Level1)
893 {
894     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
895     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
896     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
897     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
898 
899     // case0 传参异常
900     const uint32_t index = 1024;
901     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
902     Release();
903 }
904 
905 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3_ReleaseOutputBuffer_01, TestSize.Level1)
906 {
907     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_MP3));
908     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
909     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
910     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
911 
912     // case0 传参异常
913     const uint32_t index = 1024;
914     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
915     Release();
916 }
917 
918 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_CreateByMime_01, TestSize.Level1)
919 {
920     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC.data(), false);
921     EXPECT_NE(nullptr, audioDec_);
922     Release();
923 }
924 
925 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_CreateByName_01, TestSize.Level1)
926 {
927     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_FLAC_NAME).data());
928     EXPECT_NE(nullptr, audioDec_);
929     Release();
930 }
931 
932 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_01, TestSize.Level1)
933 {
934     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
935     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
936     Release();
937 }
938 
939 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_02, TestSize.Level1)
940 {
941     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
942     format_ = OH_AVFormat_Create();
943     EXPECT_NE(nullptr, format_);
944     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
945     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
946     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
947                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
948     ASSERT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
949     Release();
950 }
951 
952 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_03, TestSize.Level1)
953 {
954     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
955     format_ = OH_AVFormat_Create();
956     EXPECT_NE(nullptr, format_);
957     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
958     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
959     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
960                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
961     ASSERT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
962     Release();
963 }
964 
965 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_04, TestSize.Level1)
966 {
967     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
968     format_ = OH_AVFormat_Create();
969     EXPECT_NE(nullptr, format_);
970     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
971     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
972     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
973                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
974     ASSERT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
975     Release();
976 }
977 
978 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_05, TestSize.Level1)
979 {
980     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
981     format_ = OH_AVFormat_Create();
982     EXPECT_NE(nullptr, format_);
983     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
984     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), FLAC_192K_SAMPLE_RATE);
985     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
986                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
987     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
988     Release();
989 }
990 
991 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_06, TestSize.Level1)
992 {
993     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
994     format_ = OH_AVFormat_Create();
995     EXPECT_NE(nullptr, format_);
996     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
997     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
998     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
999                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
1000     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1001     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1002     Release();
1003 }
1004 
1005 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_07, TestSize.Level1)
1006 {
1007     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1008     format_ = OH_AVFormat_Create();
1009     EXPECT_NE(nullptr, format_);
1010     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1011     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1012     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1013                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
1014     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), FLAC_S24_SAMPLE_FORMAT);
1015     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1016     Release();
1017 }
1018 
1019 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_08, TestSize.Level1)
1020 {
1021     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1022     format_ = OH_AVFormat_Create();
1023     EXPECT_NE(nullptr, format_);
1024     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1025     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1026     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1027                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
1028     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1029     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT.data(), CHANNEL_LAYOUT);
1030     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel layout
1031 
1032     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1033     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT.data(), ABNORMAL_CHANNEL_LAYOUT);
1034     ASSERT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal channel layout
1035     Release();
1036 }
1037 
1038 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Configure_09, TestSize.Level1)
1039 {
1040     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1041     format_ = OH_AVFormat_Create();
1042     EXPECT_NE(nullptr, format_);
1043     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1044     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 8001); // nonstandard sampleRate
1045     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1046     Release();
1047 
1048     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1049     format_ = OH_AVFormat_Create();
1050     EXPECT_NE(nullptr, format_);
1051     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1052     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 300000); // nonstandard sampleRate
1053     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1054     Release();
1055 
1056     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1057     format_ = OH_AVFormat_Create();
1058     EXPECT_NE(nullptr, format_);
1059     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1060     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 7350); // less than min value
1061     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1062     Release();
1063 
1064     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1065     format_ = OH_AVFormat_Create();
1066     EXPECT_NE(nullptr, format_);
1067     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1068     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 400000); // more than max value
1069     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1070     Release();
1071 }
1072 
1073 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_SetParameter_01, TestSize.Level1)
1074 {
1075     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1076     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1077     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1078     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1079     {
1080         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0b02() 1081         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1082     }
1083     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1084     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1085     Release();
1086 }
1087 
1088 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_SetParameter_02, TestSize.Level1)
1089 {
1090     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1091     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1092     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1093     Release();
1094 }
1095 
1096 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Start_01, TestSize.Level1)
1097 {
1098     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1099     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1100     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1101     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1102     {
1103         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0c02() 1104         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1105     }
1106     Release();
1107 }
1108 
1109 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Start_02, TestSize.Level1)
1110 {
1111     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1112     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1113     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1114     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1115     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1116     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
1117     {
1118         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0d02() 1119         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1120     }
1121     Release();
1122 }
1123 
1124 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Stop_01, TestSize.Level1)
1125 {
1126     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1127     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1128     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1129     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1130     sleep(1);
1131 
1132     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1133     Release();
1134 }
1135 
1136 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Flush_01, TestSize.Level1)
1137 {
1138     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1139     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1140     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1141     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1142     {
1143         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0e02() 1144         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1145     }
1146     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1147     Release();
1148 }
1149 
1150 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Reset_01, TestSize.Level1)
1151 {
1152     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1153     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1154     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1155     Release();
1156 }
1157 
1158 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Reset_02, TestSize.Level1)
1159 {
1160     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1161     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1162     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1163     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1164     {
1165         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae0f02() 1166         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1167     }
1168     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1169     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1170     Release();
1171 }
1172 
1173 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Reset_03, TestSize.Level1)
1174 {
1175     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1176     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1177     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1178     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1179     {
1180         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1002() 1181         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1182     }
1183     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1184     Release();
1185 }
1186 
1187 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Destroy_01, TestSize.Level1)
1188 {
1189     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1190     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1191     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1192     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1193     {
1194         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1102() 1195         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1196     }
1197     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1198     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1199 }
1200 
1201 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Destroy_02, TestSize.Level1)
1202 {
1203     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1204     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1205     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1206 
1207     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1208 }
1209 
1210 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_GetOutputFormat_01, TestSize.Level1)
1211 {
1212     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1213     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1214     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1215 
1216     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
1217     Release();
1218 }
1219 
1220 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_IsValid_01, TestSize.Level1)
1221 {
1222     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1223     bool isValid = false;
1224     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
1225     Release();
1226 }
1227 
1228 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_Prepare_01, TestSize.Level1)
1229 {
1230     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1231     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1232     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
1233     Release();
1234 }
1235 
1236 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_PushInputData_01, TestSize.Level1)
1237 {
1238     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1239     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1240     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1241     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1242 
1243     // case0 传参异常
1244     const uint32_t index = 1024;
1245     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
1246     Release();
1247 }
1248 
1249 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_ReleaseOutputBuffer_01, TestSize.Level1)
1250 {
1251     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_FLAC));
1252     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1253     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
1254     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1255 
1256     // case0 传参异常
1257     const uint32_t index = 1024;
1258     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
1259     Release();
1260 }
1261 
1262 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Flac_192k_01, TestSize.Level1)
1263 {
1264     inputFile_.open(INPUT_FLAC_192K_FILE_PATH, std::ios::binary);
1265     ASSERT_EQ(true, inputFile_.is_open());
1266     pcmOutputFile_.open(OUTPUT_FLAC_192K_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
1267     ASSERT_EQ(true, pcmOutputFile_.is_open());
1268     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
1269     format_ = OH_AVFormat_Create();
1270     EXPECT_NE(nullptr, format_);
1271     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1272     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), FLAC_192K_SAMPLE_RATE);
1273     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1274     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1275                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
1276     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1277     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1278     {
1279         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1202() 1280         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1281     }
1282     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1283     Release();
1284 }
1285 
1286 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_CreateByMime_01, TestSize.Level1)
1287 {
1288     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC.data(), false);
1289     EXPECT_NE(nullptr, audioDec_);
1290     Release();
1291 }
1292 
1293 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_CreateByName_01, TestSize.Level1)
1294 {
1295     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AAC_NAME).data());
1296     EXPECT_NE(nullptr, audioDec_);
1297     Release();
1298 }
1299 
1300 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Configure_01, TestSize.Level1)
1301 {
1302     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1303     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1304     Release();
1305 }
1306 
1307 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Configure_02, TestSize.Level1)
1308 {
1309     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1310     format_ = OH_AVFormat_Create();
1311     EXPECT_NE(nullptr, format_);
1312 
1313     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1314     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1315     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1316     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1317         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_AAC]);
1318     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AAC_IS_ADTS.data(), ABNORMAL_AAC_TYPE);
1319     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal aac type
1320 
1321     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1322     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AAC_IS_ADTS.data(), DEFAULT_AAC_TYPE);
1323     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal aac type
1324 
1325     Release();
1326 }
1327 
1328 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Configure_03, TestSize.Level1)
1329 {
1330     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1331     format_ = OH_AVFormat_Create();
1332     EXPECT_NE(nullptr, format_);
1333 
1334     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1335     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AAC_IS_ADTS.data(), DEFAULT_AAC_TYPE);
1336     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1337     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1338         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_AAC]);
1339     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
1340 
1341     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1342     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
1343     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
1344 
1345     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1346     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
1347     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal max channel count
1348 
1349     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1350     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1351     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
1352 
1353     Release();
1354 }
1355 
1356 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Configure_04, TestSize.Level1)
1357 {
1358     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1359     format_ = OH_AVFormat_Create();
1360     EXPECT_NE(nullptr, format_);
1361 
1362     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1363     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AAC_IS_ADTS.data(), DEFAULT_AAC_TYPE);
1364     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1365     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1366         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_AAC]);
1367     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
1368 
1369     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1370     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
1371     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
1372 
1373     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1374     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1375     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
1376 
1377     Release();
1378 }
1379 
1380 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Configure_05, TestSize.Level1)
1381 {
1382     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1383     format_ = OH_AVFormat_Create();
1384     EXPECT_NE(nullptr, format_);
1385 
1386     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AAC_IS_ADTS.data(), DEFAULT_AAC_TYPE);
1387     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1388     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1389     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1390         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_AAC]);
1391     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), ABNORMAL_SAMPLE_FORMAT);
1392     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // default change to s16le
1393 
1394     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1395     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1396     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample format
1397 
1398     Release();
1399 }
1400 
1401 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_SetParameter_01, TestSize.Level1)
1402 {
1403     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1404     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1405     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1406     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1407     {
1408         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1302() 1409         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1410     }
1411     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1412     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1413     Release();
1414 }
1415 
1416 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_SetParameter_02, TestSize.Level1)
1417 {
1418     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1419     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1420     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1421     Release();
1422 }
1423 
1424 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Start_01, TestSize.Level1)
1425 {
1426     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1427     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1428     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1429     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1430     {
1431         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1402() 1432         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1433     }
1434     Release();
1435 }
1436 
1437 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Start_02, TestSize.Level1)
1438 {
1439     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1440     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1441     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1442     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1443     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1444     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
1445     {
1446         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1502() 1447         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1448     }
1449     Release();
1450 }
1451 
1452 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Stop_01, TestSize.Level1)
1453 {
1454     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1455     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1456     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1457     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1458     sleep(1);
1459 
1460     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1461     Release();
1462 }
1463 
1464 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Flush_01, TestSize.Level1)
1465 {
1466     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1467     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1468     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1469     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1470     {
1471         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1602() 1472         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1473     }
1474     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1475     Release();
1476 }
1477 
1478 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Reset_01, TestSize.Level1)
1479 {
1480     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1481     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1482     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1483     Release();
1484 }
1485 
1486 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Reset_02, TestSize.Level1)
1487 {
1488     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1489     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1490     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1491     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1492     {
1493         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1702() 1494         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1495     }
1496     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1497     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1498     Release();
1499 }
1500 
1501 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Reset_03, TestSize.Level1)
1502 {
1503     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1504     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1505     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1506     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1507     {
1508         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1802() 1509         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1510     }
1511     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1512     Release();
1513 }
1514 
1515 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Destroy_01, TestSize.Level1)
1516 {
1517     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1518     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1519     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1520     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1521     {
1522         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1902() 1523         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1524     }
1525     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1526     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1527 }
1528 
1529 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Destroy_02, TestSize.Level1)
1530 {
1531     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1532     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1533     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1534 
1535     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1536 }
1537 
1538 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_GetOutputFormat_01, TestSize.Level1)
1539 {
1540     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1541     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1542     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1543 
1544     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
1545     Release();
1546 }
1547 
1548 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_IsValid_01, TestSize.Level1)
1549 {
1550     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1551     bool isValid = false;
1552     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
1553     Release();
1554 }
1555 
1556 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_Prepare_01, TestSize.Level1)
1557 {
1558     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1559     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1560     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
1561     Release();
1562 }
1563 
1564 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_PushInputData_01, TestSize.Level1)
1565 {
1566     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1567     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1568     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1569     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1570 
1571     // case0 传参异常
1572     const uint32_t index = 1024;
1573     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
1574     Release();
1575 }
1576 
1577 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_ReleaseOutputBuffer_01, TestSize.Level1)
1578 {
1579     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AAC));
1580     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
1581     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
1582     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1583 
1584     // case0 传参异常
1585     const uint32_t index = 1024;
1586     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
1587     Release();
1588 }
1589 
1590 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_CreateByMime_01, TestSize.Level1)
1591 {
1592     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VORBIS.data(), false);
1593     EXPECT_NE(nullptr, audioDec_);
1594     Release();
1595 }
1596 
1597 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_CreateByName_01, TestSize.Level1)
1598 {
1599     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_VORBIS_NAME).data());
1600     EXPECT_NE(nullptr, audioDec_);
1601     Release();
1602 }
1603 
1604 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Configure_01, TestSize.Level1)
1605 {
1606     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1607     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1608     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1609     Release();
1610 }
1611 
1612 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Configure_02, TestSize.Level1)
1613 {
1614     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1615     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1616     format_ = OH_AVFormat_Create();
1617     EXPECT_NE(nullptr, format_);
1618 
1619     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1620     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1621     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1622         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_VORBIS]);
1623     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
1624 
1625     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1626     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
1627     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
1628 
1629     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1630     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
1631     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal max channel count
1632 
1633     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1634     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1635     int64_t extradataSize;
1636     EXPECT_EQ(true, inputFile_.is_open());
1637     inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
1638     EXPECT_EQ(false, inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0);
1639     char buffer[extradataSize];
1640     inputFile_.read(buffer, extradataSize);
1641     EXPECT_EQ(false, inputFile_.gcount() != extradataSize);
1642     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_CODEC_CONFIG.data(), (uint8_t *)buffer,
1643                             extradataSize);
1644     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
1645 
1646     Release();
1647 }
1648 
1649 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Configure_03, TestSize.Level1)
1650 {
1651     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1652     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1653     format_ = OH_AVFormat_Create();
1654     EXPECT_NE(nullptr, format_);
1655 
1656     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1657     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1658     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1659         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_VORBIS]);
1660     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
1661 
1662     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1663     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
1664     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
1665 
1666     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1667     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1668     int64_t extradataSize;
1669     EXPECT_EQ(true, inputFile_.is_open());
1670     inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
1671     EXPECT_EQ(false, inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0);
1672     char buffer[extradataSize];
1673     inputFile_.read(buffer, extradataSize);
1674     EXPECT_EQ(false, inputFile_.gcount() != extradataSize);
1675     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_CODEC_CONFIG.data(), (uint8_t *)buffer,
1676                             extradataSize);
1677     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
1678 
1679     Release();
1680 }
1681 
1682 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Configure_04, TestSize.Level1)
1683 {
1684     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1685     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1686     format_ = OH_AVFormat_Create();
1687     EXPECT_NE(nullptr, format_);
1688 
1689     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1690     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1691     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
1692         BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_VORBIS]);
1693     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), ABNORMAL_SAMPLE_FORMAT);
1694     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample format
1695 
1696     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1697     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1698     int64_t extradataSize;
1699     EXPECT_EQ(true, inputFile_.is_open());
1700     inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
1701     EXPECT_EQ(false, inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0);
1702     char buffer[extradataSize];
1703     inputFile_.read(buffer, extradataSize);
1704     EXPECT_EQ(false, inputFile_.gcount() != extradataSize);
1705     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_CODEC_CONFIG.data(), (uint8_t *)buffer,
1706                             extradataSize);
1707     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample format
1708 
1709     Release();
1710 }
1711 
1712 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_SetParameter_01, TestSize.Level1)
1713 {
1714     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1715     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1716     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1717     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1718     {
1719         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1a02() 1720         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1721     }
1722     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1723     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1724     Release();
1725 }
1726 
1727 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_SetParameter_02, TestSize.Level1)
1728 {
1729     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1730     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1731     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1732     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
1733     Release();
1734 }
1735 
1736 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Start_01, TestSize.Level1)
1737 {
1738     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1739     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1740     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1741     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1742     {
1743         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1b02() 1744         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1745     }
1746     Release();
1747 }
1748 
1749 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Start_02, TestSize.Level1)
1750 {
1751     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1752     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1753     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1754     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1755     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1756     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
1757     {
1758         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1c02() 1759         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1760     }
1761     Release();
1762 }
1763 
1764 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Stop_01, TestSize.Level1)
1765 {
1766     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1767     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1768     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1769     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1770     sleep(1);
1771 
1772     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1773     Release();
1774 }
1775 
1776 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Flush_01, TestSize.Level1)
1777 {
1778     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1779     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1780     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1781     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1782     {
1783         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1d02() 1784         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1785     }
1786     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
1787     Release();
1788 }
1789 
1790 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Reset_01, TestSize.Level1)
1791 {
1792     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1793     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1794     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1795     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1796     Release();
1797 }
1798 
1799 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Reset_02, TestSize.Level1)
1800 {
1801     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1802     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1803     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1804     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1805     {
1806         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1e02() 1807         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1808     }
1809     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1810     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1811     Release();
1812 }
1813 
1814 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Reset_03, TestSize.Level1)
1815 {
1816     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1817     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1818     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1819     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1820     {
1821         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae1f02() 1822         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1823     }
1824     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1825     Release();
1826 }
1827 
1828 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Destroy_01, TestSize.Level1)
1829 {
1830     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1831     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1832     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1833     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1834     {
1835         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2002() 1836         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
1837     }
1838     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
1839     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1840 }
1841 
1842 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Destroy_02, TestSize.Level1)
1843 {
1844     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1845     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1846     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1847 
1848     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
1849 }
1850 
1851 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_GetOutputFormat_01, TestSize.Level1)
1852 {
1853     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1854     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1855     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1856 
1857     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
1858     Release();
1859 }
1860 
1861 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_IsValid_01, TestSize.Level1)
1862 {
1863     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1864     bool isValid = false;
1865     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
1866     Release();
1867 }
1868 
1869 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_Prepare_01, TestSize.Level1)
1870 {
1871     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1872     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1873     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1874     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
1875     Release();
1876 }
1877 
1878 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_PushInputData_01, TestSize.Level1)
1879 {
1880     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1881     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1882     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1883     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1884 
1885     // case0 传参异常
1886     const uint32_t index = 1024;
1887     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
1888     Release();
1889 }
1890 
1891 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Vorbis_ReleaseOutputBuffer_01, TestSize.Level1)
1892 {
1893     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_VORBIS));
1894     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1895     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
1896     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
1897 
1898     // case0 传参异常
1899     const uint32_t index = 1024;
1900     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
1901     Release();
1902 }
1903 
1904 HWTEST_F(AudioDecoderBufferCapiUnitTest, vorbisMissingHeader, TestSize.Level1)
1905 {
1906     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1907     format_ = OH_AVFormat_Create();
1908     EXPECT_NE(nullptr, format_);
1909     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1910     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1911     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_MAX_INPUT_SIZE.data(), ABNORMAL_MAX_INPUT_SIZE);
1912     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1913     Release();
1914 }
1915 
1916 HWTEST_F(AudioDecoderBufferCapiUnitTest, vorbisMissingIdHeader, TestSize.Level1)
1917 {
1918     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1919     format_ = OH_AVFormat_Create();
1920     EXPECT_NE(nullptr, format_);
1921     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1922     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1923     uint8_t buffer[1];
1924     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_IDENTIFICATION_HEADER.data(), buffer, 1);
1925     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
1926     Release();
1927 }
1928 
1929 HWTEST_F(AudioDecoderBufferCapiUnitTest, vorbisInvalidHeader, TestSize.Level1)
1930 {
1931     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
1932     format_ = OH_AVFormat_Create();
1933     EXPECT_NE(nullptr, format_);
1934     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
1935     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
1936     uint8_t buffer[1];
1937     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_IDENTIFICATION_HEADER.data(), buffer, 1);
1938     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_SETUP_HEADER.data(), buffer, 1);
1939     EXPECT_EQ(OH_AVErrCode::AV_ERR_UNKNOWN, OH_AudioCodec_Configure(audioDec_, format_));
1940     Release();
1941 }
1942 
1943 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_CreateByMime_01, TestSize.Level1)
1944 {
1945     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRWB.data(), false);
1946     EXPECT_NE(nullptr, audioDec_);
1947     Release();
1948 }
1949 
1950 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_CreateByName_01, TestSize.Level1)
1951 {
1952     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AMRWB_NAME).data());
1953     EXPECT_NE(nullptr, audioDec_);
1954     Release();
1955 }
1956 
1957 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Configure_01, TestSize.Level1)
1958 {
1959     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
1960     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
1961     Release();
1962 }
1963 
1964 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Configure_02, TestSize.Level1)
1965 {
1966     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
1967     format_ = OH_AVFormat_Create();
1968     EXPECT_NE(nullptr, format_);
1969 
1970     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1971     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
1972     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
1973 
1974     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1975     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
1976     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
1977 
1978     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1979     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
1980     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
1981 
1982     Release();
1983 }
1984 
1985 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Configure_03, TestSize.Level1)
1986 {
1987     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
1988     format_ = OH_AVFormat_Create();
1989     EXPECT_NE(nullptr, format_);
1990 
1991     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
1992     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
1993     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
1994 
1995     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
1996     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
1997     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
1998 
1999     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2000     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2001     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
2002 
2003     Release();
2004 }
2005 
2006 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Configure_04, TestSize.Level1)
2007 {
2008     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2009     format_ = OH_AVFormat_Create();
2010     EXPECT_NE(nullptr, format_);
2011 
2012     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2013     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2014     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), ABNORMAL_SAMPLE_FORMAT);
2015     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample format
2016 
2017     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2018     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
2019     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample format
2020 
2021     Release();
2022 }
2023 
2024 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_SetParameter_01, TestSize.Level1)
2025 {
2026     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2027     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2028     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2029     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2030     {
2031         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2102() 2032         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2033     }
2034     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2035     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2036     Release();
2037 }
2038 
2039 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_SetParameter_02, TestSize.Level1)
2040 {
2041     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2042     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2043     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2044     Release();
2045 }
2046 
2047 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Start_01, TestSize.Level1)
2048 {
2049     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2050     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2051     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2052     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2053     {
2054         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2202() 2055         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2056     }
2057     Release();
2058 }
2059 
2060 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Start_02, TestSize.Level1)
2061 {
2062     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2063     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2064     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2065     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2066     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2067     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
2068     {
2069         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2302() 2070         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2071     }
2072     Release();
2073 }
2074 
2075 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Stop_01, TestSize.Level1)
2076 {
2077     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2078     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2079     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2080     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2081     sleep(1);
2082 
2083     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2084     Release();
2085 }
2086 
2087 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Flush_01, TestSize.Level1)
2088 {
2089     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2090     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2091     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2092     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2093     {
2094         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2402() 2095         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2096     }
2097     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2098     Release();
2099 }
2100 
2101 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Reset_01, TestSize.Level1)
2102 {
2103     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2104     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2105     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2106     Release();
2107 }
2108 
2109 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Reset_02, TestSize.Level1)
2110 {
2111     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2112     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2113     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2114     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2115     {
2116         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2502() 2117         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2118     }
2119     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2120     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2121     Release();
2122 }
2123 
2124 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Reset_03, TestSize.Level1)
2125 {
2126     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2127     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2128     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2129     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2130     {
2131         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2602() 2132         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2133     }
2134     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2135     Release();
2136 }
2137 
2138 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Destroy_01, TestSize.Level1)
2139 {
2140     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2141     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2142     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2143     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2144     {
2145         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2702() 2146         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2147     }
2148     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2149     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2150 }
2151 
2152 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Destroy_02, TestSize.Level1)
2153 {
2154     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2155     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2156     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2157 
2158     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2159 }
2160 
2161 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_GetOutputFormat_01, TestSize.Level1)
2162 {
2163     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2164     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2165     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2166 
2167     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
2168     Release();
2169 }
2170 
2171 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_IsValid_01, TestSize.Level1)
2172 {
2173     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2174     bool isValid = false;
2175     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
2176     Release();
2177 }
2178 
2179 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_Prepare_01, TestSize.Level1)
2180 {
2181     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2182     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2183     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
2184     Release();
2185 }
2186 
2187 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_PushInputData_01, TestSize.Level1)
2188 {
2189     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2190     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2191     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2192     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2193 
2194     // case0 传参异常
2195     const uint32_t index = 1024;
2196     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
2197     Release();
2198 }
2199 
2200 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrwb_ReleaseOutputBuffer_01, TestSize.Level1)
2201 {
2202     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRWB));
2203     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRWB));
2204     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRWB));
2205     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2206 
2207     // case0 传参异常
2208     const uint32_t index = 1024;
2209     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
2210     Release();
2211 }
2212 
2213 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_CreateByMime_01, TestSize.Level1)
2214 {
2215     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRNB.data(), false);
2216     EXPECT_NE(nullptr, audioDec_);
2217     Release();
2218 }
2219 
2220 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_CreateByName_01, TestSize.Level1)
2221 {
2222     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_AMRNB_NAME).data());
2223     EXPECT_NE(nullptr, audioDec_);
2224     Release();
2225 }
2226 
2227 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Configure_01, TestSize.Level1)
2228 {
2229     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2230     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2231     Release();
2232 }
2233 
2234 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Configure_02, TestSize.Level1)
2235 {
2236     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2237     format_ = OH_AVFormat_Create();
2238     EXPECT_NE(nullptr, format_);
2239 
2240     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
2241     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), SAMPLE_RATE_8K);
2242     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
2243 
2244     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2245     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
2246     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
2247 
2248     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2249     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2250     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
2251 
2252     Release();
2253 }
2254 
2255 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Configure_03, TestSize.Level1)
2256 {
2257     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2258     format_ = OH_AVFormat_Create();
2259     EXPECT_NE(nullptr, format_);
2260 
2261     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
2262     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2263     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
2264 
2265     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2266     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
2267     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
2268 
2269     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2270     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), SAMPLE_RATE_8K);
2271     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
2272 
2273     Release();
2274 }
2275 
2276 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_SetParameter_01, TestSize.Level1)
2277 {
2278     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2279     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2280     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2281     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2282     {
2283         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2802() 2284         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2285     }
2286     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2287     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2288     Release();
2289 }
2290 
2291 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_SetParameter_02, TestSize.Level1)
2292 {
2293     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2294     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2295     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2296     Release();
2297 }
2298 
2299 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Start_01, TestSize.Level1)
2300 {
2301     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2302     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2303     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2304     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2305     {
2306         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2902() 2307         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2308     }
2309     Release();
2310 }
2311 
2312 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Start_02, TestSize.Level1)
2313 {
2314     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2315     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2316     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2317     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2318     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2319     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
2320     {
2321         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2a02() 2322         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2323     }
2324     Release();
2325 }
2326 
2327 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Stop_01, TestSize.Level1)
2328 {
2329     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2330     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2331     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2332     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2333     sleep(1);
2334 
2335     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2336     Release();
2337 }
2338 
2339 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Flush_01, TestSize.Level1)
2340 {
2341     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2342     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2343     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2344     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2345     {
2346         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2b02() 2347         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2348     }
2349     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2350     Release();
2351 }
2352 
2353 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Reset_01, TestSize.Level1)
2354 {
2355     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2356     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2357     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2358     Release();
2359 }
2360 
2361 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Reset_02, TestSize.Level1)
2362 {
2363     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2364     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2365     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2366     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2367     {
2368         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2c02() 2369         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2370     }
2371     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2372     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2373     Release();
2374 }
2375 
2376 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Reset_03, TestSize.Level1)
2377 {
2378     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2379     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2380     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2381     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2382     {
2383         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2d02() 2384         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2385     }
2386     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2387     Release();
2388 }
2389 
2390 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Destroy_01, TestSize.Level1)
2391 {
2392     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2393     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2394     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2395     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2396     {
2397         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2e02() 2398         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2399     }
2400     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2401     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2402 }
2403 
2404 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Destroy_02, TestSize.Level1)
2405 {
2406     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2407     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2408     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2409 
2410     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2411 }
2412 
2413 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_GetOutputFormat_01, TestSize.Level1)
2414 {
2415     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2416     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2417     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2418 
2419     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
2420     Release();
2421 }
2422 
2423 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_IsValid_01, TestSize.Level1)
2424 {
2425     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2426     bool isValid = false;
2427     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
2428     Release();
2429 }
2430 
2431 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_Prepare_01, TestSize.Level1)
2432 {
2433     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2434     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2435     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
2436     Release();
2437 }
2438 
2439 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_PushInputData_01, TestSize.Level1)
2440 {
2441     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2442     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2443     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2444     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2445 
2446     // case0 传参异常
2447     const uint32_t index = 1024;
2448     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
2449     Release();
2450 }
2451 
2452 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Amrnb_ReleaseOutputBuffer_01, TestSize.Level1)
2453 {
2454     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_AMRNB));
2455     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AMRNB));
2456     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AMRNB));
2457     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2458 
2459     // case0 传参异常
2460     const uint32_t index = 1024;
2461     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
2462     Release();
2463 }
2464 
2465 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_CreateByMime_01, TestSize.Level1)
2466 {
2467     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711MU.data(), false);
2468     EXPECT_NE(nullptr, audioDec_);
2469     Release();
2470 }
2471 
2472 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_CreateByName_01, TestSize.Level1)
2473 {
2474     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_G711MU_NAME).data());
2475     EXPECT_NE(nullptr, audioDec_);
2476     Release();
2477 }
2478 
2479 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Configure_01, TestSize.Level1)
2480 {
2481     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2482     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2483     Release();
2484 }
2485 
2486 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_SetParameter_01, TestSize.Level1)
2487 {
2488     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2489     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2490     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2491     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2492     {
2493         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae2f02() 2494         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2495     }
2496     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2497     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2498     Release();
2499 }
2500 
2501 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_SetParameter_02, TestSize.Level1)
2502 {
2503     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2504     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2505     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2506     Release();
2507 }
2508 
2509 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Start_01, TestSize.Level1)
2510 {
2511     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2512     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2513     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2514     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2515     {
2516         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3002() 2517         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2518     }
2519     Release();
2520 }
2521 
2522 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Start_02, TestSize.Level1)
2523 {
2524     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2525     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2526     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2527     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2528     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2529     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
2530     {
2531         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3102() 2532         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2533     }
2534     Release();
2535 }
2536 
2537 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Stop_01, TestSize.Level1)
2538 {
2539     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2540     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2541     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2542     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2543     sleep(1);
2544 
2545     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2546     Release();
2547 }
2548 
2549 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Flush_01, TestSize.Level1)
2550 {
2551     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2552     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2553     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2554     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2555     {
2556         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3202() 2557         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2558     }
2559     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2560     Release();
2561 }
2562 
2563 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Reset_01, TestSize.Level1)
2564 {
2565     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2566     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2567     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2568     Release();
2569 }
2570 
2571 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Reset_02, TestSize.Level1)
2572 {
2573     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2574     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2575     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2576     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2577     {
2578         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3302() 2579         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2580     }
2581     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2582     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2583     Release();
2584 }
2585 
2586 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Reset_03, TestSize.Level1)
2587 {
2588     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2589     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2590     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2591     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2592     {
2593         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3402() 2594         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2595     }
2596     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2597     Release();
2598 }
2599 
2600 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Destroy_01, TestSize.Level1)
2601 {
2602     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2603     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2604     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2605     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2606     {
2607         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3502() 2608         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2609     }
2610     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2611     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2612 }
2613 
2614 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Destroy_02, TestSize.Level1)
2615 {
2616     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2617     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2618     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2619 
2620     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2621 }
2622 
2623 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_GetOutputFormat_01, TestSize.Level1)
2624 {
2625     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2626     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2627     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2628 
2629     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
2630     Release();
2631 }
2632 
2633 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_IsValid_01, TestSize.Level1)
2634 {
2635     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2636     bool isValid = false;
2637     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
2638     Release();
2639 }
2640 
2641 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_Prepare_01, TestSize.Level1)
2642 {
2643     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2644     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2645     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
2646     Release();
2647 }
2648 
2649 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_PushInputData_01, TestSize.Level1)
2650 {
2651     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2652     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2653     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2654     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2655 
2656     // case0 传参异常
2657     const uint32_t index = 1024;
2658     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
2659     Release();
2660 }
2661 
2662 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_G711mu_ReleaseOutputBuffer_01, TestSize.Level1)
2663 {
2664     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_G711MU));
2665     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU));
2666     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_G711MU));
2667     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2668 
2669     // case0 传参异常
2670     const uint32_t index = 1024;
2671     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
2672     Release();
2673 }
2674 
2675 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_g711muCheckChannelCount, TestSize.Level1)
2676 {
2677     CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU);
2678     format_ = OH_AVFormat_Create();
2679     EXPECT_NE(nullptr, format_);
2680     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), SAMPLE_RATE_8K);
2681     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
2682 
2683     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2684     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
2685     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // illegal channel count
2686 
2687     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2688     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2689     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
2690 
2691     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2692 }
2693 
2694 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_g711muCheckSampleRate, TestSize.Level1)
2695 {
2696     CreateCodecFunc(AudioBufferFormatType::TYPE_G711MU);
2697     format_ = OH_AVFormat_Create();
2698     EXPECT_NE(nullptr, format_);
2699     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2700     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
2701 
2702     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2703     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
2704     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // illegal sample rate
2705 
2706     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2707     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), SAMPLE_RATE_8K);
2708     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
2709 
2710     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
2711 }
2712 
2713 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_CreateByMime_01, TestSize.Level1)
2714 {
2715     if (!CheckSoFunc()) {
2716         return;
2717     }
2718     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_OPUS.data(), false);
2719     EXPECT_NE(nullptr, audioDec_);
2720     Release();
2721 }
2722 
2723 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_CreateByName_01, TestSize.Level1)
2724 {
2725     if (!CheckSoFunc()) {
2726         return;
2727     }
2728     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_OPUS_NAME).data());
2729     EXPECT_NE(nullptr, audioDec_);
2730     Release();
2731 }
2732 
2733 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_Configure_01, TestSize.Level1)
2734 {
2735     if (!CheckSoFunc()) {
2736         return;
2737     }
2738     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2739     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2740     Release();
2741 }
2742 
2743 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_SetParameter_01, TestSize.Level1)
2744 {
2745     if (!CheckSoFunc()) {
2746         return;
2747     }
2748     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2749     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2750     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2751     Release();
2752 }
2753 
2754 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_Stop_01, TestSize.Level1)
2755 {
2756     if (!CheckSoFunc()) {
2757         return;
2758     }
2759     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_OPUS));
2760     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2761     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2762     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2763     sleep(1);
2764 
2765     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2766     Release();
2767 }
2768 
2769 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_Flush_01, TestSize.Level1)
2770 {
2771     if (!CheckSoFunc()) {
2772         return;
2773     }
2774     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_OPUS));
2775     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2776     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2777     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2778     {
2779         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3602() 2780         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2781     }
2782     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2783     Release();
2784 }
2785 
2786 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_Reset_01, TestSize.Level1)
2787 {
2788     if (!CheckSoFunc()) {
2789         return;
2790     }
2791     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2792     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2793     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2794     Release();
2795 }
2796 
2797 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_GetOutputFormat_01, TestSize.Level1)
2798 {
2799     if (!CheckSoFunc()) {
2800         return;
2801     }
2802     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_OPUS));
2803     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2804     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2805 
2806     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
2807     Release();
2808 }
2809 
2810 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_IsValid_01, TestSize.Level1)
2811 {
2812     if (!CheckSoFunc()) {
2813         return;
2814     }
2815     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2816     bool isValid = false;
2817     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
2818     Release();
2819 }
2820 
2821 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Opus_Prepare_01, TestSize.Level1)
2822 {
2823     if (!CheckSoFunc()) {
2824         return;
2825     }
2826     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_OPUS));
2827     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_OPUS));
2828     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
2829     Release();
2830 }
2831 
2832 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_CreateByMime_01, TestSize.Level1)
2833 {
2834     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_APE.data(), false);
2835     EXPECT_NE(nullptr, audioDec_);
2836     Release();
2837 }
2838 
2839 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_CreateByName_01, TestSize.Level1)
2840 {
2841     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_APE_NAME).data());
2842     EXPECT_NE(nullptr, audioDec_);
2843     Release();
2844 }
2845 
2846 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_01, TestSize.Level1)
2847 {
2848     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2849     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2850     Release();
2851 }
2852 
2853 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_02, TestSize.Level1)
2854 {
2855     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2856     format_ = OH_AVFormat_Create();
2857     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2858     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), -1); // use -1 as error input
2859     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
2860     Release();
2861 }
2862 
2863 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_03, TestSize.Level1)
2864 {
2865     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2866     format_ = OH_AVFormat_Create();
2867     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), -1); // use -1 as error input
2868     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2869     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
2870     Release();
2871 }
2872 
2873 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_04, TestSize.Level1)
2874 {
2875     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2876     format_ = OH_AVFormat_Create();
2877     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2878     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2879     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
2880                                 AudioSampleFormat::SAMPLE_U8P);
2881     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
2882     Release();
2883 }
2884 
2885 
2886 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_05, TestSize.Level1)
2887 {
2888     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2889     format_ = OH_AVFormat_Create();
2890     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2891     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 16000);
2892     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
2893                                 AudioSampleFormat::SAMPLE_S32LE);
2894     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
2895     Release();
2896 }
2897 
2898 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_APE_Configure_06, TestSize.Level1)
2899 {
2900     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2901     format_ = OH_AVFormat_Create();
2902     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ONE_CHANNEL_COUNT);
2903     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 0);
2904     OH_AudioCodec_Configure(audioDec_, format_);
2905     Release();
2906 }
2907 
2908 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_SetParameter_01, TestSize.Level1)
2909 {
2910     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2911     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2912     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2913     Release();
2914 }
2915 
2916 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_SetParameter_02, TestSize.Level1)
2917 {
2918     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2919     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), 1);
2920     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), 0);
2921     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
2922                                 AudioSampleFormat::SAMPLE_S16LE);
2923     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2924     Release();
2925 }
2926 
2927 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_SetParameter_03, TestSize.Level1)
2928 {
2929     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2930     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), 1);
2931     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2932     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
2933                                 AudioSampleFormat::SAMPLE_U8);
2934     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2935     Release();
2936 }
2937 
2938 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_SetParameter_04, TestSize.Level1)
2939 {
2940     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2941     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), 1);
2942     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), AMRWB_SAMPLE_RATE);
2943     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
2944                                 AudioSampleFormat::SAMPLE_S32LE);
2945     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
2946     Release();
2947 }
2948 
2949 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_Stop_01, TestSize.Level1)
2950 {
2951     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_APE));
2952     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2953     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2954     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2955     sleep(1);
2956 
2957     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
2958     Release();
2959 }
2960 
2961 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_Flush_01, TestSize.Level1)
2962 {
2963     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_APE));
2964     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2965     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2966     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
2967     {
2968         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3702() 2969         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
2970     }
2971     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
2972     Release();
2973 }
2974 
2975 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_Reset_01, TestSize.Level1)
2976 {
2977     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2978     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2979     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
2980     Release();
2981 }
2982 
2983 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_GetOutputFormat_01, TestSize.Level1)
2984 {
2985     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_APE));
2986     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2987     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
2988 
2989     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
2990     Release();
2991 }
2992 
2993 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_IsValid_01, TestSize.Level1)
2994 {
2995     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
2996     bool isValid = false;
2997     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
2998     Release();
2999 }
3000 
3001 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Ape_Prepare_01, TestSize.Level1)
3002 {
3003     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_APE));
3004     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_APE));
3005     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
3006     Release();
3007 }
3008 
3009 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Aac_SetDecryptionConfig_01, TestSize.Level1)
3010 {
3011 #ifdef SUPPORT_DRM
3012     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
3013     std::shared_ptr<MediaKeySystemCapiMock> mediaKeySystemMock = std::make_shared<MediaKeySystemCapiMock>();
3014     mediaKeySystemMock->CreateMediaKeySystem();
3015     mediaKeySystemMock->CreateMediaKeySession();
3016 
3017     bool isSecure = false;
3018     int32_t ret = OH_AudioCodec_SetDecryptionConfig(audioDec_, mediaKeySystemMock->GetMediaKeySession(), isSecure);
3019     if (ret != OH_AVErrCode::AV_ERR_OK && mediaKeySystemMock->GetMediaKeySession() == nullptr) {
3020         Release();
3021         return;
3022     }
3023     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, ret);
3024     Release();
3025 #endif
3026 }
3027 
3028 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_AacLcFormatChanged, TestSize.Level1)
3029 {
3030     isTestingFormat_ = true;
3031     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_AAC_LC_ADTS_FILE_PATH, OUTPUT_AAC_LC_ADTS_FILE_PATH));
3032     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
3033     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
3034     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3035     {
3036         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3802() 3037         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3038     }
3039     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3040     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3041     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3042     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3043     Release();
3044 }
3045 
3046 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_AacHeFormatChanged, TestSize.Level1)
3047 {
3048     isTestingFormat_ = true;
3049     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_AAC_HE_ADTS_FILE_PATH, OUTPUT_AAC_HE_ADTS_FILE_PATH));
3050     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
3051     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
3052     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3053     {
3054         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3902() 3055         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3056     }
3057     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3058     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3059     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3060     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3061     Release();
3062 }
3063 
3064 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_AacHev2FormatChanged, TestSize.Level1)
3065 {
3066     isTestingFormat_ = true;
3067     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_AAC_HEV2_ADTS_FILE_PATH, OUTPUT_AAC_HEV2_ADTS_FILE_PATH));
3068     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_AAC));
3069     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_AAC));
3070     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3071     {
3072         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3a02() 3073         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3074     }
3075     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3076     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3077     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3078     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3079     Release();
3080 }
3081 
3082 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_FlacFormatChanged, TestSize.Level1)
3083 {
3084     isTestingFormat_ = true;
3085     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_FLAC_FILE_PATH, OUTPUT_FLAC_PCM_FILE_PATH));
3086     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
3087     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_FLAC));
3088     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3089     {
3090         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3b02() 3091         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3092     }
3093     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3094     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3095     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3096     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3097     Release();
3098 }
3099 
3100 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_FlacSampleFormatChanged, TestSize.Level1)
3101 {
3102     isTestingFormat_ = true;
3103     inputFile_.open(INPUT_FLAC_192K_FILE_PATH, std::ios::binary);
3104     ASSERT_EQ(true, inputFile_.is_open());
3105     pcmOutputFile_.open(OUTPUT_FLAC_192K_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
3106     ASSERT_EQ(true, pcmOutputFile_.is_open());
3107     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
3108     format_ = OH_AVFormat_Create();
3109     EXPECT_NE(nullptr, format_);
3110     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
3111     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), FLAC_192K_SAMPLE_RATE);
3112     // set abnormal trigger on changed callback
3113     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), ABNORMAL_SAMPLE_FORMAT);
3114     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
3115                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
3116     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
3117     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3118     {
3119         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3c02() 3120         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3121     }
3122     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3123     Release();
3124 }
3125 
3126 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_FlacSampleFormatChanged_02, TestSize.Level1)
3127 {
3128     isTestingFormat_ = true;
3129     inputFile_.open(INPUT_FLAC_192K_FILE_PATH, std::ios::binary);
3130     ASSERT_EQ(true, inputFile_.is_open());
3131     pcmOutputFile_.open(OUTPUT_FLAC_192K_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
3132     ASSERT_EQ(true, pcmOutputFile_.is_open());
3133     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
3134     format_ = OH_AVFormat_Create();
3135     EXPECT_NE(nullptr, format_);
3136     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
3137     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), FLAC_192K_SAMPLE_RATE);
3138     // set invalid sample format trigger on changed callback
3139     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(),
3140                             AudioSampleFormat::SAMPLE_S16P);
3141     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
3142                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
3143     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
3144     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3145     {
3146         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3d02() 3147         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3148     }
3149     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3150     Release();
3151 }
3152 
3153 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_FlacSampleFormatChanged_03, TestSize.Level1)
3154 {
3155     isTestingFormat_ = true;
3156     inputFile_.open(INPUT_FLAC_192K_FILE_PATH, std::ios::binary);
3157     ASSERT_EQ(true, inputFile_.is_open());
3158     pcmOutputFile_.open(OUTPUT_FLAC_192K_PCM_FILE_PATH.data(), std::ios::out | std::ios::binary);
3159     ASSERT_EQ(true, pcmOutputFile_.is_open());
3160     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_FLAC));
3161     format_ = OH_AVFormat_Create();
3162     EXPECT_NE(nullptr, format_);
3163     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
3164     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), FLAC_192K_SAMPLE_RATE);
3165     // not set sample format trigger on changed callback
3166     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(),
3167                              BITS_RATE[(uint32_t)AudioBufferFormatType::TYPE_FLAC]);
3168     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_));
3169     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3170     {
3171         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3e02() 3172         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3173     }
3174     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3175     Release();
3176 }
3177 
3178 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Mp3FormatChanged, TestSize.Level1)
3179 {
3180     isTestingFormat_ = true;
3181     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_MP3_FILE_PATH, OUTPUT_MP3_PCM_FILE_PATH));
3182     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_MP3));
3183     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_MP3));
3184     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3185     {
3186         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae3f02() 3187         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3188     }
3189     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3190     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3191     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3192     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3193     Release();
3194 }
3195 
3196 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_VorbisFormatChanged, TestSize.Level1)
3197 {
3198     isTestingFormat_ = true;
3199     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(INPUT_VORBIS_FILE_PATH, OUTPUT_VORBIS_PCM_FILE_PATH));
3200     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_VORBIS));
3201     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_VORBIS));
3202     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3203     {
3204         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4002() 3205         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3206     }
3207     EXPECT_EQ(g_outputSampleRate, DEFAULT_SAMPLE_RATE);
3208     EXPECT_EQ(g_outputChannels, DEFAULT_CHANNEL_COUNT);
3209     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3210     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3211     Release();
3212 }
3213 
3214 #ifdef SUPPORT_CODEC_COOK
3215 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_CreateByMime_01, TestSize.Level1)
3216 {
3217     audioDec_ = OH_AudioCodec_CreateByMime(AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_COOK.data(), false);
3218     EXPECT_NE(nullptr, audioDec_);
3219     Release();
3220 }
3221 
3222 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_CreateByName_01, TestSize.Level1)
3223 {
3224     audioDec_ = OH_AudioCodec_CreateByName((AVCodecCodecName::AUDIO_DECODER_COOK_NAME).data());
3225     EXPECT_NE(nullptr, audioDec_);
3226     Release();
3227 }
3228 
3229 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Configure_01, TestSize.Level1)
3230 {
3231     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3232     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3233     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3234     Release();
3235 }
3236 
3237 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Configure_02, TestSize.Level1)
3238 {
3239     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3240     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3241     format_ = OH_AVFormat_Create();
3242     EXPECT_NE(nullptr, format_);
3243 
3244     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
3245     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
3246     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(), 44100);
3247     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing channel count
3248 
3249     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3250     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MIN_CHANNEL_COUNT);
3251     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal min channel count
3252 
3253     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3254     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), ABNORMAL_MAX_CHANNEL_COUNT);
3255     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal max channel count
3256 
3257     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3258     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
3259     int64_t extradataSize;
3260     EXPECT_EQ(true, inputFile_.is_open());
3261     inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
3262     EXPECT_EQ(false, inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0);
3263     char buffer[extradataSize];
3264     inputFile_.read(buffer, extradataSize);
3265     EXPECT_EQ(false, inputFile_.gcount() != extradataSize);
3266     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_CODEC_CONFIG.data(), (uint8_t *)buffer,
3267                             extradataSize);
3268     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal channel count
3269 
3270     Release();
3271 }
3272 
3273 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Configure_03, TestSize.Level1)
3274 {
3275     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3276     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3277     format_ = OH_AVFormat_Create();
3278     EXPECT_NE(nullptr, format_);
3279 
3280     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT.data(), DEFAULT_SAMPLE_FORMAT);
3281     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_CHANNEL_COUNT.data(), DEFAULT_CHANNEL_COUNT);
3282     OH_AVFormat_SetLongValue(format_, MediaDescriptionKey::MD_KEY_BITRATE.data(), 44100);
3283     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // missing sample rate
3284 
3285     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3286     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), ABNORMAL_SAMPLE_RATE);
3287     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // abnormal sample rate
3288 
3289     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3290     OH_AVFormat_SetIntValue(format_, MediaDescriptionKey::MD_KEY_SAMPLE_RATE.data(), DEFAULT_SAMPLE_RATE);
3291     int64_t extradataSize;
3292     EXPECT_EQ(true, inputFile_.is_open());
3293     inputFile_.read(reinterpret_cast<char *>(&extradataSize), sizeof(int64_t));
3294     EXPECT_EQ(false, inputFile_.gcount() != sizeof(int64_t) || extradataSize < 0);
3295     char buffer[extradataSize];
3296     inputFile_.read(buffer, extradataSize);
3297     EXPECT_EQ(false, inputFile_.gcount() != extradataSize);
3298     OH_AVFormat_SetBuffer(format_, MediaDescriptionKey::MD_KEY_CODEC_CONFIG.data(), (uint8_t *)buffer,
3299                             extradataSize);
3300     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Configure(audioDec_, format_)); // normal sample rate
3301 
3302     Release();
3303 }
3304 
3305 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_SetParameter_01, TestSize.Level1)
3306 {
3307     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3308     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3309     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3310     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3311     {
3312         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4102() 3313         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3314     }
3315     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
3316     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
3317     Release();
3318 }
3319 
3320 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_SetParameter_02, TestSize.Level1)
3321 {
3322     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3323     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3324     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3325     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_SetParameter(audioDec_, format_));
3326     Release();
3327 }
3328 
3329 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Start_01, TestSize.Level1)
3330 {
3331     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3332     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3333     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3334     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3335     {
3336         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4202() 3337         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3338     }
3339     Release();
3340 }
3341 
3342 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Start_02, TestSize.Level1)
3343 {
3344     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3345     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3346     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3347     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3348     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3349     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Start(audioDec_));
3350     {
3351         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4302() 3352         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3353     }
3354     Release();
3355 }
3356 
3357 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Stop_01, TestSize.Level1)
3358 {
3359     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3360     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3361     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3362     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3363     sleep(1);
3364 
3365     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3366     Release();
3367 }
3368 
3369 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Flush_01, TestSize.Level1)
3370 {
3371     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3372     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3373     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3374     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3375     {
3376         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4402() 3377         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3378     }
3379     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Flush(audioDec_));
3380     Release();
3381 }
3382 
3383 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Reset_01, TestSize.Level1)
3384 {
3385     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3386     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3387     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3388     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3389     Release();
3390 }
3391 
3392 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Reset_02, TestSize.Level1)
3393 {
3394     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3395     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3396     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3397     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3398     {
3399         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4502() 3400         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3401     }
3402     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3403     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3404     Release();
3405 }
3406 
3407 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Reset_03, TestSize.Level1)
3408 {
3409     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3410     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3411     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3412     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3413     {
3414         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4602() 3415         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3416     }
3417     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Reset(audioDec_));
3418     Release();
3419 }
3420 
3421 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Destroy_01, TestSize.Level1)
3422 {
3423     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3424     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3425     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3426     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3427     {
3428         unique_lock<mutex> lock(signal_->startMutex_);
__anon8ca1ecae4702() 3429         signal_->startCond_.wait(lock, [this]() { return (!(isRunning_.load())); });
3430     }
3431     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Stop());
3432     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
3433 }
3434 
3435 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Destroy_02, TestSize.Level1)
3436 {
3437     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3438     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3439     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3440 
3441     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Destroy(audioDec_));
3442 }
3443 
3444 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_GetOutputFormat_01, TestSize.Level1)
3445 {
3446     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3447     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3448     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3449 
3450     EXPECT_NE(nullptr, OH_AudioCodec_GetOutputDescription(audioDec_));
3451     Release();
3452 }
3453 
3454 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_IsValid_01, TestSize.Level1)
3455 {
3456     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3457     bool isValid = false;
3458     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_IsValid(audioDec_, &isValid));
3459     Release();
3460 }
3461 
3462 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_Prepare_01, TestSize.Level1)
3463 {
3464     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3465     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3466     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3467     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_Prepare(audioDec_));
3468     Release();
3469 }
3470 
3471 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_PushInputData_01, TestSize.Level1)
3472 {
3473     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3474     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3475     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3476     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3477 
3478     // case0 传参异常
3479     const uint32_t index = 1024;
3480     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_PushInputBuffer(audioDec_, index));
3481     Release();
3482 }
3483 
3484 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_Cook_ReleaseOutputBuffer_01, TestSize.Level1)
3485 {
3486     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, InitFile(AudioBufferFormatType::TYPE_COOK));
3487     ASSERT_EQ(OH_AVErrCode::AV_ERR_OK, CreateCodecFunc(AudioBufferFormatType::TYPE_COOK));
3488     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Configure(AudioBufferFormatType::TYPE_COOK));
3489     EXPECT_EQ(OH_AVErrCode::AV_ERR_OK, Start());
3490 
3491     // case0 传参异常
3492     const uint32_t index = 1024;
3493     EXPECT_NE(OH_AVErrCode::AV_ERR_OK, OH_AudioCodec_FreeOutputBuffer(audioDec_, index));
3494     Release();
3495 }
3496 #endif
3497 
3498 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_OuterSupportMimeTest_01, TestSize.Level1)
3499 {
3500     const vector<std::string_view> allMimeTable = {
3501         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC,
3502         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC,
3503         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VORBIS,
3504         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRNB,
3505         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_OPUS,
3506         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG,
3507         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRWB,
3508         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VIVID,
3509         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711MU,
3510         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711A,
3511         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_L2HC,
3512         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_LBVC,
3513         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_APE,
3514         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_COOK,
3515         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AC3,
3516         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_RAW
3517     };
3518 
3519     const bool isEncoder = false;
3520     for (const auto &mime : allMimeTable) {
3521         auto capability = OH_AVCodec_GetCapability(mime.data(), isEncoder);
3522         const char *name = OH_AVCapability_GetName(capability);
3523         if (name == nullptr) {
3524             cout << "without capaility:" << mime << endl;
3525             continue;
3526         }
3527         auto audioDec = OH_AudioCodec_CreateByMime(mime.data(), isEncoder);
3528         if (AVCodecMimeType::CheckAudioCodecMimeSupportOuter(mime.data(), isEncoder)) {
3529             EXPECT_NE(nullptr, audioDec);
3530             if (audioDec == nullptr) {
3531                 cout << "create " << mime << " failed" << endl;
3532             }
3533         } else {
3534             EXPECT_EQ(nullptr, audioDec);
3535             if (audioDec != nullptr) {
3536                 cout << "limit " << mime << " failed" << endl;
3537             }
3538         }
3539 
3540         if (audioDec != nullptr) {
3541             OH_AudioCodec_Destroy(audioDec);
3542         }
3543     }
3544 }
3545 
3546 HWTEST_F(AudioDecoderBufferCapiUnitTest, audioDecoder_OuterSupportCodecNameTest_01, TestSize.Level1)
3547 {
3548     const vector<std::string_view> allMimeTable = {
3549         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC,
3550         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC,
3551         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_OPUS,
3552         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711MU,
3553         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711A,
3554         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_RAW,
3555         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VORBIS,
3556         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG,
3557         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VIVID,
3558         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRNB,
3559         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRWB,
3560         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_APE,
3561         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_L2HC,
3562         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_LBVC,
3563         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_COOK,
3564         AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AC3,
3565     };
3566 
3567     const bool isEncoder = false;
3568     for (const auto &mime : allMimeTable) {
3569         auto capability = OH_AVCodec_GetCapability(mime.data(), isEncoder);
3570         const char *name = OH_AVCapability_GetName(capability);
3571         auto audioDec = OH_AudioCodec_CreateByName(name);
3572         if (AVCodecCodecName::CheckAudioCodecNameSupportOuter(name)) {
3573             EXPECT_NE(nullptr, audioDec);
3574             if (audioDec == nullptr) {
3575                 cout << "create " << name << " failed" << endl;
3576             }
3577         } else {
3578             EXPECT_EQ(nullptr, audioDec);
3579             if (audioDec != nullptr) {
3580                 cout << "limit " << name << " failed" << endl;
3581             }
3582         }
3583 
3584         if (audioDec != nullptr) {
3585             OH_AudioCodec_Destroy(audioDec);
3586         }
3587     }
3588 }
3589 }
3590 }