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