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 "gtest/gtest.h"
17da853ecaSopenharmony_ci
18da853ecaSopenharmony_ci#include "native_avcodec_base.h"
19da853ecaSopenharmony_ci#include "native_avdemuxer.h"
20da853ecaSopenharmony_ci#include "native_avformat.h"
21da853ecaSopenharmony_ci#include "native_avsource.h"
22da853ecaSopenharmony_ci#include "native_avmemory.h"
23da853ecaSopenharmony_ci
24da853ecaSopenharmony_ci#include <iostream>
25da853ecaSopenharmony_ci#include <cstdio>
26da853ecaSopenharmony_ci#include <string>
27da853ecaSopenharmony_ci#include <fcntl.h>
28da853ecaSopenharmony_ci#include <cmath>
29da853ecaSopenharmony_ci#include <thread>
30da853ecaSopenharmony_cinamespace OHOS {
31da853ecaSopenharmony_cinamespace Media {
32da853ecaSopenharmony_ciclass DemuxerFuncNdkTest : public testing::Test {
33da853ecaSopenharmony_cipublic:
34da853ecaSopenharmony_ci    // SetUpTestCase: Called before all test cases
35da853ecaSopenharmony_ci    static void SetUpTestCase(void);
36da853ecaSopenharmony_ci    // TearDownTestCase: Called after all test case
37da853ecaSopenharmony_ci    static void TearDownTestCase(void);
38da853ecaSopenharmony_ci    // SetUp: Called before each test cases
39da853ecaSopenharmony_ci    void SetUp(void);
40da853ecaSopenharmony_ci    // TearDown: Called after each test cases
41da853ecaSopenharmony_ci    void TearDown(void);
42da853ecaSopenharmony_ci};
43da853ecaSopenharmony_ci
44da853ecaSopenharmony_cistatic OH_AVMemory *memory = nullptr;
45da853ecaSopenharmony_cistatic OH_AVSource *source = nullptr;
46da853ecaSopenharmony_cistatic OH_AVErrCode ret = AV_ERR_OK;
47da853ecaSopenharmony_cistatic OH_AVDemuxer *demuxer = nullptr;
48da853ecaSopenharmony_cistatic OH_AVFormat *sourceFormat = nullptr;
49da853ecaSopenharmony_cistatic OH_AVFormat *trackFormat = nullptr;
50da853ecaSopenharmony_cistatic OH_AVBuffer *avBuffer = nullptr;
51da853ecaSopenharmony_cistatic OH_AVFormat *format = nullptr;
52da853ecaSopenharmony_cistatic int32_t g_trackCount;
53da853ecaSopenharmony_cistatic int32_t g_width = 3840;
54da853ecaSopenharmony_cistatic int32_t g_height = 2160;
55da853ecaSopenharmony_ciconst std::string HEVC_LIB_PATH = std::string(AV_CODEC_PATH) + "/libav_codec_hevc_parser.z.so";
56da853ecaSopenharmony_civoid DemuxerFuncNdkTest::SetUpTestCase() {}
57da853ecaSopenharmony_civoid DemuxerFuncNdkTest::TearDownTestCase() {}
58da853ecaSopenharmony_civoid DemuxerFuncNdkTest::SetUp()
59da853ecaSopenharmony_ci{
60da853ecaSopenharmony_ci    memory = OH_AVMemory_Create(g_width * g_height);
61da853ecaSopenharmony_ci    g_trackCount = 0;
62da853ecaSopenharmony_ci}
63da853ecaSopenharmony_civoid DemuxerFuncNdkTest::TearDown()
64da853ecaSopenharmony_ci{
65da853ecaSopenharmony_ci    if (trackFormat != nullptr) {
66da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
67da853ecaSopenharmony_ci        trackFormat = nullptr;
68da853ecaSopenharmony_ci    }
69da853ecaSopenharmony_ci
70da853ecaSopenharmony_ci    if (sourceFormat != nullptr) {
71da853ecaSopenharmony_ci        OH_AVFormat_Destroy(sourceFormat);
72da853ecaSopenharmony_ci        sourceFormat = nullptr;
73da853ecaSopenharmony_ci    }
74da853ecaSopenharmony_ci    if (format != nullptr) {
75da853ecaSopenharmony_ci        OH_AVFormat_Destroy(format);
76da853ecaSopenharmony_ci        format = nullptr;
77da853ecaSopenharmony_ci    }
78da853ecaSopenharmony_ci
79da853ecaSopenharmony_ci    if (memory != nullptr) {
80da853ecaSopenharmony_ci        OH_AVMemory_Destroy(memory);
81da853ecaSopenharmony_ci        memory = nullptr;
82da853ecaSopenharmony_ci    }
83da853ecaSopenharmony_ci    if (source != nullptr) {
84da853ecaSopenharmony_ci        OH_AVSource_Destroy(source);
85da853ecaSopenharmony_ci        source = nullptr;
86da853ecaSopenharmony_ci    }
87da853ecaSopenharmony_ci    if (demuxer != nullptr) {
88da853ecaSopenharmony_ci        OH_AVDemuxer_Destroy(demuxer);
89da853ecaSopenharmony_ci        demuxer = nullptr;
90da853ecaSopenharmony_ci    }
91da853ecaSopenharmony_ci    if (avBuffer != nullptr) {
92da853ecaSopenharmony_ci        OH_AVBuffer_Destroy(avBuffer);
93da853ecaSopenharmony_ci        avBuffer = nullptr;
94da853ecaSopenharmony_ci    }
95da853ecaSopenharmony_ci}
96da853ecaSopenharmony_ci} // namespace Media
97da853ecaSopenharmony_ci} // namespace OHOS
98da853ecaSopenharmony_ci
99da853ecaSopenharmony_ciusing namespace std;
100da853ecaSopenharmony_ciusing namespace OHOS;
101da853ecaSopenharmony_ciusing namespace OHOS::Media;
102da853ecaSopenharmony_ciusing namespace testing::ext;
103da853ecaSopenharmony_ci
104da853ecaSopenharmony_cistatic int64_t GetFileSize(const char *fileName)
105da853ecaSopenharmony_ci{
106da853ecaSopenharmony_ci    int64_t fileSize = 0;
107da853ecaSopenharmony_ci    if (fileName != nullptr) {
108da853ecaSopenharmony_ci        struct stat fileStatus {};
109da853ecaSopenharmony_ci        if (stat(fileName, &fileStatus) == 0) {
110da853ecaSopenharmony_ci            fileSize = static_cast<int64_t>(fileStatus.st_size);
111da853ecaSopenharmony_ci        }
112da853ecaSopenharmony_ci    }
113da853ecaSopenharmony_ci    return fileSize;
114da853ecaSopenharmony_ci}
115da853ecaSopenharmony_ci
116da853ecaSopenharmony_cistatic void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame, int &aKeyCount)
117da853ecaSopenharmony_ci{
118da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
119da853ecaSopenharmony_ci        audioIsEnd = true;
120da853ecaSopenharmony_ci        cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
121da853ecaSopenharmony_ci    } else {
122da853ecaSopenharmony_ci        audioFrame++;
123da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
124da853ecaSopenharmony_ci            aKeyCount++;
125da853ecaSopenharmony_ci        }
126da853ecaSopenharmony_ci    }
127da853ecaSopenharmony_ci}
128da853ecaSopenharmony_ci
129da853ecaSopenharmony_cistatic void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame, int &vKeyCount)
130da853ecaSopenharmony_ci{
131da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
132da853ecaSopenharmony_ci        videoIsEnd = true;
133da853ecaSopenharmony_ci        cout << videoFrame << "   video is end !!!!!!!!!!!!!!!" << endl;
134da853ecaSopenharmony_ci    } else {
135da853ecaSopenharmony_ci        videoFrame++;
136da853ecaSopenharmony_ci        cout << "video track !!!!!" << endl;
137da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
138da853ecaSopenharmony_ci            vKeyCount++;
139da853ecaSopenharmony_ci        }
140da853ecaSopenharmony_ci    }
141da853ecaSopenharmony_ci}
142da853ecaSopenharmony_ci
143da853ecaSopenharmony_cistatic void SetVarValue(OH_AVCodecBufferAttr attr, const int &tarckType, bool &audioIsEnd, bool &videoIsEnd)
144da853ecaSopenharmony_ci{
145da853ecaSopenharmony_ci    if (tarckType == MEDIA_TYPE_AUD && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
146da853ecaSopenharmony_ci        audioIsEnd = true;
147da853ecaSopenharmony_ci        cout << "audio is end !!!!!!!!!!!!!!!" << endl;
148da853ecaSopenharmony_ci    }
149da853ecaSopenharmony_ci
150da853ecaSopenharmony_ci    if (tarckType == MEDIA_TYPE_VID && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
151da853ecaSopenharmony_ci        videoIsEnd = true;
152da853ecaSopenharmony_ci        cout << "video is end !!!!!!!!!!!!!!!" << endl;
153da853ecaSopenharmony_ci    }
154da853ecaSopenharmony_ci}
155da853ecaSopenharmony_ci
156da853ecaSopenharmony_cistatic void SetFirstFrameFlag(bool &isFirstFrame)
157da853ecaSopenharmony_ci{
158da853ecaSopenharmony_ci    if (isFirstFrame) {
159da853ecaSopenharmony_ci        isFirstFrame = false;
160da853ecaSopenharmony_ci    }
161da853ecaSopenharmony_ci}
162da853ecaSopenharmony_ci
163da853ecaSopenharmony_cistatic void SetEndFlag(bool &audioIsEnd, bool &videoIsEnd)
164da853ecaSopenharmony_ci{
165da853ecaSopenharmony_ci    audioIsEnd = true;
166da853ecaSopenharmony_ci    videoIsEnd = true;
167da853ecaSopenharmony_ci}
168da853ecaSopenharmony_ci
169da853ecaSopenharmony_ci/**
170da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0200
171da853ecaSopenharmony_ci * @tc.name      : create source with no permission URI
172da853ecaSopenharmony_ci * @tc.desc      : function test
173da853ecaSopenharmony_ci */
174da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0200, TestSize.Level0)
175da853ecaSopenharmony_ci{
176da853ecaSopenharmony_ci    const char *uri = "http://10.174.172.228:8080/share/audio/AAC_48000_1.aac";
177da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
178da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, source);
179da853ecaSopenharmony_ci}
180da853ecaSopenharmony_ci
181da853ecaSopenharmony_ci/**
182da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0300
183da853ecaSopenharmony_ci * @tc.name      : create source with invalid uri
184da853ecaSopenharmony_ci * @tc.desc      : function test
185da853ecaSopenharmony_ci */
186da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0300, TestSize.Level1)
187da853ecaSopenharmony_ci{
188da853ecaSopenharmony_ci    const char *uri = "http://invalidPath/invalid.mp4";
189da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
190da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, source);
191da853ecaSopenharmony_ci}
192da853ecaSopenharmony_ci
193da853ecaSopenharmony_ci/**
194da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0400
195da853ecaSopenharmony_ci * @tc.name      : create source with fd but no permission
196da853ecaSopenharmony_ci * @tc.desc      : function test
197da853ecaSopenharmony_ci */
198da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0400, TestSize.Level1)
199da853ecaSopenharmony_ci{
200da853ecaSopenharmony_ci    const char *file = "/data/media/noPermission.mp4";
201da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
202da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
203da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
204da853ecaSopenharmony_ci    cout << file << "------" << size << endl;
205da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
206da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
207da853ecaSopenharmony_ci    ASSERT_EQ(demuxer, nullptr);
208da853ecaSopenharmony_ci
209da853ecaSopenharmony_ci    close(fd);
210da853ecaSopenharmony_ci}
211da853ecaSopenharmony_ci
212da853ecaSopenharmony_ci/**
213da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0500
214da853ecaSopenharmony_ci * @tc.name      : create source with invalid fd
215da853ecaSopenharmony_ci * @tc.desc      : function test
216da853ecaSopenharmony_ci */
217da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0500, TestSize.Level1)
218da853ecaSopenharmony_ci{
219da853ecaSopenharmony_ci    const char *file = "/data/test/media/invalid.mp4";
220da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
221da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
222da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
223da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
224da853ecaSopenharmony_ci    ASSERT_EQ(source, nullptr);
225da853ecaSopenharmony_ci    close(fd);
226da853ecaSopenharmony_ci}
227da853ecaSopenharmony_ci
228da853ecaSopenharmony_ci/**
229da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0700
230da853ecaSopenharmony_ci * @tc.name      : create source with fd, mp4
231da853ecaSopenharmony_ci * @tc.desc      : function test
232da853ecaSopenharmony_ci */
233da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0700, TestSize.Level0)
234da853ecaSopenharmony_ci{
235da853ecaSopenharmony_ci    int tarckType = 0;
236da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
237da853ecaSopenharmony_ci    bool audioIsEnd = false;
238da853ecaSopenharmony_ci    bool videoIsEnd = false;
239da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
240da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
241da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
242da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
243da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
244da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
245da853ecaSopenharmony_ci
246da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
247da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
248da853ecaSopenharmony_ci
249da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
250da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
251da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
252da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
253da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
254da853ecaSopenharmony_ci    }
255da853ecaSopenharmony_ci    int64_t starttime = 0;
256da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
257da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
258da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
259da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
260da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_TRACK_START_TIME, &starttime));
261da853ecaSopenharmony_ci            ASSERT_EQ(0, starttime);
262da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
263da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
264da853ecaSopenharmony_ci            trackFormat = nullptr;
265da853ecaSopenharmony_ci
266da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
267da853ecaSopenharmony_ci                continue;
268da853ecaSopenharmony_ci            }
269da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
270da853ecaSopenharmony_ci
271da853ecaSopenharmony_ci            SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd);
272da853ecaSopenharmony_ci        }
273da853ecaSopenharmony_ci    }
274da853ecaSopenharmony_ci    close(fd);
275da853ecaSopenharmony_ci}
276da853ecaSopenharmony_ci
277da853ecaSopenharmony_ci/**
278da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0800
279da853ecaSopenharmony_ci * @tc.name      : create source with fd,avcc mp4
280da853ecaSopenharmony_ci * @tc.desc      : function test
281da853ecaSopenharmony_ci */
282da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0800, TestSize.Level0)
283da853ecaSopenharmony_ci{
284da853ecaSopenharmony_ci    int tarckType = 0;
285da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
286da853ecaSopenharmony_ci    bool audioIsEnd = false;
287da853ecaSopenharmony_ci    bool videoIsEnd = false;
288da853ecaSopenharmony_ci    int audioFrame = 0;
289da853ecaSopenharmony_ci    int videoFrame = 0;
290da853ecaSopenharmony_ci    const char *file = "/data/test/media/avcc_10sec.mp4";
291da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
292da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
293da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
294da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
295da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
296da853ecaSopenharmony_ci
297da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
298da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
299da853ecaSopenharmony_ci
300da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
301da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
302da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
303da853ecaSopenharmony_ci
304da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
305da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
306da853ecaSopenharmony_ci    }
307da853ecaSopenharmony_ci
308da853ecaSopenharmony_ci    int aKeyCount = 0;
309da853ecaSopenharmony_ci    int vKeyCount = 0;
310da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
311da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
312da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
313da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
314da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
315da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
316da853ecaSopenharmony_ci            trackFormat = nullptr;
317da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
318da853ecaSopenharmony_ci                continue;
319da853ecaSopenharmony_ci            }
320da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
321da853ecaSopenharmony_ci
322da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
323da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
324da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
325da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
326da853ecaSopenharmony_ci            }
327da853ecaSopenharmony_ci        }
328da853ecaSopenharmony_ci    }
329da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 431);
330da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 600);
331da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 431);
332da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 10);
333da853ecaSopenharmony_ci    close(fd);
334da853ecaSopenharmony_ci}
335da853ecaSopenharmony_ci
336da853ecaSopenharmony_ci/**
337da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_0900
338da853ecaSopenharmony_ci * @tc.name      : create source with fd,hvcc mp4
339da853ecaSopenharmony_ci * @tc.desc      : function test
340da853ecaSopenharmony_ci */
341da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0900, TestSize.Level0)
342da853ecaSopenharmony_ci{
343da853ecaSopenharmony_ci    int tarckType = 0;
344da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
345da853ecaSopenharmony_ci    bool audioIsEnd = false;
346da853ecaSopenharmony_ci    bool videoIsEnd = false;
347da853ecaSopenharmony_ci    int audioFrame = 0;
348da853ecaSopenharmony_ci    int videoFrame = 0;
349da853ecaSopenharmony_ci    const char *file = "/data/test/media/hvcc.mp4";
350da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
351da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
352da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
353da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
354da853ecaSopenharmony_ci
355da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
356da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
357da853ecaSopenharmony_ci
358da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
359da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
360da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
361da853ecaSopenharmony_ci
362da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
363da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
364da853ecaSopenharmony_ci    }
365da853ecaSopenharmony_ci
366da853ecaSopenharmony_ci    int aKeyCount = 0;
367da853ecaSopenharmony_ci    int vKeyCount = 0;
368da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
369da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
370da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
371da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
372da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
373da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
374da853ecaSopenharmony_ci            trackFormat = nullptr;
375da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
376da853ecaSopenharmony_ci                continue;
377da853ecaSopenharmony_ci            }
378da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
379da853ecaSopenharmony_ci
380da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
381da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
382da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
383da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
384da853ecaSopenharmony_ci            }
385da853ecaSopenharmony_ci        }
386da853ecaSopenharmony_ci    }
387da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 433);
388da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
389da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 433);
390da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
391da853ecaSopenharmony_ci    close(fd);
392da853ecaSopenharmony_ci}
393da853ecaSopenharmony_ci
394da853ecaSopenharmony_ci/**
395da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1000
396da853ecaSopenharmony_ci * @tc.name      : create source with fd,mpeg mp4
397da853ecaSopenharmony_ci * @tc.desc      : function test
398da853ecaSopenharmony_ci */
399da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1000, TestSize.Level0)
400da853ecaSopenharmony_ci{
401da853ecaSopenharmony_ci    int tarckType = 0;
402da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
403da853ecaSopenharmony_ci    bool audioIsEnd = false;
404da853ecaSopenharmony_ci    bool videoIsEnd = false;
405da853ecaSopenharmony_ci    int audioFrame = 0;
406da853ecaSopenharmony_ci    int videoFrame = 0;
407da853ecaSopenharmony_ci    const char *file = "/data/test/media/mpeg2.mp4";
408da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
409da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
410da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
411da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
412da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
413da853ecaSopenharmony_ci
414da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
415da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
416da853ecaSopenharmony_ci
417da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
418da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
419da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
420da853ecaSopenharmony_ci
421da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
422da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
423da853ecaSopenharmony_ci    }
424da853ecaSopenharmony_ci
425da853ecaSopenharmony_ci    int aKeyCount = 0;
426da853ecaSopenharmony_ci    int vKeyCount = 0;
427da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
428da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
429da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
430da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
431da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
432da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
433da853ecaSopenharmony_ci            trackFormat = nullptr;
434da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
435da853ecaSopenharmony_ci                continue;
436da853ecaSopenharmony_ci            }
437da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
438da853ecaSopenharmony_ci
439da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
440da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
441da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
442da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
443da853ecaSopenharmony_ci            }
444da853ecaSopenharmony_ci        }
445da853ecaSopenharmony_ci    }
446da853ecaSopenharmony_ci
447da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 433);
448da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 303);
449da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 433);
450da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 26);
451da853ecaSopenharmony_ci    close(fd);
452da853ecaSopenharmony_ci}
453da853ecaSopenharmony_ci
454da853ecaSopenharmony_ci/**
455da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1100
456da853ecaSopenharmony_ci * @tc.name      : demux m4a
457da853ecaSopenharmony_ci * @tc.desc      : function test
458da853ecaSopenharmony_ci */
459da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1100, TestSize.Level0)
460da853ecaSopenharmony_ci{
461da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
462da853ecaSopenharmony_ci    bool audioIsEnd = false;
463da853ecaSopenharmony_ci    int audioFrame = 0;
464da853ecaSopenharmony_ci
465da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/M4A_48000_1.m4a";
466da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
467da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
468da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
469da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
470da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
471da853ecaSopenharmony_ci
472da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
473da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
474da853ecaSopenharmony_ci
475da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
476da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
477da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
478da853ecaSopenharmony_ci
479da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
480da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
481da853ecaSopenharmony_ci    }
482da853ecaSopenharmony_ci
483da853ecaSopenharmony_ci    int keyCount = 0;
484da853ecaSopenharmony_ci    while (!audioIsEnd) {
485da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
486da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
487da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
488da853ecaSopenharmony_ci                audioIsEnd = true;
489da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
490da853ecaSopenharmony_ci                continue;
491da853ecaSopenharmony_ci            }
492da853ecaSopenharmony_ci
493da853ecaSopenharmony_ci            audioFrame++;
494da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
495da853ecaSopenharmony_ci                keyCount++;
496da853ecaSopenharmony_ci            }
497da853ecaSopenharmony_ci        }
498da853ecaSopenharmony_ci    }
499da853ecaSopenharmony_ci
500da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 10293);
501da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 10293);
502da853ecaSopenharmony_ci    close(fd);
503da853ecaSopenharmony_ci}
504da853ecaSopenharmony_ci
505da853ecaSopenharmony_ci/**
506da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1200
507da853ecaSopenharmony_ci * @tc.name      : demux aac
508da853ecaSopenharmony_ci * @tc.desc      : function test
509da853ecaSopenharmony_ci */
510da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1200, TestSize.Level0)
511da853ecaSopenharmony_ci{
512da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
513da853ecaSopenharmony_ci    bool audioIsEnd = false;
514da853ecaSopenharmony_ci    int audioFrame = 0;
515da853ecaSopenharmony_ci
516da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/AAC_48000_1.aac";
517da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
518da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
519da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
520da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
521da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
522da853ecaSopenharmony_ci
523da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
524da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
525da853ecaSopenharmony_ci
526da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
527da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
528da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
529da853ecaSopenharmony_ci
530da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
531da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
532da853ecaSopenharmony_ci    }
533da853ecaSopenharmony_ci    int keyCount = 0;
534da853ecaSopenharmony_ci    while (!audioIsEnd) {
535da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
536da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
537da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
538da853ecaSopenharmony_ci                audioIsEnd = true;
539da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
540da853ecaSopenharmony_ci                continue;
541da853ecaSopenharmony_ci            }
542da853ecaSopenharmony_ci
543da853ecaSopenharmony_ci            audioFrame++;
544da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
545da853ecaSopenharmony_ci                keyCount++;
546da853ecaSopenharmony_ci            }
547da853ecaSopenharmony_ci        }
548da853ecaSopenharmony_ci    }
549da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9457);
550da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9457);
551da853ecaSopenharmony_ci    close(fd);
552da853ecaSopenharmony_ci}
553da853ecaSopenharmony_ci
554da853ecaSopenharmony_ci/**
555da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1300
556da853ecaSopenharmony_ci * @tc.name      : demux mp3
557da853ecaSopenharmony_ci * @tc.desc      : function test
558da853ecaSopenharmony_ci */
559da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1300, TestSize.Level0)
560da853ecaSopenharmony_ci{
561da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
562da853ecaSopenharmony_ci    bool audioIsEnd = false;
563da853ecaSopenharmony_ci    int audioFrame = 0;
564da853ecaSopenharmony_ci
565da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/MP3_48000_1.mp3";
566da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
567da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
568da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
569da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
570da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
571da853ecaSopenharmony_ci
572da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
573da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
574da853ecaSopenharmony_ci
575da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
576da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
577da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
578da853ecaSopenharmony_ci
579da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
580da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
581da853ecaSopenharmony_ci    }
582da853ecaSopenharmony_ci    int keyCount = 0;
583da853ecaSopenharmony_ci    while (!audioIsEnd) {
584da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
585da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
586da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
587da853ecaSopenharmony_ci                audioIsEnd = true;
588da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
589da853ecaSopenharmony_ci                continue;
590da853ecaSopenharmony_ci            }
591da853ecaSopenharmony_ci
592da853ecaSopenharmony_ci            audioFrame++;
593da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
594da853ecaSopenharmony_ci                keyCount++;
595da853ecaSopenharmony_ci            }
596da853ecaSopenharmony_ci        }
597da853ecaSopenharmony_ci    }
598da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9150);
599da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9150);
600da853ecaSopenharmony_ci    close(fd);
601da853ecaSopenharmony_ci}
602da853ecaSopenharmony_ci
603da853ecaSopenharmony_ci/**
604da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1400
605da853ecaSopenharmony_ci * @tc.name      : demux ogg
606da853ecaSopenharmony_ci * @tc.desc      : function test
607da853ecaSopenharmony_ci */
608da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1400, TestSize.Level0)
609da853ecaSopenharmony_ci{
610da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
611da853ecaSopenharmony_ci    bool audioIsEnd = false;
612da853ecaSopenharmony_ci    int audioFrame = 0;
613da853ecaSopenharmony_ci
614da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/OGG_48000_1.ogg";
615da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
616da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
617da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
618da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
619da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
620da853ecaSopenharmony_ci
621da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
622da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
623da853ecaSopenharmony_ci
624da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
625da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
626da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
627da853ecaSopenharmony_ci
628da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
629da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
630da853ecaSopenharmony_ci    }
631da853ecaSopenharmony_ci    int keyCount = 0;
632da853ecaSopenharmony_ci    while (!audioIsEnd) {
633da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
634da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
635da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
636da853ecaSopenharmony_ci                audioIsEnd = true;
637da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
638da853ecaSopenharmony_ci                continue;
639da853ecaSopenharmony_ci            }
640da853ecaSopenharmony_ci
641da853ecaSopenharmony_ci            audioFrame++;
642da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
643da853ecaSopenharmony_ci                keyCount++;
644da853ecaSopenharmony_ci            }
645da853ecaSopenharmony_ci        }
646da853ecaSopenharmony_ci    }
647da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 11439);
648da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 11439);
649da853ecaSopenharmony_ci    close(fd);
650da853ecaSopenharmony_ci}
651da853ecaSopenharmony_ci
652da853ecaSopenharmony_ci/**
653da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1500
654da853ecaSopenharmony_ci * @tc.name      : demux flac
655da853ecaSopenharmony_ci * @tc.desc      : function test
656da853ecaSopenharmony_ci */
657da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1500, TestSize.Level0)
658da853ecaSopenharmony_ci{
659da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
660da853ecaSopenharmony_ci    bool audioIsEnd = false;
661da853ecaSopenharmony_ci    int audioFrame = 0;
662da853ecaSopenharmony_ci
663da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/FLAC_48000_1.flac";
664da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
665da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
666da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
667da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
668da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
669da853ecaSopenharmony_ci
670da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
671da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
672da853ecaSopenharmony_ci
673da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
674da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
675da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
676da853ecaSopenharmony_ci
677da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
678da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
679da853ecaSopenharmony_ci    }
680da853ecaSopenharmony_ci
681da853ecaSopenharmony_ci    int keyCount = 0;
682da853ecaSopenharmony_ci    while (!audioIsEnd) {
683da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
684da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
685da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
686da853ecaSopenharmony_ci                audioIsEnd = true;
687da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
688da853ecaSopenharmony_ci                continue;
689da853ecaSopenharmony_ci            }
690da853ecaSopenharmony_ci
691da853ecaSopenharmony_ci            audioFrame++;
692da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
693da853ecaSopenharmony_ci                keyCount++;
694da853ecaSopenharmony_ci            }
695da853ecaSopenharmony_ci        }
696da853ecaSopenharmony_ci    }
697da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 2288);
698da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 2288);
699da853ecaSopenharmony_ci    close(fd);
700da853ecaSopenharmony_ci}
701da853ecaSopenharmony_ci
702da853ecaSopenharmony_ci/**
703da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1600
704da853ecaSopenharmony_ci * @tc.name      : demux wav
705da853ecaSopenharmony_ci * @tc.desc      : function test
706da853ecaSopenharmony_ci */
707da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1600, TestSize.Level0)
708da853ecaSopenharmony_ci{
709da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
710da853ecaSopenharmony_ci    bool audioIsEnd = false;
711da853ecaSopenharmony_ci    int audioFrame = 0;
712da853ecaSopenharmony_ci
713da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_48000_1.wav";
714da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
715da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
716da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
717da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
718da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
719da853ecaSopenharmony_ci
720da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
721da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
722da853ecaSopenharmony_ci
723da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
724da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
725da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
726da853ecaSopenharmony_ci
727da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
728da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
729da853ecaSopenharmony_ci    }
730da853ecaSopenharmony_ci
731da853ecaSopenharmony_ci    int keyCount = 0;
732da853ecaSopenharmony_ci    while (!audioIsEnd) {
733da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
734da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
735da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
736da853ecaSopenharmony_ci                audioIsEnd = true;
737da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
738da853ecaSopenharmony_ci                continue;
739da853ecaSopenharmony_ci            }
740da853ecaSopenharmony_ci
741da853ecaSopenharmony_ci            audioFrame++;
742da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
743da853ecaSopenharmony_ci                keyCount++;
744da853ecaSopenharmony_ci            }
745da853ecaSopenharmony_ci        }
746da853ecaSopenharmony_ci    }
747da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 5146);
748da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 5146);
749da853ecaSopenharmony_ci    close(fd);
750da853ecaSopenharmony_ci}
751da853ecaSopenharmony_ci
752da853ecaSopenharmony_ci/**
753da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1700
754da853ecaSopenharmony_ci * @tc.name      : demux mpeg-ts
755da853ecaSopenharmony_ci * @tc.desc      : function test
756da853ecaSopenharmony_ci */
757da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1700, TestSize.Level0)
758da853ecaSopenharmony_ci{
759da853ecaSopenharmony_ci    int tarckType = 0;
760da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
761da853ecaSopenharmony_ci    bool audioIsEnd = false;
762da853ecaSopenharmony_ci    bool videoIsEnd = false;
763da853ecaSopenharmony_ci    int audioFrame = 0;
764da853ecaSopenharmony_ci    int videoFrame = 0;
765da853ecaSopenharmony_ci    const char *file = "/data/test/media/ts_video.ts";
766da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
767da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
768da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
769da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
770da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
771da853ecaSopenharmony_ci
772da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
773da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
774da853ecaSopenharmony_ci
775da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
776da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
777da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
778da853ecaSopenharmony_ci
779da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
780da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
781da853ecaSopenharmony_ci    }
782da853ecaSopenharmony_ci
783da853ecaSopenharmony_ci    int vKeyCount = 0;
784da853ecaSopenharmony_ci    int aKeyCount = 0;
785da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
786da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
787da853ecaSopenharmony_ci
788da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
789da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
790da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
791da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
792da853ecaSopenharmony_ci            trackFormat = nullptr;
793da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
794da853ecaSopenharmony_ci                continue;
795da853ecaSopenharmony_ci            }
796da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
797da853ecaSopenharmony_ci
798da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
799da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
800da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
801da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
802da853ecaSopenharmony_ci            }
803da853ecaSopenharmony_ci        }
804da853ecaSopenharmony_ci    }
805da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 384);
806da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 384);
807da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
808da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 51);
809da853ecaSopenharmony_ci    close(fd);
810da853ecaSopenharmony_ci}
811da853ecaSopenharmony_ci
812da853ecaSopenharmony_ci/**
813da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1800
814da853ecaSopenharmony_ci * @tc.name      : demux unsupported source
815da853ecaSopenharmony_ci * @tc.desc      : function test
816da853ecaSopenharmony_ci */
817da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1800, TestSize.Level2)
818da853ecaSopenharmony_ci{
819da853ecaSopenharmony_ci    const char *file = "/data/test/media/mkv.mkv";
820da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
821da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
822da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
823da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
824da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
825da853ecaSopenharmony_ci    close(fd);
826da853ecaSopenharmony_ci}
827da853ecaSopenharmony_ci
828da853ecaSopenharmony_ci/**
829da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_1900
830da853ecaSopenharmony_ci * @tc.name      : demux mp4, zero track
831da853ecaSopenharmony_ci * @tc.desc      : function test
832da853ecaSopenharmony_ci */
833da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1900, TestSize.Level1)
834da853ecaSopenharmony_ci{
835da853ecaSopenharmony_ci    const char *file = "/data/test/media/zero_track.mp4";
836da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
837da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
838da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
839da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
840da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
841da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
842da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
843da853ecaSopenharmony_ci
844da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
845da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
846da853ecaSopenharmony_ci    ASSERT_EQ(g_trackCount, 0);
847da853ecaSopenharmony_ci
848da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_INVALID_VAL, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
849da853ecaSopenharmony_ci    close(fd);
850da853ecaSopenharmony_ci}
851da853ecaSopenharmony_ci
852da853ecaSopenharmony_ci/**
853da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_2000
854da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithFD test
855da853ecaSopenharmony_ci * @tc.desc      : function test
856da853ecaSopenharmony_ci */
857da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2000, TestSize.Level0)
858da853ecaSopenharmony_ci{
859da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
860da853ecaSopenharmony_ci    bool audioIsEnd = false;
861da853ecaSopenharmony_ci    int audioFrame = 0;
862da853ecaSopenharmony_ci
863da853ecaSopenharmony_ci    const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3";
864da853ecaSopenharmony_ci    int64_t size1 = GetFileSize(file1);
865da853ecaSopenharmony_ci
866da853ecaSopenharmony_ci    const char *file = "/data/test/media/MP3_avcc_10sec.bin";
867da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
868da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
869da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
870da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size1);
871da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
872da853ecaSopenharmony_ci
873da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
874da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
875da853ecaSopenharmony_ci
876da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
877da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
878da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
879da853ecaSopenharmony_ci
880da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
881da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
882da853ecaSopenharmony_ci    }
883da853ecaSopenharmony_ci
884da853ecaSopenharmony_ci    int keyCount = 0;
885da853ecaSopenharmony_ci    while (!audioIsEnd) {
886da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
887da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
888da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
889da853ecaSopenharmony_ci                audioIsEnd = true;
890da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
891da853ecaSopenharmony_ci                continue;
892da853ecaSopenharmony_ci            }
893da853ecaSopenharmony_ci
894da853ecaSopenharmony_ci            audioFrame++;
895da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
896da853ecaSopenharmony_ci                keyCount++;
897da853ecaSopenharmony_ci            }
898da853ecaSopenharmony_ci        }
899da853ecaSopenharmony_ci    }
900da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9150);
901da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9150);
902da853ecaSopenharmony_ci    close(fd);
903da853ecaSopenharmony_ci}
904da853ecaSopenharmony_ci
905da853ecaSopenharmony_ci/**
906da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_2100
907da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithFD test
908da853ecaSopenharmony_ci * @tc.desc      : function test
909da853ecaSopenharmony_ci */
910da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2100, TestSize.Level0)
911da853ecaSopenharmony_ci{
912da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
913da853ecaSopenharmony_ci    bool audioIsEnd = false;
914da853ecaSopenharmony_ci    bool videoIsEnd = false;
915da853ecaSopenharmony_ci    int audioFrame = 0;
916da853ecaSopenharmony_ci    int videoFrame = 0;
917da853ecaSopenharmony_ci    const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3";
918da853ecaSopenharmony_ci    int64_t size1 = GetFileSize(file1);
919da853ecaSopenharmony_ci    const char *file2 = "/data/test/media/avcc_10sec.mp4";
920da853ecaSopenharmony_ci    int64_t size2 = GetFileSize(file2);
921da853ecaSopenharmony_ci    const char *file = "/data/test/media/MP3_avcc_10sec.bin";
922da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
923da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
924da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
925da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, size1, size2);
926da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
927da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
928da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
929da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
930da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
931da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
932da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
933da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
934da853ecaSopenharmony_ci    }
935da853ecaSopenharmony_ci    int tarckType = 0;
936da853ecaSopenharmony_ci    int aKeyCount = 0;
937da853ecaSopenharmony_ci    int vKeyCount = 0;
938da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
939da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
940da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
941da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
942da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
943da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
944da853ecaSopenharmony_ci            trackFormat = nullptr;
945da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
946da853ecaSopenharmony_ci                continue;
947da853ecaSopenharmony_ci            }
948da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
949da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
950da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
951da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
952da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
953da853ecaSopenharmony_ci            }
954da853ecaSopenharmony_ci        }
955da853ecaSopenharmony_ci    }
956da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 431);
957da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 600);
958da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 431);
959da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 10);
960da853ecaSopenharmony_ci    close(fd);
961da853ecaSopenharmony_ci}
962da853ecaSopenharmony_ci
963da853ecaSopenharmony_ci/**
964da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_2200
965da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithFD test
966da853ecaSopenharmony_ci * @tc.desc      : function test
967da853ecaSopenharmony_ci */
968da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2200, TestSize.Level0)
969da853ecaSopenharmony_ci{
970da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
971da853ecaSopenharmony_ci    bool audioIsEnd = false;
972da853ecaSopenharmony_ci    int audioFrame = 0;
973da853ecaSopenharmony_ci
974da853ecaSopenharmony_ci    const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3";
975da853ecaSopenharmony_ci    int64_t size1 = GetFileSize(file1);
976da853ecaSopenharmony_ci
977da853ecaSopenharmony_ci    const char *file = "/data/test/media/MP3_OGG_48000_1.bin";
978da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
979da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
980da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
981da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size1);
982da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
983da853ecaSopenharmony_ci
984da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
985da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
986da853ecaSopenharmony_ci
987da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
988da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
989da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
990da853ecaSopenharmony_ci
991da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
992da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
993da853ecaSopenharmony_ci    }
994da853ecaSopenharmony_ci
995da853ecaSopenharmony_ci    int keyCount = 0;
996da853ecaSopenharmony_ci    while (!audioIsEnd) {
997da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
998da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
999da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1000da853ecaSopenharmony_ci                audioIsEnd = true;
1001da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
1002da853ecaSopenharmony_ci                continue;
1003da853ecaSopenharmony_ci            }
1004da853ecaSopenharmony_ci
1005da853ecaSopenharmony_ci            audioFrame++;
1006da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1007da853ecaSopenharmony_ci                keyCount++;
1008da853ecaSopenharmony_ci            }
1009da853ecaSopenharmony_ci        }
1010da853ecaSopenharmony_ci    }
1011da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9150);
1012da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9150);
1013da853ecaSopenharmony_ci    close(fd);
1014da853ecaSopenharmony_ci}
1015da853ecaSopenharmony_ci
1016da853ecaSopenharmony_ci/**
1017da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_2300
1018da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithFD test
1019da853ecaSopenharmony_ci * @tc.desc      : function test
1020da853ecaSopenharmony_ci */
1021da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2300, TestSize.Level0)
1022da853ecaSopenharmony_ci{
1023da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1024da853ecaSopenharmony_ci    bool audioIsEnd = false;
1025da853ecaSopenharmony_ci    int audioFrame = 0;
1026da853ecaSopenharmony_ci
1027da853ecaSopenharmony_ci    const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3";
1028da853ecaSopenharmony_ci    int64_t size1 = GetFileSize(file1);
1029da853ecaSopenharmony_ci
1030da853ecaSopenharmony_ci    const char *file2 = "/data/test/media/audio/OGG_48000_1.ogg";
1031da853ecaSopenharmony_ci    int64_t size2 = GetFileSize(file2);
1032da853ecaSopenharmony_ci
1033da853ecaSopenharmony_ci    const char *file = "/data/test/media/MP3_OGG_48000_1.bin";
1034da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1035da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1036da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1037da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, size1, size2);
1038da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1039da853ecaSopenharmony_ci
1040da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1041da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1042da853ecaSopenharmony_ci
1043da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1044da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1045da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1046da853ecaSopenharmony_ci
1047da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1048da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1049da853ecaSopenharmony_ci    }
1050da853ecaSopenharmony_ci
1051da853ecaSopenharmony_ci    int keyCount = 0;
1052da853ecaSopenharmony_ci    while (!audioIsEnd) {
1053da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1054da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1055da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1056da853ecaSopenharmony_ci                audioIsEnd = true;
1057da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
1058da853ecaSopenharmony_ci                continue;
1059da853ecaSopenharmony_ci            }
1060da853ecaSopenharmony_ci
1061da853ecaSopenharmony_ci            audioFrame++;
1062da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1063da853ecaSopenharmony_ci                keyCount++;
1064da853ecaSopenharmony_ci            }
1065da853ecaSopenharmony_ci        }
1066da853ecaSopenharmony_ci    }
1067da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 11439);
1068da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 11439);
1069da853ecaSopenharmony_ci    close(fd);
1070da853ecaSopenharmony_ci}
1071da853ecaSopenharmony_ci
1072da853ecaSopenharmony_ci/**
1073da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_2400
1074da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithFD test
1075da853ecaSopenharmony_ci * @tc.desc      : function test
1076da853ecaSopenharmony_ci */
1077da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2400, TestSize.Level0)
1078da853ecaSopenharmony_ci{
1079da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1080da853ecaSopenharmony_ci    bool audioIsEnd = false;
1081da853ecaSopenharmony_ci    bool videoIsEnd = false;
1082da853ecaSopenharmony_ci    int audioFrame = 0;
1083da853ecaSopenharmony_ci    int videoFrame = 0;
1084da853ecaSopenharmony_ci    const char *file1 = "/data/test/media/ts_video.ts";
1085da853ecaSopenharmony_ci    int64_t size1 = GetFileSize(file1);
1086da853ecaSopenharmony_ci
1087da853ecaSopenharmony_ci    const char *file = "/data/test/media/test_video_avcc_10sec.bin";
1088da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1089da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1090da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1091da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size1);
1092da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1093da853ecaSopenharmony_ci
1094da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1095da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1096da853ecaSopenharmony_ci
1097da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1098da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1099da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1100da853ecaSopenharmony_ci
1101da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1102da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1103da853ecaSopenharmony_ci    }
1104da853ecaSopenharmony_ci    int tarckType = 0;
1105da853ecaSopenharmony_ci    int aKeyCount = 0;
1106da853ecaSopenharmony_ci    int vKeyCount = 0;
1107da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1108da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1109da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1110da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1111da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1112da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1113da853ecaSopenharmony_ci            trackFormat = nullptr;
1114da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1115da853ecaSopenharmony_ci                continue;
1116da853ecaSopenharmony_ci            }
1117da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1118da853ecaSopenharmony_ci
1119da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1120da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
1121da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1122da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1123da853ecaSopenharmony_ci            }
1124da853ecaSopenharmony_ci        }
1125da853ecaSopenharmony_ci    }
1126da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 384);
1127da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
1128da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 384);
1129da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 51);
1130da853ecaSopenharmony_ci    close(fd);
1131da853ecaSopenharmony_ci}
1132da853ecaSopenharmony_ci
1133da853ecaSopenharmony_ci/**
1134da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3100
1135da853ecaSopenharmony_ci * @tc.name      : seek to the start time, previous mode
1136da853ecaSopenharmony_ci * @tc.desc      : function test
1137da853ecaSopenharmony_ci */
1138da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3100, TestSize.Level1)
1139da853ecaSopenharmony_ci{
1140da853ecaSopenharmony_ci    uint32_t trackIndex = 0;
1141da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1142da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1143da853ecaSopenharmony_ci    int count = 0;
1144da853ecaSopenharmony_ci    srand(time(nullptr));
1145da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1146da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1147da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1148da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1149da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1150da853ecaSopenharmony_ci
1151da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1152da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1153da853ecaSopenharmony_ci
1154da853ecaSopenharmony_ci    int pos = rand() % 250;
1155da853ecaSopenharmony_ci    int64_t startPts = 0;
1156da853ecaSopenharmony_ci    bool isFirstFrame = true;
1157da853ecaSopenharmony_ci    bool isEnd = false;
1158da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1159da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1160da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1161da853ecaSopenharmony_ci    cout << g_trackCount << "####################" << endl;
1162da853ecaSopenharmony_ci
1163da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1164da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1165da853ecaSopenharmony_ci    }
1166da853ecaSopenharmony_ci
1167da853ecaSopenharmony_ci    while (!isEnd) {
1168da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1169da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1170da853ecaSopenharmony_ci
1171da853ecaSopenharmony_ci            if (isFirstFrame) {
1172da853ecaSopenharmony_ci                startPts = attr.pts;
1173da853ecaSopenharmony_ci                isFirstFrame = false;
1174da853ecaSopenharmony_ci            }
1175da853ecaSopenharmony_ci            if (count == pos) {
1176da853ecaSopenharmony_ci                isEnd = true;
1177da853ecaSopenharmony_ci                cout << pos << " =====curr_pts = attr.pts" << endl;
1178da853ecaSopenharmony_ci                break;
1179da853ecaSopenharmony_ci            }
1180da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1181da853ecaSopenharmony_ci                isEnd = true;
1182da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1183da853ecaSopenharmony_ci            }
1184da853ecaSopenharmony_ci            count++;
1185da853ecaSopenharmony_ci        }
1186da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1187da853ecaSopenharmony_ci    }
1188da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_PREVIOUS_SYNC));
1189da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1190da853ecaSopenharmony_ci    ASSERT_EQ(attr.pts, startPts);
1191da853ecaSopenharmony_ci    close(fd);
1192da853ecaSopenharmony_ci}
1193da853ecaSopenharmony_ci
1194da853ecaSopenharmony_ci/**
1195da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3200
1196da853ecaSopenharmony_ci * @tc.name      : seek to the start time, next mode
1197da853ecaSopenharmony_ci * @tc.desc      : function test
1198da853ecaSopenharmony_ci */
1199da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3200, TestSize.Level1)
1200da853ecaSopenharmony_ci{
1201da853ecaSopenharmony_ci    bool isEnd = false;
1202da853ecaSopenharmony_ci    uint32_t trackIndex = 0;
1203da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1204da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1205da853ecaSopenharmony_ci    int count = 0;
1206da853ecaSopenharmony_ci    srand(time(nullptr));
1207da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1208da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1209da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1210da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1211da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1212da853ecaSopenharmony_ci
1213da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1214da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1215da853ecaSopenharmony_ci
1216da853ecaSopenharmony_ci    int pos = rand() % 250;
1217da853ecaSopenharmony_ci    int64_t startPts = 0;
1218da853ecaSopenharmony_ci    bool isFirstFrame = true;
1219da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1220da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1221da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1222da853ecaSopenharmony_ci
1223da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1224da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1225da853ecaSopenharmony_ci    }
1226da853ecaSopenharmony_ci
1227da853ecaSopenharmony_ci    while (!isEnd) {
1228da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1229da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1230da853ecaSopenharmony_ci
1231da853ecaSopenharmony_ci            if (isFirstFrame) {
1232da853ecaSopenharmony_ci                startPts = attr.pts;
1233da853ecaSopenharmony_ci                isFirstFrame = false;
1234da853ecaSopenharmony_ci            }
1235da853ecaSopenharmony_ci            if (count == pos) {
1236da853ecaSopenharmony_ci                isEnd = true;
1237da853ecaSopenharmony_ci                cout << "curr_pts = attr.pts" << endl;
1238da853ecaSopenharmony_ci                break;
1239da853ecaSopenharmony_ci            }
1240da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1241da853ecaSopenharmony_ci                isEnd = true;
1242da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1243da853ecaSopenharmony_ci            }
1244da853ecaSopenharmony_ci            count++;
1245da853ecaSopenharmony_ci        }
1246da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1247da853ecaSopenharmony_ci    }
1248da853ecaSopenharmony_ci
1249da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_NEXT_SYNC));
1250da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1251da853ecaSopenharmony_ci    ASSERT_EQ(attr.pts, startPts);
1252da853ecaSopenharmony_ci    close(fd);
1253da853ecaSopenharmony_ci}
1254da853ecaSopenharmony_ci
1255da853ecaSopenharmony_ci/**
1256da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3300
1257da853ecaSopenharmony_ci * @tc.name      : seek to the start time, closest mode
1258da853ecaSopenharmony_ci * @tc.desc      : function test
1259da853ecaSopenharmony_ci */
1260da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3300, TestSize.Level1)
1261da853ecaSopenharmony_ci{
1262da853ecaSopenharmony_ci    bool isEnd = false;
1263da853ecaSopenharmony_ci    uint32_t trackIndex = 0;
1264da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1265da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1266da853ecaSopenharmony_ci    int count = 0;
1267da853ecaSopenharmony_ci    srand(time(nullptr));
1268da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1269da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1270da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1271da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1272da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1273da853ecaSopenharmony_ci
1274da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1275da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1276da853ecaSopenharmony_ci
1277da853ecaSopenharmony_ci    int pos = rand() % 250;
1278da853ecaSopenharmony_ci    int64_t startPts = 0;
1279da853ecaSopenharmony_ci    bool isFirstFrame = true;
1280da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1281da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1282da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1283da853ecaSopenharmony_ci
1284da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1285da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1286da853ecaSopenharmony_ci    }
1287da853ecaSopenharmony_ci
1288da853ecaSopenharmony_ci    while (!isEnd) {
1289da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1290da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1291da853ecaSopenharmony_ci
1292da853ecaSopenharmony_ci            if (isFirstFrame) {
1293da853ecaSopenharmony_ci                startPts = attr.pts;
1294da853ecaSopenharmony_ci                isFirstFrame = false;
1295da853ecaSopenharmony_ci            }
1296da853ecaSopenharmony_ci            if (count == pos) {
1297da853ecaSopenharmony_ci                isEnd = true;
1298da853ecaSopenharmony_ci                cout << "curr_pts = attr.pts" << endl;
1299da853ecaSopenharmony_ci                break;
1300da853ecaSopenharmony_ci            }
1301da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1302da853ecaSopenharmony_ci                isEnd = true;
1303da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1304da853ecaSopenharmony_ci            }
1305da853ecaSopenharmony_ci            count++;
1306da853ecaSopenharmony_ci        }
1307da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1308da853ecaSopenharmony_ci    }
1309da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_CLOSEST_SYNC));
1310da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1311da853ecaSopenharmony_ci    ASSERT_EQ(attr.pts, startPts);
1312da853ecaSopenharmony_ci    close(fd);
1313da853ecaSopenharmony_ci}
1314da853ecaSopenharmony_ci
1315da853ecaSopenharmony_ci/**
1316da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3400
1317da853ecaSopenharmony_ci * @tc.name      : seek to the end time, previous mode
1318da853ecaSopenharmony_ci * @tc.desc      : function test
1319da853ecaSopenharmony_ci */
1320da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3400, TestSize.Level1)
1321da853ecaSopenharmony_ci{
1322da853ecaSopenharmony_ci    bool isEnd = false;
1323da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1324da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1325da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1326da853ecaSopenharmony_ci    int count = 0;
1327da853ecaSopenharmony_ci    srand(time(nullptr));
1328da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1329da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1330da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1331da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1332da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1333da853ecaSopenharmony_ci
1334da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1335da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1336da853ecaSopenharmony_ci
1337da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1338da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1339da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1340da853ecaSopenharmony_ci    cout << g_trackCount << "####################" << endl;
1341da853ecaSopenharmony_ci
1342da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1343da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1344da853ecaSopenharmony_ci    }
1345da853ecaSopenharmony_ci
1346da853ecaSopenharmony_ci    int64_t endPts = 0;
1347da853ecaSopenharmony_ci    while (!isEnd) {
1348da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1349da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1350da853ecaSopenharmony_ci
1351da853ecaSopenharmony_ci            if (static_cast<uint32_t>(index) != trackIndex) {
1352da853ecaSopenharmony_ci                continue;
1353da853ecaSopenharmony_ci            }
1354da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1355da853ecaSopenharmony_ci                isEnd = true;
1356da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1357da853ecaSopenharmony_ci            } else {
1358da853ecaSopenharmony_ci                endPts = attr.pts;
1359da853ecaSopenharmony_ci            }
1360da853ecaSopenharmony_ci            count++;
1361da853ecaSopenharmony_ci        }
1362da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1363da853ecaSopenharmony_ci    }
1364da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_PREVIOUS_SYNC));
1365da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1366da853ecaSopenharmony_ci    ASSERT_EQ(attr.pts, endPts);
1367da853ecaSopenharmony_ci    close(fd);
1368da853ecaSopenharmony_ci}
1369da853ecaSopenharmony_ci
1370da853ecaSopenharmony_ci/**
1371da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3500
1372da853ecaSopenharmony_ci * @tc.name      : seek to the end time, next mode
1373da853ecaSopenharmony_ci * @tc.desc      : function test
1374da853ecaSopenharmony_ci */
1375da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3500, TestSize.Level1)
1376da853ecaSopenharmony_ci{
1377da853ecaSopenharmony_ci    bool isEnd = false;
1378da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1379da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1380da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1381da853ecaSopenharmony_ci    int count = 0;
1382da853ecaSopenharmony_ci    srand(time(nullptr));
1383da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1384da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1385da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1386da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1387da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1388da853ecaSopenharmony_ci
1389da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1390da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1391da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1392da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1393da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1394da853ecaSopenharmony_ci    cout << g_trackCount << "####################" << endl;
1395da853ecaSopenharmony_ci
1396da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1397da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1398da853ecaSopenharmony_ci    }
1399da853ecaSopenharmony_ci    int64_t endPts = 0;
1400da853ecaSopenharmony_ci    while (!isEnd) {
1401da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1402da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1403da853ecaSopenharmony_ci            if (static_cast<uint32_t>(index) != trackIndex) {
1404da853ecaSopenharmony_ci                continue;
1405da853ecaSopenharmony_ci            }
1406da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1407da853ecaSopenharmony_ci                isEnd = true;
1408da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1409da853ecaSopenharmony_ci            } else {
1410da853ecaSopenharmony_ci                endPts = attr.pts;
1411da853ecaSopenharmony_ci            }
1412da853ecaSopenharmony_ci            count++;
1413da853ecaSopenharmony_ci        }
1414da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1415da853ecaSopenharmony_ci    }
1416da853ecaSopenharmony_ci    // end I
1417da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC));
1418da853ecaSopenharmony_ci    endPts += 1000;
1419da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_UNKNOWN, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC));
1420da853ecaSopenharmony_ci    endPts += 1000000;
1421da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC));
1422da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1423da853ecaSopenharmony_ci    close(fd);
1424da853ecaSopenharmony_ci}
1425da853ecaSopenharmony_ci
1426da853ecaSopenharmony_ci/**
1427da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3600
1428da853ecaSopenharmony_ci * @tc.name      : seek to the end time, closest mode
1429da853ecaSopenharmony_ci * @tc.desc      : function test
1430da853ecaSopenharmony_ci */
1431da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3600, TestSize.Level1)
1432da853ecaSopenharmony_ci{
1433da853ecaSopenharmony_ci    bool isEnd = false;
1434da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1435da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1436da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1437da853ecaSopenharmony_ci    int count = 0;
1438da853ecaSopenharmony_ci    srand(time(nullptr));
1439da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1440da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1441da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1442da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1443da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1444da853ecaSopenharmony_ci
1445da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1446da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1447da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1448da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1449da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1450da853ecaSopenharmony_ci    cout << g_trackCount << "####################" << endl;
1451da853ecaSopenharmony_ci
1452da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1453da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1454da853ecaSopenharmony_ci    }
1455da853ecaSopenharmony_ci
1456da853ecaSopenharmony_ci    int64_t endPts = 0;
1457da853ecaSopenharmony_ci    while (!isEnd) {
1458da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1459da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1460da853ecaSopenharmony_ci            if (static_cast<uint32_t>(index) != trackIndex) {
1461da853ecaSopenharmony_ci                continue;
1462da853ecaSopenharmony_ci            }
1463da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1464da853ecaSopenharmony_ci                isEnd = true;
1465da853ecaSopenharmony_ci                cout << "is end!!!!!!!!" << endl;
1466da853ecaSopenharmony_ci            } else {
1467da853ecaSopenharmony_ci                endPts = attr.pts;
1468da853ecaSopenharmony_ci            }
1469da853ecaSopenharmony_ci            count++;
1470da853ecaSopenharmony_ci        }
1471da853ecaSopenharmony_ci        cout << "count: " << count << endl;
1472da853ecaSopenharmony_ci    }
1473da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_CLOSEST_SYNC));
1474da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1475da853ecaSopenharmony_ci    ASSERT_EQ(attr.pts, endPts);
1476da853ecaSopenharmony_ci    close(fd);
1477da853ecaSopenharmony_ci}
1478da853ecaSopenharmony_ci
1479da853ecaSopenharmony_ci/**
1480da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3700
1481da853ecaSopenharmony_ci * @tc.name      : seek to a random time, previous mode
1482da853ecaSopenharmony_ci * @tc.desc      : function test
1483da853ecaSopenharmony_ci */
1484da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3700, TestSize.Level0)
1485da853ecaSopenharmony_ci{
1486da853ecaSopenharmony_ci    bool isFirstFrame = true;
1487da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1488da853ecaSopenharmony_ci    int count = 0;
1489da853ecaSopenharmony_ci    srand(time(nullptr));
1490da853ecaSopenharmony_ci    int pos = rand() % 250;
1491da853ecaSopenharmony_ci    int posTo = rand() % 250;
1492da853ecaSopenharmony_ci    int64_t toMs = posTo * 40000;
1493da853ecaSopenharmony_ci    int tarckType = 0;
1494da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1495da853ecaSopenharmony_ci    bool audioIsEnd = false;
1496da853ecaSopenharmony_ci    bool videoIsEnd = false;
1497da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1498da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1499da853ecaSopenharmony_ci    cout << file << "pos: " << pos << "toMs: " << toMs << " fd:" << fd << " size:" << GetFileSize(file) << endl;
1500da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, GetFileSize(file));
1501da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1502da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1503da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1504da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1505da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1506da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1507da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1508da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1509da853ecaSopenharmony_ci    }
1510da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1511da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1512da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1513da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1514da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1515da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1516da853ecaSopenharmony_ci            trackFormat = nullptr;
1517da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1518da853ecaSopenharmony_ci                continue;
1519da853ecaSopenharmony_ci            }
1520da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1521da853ecaSopenharmony_ci            SetFirstFrameFlag(isFirstFrame);
1522da853ecaSopenharmony_ci            if (count == pos) {
1523da853ecaSopenharmony_ci                SetEndFlag(audioIsEnd, videoIsEnd);
1524da853ecaSopenharmony_ci                break;
1525da853ecaSopenharmony_ci            }
1526da853ecaSopenharmony_ci            SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd);
1527da853ecaSopenharmony_ci        }
1528da853ecaSopenharmony_ci        count++;
1529da853ecaSopenharmony_ci    }
1530da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_PREVIOUS_SYNC));
1531da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr));
1532da853ecaSopenharmony_ci    bool ans = abs(toMs - attr.pts) < 40000 ? true : false;
1533da853ecaSopenharmony_ci    ASSERT_EQ(ans, true);
1534da853ecaSopenharmony_ci    close(fd);
1535da853ecaSopenharmony_ci}
1536da853ecaSopenharmony_ci
1537da853ecaSopenharmony_ci/**
1538da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3800
1539da853ecaSopenharmony_ci * @tc.name      : seek to a random time, next mode
1540da853ecaSopenharmony_ci * @tc.desc      : function test
1541da853ecaSopenharmony_ci */
1542da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3800, TestSize.Level0)
1543da853ecaSopenharmony_ci{
1544da853ecaSopenharmony_ci    bool isEnd = false;
1545da853ecaSopenharmony_ci    bool isFirstFrame = true;
1546da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1547da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1548da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1549da853ecaSopenharmony_ci    int count = 0;
1550da853ecaSopenharmony_ci    srand(time(nullptr));
1551da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1552da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1553da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1554da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1555da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1556da853ecaSopenharmony_ci
1557da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1558da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1559da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1560da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1561da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1562da853ecaSopenharmony_ci
1563da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1564da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1565da853ecaSopenharmony_ci    }
1566da853ecaSopenharmony_ci    int pos = rand() % 250;
1567da853ecaSopenharmony_ci    int posTo = rand() % 250;
1568da853ecaSopenharmony_ci    int64_t toMs = posTo * 40000;
1569da853ecaSopenharmony_ci    while (!isEnd) {
1570da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1571da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1572da853ecaSopenharmony_ci            if (isFirstFrame) {
1573da853ecaSopenharmony_ci                isFirstFrame = false;
1574da853ecaSopenharmony_ci            }
1575da853ecaSopenharmony_ci            if (count == pos) {
1576da853ecaSopenharmony_ci                isEnd = true;
1577da853ecaSopenharmony_ci                break;
1578da853ecaSopenharmony_ci            }
1579da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1580da853ecaSopenharmony_ci                isEnd = true;
1581da853ecaSopenharmony_ci            }
1582da853ecaSopenharmony_ci            count++;
1583da853ecaSopenharmony_ci        }
1584da853ecaSopenharmony_ci    }
1585da853ecaSopenharmony_ci    int64_t nextIdrPts = toMs;
1586da853ecaSopenharmony_ci    ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_NEXT_SYNC);
1587da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1588da853ecaSopenharmony_ci    ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr);
1589da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1590da853ecaSopenharmony_ci    bool ans = abs(nextIdrPts - attr.pts) < 40000 ? true : false;
1591da853ecaSopenharmony_ci    ASSERT_EQ(ans, true);
1592da853ecaSopenharmony_ci    close(fd);
1593da853ecaSopenharmony_ci}
1594da853ecaSopenharmony_ci
1595da853ecaSopenharmony_ci/**
1596da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_3900
1597da853ecaSopenharmony_ci * @tc.name      : seek to a random time, closest mode
1598da853ecaSopenharmony_ci * @tc.desc      : function test
1599da853ecaSopenharmony_ci */
1600da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3900, TestSize.Level0)
1601da853ecaSopenharmony_ci{
1602da853ecaSopenharmony_ci    bool isEnd = false;
1603da853ecaSopenharmony_ci    bool isFirstFrame = true;
1604da853ecaSopenharmony_ci    uint32_t trackIndex = 1;
1605da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1606da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1607da853ecaSopenharmony_ci    int count = 0;
1608da853ecaSopenharmony_ci    srand(time(nullptr));
1609da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1610da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1611da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1612da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1613da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1614da853ecaSopenharmony_ci
1615da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1616da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1617da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1618da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1619da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1620da853ecaSopenharmony_ci
1621da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1622da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1623da853ecaSopenharmony_ci    }
1624da853ecaSopenharmony_ci    int pos = rand() % 250;
1625da853ecaSopenharmony_ci    int posTo = rand() % 250;
1626da853ecaSopenharmony_ci    int64_t toMs = posTo * 40000;
1627da853ecaSopenharmony_ci    while (!isEnd) {
1628da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1629da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1630da853ecaSopenharmony_ci            if (isFirstFrame) {
1631da853ecaSopenharmony_ci                isFirstFrame = false;
1632da853ecaSopenharmony_ci            }
1633da853ecaSopenharmony_ci            if (count == pos) {
1634da853ecaSopenharmony_ci                isEnd = true;
1635da853ecaSopenharmony_ci                cout << "curr_pts = attr.pts" << endl;
1636da853ecaSopenharmony_ci                break;
1637da853ecaSopenharmony_ci            }
1638da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1639da853ecaSopenharmony_ci                isEnd = true;
1640da853ecaSopenharmony_ci            }
1641da853ecaSopenharmony_ci            count++;
1642da853ecaSopenharmony_ci        }
1643da853ecaSopenharmony_ci    }
1644da853ecaSopenharmony_ci    int64_t closestIdrPts = toMs;
1645da853ecaSopenharmony_ci    ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_CLOSEST_SYNC);
1646da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1647da853ecaSopenharmony_ci    ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr);
1648da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1649da853ecaSopenharmony_ci    bool ans = abs(closestIdrPts - attr.pts) < 40000 ? true : false;
1650da853ecaSopenharmony_ci    ASSERT_EQ(ans, true);
1651da853ecaSopenharmony_ci    close(fd);
1652da853ecaSopenharmony_ci}
1653da853ecaSopenharmony_ci
1654da853ecaSopenharmony_ci/**
1655da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4000
1656da853ecaSopenharmony_ci * @tc.name      : seek to a invalid time, closest mode
1657da853ecaSopenharmony_ci * @tc.desc      : function test
1658da853ecaSopenharmony_ci */
1659da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4000, TestSize.Level2)
1660da853ecaSopenharmony_ci{
1661da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1662da853ecaSopenharmony_ci    srand(time(nullptr));
1663da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1664da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1665da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1666da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1667da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1668da853ecaSopenharmony_ci
1669da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1670da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1671da853ecaSopenharmony_ci
1672da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1673da853ecaSopenharmony_ci    int64_t invalidPts = 12000 * 16666;
1674da853ecaSopenharmony_ci    ret = OH_AVDemuxer_SeekToTime(demuxer, invalidPts, SEEK_MODE_CLOSEST_SYNC);
1675da853ecaSopenharmony_ci    ASSERT_NE(ret, AV_ERR_OK);
1676da853ecaSopenharmony_ci    close(fd);
1677da853ecaSopenharmony_ci}
1678da853ecaSopenharmony_ci
1679da853ecaSopenharmony_ci/**
1680da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4100
1681da853ecaSopenharmony_ci * @tc.name      : remove track before add track
1682da853ecaSopenharmony_ci * @tc.desc      : function test
1683da853ecaSopenharmony_ci */
1684da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4100, TestSize.Level2)
1685da853ecaSopenharmony_ci{
1686da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1687da853ecaSopenharmony_ci    srand(time(nullptr));
1688da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1689da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1690da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1691da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1692da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1693da853ecaSopenharmony_ci
1694da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1695da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1696da853ecaSopenharmony_ci    ret = OH_AVDemuxer_UnselectTrackByID(demuxer, 0);
1697da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1698da853ecaSopenharmony_ci    ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0);
1699da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OK);
1700da853ecaSopenharmony_ci    close(fd);
1701da853ecaSopenharmony_ci}
1702da853ecaSopenharmony_ci
1703da853ecaSopenharmony_ci/**
1704da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4200
1705da853ecaSopenharmony_ci * @tc.name      : remove all tracks after demux finish
1706da853ecaSopenharmony_ci * @tc.desc      : function test
1707da853ecaSopenharmony_ci */
1708da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4200, TestSize.Level1)
1709da853ecaSopenharmony_ci{
1710da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1711da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1712da853ecaSopenharmony_ci    bool isEnd = false;
1713da853ecaSopenharmony_ci
1714da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1715da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1716da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1717da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1718da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1719da853ecaSopenharmony_ci
1720da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1721da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1722da853ecaSopenharmony_ci
1723da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1724da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1725da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1726da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1727da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1728da853ecaSopenharmony_ci    }
1729da853ecaSopenharmony_ci    while (!isEnd) {
1730da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1731da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1732da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1733da853ecaSopenharmony_ci                isEnd = true;
1734da853ecaSopenharmony_ci                cout << "is end !!!!!!!!!!!!!!!" << endl;
1735da853ecaSopenharmony_ci            }
1736da853ecaSopenharmony_ci        }
1737da853ecaSopenharmony_ci    }
1738da853ecaSopenharmony_ci
1739da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1740da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, index));
1741da853ecaSopenharmony_ci    }
1742da853ecaSopenharmony_ci
1743da853ecaSopenharmony_ci    int32_t memorySize = OH_AVMemory_GetSize(memory);
1744da853ecaSopenharmony_ci    ASSERT_NE(0, memorySize);
1745da853ecaSopenharmony_ci    close(fd);
1746da853ecaSopenharmony_ci}
1747da853ecaSopenharmony_ci
1748da853ecaSopenharmony_ci/**
1749da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4300
1750da853ecaSopenharmony_ci * @tc.name      : remove all tracks before demux finish
1751da853ecaSopenharmony_ci * @tc.desc      : function test
1752da853ecaSopenharmony_ci */
1753da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4300, TestSize.Level1)
1754da853ecaSopenharmony_ci{
1755da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1756da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1757da853ecaSopenharmony_ci    bool isEnd = false;
1758da853ecaSopenharmony_ci    int count = 0;
1759da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1760da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1761da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1762da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1763da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1764da853ecaSopenharmony_ci
1765da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1766da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1767da853ecaSopenharmony_ci
1768da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1769da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1770da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1771da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1772da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1773da853ecaSopenharmony_ci    }
1774da853ecaSopenharmony_ci    srand(time(nullptr));
1775da853ecaSopenharmony_ci    int pos = rand() % 250;
1776da853ecaSopenharmony_ci    cout << " pos= " << pos << endl;
1777da853ecaSopenharmony_ci    while (!isEnd) {
1778da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1779da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1780da853ecaSopenharmony_ci            if (count == pos) {
1781da853ecaSopenharmony_ci                cout << count << " count == pos!!!!!!!!!" << endl;
1782da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 0));
1783da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1));
1784da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1785da853ecaSopenharmony_ci                isEnd = true;
1786da853ecaSopenharmony_ci                break;
1787da853ecaSopenharmony_ci            }
1788da853ecaSopenharmony_ci
1789da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1790da853ecaSopenharmony_ci                isEnd = true;
1791da853ecaSopenharmony_ci                cout << "is end !!!!!!!!!!!!!!!" << endl;
1792da853ecaSopenharmony_ci            }
1793da853ecaSopenharmony_ci            if (index == MEDIA_TYPE_AUD) {
1794da853ecaSopenharmony_ci                count++;
1795da853ecaSopenharmony_ci            }
1796da853ecaSopenharmony_ci        }
1797da853ecaSopenharmony_ci    }
1798da853ecaSopenharmony_ci    close(fd);
1799da853ecaSopenharmony_ci}
1800da853ecaSopenharmony_ci
1801da853ecaSopenharmony_ci/**
1802da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4400
1803da853ecaSopenharmony_ci * @tc.name      : remove audio track before demux finish
1804da853ecaSopenharmony_ci * @tc.desc      : function test
1805da853ecaSopenharmony_ci */
1806da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4400, TestSize.Level1)
1807da853ecaSopenharmony_ci{
1808da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1809da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1810da853ecaSopenharmony_ci
1811da853ecaSopenharmony_ci    int audioCount = 0;
1812da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1813da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1814da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1815da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1816da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1817da853ecaSopenharmony_ci
1818da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1819da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1820da853ecaSopenharmony_ci
1821da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1822da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1823da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1824da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1825da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1826da853ecaSopenharmony_ci    }
1827da853ecaSopenharmony_ci    srand(time(nullptr));
1828da853ecaSopenharmony_ci    int pos = rand() % 250;
1829da853ecaSopenharmony_ci    cout << " pos= " << pos << endl;
1830da853ecaSopenharmony_ci
1831da853ecaSopenharmony_ci    while (true) {
1832da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1833da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr));
1834da853ecaSopenharmony_ci        if (audioCount == pos) {
1835da853ecaSopenharmony_ci            cout << audioCount << " audioCount == pos remove audio track!!!!!!!!!" << endl;
1836da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1));
1837da853ecaSopenharmony_ci            ASSERT_NE(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr));
1838da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1839da853ecaSopenharmony_ci            break;
1840da853ecaSopenharmony_ci        }
1841da853ecaSopenharmony_ci        audioCount++;
1842da853ecaSopenharmony_ci    }
1843da853ecaSopenharmony_ci
1844da853ecaSopenharmony_ci    while (true) {
1845da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1846da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1847da853ecaSopenharmony_ci            cout << "is end !!!!!!!!!!!!!!!" << endl;
1848da853ecaSopenharmony_ci            break;
1849da853ecaSopenharmony_ci        }
1850da853ecaSopenharmony_ci    }
1851da853ecaSopenharmony_ci    close(fd);
1852da853ecaSopenharmony_ci}
1853da853ecaSopenharmony_ci
1854da853ecaSopenharmony_ci/**
1855da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_4500
1856da853ecaSopenharmony_ci * @tc.name      : start demux bufore add track
1857da853ecaSopenharmony_ci * @tc.desc      : function test
1858da853ecaSopenharmony_ci */
1859da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4500, TestSize.Level2)
1860da853ecaSopenharmony_ci{
1861da853ecaSopenharmony_ci    uint32_t trackIndex = 0;
1862da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1863da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1864da853ecaSopenharmony_ci    srand(time(nullptr));
1865da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1866da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1867da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1868da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1869da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1870da853ecaSopenharmony_ci
1871da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1872da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1873da853ecaSopenharmony_ci    ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr);
1874da853ecaSopenharmony_ci    ASSERT_EQ(ret, AV_ERR_OPERATE_NOT_PERMIT);
1875da853ecaSopenharmony_ci    close(fd);
1876da853ecaSopenharmony_ci}
1877da853ecaSopenharmony_ci
1878da853ecaSopenharmony_ci/**
1879da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7000
1880da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT
1881da853ecaSopenharmony_ci * @tc.desc      : function test
1882da853ecaSopenharmony_ci */
1883da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7000, TestSize.Level0)
1884da853ecaSopenharmony_ci{
1885da853ecaSopenharmony_ci    OH_AVFormat *trackFormat2 = nullptr;
1886da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1887da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1888da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1889da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1890da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1891da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1892da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1893da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1894da853ecaSopenharmony_ci    cout << OH_AVFormat_DumpInfo(sourceFormat) << "sourceFormat" << endl;
1895da853ecaSopenharmony_ci
1896da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 1);
1897da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1898da853ecaSopenharmony_ci    cout << OH_AVFormat_DumpInfo(trackFormat) << "trackformat1" << endl;
1899da853ecaSopenharmony_ci
1900da853ecaSopenharmony_ci    trackFormat2 = OH_AVSource_GetTrackFormat(source, 0);
1901da853ecaSopenharmony_ci    cout << OH_AVFormat_DumpInfo(trackFormat2) << "trackformat0" << endl;
1902da853ecaSopenharmony_ci    OH_AVFormat_Destroy(trackFormat2);
1903da853ecaSopenharmony_ci    trackFormat2 = nullptr;
1904da853ecaSopenharmony_ci    close(fd);
1905da853ecaSopenharmony_ci}
1906da853ecaSopenharmony_ci
1907da853ecaSopenharmony_ci/**
1908da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7100
1909da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT
1910da853ecaSopenharmony_ci * @tc.desc      : function test
1911da853ecaSopenharmony_ci */
1912da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7100, TestSize.Level0)
1913da853ecaSopenharmony_ci{
1914da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1915da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1916da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1917da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1918da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1919da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1920da853ecaSopenharmony_ci
1921da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1922da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1923da853ecaSopenharmony_ci    ASSERT_EQ(g_trackCount, 2);
1924da853ecaSopenharmony_ci    close(fd);
1925da853ecaSopenharmony_ci}
1926da853ecaSopenharmony_ci
1927da853ecaSopenharmony_ci/**
1928da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7200
1929da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_AAC_IS_ADTS
1930da853ecaSopenharmony_ci * @tc.desc      : function test
1931da853ecaSopenharmony_ci */
1932da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7200, TestSize.Level0)
1933da853ecaSopenharmony_ci{
1934da853ecaSopenharmony_ci    const char *stringVal;
1935da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1936da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1937da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1938da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1939da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1940da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1941da853ecaSopenharmony_ci
1942da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1943da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1944da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_AAC_IS_ADTS, &stringVal));
1945da853ecaSopenharmony_ci    close(fd);
1946da853ecaSopenharmony_ci}
1947da853ecaSopenharmony_ci
1948da853ecaSopenharmony_ci/**
1949da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7300
1950da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetAudioTrackFormat ,MD_KEY_BITRATE
1951da853ecaSopenharmony_ci * @tc.desc      : function test
1952da853ecaSopenharmony_ci */
1953da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7300, TestSize.Level0)
1954da853ecaSopenharmony_ci{
1955da853ecaSopenharmony_ci    int64_t br = 0;
1956da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1957da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1958da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1959da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1960da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1961da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1962da853ecaSopenharmony_ci
1963da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1964da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1965da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_BITRATE, &br));
1966da853ecaSopenharmony_ci    ASSERT_EQ(br, 319999);
1967da853ecaSopenharmony_ci    close(fd);
1968da853ecaSopenharmony_ci}
1969da853ecaSopenharmony_ci
1970da853ecaSopenharmony_ci/**
1971da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7400
1972da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_CHANNEL_COUNT
1973da853ecaSopenharmony_ci * @tc.desc      : function test
1974da853ecaSopenharmony_ci */
1975da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7400, TestSize.Level0)
1976da853ecaSopenharmony_ci{
1977da853ecaSopenharmony_ci    int32_t cc = 0;
1978da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1979da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1980da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1981da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1982da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1983da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1984da853ecaSopenharmony_ci
1985da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1986da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1987da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, &cc));
1988da853ecaSopenharmony_ci
1989da853ecaSopenharmony_ci    ASSERT_EQ(cc, 2);
1990da853ecaSopenharmony_ci    close(fd);
1991da853ecaSopenharmony_ci}
1992da853ecaSopenharmony_ci
1993da853ecaSopenharmony_ci/**
1994da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7500
1995da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_SAMPLE_RATE
1996da853ecaSopenharmony_ci * @tc.desc      : function test
1997da853ecaSopenharmony_ci */
1998da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7500, TestSize.Level0)
1999da853ecaSopenharmony_ci{
2000da853ecaSopenharmony_ci    int32_t sr = 0;
2001da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2002da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2003da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2004da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2005da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2006da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2007da853ecaSopenharmony_ci
2008da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
2009da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2010da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_SAMPLE_RATE, &sr));
2011da853ecaSopenharmony_ci    ASSERT_EQ(sr, 44100);
2012da853ecaSopenharmony_ci    close(fd);
2013da853ecaSopenharmony_ci}
2014da853ecaSopenharmony_ci
2015da853ecaSopenharmony_ci/**
2016da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7600
2017da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_HEIGHT
2018da853ecaSopenharmony_ci * @tc.desc      : function test
2019da853ecaSopenharmony_ci */
2020da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7600, TestSize.Level0)
2021da853ecaSopenharmony_ci{
2022da853ecaSopenharmony_ci    int32_t height = 0;
2023da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2024da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2025da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2026da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2027da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2028da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2029da853ecaSopenharmony_ci
2030da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 1);
2031da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2032da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_HEIGHT, &height));
2033da853ecaSopenharmony_ci    ASSERT_EQ(height, 0);
2034da853ecaSopenharmony_ci    close(fd);
2035da853ecaSopenharmony_ci}
2036da853ecaSopenharmony_ci
2037da853ecaSopenharmony_ci/**
2038da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7700
2039da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_WIDTH
2040da853ecaSopenharmony_ci * @tc.desc      : function test
2041da853ecaSopenharmony_ci */
2042da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7700, TestSize.Level0)
2043da853ecaSopenharmony_ci{
2044da853ecaSopenharmony_ci    int32_t weight = 0;
2045da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2046da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2047da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2048da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2049da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2050da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2051da853ecaSopenharmony_ci
2052da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 1);
2053da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2054da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_WIDTH, &weight));
2055da853ecaSopenharmony_ci    ASSERT_EQ(weight, 0);
2056da853ecaSopenharmony_ci    close(fd);
2057da853ecaSopenharmony_ci}
2058da853ecaSopenharmony_ci
2059da853ecaSopenharmony_ci/**
2060da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7800
2061da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 GetPublicTrackFormat,MD_KEY_CODEC_MIME
2062da853ecaSopenharmony_ci * @tc.desc      : function test
2063da853ecaSopenharmony_ci */
2064da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7800, TestSize.Level0)
2065da853ecaSopenharmony_ci{
2066da853ecaSopenharmony_ci    const char *stringVal;
2067da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2068da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2069da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2070da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2071da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2072da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2073da853ecaSopenharmony_ci
2074da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 1);
2075da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2076da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &stringVal));
2077da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, OH_AVCODEC_MIMETYPE_VIDEO_MPEG4));
2078da853ecaSopenharmony_ci    close(fd);
2079da853ecaSopenharmony_ci}
2080da853ecaSopenharmony_ci
2081da853ecaSopenharmony_ci/**
2082da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_7900
2083da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,GetPublicTrackFormat,MD_KEY_TRACK_TYPE
2084da853ecaSopenharmony_ci * @tc.desc      : function test
2085da853ecaSopenharmony_ci */
2086da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7900, TestSize.Level0)
2087da853ecaSopenharmony_ci{
2088da853ecaSopenharmony_ci    int32_t type = 0;
2089da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2090da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2091da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2092da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2093da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2094da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2095da853ecaSopenharmony_ci
2096da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
2097da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2098da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &type));
2099da853ecaSopenharmony_ci
2100da853ecaSopenharmony_ci    ASSERT_EQ(type, MEDIA_TYPE_AUD);
2101da853ecaSopenharmony_ci    close(fd);
2102da853ecaSopenharmony_ci}
2103da853ecaSopenharmony_ci
2104da853ecaSopenharmony_ci/**
2105da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8000
2106da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check source format,OH_MD_KEY_TITLE
2107da853ecaSopenharmony_ci * @tc.desc      : function test
2108da853ecaSopenharmony_ci */
2109da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8000, TestSize.Level0)
2110da853ecaSopenharmony_ci{
2111da853ecaSopenharmony_ci    const char *stringVal;
2112da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2113da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2114da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2115da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2116da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2117da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2118da853ecaSopenharmony_ci
2119da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2120da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2121da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal));
2122da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "title"));
2123da853ecaSopenharmony_ci    close(fd);
2124da853ecaSopenharmony_ci}
2125da853ecaSopenharmony_ci
2126da853ecaSopenharmony_ci/**
2127da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8100
2128da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM
2129da853ecaSopenharmony_ci * @tc.desc      : function test
2130da853ecaSopenharmony_ci */
2131da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8100, TestSize.Level0)
2132da853ecaSopenharmony_ci{
2133da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2134da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2135da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2136da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2137da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2138da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2139da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2140da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2141da853ecaSopenharmony_ci    const char *stringVal;
2142da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM, &stringVal));
2143da853ecaSopenharmony_ci    close(fd);
2144da853ecaSopenharmony_ci}
2145da853ecaSopenharmony_ci
2146da853ecaSopenharmony_ci/**
2147da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8200
2148da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM_ARTIST
2149da853ecaSopenharmony_ci * @tc.desc      : function test
2150da853ecaSopenharmony_ci */
2151da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8200, TestSize.Level0)
2152da853ecaSopenharmony_ci{
2153da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2154da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2155da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2156da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2157da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2158da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2159da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2160da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2161da853ecaSopenharmony_ci    const char *stringVal;
2162da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM_ARTIST, &stringVal));
2163da853ecaSopenharmony_ci    close(fd);
2164da853ecaSopenharmony_ci}
2165da853ecaSopenharmony_ci
2166da853ecaSopenharmony_ci/**
2167da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8300
2168da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_DATE
2169da853ecaSopenharmony_ci * @tc.desc      : function test
2170da853ecaSopenharmony_ci */
2171da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8300, TestSize.Level0)
2172da853ecaSopenharmony_ci{
2173da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2174da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2175da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2176da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2177da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2178da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2179da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2180da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2181da853ecaSopenharmony_ci    const char *stringVal;
2182da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DATE, &stringVal));
2183da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "2023"));
2184da853ecaSopenharmony_ci    close(fd);
2185da853ecaSopenharmony_ci}
2186da853ecaSopenharmony_ci
2187da853ecaSopenharmony_ci/**
2188da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8400
2189da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_COMMENT
2190da853ecaSopenharmony_ci * @tc.desc      : function test
2191da853ecaSopenharmony_ci */
2192da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8400, TestSize.Level0)
2193da853ecaSopenharmony_ci{
2194da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2195da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2196da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2197da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2198da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2199da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2200da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2201da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2202da853ecaSopenharmony_ci    const char *stringVal;
2203da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COMMENT, &stringVal));
2204da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "COMMENT"));
2205da853ecaSopenharmony_ci    close(fd);
2206da853ecaSopenharmony_ci}
2207da853ecaSopenharmony_ci
2208da853ecaSopenharmony_ci/**
2209da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8500
2210da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_GENRE
2211da853ecaSopenharmony_ci * @tc.desc      : function test
2212da853ecaSopenharmony_ci */
2213da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8500, TestSize.Level0)
2214da853ecaSopenharmony_ci{
2215da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2216da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2217da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2218da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2219da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2220da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2221da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2222da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2223da853ecaSopenharmony_ci    const char *stringVal;
2224da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_GENRE, &stringVal));
2225da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "Classical"));
2226da853ecaSopenharmony_ci    close(fd);
2227da853ecaSopenharmony_ci}
2228da853ecaSopenharmony_ci
2229da853ecaSopenharmony_ci/**
2230da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8600
2231da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_COPYRIGHT
2232da853ecaSopenharmony_ci * @tc.desc      : function test
2233da853ecaSopenharmony_ci */
2234da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8600, TestSize.Level0)
2235da853ecaSopenharmony_ci{
2236da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2237da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2238da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2239da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2240da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2241da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2242da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2243da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2244da853ecaSopenharmony_ci    const char *stringVal;
2245da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COPYRIGHT, &stringVal));
2246da853ecaSopenharmony_ci    close(fd);
2247da853ecaSopenharmony_ci}
2248da853ecaSopenharmony_ci
2249da853ecaSopenharmony_ci/**
2250da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8700
2251da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_LANGUAGE
2252da853ecaSopenharmony_ci * @tc.desc      : function test
2253da853ecaSopenharmony_ci */
2254da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8700, TestSize.Level0)
2255da853ecaSopenharmony_ci{
2256da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2257da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2258da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2259da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2260da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2261da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2262da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2263da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2264da853ecaSopenharmony_ci    const char *stringVal;
2265da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LANGUAGE, &stringVal));
2266da853ecaSopenharmony_ci    close(fd);
2267da853ecaSopenharmony_ci}
2268da853ecaSopenharmony_ci
2269da853ecaSopenharmony_ci/**
2270da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8800
2271da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_DESCRIPTION
2272da853ecaSopenharmony_ci * @tc.desc      : function test
2273da853ecaSopenharmony_ci */
2274da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8800, TestSize.Level0)
2275da853ecaSopenharmony_ci{
2276da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2277da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2278da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2279da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2280da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2281da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2282da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2283da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2284da853ecaSopenharmony_ci    const char *stringVal;
2285da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DESCRIPTION, &stringVal));
2286da853ecaSopenharmony_ci    close(fd);
2287da853ecaSopenharmony_ci}
2288da853ecaSopenharmony_ci
2289da853ecaSopenharmony_ci/**
2290da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_8800
2291da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check track format,OH_MD_KEY_LYRICS
2292da853ecaSopenharmony_ci * @tc.desc      : function test
2293da853ecaSopenharmony_ci */
2294da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8900, TestSize.Level0)
2295da853ecaSopenharmony_ci{
2296da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2297da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2298da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2299da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2300da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2301da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2302da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2303da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2304da853ecaSopenharmony_ci    const char *stringVal;
2305da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LYRICS, &stringVal));
2306da853ecaSopenharmony_ci    close(fd);
2307da853ecaSopenharmony_ci}
2308da853ecaSopenharmony_ci
2309da853ecaSopenharmony_ci/**
2310da853ecaSopenharmony_ci * @tc.number    : DEMUXER_FUNCTION_9000
2311da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,check source format,OH_MD_KEY_ARTIST
2312da853ecaSopenharmony_ci * @tc.desc      : function test
2313da853ecaSopenharmony_ci */
2314da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_9000, TestSize.Level0)
2315da853ecaSopenharmony_ci{
2316da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
2317da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2318da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2319da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2320da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2321da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2322da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2323da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
2324da853ecaSopenharmony_ci    const char *stringVal;
2325da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ARTIST, &stringVal));
2326da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "sam"));
2327da853ecaSopenharmony_ci    close(fd);
2328da853ecaSopenharmony_ci}
2329da853ecaSopenharmony_ci/**
2330da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_0200
2331da853ecaSopenharmony_ci * @tc.name      : demuxer video amr nb
2332da853ecaSopenharmony_ci * @tc.desc      : function test
2333da853ecaSopenharmony_ci */
2334da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0200, TestSize.Level0)
2335da853ecaSopenharmony_ci{
2336da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2337da853ecaSopenharmony_ci    bool audioIsEnd = false;
2338da853ecaSopenharmony_ci    int audioFrame = 0;
2339da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/amr_nb_8000_1.amr";
2340da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2341da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2342da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2343da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2344da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2345da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2346da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2347da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2348da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
2349da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
2350da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
2351da853ecaSopenharmony_ci    int aKeyCount = 0;
2352da853ecaSopenharmony_ci    while (!audioIsEnd) {
2353da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2354da853ecaSopenharmony_ci        SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
2355da853ecaSopenharmony_ci    }
2356da853ecaSopenharmony_ci    cout << file << "audioFrame " << audioFrame <<   "   aKeyCount " << aKeyCount  << endl;
2357da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 1501);
2358da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 1501);
2359da853ecaSopenharmony_ci    close(fd);
2360da853ecaSopenharmony_ci}
2361da853ecaSopenharmony_ci
2362da853ecaSopenharmony_ci/**
2363da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_0300
2364da853ecaSopenharmony_ci * @tc.name      : demuxer video amr wb
2365da853ecaSopenharmony_ci * @tc.desc      : function test
2366da853ecaSopenharmony_ci */
2367da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0300, TestSize.Level0)
2368da853ecaSopenharmony_ci{
2369da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2370da853ecaSopenharmony_ci    bool audioIsEnd = false;
2371da853ecaSopenharmony_ci    int audioFrame = 0;
2372da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/amr_wb_16000_1.amr";
2373da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2374da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2375da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2376da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2377da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2378da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2379da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2380da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2381da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
2382da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
2383da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
2384da853ecaSopenharmony_ci    int aKeyCount = 0;
2385da853ecaSopenharmony_ci    while (!audioIsEnd) {
2386da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2387da853ecaSopenharmony_ci        SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
2388da853ecaSopenharmony_ci    }
2389da853ecaSopenharmony_ci    cout << file << "audioFrame " << audioFrame <<  "   aKeyCount " << aKeyCount << endl;
2390da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 1500);
2391da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 1500);
2392da853ecaSopenharmony_ci    close(fd);
2393da853ecaSopenharmony_ci}
2394da853ecaSopenharmony_ci
2395da853ecaSopenharmony_ci/**
2396da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_1000
2397da853ecaSopenharmony_ci * @tc.name      : demuxer amr_nb format
2398da853ecaSopenharmony_ci * @tc.desc      : function test
2399da853ecaSopenharmony_ci */
2400da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1000, TestSize.Level2)
2401da853ecaSopenharmony_ci{
2402da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/amr_nb_8000_1.amr";
2403da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2404da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2405da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2406da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2407da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2408da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2409da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2410da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
2411da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2412da853ecaSopenharmony_ci    const char *codecMime = "";
2413da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime));
2414da853ecaSopenharmony_ci    cout << "codecMime" << codecMime << endl;
2415da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(codecMime, OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB));
2416da853ecaSopenharmony_ci    close(fd);
2417da853ecaSopenharmony_ci}
2418da853ecaSopenharmony_ci
2419da853ecaSopenharmony_ci/**
2420da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_1100
2421da853ecaSopenharmony_ci * @tc.name      : demuxer amr_wb format
2422da853ecaSopenharmony_ci * @tc.desc      : function test
2423da853ecaSopenharmony_ci */
2424da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1100, TestSize.Level2)
2425da853ecaSopenharmony_ci{
2426da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/amr_wb_16000_1.amr";
2427da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2428da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2429da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2430da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2431da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2432da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2433da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2434da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
2435da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
2436da853ecaSopenharmony_ci    const char *codecMime = "";
2437da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime));
2438da853ecaSopenharmony_ci    cout << "codecMime" << codecMime << endl;
2439da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(codecMime, OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB));
2440da853ecaSopenharmony_ci    close(fd);
2441da853ecaSopenharmony_ci}
2442da853ecaSopenharmony_ci
2443da853ecaSopenharmony_ci
2444da853ecaSopenharmony_ci/**
2445da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_1200
2446da853ecaSopenharmony_ci * @tc.name      : demux hevc ts video and audio
2447da853ecaSopenharmony_ci * @tc.desc      : function test
2448da853ecaSopenharmony_ci */
2449da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1200, TestSize.Level0)
2450da853ecaSopenharmony_ci{
2451da853ecaSopenharmony_ci    if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) {
2452da853ecaSopenharmony_ci        return;
2453da853ecaSopenharmony_ci    }
2454da853ecaSopenharmony_ci    int tarckType = 0;
2455da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2456da853ecaSopenharmony_ci    bool audioIsEnd = false;
2457da853ecaSopenharmony_ci    bool videoIsEnd = false;
2458da853ecaSopenharmony_ci    int audioFrame = 0;
2459da853ecaSopenharmony_ci    int videoFrame = 0;
2460da853ecaSopenharmony_ci    const char *file = "/data/test/media/hevc_v_a.ts";
2461da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2462da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2463da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2464da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2465da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2466da853ecaSopenharmony_ci
2467da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2468da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2469da853ecaSopenharmony_ci
2470da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2471da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
2472da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
2473da853ecaSopenharmony_ci
2474da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
2475da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
2476da853ecaSopenharmony_ci    }
2477da853ecaSopenharmony_ci    int vKeyCount = 0;
2478da853ecaSopenharmony_ci    int aKeyCount = 0;
2479da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
2480da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2481da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2482da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2483da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2484da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2485da853ecaSopenharmony_ci            trackFormat = nullptr;
2486da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2487da853ecaSopenharmony_ci                continue;
2488da853ecaSopenharmony_ci            }
2489da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2490da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2491da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
2492da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2493da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
2494da853ecaSopenharmony_ci            }
2495da853ecaSopenharmony_ci        }
2496da853ecaSopenharmony_ci    }
2497da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 384);
2498da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 384);
2499da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
2500da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
2501da853ecaSopenharmony_ci    close(fd);
2502da853ecaSopenharmony_ci}
2503da853ecaSopenharmony_ci
2504da853ecaSopenharmony_ci/**
2505da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_FUNCTION_1300
2506da853ecaSopenharmony_ci * @tc.name      : demux hevc ts video
2507da853ecaSopenharmony_ci * @tc.desc      : function test
2508da853ecaSopenharmony_ci */
2509da853ecaSopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1300, TestSize.Level0)
2510da853ecaSopenharmony_ci{
2511da853ecaSopenharmony_ci    if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) {
2512da853ecaSopenharmony_ci        return;
2513da853ecaSopenharmony_ci    }
2514da853ecaSopenharmony_ci    int tarckType = 0;
2515da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2516da853ecaSopenharmony_ci    bool videoIsEnd = false;
2517da853ecaSopenharmony_ci    int videoFrame = 0;
2518da853ecaSopenharmony_ci    const char *file = "/data/test/media/hevc_v.ts";
2519da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
2520da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
2521da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
2522da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
2523da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2524da853ecaSopenharmony_ci
2525da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2526da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2527da853ecaSopenharmony_ci
2528da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
2529da853ecaSopenharmony_ci    int vKeyCount = 0;
2530da853ecaSopenharmony_ci    while (!videoIsEnd) {
2531da853ecaSopenharmony_ci        trackFormat = OH_AVSource_GetTrackFormat(source, 0);
2532da853ecaSopenharmony_ci        ASSERT_NE(trackFormat, nullptr);
2533da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2534da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
2535da853ecaSopenharmony_ci        trackFormat = nullptr;
2536da853ecaSopenharmony_ci        if (videoIsEnd && (tarckType == MEDIA_TYPE_VID)) {
2537da853ecaSopenharmony_ci            continue;
2538da853ecaSopenharmony_ci        }
2539da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2540da853ecaSopenharmony_ci        SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
2541da853ecaSopenharmony_ci    }
2542da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
2543da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
2544da853ecaSopenharmony_ci    close(fd);
2545da853ecaSopenharmony_ci}