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