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}