1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#include "gtest/gtest.h"
17da853ecaSopenharmony_ci
18da853ecaSopenharmony_ci#include "native_avcodec_base.h"
19da853ecaSopenharmony_ci#include "native_avdemuxer.h"
20da853ecaSopenharmony_ci#include "native_avformat.h"
21da853ecaSopenharmony_ci#include "native_avsource.h"
22da853ecaSopenharmony_ci#include "native_avmemory.h"
23da853ecaSopenharmony_ci
24da853ecaSopenharmony_ci#include <iostream>
25da853ecaSopenharmony_ci#include <cstdio>
26da853ecaSopenharmony_ci#include <string>
27da853ecaSopenharmony_ci#include <fcntl.h>
28da853ecaSopenharmony_ci#include <cmath>
29da853ecaSopenharmony_ci#include <thread>
30da853ecaSopenharmony_cinamespace OHOS {
31da853ecaSopenharmony_cinamespace Media {
32da853ecaSopenharmony_ciclass DemuxerProcNdkTest : public testing::Test {
33da853ecaSopenharmony_cipublic:
34da853ecaSopenharmony_ci    // SetUpTestCase: Called before all test cases
35da853ecaSopenharmony_ci    static void SetUpTestCase(void);
36da853ecaSopenharmony_ci    // TearDownTestCase: Called after all test case
37da853ecaSopenharmony_ci    static void TearDownTestCase(void);
38da853ecaSopenharmony_ci    // SetUp: Called before each test cases
39da853ecaSopenharmony_ci    void SetUp(void);
40da853ecaSopenharmony_ci    // TearDown: Called after each test cases
41da853ecaSopenharmony_ci    void TearDown(void);
42da853ecaSopenharmony_ci};
43da853ecaSopenharmony_ci
44da853ecaSopenharmony_cistatic OH_AVMemory *memory = nullptr;
45da853ecaSopenharmony_cistatic OH_AVSource *source = nullptr;
46da853ecaSopenharmony_cistatic OH_AVDemuxer *demuxer = nullptr;
47da853ecaSopenharmony_cistatic OH_AVFormat *sourceFormat = nullptr;
48da853ecaSopenharmony_cistatic OH_AVFormat *trackFormat = nullptr;
49da853ecaSopenharmony_cistatic OH_AVBuffer *avBuffer = nullptr;
50da853ecaSopenharmony_cistatic OH_AVFormat *format = nullptr;
51da853ecaSopenharmony_ci
52da853ecaSopenharmony_cistatic int32_t g_trackCount;
53da853ecaSopenharmony_cistatic int32_t g_width = 3840;
54da853ecaSopenharmony_cistatic int32_t g_height = 2160;
55da853ecaSopenharmony_ciconstexpr uint32_t AVC_ROTATION = 270;
56da853ecaSopenharmony_ciconstexpr uint32_t HEVC_ROTATION = 90;
57da853ecaSopenharmony_ciconstexpr int32_t LAYOUTMONO = 4;
58da853ecaSopenharmony_ciconstexpr int32_t LAYOUTDUAL = 3;
59da853ecaSopenharmony_ciconstexpr int32_t SAMPLERATEMONO = 8000;
60da853ecaSopenharmony_ciconstexpr int32_t SAMPLERATEDUAL = 44100;
61da853ecaSopenharmony_ciconstexpr int32_t COUNTMONO = 1;
62da853ecaSopenharmony_ciconstexpr int32_t COUNTDUAL = 2;
63da853ecaSopenharmony_ciconstexpr int32_t BITRATEMONO = 64000;
64da853ecaSopenharmony_ciconstexpr int32_t BITRATEDUAL = 705600;
65da853ecaSopenharmony_ciconstexpr int32_t FRAME_REMAINING = 100;
66da853ecaSopenharmony_civoid DemuxerProcNdkTest::SetUpTestCase() {}
67da853ecaSopenharmony_civoid DemuxerProcNdkTest::TearDownTestCase() {}
68da853ecaSopenharmony_civoid DemuxerProcNdkTest::SetUp()
69da853ecaSopenharmony_ci{
70da853ecaSopenharmony_ci    memory = OH_AVMemory_Create(g_width * g_height);
71da853ecaSopenharmony_ci    g_trackCount = 0;
72da853ecaSopenharmony_ci}
73da853ecaSopenharmony_civoid DemuxerProcNdkTest::TearDown()
74da853ecaSopenharmony_ci{
75da853ecaSopenharmony_ci    if (trackFormat != nullptr) {
76da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
77da853ecaSopenharmony_ci        trackFormat = nullptr;
78da853ecaSopenharmony_ci    }
79da853ecaSopenharmony_ci
80da853ecaSopenharmony_ci    if (sourceFormat != nullptr) {
81da853ecaSopenharmony_ci        OH_AVFormat_Destroy(sourceFormat);
82da853ecaSopenharmony_ci        sourceFormat = nullptr;
83da853ecaSopenharmony_ci    }
84da853ecaSopenharmony_ci
85da853ecaSopenharmony_ci    if (memory != nullptr) {
86da853ecaSopenharmony_ci        OH_AVMemory_Destroy(memory);
87da853ecaSopenharmony_ci        memory = nullptr;
88da853ecaSopenharmony_ci    }
89da853ecaSopenharmony_ci    if (source != nullptr) {
90da853ecaSopenharmony_ci        OH_AVSource_Destroy(source);
91da853ecaSopenharmony_ci        source = nullptr;
92da853ecaSopenharmony_ci    }
93da853ecaSopenharmony_ci    if (demuxer != nullptr) {
94da853ecaSopenharmony_ci        OH_AVDemuxer_Destroy(demuxer);
95da853ecaSopenharmony_ci        demuxer = nullptr;
96da853ecaSopenharmony_ci    }
97da853ecaSopenharmony_ci    if (avBuffer != nullptr) {
98da853ecaSopenharmony_ci        OH_AVBuffer_Destroy(avBuffer);
99da853ecaSopenharmony_ci        avBuffer = nullptr;
100da853ecaSopenharmony_ci    }
101da853ecaSopenharmony_ci    if (format != nullptr) {
102da853ecaSopenharmony_ci        OH_AVFormat_Destroy(format);
103da853ecaSopenharmony_ci        format = nullptr;
104da853ecaSopenharmony_ci    }
105da853ecaSopenharmony_ci}
106da853ecaSopenharmony_ci} // namespace Media
107da853ecaSopenharmony_ci} // namespace OHOS
108da853ecaSopenharmony_ci
109da853ecaSopenharmony_ciusing namespace std;
110da853ecaSopenharmony_ciusing namespace OHOS;
111da853ecaSopenharmony_ciusing namespace OHOS::Media;
112da853ecaSopenharmony_ciusing namespace testing::ext;
113da853ecaSopenharmony_ci
114da853ecaSopenharmony_cistring g_mp4Vvc8bitPath = string("/data/test/media/vvc_8bit_3840_2160.mp4");
115da853ecaSopenharmony_cistring g_mp4Vvc10bitPath = string("/data/test/media/vvc_aac_10bit_1920_1080.mp4");
116da853ecaSopenharmony_ci
117da853ecaSopenharmony_cistatic int64_t GetFileSize(const char *fileName)
118da853ecaSopenharmony_ci{
119da853ecaSopenharmony_ci    int64_t fileSize = 0;
120da853ecaSopenharmony_ci    if (fileName != nullptr) {
121da853ecaSopenharmony_ci        struct stat fileStatus {};
122da853ecaSopenharmony_ci        if (stat(fileName, &fileStatus) == 0) {
123da853ecaSopenharmony_ci            fileSize = static_cast<int64_t>(fileStatus.st_size);
124da853ecaSopenharmony_ci        }
125da853ecaSopenharmony_ci    }
126da853ecaSopenharmony_ci    return fileSize;
127da853ecaSopenharmony_ci}
128da853ecaSopenharmony_ci
129da853ecaSopenharmony_cistatic void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame, int &aKeyCount)
130da853ecaSopenharmony_ci{
131da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
132da853ecaSopenharmony_ci        audioIsEnd = true;
133da853ecaSopenharmony_ci        cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
134da853ecaSopenharmony_ci    } else {
135da853ecaSopenharmony_ci        audioFrame++;
136da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
137da853ecaSopenharmony_ci            aKeyCount++;
138da853ecaSopenharmony_ci        }
139da853ecaSopenharmony_ci    }
140da853ecaSopenharmony_ci}
141da853ecaSopenharmony_ci
142da853ecaSopenharmony_cistatic void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame, int &vKeyCount)
143da853ecaSopenharmony_ci{
144da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
145da853ecaSopenharmony_ci        videoIsEnd = true;
146da853ecaSopenharmony_ci        cout << videoFrame << "   video is end !!!!!!!!!!!!!!!" << endl;
147da853ecaSopenharmony_ci    } else {
148da853ecaSopenharmony_ci        videoFrame++;
149da853ecaSopenharmony_ci        cout << "video track !!!!!" << endl;
150da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
151da853ecaSopenharmony_ci            vKeyCount++;
152da853ecaSopenharmony_ci        }
153da853ecaSopenharmony_ci    }
154da853ecaSopenharmony_ci}
155da853ecaSopenharmony_ci
156da853ecaSopenharmony_cistatic void IsHdrVivid(OH_AVFormat *paramFormat)
157da853ecaSopenharmony_ci{
158da853ecaSopenharmony_ci    int32_t videoIsHdrvivid;
159da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
160da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(paramFormat, OH_MD_KEY_VIDEO_IS_HDR_VIVID, &videoIsHdrvivid));
161da853ecaSopenharmony_ci        ASSERT_EQ(1, videoIsHdrvivid);
162da853ecaSopenharmony_ci    } else {
163da853ecaSopenharmony_ci        ASSERT_FALSE(OH_AVFormat_GetIntValue(paramFormat, OH_MD_KEY_VIDEO_IS_HDR_VIVID, &videoIsHdrvivid));
164da853ecaSopenharmony_ci    }
165da853ecaSopenharmony_ci}
166da853ecaSopenharmony_ci
167da853ecaSopenharmony_cistatic void CheckAudioParam(OH_AVSource *audioSource, int &audioFrameAll)
168da853ecaSopenharmony_ci{
169da853ecaSopenharmony_ci    int tarckType = 0;
170da853ecaSopenharmony_ci    OH_AVCodecBufferAttr bufferAttr;
171da853ecaSopenharmony_ci    bool audioIsEnd = false;
172da853ecaSopenharmony_ci    int32_t count = 0;
173da853ecaSopenharmony_ci    int32_t rate = 0;
174da853ecaSopenharmony_ci    int64_t bitrate = 0;
175da853ecaSopenharmony_ci    int64_t layout = 0;
176da853ecaSopenharmony_ci    int32_t index = 0;
177da853ecaSopenharmony_ci    const char* mimeType = nullptr;
178da853ecaSopenharmony_ci    while (!audioIsEnd) {
179da853ecaSopenharmony_ci        trackFormat = OH_AVSource_GetTrackFormat(audioSource, index);
180da853ecaSopenharmony_ci        ASSERT_NE(trackFormat, nullptr);
181da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
182da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, index, avBuffer));
183da853ecaSopenharmony_ci        ASSERT_NE(avBuffer, nullptr);
184da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_GetBufferAttr(avBuffer, &bufferAttr));
185da853ecaSopenharmony_ci        if (tarckType == MEDIA_TYPE_AUD) {
186da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
187da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_SAMPLE_RATE, &rate));
188da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, &count));
189da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_CHANNEL_LAYOUT, &layout));
190da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_BITRATE, &bitrate));
191da853ecaSopenharmony_ci            if (bufferAttr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
192da853ecaSopenharmony_ci                audioIsEnd = true;
193da853ecaSopenharmony_ci                continue;
194da853ecaSopenharmony_ci            }
195da853ecaSopenharmony_ci            audioFrameAll++;
196da853ecaSopenharmony_ci        }
197da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
198da853ecaSopenharmony_ci        trackFormat = nullptr;
199da853ecaSopenharmony_ci    }
200da853ecaSopenharmony_ci    if (count == 1) {
201da853ecaSopenharmony_ci        ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_AUDIO_G711MU));
202da853ecaSopenharmony_ci        ASSERT_EQ(layout, LAYOUTMONO);
203da853ecaSopenharmony_ci        ASSERT_EQ(rate, SAMPLERATEMONO);
204da853ecaSopenharmony_ci        ASSERT_EQ(count, COUNTMONO);
205da853ecaSopenharmony_ci        ASSERT_EQ(bitrate, BITRATEMONO);
206da853ecaSopenharmony_ci    } else {
207da853ecaSopenharmony_ci        ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_AUDIO_G711MU));
208da853ecaSopenharmony_ci        ASSERT_EQ(layout, LAYOUTDUAL);
209da853ecaSopenharmony_ci        ASSERT_EQ(rate, SAMPLERATEDUAL);
210da853ecaSopenharmony_ci        ASSERT_EQ(count, COUNTDUAL);
211da853ecaSopenharmony_ci        ASSERT_EQ(bitrate, BITRATEDUAL);
212da853ecaSopenharmony_ci    }
213da853ecaSopenharmony_ci}
214da853ecaSopenharmony_ci
215da853ecaSopenharmony_ci/**
216da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1400
217da853ecaSopenharmony_ci * @tc.name      : demuxer video and 2 audio file
218da853ecaSopenharmony_ci * @tc.desc      : function test
219da853ecaSopenharmony_ci */
220da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1400, TestSize.Level0)
221da853ecaSopenharmony_ci{
222da853ecaSopenharmony_ci    int tarckType = 0;
223da853ecaSopenharmony_ci    int auidoTrackCount = 2;
224da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
225da853ecaSopenharmony_ci    bool videoIsEnd = false;
226da853ecaSopenharmony_ci    int videoFrame = 0;
227da853ecaSopenharmony_ci    const char *file = "/data/test/media/video_2audio.mp4";
228da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
229da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
230da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
231da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
232da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
233da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
234da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
235da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
236da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
237da853ecaSopenharmony_ci    ASSERT_EQ(auidoTrackCount + 1, g_trackCount);
238da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
239da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
240da853ecaSopenharmony_ci    }
241da853ecaSopenharmony_ci    int vKeyCount = 0;
242da853ecaSopenharmony_ci    int aKeyCount[2] = {};
243da853ecaSopenharmony_ci    int audioFrame[2] = {};
244da853ecaSopenharmony_ci    bool audioIsEnd = false;
245da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
246da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
247da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
248da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
249da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
250da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
251da853ecaSopenharmony_ci            trackFormat = nullptr;
252da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
253da853ecaSopenharmony_ci                continue;
254da853ecaSopenharmony_ci            }
255da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
256da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
257da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
258da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
259da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame[index-1], aKeyCount[index-1]);
260da853ecaSopenharmony_ci            }
261da853ecaSopenharmony_ci        }
262da853ecaSopenharmony_ci    }
263da853ecaSopenharmony_ci    for (int index = 0; index < auidoTrackCount; index++) {
264da853ecaSopenharmony_ci        ASSERT_EQ(audioFrame[index], 433);
265da853ecaSopenharmony_ci        ASSERT_EQ(aKeyCount[index], 433);
266da853ecaSopenharmony_ci    }
267da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
268da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
269da853ecaSopenharmony_ci    close(fd);
270da853ecaSopenharmony_ci}
271da853ecaSopenharmony_ci
272da853ecaSopenharmony_ci/**
273da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1500
274da853ecaSopenharmony_ci * @tc.name      : demuxer video and 9 audio file
275da853ecaSopenharmony_ci * @tc.desc      : function test
276da853ecaSopenharmony_ci */
277da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1500, TestSize.Level0)
278da853ecaSopenharmony_ci{
279da853ecaSopenharmony_ci    int tarckType = 0;
280da853ecaSopenharmony_ci    int auidoTrackCount = 9;
281da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
282da853ecaSopenharmony_ci    bool videoIsEnd = false;
283da853ecaSopenharmony_ci    int videoFrame = 0;
284da853ecaSopenharmony_ci    const char *file = "/data/test/media/video_9audio.mp4";
285da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
286da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
287da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
288da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
289da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
290da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
291da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
292da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
293da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
294da853ecaSopenharmony_ci    ASSERT_EQ(auidoTrackCount + 1, g_trackCount);
295da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
296da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
297da853ecaSopenharmony_ci    }
298da853ecaSopenharmony_ci    int vKeyCount = 0;
299da853ecaSopenharmony_ci    int aKeyCount[9] = {};
300da853ecaSopenharmony_ci    int audioFrame[9] = {};
301da853ecaSopenharmony_ci    bool audioIsEnd = false;
302da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
303da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
304da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
305da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
306da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
307da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
308da853ecaSopenharmony_ci            trackFormat = nullptr;
309da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
310da853ecaSopenharmony_ci                continue;
311da853ecaSopenharmony_ci            }
312da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
313da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
314da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
315da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
316da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame[index-1], aKeyCount[index-1]);
317da853ecaSopenharmony_ci            }
318da853ecaSopenharmony_ci        }
319da853ecaSopenharmony_ci    }
320da853ecaSopenharmony_ci    for (int index = 0; index < auidoTrackCount; index++) {
321da853ecaSopenharmony_ci        ASSERT_EQ(audioFrame[index], 433);
322da853ecaSopenharmony_ci        ASSERT_EQ(aKeyCount[index], 433);
323da853ecaSopenharmony_ci    }
324da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
325da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
326da853ecaSopenharmony_ci    close(fd);
327da853ecaSopenharmony_ci}
328da853ecaSopenharmony_ci
329da853ecaSopenharmony_ci/**
330da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1600
331da853ecaSopenharmony_ci * @tc.name      : demuxer avc+MP3 flv video file
332da853ecaSopenharmony_ci * @tc.desc      : function test
333da853ecaSopenharmony_ci */
334da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1600, TestSize.Level0)
335da853ecaSopenharmony_ci{
336da853ecaSopenharmony_ci    int tarckType = 0;
337da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
338da853ecaSopenharmony_ci    bool videoIsEnd = false;
339da853ecaSopenharmony_ci    int videoFrame = 0;
340da853ecaSopenharmony_ci    const char *file = "/data/test/media/avc_mp3.flv";
341da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
342da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
343da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
344da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
345da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
346da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
347da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
348da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
349da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
350da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
351da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
352da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
353da853ecaSopenharmony_ci    }
354da853ecaSopenharmony_ci    int vKeyCount = 0;
355da853ecaSopenharmony_ci    int aKeyCount = 0;
356da853ecaSopenharmony_ci    int audioFrame = 0;
357da853ecaSopenharmony_ci    bool audioIsEnd = false;
358da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
359da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
360da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
361da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
362da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
363da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
364da853ecaSopenharmony_ci            trackFormat = nullptr;
365da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
366da853ecaSopenharmony_ci                continue;
367da853ecaSopenharmony_ci            }
368da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
369da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
370da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
371da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
372da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
373da853ecaSopenharmony_ci            }
374da853ecaSopenharmony_ci        }
375da853ecaSopenharmony_ci    }
376da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 385);
377da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 385);
378da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
379da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
380da853ecaSopenharmony_ci    close(fd);
381da853ecaSopenharmony_ci}
382da853ecaSopenharmony_ci
383da853ecaSopenharmony_ci/**
384da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1700
385da853ecaSopenharmony_ci * @tc.name      : demuxer hevc+pcm flv video file
386da853ecaSopenharmony_ci * @tc.desc      : function test
387da853ecaSopenharmony_ci */
388da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1700, TestSize.Level0)
389da853ecaSopenharmony_ci{
390da853ecaSopenharmony_ci    int tarckType = 0;
391da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
392da853ecaSopenharmony_ci    bool videoIsEnd = false;
393da853ecaSopenharmony_ci    int videoFrame = 0;
394da853ecaSopenharmony_ci    const char *file = "/data/test/media/hevc_pcm_a.flv";
395da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
396da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
397da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
398da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
399da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
400da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
401da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
402da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
403da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
404da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
405da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
406da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
407da853ecaSopenharmony_ci    }
408da853ecaSopenharmony_ci    int vKeyCount = 0;
409da853ecaSopenharmony_ci    int aKeyCount = 0;
410da853ecaSopenharmony_ci    int audioFrame = 0;
411da853ecaSopenharmony_ci    bool audioIsEnd = false;
412da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
413da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
414da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
415da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
416da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
417da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
418da853ecaSopenharmony_ci            trackFormat = nullptr;
419da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
420da853ecaSopenharmony_ci                continue;
421da853ecaSopenharmony_ci            }
422da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
423da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
424da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
425da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
426da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
427da853ecaSopenharmony_ci            }
428da853ecaSopenharmony_ci        }
429da853ecaSopenharmony_ci    }
430da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 385);
431da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 385);
432da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
433da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
434da853ecaSopenharmony_ci    close(fd);
435da853ecaSopenharmony_ci}
436da853ecaSopenharmony_ci
437da853ecaSopenharmony_ci/**
438da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1800
439da853ecaSopenharmony_ci * @tc.name      : demuxer damaged flv video file
440da853ecaSopenharmony_ci * @tc.desc      : function test
441da853ecaSopenharmony_ci */
442da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1800, TestSize.Level2)
443da853ecaSopenharmony_ci{
444da853ecaSopenharmony_ci    int tarckType = 0;
445da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
446da853ecaSopenharmony_ci    bool videoIsEnd = false;
447da853ecaSopenharmony_ci    int videoFrame = 0;
448da853ecaSopenharmony_ci    const char *file = "/data/test/media/avc_mp3_error.flv";
449da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
450da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
451da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
452da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
453da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
454da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
455da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
456da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
457da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
458da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
459da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
460da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
461da853ecaSopenharmony_ci    }
462da853ecaSopenharmony_ci    int vKeyCount = 0;
463da853ecaSopenharmony_ci    int aKeyCount = 0;
464da853ecaSopenharmony_ci    int audioFrame = 0;
465da853ecaSopenharmony_ci    bool audioIsEnd = false;
466da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
467da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
468da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
469da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
470da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
471da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
472da853ecaSopenharmony_ci            trackFormat = nullptr;
473da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
474da853ecaSopenharmony_ci                continue;
475da853ecaSopenharmony_ci            }
476da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
477da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
478da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
479da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
480da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
481da853ecaSopenharmony_ci            }
482da853ecaSopenharmony_ci        }
483da853ecaSopenharmony_ci    }
484da853ecaSopenharmony_ci    close(fd);
485da853ecaSopenharmony_ci}
486da853ecaSopenharmony_ci
487da853ecaSopenharmony_ci/**
488da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_1900
489da853ecaSopenharmony_ci * @tc.name      : demuxer damaged ape audio file
490da853ecaSopenharmony_ci * @tc.desc      : function test
491da853ecaSopenharmony_ci */
492da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_1900, TestSize.Level2)
493da853ecaSopenharmony_ci{
494da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
495da853ecaSopenharmony_ci    const char* mimeType = nullptr;
496da853ecaSopenharmony_ci    bool audioIsEnd = false;
497da853ecaSopenharmony_ci    int audioFrame = 0;
498da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/ape.ape";
499da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
500da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
501da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
502da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
503da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
504da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
505da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
506da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
507da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
508da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
509da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
510da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
511da853ecaSopenharmony_ci    string apeString = OH_AVCODEC_MIMETYPE_AUDIO_APE;
512da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
513da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, apeString);
514da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
515da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
516da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
517da853ecaSopenharmony_ci    int aKeyCount = 0;
518da853ecaSopenharmony_ci    while (!audioIsEnd) {
519da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
520da853ecaSopenharmony_ci        SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
521da853ecaSopenharmony_ci    }
522da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 8);
523da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 8);
524da853ecaSopenharmony_ci    close(fd);
525da853ecaSopenharmony_ci}
526da853ecaSopenharmony_ci
527da853ecaSopenharmony_ci/**
528da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2000
529da853ecaSopenharmony_ci * @tc.name      : demuxer h264+mp3 fmp4 file
530da853ecaSopenharmony_ci * @tc.desc      : function test
531da853ecaSopenharmony_ci */
532da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2000, TestSize.Level0)
533da853ecaSopenharmony_ci{
534da853ecaSopenharmony_ci    int tarckType = 0;
535da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
536da853ecaSopenharmony_ci    bool videoIsEnd = false;
537da853ecaSopenharmony_ci    int videoFrame = 0;
538da853ecaSopenharmony_ci    const char *file = "/data/test/media/h264_mp3_3mevx_fmp4.mp4";
539da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
540da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
541da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
542da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
543da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
544da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
545da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
546da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
547da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
548da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
549da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
550da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
551da853ecaSopenharmony_ci    }
552da853ecaSopenharmony_ci    int vKeyCount = 0;
553da853ecaSopenharmony_ci    int aKeyCount = 0;
554da853ecaSopenharmony_ci    int audioFrame = 0;
555da853ecaSopenharmony_ci    bool audioIsEnd = false;
556da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
557da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
558da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
559da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
560da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
561da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
562da853ecaSopenharmony_ci            trackFormat = nullptr;
563da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
564da853ecaSopenharmony_ci                continue;
565da853ecaSopenharmony_ci            }
566da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
567da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
568da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
569da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
570da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
571da853ecaSopenharmony_ci            }
572da853ecaSopenharmony_ci        }
573da853ecaSopenharmony_ci    }
574da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 465);
575da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 465);
576da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 369);
577da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
578da853ecaSopenharmony_ci    close(fd);
579da853ecaSopenharmony_ci}
580da853ecaSopenharmony_ci
581da853ecaSopenharmony_ci/**
582da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2100
583da853ecaSopenharmony_ci * @tc.name      : demuxer h265+aac fmp4 file
584da853ecaSopenharmony_ci * @tc.desc      : function test
585da853ecaSopenharmony_ci */
586da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2100, TestSize.Level0)
587da853ecaSopenharmony_ci{
588da853ecaSopenharmony_ci    int tarckType = 0;
589da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
590da853ecaSopenharmony_ci    bool videoIsEnd = false;
591da853ecaSopenharmony_ci    int videoFrame = 0;
592da853ecaSopenharmony_ci    const char *file = "/data/test/media/h265_aac_1mvex_fmp4.mp4";
593da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
594da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
595da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
596da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
597da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
598da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
599da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
600da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
601da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
602da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
603da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
604da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
605da853ecaSopenharmony_ci    }
606da853ecaSopenharmony_ci    int vKeyCount = 0;
607da853ecaSopenharmony_ci    int aKeyCount = 0;
608da853ecaSopenharmony_ci    int audioFrame = 0;
609da853ecaSopenharmony_ci    bool audioIsEnd = false;
610da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
611da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
612da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
613da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
614da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
615da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
616da853ecaSopenharmony_ci            trackFormat = nullptr;
617da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
618da853ecaSopenharmony_ci                continue;
619da853ecaSopenharmony_ci            }
620da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
621da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
622da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
623da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
624da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
625da853ecaSopenharmony_ci            }
626da853ecaSopenharmony_ci        }
627da853ecaSopenharmony_ci    }
628da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 173);
629da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 173);
630da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 242);
631da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 1);
632da853ecaSopenharmony_ci    close(fd);
633da853ecaSopenharmony_ci}
634da853ecaSopenharmony_ci
635da853ecaSopenharmony_ci/**
636da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2200
637da853ecaSopenharmony_ci * @tc.name      : demuxer HDRVivid+AudioVivid fmp4 file
638da853ecaSopenharmony_ci * @tc.desc      : function test
639da853ecaSopenharmony_ci */
640da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2200, TestSize.Level0)
641da853ecaSopenharmony_ci{
642da853ecaSopenharmony_ci    int tarckType = 0;
643da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
644da853ecaSopenharmony_ci    bool videoIsEnd = false;
645da853ecaSopenharmony_ci    int videoFrame = 0;
646da853ecaSopenharmony_ci    const char *file = "/data/test/media/audiovivid_hdrvivid_1s_fmp4.mp4";
647da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
648da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
649da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
650da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
651da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
652da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
653da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
654da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
655da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
656da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
657da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
658da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
659da853ecaSopenharmony_ci    }
660da853ecaSopenharmony_ci    int vKeyCount = 0;
661da853ecaSopenharmony_ci    int aKeyCount = 0;
662da853ecaSopenharmony_ci    int audioFrame = 0;
663da853ecaSopenharmony_ci    bool audioIsEnd = false;
664da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
665da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
666da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
667da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
668da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
669da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
670da853ecaSopenharmony_ci            trackFormat = nullptr;
671da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
672da853ecaSopenharmony_ci                continue;
673da853ecaSopenharmony_ci            }
674da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
675da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
676da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
677da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
678da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
679da853ecaSopenharmony_ci            }
680da853ecaSopenharmony_ci        }
681da853ecaSopenharmony_ci    }
682da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 26);
683da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 1);
684da853ecaSopenharmony_ci    close(fd);
685da853ecaSopenharmony_ci}
686da853ecaSopenharmony_ci
687da853ecaSopenharmony_ci/**
688da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2300
689da853ecaSopenharmony_ci * @tc.name      : demuxer M4A fmp4 file
690da853ecaSopenharmony_ci * @tc.desc      : function test
691da853ecaSopenharmony_ci */
692da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2300, TestSize.Level0)
693da853ecaSopenharmony_ci{
694da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
695da853ecaSopenharmony_ci    bool audioIsEnd = false;
696da853ecaSopenharmony_ci    int audioFrame = 0;
697da853ecaSopenharmony_ci    const char *file = "/data/test/media/m4a_fmp4.mp4";
698da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
699da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
700da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
701da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
702da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
703da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
704da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
705da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
706da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
707da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
708da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
709da853ecaSopenharmony_ci    int aKeyCount = 0;
710da853ecaSopenharmony_ci    while (!audioIsEnd) {
711da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
712da853ecaSopenharmony_ci        SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
713da853ecaSopenharmony_ci    }
714da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 352);
715da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 352);
716da853ecaSopenharmony_ci    close(fd);
717da853ecaSopenharmony_ci}
718da853ecaSopenharmony_ci
719da853ecaSopenharmony_ci/**
720da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2400
721da853ecaSopenharmony_ci * @tc.name      : demuxer M4V fmp4 file
722da853ecaSopenharmony_ci * @tc.desc      : function test
723da853ecaSopenharmony_ci */
724da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2400, TestSize.Level0)
725da853ecaSopenharmony_ci{
726da853ecaSopenharmony_ci    int tarckType = 0;
727da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
728da853ecaSopenharmony_ci    bool videoIsEnd = false;
729da853ecaSopenharmony_ci    int videoFrame = 0;
730da853ecaSopenharmony_ci    const char *file = "/data/test/media/m4v_fmp4.mp4";
731da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
732da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
733da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
734da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
735da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
736da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
737da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
738da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
739da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
740da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
741da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
742da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
743da853ecaSopenharmony_ci    }
744da853ecaSopenharmony_ci    int vKeyCount = 0;
745da853ecaSopenharmony_ci    int aKeyCount = 0;
746da853ecaSopenharmony_ci    int audioFrame = 0;
747da853ecaSopenharmony_ci    bool audioIsEnd = false;
748da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
749da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
750da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
751da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
752da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
753da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
754da853ecaSopenharmony_ci            trackFormat = nullptr;
755da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
756da853ecaSopenharmony_ci                continue;
757da853ecaSopenharmony_ci            }
758da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
759da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
760da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
761da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
762da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
763da853ecaSopenharmony_ci            }
764da853ecaSopenharmony_ci        }
765da853ecaSopenharmony_ci    }
766da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 176);
767da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 176);
768da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 123);
769da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 1);
770da853ecaSopenharmony_ci    close(fd);
771da853ecaSopenharmony_ci}
772da853ecaSopenharmony_ci
773da853ecaSopenharmony_ci/**
774da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2500
775da853ecaSopenharmony_ci * @tc.name      : create hls demuxer with error uri
776da853ecaSopenharmony_ci * @tc.desc      : function test
777da853ecaSopenharmony_ci */
778da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2500, TestSize.Level0)
779da853ecaSopenharmony_ci{
780da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/index.m3u8";
781da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
782da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, source);
783da853ecaSopenharmony_ci}
784da853ecaSopenharmony_ci
785da853ecaSopenharmony_ci/**
786da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2600
787da853ecaSopenharmony_ci * @tc.name      : create str demuxer with file and read
788da853ecaSopenharmony_ci * @tc.desc      : function test
789da853ecaSopenharmony_ci */
790da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2600, TestSize.Level0)
791da853ecaSopenharmony_ci{
792da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
793da853ecaSopenharmony_ci    const char* mimeType = nullptr;
794da853ecaSopenharmony_ci    int srtIndex = 1;
795da853ecaSopenharmony_ci    int srtSubtitle = 0;
796da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_test.srt";
797da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
798da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
799da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
800da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
801da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
802da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
803da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
804da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
805da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
806da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
807da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
808da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
809da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
810da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
811da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
812da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
813da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
814da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
815da853ecaSopenharmony_ci    while (true) {
816da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
817da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
818da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
819da853ecaSopenharmony_ci            break;
820da853ecaSopenharmony_ci        }
821da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
822da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
823da853ecaSopenharmony_ci        cout << "subtitle" << "----------------" << srtSubtitle << "-----------------" << endl;
824da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
825da853ecaSopenharmony_ci        srtIndex++;
826da853ecaSopenharmony_ci    }
827da853ecaSopenharmony_ci    close(fd);
828da853ecaSopenharmony_ci}
829da853ecaSopenharmony_ci
830da853ecaSopenharmony_ci/**
831da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2700
832da853ecaSopenharmony_ci * @tc.name      : create str demuxer with file and seek+read
833da853ecaSopenharmony_ci * @tc.desc      : function test
834da853ecaSopenharmony_ci */
835da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2700, TestSize.Level0)
836da853ecaSopenharmony_ci{
837da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
838da853ecaSopenharmony_ci    const char* mimeType = nullptr;
839da853ecaSopenharmony_ci    int srtIndex = 1;
840da853ecaSopenharmony_ci    int srtSubtitle = 0;
841da853ecaSopenharmony_ci    uint8_t *data = nullptr;
842da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_test.srt";
843da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
844da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
845da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
846da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
847da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
848da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
849da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
850da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
851da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
852da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
853da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
854da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
855da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
856da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
857da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
858da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
859da853ecaSopenharmony_ci    for (int index = 0; index < 5; index++) {
860da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
861da853ecaSopenharmony_ci        data = OH_AVMemory_GetAddr(memory);
862da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
863da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
864da853ecaSopenharmony_ci        srtIndex++;
865da853ecaSopenharmony_ci    }
866da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, 5400, SEEK_MODE_CLOSEST_SYNC));
867da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
868da853ecaSopenharmony_ci    data = OH_AVMemory_GetAddr(memory);
869da853ecaSopenharmony_ci    srtSubtitle = atoi(reinterpret_cast<const char*>(data));
870da853ecaSopenharmony_ci    srtIndex = 2;
871da853ecaSopenharmony_ci    ASSERT_EQ(srtSubtitle, srtIndex);
872da853ecaSopenharmony_ci    while (true) {
873da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
874da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
875da853ecaSopenharmony_ci            break;
876da853ecaSopenharmony_ci        }
877da853ecaSopenharmony_ci        data = OH_AVMemory_GetAddr(memory);
878da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
879da853ecaSopenharmony_ci        srtIndex++;
880da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
881da853ecaSopenharmony_ci    }
882da853ecaSopenharmony_ci    close(fd);
883da853ecaSopenharmony_ci}
884da853ecaSopenharmony_ci
885da853ecaSopenharmony_ci/**
886da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2800
887da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- no empty paragraphs
888da853ecaSopenharmony_ci * @tc.desc      : function test
889da853ecaSopenharmony_ci */
890da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2800, TestSize.Level2)
891da853ecaSopenharmony_ci{
892da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
893da853ecaSopenharmony_ci    const char* mimeType = nullptr;
894da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_2800.srt";
895da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
896da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
897da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
898da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
899da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
900da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
901da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
902da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
903da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
904da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
905da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
906da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
907da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
908da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
909da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
910da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
911da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
912da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
913da853ecaSopenharmony_ci    while (true) {
914da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
915da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
916da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
917da853ecaSopenharmony_ci            break;
918da853ecaSopenharmony_ci        }
919da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
920da853ecaSopenharmony_ci        cout << "subtitle"<< "----------------" << data << "-----------------" << endl;
921da853ecaSopenharmony_ci    }
922da853ecaSopenharmony_ci
923da853ecaSopenharmony_ci    close(fd);
924da853ecaSopenharmony_ci}
925da853ecaSopenharmony_ci
926da853ecaSopenharmony_ci/**
927da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_2900
928da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- subtitle sequence error
929da853ecaSopenharmony_ci * @tc.desc      : function test
930da853ecaSopenharmony_ci */
931da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_2900, TestSize.Level2)
932da853ecaSopenharmony_ci{
933da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
934da853ecaSopenharmony_ci    const char* mimeType = nullptr;
935da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_2900.srt";
936da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
937da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
938da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
939da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
940da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
941da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
942da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
943da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
944da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
945da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
946da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
947da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
948da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
949da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
950da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
951da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
952da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
953da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
954da853ecaSopenharmony_ci    while (true) {
955da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
956da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
957da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
958da853ecaSopenharmony_ci            break;
959da853ecaSopenharmony_ci        }
960da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
961da853ecaSopenharmony_ci        cout << "subtitle" << "----------------" << data << "-----------------" << endl;
962da853ecaSopenharmony_ci    }
963da853ecaSopenharmony_ci
964da853ecaSopenharmony_ci    close(fd);
965da853ecaSopenharmony_ci}
966da853ecaSopenharmony_ci
967da853ecaSopenharmony_ci/**
968da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3000
969da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- timeline format error
970da853ecaSopenharmony_ci * @tc.desc      : function test
971da853ecaSopenharmony_ci */
972da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3000, TestSize.Level2)
973da853ecaSopenharmony_ci{
974da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
975da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_3000.srt";
976da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
977da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
978da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
979da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
980da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
981da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
982da853ecaSopenharmony_ci    OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount);
983da853ecaSopenharmony_ci    cout << "g_trackCount"<< "----------------" << g_trackCount << "-----------------" << endl;
984da853ecaSopenharmony_ci    OH_AVDemuxer_SelectTrackByID(demuxer, 0);
985da853ecaSopenharmony_ci    OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr);
986da853ecaSopenharmony_ci    uint8_t *data = OH_AVMemory_GetAddr(memory);
987da853ecaSopenharmony_ci    cout << "subtitle"<< "----------------" << data << "-----------------" << endl;
988da853ecaSopenharmony_ci    close(fd);
989da853ecaSopenharmony_ci}
990da853ecaSopenharmony_ci
991da853ecaSopenharmony_ci/**
992da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3100
993da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- subtitle is empty
994da853ecaSopenharmony_ci * @tc.desc      : function test
995da853ecaSopenharmony_ci */
996da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3100, TestSize.Level2)
997da853ecaSopenharmony_ci{
998da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
999da853ecaSopenharmony_ci    const char* mimeType = nullptr;
1000da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_3100.srt";
1001da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1002da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1003da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1004da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1005da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1006da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1007da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1008da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1009da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1010da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1011da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
1012da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
1013da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
1014da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
1015da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
1016da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1017da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1018da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1019da853ecaSopenharmony_ci    while (true) {
1020da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1021da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1022da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
1023da853ecaSopenharmony_ci            break;
1024da853ecaSopenharmony_ci        }
1025da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
1026da853ecaSopenharmony_ci        cout << "subtitle"<< "----------------" << data << "-----------------" << endl;
1027da853ecaSopenharmony_ci    }
1028da853ecaSopenharmony_ci
1029da853ecaSopenharmony_ci    close(fd);
1030da853ecaSopenharmony_ci}
1031da853ecaSopenharmony_ci
1032da853ecaSopenharmony_ci/**
1033da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3200
1034da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- SRT file is empty
1035da853ecaSopenharmony_ci * @tc.desc      : function test
1036da853ecaSopenharmony_ci * fail
1037da853ecaSopenharmony_ci */
1038da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3200, TestSize.Level2)
1039da853ecaSopenharmony_ci{
1040da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1041da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_3200.srt";
1042da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1043da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1044da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1045da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1046da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1047da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1048da853ecaSopenharmony_ci    OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount);
1049da853ecaSopenharmony_ci    cout << "g_trackCount"<< "----------------" << g_trackCount << "-----------------" << endl;
1050da853ecaSopenharmony_ci    OH_AVDemuxer_SelectTrackByID(demuxer, 0);
1051da853ecaSopenharmony_ci    OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr);
1052da853ecaSopenharmony_ci    uint8_t *data = OH_AVMemory_GetAddr(memory);
1053da853ecaSopenharmony_ci    cout << "subtitle"<< "----------------" << data << "-----------------" << endl;
1054da853ecaSopenharmony_ci    close(fd);
1055da853ecaSopenharmony_ci}
1056da853ecaSopenharmony_ci
1057da853ecaSopenharmony_ci/**
1058da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3300
1059da853ecaSopenharmony_ci * @tc.name      : create str demuxer with error file -- alternating Up and Down Times
1060da853ecaSopenharmony_ci * @tc.desc      : function test
1061da853ecaSopenharmony_ci */
1062da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3300, TestSize.Level2)
1063da853ecaSopenharmony_ci{
1064da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1065da853ecaSopenharmony_ci    const char* mimeType = nullptr;
1066da853ecaSopenharmony_ci    const char *file = "/data/test/media/srt_3300.srt";
1067da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1068da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1069da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1070da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1071da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1072da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1073da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1074da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1075da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1076da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1077da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType));
1078da853ecaSopenharmony_ci    string mimeTypeString = mimeType;
1079da853ecaSopenharmony_ci    string srtString = OH_AVCODEC_MIMETYPE_SUBTITLE_SRT;
1080da853ecaSopenharmony_ci    cout << "------mimeType-------" << mimeTypeString << endl;
1081da853ecaSopenharmony_ci    ASSERT_EQ(mimeTypeString, srtString);
1082da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1083da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1084da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1085da853ecaSopenharmony_ci    while (true) {
1086da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1087da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1088da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
1089da853ecaSopenharmony_ci            break;
1090da853ecaSopenharmony_ci        }
1091da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
1092da853ecaSopenharmony_ci        cout << "subtitle"<< "----------------" << data << "-----------------" << endl;
1093da853ecaSopenharmony_ci    }
1094da853ecaSopenharmony_ci
1095da853ecaSopenharmony_ci    close(fd);
1096da853ecaSopenharmony_ci}
1097da853ecaSopenharmony_ci
1098da853ecaSopenharmony_ci/**
1099da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3400
1100da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,OH_MD_KEY_DURATION,OH_MD_KEY_CODEC_CONFIG
1101da853ecaSopenharmony_ci * @tc.desc      : function test
1102da853ecaSopenharmony_ci */
1103da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3400, TestSize.Level0)
1104da853ecaSopenharmony_ci{
1105da853ecaSopenharmony_ci    int64_t duration;
1106da853ecaSopenharmony_ci    static OH_AVFormat *trackFormatFirst = nullptr;
1107da853ecaSopenharmony_ci    static OH_AVFormat *trackFormatSecond = nullptr;
1108da853ecaSopenharmony_ci    uint8_t *codecConfig = nullptr;
1109da853ecaSopenharmony_ci    double frameRate;
1110da853ecaSopenharmony_ci    int32_t rotation;
1111da853ecaSopenharmony_ci    int64_t channelLayout;
1112da853ecaSopenharmony_ci    int32_t audioSampleFormat;
1113da853ecaSopenharmony_ci    int32_t bitsPreCodedSample;
1114da853ecaSopenharmony_ci    int32_t profile;
1115da853ecaSopenharmony_ci    int32_t colorPrimaries;
1116da853ecaSopenharmony_ci    int32_t videoIsHdrvivid;
1117da853ecaSopenharmony_ci    size_t bufferSize;
1118da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
1119da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1120da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1121da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1122da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1123da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1124da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1125da853ecaSopenharmony_ci    trackFormatFirst = OH_AVSource_GetTrackFormat(source, 0);
1126da853ecaSopenharmony_ci    ASSERT_NE(trackFormatFirst, nullptr);
1127da853ecaSopenharmony_ci    trackFormatSecond = OH_AVSource_GetTrackFormat(source, 1);
1128da853ecaSopenharmony_ci    ASSERT_NE(trackFormatSecond, nullptr);
1129da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(sourceFormat, OH_MD_KEY_DURATION, &duration));
1130da853ecaSopenharmony_ci    ASSERT_EQ(duration, 10032000);
1131da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetBuffer(trackFormatSecond, OH_MD_KEY_CODEC_CONFIG, &codecConfig, &bufferSize));
1132da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetDoubleValue(trackFormatSecond, OH_MD_KEY_FRAME_RATE, &frameRate));
1133da853ecaSopenharmony_ci    ASSERT_EQ(frameRate, 25.1);
1134da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormatSecond, OH_MD_KEY_ROTATION, &rotation));
1135da853ecaSopenharmony_ci    ASSERT_EQ(rotation, 0);
1136da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormatFirst, OH_MD_KEY_CHANNEL_LAYOUT, &channelLayout));
1137da853ecaSopenharmony_ci    ASSERT_EQ(channelLayout, 3);
1138da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormatFirst, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, &audioSampleFormat));
1139da853ecaSopenharmony_ci    ASSERT_EQ(audioSampleFormat, 9);
1140da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormatFirst, OH_MD_KEY_BITS_PER_CODED_SAMPLE, &bitsPreCodedSample));
1141da853ecaSopenharmony_ci    ASSERT_EQ(bitsPreCodedSample, 16);
1142da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetIntValue(trackFormatFirst, OH_MD_KEY_PROFILE, &profile));
1143da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetIntValue(trackFormatFirst, OH_MD_KEY_COLOR_PRIMARIES, &colorPrimaries));
1144da853ecaSopenharmony_ci    ASSERT_FALSE(OH_AVFormat_GetIntValue(trackFormatFirst, OH_MD_KEY_VIDEO_IS_HDR_VIVID, &videoIsHdrvivid));
1145da853ecaSopenharmony_ci    OH_AVFormat_Destroy(trackFormatFirst);
1146da853ecaSopenharmony_ci    trackFormatFirst = nullptr;
1147da853ecaSopenharmony_ci    OH_AVFormat_Destroy(trackFormatSecond);
1148da853ecaSopenharmony_ci    trackFormatSecond = nullptr;
1149da853ecaSopenharmony_ci    close(fd);
1150da853ecaSopenharmony_ci}
1151da853ecaSopenharmony_ci
1152da853ecaSopenharmony_ci/**
1153da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3500
1154da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,startTime
1155da853ecaSopenharmony_ci * @tc.desc      : function test
1156da853ecaSopenharmony_ci */
1157da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3500, TestSize.Level0)
1158da853ecaSopenharmony_ci{
1159da853ecaSopenharmony_ci    int64_t startTime;
1160da853ecaSopenharmony_ci    const char *file = "/data/test/media/test_265_B_Gop25_4sec.mp4";
1161da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1162da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1163da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1164da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1165da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1166da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1167da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(sourceFormat, OH_MD_KEY_START_TIME, &startTime));
1168da853ecaSopenharmony_ci    ASSERT_EQ(0, startTime);
1169da853ecaSopenharmony_ci    close(fd);
1170da853ecaSopenharmony_ci}
1171da853ecaSopenharmony_ci/**
1172da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3600
1173da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,SAR,bitsPreCodedSample,sampleFormat
1174da853ecaSopenharmony_ci * @tc.desc      : function test
1175da853ecaSopenharmony_ci */
1176da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3600, TestSize.Level0)
1177da853ecaSopenharmony_ci{
1178da853ecaSopenharmony_ci    int tarckType = 0;
1179da853ecaSopenharmony_ci    double sar;
1180da853ecaSopenharmony_ci    int32_t bitsPreCodedSample;
1181da853ecaSopenharmony_ci    int32_t sampleFormat;
1182da853ecaSopenharmony_ci    const char *file = "/data/test/media/test_265_B_Gop25_4sec.mp4";
1183da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1184da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1185da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1186da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1187da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1188da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1189da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1190da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1191da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1192da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1193da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1194da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1195da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1196da853ecaSopenharmony_ci    }
1197da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1198da853ecaSopenharmony_ci        trackFormat = OH_AVSource_GetTrackFormat(source, index);
1199da853ecaSopenharmony_ci        ASSERT_NE(trackFormat, nullptr);
1200da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1201da853ecaSopenharmony_ci        if (tarckType == MEDIA_TYPE_VID) {
1202da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetDoubleValue(trackFormat, OH_MD_KEY_VIDEO_SAR, &sar));
1203da853ecaSopenharmony_ci        }else if (tarckType == MEDIA_TYPE_AUD) {
1204da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_BITS_PER_CODED_SAMPLE, &bitsPreCodedSample));
1205da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, &sampleFormat));
1206da853ecaSopenharmony_ci        }
1207da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
1208da853ecaSopenharmony_ci        trackFormat = nullptr;
1209da853ecaSopenharmony_ci    }
1210da853ecaSopenharmony_ci    ASSERT_EQ(1, sar);
1211da853ecaSopenharmony_ci    ASSERT_EQ(16, bitsPreCodedSample);
1212da853ecaSopenharmony_ci    ASSERT_EQ(9, sampleFormat);
1213da853ecaSopenharmony_ci    close(fd);
1214da853ecaSopenharmony_ci}
1215da853ecaSopenharmony_ci
1216da853ecaSopenharmony_ci/**
1217da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3700
1218da853ecaSopenharmony_ci * @tc.name      : demuxer MP4,duration,dts
1219da853ecaSopenharmony_ci * @tc.desc      : function test
1220da853ecaSopenharmony_ci */
1221da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3700, TestSize.Level0)
1222da853ecaSopenharmony_ci{
1223da853ecaSopenharmony_ci    int tarckType = 0;
1224da853ecaSopenharmony_ci    int64_t duration;
1225da853ecaSopenharmony_ci    int64_t dts;
1226da853ecaSopenharmony_ci    const char *file = "/data/test/media/test_265_B_Gop25_4sec.mp4";
1227da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1228da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1229da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1230da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1231da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1232da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1233da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1234da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1235da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1236da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1237da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1238da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1239da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1240da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1241da853ecaSopenharmony_ci    }
1242da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1243da853ecaSopenharmony_ci        trackFormat = OH_AVSource_GetTrackFormat(source, index);
1244da853ecaSopenharmony_ci        ASSERT_NE(trackFormat, nullptr);
1245da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1246da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
1247da853ecaSopenharmony_ci        trackFormat = nullptr;
1248da853ecaSopenharmony_ci        if (tarckType == MEDIA_TYPE_VID) {
1249da853ecaSopenharmony_ci            OH_AVDemuxer_ReadSampleBuffer(demuxer, index, avBuffer);
1250da853ecaSopenharmony_ci            ASSERT_NE(avBuffer, nullptr);
1251da853ecaSopenharmony_ci            format = OH_AVBuffer_GetParameter(avBuffer);
1252da853ecaSopenharmony_ci            ASSERT_NE(format, nullptr);
1253da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetLongValue(format, OH_MD_KEY_BUFFER_DURATION, &duration));
1254da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetLongValue(format, OH_MD_KEY_DECODING_TIMESTAMP, &dts));
1255da853ecaSopenharmony_ci            ASSERT_EQ(40000, duration);
1256da853ecaSopenharmony_ci            ASSERT_EQ(-80000, dts);
1257da853ecaSopenharmony_ci        }
1258da853ecaSopenharmony_ci    }
1259da853ecaSopenharmony_ci}
1260da853ecaSopenharmony_ci/**
1261da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_3800
1262da853ecaSopenharmony_ci * @tc.name      : demuxer MP4 ,AVCODEC_BUFFER_FLAGS_DISCARD
1263da853ecaSopenharmony_ci * @tc.desc      : function test
1264da853ecaSopenharmony_ci */
1265da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_3800, TestSize.Level0)
1266da853ecaSopenharmony_ci{
1267da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1268da853ecaSopenharmony_ci    int tarckType = 0;
1269da853ecaSopenharmony_ci    const char *file = "/data/test/media/test_265_B_Gop25_4sec.mp4";
1270da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1271da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1272da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1273da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1274da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1275da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1276da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1277da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1278da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1279da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1280da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1281da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1282da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1283da853ecaSopenharmony_ci    }
1284da853ecaSopenharmony_ci    int audioFrame = 0;
1285da853ecaSopenharmony_ci    bool audioIsEnd = false;
1286da853ecaSopenharmony_ci    while (!audioIsEnd) {
1287da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1288da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1289da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1290da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1291da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1292da853ecaSopenharmony_ci            trackFormat = nullptr;
1293da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD))) {
1294da853ecaSopenharmony_ci                continue;
1295da853ecaSopenharmony_ci            }
1296da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1297da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_DISCARD)) {
1298da853ecaSopenharmony_ci                audioIsEnd = true;
1299da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
1300da853ecaSopenharmony_ci            }
1301da853ecaSopenharmony_ci        }
1302da853ecaSopenharmony_ci    }
1303da853ecaSopenharmony_ci    close(fd);
1304da853ecaSopenharmony_ci}
1305da853ecaSopenharmony_ci
1306da853ecaSopenharmony_ci/**
1307da853ecaSopenharmony_ci * @tc.number    : SUB_MP3_TITLE_RESOLUTION_4100
1308da853ecaSopenharmony_ci * @tc.name      : audio resolution with fffe mp3
1309da853ecaSopenharmony_ci * @tc.desc      : function test
1310da853ecaSopenharmony_ci */
1311da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MP3_TITLE_RESOLUTION_4100, TestSize.Level0)
1312da853ecaSopenharmony_ci{
1313da853ecaSopenharmony_ci    const char *stringVal;
1314da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/fffe_bom.mp3";
1315da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1316da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1317da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1318da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1319da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1320da853ecaSopenharmony_ci
1321da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1322da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1323da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal));
1324da853ecaSopenharmony_ci    cout << "title" << "----------------------" << stringVal << "---------" << endl;
1325da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "bom"));
1326da853ecaSopenharmony_ci    close(fd);
1327da853ecaSopenharmony_ci}
1328da853ecaSopenharmony_ci
1329da853ecaSopenharmony_ci/**
1330da853ecaSopenharmony_ci * @tc.number    : SUB_MP3_TITLE_RESOLUTION_4200
1331da853ecaSopenharmony_ci * @tc.name      : audio resolution with feff mp3
1332da853ecaSopenharmony_ci * @tc.desc      : function test
1333da853ecaSopenharmony_ci */
1334da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MP3_TITLE_RESOLUTION_4200, TestSize.Level0)
1335da853ecaSopenharmony_ci{
1336da853ecaSopenharmony_ci    const char *stringVal;
1337da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/feff_bom.mp3";
1338da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1339da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1340da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1341da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1342da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1343da853ecaSopenharmony_ci
1344da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1345da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1346da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal));
1347da853ecaSopenharmony_ci    cout << "title" << "----------------------" << stringVal << "---------" << endl;
1348da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "bom"));
1349da853ecaSopenharmony_ci    close(fd);
1350da853ecaSopenharmony_ci}
1351da853ecaSopenharmony_ci
1352da853ecaSopenharmony_ci/**
1353da853ecaSopenharmony_ci * @tc.number    : SUB_MP3_TITLE_RESOLUTION_4300
1354da853ecaSopenharmony_ci * @tc.name      : audio resolution non_standard mp3
1355da853ecaSopenharmony_ci * @tc.desc      : function test
1356da853ecaSopenharmony_ci */
1357da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MP3_TITLE_RESOLUTION_4300, TestSize.Level0)
1358da853ecaSopenharmony_ci{
1359da853ecaSopenharmony_ci    const char *stringVal;
1360da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/nonstandard_bom.mp3";
1361da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1362da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1363da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1364da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1365da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1366da853ecaSopenharmony_ci
1367da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1368da853ecaSopenharmony_ci    ASSERT_NE(sourceFormat, nullptr);
1369da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal));
1370da853ecaSopenharmony_ci    cout << "title" << "----------------------" << stringVal << "---------" << endl;
1371da853ecaSopenharmony_ci    ASSERT_EQ(0, strcmp(stringVal, "bom"));
1372da853ecaSopenharmony_ci    close(fd);
1373da853ecaSopenharmony_ci}
1374da853ecaSopenharmony_ci
1375da853ecaSopenharmony_ci/**
1376da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_4600
1377da853ecaSopenharmony_ci * @tc.name      : demuxer AVC MP4 ,OH_MD_KEY_DURATION,OH_MD_KEY_CODEC_CONFIG
1378da853ecaSopenharmony_ci * @tc.desc      : function test
1379da853ecaSopenharmony_ci */
1380da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_4600, TestSize.Level0)
1381da853ecaSopenharmony_ci{
1382da853ecaSopenharmony_ci    int tarckType = 0;
1383da853ecaSopenharmony_ci    uint8_t *codecConfig = nullptr;
1384da853ecaSopenharmony_ci    int32_t rotation;
1385da853ecaSopenharmony_ci    int32_t videoIsHdrvivid;
1386da853ecaSopenharmony_ci    size_t bufferSize;
1387da853ecaSopenharmony_ci    const char *file = "/data/test/media/single_rk.mp4";
1388da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1389da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1390da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1391da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1392da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1393da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1394da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1395da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1396da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1397da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1398da853ecaSopenharmony_ci    }
1399da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1400da853ecaSopenharmony_ci    int vKeyCount = 0;
1401da853ecaSopenharmony_ci    int aKeyCount = 0;
1402da853ecaSopenharmony_ci    bool audioIsEnd = false;
1403da853ecaSopenharmony_ci    bool videoIsEnd = false;
1404da853ecaSopenharmony_ci    int audioFrame = 0;
1405da853ecaSopenharmony_ci    int videoFrame = 0;
1406da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1407da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1408da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1409da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1410da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1411da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1412da853ecaSopenharmony_ci                continue;
1413da853ecaSopenharmony_ci            }
1414da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetBuffer(trackFormat, OH_MD_KEY_CODEC_CONFIG, &codecConfig, &bufferSize));
1415da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1416da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1417da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
1418da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1419da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1420da853ecaSopenharmony_ci                ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_ROTATION, &rotation));
1421da853ecaSopenharmony_ci                ASSERT_FALSE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_VIDEO_IS_HDR_VIVID, &videoIsHdrvivid));
1422da853ecaSopenharmony_ci            }
1423da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1424da853ecaSopenharmony_ci            trackFormat = nullptr;
1425da853ecaSopenharmony_ci        }
1426da853ecaSopenharmony_ci    }
1427da853ecaSopenharmony_ci    ASSERT_EQ(AVC_ROTATION, rotation);
1428da853ecaSopenharmony_ci    close(fd);
1429da853ecaSopenharmony_ci}
1430da853ecaSopenharmony_ci/**
1431da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_4700
1432da853ecaSopenharmony_ci * @tc.name      : demuxer HEVC MP4 ,OH_MD_KEY_DURATION,OH_MD_KEY_CODEC_CONFIG
1433da853ecaSopenharmony_ci * @tc.desc      : function test
1434da853ecaSopenharmony_ci */
1435da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_4700, TestSize.Level0)
1436da853ecaSopenharmony_ci{
1437da853ecaSopenharmony_ci    int tarckType = 0;
1438da853ecaSopenharmony_ci    uint8_t *codecConfig = nullptr;
1439da853ecaSopenharmony_ci    int32_t rotation;
1440da853ecaSopenharmony_ci    size_t bufferSize;
1441da853ecaSopenharmony_ci    const char *file = "/data/test/media/single_60.mp4";
1442da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1443da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1444da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1445da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1446da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1447da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1448da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1449da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1450da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1451da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1452da853ecaSopenharmony_ci    }
1453da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1454da853ecaSopenharmony_ci    int vKeyCount = 0;
1455da853ecaSopenharmony_ci    int aKeyCount = 0;
1456da853ecaSopenharmony_ci    bool audioIsEnd = false;
1457da853ecaSopenharmony_ci    bool videoIsEnd = false;
1458da853ecaSopenharmony_ci    int audioFrame = 0;
1459da853ecaSopenharmony_ci    int videoFrame = 0;
1460da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1461da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1462da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1463da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1464da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1465da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1466da853ecaSopenharmony_ci                continue;
1467da853ecaSopenharmony_ci            }
1468da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetBuffer(trackFormat, OH_MD_KEY_CODEC_CONFIG, &codecConfig, &bufferSize));
1469da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1470da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1471da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
1472da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1473da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1474da853ecaSopenharmony_ci                ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_ROTATION, &rotation));
1475da853ecaSopenharmony_ci                IsHdrVivid(trackFormat);
1476da853ecaSopenharmony_ci            }
1477da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1478da853ecaSopenharmony_ci            trackFormat = nullptr;
1479da853ecaSopenharmony_ci        }
1480da853ecaSopenharmony_ci    }
1481da853ecaSopenharmony_ci    ASSERT_EQ(HEVC_ROTATION, rotation);
1482da853ecaSopenharmony_ci    close(fd);
1483da853ecaSopenharmony_ci}
1484da853ecaSopenharmony_ci/**
1485da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_6200
1486da853ecaSopenharmony_ci * @tc.name      : create pcm-mulaw wav demuxer with file
1487da853ecaSopenharmony_ci * @tc.desc      : function test
1488da853ecaSopenharmony_ci */
1489da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_6200, TestSize.Level2)
1490da853ecaSopenharmony_ci{
1491da853ecaSopenharmony_ci    int audioFrame = 0;
1492da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_audio_test_202406290859.wav";
1493da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1494da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1495da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1496da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1497da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1498da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1499da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1500da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1501da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1502da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1503da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1504da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1505da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1506da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1507da853ecaSopenharmony_ci    }
1508da853ecaSopenharmony_ci    CheckAudioParam(source, audioFrame);
1509da853ecaSopenharmony_ci    ASSERT_EQ(103, audioFrame);
1510da853ecaSopenharmony_ci    cout << "-----------audioFrame-----------" << audioFrame << endl;
1511da853ecaSopenharmony_ci    close(fd);
1512da853ecaSopenharmony_ci}
1513da853ecaSopenharmony_ci
1514da853ecaSopenharmony_ci/**
1515da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_6400
1516da853ecaSopenharmony_ci * @tc.name      : create pcm-mulaw wav demuxer with Mono channel file
1517da853ecaSopenharmony_ci * @tc.desc      : function test
1518da853ecaSopenharmony_ci */
1519da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_6400, TestSize.Level2)
1520da853ecaSopenharmony_ci{
1521da853ecaSopenharmony_ci    int audioFrame = 0;
1522da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_audio_test_1562.wav";
1523da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1524da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1525da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1526da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1527da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1528da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1529da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1530da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1531da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1532da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1533da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1534da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1535da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1536da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1537da853ecaSopenharmony_ci    }
1538da853ecaSopenharmony_ci    CheckAudioParam(source, audioFrame);
1539da853ecaSopenharmony_ci    ASSERT_EQ(7, audioFrame);
1540da853ecaSopenharmony_ci    cout << "-----------audioFrame-----------" << audioFrame << endl;
1541da853ecaSopenharmony_ci    close(fd);
1542da853ecaSopenharmony_ci}
1543da853ecaSopenharmony_ci
1544da853ecaSopenharmony_ci/**
1545da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_6600
1546da853ecaSopenharmony_ci * @tc.name      : create pcm+mulaw wav demuxer with file and forward back seek+read
1547da853ecaSopenharmony_ci * @tc.desc      : function test
1548da853ecaSopenharmony_ci */
1549da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_6600, TestSize.Level0)
1550da853ecaSopenharmony_ci{
1551da853ecaSopenharmony_ci    int audioFrame = 0;
1552da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_audio_test_202406290859.wav";
1553da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1554da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1555da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1556da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1557da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1558da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1559da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1560da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1561da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1562da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1563da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1564da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1565da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1566da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1567da853ecaSopenharmony_ci    int tarckType = 0;
1568da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1569da853ecaSopenharmony_ci    int time = 4600000;
1570da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1571da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1572da853ecaSopenharmony_ci    time = 92000;
1573da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1574da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1575da853ecaSopenharmony_ci    CheckAudioParam(source, audioFrame);
1576da853ecaSopenharmony_ci    ASSERT_EQ(FRAME_REMAINING, audioFrame);
1577da853ecaSopenharmony_ci    cout << "-----------audioFrame-----------" << audioFrame << endl;
1578da853ecaSopenharmony_ci    close(fd);
1579da853ecaSopenharmony_ci}
1580da853ecaSopenharmony_ci
1581da853ecaSopenharmony_ci/**
1582da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_6700
1583da853ecaSopenharmony_ci * @tc.name      : create pcm+mulaw wav demuxer with file and back seek+read
1584da853ecaSopenharmony_ci * @tc.desc      : function test
1585da853ecaSopenharmony_ci */
1586da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_6700, TestSize.Level0)
1587da853ecaSopenharmony_ci{
1588da853ecaSopenharmony_ci    int audioFrame = 0;
1589da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_audio_test_202406290859.wav";
1590da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1591da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1592da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1593da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1594da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1595da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1596da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1597da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1598da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1599da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1600da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1601da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1602da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1603da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1604da853ecaSopenharmony_ci    int tarckType = 0;
1605da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1606da853ecaSopenharmony_ci    int time = 4736000;
1607da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1608da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1609da853ecaSopenharmony_ci    time = 600000;
1610da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1611da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1612da853ecaSopenharmony_ci    time = 92000;
1613da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1614da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1615da853ecaSopenharmony_ci    CheckAudioParam(source, audioFrame);
1616da853ecaSopenharmony_ci    ASSERT_EQ(FRAME_REMAINING, audioFrame);
1617da853ecaSopenharmony_ci    cout << "-----------audioFrame-----------" << audioFrame << endl;
1618da853ecaSopenharmony_ci    close(fd);
1619da853ecaSopenharmony_ci}
1620da853ecaSopenharmony_ci
1621da853ecaSopenharmony_ci/**
1622da853ecaSopenharmony_ci * @tc.number    : SUB_MEDIA_DEMUXER_PROCESS_6800
1623da853ecaSopenharmony_ci * @tc.name      : create pcm+mulaw wav demuxer with file and forward seek+read
1624da853ecaSopenharmony_ci * @tc.desc      : function test
1625da853ecaSopenharmony_ci */
1626da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, SUB_MEDIA_DEMUXER_PROCESS_6800, TestSize.Level0)
1627da853ecaSopenharmony_ci{
1628da853ecaSopenharmony_ci    int audioFrame = 0;
1629da853ecaSopenharmony_ci    const char *file = "/data/test/media/audio/wav_audio_test_202406290859.wav";
1630da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1631da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1632da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1633da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1634da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1635da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1636da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1637da853ecaSopenharmony_ci    trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1638da853ecaSopenharmony_ci    ASSERT_NE(trackFormat, nullptr);
1639da853ecaSopenharmony_ci    avBuffer = OH_AVBuffer_Create(size);
1640da853ecaSopenharmony_ci    ASSERT_NE(avBuffer, nullptr);
1641da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1642da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1643da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1644da853ecaSopenharmony_ci    int tarckType = 0;
1645da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1646da853ecaSopenharmony_ci    int time = 92000;
1647da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, time/1000, SEEK_MODE_CLOSEST_SYNC));
1648da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, 0, avBuffer));
1649da853ecaSopenharmony_ci    CheckAudioParam(source, audioFrame);
1650da853ecaSopenharmony_ci    ASSERT_EQ(FRAME_REMAINING, audioFrame);
1651da853ecaSopenharmony_ci    cout << "-----------audioFrame-----------" << audioFrame << endl;
1652da853ecaSopenharmony_ci    close(fd);
1653da853ecaSopenharmony_ci}
1654da853ecaSopenharmony_ci
1655da853ecaSopenharmony_ci/**
1656da853ecaSopenharmony_ci * @tc.number    : VIDEO_DEMUXER_VVC_0100
1657da853ecaSopenharmony_ci * @tc.name      : demuxer 8bit H266 MP4 file, read
1658da853ecaSopenharmony_ci * @tc.desc      : function test
1659da853ecaSopenharmony_ci */
1660da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, VIDEO_DEMUXER_VVC_0100, TestSize.Level0)
1661da853ecaSopenharmony_ci{
1662da853ecaSopenharmony_ci    if (access(g_mp4Vvc8bitPath.c_str(), F_OK) != 0) {
1663da853ecaSopenharmony_ci        return;
1664da853ecaSopenharmony_ci    }
1665da853ecaSopenharmony_ci    int tarckType = 0;
1666da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1667da853ecaSopenharmony_ci    bool videoIsEnd = false;
1668da853ecaSopenharmony_ci    int videoFrame = 0;
1669da853ecaSopenharmony_ci    int fd = open(g_mp4Vvc8bitPath.c_str(), O_RDONLY);
1670da853ecaSopenharmony_ci    int64_t size = GetFileSize(g_mp4Vvc8bitPath.c_str());
1671da853ecaSopenharmony_ci    cout << g_mp4Vvc8bitPath.c_str() << "---------" << fd << "----------" << size <<endl;
1672da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1673da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1674da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1675da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1676da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1677da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1678da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1679da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1680da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1681da853ecaSopenharmony_ci    }
1682da853ecaSopenharmony_ci    int vKeyCount = 0;
1683da853ecaSopenharmony_ci    while (!videoIsEnd) {
1684da853ecaSopenharmony_ci        trackFormat = OH_AVSource_GetTrackFormat(source, 0);
1685da853ecaSopenharmony_ci        ASSERT_NE(trackFormat, nullptr);
1686da853ecaSopenharmony_ci        ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1687da853ecaSopenharmony_ci        if (videoIsEnd) {
1688da853ecaSopenharmony_ci            continue;
1689da853ecaSopenharmony_ci        }
1690da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1691da853ecaSopenharmony_ci        SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1692da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
1693da853ecaSopenharmony_ci        trackFormat = nullptr;
1694da853ecaSopenharmony_ci    }
1695da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 600);
1696da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 10);
1697da853ecaSopenharmony_ci    close(fd);
1698da853ecaSopenharmony_ci}
1699da853ecaSopenharmony_ci
1700da853ecaSopenharmony_ci/**
1701da853ecaSopenharmony_ci * @tc.number    : VIDEO_DEMUXER_VVC_0200
1702da853ecaSopenharmony_ci * @tc.name      : demuxer 10bit H266 MP4 file, read
1703da853ecaSopenharmony_ci * @tc.desc      : function test
1704da853ecaSopenharmony_ci */
1705da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, VIDEO_DEMUXER_VVC_0200, TestSize.Level0)
1706da853ecaSopenharmony_ci{
1707da853ecaSopenharmony_ci    if (access(g_mp4Vvc10bitPath.c_str(), F_OK) != 0) {
1708da853ecaSopenharmony_ci        return;
1709da853ecaSopenharmony_ci    }
1710da853ecaSopenharmony_ci    int tarckType = 0;
1711da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1712da853ecaSopenharmony_ci    bool videoIsEnd = false;
1713da853ecaSopenharmony_ci    int videoFrame = 0;
1714da853ecaSopenharmony_ci    int fd = open(g_mp4Vvc10bitPath.c_str(), O_RDONLY);
1715da853ecaSopenharmony_ci    int64_t size = GetFileSize(g_mp4Vvc10bitPath.c_str());
1716da853ecaSopenharmony_ci    cout << g_mp4Vvc10bitPath.c_str() << "---------" << fd << "----------" << size <<endl;
1717da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1718da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1719da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1720da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1721da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1722da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1723da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1724da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1725da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1726da853ecaSopenharmony_ci    }
1727da853ecaSopenharmony_ci    int vKeyCount = 0;
1728da853ecaSopenharmony_ci    int aKeyCount = 0;
1729da853ecaSopenharmony_ci    int audioFrame = 0;
1730da853ecaSopenharmony_ci    bool audioIsEnd = false;
1731da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1732da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1733da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1734da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1735da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1736da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1737da853ecaSopenharmony_ci            trackFormat = nullptr;
1738da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) {
1739da853ecaSopenharmony_ci                continue;
1740da853ecaSopenharmony_ci            }
1741da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1742da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
1743da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1744da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
1745da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
1746da853ecaSopenharmony_ci            }
1747da853ecaSopenharmony_ci        }
1748da853ecaSopenharmony_ci    }
1749da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 2812);
1750da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 2812);
1751da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 3000);
1752da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 63);
1753da853ecaSopenharmony_ci    close(fd);
1754da853ecaSopenharmony_ci}
1755da853ecaSopenharmony_ci
1756da853ecaSopenharmony_ci/**
1757da853ecaSopenharmony_ci * @tc.number    : VIDEO_DEMUXER_VVC_0300
1758da853ecaSopenharmony_ci * @tc.name      : demuxer 8bit H266 MP4 file, read+seek
1759da853ecaSopenharmony_ci * @tc.desc      : function test
1760da853ecaSopenharmony_ci */
1761da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, VIDEO_DEMUXER_VVC_0300, TestSize.Level0)
1762da853ecaSopenharmony_ci{
1763da853ecaSopenharmony_ci    if (access(g_mp4Vvc8bitPath.c_str(), F_OK) != 0) {
1764da853ecaSopenharmony_ci        return;
1765da853ecaSopenharmony_ci    }
1766da853ecaSopenharmony_ci    int64_t duration = 0;
1767da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1768da853ecaSopenharmony_ci    int fd = open(g_mp4Vvc8bitPath.c_str(), O_RDONLY);
1769da853ecaSopenharmony_ci    int64_t size = GetFileSize(g_mp4Vvc8bitPath.c_str());
1770da853ecaSopenharmony_ci    cout << g_mp4Vvc8bitPath.c_str() << "---------" << fd << "----------" << size <<endl;
1771da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1772da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1773da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1774da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1775da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1776da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1777da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
1778da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1779da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1780da853ecaSopenharmony_ci    }
1781da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(sourceFormat, OH_MD_KEY_DURATION, &duration));
1782da853ecaSopenharmony_ci    ASSERT_EQ(duration, 10000000);
1783da853ecaSopenharmony_ci    for (int index = 0; index < (duration / 1000); index++) {
1784da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
1785da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, index, SEEK_MODE_CLOSEST_SYNC));
1786da853ecaSopenharmony_ci    }
1787da853ecaSopenharmony_ci    close(fd);
1788da853ecaSopenharmony_ci}
1789da853ecaSopenharmony_ci
1790da853ecaSopenharmony_ci/**
1791da853ecaSopenharmony_ci * @tc.number    : VIDEO_DEMUXER_VVC_0400
1792da853ecaSopenharmony_ci * @tc.name      : demuxer 10bit H266 MP4 file, read+seek
1793da853ecaSopenharmony_ci * @tc.desc      : function test
1794da853ecaSopenharmony_ci */
1795da853ecaSopenharmony_ciHWTEST_F(DemuxerProcNdkTest, VIDEO_DEMUXER_VVC_0400, TestSize.Level0)
1796da853ecaSopenharmony_ci{
1797da853ecaSopenharmony_ci    if (access(g_mp4Vvc10bitPath.c_str(), F_OK) != 0) {
1798da853ecaSopenharmony_ci        return;
1799da853ecaSopenharmony_ci    }
1800da853ecaSopenharmony_ci    int64_t duration = 0;
1801da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1802da853ecaSopenharmony_ci    int fd = open(g_mp4Vvc10bitPath.c_str(), O_RDONLY);
1803da853ecaSopenharmony_ci    int64_t size = GetFileSize(g_mp4Vvc10bitPath.c_str());
1804da853ecaSopenharmony_ci    cout << g_mp4Vvc10bitPath.c_str() << "---------" << fd << "----------" << size <<endl;
1805da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1806da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1807da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1808da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1809da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1810da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1811da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1812da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1813da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1814da853ecaSopenharmony_ci    }
1815da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetLongValue(sourceFormat, OH_MD_KEY_DURATION, &duration));
1816da853ecaSopenharmony_ci    ASSERT_EQ(duration, 60000000);
1817da853ecaSopenharmony_ci    for (int num = 0; num < (duration / 1000); num++) {
1818da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1819da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1820da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, num, SEEK_MODE_CLOSEST_SYNC));
1821da853ecaSopenharmony_ci        }
1822da853ecaSopenharmony_ci    }
1823da853ecaSopenharmony_ci    close(fd);
1824da853ecaSopenharmony_ci}