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