• 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 "napi/native_api.h"
17 #include <condition_variable>
18 #include <js_native_api_types.h>
19 #include <multimedia/player_framework/native_avcapability.h>
20 #include <multimedia/player_framework/native_avcodec_audiodecoder.h>
21 #include <multimedia/player_framework/native_avcodec_base.h>
22 #include <multimedia/player_framework/native_averrors.h>
23 #include <multimedia/player_framework/native_avformat.h>
24 #include <pthread.h>
25 #include <queue>
26 #include <fstream>
27 #include <iostream>
28 
29 #define FAIL (-1)
30 #define SUCCESS 0
31 
32 constexpr uint32_t DEFAULT_SAMPLERATE = 44100;
33 constexpr uint32_t DEFAULT_BITRATE = 32000;
34 constexpr uint32_t DEFAULT_CHANNEL_COUNT = 2;
35 constexpr uint32_t DEFAULT_MAX_INPUT_SIZE = 1152;
36 constexpr uint32_t DEFAULT_AAC_TYPE = 1;
37 constexpr uint8_t DEFAULT_VORBIS_TYPE = 10;
38 constexpr uint8_t DEFAULT_VORBISTWO_TYPE = 20;
39 using namespace std;
40 
TestInitPtr(napi_env env,OH_AVCodec * param)41 static napi_value TestInitPtr(napi_env env, OH_AVCodec *param)
42 {
43     int backParam = FAIL;
44     napi_value result = nullptr;
45     OH_AVCodec *checkParam = param;
46     if (checkParam != nullptr) {
47         backParam = SUCCESS;
48     }
49     napi_create_int32(env, backParam, &result);
50     return result;
51 }
52 
TestInitAVErrCode(napi_env env,OH_AVErrCode param)53 static napi_value TestInitAVErrCode(napi_env env, OH_AVErrCode param)
54 {
55     int backParam = FAIL;
56     napi_value result = nullptr;
57     OH_AVErrCode checkParam = param;
58     if (checkParam == AV_ERR_OK) {
59         backParam = SUCCESS;
60     }
61     napi_create_int32(env, backParam, &result);
62     return result;
63 }
64 
AudioDecoderCreateByMimeAudioAac(napi_env env,napi_callback_info info)65 static napi_value AudioDecoderCreateByMimeAudioAac(napi_env env, napi_callback_info info)
66 {
67     return TestInitPtr(env, OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC));
68 }
69 
AudioDecoderCreateByName(napi_env env,napi_callback_info info)70 static napi_value AudioDecoderCreateByName(napi_env env, napi_callback_info info)
71 {
72     OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS, false);
73     const char *name = OH_AVCapability_GetName(capability);
74     return TestInitPtr(env, OH_AudioDecoder_CreateByName(name));
75 }
76 
AudioDecoderDestroy(napi_env env,napi_callback_info info)77 static napi_value AudioDecoderDestroy(napi_env env, napi_callback_info info)
78 {
79     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
80     return TestInitAVErrCode(env, OH_AudioDecoder_Destroy(audioDec));
81 }
82 
83 class ADecSignal {
84 public:
85     pthread_mutex_t inMutex_;
86     pthread_mutex_t outMutex_;
87     pthread_mutex_t startMutex_;
88     std::condition_variable inCond_;
89     std::condition_variable outCond_;
90     std::condition_variable startCond_;
91     std::queue<uint32_t> inQueue_;
92     std::queue<uint32_t> outQueue_;
93     std::queue<OH_AVMemory *> inBufferQueue_;
94     std::queue<OH_AVMemory *> outBufferQueue_;
95     std::queue<OH_AVCodecBufferAttr> attrQueue_;
96 };
97 ADecSignal *signal_;
OnError(OH_AVCodec * codec,int32_t errorCode,void * userData)98 static void OnError(OH_AVCodec *codec, int32_t errorCode, void *userData)
99 {
100     (void)codec;
101     (void)errorCode;
102     (void)userData;
103 }
OnStreamChanged(OH_AVCodec * codec,OH_AVFormat * format,void * userData)104 static void OnStreamChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData)
105 {
106     (void)codec;
107     (void)format;
108     (void)userData;
109 }
onNeedInputData(OH_AVCodec * codec,uint32_t index,OH_AVMemory * data,void * userData)110 static void onNeedInputData(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, void *userData)
111 {
112     (void)codec;
113     ADecSignal *signal = static_cast<ADecSignal *>(userData);
114     pthread_mutex_lock(&signal->inMutex_);
115     signal->inQueue_.push(index);
116     signal->inBufferQueue_.push(data);
117     signal->inCond_.notify_all();
118 }
onNeedOutputData(OH_AVCodec * codec,uint32_t index,OH_AVMemory * data,OH_AVCodecBufferAttr * attr,void * userData)119 static void onNeedOutputData(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, OH_AVCodecBufferAttr *attr,
120     void *userData)
121 {
122     (void)codec;
123     ADecSignal *signal = static_cast<ADecSignal *>(userData);
124     pthread_mutex_unlock(&signal->outMutex_);
125     signal->outQueue_.push(index);
126     signal->outBufferQueue_.push(data);
127     if (attr) {
128         signal->attrQueue_.push(*attr);
129     }
130     signal->outCond_.notify_all();
131 }
132 
AudioDecoderSetCallback(napi_env env,napi_callback_info info)133 static napi_value AudioDecoderSetCallback(napi_env env, napi_callback_info info)
134 {
135     napi_value result;
136     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
137     signal_ = new ADecSignal();
138     OH_AVCodecAsyncCallback callback = { &OnError, &OnStreamChanged, &onNeedInputData, &onNeedOutputData };
139     result = TestInitAVErrCode(env, OH_AudioDecoder_SetCallback(audioDec, callback, signal_));
140     OH_AudioDecoder_Destroy(audioDec);
141     return result;
142 }
143 
AudioDecoderConfigure(napi_env env,napi_callback_info info)144 static napi_value AudioDecoderConfigure(napi_env env, napi_callback_info info)
145 {
146     OH_AVFormat *format = nullptr;
147     format = OH_AVFormat_Create();
148     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
149     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
150     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
151     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
152     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
153     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
154     return TestInitAVErrCode(env, OH_AudioDecoder_Configure(audioDec, format));
155 }
156 
AudioDecoderPrepare(napi_env env,napi_callback_info info)157 static napi_value AudioDecoderPrepare(napi_env env, napi_callback_info info)
158 {
159     OH_AVFormat *format = nullptr;
160     format = OH_AVFormat_Create();
161     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
162     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
163     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
164     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
165     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
166     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
167     OH_AudioDecoder_Configure(audioDec, format);
168     return TestInitAVErrCode(env, OH_AudioDecoder_Prepare(audioDec));
169 }
170 
AudioDecoderStart(napi_env env,napi_callback_info info)171 static napi_value AudioDecoderStart(napi_env env, napi_callback_info info)
172 {
173     int backParam = FAIL;
174     napi_value result = nullptr;
175     OH_AVErrCode checkParam;
176     OH_AVFormat *format = nullptr;
177     format = OH_AVFormat_Create();
178     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
179     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
180     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
181     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
182     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
183     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
184     checkParam = OH_AudioDecoder_Configure(audioDec, format);
185     checkParam = OH_AudioDecoder_Prepare(audioDec);
186     checkParam = OH_AudioDecoder_Start(audioDec);
187     if (checkParam == AV_ERR_OK) {
188         backParam = SUCCESS;
189     }
190     napi_create_int32(env, backParam, &result);
191     return result;
192 }
193 
AudioDecoderStop(napi_env env,napi_callback_info info)194 static napi_value AudioDecoderStop(napi_env env, napi_callback_info info)
195 {
196     int backParam = FAIL;
197     napi_value result = nullptr;
198     OH_AVErrCode checkParam;
199     OH_AVFormat *format = nullptr;
200     format = OH_AVFormat_Create();
201     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
202     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
203     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
204     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
205     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
206     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
207     checkParam = OH_AudioDecoder_Configure(audioDec, format);
208     checkParam = OH_AudioDecoder_Prepare(audioDec);
209     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
210         checkParam = OH_AudioDecoder_Stop(audioDec);
211         if (checkParam == AV_ERR_OK) {
212             backParam = SUCCESS;
213         }
214     }
215     napi_create_int32(env, backParam, &result);
216     return result;
217 }
218 
AudioDecoderFlush(napi_env env,napi_callback_info info)219 static napi_value AudioDecoderFlush(napi_env env, napi_callback_info info)
220 {
221     int backParam = FAIL;
222     napi_value result = nullptr;
223     OH_AVErrCode checkParam;
224     OH_AVFormat *format = nullptr;
225     format = OH_AVFormat_Create();
226     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
227     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
228     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
229     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
230     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
231     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
232     OH_AudioDecoder_Configure(audioDec, format);
233     OH_AudioDecoder_Prepare(audioDec);
234     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
235         checkParam = OH_AudioDecoder_Flush(audioDec);
236         if (checkParam == AV_ERR_OK) {
237             backParam = SUCCESS;
238             OH_AudioDecoder_Stop(audioDec);
239         }
240     }
241     napi_create_int32(env, backParam, &result);
242     return result;
243 }
244 
AudioDecoderReset(napi_env env,napi_callback_info info)245 static napi_value AudioDecoderReset(napi_env env, napi_callback_info info)
246 {
247     int backParam = FAIL;
248     napi_value result = nullptr;
249     OH_AVErrCode checkParam;
250     OH_AVFormat *format = nullptr;
251     format = OH_AVFormat_Create();
252     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
253     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
254     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
255     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
256     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
257     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
258     OH_AudioDecoder_Configure(audioDec, format);
259     OH_AudioDecoder_Prepare(audioDec);
260     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
261         checkParam = OH_AudioDecoder_Reset(audioDec);
262         if (checkParam == AV_ERR_OK) {
263             backParam = SUCCESS;
264             OH_AudioDecoder_Stop(audioDec);
265         }
266     }
267     napi_create_int32(env, backParam, &result);
268     return result;
269 }
270 
AudioDecoderGetOutputDescription(napi_env env,napi_callback_info info)271 static napi_value AudioDecoderGetOutputDescription(napi_env env, napi_callback_info info)
272 {
273     int backParam = FAIL;
274     napi_value result = nullptr;
275     OH_AVFormat *checkParam = nullptr;
276     OH_AVFormat *format = nullptr;
277     format = OH_AVFormat_Create();
278     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
279     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
280     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
281     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
282     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
283     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
284     OH_AudioDecoder_Configure(audioDec, format);
285     OH_AudioDecoder_Prepare(audioDec);
286     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
287         checkParam = OH_AudioDecoder_GetOutputDescription(audioDec);
288         if (checkParam != nullptr) {
289             backParam = SUCCESS;
290             OH_AudioDecoder_Stop(audioDec);
291             free(checkParam);
292         }
293     }
294     napi_create_int32(env, backParam, &result);
295     return result;
296 }
297 
AudioDecoderSetParameter(napi_env env,napi_callback_info info)298 static napi_value AudioDecoderSetParameter(napi_env env, napi_callback_info info)
299 {
300     int backParam = FAIL;
301     napi_value result = nullptr;
302     OH_AVErrCode checkParam;
303     OH_AVFormat *format = nullptr;
304     format = OH_AVFormat_Create();
305     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
306     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
307     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
308     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
309     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
310     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
311     checkParam = OH_AudioDecoder_Configure(audioDec, format);
312     checkParam = OH_AudioDecoder_Prepare(audioDec);
313     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
314         format = OH_AudioDecoder_GetOutputDescription(audioDec);
315         if (format != nullptr) {
316             checkParam = OH_AudioDecoder_SetParameter(audioDec, format);
317             if (checkParam == AV_ERR_OK) {
318                 backParam = SUCCESS;
319                 free(format);
320             }
321         }
322     }
323     napi_create_int32(env, backParam, &result);
324     return result;
325 }
326 
AudioDecoderIsValid(napi_env env,napi_callback_info info)327 static napi_value AudioDecoderIsValid(napi_env env, napi_callback_info info)
328 {
329     int backParam = FAIL;
330     napi_value result = nullptr;
331     OH_AVErrCode checkParam;
332     bool status = true;
333     OH_AVFormat *format = nullptr;
334     format = OH_AVFormat_Create();
335     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
336     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
337     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
338     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
339     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
340     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
341     checkParam = OH_AudioDecoder_Configure(audioDec, format);
342     checkParam = OH_AudioDecoder_Prepare(audioDec);
343     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
344         checkParam = OH_AudioDecoder_Flush(audioDec);
345         if (checkParam == AV_ERR_OK) {
346             checkParam = OH_AudioDecoder_IsValid(audioDec, &status);
347             if (checkParam == AV_ERR_OK) {
348                 backParam = SUCCESS;
349                 OH_AudioDecoder_Stop(audioDec);
350             }
351         }
352     }
353     napi_create_int32(env, backParam, &result);
354     return result;
355 }
356 
OHAudioDecoderCreateByNameAnormal(napi_env env,napi_callback_info info)357 static napi_value OHAudioDecoderCreateByNameAnormal(napi_env env, napi_callback_info info)
358 {
359     OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_AAC, false);
360     const char *name = OH_AVCapability_GetName(capability);
361     return TestInitPtr(env, OH_AudioDecoder_CreateByName(name));
362 }
363 
OHAudioDecoderCreateByNameBnormal(napi_env env,napi_callback_info info)364 static napi_value OHAudioDecoderCreateByNameBnormal(napi_env env, napi_callback_info info)
365 {
366     OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_MPEG, false);
367     const char *name = OH_AVCapability_GetName(capability);
368     return TestInitPtr(env, OH_AudioDecoder_CreateByName(name));
369 }
370 
OHAudioDecoderCreateByNameCnormal(napi_env env,napi_callback_info info)371 static napi_value OHAudioDecoderCreateByNameCnormal(napi_env env, napi_callback_info info)
372 {
373     OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_FLAC, false);
374     const char *name = OH_AVCapability_GetName(capability);
375     return TestInitPtr(env, OH_AudioDecoder_CreateByName(name));
376 }
377 
OHAudioDecoderDestroyAnormal(napi_env env,napi_callback_info info)378 static napi_value OHAudioDecoderDestroyAnormal(napi_env env, napi_callback_info info)
379 {
380     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
381     return TestInitAVErrCode(env, OH_AudioDecoder_Destroy(audioDec));
382 }
383 
OHAudioDecoderDestroyBnormal(napi_env env,napi_callback_info info)384 static napi_value OHAudioDecoderDestroyBnormal(napi_env env, napi_callback_info info)
385 {
386     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
387     return TestInitAVErrCode(env, OH_AudioDecoder_Destroy(audioDec));
388 }
389 
OHAudioDecoderDestroyCnormal(napi_env env,napi_callback_info info)390 static napi_value OHAudioDecoderDestroyCnormal(napi_env env, napi_callback_info info)
391 {
392     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
393     return TestInitAVErrCode(env, OH_AudioDecoder_Destroy(audioDec));
394 }
395 
OHAudioDecoderStartAnormal(napi_env env,napi_callback_info info)396 static napi_value OHAudioDecoderStartAnormal(napi_env env, napi_callback_info info)
397 {
398     int backParam = FAIL;
399     napi_value result = nullptr;
400     OH_AVErrCode checkParam;
401     OH_AVFormat *format = nullptr;
402     format = OH_AVFormat_Create();
403     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
404     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
405     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
406     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
407     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
408     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
409     OH_AudioDecoder_Configure(audioDec, format);
410     OH_AudioDecoder_Prepare(audioDec);
411     checkParam = OH_AudioDecoder_Start(audioDec);
412     if (checkParam == AV_ERR_OK) {
413         backParam = SUCCESS;
414     }
415     napi_create_int32(env, backParam, &result);
416     return result;
417 }
418 
OHAudioDecoderStartBnormal(napi_env env,napi_callback_info info)419 static napi_value OHAudioDecoderStartBnormal(napi_env env, napi_callback_info info)
420 {
421     int backParam = FAIL;
422     napi_value result = nullptr;
423     OH_AVErrCode checkParam;
424     OH_AVFormat *format = nullptr;
425     format = OH_AVFormat_Create();
426     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
427     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
428     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
429     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
430     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
431     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
432     OH_AudioDecoder_Configure(audioDec, format);
433     OH_AudioDecoder_Prepare(audioDec);
434     checkParam = OH_AudioDecoder_Start(audioDec);
435     if (checkParam == AV_ERR_OK) {
436         backParam = SUCCESS;
437     }
438     napi_create_int32(env, backParam, &result);
439     return result;
440 }
441 
OHAudioDecoderStartCnormal(napi_env env,napi_callback_info info)442 static napi_value OHAudioDecoderStartCnormal(napi_env env, napi_callback_info info)
443 {
444     int backParam = FAIL;
445     napi_value result = nullptr;
446     OH_AVErrCode checkParam;
447     OH_AVFormat *format = nullptr;
448     format = OH_AVFormat_Create();
449     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
450     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
451     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
452     OH_AudioDecoder_Configure(audioDec, format);
453     OH_AudioDecoder_Prepare(audioDec);
454     checkParam = OH_AudioDecoder_Start(audioDec);
455     if (checkParam == AV_ERR_OK) {
456         backParam = SUCCESS;
457     }
458     napi_create_int32(env, backParam, &result);
459     return result;
460 }
461 
OHAudioDecoderStopAnormal(napi_env env,napi_callback_info info)462 static napi_value OHAudioDecoderStopAnormal(napi_env env, napi_callback_info info)
463 {
464     int backParam = FAIL;
465     napi_value result = nullptr;
466     OH_AVErrCode checkParam;
467     OH_AVFormat *format = nullptr;
468     format = OH_AVFormat_Create();
469     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
470     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
471     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
472     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
473     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
474     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
475     OH_AudioDecoder_Configure(audioDec, format);
476     OH_AudioDecoder_Prepare(audioDec);
477     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
478         checkParam = OH_AudioDecoder_Stop(audioDec);
479         if (checkParam == AV_ERR_OK) {
480             backParam = SUCCESS;
481         }
482     }
483     napi_create_int32(env, backParam, &result);
484     return result;
485 }
486 
OHAudioDecoderStopBnormal(napi_env env,napi_callback_info info)487 static napi_value OHAudioDecoderStopBnormal(napi_env env, napi_callback_info info)
488 {
489     int backParam = FAIL;
490     napi_value result = nullptr;
491     OH_AVErrCode checkParam;
492     OH_AVFormat *format = nullptr;
493     format = OH_AVFormat_Create();
494     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
495     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
496     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
497     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
498     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
499     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
500     OH_AudioDecoder_Configure(audioDec, format);
501     OH_AudioDecoder_Prepare(audioDec);
502     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
503         checkParam = OH_AudioDecoder_Stop(audioDec);
504         if (checkParam == AV_ERR_OK) {
505             backParam = SUCCESS;
506         }
507     }
508     napi_create_int32(env, backParam, &result);
509     return result;
510 }
511 
OHAudioDecoderStopCnormal(napi_env env,napi_callback_info info)512 static napi_value OHAudioDecoderStopCnormal(napi_env env, napi_callback_info info)
513 {
514     int backParam = FAIL;
515     napi_value result = nullptr;
516     OH_AVErrCode checkParam;
517     OH_AVFormat *format = nullptr;
518     format = OH_AVFormat_Create();
519     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
520     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
521     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
522     OH_AudioDecoder_Configure(audioDec, format);
523     OH_AudioDecoder_Prepare(audioDec);
524     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
525         checkParam = OH_AudioDecoder_Stop(audioDec);
526         if (checkParam == AV_ERR_OK) {
527             backParam = SUCCESS;
528         }
529     }
530     napi_create_int32(env, backParam, &result);
531     return result;
532 }
533 
OHAudioDecoderFlushAnormal(napi_env env,napi_callback_info info)534 static napi_value OHAudioDecoderFlushAnormal(napi_env env, napi_callback_info info)
535 {
536     int backParam = FAIL;
537     napi_value result = nullptr;
538     OH_AVErrCode checkParam;
539     OH_AVFormat *format = nullptr;
540     format = OH_AVFormat_Create();
541     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
542     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
543     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
544     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
545     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
546     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
547     OH_AudioDecoder_Configure(audioDec, format);
548     OH_AudioDecoder_Prepare(audioDec);
549     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
550         checkParam = OH_AudioDecoder_Flush(audioDec);
551         if (checkParam == AV_ERR_OK) {
552             backParam = SUCCESS;
553             OH_AudioDecoder_Stop(audioDec);
554         }
555     }
556     napi_create_int32(env, backParam, &result);
557     return result;
558 }
559 
OHAudioDecoderFlushBnormal(napi_env env,napi_callback_info info)560 static napi_value OHAudioDecoderFlushBnormal(napi_env env, napi_callback_info info)
561 {
562     int backParam = FAIL;
563     napi_value result = nullptr;
564     OH_AVErrCode checkParam;
565     OH_AVFormat *format = nullptr;
566     format = OH_AVFormat_Create();
567     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
568     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
569     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
570     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
571     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
572     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
573     OH_AudioDecoder_Configure(audioDec, format);
574     OH_AudioDecoder_Prepare(audioDec);
575     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
576         checkParam = OH_AudioDecoder_Flush(audioDec);
577         if (checkParam == AV_ERR_OK) {
578             backParam = SUCCESS;
579             OH_AudioDecoder_Stop(audioDec);
580         }
581     }
582     napi_create_int32(env, backParam, &result);
583     return result;
584 }
585 
OHAudioDecoderFlushCnormal(napi_env env,napi_callback_info info)586 static napi_value OHAudioDecoderFlushCnormal(napi_env env, napi_callback_info info)
587 {
588     int backParam = FAIL;
589     napi_value result = nullptr;
590     OH_AVErrCode checkParam;
591     OH_AVFormat *format = nullptr;
592     format = OH_AVFormat_Create();
593     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
594     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
595     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
596     OH_AudioDecoder_Configure(audioDec, format);
597     OH_AudioDecoder_Prepare(audioDec);
598     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
599         checkParam = OH_AudioDecoder_Flush(audioDec);
600         if (checkParam == AV_ERR_OK) {
601             backParam = SUCCESS;
602             OH_AudioDecoder_Stop(audioDec);
603         }
604     }
605     napi_create_int32(env, backParam, &result);
606     return result;
607 }
608 
OHAudioDecoderResetAnormal(napi_env env,napi_callback_info info)609 static napi_value OHAudioDecoderResetAnormal(napi_env env, napi_callback_info info)
610 {
611     int backParam = FAIL;
612     napi_value result = nullptr;
613     OH_AVErrCode checkParam;
614     OH_AVFormat *format = nullptr;
615     format = OH_AVFormat_Create();
616     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
617     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
618     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
619     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
620     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
621     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_MPEG);
622     OH_AudioDecoder_Configure(audioDec, format);
623     OH_AudioDecoder_Prepare(audioDec);
624     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
625         checkParam = OH_AudioDecoder_Reset(audioDec);
626         if (checkParam == AV_ERR_OK) {
627             backParam = SUCCESS;
628             OH_AudioDecoder_Stop(audioDec);
629         }
630     }
631     napi_create_int32(env, backParam, &result);
632     return result;
633 }
634 
OHAudioDecoderResetBnormal(napi_env env,napi_callback_info info)635 static napi_value OHAudioDecoderResetBnormal(napi_env env, napi_callback_info info)
636 {
637     int backParam = FAIL;
638     napi_value result = nullptr;
639     OH_AVErrCode checkParam;
640     OH_AVFormat *format = nullptr;
641     format = OH_AVFormat_Create();
642     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
643     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
644     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
645     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
646     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
647     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
648     OH_AudioDecoder_Configure(audioDec, format);
649     OH_AudioDecoder_Prepare(audioDec);
650     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
651         checkParam = OH_AudioDecoder_Reset(audioDec);
652         if (checkParam == AV_ERR_OK) {
653             backParam = SUCCESS;
654             OH_AudioDecoder_Stop(audioDec);
655         }
656     }
657     napi_create_int32(env, backParam, &result);
658     return result;
659 }
660 
OHAudioDecoderResetCnormal(napi_env env,napi_callback_info info)661 static napi_value OHAudioDecoderResetCnormal(napi_env env, napi_callback_info info)
662 {
663     int backParam = FAIL;
664     napi_value result = nullptr;
665     OH_AVErrCode checkParam;
666     OH_AVFormat *format = nullptr;
667     format = OH_AVFormat_Create();
668     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
669     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
670     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
671     OH_AudioDecoder_Configure(audioDec, format);
672     OH_AudioDecoder_Prepare(audioDec);
673     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
674         checkParam = OH_AudioDecoder_Reset(audioDec);
675         if (checkParam == AV_ERR_OK) {
676             backParam = SUCCESS;
677             OH_AudioDecoder_Stop(audioDec);
678         }
679     }
680     napi_create_int32(env, backParam, &result);
681     return result;
682 }
683 
OHAudioDecoderGetOutputDescriptionAnormal(napi_env env,napi_callback_info info)684 static napi_value OHAudioDecoderGetOutputDescriptionAnormal(napi_env env, napi_callback_info info)
685 {
686     int backParam = FAIL;
687     napi_value result = nullptr;
688     OH_AVFormat *checkParam = nullptr;
689     OH_AVFormat *format = nullptr;
690     format = OH_AVFormat_Create();
691     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
692     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
693     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
694     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
695     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
696     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
697     OH_AudioDecoder_Configure(audioDec, format);
698     OH_AudioDecoder_Prepare(audioDec);
699     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
700         checkParam = OH_AudioDecoder_GetOutputDescription(audioDec);
701         if (checkParam != nullptr) {
702             backParam = SUCCESS;
703             OH_AudioDecoder_Stop(audioDec);
704             free(checkParam);
705         }
706     }
707     napi_create_int32(env, backParam, &result);
708     return result;
709 }
710 
OHAudioDecoderGetOutputDescriptionBnormal(napi_env env,napi_callback_info info)711 static napi_value OHAudioDecoderGetOutputDescriptionBnormal(napi_env env, napi_callback_info info)
712 {
713     int backParam = FAIL;
714     napi_value result = nullptr;
715     OH_AVFormat *checkParam = nullptr;
716     OH_AVFormat *format = nullptr;
717     format = OH_AVFormat_Create();
718     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
719     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
720     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
721     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
722     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
723     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
724     OH_AudioDecoder_Configure(audioDec, format);
725     OH_AudioDecoder_Prepare(audioDec);
726     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
727         checkParam = OH_AudioDecoder_GetOutputDescription(audioDec);
728         if (checkParam != nullptr) {
729             backParam = SUCCESS;
730             OH_AudioDecoder_Stop(audioDec);
731             free(checkParam);
732         }
733     }
734     napi_create_int32(env, backParam, &result);
735     return result;
736 }
737 
OHAudioDecoderGetOutputDescriptionCnormal(napi_env env,napi_callback_info info)738 static napi_value OHAudioDecoderGetOutputDescriptionCnormal(napi_env env, napi_callback_info info)
739 {
740     int backParam = FAIL;
741     napi_value result = nullptr;
742     OH_AVFormat *checkParam = nullptr;
743     OH_AVFormat *format = nullptr;
744     format = OH_AVFormat_Create();
745     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
746     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
747     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
748     OH_AudioDecoder_Configure(audioDec, format);
749     OH_AudioDecoder_Prepare(audioDec);
750     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
751         checkParam = OH_AudioDecoder_GetOutputDescription(audioDec);
752         if (checkParam != nullptr) {
753             backParam = SUCCESS;
754             OH_AudioDecoder_Stop(audioDec);
755             free(checkParam);
756         }
757     }
758     napi_create_int32(env, backParam, &result);
759     return result;
760 }
761 
OHAudioDecoderSetParameterAnormal(napi_env env,napi_callback_info info)762 static napi_value OHAudioDecoderSetParameterAnormal(napi_env env, napi_callback_info info)
763 {
764     int backParam = FAIL;
765     napi_value result = nullptr;
766     OH_AVErrCode checkParam;
767     OH_AVFormat *format = nullptr;
768     format = OH_AVFormat_Create();
769     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
770     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
771     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
772     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
773     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
774     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
775     OH_AudioDecoder_Configure(audioDec, format);
776     OH_AudioDecoder_Prepare(audioDec);
777     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
778         format = OH_AudioDecoder_GetOutputDescription(audioDec);
779         if (format != nullptr) {
780             checkParam = OH_AudioDecoder_SetParameter(audioDec, format);
781             if (checkParam == AV_ERR_OK) {
782                 backParam = SUCCESS;
783                 free(format);
784             }
785         }
786     }
787     napi_create_int32(env, backParam, &result);
788     return result;
789 }
790 
OHAudioDecoderSetParameterBnormal(napi_env env,napi_callback_info info)791 static napi_value OHAudioDecoderSetParameterBnormal(napi_env env, napi_callback_info info)
792 {
793     int backParam = FAIL;
794     napi_value result = nullptr;
795     OH_AVErrCode checkParam;
796     OH_AVFormat *format = nullptr;
797     format = OH_AVFormat_Create();
798     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
799     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
800     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
801     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
802     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
803     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
804     OH_AudioDecoder_Configure(audioDec, format);
805     OH_AudioDecoder_Prepare(audioDec);
806     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
807         format = OH_AudioDecoder_GetOutputDescription(audioDec);
808         if (format != nullptr) {
809             checkParam = OH_AudioDecoder_SetParameter(audioDec, format);
810             if (checkParam == AV_ERR_OK) {
811                 backParam = SUCCESS;
812                 free(format);
813             }
814         }
815     }
816     napi_create_int32(env, backParam, &result);
817     return result;
818 }
819 
OHAudioDecoderSetParameterCnormal(napi_env env,napi_callback_info info)820 static napi_value OHAudioDecoderSetParameterCnormal(napi_env env, napi_callback_info info)
821 {
822     int backParam = FAIL;
823     napi_value result = nullptr;
824     OH_AVErrCode checkParam;
825     OH_AVFormat *format = nullptr;
826     format = OH_AVFormat_Create();
827     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
828     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
829     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
830     OH_AudioDecoder_Configure(audioDec, format);
831     OH_AudioDecoder_Prepare(audioDec);
832     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
833         format = OH_AudioDecoder_GetOutputDescription(audioDec);
834         if (format != nullptr) {
835             checkParam = OH_AudioDecoder_SetParameter(audioDec, format);
836             if (checkParam == AV_ERR_OK) {
837                 backParam = SUCCESS;
838                 free(format);
839             }
840         }
841     }
842     napi_create_int32(env, backParam, &result);
843     return result;
844 }
845 
OHAudioDecoderIsValidAnormal(napi_env env,napi_callback_info info)846 static napi_value OHAudioDecoderIsValidAnormal(napi_env env, napi_callback_info info)
847 {
848     int backParam = FAIL;
849     napi_value result = nullptr;
850     OH_AVErrCode checkParam;
851     bool status = true;
852     OH_AVFormat *format = nullptr;
853     format = OH_AVFormat_Create();
854     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
855     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
856     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
857     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
858     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
859     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
860     OH_AudioDecoder_Configure(audioDec, format);
861     OH_AudioDecoder_Prepare(audioDec);
862     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
863         checkParam = OH_AudioDecoder_Flush(audioDec);
864         if (checkParam == AV_ERR_OK) {
865             checkParam = OH_AudioDecoder_IsValid(audioDec, &status);
866             if (checkParam == AV_ERR_OK) {
867                 backParam = SUCCESS;
868                 OH_AudioDecoder_Stop(audioDec);
869             }
870         }
871     }
872     napi_create_int32(env, backParam, &result);
873     return result;
874 }
875 
OHAudioDecoderIsValidBnormal(napi_env env,napi_callback_info info)876 static napi_value OHAudioDecoderIsValidBnormal(napi_env env, napi_callback_info info)
877 {
878     int backParam = FAIL;
879     napi_value result = nullptr;
880     OH_AVErrCode checkParam;
881     bool status = true;
882     OH_AVFormat *format = nullptr;
883     format = OH_AVFormat_Create();
884     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLERATE);
885     OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
886     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNEL_COUNT);
887     OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
888     OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE);
889     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_FLAC);
890     OH_AudioDecoder_Configure(audioDec, format);
891     OH_AudioDecoder_Prepare(audioDec);
892     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
893         checkParam = OH_AudioDecoder_Flush(audioDec);
894         if (checkParam == AV_ERR_OK) {
895             checkParam = OH_AudioDecoder_IsValid(audioDec, &status);
896             if (checkParam == AV_ERR_OK) {
897                 backParam = SUCCESS;
898                 OH_AudioDecoder_Stop(audioDec);
899             }
900         }
901     }
902     napi_create_int32(env, backParam, &result);
903     return result;
904 }
905 
OHAudioDecoderIsValidCnormal(napi_env env,napi_callback_info info)906 static napi_value OHAudioDecoderIsValidCnormal(napi_env env, napi_callback_info info)
907 {
908     int backParam = FAIL;
909     napi_value result = nullptr;
910     OH_AVErrCode checkParam;
911     bool status = true;
912     OH_AVFormat *format = nullptr;
913     format = OH_AVFormat_Create();
914     OH_AVFormat_SetIntValue(format, OH_MD_KEY_IDENTIFICATION_HEADER, DEFAULT_VORBISTWO_TYPE);
915     OH_AVFormat_SetIntValue(format, OH_MD_KEY_SETUP_HEADER, DEFAULT_VORBIS_TYPE);
916     OH_AVCodec *audioDec = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_VORBIS);
917     OH_AudioDecoder_Configure(audioDec, format);
918     OH_AudioDecoder_Prepare(audioDec);
919     if (OH_AudioDecoder_Start(audioDec) == AV_ERR_OK) {
920         checkParam = OH_AudioDecoder_Flush(audioDec);
921         if (checkParam == AV_ERR_OK) {
922             checkParam = OH_AudioDecoder_IsValid(audioDec, &status);
923             if (checkParam == AV_ERR_OK) {
924                 backParam = SUCCESS;
925                 OH_AudioDecoder_Stop(audioDec);
926             }
927         }
928     }
929     napi_create_int32(env, backParam, &result);
930     return result;
931 }
932 
933 EXTERN_C_START
Init(napi_env env,napi_value exports)934 static napi_value Init(napi_env env, napi_value exports)
935 {
936     napi_property_descriptor desc[] = {
937         {"OH_AudioDecoder_CreateByMime", nullptr, AudioDecoderCreateByMimeAudioAac, nullptr, nullptr, nullptr,
938          napi_default, nullptr},
939         {"OH_AudioDecoder_CreateByName", nullptr, AudioDecoderCreateByName, nullptr, nullptr, nullptr, napi_default,
940          nullptr},
941         {"OH_AudioDecoder_Destroy", nullptr, AudioDecoderDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
942         {"OH_AudioDecoder_SetCallback", nullptr, AudioDecoderSetCallback, nullptr, nullptr, nullptr, napi_default,
943          nullptr},
944         {"OH_AudioDecoder_Configure", nullptr, AudioDecoderConfigure, nullptr, nullptr, nullptr, napi_default, nullptr},
945         {"OH_AudioDecoder_Prepare", nullptr, AudioDecoderPrepare, nullptr, nullptr, nullptr, napi_default, nullptr},
946         {"OH_AudioDecoder_Start", nullptr, AudioDecoderStart, nullptr, nullptr, nullptr, napi_default, nullptr},
947         {"OH_AudioDecoder_Stop", nullptr, AudioDecoderStop, nullptr, nullptr, nullptr, napi_default, nullptr},
948         {"OH_AudioDecoder_Flush", nullptr, AudioDecoderFlush, nullptr, nullptr, nullptr, napi_default, nullptr},
949         {"OH_AudioDecoder_Reset", nullptr, AudioDecoderReset, nullptr, nullptr, nullptr, napi_default, nullptr},
950         {"OH_AudioDecoder_GetOutputDescription", nullptr, AudioDecoderGetOutputDescription, nullptr, nullptr, nullptr,
951          napi_default, nullptr},
952         {"OH_AudioDecoder_SetParameter", nullptr, AudioDecoderSetParameter, nullptr, nullptr, nullptr, napi_default,
953          nullptr},
954         {"OH_AudioDecoder_IsValid", nullptr, AudioDecoderIsValid, nullptr, nullptr, nullptr, napi_default, nullptr},
955         {"OHAudioDecoderCreateByNameAnormal", nullptr, OHAudioDecoderCreateByNameAnormal, nullptr, nullptr, nullptr,
956          napi_default, nullptr},
957         {"OHAudioDecoderCreateByNameBnormal", nullptr, OHAudioDecoderCreateByNameBnormal, nullptr, nullptr, nullptr,
958          napi_default, nullptr},
959         {"OHAudioDecoderCreateByNameCnormal", nullptr, OHAudioDecoderCreateByNameCnormal, nullptr, nullptr, nullptr,
960          napi_default, nullptr},
961         {"OHAudioDecoderDestroyAnormal", nullptr, OHAudioDecoderDestroyAnormal, nullptr, nullptr, nullptr, napi_default,
962          nullptr},
963         {"OHAudioDecoderDestroyBnormal", nullptr, OHAudioDecoderDestroyBnormal, nullptr, nullptr, nullptr, napi_default,
964          nullptr},
965         {"OHAudioDecoderDestroyCnormal", nullptr, OHAudioDecoderDestroyCnormal, nullptr, nullptr, nullptr, napi_default,
966          nullptr},
967         {"OHAudioDecoderStartAnormal", nullptr, OHAudioDecoderStartAnormal, nullptr, nullptr, nullptr, napi_default,
968          nullptr},
969         {"OHAudioDecoderStartBnormal", nullptr, OHAudioDecoderStartBnormal, nullptr, nullptr, nullptr, napi_default,
970          nullptr},
971         {"OHAudioDecoderStartCnormal", nullptr, OHAudioDecoderStartCnormal, nullptr, nullptr, nullptr, napi_default,
972          nullptr},
973         {"OHAudioDecoderStopAnormal", nullptr, OHAudioDecoderStopAnormal, nullptr, nullptr, nullptr, napi_default,
974          nullptr},
975         {"OHAudioDecoderStopBnormal", nullptr, OHAudioDecoderStopBnormal, nullptr, nullptr, nullptr, napi_default,
976          nullptr},
977         {"OHAudioDecoderStopCnormal", nullptr, OHAudioDecoderStopCnormal, nullptr, nullptr, nullptr, napi_default,
978          nullptr},
979         {"OHAudioDecoderFlushAnormal", nullptr, OHAudioDecoderFlushAnormal, nullptr, nullptr, nullptr, napi_default,
980          nullptr},
981         {"OHAudioDecoderFlushBnormal", nullptr, OHAudioDecoderFlushBnormal, nullptr, nullptr, nullptr, napi_default,
982          nullptr},
983         {"OHAudioDecoderFlushCnormal", nullptr, OHAudioDecoderFlushCnormal, nullptr, nullptr, nullptr, napi_default,
984          nullptr},
985         {"OHAudioDecoderResetAnormal", nullptr, OHAudioDecoderResetAnormal, nullptr, nullptr, nullptr, napi_default,
986          nullptr},
987         {"OHAudioDecoderResetBnormal", nullptr, OHAudioDecoderResetBnormal, nullptr, nullptr, nullptr, napi_default,
988          nullptr},
989         {"OHAudioDecoderResetCnormal", nullptr, OHAudioDecoderResetCnormal, nullptr, nullptr, nullptr, napi_default,
990          nullptr},
991         {"OHAudioDecoderGetOutputDescriptionAnormal", nullptr, OHAudioDecoderGetOutputDescriptionAnormal, nullptr,
992          nullptr, nullptr, napi_default, nullptr},
993         {"OHAudioDecoderGetOutputDescriptionBnormal", nullptr, OHAudioDecoderGetOutputDescriptionBnormal, nullptr,
994          nullptr, nullptr, napi_default, nullptr},
995         {"OHAudioDecoderGetOutputDescriptionCnormal", nullptr, OHAudioDecoderGetOutputDescriptionCnormal, nullptr,
996          nullptr, nullptr, napi_default, nullptr},
997         {"OHAudioDecoderSetParameterAnormal", nullptr, OHAudioDecoderSetParameterAnormal, nullptr, nullptr, nullptr,
998          napi_default, nullptr},
999         {"OHAudioDecoderSetParameterBnormal", nullptr, OHAudioDecoderSetParameterBnormal, nullptr, nullptr, nullptr,
1000          napi_default, nullptr},
1001         {"OHAudioDecoderSetParameterCnormal", nullptr, OHAudioDecoderSetParameterCnormal, nullptr, nullptr, nullptr,
1002          napi_default, nullptr},
1003         {"OHAudioDecoderIsValidAnormal", nullptr, OHAudioDecoderIsValidAnormal, nullptr, nullptr, nullptr, napi_default,
1004          nullptr},
1005         {"OHAudioDecoderIsValidBnormal", nullptr, OHAudioDecoderIsValidBnormal, nullptr, nullptr, nullptr, napi_default,
1006          nullptr},
1007         {"OHAudioDecoderIsValidCnormal", nullptr, OHAudioDecoderIsValidCnormal, nullptr, nullptr, nullptr, napi_default,
1008          nullptr},
1009     };
1010     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1011     return exports;
1012 }
1013 EXTERN_C_END
1014 
1015 static napi_module demoModule = {
1016     .nm_version = 1,
1017     .nm_flags = 0,
1018     .nm_filename = nullptr,
1019     .nm_register_func = Init,
1020     .nm_modname = "libaudiodecoderxdlndk",
1021     .nm_priv = ((void *)0),
1022     .reserved = { 0 },
1023 };
1024 
RegisterModule(void)1025 extern "C" __attribute__((constructor)) void RegisterModule(void)
1026 {
1027     napi_module_register(&demoModule);
1028 }
1029