1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#include <climits>
17da853ecaSopenharmony_ci#include <iostream>
18da853ecaSopenharmony_ci#include <vector>
19da853ecaSopenharmony_ci#include "avmuxer_demo_runner.h"
20da853ecaSopenharmony_ci#include "avdemuxer_demo_runner.h"
21da853ecaSopenharmony_ci#include "avcodec_audio_decoder_inner_demo.h"
22da853ecaSopenharmony_ci#include "avcodec_audio_encoder_inner_demo.h"
23da853ecaSopenharmony_ci#include "avcodec_audio_decoder_demo.h"
24da853ecaSopenharmony_ci#include "avcodec_audio_aac_encoder_demo.h"
25da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_aac_encoder_demo.h"
26da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_amrnb_encoder_demo.h"
27da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_amrwb_encoder_demo.h"
28da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_decoder_inner_demo.h"
29da853ecaSopenharmony_ci#include "avcodec_audio_flac_encoder_demo.h"
30da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_flac_encoder_demo.h"
31da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_g711mu_encoder_demo.h"
32da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_mp3_encoder_demo.h"
33da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_lbvc_decoder_inner_demo.h"
34da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_lbvc_encoder_inner_demo.h"
35da853ecaSopenharmony_ci#include "avcodec_audio_opus_encoder_demo.h"
36da853ecaSopenharmony_ci#include "avcodec_audio_g711mu_encoder_demo.h"
37da853ecaSopenharmony_ci#include "codeclist_demo.h"
38da853ecaSopenharmony_ci#include "avcodec_video_decoder_demo.h"
39da853ecaSopenharmony_ci#include "avcodec_video_decoder_inner_demo.h"
40da853ecaSopenharmony_ci#include "avcodec_audio_avbuffer_decoder_demo.h"
41da853ecaSopenharmony_ci#include "avcodec_e2e_demo.h"
42da853ecaSopenharmony_ci#include "avcodec_e2e_demo_api10.h"
43da853ecaSopenharmony_ci
44da853ecaSopenharmony_ciusing namespace OHOS;
45da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec;
46da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioDemo;
47da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioBufferDemo;
48da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioFlacDemo;
49da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioFlacEncDemo;  // AudioEncoderBufferDemo
50da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioOpusDemo;
51da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioG711muDemo;
52da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAvbufferG711muDemo;
53da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAvbufferMp3EncoderDemo;
54da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAacDemo;
55da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAacEncDemo;
56da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::InnerAudioDemo;
57da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::VideoDemo;
58da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::InnerVideoDemo;
59da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::E2EDemo;
60da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::InnerAudioDecoderLbvcDemo;
61da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::InnerAudioEncoderLbvcDemo;
62da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAvbufferAmrNbDemo;
63da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioAvbufferAmrWbDemo;
64da853ecaSopenharmony_ciusing namespace std;
65da853ecaSopenharmony_ci
66da853ecaSopenharmony_cistatic int RunAudioDecoder()
67da853ecaSopenharmony_ci{
68da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Decoder): " << endl;
69da853ecaSopenharmony_ci    cout << "0: AAC" << endl;
70da853ecaSopenharmony_ci    cout << "1: FLAC" << endl;
71da853ecaSopenharmony_ci    cout << "2: MP3" << endl;
72da853ecaSopenharmony_ci    cout << "3: VORBIS" << endl;
73da853ecaSopenharmony_ci    cout << "4: AMRNB" << endl;
74da853ecaSopenharmony_ci    cout << "5: AMRWB" << endl;
75da853ecaSopenharmony_ci    cout << "6: OPUS" << endl;
76da853ecaSopenharmony_ci    cout << "7: G711MU" << endl;
77da853ecaSopenharmony_ci    string mode;
78da853ecaSopenharmony_ci    AudioFormatType audioFormatType = TYPE_AAC;
79da853ecaSopenharmony_ci    (void)getline(cin, mode);
80da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
81da853ecaSopenharmony_ci        audioFormatType = TYPE_AAC;
82da853ecaSopenharmony_ci    } else if (mode == "1") {
83da853ecaSopenharmony_ci        audioFormatType = TYPE_FLAC;
84da853ecaSopenharmony_ci    } else if (mode == "2") {
85da853ecaSopenharmony_ci        audioFormatType = TYPE_MP3;
86da853ecaSopenharmony_ci    } else if (mode == "3") {
87da853ecaSopenharmony_ci        audioFormatType = TYPE_VORBIS;
88da853ecaSopenharmony_ci    } else if (mode == "4") {
89da853ecaSopenharmony_ci        audioFormatType = TYPE_AMRNB;
90da853ecaSopenharmony_ci    } else if (mode == "5") {
91da853ecaSopenharmony_ci        audioFormatType = TYPE_AMRWB;
92da853ecaSopenharmony_ci    } else if (mode == "6") {
93da853ecaSopenharmony_ci        audioFormatType = TYPE_OPUS;
94da853ecaSopenharmony_ci    } else if (mode == "7") {
95da853ecaSopenharmony_ci        audioFormatType = TYPE_G711MU;
96da853ecaSopenharmony_ci    } else {
97da853ecaSopenharmony_ci        cout << "no that selection" << endl;
98da853ecaSopenharmony_ci        return 0;
99da853ecaSopenharmony_ci    }
100da853ecaSopenharmony_ci    auto audioDec = std::make_unique<ADecDemo>();
101da853ecaSopenharmony_ci    audioDec->RunCase(audioFormatType);
102da853ecaSopenharmony_ci    cout << "demo audio decoder end" << endl;
103da853ecaSopenharmony_ci    return 0;
104da853ecaSopenharmony_ci}
105da853ecaSopenharmony_ci
106da853ecaSopenharmony_cistatic int RunAudioAVBufferDecoder()
107da853ecaSopenharmony_ci{
108da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Decoder): " << endl;
109da853ecaSopenharmony_ci    cout << "0: AAC" << endl;
110da853ecaSopenharmony_ci    cout << "1: FLAC" << endl;
111da853ecaSopenharmony_ci    cout << "2: MP3" << endl;
112da853ecaSopenharmony_ci    cout << "3: VORBIS" << endl;
113da853ecaSopenharmony_ci    cout << "4: AMR-NB" << endl;
114da853ecaSopenharmony_ci    cout << "5: AMR-WB" << endl;
115da853ecaSopenharmony_ci    cout << "6: G711MU" << endl;
116da853ecaSopenharmony_ci    cout << "7: APE" << endl;
117da853ecaSopenharmony_ci
118da853ecaSopenharmony_ci    string mode;
119da853ecaSopenharmony_ci    AudioBufferFormatType audioFormatType = AudioBufferFormatType::TYPE_AAC;
120da853ecaSopenharmony_ci    (void)getline(cin, mode);
121da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
122da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_AAC;
123da853ecaSopenharmony_ci    } else if (mode == "1") {
124da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_FLAC;
125da853ecaSopenharmony_ci    } else if (mode == "2") {
126da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_MP3;
127da853ecaSopenharmony_ci    } else if (mode == "3") {
128da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_VORBIS;
129da853ecaSopenharmony_ci    } else if (mode == "4") {
130da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_AMRNB;
131da853ecaSopenharmony_ci    } else if (mode == "5") {
132da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_AMRWB;
133da853ecaSopenharmony_ci    } else if (mode == "6") {
134da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_G711MU;
135da853ecaSopenharmony_ci    } else if (mode == "7") {
136da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_APE;
137da853ecaSopenharmony_ci    } else {
138da853ecaSopenharmony_ci        cout << "no that selection" << endl;
139da853ecaSopenharmony_ci        return 0;
140da853ecaSopenharmony_ci    }
141da853ecaSopenharmony_ci    auto audioDec = std::make_unique<ADecBufferDemo>();
142da853ecaSopenharmony_ci    audioDec->RunCase(audioFormatType);
143da853ecaSopenharmony_ci    cout << "demo audio decoder end" << endl;
144da853ecaSopenharmony_ci    return 0;
145da853ecaSopenharmony_ci}
146da853ecaSopenharmony_ci
147da853ecaSopenharmony_cistatic int RunAudioAVBufferDecoderDrm()
148da853ecaSopenharmony_ci{
149da853ecaSopenharmony_ci    cout << "RunAudioAVBufferDecoderDrm" << endl;
150da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Decoder): " << endl;
151da853ecaSopenharmony_ci    cout << "0: AAC" << endl;
152da853ecaSopenharmony_ci    cout << "1: FLAC" << endl;
153da853ecaSopenharmony_ci    cout << "2: MP3" << endl;
154da853ecaSopenharmony_ci
155da853ecaSopenharmony_ci    string mode;
156da853ecaSopenharmony_ci    AudioBufferFormatType audioFormatType = AudioBufferFormatType::TYPE_AAC;
157da853ecaSopenharmony_ci    (void)getline(cin, mode);
158da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
159da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_AAC;
160da853ecaSopenharmony_ci    } else if (mode == "1") {
161da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_FLAC;
162da853ecaSopenharmony_ci    } else if (mode == "2") {
163da853ecaSopenharmony_ci        audioFormatType = AudioBufferFormatType::TYPE_MP3;
164da853ecaSopenharmony_ci    } else {
165da853ecaSopenharmony_ci        cout << "no that selection" << endl;
166da853ecaSopenharmony_ci        return 0;
167da853ecaSopenharmony_ci    }
168da853ecaSopenharmony_ci    auto audioDec = std::make_unique<ADecBufferDemo>();
169da853ecaSopenharmony_ci    audioDec->RunDrmCase(audioFormatType);
170da853ecaSopenharmony_ci    cout << "demo audio decoder end" << endl;
171da853ecaSopenharmony_ci    return 0;
172da853ecaSopenharmony_ci}
173da853ecaSopenharmony_ci
174da853ecaSopenharmony_cistatic int RunAudioEncoder()
175da853ecaSopenharmony_ci{
176da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Encoder): " << endl;
177da853ecaSopenharmony_ci    cout << "0: AAC\n" << "1: FLAC" << endl;
178da853ecaSopenharmony_ci    cout << "2: OPUS" << endl;
179da853ecaSopenharmony_ci    cout << "3: G711MU" << endl;
180da853ecaSopenharmony_ci    cout << "4: AAC-API11" << endl;
181da853ecaSopenharmony_ci    cout << "5: FLAC-API11" << endl;
182da853ecaSopenharmony_ci    cout << "6: G711MU-API11" << endl;
183da853ecaSopenharmony_ci    cout << "7: AMR-NB-API11" << endl;
184da853ecaSopenharmony_ci    cout << "8: AMR-WB-API11" << endl;
185da853ecaSopenharmony_ci    cout << "9: MP3-API11" << endl;
186da853ecaSopenharmony_ci    string mode;
187da853ecaSopenharmony_ci    (void)getline(cin, mode);
188da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
189da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncAacDemo>();
190da853ecaSopenharmony_ci        audioEnc->RunCase();
191da853ecaSopenharmony_ci    } else if (mode == "1") {
192da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncFlacDemo>();
193da853ecaSopenharmony_ci        audioEnc->RunCase();
194da853ecaSopenharmony_ci    } else if (mode == "2") {
195da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncOpusDemo>();
196da853ecaSopenharmony_ci        audioEnc->RunCase();
197da853ecaSopenharmony_ci    } else if (mode == "3") {
198da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncG711muDemo>();
199da853ecaSopenharmony_ci        audioEnc->RunCase();
200da853ecaSopenharmony_ci    } else if (mode == "4") {
201da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AudioBufferAacEncDemo>();
202da853ecaSopenharmony_ci        audioEnc->RunCase();
203da853ecaSopenharmony_ci    } else if (mode == "5") {
204da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AudioBufferFlacEncDemo>();
205da853ecaSopenharmony_ci        audioEnc->RunCase();
206da853ecaSopenharmony_ci    } else if (mode == "6") {
207da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncAvbufferG711muDemo>();
208da853ecaSopenharmony_ci        audioEnc->RunCase();
209da853ecaSopenharmony_ci    } else if (mode == "7") {
210da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncAvbufferAmrNbDemo>();
211da853ecaSopenharmony_ci        audioEnc->RunCase();
212da853ecaSopenharmony_ci    } else if (mode == "8") {
213da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncAvbufferAmrWbDemo>();
214da853ecaSopenharmony_ci        audioEnc->RunCase();
215da853ecaSopenharmony_ci    } else if (mode == "9") {
216da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEncAvbufferMp3Demo>();
217da853ecaSopenharmony_ci        audioEnc->RunCase();
218da853ecaSopenharmony_ci    } else {
219da853ecaSopenharmony_ci        cout << "no that selection" << endl;
220da853ecaSopenharmony_ci        return 0;
221da853ecaSopenharmony_ci    }
222da853ecaSopenharmony_ci    cout << "demo audio encoder end" << endl;
223da853ecaSopenharmony_ci    return 0;
224da853ecaSopenharmony_ci}
225da853ecaSopenharmony_ci
226da853ecaSopenharmony_cistatic int RunAudioInnerDecoder()
227da853ecaSopenharmony_ci{
228da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Decoder): " << endl;
229da853ecaSopenharmony_ci    cout << "0: AAC" << endl;
230da853ecaSopenharmony_ci    cout << "1: FLAC" << endl;
231da853ecaSopenharmony_ci    cout << "2: MP3" << endl;
232da853ecaSopenharmony_ci    cout << "3: VORBIS" << endl;
233da853ecaSopenharmony_ci    cout << "4: DecoderInner-API11" << endl;
234da853ecaSopenharmony_ci    cout << "5: LBVC" << endl;
235da853ecaSopenharmony_ci    string mode;
236da853ecaSopenharmony_ci    (void)getline(cin, mode);
237da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
238da853ecaSopenharmony_ci        auto audioDec = std::make_unique<ADecInnerDemo>();
239da853ecaSopenharmony_ci        audioDec->RunCase();
240da853ecaSopenharmony_ci    } else if (mode == "1") {
241da853ecaSopenharmony_ci        auto audioDec = std::make_unique<ADecInnerDemo>();
242da853ecaSopenharmony_ci        audioDec->RunCase();
243da853ecaSopenharmony_ci    } else if (mode == "2") {
244da853ecaSopenharmony_ci        auto audioDec = std::make_unique<ADecInnerDemo>();
245da853ecaSopenharmony_ci        audioDec->RunCase();
246da853ecaSopenharmony_ci    } else if (mode == "3") {
247da853ecaSopenharmony_ci        auto audioDec = std::make_unique<ADecInnerDemo>();
248da853ecaSopenharmony_ci        audioDec->RunCase();
249da853ecaSopenharmony_ci    } else if (mode == "4") {
250da853ecaSopenharmony_ci        auto audioDec = std::make_unique<AudioDecInnerAvBufferDemo>();
251da853ecaSopenharmony_ci        audioDec->RunCase();
252da853ecaSopenharmony_ci    } else if (mode == "5") {
253da853ecaSopenharmony_ci        auto audioDec = std::make_unique<AudioDecInnerAvBufferLbvcDemo>();
254da853ecaSopenharmony_ci        audioDec->RunCase();
255da853ecaSopenharmony_ci    } else {
256da853ecaSopenharmony_ci        cout << "no that selection" << endl;
257da853ecaSopenharmony_ci        return 0;
258da853ecaSopenharmony_ci    }
259da853ecaSopenharmony_ci    cout << "demo audio decoder end" << endl;
260da853ecaSopenharmony_ci    return 0;
261da853ecaSopenharmony_ci}
262da853ecaSopenharmony_ci
263da853ecaSopenharmony_cistatic int RunAudioInnerEncoder()
264da853ecaSopenharmony_ci{
265da853ecaSopenharmony_ci    cout << "Please select number for format (default AAC Encoder): " << endl;
266da853ecaSopenharmony_ci    cout << "0: AAC" << endl;
267da853ecaSopenharmony_ci    cout << "1: FLAC" << endl;
268da853ecaSopenharmony_ci    cout << "2: LBVC" << endl;
269da853ecaSopenharmony_ci    string mode;
270da853ecaSopenharmony_ci    (void)getline(cin, mode);
271da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
272da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEnInnerDemo>();
273da853ecaSopenharmony_ci        audioEnc->RunCase();
274da853ecaSopenharmony_ci    } else if (mode == "1") {
275da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AEnInnerDemo>();
276da853ecaSopenharmony_ci        audioEnc->RunCase();
277da853ecaSopenharmony_ci    } else if (mode == "2") {
278da853ecaSopenharmony_ci        auto audioEnc = std::make_unique<AudioEncInnerAvBufferLbvcDemo>();
279da853ecaSopenharmony_ci        audioEnc->RunCase();
280da853ecaSopenharmony_ci    } else {
281da853ecaSopenharmony_ci        cout << "no that selection" << endl;
282da853ecaSopenharmony_ci        return 0;
283da853ecaSopenharmony_ci    }
284da853ecaSopenharmony_ci    cout << "demo audio encoder end" << endl;
285da853ecaSopenharmony_ci    return 0;
286da853ecaSopenharmony_ci}
287da853ecaSopenharmony_ci
288da853ecaSopenharmony_cistatic int RunCodecList()
289da853ecaSopenharmony_ci{
290da853ecaSopenharmony_ci    auto codecList = std::make_unique<CodecListDemo>();
291da853ecaSopenharmony_ci    if (codecList == nullptr) {
292da853ecaSopenharmony_ci        cout << "codec list is null" << endl;
293da853ecaSopenharmony_ci        return 0;
294da853ecaSopenharmony_ci    }
295da853ecaSopenharmony_ci    codecList->RunCase();
296da853ecaSopenharmony_ci    cout << "codec list end" << endl;
297da853ecaSopenharmony_ci    return 0;
298da853ecaSopenharmony_ci}
299da853ecaSopenharmony_ci
300da853ecaSopenharmony_cistatic int RunVideoDecoder()
301da853ecaSopenharmony_ci{
302da853ecaSopenharmony_ci    cout << "Please select number for output mode (default buffer mode): " << endl;
303da853ecaSopenharmony_ci    cout << "0: buffer" << endl;
304da853ecaSopenharmony_ci    cout << "1: surface file" << endl;
305da853ecaSopenharmony_ci    cout << "2: surface render" << endl;
306da853ecaSopenharmony_ci    cout << "3: switch surface" << endl;
307da853ecaSopenharmony_ci
308da853ecaSopenharmony_ci    string mode;
309da853ecaSopenharmony_ci    (void)getline(cin, mode);
310da853ecaSopenharmony_ci    if (mode != "0" && mode != "1" && mode != "2" && mode != "3") {
311da853ecaSopenharmony_ci        cout << "parameter invalid" << endl;
312da853ecaSopenharmony_ci        return 0;
313da853ecaSopenharmony_ci    }
314da853ecaSopenharmony_ci
315da853ecaSopenharmony_ci    auto videoDec = std::make_unique<VDecDemo>();
316da853ecaSopenharmony_ci    if (videoDec == nullptr) {
317da853ecaSopenharmony_ci        cout << "video decoder is null" << endl;
318da853ecaSopenharmony_ci        return 0;
319da853ecaSopenharmony_ci    }
320da853ecaSopenharmony_ci    videoDec->RunCase(mode);
321da853ecaSopenharmony_ci    cout << "demo video decoder end" << endl;
322da853ecaSopenharmony_ci    return 0;
323da853ecaSopenharmony_ci}
324da853ecaSopenharmony_ci
325da853ecaSopenharmony_cistatic int RunVideoDecoderDrm()
326da853ecaSopenharmony_ci{
327da853ecaSopenharmony_ci    cout << "RunVideoDecoderDrm: " << endl;
328da853ecaSopenharmony_ci    cout << "Please select number for output mode (default buffer mode): " << endl;
329da853ecaSopenharmony_ci    cout << "0: buffer" << endl;
330da853ecaSopenharmony_ci    cout << "1: surface file" << endl;
331da853ecaSopenharmony_ci    cout << "2: surface render" << endl;
332da853ecaSopenharmony_ci
333da853ecaSopenharmony_ci    string mode;
334da853ecaSopenharmony_ci    (void)getline(cin, mode);
335da853ecaSopenharmony_ci    if (mode != "0" && mode != "1" && mode != "2") {
336da853ecaSopenharmony_ci        cout << "parameter invalid" << endl;
337da853ecaSopenharmony_ci        return 0;
338da853ecaSopenharmony_ci    }
339da853ecaSopenharmony_ci
340da853ecaSopenharmony_ci    auto videoDec = std::make_unique<VDecDemo>();
341da853ecaSopenharmony_ci    if (videoDec == nullptr) {
342da853ecaSopenharmony_ci        cout << "video decoder is null" << endl;
343da853ecaSopenharmony_ci        return 0;
344da853ecaSopenharmony_ci    }
345da853ecaSopenharmony_ci    videoDec->RunDrmCase();
346da853ecaSopenharmony_ci    cout << "demo video decoder end" << endl;
347da853ecaSopenharmony_ci    return 0;
348da853ecaSopenharmony_ci}
349da853ecaSopenharmony_ci
350da853ecaSopenharmony_cistatic int RunVideoInnerDecoder()
351da853ecaSopenharmony_ci{
352da853ecaSopenharmony_ci    cout << "Please select number for output mode (default buffer mode): " << endl;
353da853ecaSopenharmony_ci    cout << "0: buffer" << endl;
354da853ecaSopenharmony_ci    cout << "1: surface file" << endl;
355da853ecaSopenharmony_ci    cout << "2: surface render" << endl;
356da853ecaSopenharmony_ci
357da853ecaSopenharmony_ci    string mode;
358da853ecaSopenharmony_ci    (void)getline(cin, mode);
359da853ecaSopenharmony_ci    if (mode != "0" && mode != "1" && mode != "2") {
360da853ecaSopenharmony_ci        cout << "parameter invalid" << endl;
361da853ecaSopenharmony_ci        return 0;
362da853ecaSopenharmony_ci    }
363da853ecaSopenharmony_ci
364da853ecaSopenharmony_ci    auto videoDec = std::make_unique<VDecInnerDemo>();
365da853ecaSopenharmony_ci    if (videoDec == nullptr) {
366da853ecaSopenharmony_ci        cout << "video decoder is null" << endl;
367da853ecaSopenharmony_ci        return 0;
368da853ecaSopenharmony_ci    }
369da853ecaSopenharmony_ci    videoDec->RunCase(mode);
370da853ecaSopenharmony_ci    cout << "demo video decoder end" << endl;
371da853ecaSopenharmony_ci    return 0;
372da853ecaSopenharmony_ci}
373da853ecaSopenharmony_ci
374da853ecaSopenharmony_cistatic int RunE2EDemo()
375da853ecaSopenharmony_ci{
376da853ecaSopenharmony_ci    cout << "Please select number for api version (default api11): " << endl;
377da853ecaSopenharmony_ci    cout << "0: api11" << endl;
378da853ecaSopenharmony_ci    cout << "1: api10" << endl;
379da853ecaSopenharmony_ci
380da853ecaSopenharmony_ci    string mode;
381da853ecaSopenharmony_ci    (void)getline(cin, mode);
382da853ecaSopenharmony_ci    if (mode != "0" && mode != "1") {
383da853ecaSopenharmony_ci        cout << "parameter invalid" << endl;
384da853ecaSopenharmony_ci        return 0;
385da853ecaSopenharmony_ci    }
386da853ecaSopenharmony_ci    const char *path = "/data/test/media/input.mp4";
387da853ecaSopenharmony_ci    if (mode == "0") {
388da853ecaSopenharmony_ci        auto e2eDemo = std::make_unique<AVCodecE2EDemo>(path);
389da853ecaSopenharmony_ci        if (e2eDemo == nullptr) {
390da853ecaSopenharmony_ci            cout << "e2eDemo is null" << endl;
391da853ecaSopenharmony_ci            return 0;
392da853ecaSopenharmony_ci        }
393da853ecaSopenharmony_ci        e2eDemo->Configure();
394da853ecaSopenharmony_ci        e2eDemo->Start();
395da853ecaSopenharmony_ci        e2eDemo->WaitForEOS();
396da853ecaSopenharmony_ci        e2eDemo->Stop();
397da853ecaSopenharmony_ci    } else if (mode == "1") {
398da853ecaSopenharmony_ci        auto e2eDemo = std::make_unique<AVCodecE2EDemoAPI10>(path);
399da853ecaSopenharmony_ci        if (e2eDemo == nullptr) {
400da853ecaSopenharmony_ci            cout << "e2eDemo is null" << endl;
401da853ecaSopenharmony_ci            return 0;
402da853ecaSopenharmony_ci        }
403da853ecaSopenharmony_ci        e2eDemo->Configure();
404da853ecaSopenharmony_ci        e2eDemo->Start();
405da853ecaSopenharmony_ci        e2eDemo->WaitForEOS();
406da853ecaSopenharmony_ci        e2eDemo->Stop();
407da853ecaSopenharmony_ci    }
408da853ecaSopenharmony_ci    cout << "e2eDemo end" << endl;
409da853ecaSopenharmony_ci    return 0;
410da853ecaSopenharmony_ci}
411da853ecaSopenharmony_ci
412da853ecaSopenharmony_cistatic void OptionPrint()
413da853ecaSopenharmony_ci{
414da853ecaSopenharmony_ci    cout << "Please select a demo scenario number(default Audio Decoder): " << endl;
415da853ecaSopenharmony_ci    cout << "0:Audio Decoder" << endl;
416da853ecaSopenharmony_ci    cout << "1:Audio Encoder" << endl;
417da853ecaSopenharmony_ci    cout << "2:Audio Inner Decoder" << endl;
418da853ecaSopenharmony_ci    cout << "3:Audio Inner Encoder" << endl;
419da853ecaSopenharmony_ci    cout << "4:muxer demo" << endl;
420da853ecaSopenharmony_ci    cout << "6:codeclist" << endl;
421da853ecaSopenharmony_ci    cout << "7:Video Decoder" << endl;
422da853ecaSopenharmony_ci    cout << "8:Video Inner Decoder" << endl;
423da853ecaSopenharmony_ci    cout << "9:demuxer demo" << endl;
424da853ecaSopenharmony_ci    cout << "10:Audio AVBuffer Decoder" << endl;
425da853ecaSopenharmony_ci    cout << "11:Video Decoder DRM" << endl;
426da853ecaSopenharmony_ci    cout << "12:E2E demo" << endl;
427da853ecaSopenharmony_ci    cout << "13:Audio AVBuffer Decoder with DRM" << endl;
428da853ecaSopenharmony_ci}
429da853ecaSopenharmony_ci
430da853ecaSopenharmony_ciint main()
431da853ecaSopenharmony_ci{
432da853ecaSopenharmony_ci    OptionPrint();
433da853ecaSopenharmony_ci    string mode;
434da853ecaSopenharmony_ci    (void)getline(cin, mode);
435da853ecaSopenharmony_ci    if (mode == "" || mode == "0") {
436da853ecaSopenharmony_ci        (void)RunAudioDecoder();
437da853ecaSopenharmony_ci    } else if (mode == "1") {
438da853ecaSopenharmony_ci        (void)RunAudioEncoder();
439da853ecaSopenharmony_ci    } else if (mode == "2") {
440da853ecaSopenharmony_ci        (void)RunAudioInnerDecoder();
441da853ecaSopenharmony_ci    } else if (mode == "3") {
442da853ecaSopenharmony_ci        (void)RunAudioInnerEncoder();
443da853ecaSopenharmony_ci    } else if (mode == "4") {
444da853ecaSopenharmony_ci        (void)AVMuxerDemoCase();
445da853ecaSopenharmony_ci    } else if (mode == "6") {
446da853ecaSopenharmony_ci        (void)RunCodecList();
447da853ecaSopenharmony_ci    } else if (mode == "7") {
448da853ecaSopenharmony_ci        (void)RunVideoDecoder();
449da853ecaSopenharmony_ci    } else if (mode == "8") {
450da853ecaSopenharmony_ci        (void)RunVideoInnerDecoder();
451da853ecaSopenharmony_ci    } else if (mode == "9") {
452da853ecaSopenharmony_ci        (void)AVSourceDemuxerDemoCase();
453da853ecaSopenharmony_ci    } else if (mode == "10") {
454da853ecaSopenharmony_ci        (void)RunAudioAVBufferDecoder();
455da853ecaSopenharmony_ci    } else if (mode == "11") {
456da853ecaSopenharmony_ci        (void)RunVideoDecoderDrm();
457da853ecaSopenharmony_ci    } else if (mode == "12") {
458da853ecaSopenharmony_ci        (void)RunE2EDemo();
459da853ecaSopenharmony_ci    } else if (mode == "13") {
460da853ecaSopenharmony_ci        (void)RunAudioAVBufferDecoderDrm();
461da853ecaSopenharmony_ci    } else {
462da853ecaSopenharmony_ci        cout << "no that selection" << endl;
463da853ecaSopenharmony_ci    }
464da853ecaSopenharmony_ci    return 0;
465da853ecaSopenharmony_ci}
466