/* * Copyright (C) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "avmuxer_demo_runner.h" #include #include #include "avmuxer_demo.h" #include "avmuxer_ffmpeg_demo.h" #include "avmuxer_engine_demo.h" #include "native_avmuxer_demo.h" using namespace std; using namespace OHOS::MediaAVCodec; constexpr int RUN_TIME = 60000; constexpr int DEMO_THREAD_COUNT = 10; static int RunLoopNativeMuxer(const string &out) { time_t startTime = 0; time_t curTime = 0; (void)time(&startTime); (void)time(&curTime); while (difftime(curTime, startTime) < RUN_TIME) { RunNativeMuxer(out.c_str()); (void)time(&curTime); } return 0; } static int RunAVMuxer() { auto avmuxer = std::make_unique(); avmuxer->RunCase(); cout << "demo avmuxer end" << endl; return 0; } static int RunAVMuxerWithMultithread() { auto avmuxer = std::make_unique(); avmuxer->RunMultiThreadCase(); cout << "demo multi thread avmuxer end" << endl; return 0; } static int RunFfmpegMuxer() { std::unique_ptr ffmpegMuxer = std::make_unique(); ffmpegMuxer->RunCase(); cout << "demo ffmpegMuxer end" << endl; return 0; } static int RunEngineMuxer() { std::unique_ptr muxer = std::make_unique(); muxer->RunCase(); cout << "demo engine demo end" << endl; return 0; } static int RunLoopEngineMuxer() { time_t startTime = 0; time_t curTime = 0; (void)time(&startTime); (void)time(&curTime); while (difftime(curTime, startTime) < RUN_TIME) { RunEngineMuxer(); (void)time(&curTime); } return 0; } void AVMuxerDemoCase(void) { cout << "Please select a muxer demo(default native muxer demo): " << endl; cout << "0:native_muxer" << endl; cout << "1:native_muxer loop" << endl; cout << "2:native_muxer multithread" << endl; cout << "3:inner_muxer" << endl; cout << "4:inner_muxer with multithread write" << endl; cout << "5:ffmpeg_muxer" << endl; cout << "6:engine_muxer" << endl; cout << "7:engine_muxer loop" << endl; string mode; (void)getline(cin, mode); if (mode == "0" || mode == "") { (void)NativeSelectMode(); (void)RunNativeMuxer("native_mux"); } else if (mode == "1") { (void)NativeSelectMode(); (void)RunLoopNativeMuxer("loop_native_mux"); } else if (mode == "2") { (void)NativeSelectMode(); vector vecThread; for (int i = 0; i < DEMO_THREAD_COUNT; ++i) { string out = to_string(i + 1); out += "_native_mux"; vecThread.push_back(thread(RunLoopNativeMuxer, out)); } for (int i = 0; i < DEMO_THREAD_COUNT; ++i) { vecThread[i].join(); } } else if (mode == "3") { (void)RunAVMuxer(); } else if (mode == "4") { (void)RunAVMuxerWithMultithread(); } else if (mode == "5") { (void)RunFfmpegMuxer(); } else if (mode == "6") { (void)RunEngineMuxer(); } else if (mode == "7") { (void)RunLoopEngineMuxer(); } }