1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 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 <string> 17da853ecaSopenharmony_ci#include <iostream> 18da853ecaSopenharmony_ci#include <ctime> 19da853ecaSopenharmony_ci#include "gtest/gtest.h" 20da853ecaSopenharmony_ci#include "AVMuxerDemo.h" 21da853ecaSopenharmony_ci#include "avcodec_errors.h" 22da853ecaSopenharmony_ci 23da853ecaSopenharmony_ciusing namespace std; 24da853ecaSopenharmony_ciusing namespace testing::ext; 25da853ecaSopenharmony_ciusing namespace OHOS; 26da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 27da853ecaSopenharmony_ciusing namespace OHOS::Media; 28da853ecaSopenharmony_ci 29da853ecaSopenharmony_cinamespace { 30da853ecaSopenharmony_ci class InnerAVMuxerFuzzTest : public testing::Test { 31da853ecaSopenharmony_ci public: 32da853ecaSopenharmony_ci static void SetUpTestCase(); 33da853ecaSopenharmony_ci static void TearDownTestCase(); 34da853ecaSopenharmony_ci void SetUp() override; 35da853ecaSopenharmony_ci void TearDown() override; 36da853ecaSopenharmony_ci }; 37da853ecaSopenharmony_ci void InnerAVMuxerFuzzTest::SetUpTestCase() {} 38da853ecaSopenharmony_ci void InnerAVMuxerFuzzTest::TearDownTestCase() {} 39da853ecaSopenharmony_ci void InnerAVMuxerFuzzTest::SetUp() {} 40da853ecaSopenharmony_ci void InnerAVMuxerFuzzTest::TearDown() {} 41da853ecaSopenharmony_ci 42da853ecaSopenharmony_ci constexpr int FUZZ_TEST_NUM = 1000000; 43da853ecaSopenharmony_ci int32_t GetIntRand() 44da853ecaSopenharmony_ci { 45da853ecaSopenharmony_ci int32_t data = -10000 + rand() % 20001; 46da853ecaSopenharmony_ci return data; 47da853ecaSopenharmony_ci } 48da853ecaSopenharmony_ci} 49da853ecaSopenharmony_ci 50da853ecaSopenharmony_ci/** 51da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_001 52da853ecaSopenharmony_ci * @tc.name : Create 53da853ecaSopenharmony_ci * @tc.desc : Fuzz test 54da853ecaSopenharmony_ci */ 55da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerFuzzTest, SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_001, TestSize.Level2) 56da853ecaSopenharmony_ci{ 57da853ecaSopenharmony_ci srand(time(nullptr) * 10); 58da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 59da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 60da853ecaSopenharmony_ci int32_t fd = -1; 61da853ecaSopenharmony_ci 62da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 63da853ecaSopenharmony_ci std::cout << "current run time is: " << i << std::endl; 64da853ecaSopenharmony_ci fd = rand(); 65da853ecaSopenharmony_ci 66da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 67da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 68da853ecaSopenharmony_ci } 69da853ecaSopenharmony_ci 70da853ecaSopenharmony_ci delete muxerDemo; 71da853ecaSopenharmony_ci} 72da853ecaSopenharmony_ci 73da853ecaSopenharmony_ci/** 74da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_002 75da853ecaSopenharmony_ci * @tc.name : SetRotation 76da853ecaSopenharmony_ci * @tc.desc : Fuzz test 77da853ecaSopenharmony_ci */ 78da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerFuzzTest, SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_002, TestSize.Level2) 79da853ecaSopenharmony_ci{ 80da853ecaSopenharmony_ci srand(time(nullptr) * 10); 81da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 82da853ecaSopenharmony_ci 83da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 84da853ecaSopenharmony_ci int32_t fd = -1; 85da853ecaSopenharmony_ci fd = muxerDemo->InnerGetFdByMode(format); 86da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 87da853ecaSopenharmony_ci 88da853ecaSopenharmony_ci 89da853ecaSopenharmony_ci int32_t rotation; 90da853ecaSopenharmony_ci int32_t ret; 91da853ecaSopenharmony_ci 92da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 93da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 94da853ecaSopenharmony_ci rotation = GetIntRand(); 95da853ecaSopenharmony_ci cout << "rotation is: " << rotation << endl; 96da853ecaSopenharmony_ci ret = muxerDemo->InnerSetRotation(rotation); 97da853ecaSopenharmony_ci cout << "ret code is: " << ret << endl; 98da853ecaSopenharmony_ci } 99da853ecaSopenharmony_ci 100da853ecaSopenharmony_ci delete muxerDemo; 101da853ecaSopenharmony_ci} 102da853ecaSopenharmony_ci 103da853ecaSopenharmony_ci/** 104da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_003 105da853ecaSopenharmony_ci * @tc.name : AddTrack 106da853ecaSopenharmony_ci * @tc.desc : Fuzz test 107da853ecaSopenharmony_ci */ 108da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerFuzzTest, SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_003, TestSize.Level2) 109da853ecaSopenharmony_ci{ 110da853ecaSopenharmony_ci srand(time(nullptr) * 10); 111da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 112da853ecaSopenharmony_ci 113da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 114da853ecaSopenharmony_ci int32_t fd = -1; 115da853ecaSopenharmony_ci fd = muxerDemo->InnerGetFdByMode(format); 116da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 117da853ecaSopenharmony_ci 118da853ecaSopenharmony_ci 119da853ecaSopenharmony_ci string mimeType[] = {"audio/mp4a-latm", "audio/mpeg", "video/avc", "video/mp4v-es"}; 120da853ecaSopenharmony_ci std::shared_ptr<Meta> mediaParams = std::make_shared<memset_sOptAsm>(); 121da853ecaSopenharmony_ci 122da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 123da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 124da853ecaSopenharmony_ci int typeIndex = rand() % 4; 125da853ecaSopenharmony_ci int bitRate = GetIntRand(); 126da853ecaSopenharmony_ci int dataLen = rand() % 65536; 127da853ecaSopenharmony_ci vector<uint8_t> data(dataLen); 128da853ecaSopenharmony_ci int audioSampleFormat = GetIntRand(); 129da853ecaSopenharmony_ci int audioChannels = GetIntRand(); 130da853ecaSopenharmony_ci int audioSampleRate = GetIntRand(); 131da853ecaSopenharmony_ci 132da853ecaSopenharmony_ci int videoWidth = GetIntRand(); 133da853ecaSopenharmony_ci int videoHeight = GetIntRand(); 134da853ecaSopenharmony_ci double videoFrameRate = GetIntRand(); 135da853ecaSopenharmony_ci 136da853ecaSopenharmony_ci cout << "OH_AV_KEY_MIME is: " << mimeType[typeIndex] << endl; 137da853ecaSopenharmony_ci cout << "OH_AV_KEY_BIT_RATE is: " << bitRate << ", OH_AV_KEY_CODEC_CONFIG len is: " << dataLen << endl; 138da853ecaSopenharmony_ci cout << "OH_AV_KEY_AUDIO_SAMPLE_FORMAT is: " << audioSampleFormat << 139da853ecaSopenharmony_ci ", OH_AV_KEY_AUDIO_CHANNELS len is: " << audioChannels << endl; 140da853ecaSopenharmony_ci cout << "OH_AV_KEY_VIDEO_HEIGHT is: " << videoHeight << 141da853ecaSopenharmony_ci ", OH_AV_KEY_VIDEO_FRAME_RATE len is: " << videoFrameRate << endl; 142da853ecaSopenharmony_ci 143da853ecaSopenharmony_ci mediaParams->Set<Tag::MIME_TYPE>(mimeType[typeIndex].c_str()); 144da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_BITRATE>(bitRate); 145da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_CODEC_CONFIG>(data); 146da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_CHANNEL_COUNT>(audioChannels); 147da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_SAMPLE_RATE>(audioSampleRate); 148da853ecaSopenharmony_ci 149da853ecaSopenharmony_ci // video config 150da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_WIDTH>(videoWidth); 151da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_HEIGHT>(videoHeight); 152da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_FRAME_RATE>(videoFrameRate); 153da853ecaSopenharmony_ci 154da853ecaSopenharmony_ci int trackIndex = 0; 155da853ecaSopenharmony_ci muxerDemo->InnerAddTrack(trackIndex, mediaParams); 156da853ecaSopenharmony_ci } 157da853ecaSopenharmony_ci 158da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 159da853ecaSopenharmony_ci delete muxerDemo; 160da853ecaSopenharmony_ci} 161da853ecaSopenharmony_ci 162da853ecaSopenharmony_ci 163da853ecaSopenharmony_ci/** 164da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_004 165da853ecaSopenharmony_ci * @tc.name : WriteSampleBuffer 166da853ecaSopenharmony_ci * @tc.desc : Fuzz test 167da853ecaSopenharmony_ci */ 168da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerFuzzTest, SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_004, TestSize.Level2) 169da853ecaSopenharmony_ci{ 170da853ecaSopenharmony_ci srand(time(nullptr) * 10); 171da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 172da853ecaSopenharmony_ci 173da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 174da853ecaSopenharmony_ci int32_t fd = -1; 175da853ecaSopenharmony_ci fd = muxerDemo->InnerGetFdByMode(format); 176da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 177da853ecaSopenharmony_ci 178da853ecaSopenharmony_ci std::vector<uint8_t> a(100); 179da853ecaSopenharmony_ci std::shared_ptr<Meta> mediaParams = std::make_shared<Meta>(); 180da853ecaSopenharmony_ci mediaParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 181da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_BITRATE>(320000); 182da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 183da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 184da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 185da853ecaSopenharmony_ci 186da853ecaSopenharmony_ci int32_t trackId; 187da853ecaSopenharmony_ci int32_t ret; 188da853ecaSopenharmony_ci int trackIndex = 0; 189da853ecaSopenharmony_ci int64_t pts = 0; 190da853ecaSopenharmony_ci 191da853ecaSopenharmony_ci trackId = muxerDemo->InnerAddTrack(trackIndex, mediaParams); 192da853ecaSopenharmony_ci 193da853ecaSopenharmony_ci ret = muxerDemo->InnerStart(); 194da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 195da853ecaSopenharmony_ci 196da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 197da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 198da853ecaSopenharmony_ci int dataLen = rand() % 65536; 199da853ecaSopenharmony_ci uint8_t data[dataLen]; 200da853ecaSopenharmony_ci cout << "data len is:" << dataLen << endl; 201da853ecaSopenharmony_ci 202da853ecaSopenharmony_ci pts += 21; 203da853ecaSopenharmony_ci trackIndex = trackId; 204da853ecaSopenharmony_ci 205da853ecaSopenharmony_ci cout << "pts is:" << pts << endl; 206da853ecaSopenharmony_ci cout << "size is:" << dataLen << endl; 207da853ecaSopenharmony_ci cout << "trackIndex is:" << trackIndex << endl; 208da853ecaSopenharmony_ci auto alloc = AVAllocatorFactory::CreateSharedAllocator(MemoryFlag::MEMORY_READ_WRITE); 209da853ecaSopenharmony_ci std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(alloc, dataLen); 210da853ecaSopenharmony_ci avMemBuffer->memory_->Write(data, dataLen); 211da853ecaSopenharmony_ci avMemBuffer->pts_ = pts; 212da853ecaSopenharmony_ci ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 213da853ecaSopenharmony_ci cout << "ret code is: " << ret << endl; 214da853ecaSopenharmony_ci } 215da853ecaSopenharmony_ci 216da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 217da853ecaSopenharmony_ci delete muxerDemo; 218da853ecaSopenharmony_ci} 219da853ecaSopenharmony_ci 220da853ecaSopenharmony_cistatic int HwTest_AddTrack(std::shared_ptr<Meta> mediaParams, int64_t *pts, int32_t *size, AVMuxerDemo *muxerDemo) 221da853ecaSopenharmony_ci{ 222da853ecaSopenharmony_ci string mimeType[] = { "audio/mp4a-latm", "audio/mpeg", "video/avc", "video/mp4v-es" }; 223da853ecaSopenharmony_ci // AddTrack 224da853ecaSopenharmony_ci int typeIndex = rand() % 4; 225da853ecaSopenharmony_ci int bitRate = GetIntRand(); 226da853ecaSopenharmony_ci int configLen = rand() % 65536; 227da853ecaSopenharmony_ci std::vector<uint8_t> config(configLen); 228da853ecaSopenharmony_ci int audioSampleFormat = GetIntRand(); 229da853ecaSopenharmony_ci int audioChannels = GetIntRand(); 230da853ecaSopenharmony_ci int audioSampleRate = GetIntRand(); 231da853ecaSopenharmony_ci 232da853ecaSopenharmony_ci int videoWidth = GetIntRand(); 233da853ecaSopenharmony_ci int videoHeight = GetIntRand(); 234da853ecaSopenharmony_ci double videoFrameRate = GetIntRand(); 235da853ecaSopenharmony_ci 236da853ecaSopenharmony_ci cout << "OH_AV_KEY_MIME is: " << mimeType[typeIndex] << endl; 237da853ecaSopenharmony_ci cout << "OH_AV_KEY_BIT_RATE is: " << bitRate << ", OH_AV_KEY_CODEC_CONFIG len is: " << configLen << endl; 238da853ecaSopenharmony_ci cout << "OH_AV_KEY_AUDIO_SAMPLE_FORMAT is: " << audioSampleFormat 239da853ecaSopenharmony_ci << ", OH_AV_KEY_AUDIO_CHANNELS len is: " << audioChannels << endl; 240da853ecaSopenharmony_ci cout << "OH_AV_KEY_VIDEO_HEIGHT is: " << videoHeight << 241da853ecaSopenharmony_ci ", OH_AV_KEY_VIDEO_FRAME_RATE len is: " << videoFrameRate << endl; 242da853ecaSopenharmony_ci 243da853ecaSopenharmony_ci // audio config 244da853ecaSopenharmony_ci mediaParams->Set<Tag::MIME_TYPE>(mimeType[typeIndex].c_str()); 245da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_BITRATE>(bitRate); 246da853ecaSopenharmony_ci mediaParams->Set<Tag::MEDIA_CODEC_CONFIG>(config); 247da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_CHANNEL_COUNT>(audioChannels); 248da853ecaSopenharmony_ci mediaParams->Set<Tag::AUDIO_SAMPLE_RATE>(audioSampleRate); 249da853ecaSopenharmony_ci 250da853ecaSopenharmony_ci // video config 251da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_WIDTH>(videoWidth); 252da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_HEIGHT>(videoHeight); 253da853ecaSopenharmony_ci mediaParams->Set<Tag::VIDEO_FRAME_RATE>(videoFrameRate); 254da853ecaSopenharmony_ci 255da853ecaSopenharmony_ci int trackIndex = 0; 256da853ecaSopenharmony_ci int32_t trackId; 257da853ecaSopenharmony_ci int32_t ret; 258da853ecaSopenharmony_ci trackId = muxerDemo->InnerAddTrack(trackIndex, mediaParams); 259da853ecaSopenharmony_ci cout << "trackId is: " << trackId << endl; 260da853ecaSopenharmony_ci 261da853ecaSopenharmony_ci ret = muxerDemo->InnerStart(); 262da853ecaSopenharmony_ci cout << "Start ret is:" << ret << endl; 263da853ecaSopenharmony_ci 264da853ecaSopenharmony_ci int dataLen = rand() % 0x10000; 265da853ecaSopenharmony_ci 266da853ecaSopenharmony_ci constexpr int64_t PTS = 21; 267da853ecaSopenharmony_ci *pts += PTS; 268da853ecaSopenharmony_ci *size = dataLen; 269da853ecaSopenharmony_ci trackIndex = trackId; 270da853ecaSopenharmony_ci 271da853ecaSopenharmony_ci cout << "pts is:" << *pts << endl; 272da853ecaSopenharmony_ci cout << "size is:" << *size << endl; 273da853ecaSopenharmony_ci 274da853ecaSopenharmony_ci return trackIndex; 275da853ecaSopenharmony_ci} 276da853ecaSopenharmony_ci/** 277da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_005 278da853ecaSopenharmony_ci * @tc.name : WriteSample 279da853ecaSopenharmony_ci * @tc.desc : Fuzz test 280da853ecaSopenharmony_ci */ 281da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerFuzzTest, SUB_MULTIMEDIA_MEDIA_MUXER_FUZZ_005, TestSize.Level2) 282da853ecaSopenharmony_ci{ 283da853ecaSopenharmony_ci srand(time(nullptr) * 10); 284da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 285da853ecaSopenharmony_ci 286da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 287da853ecaSopenharmony_ci int32_t fd = -1; 288da853ecaSopenharmony_ci 289da853ecaSopenharmony_ci 290da853ecaSopenharmony_ci string test_key = ""; 291da853ecaSopenharmony_ci string test_value = ""; 292da853ecaSopenharmony_ci 293da853ecaSopenharmony_ci std::shared_ptr<Meta> mediaParams = std::make_shared<Meta>(); 294da853ecaSopenharmony_ci string mimeType[] = { "audio/mp4a-latm", "audio/mpeg", "video/avc", "video/mp4v-es" }; 295da853ecaSopenharmony_ci 296da853ecaSopenharmony_ci int32_t ret; 297da853ecaSopenharmony_ci int64_t pts = 0; 298da853ecaSopenharmony_ci int32_t size = 0; 299da853ecaSopenharmony_ci 300da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 301da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 302da853ecaSopenharmony_ci 303da853ecaSopenharmony_ci // Create 304da853ecaSopenharmony_ci fd = rand(); 305da853ecaSopenharmony_ci format = Plugins::OutputFormat(rand() % 3); 306da853ecaSopenharmony_ci cout << "fd is: " << fd << ", format is: " << static_cast<int32_t>(format) << endl; 307da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 308da853ecaSopenharmony_ci cout << "Create ret code is: " << ret << endl; 309da853ecaSopenharmony_ci 310da853ecaSopenharmony_ci // SetRotation 311da853ecaSopenharmony_ci float rotation = GetIntRand(); 312da853ecaSopenharmony_ci cout << "rotation is: " << rotation << endl; 313da853ecaSopenharmony_ci ret = muxerDemo->InnerSetRotation(rotation); 314da853ecaSopenharmony_ci cout << "SetRotation ret code is: " << ret << endl; 315da853ecaSopenharmony_ci 316da853ecaSopenharmony_ci // AddTrack 317da853ecaSopenharmony_ci int trackIndex = HwTest_AddTrack(mediaParams, &pts, &size, muxerDemo); 318da853ecaSopenharmony_ci 319da853ecaSopenharmony_ci auto alloc = AVAllocatorFactory::CreateSharedAllocator(MemoryFlag::MEMORY_READ_WRITE); 320da853ecaSopenharmony_ci std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(alloc, size); 321da853ecaSopenharmony_ci avMemBuffer->memory_->SetSize(size); 322da853ecaSopenharmony_ci 323da853ecaSopenharmony_ci ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 324da853ecaSopenharmony_ci cout << "WriteSample ret code is: " << ret << endl; 325da853ecaSopenharmony_ci 326da853ecaSopenharmony_ci ret = muxerDemo->InnerStop(); 327da853ecaSopenharmony_ci cout << "Stop ret is:" << ret << endl; 328da853ecaSopenharmony_ci 329da853ecaSopenharmony_ci ret = muxerDemo->InnerDestroy(); 330da853ecaSopenharmony_ci cout << "Destroy ret is:" << ret << endl; 331da853ecaSopenharmony_ci } 332da853ecaSopenharmony_ci 333da853ecaSopenharmony_ci delete muxerDemo; 334da853ecaSopenharmony_ci}