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#ifndef AVMUXER_DEMO_BASE 16da853ecaSopenharmony_ci#define AVMUXER_DEMO_BASE 17da853ecaSopenharmony_ci 18da853ecaSopenharmony_ci#include "avmuxer.h" 19da853ecaSopenharmony_ci#include "avmuxer_demo_common.h" 20da853ecaSopenharmony_ci 21da853ecaSopenharmony_cinamespace OHOS { 22da853ecaSopenharmony_cinamespace MediaAVCodec { 23da853ecaSopenharmony_ciclass AVMuxerDemoBase { 24da853ecaSopenharmony_cipublic: 25da853ecaSopenharmony_ci AVMuxerDemoBase(); 26da853ecaSopenharmony_ci virtual ~AVMuxerDemoBase() = default; 27da853ecaSopenharmony_ci void RunCase(); 28da853ecaSopenharmony_ci void RunMultiThreadCase(); 29da853ecaSopenharmony_ci std::string GetOutputFileName(std::string header); 30da853ecaSopenharmony_ci 31da853ecaSopenharmony_ciprotected: 32da853ecaSopenharmony_ci virtual void DoRunMuxer() = 0; 33da853ecaSopenharmony_ci virtual void DoRunMultiThreadCase()= 0; 34da853ecaSopenharmony_ci virtual int DoWriteSample(uint32_t trackIndex, std::shared_ptr<AVBuffer> sample) = 0; 35da853ecaSopenharmony_ci virtual int DoAddTrack(int32_t &trackIndex, std::shared_ptr<Meta> trackDesc) = 0; 36da853ecaSopenharmony_ci virtual sptr<AVBufferQueueProducer> DoGetInputBufferQueue(uint32_t trackIndex) { return nullptr; }; 37da853ecaSopenharmony_ci int AddVideoTrack(const VideoTrackParam *param); 38da853ecaSopenharmony_ci int AddAudioTrack(const AudioTrackParam *param); 39da853ecaSopenharmony_ci int AddCoverTrack(const VideoTrackParam *param); 40da853ecaSopenharmony_ci void WriteTrackSample(); 41da853ecaSopenharmony_ci void WriteAvTrackSample(); 42da853ecaSopenharmony_ci void WriteSingleTrackSample(uint32_t trackId, std::shared_ptr<std::ifstream> file); 43da853ecaSopenharmony_ci void WriteCoverSample(); 44da853ecaSopenharmony_ci void WriteTrackSampleByBufferQueue(); 45da853ecaSopenharmony_ci void WriteAvTrackSampleByBufferQueue(); 46da853ecaSopenharmony_ci void WriteSingleTrackSampleByBufferQueue(sptr<AVBufferQueueProducer> bufferQueue, 47da853ecaSopenharmony_ci std::shared_ptr<std::ifstream> file); 48da853ecaSopenharmony_ci void SelectFormatMode(); 49da853ecaSopenharmony_ci void SelectAudioMode(); 50da853ecaSopenharmony_ci void SelectVideoMode(); 51da853ecaSopenharmony_ci void SelectCoverMode(); 52da853ecaSopenharmony_ci int SelectMode(); 53da853ecaSopenharmony_ci int SelectModeAndOpenFile(); 54da853ecaSopenharmony_ci bool ReadSampleDataInfo(std::shared_ptr<std::ifstream> file, std::shared_ptr<AVBuffer> &buffer); 55da853ecaSopenharmony_ci bool ReadSampleDataInfoByBufferQueue(std::shared_ptr<std::ifstream> file, std::shared_ptr<AVBuffer> &buffer, 56da853ecaSopenharmony_ci sptr<AVBufferQueueProducer> bufferQueue); 57da853ecaSopenharmony_ci void Reset(); 58da853ecaSopenharmony_ci static void MulThdWriteTrackSample(AVMuxerDemoBase *muxerBase, uint32_t trackId, 59da853ecaSopenharmony_ci std::shared_ptr<std::ifstream> file); 60da853ecaSopenharmony_ci static void MulThdWriteTrackSampleByBufferQueue(AVMuxerDemoBase *muxerBase, 61da853ecaSopenharmony_ci sptr<AVBufferQueueProducer> bufferQueue, std::shared_ptr<std::ifstream> file); 62da853ecaSopenharmony_ci 63da853ecaSopenharmony_ci const static AudioTrackParam *audioParams_; 64da853ecaSopenharmony_ci const static VideoTrackParam *videoParams_; 65da853ecaSopenharmony_ci const static VideoTrackParam *coverParams_; 66da853ecaSopenharmony_ci static std::string videoType_; 67da853ecaSopenharmony_ci static std::string audioType_; 68da853ecaSopenharmony_ci static std::string coverType_; 69da853ecaSopenharmony_ci static std::string format_; 70da853ecaSopenharmony_ci static Plugins::OutputFormat outputFormat_; 71da853ecaSopenharmony_ci static bool hasSetMode_; 72da853ecaSopenharmony_ci 73da853ecaSopenharmony_ci int32_t videoTrackId_ {-1}; 74da853ecaSopenharmony_ci int32_t audioTrackId_ {-1}; 75da853ecaSopenharmony_ci int32_t coverTrackId_ {-1}; 76da853ecaSopenharmony_ci sptr<AVBufferQueueProducer> videoBufferQueue_ {nullptr}; 77da853ecaSopenharmony_ci sptr<AVBufferQueueProducer> audioBufferQueue_ {nullptr}; 78da853ecaSopenharmony_ci sptr<AVBufferQueueProducer> coverBufferQueue_ {nullptr}; 79da853ecaSopenharmony_ci std::shared_ptr<std::ifstream> audioFile_ {nullptr}; 80da853ecaSopenharmony_ci std::shared_ptr<std::ifstream> videoFile_ {nullptr}; 81da853ecaSopenharmony_ci std::shared_ptr<std::ifstream> coverFile_ {nullptr}; 82da853ecaSopenharmony_ci int32_t outFd_ {-1}; 83da853ecaSopenharmony_ci int64_t audioPts_ {0}; 84da853ecaSopenharmony_ci int64_t videoPts_ {0}; 85da853ecaSopenharmony_ci}; 86da853ecaSopenharmony_ci} // MediaAVCodec 87da853ecaSopenharmony_ci} // OHOS 88da853ecaSopenharmony_ci#endif