1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License. 5da853ecaSopenharmony_ci * You may obtain a copy of the License at 6da853ecaSopenharmony_ci * 7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8da853ecaSopenharmony_ci * 9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and 13da853ecaSopenharmony_ci * limitations under the License. 14da853ecaSopenharmony_ci */ 15da853ecaSopenharmony_ci 16da853ecaSopenharmony_ci#include "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 23da853ecaSopenharmony_ci#include <iostream> 24da853ecaSopenharmony_ci#include <cstdio> 25da853ecaSopenharmony_ci#include <string> 26da853ecaSopenharmony_ci#include <fcntl.h> 27da853ecaSopenharmony_cinamespace OHOS { 28da853ecaSopenharmony_cinamespace Media { 29da853ecaSopenharmony_ciclass DemuxerPerfNdkTest : public testing::Test { 30da853ecaSopenharmony_cipublic: 31da853ecaSopenharmony_ci // SetUpTestCase: Called before all test cases 32da853ecaSopenharmony_ci static void SetUpTestCase(void); 33da853ecaSopenharmony_ci // TearDownTestCase: Called after all test case 34da853ecaSopenharmony_ci static void TearDownTestCase(void); 35da853ecaSopenharmony_ci // SetUp: Called before each test cases 36da853ecaSopenharmony_ci void SetUp(void); 37da853ecaSopenharmony_ci // TearDown: Called after each test cases 38da853ecaSopenharmony_ci void TearDown(void); 39da853ecaSopenharmony_ci}; 40da853ecaSopenharmony_ci 41da853ecaSopenharmony_cistatic OH_AVMemory *memory = nullptr; 42da853ecaSopenharmony_cistatic int32_t g_width = 3840; 43da853ecaSopenharmony_cistatic int32_t g_height = 2160; 44da853ecaSopenharmony_ci 45da853ecaSopenharmony_civoid DemuxerPerfNdkTest::SetUpTestCase() 46da853ecaSopenharmony_ci{ 47da853ecaSopenharmony_ci OH_AVMemory_Create(g_width * g_height); 48da853ecaSopenharmony_ci} 49da853ecaSopenharmony_civoid DemuxerPerfNdkTest::TearDownTestCase() 50da853ecaSopenharmony_ci{ 51da853ecaSopenharmony_ci if (memory != nullptr) { 52da853ecaSopenharmony_ci OH_AVMemory_Destroy(memory); 53da853ecaSopenharmony_ci } 54da853ecaSopenharmony_ci} 55da853ecaSopenharmony_civoid DemuxerPerfNdkTest::SetUp() {} 56da853ecaSopenharmony_civoid DemuxerPerfNdkTest::TearDown() {} 57da853ecaSopenharmony_ci} // namespace Media 58da853ecaSopenharmony_ci} // namespace OHOS 59da853ecaSopenharmony_ci 60da853ecaSopenharmony_ciusing namespace std; 61da853ecaSopenharmony_ciusing namespace OHOS; 62da853ecaSopenharmony_ciusing namespace OHOS::Media; 63da853ecaSopenharmony_ciusing namespace testing::ext; 64da853ecaSopenharmony_ci 65da853ecaSopenharmony_cinamespace { 66da853ecaSopenharmony_ci/** 67da853ecaSopenharmony_ci * @tc.number : DEMUXER_MEMORY_0100 68da853ecaSopenharmony_ci * @tc.name : demux memory 1280x720 30fps 10M 69da853ecaSopenharmony_ci * @tc.desc : performance test 70da853ecaSopenharmony_ci */ 71da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_MEMORY_0100, TestSize.Level3) 72da853ecaSopenharmony_ci{ 73da853ecaSopenharmony_ci const char *file = "/data/test/media/1280x720_30.mp4"; 74da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 75da853ecaSopenharmony_ci uint32_t trackIndex = 0; 76da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 77da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 78da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 79da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 80da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 81da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 82da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 83da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 84da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 85da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 86da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 87da853ecaSopenharmony_ci } 88da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 89da853ecaSopenharmony_ci close(fd); 90da853ecaSopenharmony_ci} 91da853ecaSopenharmony_ci 92da853ecaSopenharmony_ci/** 93da853ecaSopenharmony_ci * @tc.number : DEMUXER_MEMORY_0200 94da853ecaSopenharmony_ci * @tc.name : demux memory 1920x1080 30fps 20M 95da853ecaSopenharmony_ci * @tc.desc : performance test 96da853ecaSopenharmony_ci */ 97da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_MEMORY_0200, TestSize.Level3) 98da853ecaSopenharmony_ci{ 99da853ecaSopenharmony_ci const char *file = "/data/test/media/1920x1080_30.mp4"; 100da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 101da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 102da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 103da853ecaSopenharmony_ci uint32_t trackIndex = 0; 104da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 105da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 106da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 107da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 108da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 109da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 110da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 111da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 112da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 113da853ecaSopenharmony_ci } 114da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 115da853ecaSopenharmony_ci close(fd); 116da853ecaSopenharmony_ci} 117da853ecaSopenharmony_ci 118da853ecaSopenharmony_ci/** 119da853ecaSopenharmony_ci * @tc.number : DEMUXER_MEMORY_0300 120da853ecaSopenharmony_ci * @tc.name : demux memory 1280x720 30fps 50M 121da853ecaSopenharmony_ci * @tc.desc : performance test 122da853ecaSopenharmony_ci */ 123da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_MEMORY_0300, TestSize.Level3) 124da853ecaSopenharmony_ci{ 125da853ecaSopenharmony_ci const char *file = "/data/test/media/3840x2160_30.mp4"; 126da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 127da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 128da853ecaSopenharmony_ci uint32_t trackIndex = 0; 129da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 130da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 131da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 132da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 133da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 134da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 135da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 136da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 137da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 138da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 139da853ecaSopenharmony_ci } 140da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 141da853ecaSopenharmony_ci close(fd); 142da853ecaSopenharmony_ci} 143da853ecaSopenharmony_ci 144da853ecaSopenharmony_ci/** 145da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0100 146da853ecaSopenharmony_ci * @tc.name : demux memory 1280x720 30fps 10M 147da853ecaSopenharmony_ci * @tc.desc : performance test 148da853ecaSopenharmony_ci */ 149da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0100, TestSize.Level3) 150da853ecaSopenharmony_ci{ 151da853ecaSopenharmony_ci const char *file = "/data/test/media/1280x720_30.mp4"; 152da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 153da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 154da853ecaSopenharmony_ci uint32_t trackIndex = 0; 155da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 156da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 157da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 158da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 159da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 160da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 161da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 162da853ecaSopenharmony_ci srand(time(nullptr)); 163da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 164da853ecaSopenharmony_ci int pos_to = rand() % (30 * 3600); 165da853ecaSopenharmony_ci int64_t toMs = pos_to * 33333; 166da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 167da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 168da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 169da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 170da853ecaSopenharmony_ci } 171da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 172da853ecaSopenharmony_ci close(fd); 173da853ecaSopenharmony_ci} 174da853ecaSopenharmony_ci 175da853ecaSopenharmony_ci/** 176da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0200 177da853ecaSopenharmony_ci * @tc.name : demux memory 1280x720 60fps 10M 178da853ecaSopenharmony_ci * @tc.desc : performance test 179da853ecaSopenharmony_ci */ 180da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0200, TestSize.Level3) 181da853ecaSopenharmony_ci{ 182da853ecaSopenharmony_ci const char *file = "/data/test/media/1280x720_60.mp4"; 183da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 184da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 185da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 186da853ecaSopenharmony_ci uint32_t trackIndex = 0; 187da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 188da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 189da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 190da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 191da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 192da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 193da853ecaSopenharmony_ci srand(time(nullptr)); 194da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 195da853ecaSopenharmony_ci int pos_to = rand() % (60 * 3600); 196da853ecaSopenharmony_ci int64_t toMs = pos_to * 16666; 197da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 198da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 199da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 200da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 201da853ecaSopenharmony_ci } 202da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 203da853ecaSopenharmony_ci close(fd); 204da853ecaSopenharmony_ci} 205da853ecaSopenharmony_ci 206da853ecaSopenharmony_ci/** 207da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0300 208da853ecaSopenharmony_ci * @tc.name : demux memory 1920x1080 30fps 20M 209da853ecaSopenharmony_ci * @tc.desc : performance test 210da853ecaSopenharmony_ci */ 211da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0300, TestSize.Level3) 212da853ecaSopenharmony_ci{ 213da853ecaSopenharmony_ci const char *file = "/data/test/media/1920x1080_30.mp4"; 214da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 215da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 216da853ecaSopenharmony_ci uint32_t trackIndex = 0; 217da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 218da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 219da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 220da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 221da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 222da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 223da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 224da853ecaSopenharmony_ci srand(time(nullptr)); 225da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 226da853ecaSopenharmony_ci int pos_to = rand() % (30 * 3600); 227da853ecaSopenharmony_ci int64_t toMs = pos_to * 33333; 228da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 229da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 230da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 231da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 232da853ecaSopenharmony_ci } 233da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 234da853ecaSopenharmony_ci close(fd); 235da853ecaSopenharmony_ci} 236da853ecaSopenharmony_ci 237da853ecaSopenharmony_ci/** 238da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0400 239da853ecaSopenharmony_ci * @tc.name : demux memory 1920x1080 60fps 20M 240da853ecaSopenharmony_ci * @tc.desc : performance test 241da853ecaSopenharmony_ci */ 242da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0400, TestSize.Level3) 243da853ecaSopenharmony_ci{ 244da853ecaSopenharmony_ci const char *file = "/data/test/media/1920x1080_60.mp4"; 245da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 246da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 247da853ecaSopenharmony_ci uint32_t trackIndex = 0; 248da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 249da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 250da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 251da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 252da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 253da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 254da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 255da853ecaSopenharmony_ci srand(time(nullptr)); 256da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 257da853ecaSopenharmony_ci int pos_to = rand() % (60 * 3600); 258da853ecaSopenharmony_ci int64_t toMs = pos_to * 16666; 259da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 260da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 261da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 262da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 263da853ecaSopenharmony_ci } 264da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 265da853ecaSopenharmony_ci close(fd); 266da853ecaSopenharmony_ci} 267da853ecaSopenharmony_ci 268da853ecaSopenharmony_ci/** 269da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0500 270da853ecaSopenharmony_ci * @tc.name : demux memory 3840x2160 30fps 50M 271da853ecaSopenharmony_ci * @tc.desc : performance test 272da853ecaSopenharmony_ci */ 273da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0500, TestSize.Level3) 274da853ecaSopenharmony_ci{ 275da853ecaSopenharmony_ci const char *file = "/data/test/media/3840x2160_30.mp4"; 276da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 277da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 278da853ecaSopenharmony_ci uint32_t trackIndex = 0; 279da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 280da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 281da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 282da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 283da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 284da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 285da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 286da853ecaSopenharmony_ci srand(time(nullptr)); 287da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 288da853ecaSopenharmony_ci int pos_to = rand() % (30 * 3600); 289da853ecaSopenharmony_ci int64_t toMs = pos_to * 33333; 290da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 291da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 292da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 293da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 294da853ecaSopenharmony_ci } 295da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 296da853ecaSopenharmony_ci close(fd); 297da853ecaSopenharmony_ci} 298da853ecaSopenharmony_ci 299da853ecaSopenharmony_ci/** 300da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0600 301da853ecaSopenharmony_ci * @tc.name : demux memory 3840x2160 60fps 50M 302da853ecaSopenharmony_ci * @tc.desc : performance test 303da853ecaSopenharmony_ci */ 304da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0600, TestSize.Level3) 305da853ecaSopenharmony_ci{ 306da853ecaSopenharmony_ci const char *file = "/data/test/media/3840x2160_60.mp4"; 307da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 308da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 309da853ecaSopenharmony_ci uint32_t trackIndex = 0; 310da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 311da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 312da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 313da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 314da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 315da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 316da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 317da853ecaSopenharmony_ci srand(time(nullptr)); 318da853ecaSopenharmony_ci for (int i = 0; i < 20; i++) { 319da853ecaSopenharmony_ci int pos_to = rand() % (60 * 3600); 320da853ecaSopenharmony_ci int64_t toMs = pos_to * 16666; 321da853ecaSopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs, SEEK_NEXT_SYNC); 322da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 323da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 324da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 325da853ecaSopenharmony_ci } 326da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 327da853ecaSopenharmony_ci close(fd); 328da853ecaSopenharmony_ci} 329da853ecaSopenharmony_ci 330da853ecaSopenharmony_ci/** 331da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0700 332da853ecaSopenharmony_ci * @tc.name : test CopyNextSample time 1280x720 30fps 10M 333da853ecaSopenharmony_ci * @tc.desc : performance test 334da853ecaSopenharmony_ci */ 335da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0700, TestSize.Level3) 336da853ecaSopenharmony_ci{ 337da853ecaSopenharmony_ci const char *file = "/data/test/media/1280x720_30_10M.mp4"; 338da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 339da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 340da853ecaSopenharmony_ci uint32_t trackIndex = 0; 341da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 342da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 343da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 344da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 345da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 346da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 347da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 348da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 349da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 350da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 351da853ecaSopenharmony_ci } 352da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 353da853ecaSopenharmony_ci close(fd); 354da853ecaSopenharmony_ci} 355da853ecaSopenharmony_ci 356da853ecaSopenharmony_ci/** 357da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0800 358da853ecaSopenharmony_ci * @tc.name : test CopyNextSample time 1920x1080 30fps 20M 359da853ecaSopenharmony_ci * @tc.desc : performance test 360da853ecaSopenharmony_ci */ 361da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0800, TestSize.Level3) 362da853ecaSopenharmony_ci{ 363da853ecaSopenharmony_ci const char *file = "/data/test/media/1920x1080_30.mp4"; 364da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 365da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 366da853ecaSopenharmony_ci uint32_t trackIndex = 0; 367da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 368da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 369da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 370da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 371da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 372da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 373da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 374da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 375da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 376da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 377da853ecaSopenharmony_ci } 378da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 379da853ecaSopenharmony_ci close(fd); 380da853ecaSopenharmony_ci} 381da853ecaSopenharmony_ci 382da853ecaSopenharmony_ci/** 383da853ecaSopenharmony_ci * @tc.number : DEMUXER_PERFORMANCE_0900 384da853ecaSopenharmony_ci * @tc.name : test CopyNextSample time 3840x2160 30fps 50M 385da853ecaSopenharmony_ci * @tc.desc : performance test 386da853ecaSopenharmony_ci */ 387da853ecaSopenharmony_ciHWTEST_F(DemuxerPerfNdkTest, DEMUXER_PERFORMANCE_0900, TestSize.Level3) 388da853ecaSopenharmony_ci{ 389da853ecaSopenharmony_ci const char *file = "/data/test/media/3840x2160_30.mp4"; 390da853ecaSopenharmony_ci OH_AVErrCode ret = AV_ERR_OK; 391da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 392da853ecaSopenharmony_ci uint32_t trackIndex = 0; 393da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 394da853ecaSopenharmony_ci OH_AVSource *source = OH_AVSource_CreateWithFD(fd, 0, 0); 395da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 396da853ecaSopenharmony_ci OH_AVDemuxer *demuxer = OH_AVDemuxer_CreateWithSource(source); 397da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 398da853ecaSopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 399da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 400da853ecaSopenharmony_ci while ((attr.flags & AVCODEC_BUFFER_FLAGS_EOS) != 0) { 401da853ecaSopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 402da853ecaSopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 403da853ecaSopenharmony_ci } 404da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 405da853ecaSopenharmony_ci close(fd); 406da853ecaSopenharmony_ci} 407da853ecaSopenharmony_ci}