1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2024 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 "avdemuxer.h" 19da853ecaSopenharmony_ci#include "avsource.h" 20da853ecaSopenharmony_ci#include "meta/format.h" 21da853ecaSopenharmony_ci#include "avcodec_errors.h" 22da853ecaSopenharmony_ci#include "avcodec_common.h" 23da853ecaSopenharmony_ci#include "buffer/avsharedmemory.h" 24da853ecaSopenharmony_ci#include "buffer/avsharedmemorybase.h" 25da853ecaSopenharmony_ci#include "securec.h" 26da853ecaSopenharmony_ci#include "inner_demuxer_sample.h" 27da853ecaSopenharmony_ci 28da853ecaSopenharmony_ci#include <iostream> 29da853ecaSopenharmony_ci#include <cstdio> 30da853ecaSopenharmony_ci#include <string> 31da853ecaSopenharmony_ci#include <fcntl.h> 32da853ecaSopenharmony_ci 33da853ecaSopenharmony_ci#include "native_avcodec_base.h" 34da853ecaSopenharmony_ci#include "native_avdemuxer.h" 35da853ecaSopenharmony_ci#include "native_avformat.h" 36da853ecaSopenharmony_ci#include "native_avsource.h" 37da853ecaSopenharmony_ci#include <thread> 38da853ecaSopenharmony_ci#include "native_avmemory.h" 39da853ecaSopenharmony_ci 40da853ecaSopenharmony_ciusing namespace std; 41da853ecaSopenharmony_ciusing namespace OHOS; 42da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 43da853ecaSopenharmony_ciusing namespace OHOS::Media; 44da853ecaSopenharmony_ciusing namespace testing::ext; 45da853ecaSopenharmony_ci 46da853ecaSopenharmony_cinamespace { 47da853ecaSopenharmony_ciclass DemuxerNetNdkTest : public testing::Test { 48da853ecaSopenharmony_cipublic: 49da853ecaSopenharmony_ci // SetUpTestCase: Called before all test cases 50da853ecaSopenharmony_ci static void SetUpTestCase(void); 51da853ecaSopenharmony_ci // TearDownTestCase: Called after all test case 52da853ecaSopenharmony_ci static void TearDownTestCase(void); 53da853ecaSopenharmony_ci // SetUp: Called before each test cases 54da853ecaSopenharmony_ci void SetUp(void); 55da853ecaSopenharmony_ci // TearDown: Called after each test cases 56da853ecaSopenharmony_ci void TearDown(void); 57da853ecaSopenharmony_ci 58da853ecaSopenharmony_cipublic: 59da853ecaSopenharmony_ci int32_t fd_ = -1; 60da853ecaSopenharmony_ci int64_t size; 61da853ecaSopenharmony_ci}; 62da853ecaSopenharmony_cistatic OH_AVMemory *memory = nullptr; 63da853ecaSopenharmony_cistatic OH_AVFormat *sourceFormat = nullptr; 64da853ecaSopenharmony_cistatic OH_AVFormat *trackFormat = nullptr; 65da853ecaSopenharmony_cistatic OH_AVSource *source = nullptr; 66da853ecaSopenharmony_cistatic OH_AVDemuxer *demuxer = nullptr; 67da853ecaSopenharmony_cistatic int32_t g_trackCount = 0; 68da853ecaSopenharmony_cistatic OH_AVBuffer *avBuffer = nullptr; 69da853ecaSopenharmony_ci 70da853ecaSopenharmony_cistatic OH_AVSource *sourceV = nullptr; 71da853ecaSopenharmony_cistatic OH_AVDemuxer *demuxerV = nullptr; 72da853ecaSopenharmony_cistatic OH_AVFormat *sourceFormatV = nullptr; 73da853ecaSopenharmony_cistatic OH_AVFormat *trackFormatV = nullptr; 74da853ecaSopenharmony_cistatic OH_AVMemory *memoryV = nullptr; 75da853ecaSopenharmony_cistd::map<int64_t, int32_t> myMap; 76da853ecaSopenharmony_cistatic int32_t g_maxThread = 16; 77da853ecaSopenharmony_ciOH_AVSource *source_list[16] = {}; 78da853ecaSopenharmony_ciOH_AVMemory *memory_list[16] = {}; 79da853ecaSopenharmony_ciOH_AVDemuxer *demuxer_list[16] = {}; 80da853ecaSopenharmony_ciint g_fdList[16] = {}; 81da853ecaSopenharmony_ciOH_AVBuffer *avBuffer_list[16] = {}; 82da853ecaSopenharmony_cistatic int32_t g_width = 3840; 83da853ecaSopenharmony_cistatic int32_t g_height = 2160; 84da853ecaSopenharmony_ciconstexpr int32_t LAYOUTMONO = 4; 85da853ecaSopenharmony_ciconstexpr int32_t LAYOUTDUAL = 3; 86da853ecaSopenharmony_ciconstexpr int32_t SAMPLERATEMONO = 8000; 87da853ecaSopenharmony_ciconstexpr int32_t SAMPLERATEDUAL = 44100; 88da853ecaSopenharmony_ciconstexpr int32_t COUNTMONO = 1; 89da853ecaSopenharmony_ciconstexpr int32_t COUNTDUAL = 2; 90da853ecaSopenharmony_ciconstexpr int32_t BITRATEMONO = 64000; 91da853ecaSopenharmony_ciconstexpr int32_t BITRATEDUAL = 705600; 92da853ecaSopenharmony_ciconstexpr int32_t VTTSEEKFORWARD = 5100; 93da853ecaSopenharmony_ciconstexpr int32_t VTTSEEKBACK = 2100; 94da853ecaSopenharmony_ciconstexpr int64_t BITRATEDUALMP4 = 8594194000; 95da853ecaSopenharmony_ciconstexpr int32_t BITRATEMONOMP4 = 135105000; 96da853ecaSopenharmony_ciconstexpr int64_t BITRATEDUAL14 = 8222430000; 97da853ecaSopenharmony_ciconstexpr int32_t BITRATEMONO14 = 156150000; 98da853ecaSopenharmony_ciconstexpr int32_t ATTRPTS = 1000; 99da853ecaSopenharmony_civoid DemuxerNetNdkTest::SetUpTestCase() {} 100da853ecaSopenharmony_civoid DemuxerNetNdkTest::TearDownTestCase() {} 101da853ecaSopenharmony_civoid DemuxerNetNdkTest::SetUp() 102da853ecaSopenharmony_ci{ 103da853ecaSopenharmony_ci memory = OH_AVMemory_Create(g_width * g_height); 104da853ecaSopenharmony_ci memoryV = OH_AVMemory_Create(g_width * g_height); 105da853ecaSopenharmony_ci g_trackCount = 0; 106da853ecaSopenharmony_ci} 107da853ecaSopenharmony_civoid DemuxMoreTearDown() 108da853ecaSopenharmony_ci{ 109da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 110da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 111da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 112da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 113da853ecaSopenharmony_ci } 114da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 115da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 116da853ecaSopenharmony_ci source_list[i] = nullptr; 117da853ecaSopenharmony_ci } 118da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 119da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 120da853ecaSopenharmony_ci memory_list[i] = nullptr; 121da853ecaSopenharmony_ci } 122da853ecaSopenharmony_ci if (avBuffer_list[i] != nullptr) { 123da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_Destroy(avBuffer_list[i])); 124da853ecaSopenharmony_ci avBuffer_list[i] = nullptr; 125da853ecaSopenharmony_ci } 126da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 127da853ecaSopenharmony_ci close(g_fdList[i]); 128da853ecaSopenharmony_ci } 129da853ecaSopenharmony_ci if (trackFormatV != nullptr) { 130da853ecaSopenharmony_ci OH_AVFormat_Destroy(trackFormatV); 131da853ecaSopenharmony_ci trackFormatV = nullptr; 132da853ecaSopenharmony_ci } 133da853ecaSopenharmony_ci if (sourceFormatV != nullptr) { 134da853ecaSopenharmony_ci OH_AVFormat_Destroy(sourceFormatV); 135da853ecaSopenharmony_ci sourceFormatV = nullptr; 136da853ecaSopenharmony_ci } 137da853ecaSopenharmony_ci if (memoryV != nullptr) { 138da853ecaSopenharmony_ci OH_AVMemory_Destroy(memoryV); 139da853ecaSopenharmony_ci memoryV = nullptr; 140da853ecaSopenharmony_ci } 141da853ecaSopenharmony_ci if (sourceV != nullptr) { 142da853ecaSopenharmony_ci OH_AVSource_Destroy(sourceV); 143da853ecaSopenharmony_ci sourceV = nullptr; 144da853ecaSopenharmony_ci } 145da853ecaSopenharmony_ci if (demuxerV != nullptr) { 146da853ecaSopenharmony_ci OH_AVDemuxer_Destroy(demuxerV); 147da853ecaSopenharmony_ci demuxerV = nullptr; 148da853ecaSopenharmony_ci } 149da853ecaSopenharmony_ci if (!myMap.empty()) { 150da853ecaSopenharmony_ci myMap.clear(); 151da853ecaSopenharmony_ci } 152da853ecaSopenharmony_ci} 153da853ecaSopenharmony_civoid DemuxerNetNdkTest::TearDown() 154da853ecaSopenharmony_ci{ 155da853ecaSopenharmony_ci if (fd_ > 0) { 156da853ecaSopenharmony_ci close(fd_); 157da853ecaSopenharmony_ci fd_ = -1; 158da853ecaSopenharmony_ci } 159da853ecaSopenharmony_ci if (demuxer != nullptr) { 160da853ecaSopenharmony_ci OH_AVDemuxer_Destroy(demuxer); 161da853ecaSopenharmony_ci demuxer = nullptr; 162da853ecaSopenharmony_ci } 163da853ecaSopenharmony_ci if (memory != nullptr) { 164da853ecaSopenharmony_ci OH_AVMemory_Destroy(memory); 165da853ecaSopenharmony_ci memory = nullptr; 166da853ecaSopenharmony_ci } 167da853ecaSopenharmony_ci if (source != nullptr) { 168da853ecaSopenharmony_ci OH_AVSource_Destroy(source); 169da853ecaSopenharmony_ci source = nullptr; 170da853ecaSopenharmony_ci } 171da853ecaSopenharmony_ci if (avBuffer != nullptr) { 172da853ecaSopenharmony_ci OH_AVBuffer_Destroy(avBuffer); 173da853ecaSopenharmony_ci avBuffer = nullptr; 174da853ecaSopenharmony_ci } 175da853ecaSopenharmony_ci if (trackFormat != nullptr) { 176da853ecaSopenharmony_ci OH_AVFormat_Destroy(trackFormat); 177da853ecaSopenharmony_ci trackFormat = nullptr; 178da853ecaSopenharmony_ci } 179da853ecaSopenharmony_ci if (sourceFormat != nullptr) { 180da853ecaSopenharmony_ci OH_AVFormat_Destroy(sourceFormat); 181da853ecaSopenharmony_ci sourceFormat = nullptr; 182da853ecaSopenharmony_ci } 183da853ecaSopenharmony_ci DemuxMoreTearDown(); 184da853ecaSopenharmony_ci} 185da853ecaSopenharmony_ci} // namespace 186da853ecaSopenharmony_ci 187da853ecaSopenharmony_cinamespace { 188da853ecaSopenharmony_ci static int64_t GetFileSize(const char *fileName) 189da853ecaSopenharmony_ci { 190da853ecaSopenharmony_ci int64_t fileSize = 0; 191da853ecaSopenharmony_ci if (fileName != nullptr) { 192da853ecaSopenharmony_ci struct stat fileStatus {}; 193da853ecaSopenharmony_ci if (stat(fileName, &fileStatus) == 0) { 194da853ecaSopenharmony_ci fileSize = static_cast<int64_t>(fileStatus.st_size); 195da853ecaSopenharmony_ci } 196da853ecaSopenharmony_ci } 197da853ecaSopenharmony_ci return fileSize; 198da853ecaSopenharmony_ci } 199da853ecaSopenharmony_ci void DemuxFuncWav(int i, int loop) 200da853ecaSopenharmony_ci { 201da853ecaSopenharmony_ci bool audioIsEnd = false; 202da853ecaSopenharmony_ci OH_AVCodecBufferAttr bufferAttr; 203da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer_list[i], 0)); 204da853ecaSopenharmony_ci int index = 0; 205da853ecaSopenharmony_ci while (!audioIsEnd) { 206da853ecaSopenharmony_ci if (audioIsEnd && (index == OH_MediaType::MEDIA_TYPE_AUD)) { 207da853ecaSopenharmony_ci continue; 208da853ecaSopenharmony_ci } 209da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer_list[i], index, avBuffer_list[i])); 210da853ecaSopenharmony_ci ASSERT_NE(avBuffer_list[i], nullptr); 211da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_GetBufferAttr(avBuffer_list[i], &bufferAttr)); 212da853ecaSopenharmony_ci if ((index == OH_MediaType::MEDIA_TYPE_AUD) && 213da853ecaSopenharmony_ci (bufferAttr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { 214da853ecaSopenharmony_ci audioIsEnd = true; 215da853ecaSopenharmony_ci } 216da853ecaSopenharmony_ci } 217da853ecaSopenharmony_ci } 218da853ecaSopenharmony_ci void DemuxFuncVtt(int i, int loop) 219da853ecaSopenharmony_ci { 220da853ecaSopenharmony_ci bool audioIsEnd = false; 221da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 222da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer_list[i], 0)); 223da853ecaSopenharmony_ci int index = 2; 224da853ecaSopenharmony_ci while (!audioIsEnd) { 225da853ecaSopenharmony_ci if (audioIsEnd && (index == OH_MediaType::MEDIA_TYPE_SUBTITLE)) { 226da853ecaSopenharmony_ci continue; 227da853ecaSopenharmony_ci } 228da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 229da853ecaSopenharmony_ci ASSERT_NE(memory_list[i], nullptr); 230da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer_list[i], 0, memory_list[i], &attr)); 231da853ecaSopenharmony_ci ASSERT_NE(memory_list[i], nullptr); 232da853ecaSopenharmony_ci if ((index == OH_MediaType::MEDIA_TYPE_SUBTITLE) && 233da853ecaSopenharmony_ci (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { 234da853ecaSopenharmony_ci audioIsEnd = true; 235da853ecaSopenharmony_ci } 236da853ecaSopenharmony_ci } 237da853ecaSopenharmony_ci } 238da853ecaSopenharmony_ci static void CheckAudioParam(OH_AVSource *audioSource, int &audioFrameAll) 239da853ecaSopenharmony_ci { 240da853ecaSopenharmony_ci int akeyCount = 0; 241da853ecaSopenharmony_ci int tarckType = 0; 242da853ecaSopenharmony_ci OH_AVCodecBufferAttr bufferAttr; 243da853ecaSopenharmony_ci bool audioIsEnd = false; 244da853ecaSopenharmony_ci int32_t count = 0; 245da853ecaSopenharmony_ci int32_t rate = 0; 246da853ecaSopenharmony_ci int64_t bitrate = 0; 247da853ecaSopenharmony_ci int64_t layout = 0; 248da853ecaSopenharmony_ci int32_t index = 0; 249da853ecaSopenharmony_ci const char* mimeType = nullptr; 250da853ecaSopenharmony_ci while (!audioIsEnd) { 251da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(audioSource, index); 252da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 253da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 254da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSampleBuffer(demuxer, index, avBuffer)); 255da853ecaSopenharmony_ci ASSERT_NE(avBuffer, nullptr); 256da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_GetBufferAttr(avBuffer, &bufferAttr)); 257da853ecaSopenharmony_ci if (tarckType == OH_MediaType::MEDIA_TYPE_AUD) { 258da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 259da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_SAMPLE_RATE, &rate)); 260da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, &count)); 261da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_CHANNEL_LAYOUT, &layout)); 262da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_BITRATE, &bitrate)); 263da853ecaSopenharmony_ci if (bufferAttr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 264da853ecaSopenharmony_ci audioIsEnd = true; 265da853ecaSopenharmony_ci cout << audioFrameAll << " audio is end !!!!!!!!!!!!!!!" << endl; 266da853ecaSopenharmony_ci continue; 267da853ecaSopenharmony_ci } 268da853ecaSopenharmony_ci audioFrameAll++; 269da853ecaSopenharmony_ci if (bufferAttr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 270da853ecaSopenharmony_ci akeyCount++; 271da853ecaSopenharmony_ci } 272da853ecaSopenharmony_ci } 273da853ecaSopenharmony_ci } 274da853ecaSopenharmony_ci if (count == 1) { 275da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_AUDIO_G711MU)); 276da853ecaSopenharmony_ci ASSERT_EQ(layout, LAYOUTMONO); 277da853ecaSopenharmony_ci ASSERT_EQ(rate, SAMPLERATEMONO); 278da853ecaSopenharmony_ci ASSERT_EQ(count, COUNTMONO); 279da853ecaSopenharmony_ci ASSERT_EQ(bitrate, BITRATEMONO); 280da853ecaSopenharmony_ci } else { 281da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_AUDIO_G711MU)); 282da853ecaSopenharmony_ci ASSERT_EQ(layout, LAYOUTDUAL); 283da853ecaSopenharmony_ci ASSERT_EQ(rate, SAMPLERATEDUAL); 284da853ecaSopenharmony_ci ASSERT_EQ(count, COUNTDUAL); 285da853ecaSopenharmony_ci ASSERT_EQ(bitrate, BITRATEDUAL); 286da853ecaSopenharmony_ci } 287da853ecaSopenharmony_ci cout << akeyCount << "---akeyCount---" << endl; 288da853ecaSopenharmony_ci } 289da853ecaSopenharmony_ci 290da853ecaSopenharmony_ci static void MyMapVtt(const int64_t attrPts, const char *fileV) 291da853ecaSopenharmony_ci { 292da853ecaSopenharmony_ci OH_AVCodecBufferAttr attrV; 293da853ecaSopenharmony_ci sourceV = OH_AVSource_CreateWithURI(const_cast<char *>(fileV)); 294da853ecaSopenharmony_ci ASSERT_NE(sourceV, nullptr); 295da853ecaSopenharmony_ci demuxerV = OH_AVDemuxer_CreateWithSource(sourceV); 296da853ecaSopenharmony_ci ASSERT_NE(demuxerV, nullptr); 297da853ecaSopenharmony_ci const char* mimeTypeV = nullptr; 298da853ecaSopenharmony_ci sourceFormatV = OH_AVSource_GetSourceFormat(sourceV); 299da853ecaSopenharmony_ci trackFormatV = OH_AVSource_GetTrackFormat(sourceV, 0); 300da853ecaSopenharmony_ci ASSERT_NE(trackFormatV, nullptr); 301da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormatV, OH_MD_KEY_CODEC_MIME, &mimeTypeV)); 302da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeTypeV, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 303da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormatV, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 304da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 305da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxerV, 0)); 306da853ecaSopenharmony_ci int tarckTypeV = 0; 307da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormatV, OH_MD_KEY_TRACK_TYPE, &tarckTypeV)); 308da853ecaSopenharmony_ci ASSERT_EQ(tarckTypeV, OH_MediaType::MEDIA_TYPE_SUBTITLE); 309da853ecaSopenharmony_ci if (attrPts > 0) { 310da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxerV, attrPts / ATTRPTS, 311da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 312da853ecaSopenharmony_ci } 313da853ecaSopenharmony_ci bool islast = true; 314da853ecaSopenharmony_ci while (islast) { 315da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxerV, 0, memoryV, &attrV)); 316da853ecaSopenharmony_ci if (attrV.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 317da853ecaSopenharmony_ci islast = false; 318da853ecaSopenharmony_ci } 319da853ecaSopenharmony_ci myMap.insert(pair<int64_t, int32_t>(attrV.pts, attrV.size)); 320da853ecaSopenharmony_ci } 321da853ecaSopenharmony_ci } 322da853ecaSopenharmony_ci /** 323da853ecaSopenharmony_ci * @tc.number : DEMUXER_TIMED_META_INNER_FUNC_0110 324da853ecaSopenharmony_ci * @tc.name : demuxer timed metadata with 1 meta track and video track uri-meta track at 0 325da853ecaSopenharmony_ci * @tc.desc : func test 326da853ecaSopenharmony_ci */ 327da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_TIMED_META_INNER_FUNC_0110, TestSize.Level1) 328da853ecaSopenharmony_ci { 329da853ecaSopenharmony_ci auto demuxerSample = make_unique<InnerDemuxerSample>(); 330da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/Timedmetadata1Track0.mp4"; 331da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->InitWithFile(uri, false), AVCS_ERR_OK); 332da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckHasTimedMeta(), 1); 333da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMetaFormat(0, 1), 0); 334da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMeta(0), 0); 335da853ecaSopenharmony_ci } 336da853ecaSopenharmony_ci 337da853ecaSopenharmony_ci /** 338da853ecaSopenharmony_ci * @tc.number : DEMUXER_TIMED_META_INNER_FUNC_0120 339da853ecaSopenharmony_ci * @tc.name : demuxer timed metadata with 1 meta track and video track uri-meta track at 1 340da853ecaSopenharmony_ci * @tc.desc : func test 341da853ecaSopenharmony_ci */ 342da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_TIMED_META_INNER_FUNC_0120, TestSize.Level1) 343da853ecaSopenharmony_ci { 344da853ecaSopenharmony_ci auto demuxerSample = make_unique<InnerDemuxerSample>(); 345da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/Timedmetadata1Track1.mp4"; 346da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->InitWithFile(uri, false), AVCS_ERR_OK); 347da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckHasTimedMeta(), 1); 348da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMetaFormat(1, 0), 0); 349da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMeta(1), 0); 350da853ecaSopenharmony_ci } 351da853ecaSopenharmony_ci 352da853ecaSopenharmony_ci /** 353da853ecaSopenharmony_ci * @tc.number : DEMUXER_TIMED_META_INNER_FUNC_0130 354da853ecaSopenharmony_ci * @tc.name : demuxer timed metadata with 1 meta track and video track uri-meta track at 2 355da853ecaSopenharmony_ci * @tc.desc : func test 356da853ecaSopenharmony_ci */ 357da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_TIMED_META_INNER_FUNC_0130, TestSize.Level1) 358da853ecaSopenharmony_ci { 359da853ecaSopenharmony_ci auto demuxerSample = make_unique<InnerDemuxerSample>(); 360da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/Timedmetadata1Track2.mp4"; 361da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->InitWithFile(uri, false), AVCS_ERR_OK); 362da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckHasTimedMeta(), 1); 363da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMetaFormat(2, 0), 0); 364da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMeta(2), 0); 365da853ecaSopenharmony_ci } 366da853ecaSopenharmony_ci 367da853ecaSopenharmony_ci /** 368da853ecaSopenharmony_ci * @tc.number : DEMUXER_TIMED_META_INNER_FUNC_0140 369da853ecaSopenharmony_ci * @tc.name : demuxer timed metadata with 2 meta track and video track uri 370da853ecaSopenharmony_ci * @tc.desc : func test 371da853ecaSopenharmony_ci */ 372da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_TIMED_META_INNER_FUNC_0140, TestSize.Level1) 373da853ecaSopenharmony_ci { 374da853ecaSopenharmony_ci auto demuxerSample = make_unique<InnerDemuxerSample>(); 375da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/Timedmetadata2Track2.mp4"; 376da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->InitWithFile(uri, false), AVCS_ERR_OK); 377da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckHasTimedMeta(), 1); 378da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMetaFormat(2, 0), 0); 379da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMetaFormat(3, 0), 0); 380da853ecaSopenharmony_ci ASSERT_EQ(demuxerSample->CheckTimedMeta(3), 0); 381da853ecaSopenharmony_ci } 382da853ecaSopenharmony_ci /** 383da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_NET_001 384da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with wav file 385da853ecaSopenharmony_ci * @tc.desc : function test 386da853ecaSopenharmony_ci */ 387da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_NET_001, TestSize.Level2) 388da853ecaSopenharmony_ci { 389da853ecaSopenharmony_ci int num = 0; 390da853ecaSopenharmony_ci int len = 256; 391da853ecaSopenharmony_ci while (num < 10) { 392da853ecaSopenharmony_ci num++; 393da853ecaSopenharmony_ci vector<std::thread> vecThread; 394da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 395da853ecaSopenharmony_ci char file[256] = {}; 396da853ecaSopenharmony_ci sprintf_s(file, len, "/data/test/media/16/%d_wav_audio_test_202406290859.wav", i); 397da853ecaSopenharmony_ci g_fdList[i] = open(file, O_RDONLY); 398da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 399da853ecaSopenharmony_ci cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl; 400da853ecaSopenharmony_ci avBuffer_list[i] = OH_AVBuffer_Create(size); 401da853ecaSopenharmony_ci ASSERT_NE(avBuffer_list[i], nullptr); 402da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size); 403da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 404da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 405da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 406da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncWav, i, num); 407da853ecaSopenharmony_ci } 408da853ecaSopenharmony_ci for (auto &val : vecThread) { 409da853ecaSopenharmony_ci val.join(); 410da853ecaSopenharmony_ci } 411da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 412da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 413da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 414da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 415da853ecaSopenharmony_ci } 416da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 417da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 418da853ecaSopenharmony_ci source_list[i] = nullptr; 419da853ecaSopenharmony_ci } 420da853ecaSopenharmony_ci if (avBuffer_list[i] != nullptr) { 421da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_Destroy(avBuffer_list[i])); 422da853ecaSopenharmony_ci avBuffer_list[i] = nullptr; 423da853ecaSopenharmony_ci } 424da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 425da853ecaSopenharmony_ci close(g_fdList[i]); 426da853ecaSopenharmony_ci } 427da853ecaSopenharmony_ci cout << "num: " << num << endl; 428da853ecaSopenharmony_ci } 429da853ecaSopenharmony_ci } 430da853ecaSopenharmony_ci 431da853ecaSopenharmony_ci /** 432da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_NET_002 433da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with wav network file 434da853ecaSopenharmony_ci * @tc.desc : function test 435da853ecaSopenharmony_ci */ 436da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_NET_002, TestSize.Level3) 437da853ecaSopenharmony_ci { 438da853ecaSopenharmony_ci int num = 0; 439da853ecaSopenharmony_ci int sizeinfo = 421888; 440da853ecaSopenharmony_ci while (num < 10) { 441da853ecaSopenharmony_ci num++; 442da853ecaSopenharmony_ci vector<std::thread> vecThread; 443da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/audio/wav_audio_test_202406290859.wav"; 444da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 445da853ecaSopenharmony_ci avBuffer_list[i] = OH_AVBuffer_Create(sizeinfo); 446da853ecaSopenharmony_ci ASSERT_NE(avBuffer_list[i], nullptr); 447da853ecaSopenharmony_ci cout << i << " uri: " << uri << endl; 448da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 449da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 450da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 451da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 452da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncWav, i, num); 453da853ecaSopenharmony_ci } 454da853ecaSopenharmony_ci for (auto &val : vecThread) { 455da853ecaSopenharmony_ci val.join(); 456da853ecaSopenharmony_ci } 457da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 458da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 459da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 460da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 461da853ecaSopenharmony_ci } 462da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 463da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 464da853ecaSopenharmony_ci source_list[i] = nullptr; 465da853ecaSopenharmony_ci } 466da853ecaSopenharmony_ci if (avBuffer_list[i] != nullptr) { 467da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVBuffer_Destroy(avBuffer_list[i])); 468da853ecaSopenharmony_ci avBuffer_list[i] = nullptr; 469da853ecaSopenharmony_ci } 470da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 471da853ecaSopenharmony_ci } 472da853ecaSopenharmony_ci cout << "num: " << num << endl; 473da853ecaSopenharmony_ci } 474da853ecaSopenharmony_ci } 475da853ecaSopenharmony_ci /** 476da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_NET_003 477da853ecaSopenharmony_ci * @tc.name : create pcm-mulaw wav demuxer with network file 478da853ecaSopenharmony_ci * @tc.desc : function test 479da853ecaSopenharmony_ci */ 480da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_NET_003, TestSize.Level2) 481da853ecaSopenharmony_ci { 482da853ecaSopenharmony_ci int audioFrame = 0; 483da853ecaSopenharmony_ci int sizeinfo = 421888; 484da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/audio/wav_audio_test_202406290859.wav"; 485da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 486da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 487da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 488da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 489da853ecaSopenharmony_ci avBuffer = OH_AVBuffer_Create(sizeinfo); 490da853ecaSopenharmony_ci ASSERT_NE(avBuffer, nullptr); 491da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 492da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 493da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 494da853ecaSopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 495da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 496da853ecaSopenharmony_ci } 497da853ecaSopenharmony_ci CheckAudioParam(source, audioFrame); 498da853ecaSopenharmony_ci ASSERT_EQ(103, audioFrame); 499da853ecaSopenharmony_ci } 500da853ecaSopenharmony_ci /** 501da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_NET_004 502da853ecaSopenharmony_ci * @tc.name : create pcm-mulaw wav demuxer with Mono channel uri file 503da853ecaSopenharmony_ci * @tc.desc : function test 504da853ecaSopenharmony_ci */ 505da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_NET_004, TestSize.Level2) 506da853ecaSopenharmony_ci { 507da853ecaSopenharmony_ci int sizeinfo = 28672; 508da853ecaSopenharmony_ci int audioFrame = 0; 509da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/audio/7FBD5E21-503C-41A8-83B4-34548FC01562.wav"; 510da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 511da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 512da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 513da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 514da853ecaSopenharmony_ci avBuffer = OH_AVBuffer_Create(sizeinfo); 515da853ecaSopenharmony_ci ASSERT_NE(avBuffer, nullptr); 516da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 517da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 518da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 519da853ecaSopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 520da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 521da853ecaSopenharmony_ci } 522da853ecaSopenharmony_ci CheckAudioParam(source, audioFrame); 523da853ecaSopenharmony_ci ASSERT_EQ(7, audioFrame); 524da853ecaSopenharmony_ci } 525da853ecaSopenharmony_ci /** 526da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_001 527da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt file 528da853ecaSopenharmony_ci * @tc.desc : function test 529da853ecaSopenharmony_ci */ 530da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_001, TestSize.Level3) 531da853ecaSopenharmony_ci { 532da853ecaSopenharmony_ci int num = 0; 533da853ecaSopenharmony_ci int len = 256; 534da853ecaSopenharmony_ci while (num < 10) { 535da853ecaSopenharmony_ci num++; 536da853ecaSopenharmony_ci vector<std::thread> vecThread; 537da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 538da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 539da853ecaSopenharmony_ci char file[256] = {}; 540da853ecaSopenharmony_ci sprintf_s(file, len, "/data/test/media/16/%d_webvtt_test.vtt", i); 541da853ecaSopenharmony_ci g_fdList[i] = open(file, O_RDONLY); 542da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 543da853ecaSopenharmony_ci cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl; 544da853ecaSopenharmony_ci 545da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size); 546da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 547da853ecaSopenharmony_ci 548da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 549da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 550da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 551da853ecaSopenharmony_ci } 552da853ecaSopenharmony_ci for (auto &val : vecThread) { 553da853ecaSopenharmony_ci val.join(); 554da853ecaSopenharmony_ci } 555da853ecaSopenharmony_ci 556da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 557da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 558da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 559da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 560da853ecaSopenharmony_ci } 561da853ecaSopenharmony_ci 562da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 563da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 564da853ecaSopenharmony_ci source_list[i] = nullptr; 565da853ecaSopenharmony_ci } 566da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 567da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 568da853ecaSopenharmony_ci memory_list[i] = nullptr; 569da853ecaSopenharmony_ci } 570da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 571da853ecaSopenharmony_ci 572da853ecaSopenharmony_ci close(g_fdList[i]); 573da853ecaSopenharmony_ci } 574da853ecaSopenharmony_ci cout << "num: " << num << endl; 575da853ecaSopenharmony_ci } 576da853ecaSopenharmony_ci } 577da853ecaSopenharmony_ci 578da853ecaSopenharmony_ci /** 579da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_002 580da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt uri 581da853ecaSopenharmony_ci * @tc.desc : function test 582da853ecaSopenharmony_ci */ 583da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_002, TestSize.Level3) 584da853ecaSopenharmony_ci { 585da853ecaSopenharmony_ci int num = 0; 586da853ecaSopenharmony_ci while (num < 10) { 587da853ecaSopenharmony_ci num++; 588da853ecaSopenharmony_ci vector<std::thread> vecThread; 589da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/webvtt_test.vtt"; 590da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 591da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 592da853ecaSopenharmony_ci cout << i << " uri: " << uri << endl; 593da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 594da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 595da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 596da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 597da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 598da853ecaSopenharmony_ci } 599da853ecaSopenharmony_ci for (auto &val : vecThread) { 600da853ecaSopenharmony_ci val.join(); 601da853ecaSopenharmony_ci } 602da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 603da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 604da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 605da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 606da853ecaSopenharmony_ci } 607da853ecaSopenharmony_ci 608da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 609da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 610da853ecaSopenharmony_ci source_list[i] = nullptr; 611da853ecaSopenharmony_ci } 612da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 613da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 614da853ecaSopenharmony_ci memory_list[i] = nullptr; 615da853ecaSopenharmony_ci } 616da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 617da853ecaSopenharmony_ci } 618da853ecaSopenharmony_ci cout << "num: " << num << endl; 619da853ecaSopenharmony_ci } 620da853ecaSopenharmony_ci } 621da853ecaSopenharmony_ci /** 622da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_003 623da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt MP4 file 624da853ecaSopenharmony_ci * @tc.desc : function test 625da853ecaSopenharmony_ci */ 626da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_003, TestSize.Level3) 627da853ecaSopenharmony_ci { 628da853ecaSopenharmony_ci int num = 0; 629da853ecaSopenharmony_ci int len = 256; 630da853ecaSopenharmony_ci while (num < 10) { 631da853ecaSopenharmony_ci num++; 632da853ecaSopenharmony_ci vector<std::thread> vecThread; 633da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 634da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 635da853ecaSopenharmony_ci char file[256] = {}; 636da853ecaSopenharmony_ci sprintf_s(file, len, "/data/test/media/16/%d_subtitle_webvtt_en_GB_15.mp4", i); 637da853ecaSopenharmony_ci g_fdList[i] = open(file, O_RDONLY); 638da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 639da853ecaSopenharmony_ci cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl; 640da853ecaSopenharmony_ci 641da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size); 642da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 643da853ecaSopenharmony_ci 644da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 645da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 646da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 647da853ecaSopenharmony_ci } 648da853ecaSopenharmony_ci for (auto &val : vecThread) { 649da853ecaSopenharmony_ci val.join(); 650da853ecaSopenharmony_ci } 651da853ecaSopenharmony_ci 652da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 653da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 654da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 655da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 656da853ecaSopenharmony_ci } 657da853ecaSopenharmony_ci 658da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 659da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 660da853ecaSopenharmony_ci source_list[i] = nullptr; 661da853ecaSopenharmony_ci } 662da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 663da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 664da853ecaSopenharmony_ci memory_list[i] = nullptr; 665da853ecaSopenharmony_ci } 666da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 667da853ecaSopenharmony_ci 668da853ecaSopenharmony_ci close(g_fdList[i]); 669da853ecaSopenharmony_ci } 670da853ecaSopenharmony_ci cout << "num: " << num << endl; 671da853ecaSopenharmony_ci } 672da853ecaSopenharmony_ci } 673da853ecaSopenharmony_ci 674da853ecaSopenharmony_ci /** 675da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_004 676da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt MP4 uri 677da853ecaSopenharmony_ci * @tc.desc : function test 678da853ecaSopenharmony_ci */ 679da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_004, TestSize.Level3) 680da853ecaSopenharmony_ci { 681da853ecaSopenharmony_ci int num = 0; 682da853ecaSopenharmony_ci while (num < 10) { 683da853ecaSopenharmony_ci num++; 684da853ecaSopenharmony_ci vector<std::thread> vecThread; 685da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_en_GB_15.mp4"; 686da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 687da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 688da853ecaSopenharmony_ci cout << i << " uri: " << uri << endl; 689da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 690da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 691da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 692da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 693da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 694da853ecaSopenharmony_ci } 695da853ecaSopenharmony_ci for (auto &val : vecThread) { 696da853ecaSopenharmony_ci val.join(); 697da853ecaSopenharmony_ci } 698da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 699da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 700da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 701da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 702da853ecaSopenharmony_ci } 703da853ecaSopenharmony_ci 704da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 705da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 706da853ecaSopenharmony_ci source_list[i] = nullptr; 707da853ecaSopenharmony_ci } 708da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 709da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 710da853ecaSopenharmony_ci memory_list[i] = nullptr; 711da853ecaSopenharmony_ci } 712da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 713da853ecaSopenharmony_ci } 714da853ecaSopenharmony_ci cout << "num: " << num << endl; 715da853ecaSopenharmony_ci } 716da853ecaSopenharmony_ci } 717da853ecaSopenharmony_ci /** 718da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_005 719da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with uri file and read 720da853ecaSopenharmony_ci * @tc.desc : function test 721da853ecaSopenharmony_ci */ 722da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_005, TestSize.Level0) 723da853ecaSopenharmony_ci { 724da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 725da853ecaSopenharmony_ci const char* mimeType = nullptr; 726da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_en_GB_15.mp4"; 727da853ecaSopenharmony_ci const char *fileV = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_en_GB_15.vtt"; 728da853ecaSopenharmony_ci cout << uri << "------" << endl; 729da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 730da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 731da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 732da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 733da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 734da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 735da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 736da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 737da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 738da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 739da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 740da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 741da853ecaSopenharmony_ci int tarckType = 0; 742da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 743da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 744da853ecaSopenharmony_ci MyMapVtt(0, fileV); 745da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 746da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 747da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 748da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 749da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 750da853ecaSopenharmony_ci ASSERT_NE(memory, nullptr); 751da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 752da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 753da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 754da853ecaSopenharmony_ci break; 755da853ecaSopenharmony_ci } 756da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 757da853ecaSopenharmony_ci } 758da853ecaSopenharmony_ci } 759da853ecaSopenharmony_ci /** 760da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_006 761da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with uri file and forward back seek+read 762da853ecaSopenharmony_ci * @tc.desc : function test 763da853ecaSopenharmony_ci */ 764da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_006, TestSize.Level0) 765da853ecaSopenharmony_ci { 766da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 767da853ecaSopenharmony_ci const char* mimeType = nullptr; 768da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_en_GB_15.mp4"; 769da853ecaSopenharmony_ci const char *fileV = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_en_GB_15.vtt"; 770da853ecaSopenharmony_ci cout << uri << "------" << endl; 771da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 772da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 773da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 774da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 775da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 776da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 777da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 778da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 779da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 780da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 781da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 782da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 783da853ecaSopenharmony_ci int tarckType = 0; 784da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 785da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 786da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 787da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 788da853ecaSopenharmony_ci } 789da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONOMP4 / ATTRPTS, 790da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 791da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 792da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUALMP4 / ATTRPTS, 793da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 794da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 795da853ecaSopenharmony_ci MyMapVtt(BITRATEDUALMP4, fileV); 796da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 797da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 798da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 799da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 800da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 801da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 802da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 803da853ecaSopenharmony_ci break; 804da853ecaSopenharmony_ci } 805da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 806da853ecaSopenharmony_ci } 807da853ecaSopenharmony_ci } 808da853ecaSopenharmony_ci 809da853ecaSopenharmony_ci /** 810da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_007 811da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt MP4 file 812da853ecaSopenharmony_ci * @tc.desc : function test 813da853ecaSopenharmony_ci */ 814da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_007, TestSize.Level3) 815da853ecaSopenharmony_ci { 816da853ecaSopenharmony_ci int num = 0; 817da853ecaSopenharmony_ci int len = 256; 818da853ecaSopenharmony_ci while (num < 10) { 819da853ecaSopenharmony_ci num++; 820da853ecaSopenharmony_ci vector<std::thread> vecThread; 821da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 822da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 823da853ecaSopenharmony_ci char file[256] = {}; 824da853ecaSopenharmony_ci sprintf_s(file, len, "/data/test/media/16/%d_subtitle_webvtt_zh_CN_14.mp4", i); 825da853ecaSopenharmony_ci g_fdList[i] = open(file, O_RDONLY); 826da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 827da853ecaSopenharmony_ci cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl; 828da853ecaSopenharmony_ci 829da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size); 830da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 831da853ecaSopenharmony_ci 832da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 833da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 834da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 835da853ecaSopenharmony_ci } 836da853ecaSopenharmony_ci for (auto &val : vecThread) { 837da853ecaSopenharmony_ci val.join(); 838da853ecaSopenharmony_ci } 839da853ecaSopenharmony_ci 840da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 841da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 842da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 843da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 844da853ecaSopenharmony_ci } 845da853ecaSopenharmony_ci 846da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 847da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 848da853ecaSopenharmony_ci source_list[i] = nullptr; 849da853ecaSopenharmony_ci } 850da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 851da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 852da853ecaSopenharmony_ci memory_list[i] = nullptr; 853da853ecaSopenharmony_ci } 854da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 855da853ecaSopenharmony_ci 856da853ecaSopenharmony_ci close(g_fdList[i]); 857da853ecaSopenharmony_ci } 858da853ecaSopenharmony_ci cout << "num: " << num << endl; 859da853ecaSopenharmony_ci } 860da853ecaSopenharmony_ci } 861da853ecaSopenharmony_ci 862da853ecaSopenharmony_ci /** 863da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_008 864da853ecaSopenharmony_ci * @tc.name : create 16 instances repeat create-destory with vtt MP4 uri 865da853ecaSopenharmony_ci * @tc.desc : function test 866da853ecaSopenharmony_ci */ 867da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_008, TestSize.Level3) 868da853ecaSopenharmony_ci { 869da853ecaSopenharmony_ci int num = 0; 870da853ecaSopenharmony_ci while (num < 10) { 871da853ecaSopenharmony_ci num++; 872da853ecaSopenharmony_ci vector<std::thread> vecThread; 873da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_zh_CN_14.mp4"; 874da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 875da853ecaSopenharmony_ci memory_list[i] = OH_AVMemory_Create(g_width * g_height); 876da853ecaSopenharmony_ci cout << i << " uri: " << uri << endl; 877da853ecaSopenharmony_ci source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 878da853ecaSopenharmony_ci ASSERT_NE(source_list[i], nullptr); 879da853ecaSopenharmony_ci demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]); 880da853ecaSopenharmony_ci ASSERT_NE(demuxer_list[i], nullptr); 881da853ecaSopenharmony_ci vecThread.emplace_back(DemuxFuncVtt, i, num); 882da853ecaSopenharmony_ci } 883da853ecaSopenharmony_ci for (auto &val : vecThread) { 884da853ecaSopenharmony_ci val.join(); 885da853ecaSopenharmony_ci } 886da853ecaSopenharmony_ci for (int i = 0; i < g_maxThread; i++) { 887da853ecaSopenharmony_ci if (demuxer_list[i] != nullptr) { 888da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i])); 889da853ecaSopenharmony_ci demuxer_list[i] = nullptr; 890da853ecaSopenharmony_ci } 891da853ecaSopenharmony_ci 892da853ecaSopenharmony_ci if (source_list[i] != nullptr) { 893da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i])); 894da853ecaSopenharmony_ci source_list[i] = nullptr; 895da853ecaSopenharmony_ci } 896da853ecaSopenharmony_ci if (memory_list[i] != nullptr) { 897da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i])); 898da853ecaSopenharmony_ci memory_list[i] = nullptr; 899da853ecaSopenharmony_ci } 900da853ecaSopenharmony_ci std::cout << i << " finish Destroy!!!!" << std::endl; 901da853ecaSopenharmony_ci } 902da853ecaSopenharmony_ci cout << "num: " << num << endl; 903da853ecaSopenharmony_ci } 904da853ecaSopenharmony_ci } 905da853ecaSopenharmony_ci /** 906da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_009 907da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with uri file and read 908da853ecaSopenharmony_ci * @tc.desc : function test 909da853ecaSopenharmony_ci */ 910da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_009, TestSize.Level0) 911da853ecaSopenharmony_ci { 912da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 913da853ecaSopenharmony_ci const char* mimeType = nullptr; 914da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_zh_CN_14.mp4"; 915da853ecaSopenharmony_ci const char *fileV = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_zh_CN_14.vtt"; 916da853ecaSopenharmony_ci cout << uri << "------" << endl; 917da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 918da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 919da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 920da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 921da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 922da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 923da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 924da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 925da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 926da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 927da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 928da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 929da853ecaSopenharmony_ci int tarckType = 0; 930da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 931da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 932da853ecaSopenharmony_ci MyMapVtt(0, fileV); 933da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 934da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 935da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 936da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 937da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 938da853ecaSopenharmony_ci ASSERT_NE(memory, nullptr); 939da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 940da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 941da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 942da853ecaSopenharmony_ci break; 943da853ecaSopenharmony_ci } 944da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 945da853ecaSopenharmony_ci } 946da853ecaSopenharmony_ci } 947da853ecaSopenharmony_ci /** 948da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0010 949da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with uri file and forward back seek+read 950da853ecaSopenharmony_ci * @tc.desc : function test 951da853ecaSopenharmony_ci */ 952da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0010, TestSize.Level0) 953da853ecaSopenharmony_ci { 954da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 955da853ecaSopenharmony_ci const char* mimeType = nullptr; 956da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_zh_CN_14.mp4"; 957da853ecaSopenharmony_ci const char *fileV = "http://192.168.3.11:8080/share/audio/subtitle_webvtt_zh_CN_14.vtt"; 958da853ecaSopenharmony_ci cout << uri << "------" << endl; 959da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 960da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 961da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 962da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 963da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 964da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 965da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 966da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 967da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 968da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 969da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 970da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 971da853ecaSopenharmony_ci int tarckType = 0; 972da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 973da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 974da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 975da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 976da853ecaSopenharmony_ci } 977da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONO14 / ATTRPTS, 978da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 979da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 980da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUAL14 / ATTRPTS, 981da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 982da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 983da853ecaSopenharmony_ci MyMapVtt(BITRATEDUAL14, fileV); 984da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 985da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 986da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 987da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 988da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 989da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 990da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 991da853ecaSopenharmony_ci break; 992da853ecaSopenharmony_ci } 993da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 994da853ecaSopenharmony_ci } 995da853ecaSopenharmony_ci } 996da853ecaSopenharmony_ci /** 997da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0011 998da853ecaSopenharmony_ci * @tc.name : create vtt demuxer with uri file and read 999da853ecaSopenharmony_ci * @tc.desc : function test 1000da853ecaSopenharmony_ci */ 1001da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0011, TestSize.Level0) 1002da853ecaSopenharmony_ci { 1003da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1004da853ecaSopenharmony_ci const char* mimeType = nullptr; 1005da853ecaSopenharmony_ci int vttIndex = 1; 1006da853ecaSopenharmony_ci int vttSubtitle = 0; 1007da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/webvtt_test.vtt"; 1008da853ecaSopenharmony_ci cout << uri << "------" << endl; 1009da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 1010da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1011da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1012da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1013da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1014da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1015da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1016da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1017da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1018da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1019da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1020da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1021da853ecaSopenharmony_ci int tarckType = 0; 1022da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1023da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1024da853ecaSopenharmony_ci while (true) { 1025da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1026da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1027da853ecaSopenharmony_ci cout << " vtt is end !!!!!!!!!!!!!!!" << endl; 1028da853ecaSopenharmony_ci break; 1029da853ecaSopenharmony_ci } 1030da853ecaSopenharmony_ci uint8_t *data = OH_AVMemory_GetAddr(memory); 1031da853ecaSopenharmony_ci vttSubtitle = atoi(reinterpret_cast<const char*>(data)); 1032da853ecaSopenharmony_ci ASSERT_EQ(vttSubtitle, vttIndex); 1033da853ecaSopenharmony_ci vttIndex++; 1034da853ecaSopenharmony_ci } 1035da853ecaSopenharmony_ci } 1036da853ecaSopenharmony_ci /** 1037da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0012 1038da853ecaSopenharmony_ci * @tc.name : create vtt demuxer with uri file and forward back seek+read 1039da853ecaSopenharmony_ci * @tc.desc : function test 1040da853ecaSopenharmony_ci */ 1041da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0012, TestSize.Level0) 1042da853ecaSopenharmony_ci { 1043da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1044da853ecaSopenharmony_ci const char* mimeType = nullptr; 1045da853ecaSopenharmony_ci int vttIndex = 1; 1046da853ecaSopenharmony_ci int vttSubtitle = 0; 1047da853ecaSopenharmony_ci uint8_t *data = nullptr; 1048da853ecaSopenharmony_ci const char *uri = "http://192.168.3.11:8080/share/audio/webvtt_test.vtt"; 1049da853ecaSopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 1050da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1051da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1052da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1053da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1054da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1055da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1056da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1057da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1058da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1059da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1060da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1061da853ecaSopenharmony_ci int tarckType = 0; 1062da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1063da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1064da853ecaSopenharmony_ci for (int index = 0; index < 8; index++) { 1065da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1066da853ecaSopenharmony_ci } 1067da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, VTTSEEKBACK, 1068da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1069da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1070da853ecaSopenharmony_ci data = OH_AVMemory_GetAddr(memory); 1071da853ecaSopenharmony_ci vttSubtitle = atoi(reinterpret_cast<const char*>(data)); 1072da853ecaSopenharmony_ci vttIndex = 4; 1073da853ecaSopenharmony_ci ASSERT_EQ(vttSubtitle, vttIndex); 1074da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, VTTSEEKFORWARD, 1075da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1076da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1077da853ecaSopenharmony_ci data = OH_AVMemory_GetAddr(memory); 1078da853ecaSopenharmony_ci vttSubtitle = atoi(reinterpret_cast<const char*>(data)); 1079da853ecaSopenharmony_ci vttIndex = 7; 1080da853ecaSopenharmony_ci ASSERT_EQ(vttSubtitle, vttIndex); 1081da853ecaSopenharmony_ci while (true) { 1082da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1083da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1084da853ecaSopenharmony_ci break; 1085da853ecaSopenharmony_ci } 1086da853ecaSopenharmony_ci data = OH_AVMemory_GetAddr(memory); 1087da853ecaSopenharmony_ci vttSubtitle = atoi(reinterpret_cast<const char*>(data)); 1088da853ecaSopenharmony_ci vttIndex++; 1089da853ecaSopenharmony_ci ASSERT_EQ(vttSubtitle, vttIndex); 1090da853ecaSopenharmony_ci } 1091da853ecaSopenharmony_ci } 1092da853ecaSopenharmony_ci /** 1093da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0013 1094da853ecaSopenharmony_ci * @tc.name : create vtt demuxer with Mp4 file and read 1095da853ecaSopenharmony_ci * @tc.desc : function test 1096da853ecaSopenharmony_ci */ 1097da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0013, TestSize.Level0) 1098da853ecaSopenharmony_ci { 1099da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1100da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_en_GB_15.mp4"; 1101da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_en_GB_15.vtt"; 1102da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1103da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1104da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1105da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1106da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1107da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1108da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1109da853ecaSopenharmony_ci const char* mimeType = nullptr; 1110da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1111da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1112da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1113da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1114da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1115da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1116da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1117da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1118da853ecaSopenharmony_ci int tarckType = 0; 1119da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1120da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1121da853ecaSopenharmony_ci MyMapVtt(0, fileV); 1122da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1123da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1124da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1125da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1126da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1127da853ecaSopenharmony_ci ASSERT_NE(memory, nullptr); 1128da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1129da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1130da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1131da853ecaSopenharmony_ci break; 1132da853ecaSopenharmony_ci } 1133da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1134da853ecaSopenharmony_ci } 1135da853ecaSopenharmony_ci close(fd); 1136da853ecaSopenharmony_ci } 1137da853ecaSopenharmony_ci 1138da853ecaSopenharmony_ci /** 1139da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0014 1140da853ecaSopenharmony_ci * @tc.name : create vtt demuxer with Mp4 file and read 1141da853ecaSopenharmony_ci * @tc.desc : function test 1142da853ecaSopenharmony_ci */ 1143da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0014, TestSize.Level0) 1144da853ecaSopenharmony_ci { 1145da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1146da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_zh_CN_14.mp4"; 1147da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_zh_CN_14.vtt"; 1148da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1149da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1150da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1151da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1152da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1153da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1154da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1155da853ecaSopenharmony_ci const char* mimeType = nullptr; 1156da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1157da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1158da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1159da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1160da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1161da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1162da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1163da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1164da853ecaSopenharmony_ci int tarckType = 0; 1165da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1166da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1167da853ecaSopenharmony_ci MyMapVtt(0, fileV); 1168da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1169da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1170da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1171da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1172da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1173da853ecaSopenharmony_ci ASSERT_NE(memory, nullptr); 1174da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1175da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1176da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1177da853ecaSopenharmony_ci break; 1178da853ecaSopenharmony_ci } 1179da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1180da853ecaSopenharmony_ci } 1181da853ecaSopenharmony_ci close(fd); 1182da853ecaSopenharmony_ci } 1183da853ecaSopenharmony_ci /** 1184da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0015 1185da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and forward back seek+read 1186da853ecaSopenharmony_ci * @tc.desc : function test 1187da853ecaSopenharmony_ci */ 1188da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0015, TestSize.Level0) 1189da853ecaSopenharmony_ci { 1190da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1191da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_en_GB_15.mp4"; 1192da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_en_GB_15.vtt"; 1193da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1194da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1195da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1196da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1197da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1198da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1199da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1200da853ecaSopenharmony_ci const char* mimeType = nullptr; 1201da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1202da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1203da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1204da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1205da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1206da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1207da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1208da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1209da853ecaSopenharmony_ci int tarckType = 0; 1210da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1211da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1212da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1213da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1214da853ecaSopenharmony_ci } 1215da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONOMP4 / ATTRPTS, 1216da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1217da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1218da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUALMP4 / ATTRPTS, 1219da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1220da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1221da853ecaSopenharmony_ci MyMapVtt(BITRATEDUALMP4, fileV); 1222da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1223da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1224da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1225da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1226da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1227da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1228da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1229da853ecaSopenharmony_ci break; 1230da853ecaSopenharmony_ci } 1231da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1232da853ecaSopenharmony_ci } 1233da853ecaSopenharmony_ci close(fd); 1234da853ecaSopenharmony_ci } 1235da853ecaSopenharmony_ci 1236da853ecaSopenharmony_ci /** 1237da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0016 1238da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and forward back seek+read 1239da853ecaSopenharmony_ci * @tc.desc : function test 1240da853ecaSopenharmony_ci */ 1241da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0016, TestSize.Level0) 1242da853ecaSopenharmony_ci { 1243da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1244da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_zh_CN_14.mp4"; 1245da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_zh_CN_14.vtt"; 1246da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1247da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1248da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1249da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1250da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1251da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1252da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1253da853ecaSopenharmony_ci const char* mimeType = nullptr; 1254da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1255da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1256da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1257da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1258da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1259da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1260da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1261da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1262da853ecaSopenharmony_ci int tarckType = 0; 1263da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1264da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1265da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1266da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1267da853ecaSopenharmony_ci } 1268da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONO14 / ATTRPTS, 1269da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1270da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1271da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUAL14 / ATTRPTS, 1272da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1273da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1274da853ecaSopenharmony_ci MyMapVtt(BITRATEDUAL14, fileV); 1275da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1276da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1277da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1278da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1279da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1280da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1281da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1282da853ecaSopenharmony_ci break; 1283da853ecaSopenharmony_ci } 1284da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1285da853ecaSopenharmony_ci } 1286da853ecaSopenharmony_ci close(fd); 1287da853ecaSopenharmony_ci } 1288da853ecaSopenharmony_ci 1289da853ecaSopenharmony_ci /** 1290da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0017 1291da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and back seek+read 1292da853ecaSopenharmony_ci * @tc.desc : function test 1293da853ecaSopenharmony_ci */ 1294da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0017, TestSize.Level0) 1295da853ecaSopenharmony_ci { 1296da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1297da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_en_GB_15.mp4"; 1298da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_en_GB_15.vtt"; 1299da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1300da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1301da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1302da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1303da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1304da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1305da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1306da853ecaSopenharmony_ci const char* mimeType = nullptr; 1307da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1308da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1309da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1310da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1311da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1312da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1313da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1314da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1315da853ecaSopenharmony_ci int tarckType = 0; 1316da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1317da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1318da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1319da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1320da853ecaSopenharmony_ci } 1321da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONOMP4 / ATTRPTS, 1322da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1323da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1324da853ecaSopenharmony_ci MyMapVtt(BITRATEMONOMP4, fileV); 1325da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1326da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1327da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1328da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1329da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1330da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1331da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1332da853ecaSopenharmony_ci break; 1333da853ecaSopenharmony_ci } 1334da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1335da853ecaSopenharmony_ci } 1336da853ecaSopenharmony_ci close(fd); 1337da853ecaSopenharmony_ci } 1338da853ecaSopenharmony_ci /** 1339da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0018 1340da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and back seek+read 1341da853ecaSopenharmony_ci * @tc.desc : function test 1342da853ecaSopenharmony_ci */ 1343da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0018, TestSize.Level0) 1344da853ecaSopenharmony_ci { 1345da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1346da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_zh_CN_14.mp4"; 1347da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_zh_CN_14.vtt"; 1348da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1349da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1350da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1351da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1352da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1353da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1354da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1355da853ecaSopenharmony_ci const char* mimeType = nullptr; 1356da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1357da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1358da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1359da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1360da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1361da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1362da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1363da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1364da853ecaSopenharmony_ci int tarckType = 0; 1365da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1366da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1367da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1368da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1369da853ecaSopenharmony_ci } 1370da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEMONO14 / ATTRPTS, 1371da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1372da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1373da853ecaSopenharmony_ci MyMapVtt(BITRATEMONO14, fileV); 1374da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1375da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1376da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1377da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1378da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1379da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1380da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1381da853ecaSopenharmony_ci break; 1382da853ecaSopenharmony_ci } 1383da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1384da853ecaSopenharmony_ci } 1385da853ecaSopenharmony_ci close(fd); 1386da853ecaSopenharmony_ci } 1387da853ecaSopenharmony_ci /** 1388da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0019 1389da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and forward seek+read 1390da853ecaSopenharmony_ci * @tc.desc : function test 1391da853ecaSopenharmony_ci */ 1392da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0019, TestSize.Level0) 1393da853ecaSopenharmony_ci { 1394da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1395da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_en_GB_15.mp4"; 1396da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_en_GB_15.vtt"; 1397da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1398da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1399da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1400da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1401da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1402da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1403da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1404da853ecaSopenharmony_ci const char* mimeType = nullptr; 1405da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1406da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1407da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1408da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1409da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1410da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1411da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1412da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1413da853ecaSopenharmony_ci int tarckType = 0; 1414da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1415da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1416da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1417da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1418da853ecaSopenharmony_ci } 1419da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUALMP4 / ATTRPTS, 1420da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1421da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1422da853ecaSopenharmony_ci MyMapVtt(BITRATEDUALMP4, fileV); 1423da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1424da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1425da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1426da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1427da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1428da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1429da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1430da853ecaSopenharmony_ci break; 1431da853ecaSopenharmony_ci } 1432da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1433da853ecaSopenharmony_ci } 1434da853ecaSopenharmony_ci close(fd); 1435da853ecaSopenharmony_ci } 1436da853ecaSopenharmony_ci 1437da853ecaSopenharmony_ci /** 1438da853ecaSopenharmony_ci * @tc.number : DEMUXER_FUNC_VTT_0020 1439da853ecaSopenharmony_ci * @tc.name : create vtt Mp4 demuxer with file and forward seek+read 1440da853ecaSopenharmony_ci * @tc.desc : function test 1441da853ecaSopenharmony_ci */ 1442da853ecaSopenharmony_ci HWTEST_F(DemuxerNetNdkTest, DEMUXER_FUNC_VTT_0020, TestSize.Level0) 1443da853ecaSopenharmony_ci { 1444da853ecaSopenharmony_ci OH_AVCodecBufferAttr attr; 1445da853ecaSopenharmony_ci const char *file = "/data/test/media/subtitle_webvtt_zh_CN_14.mp4"; 1446da853ecaSopenharmony_ci const char *fileV = "/data/test/media/subtitle_webvtt_zh_CN_14.vtt"; 1447da853ecaSopenharmony_ci int fd = open(file, O_RDONLY); 1448da853ecaSopenharmony_ci int64_t size = GetFileSize(file); 1449da853ecaSopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1450da853ecaSopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1451da853ecaSopenharmony_ci ASSERT_NE(source, nullptr); 1452da853ecaSopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1453da853ecaSopenharmony_ci ASSERT_NE(demuxer, nullptr); 1454da853ecaSopenharmony_ci const char* mimeType = nullptr; 1455da853ecaSopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1456da853ecaSopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1457da853ecaSopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1458da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &mimeType)); 1459da853ecaSopenharmony_ci ASSERT_EQ(0, strcmp(mimeType, OH_AVCODEC_MIMETYPE_SUBTITLE_WEBVTT)); 1460da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1461da853ecaSopenharmony_ci ASSERT_EQ(1, g_trackCount); 1462da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1463da853ecaSopenharmony_ci int tarckType = 0; 1464da853ecaSopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1465da853ecaSopenharmony_ci ASSERT_EQ(tarckType, OH_MediaType::MEDIA_TYPE_SUBTITLE); 1466da853ecaSopenharmony_ci for (int index = 0; index < 10; index++) { 1467da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1468da853ecaSopenharmony_ci } 1469da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, BITRATEDUAL14 / ATTRPTS, 1470da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1471da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1472da853ecaSopenharmony_ci MyMapVtt(BITRATEDUAL14, fileV); 1473da853ecaSopenharmony_ci std::map<int64_t, int32_t>::iterator pair; 1474da853ecaSopenharmony_ci for (pair = myMap.begin(); pair != myMap.end(); ++pair) { 1475da853ecaSopenharmony_ci std::cout << pair->first << " => " << pair->second << '\n'; 1476da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, pair->first / ATTRPTS, 1477da853ecaSopenharmony_ci OH_AVSeekMode::SEEK_MODE_CLOSEST_SYNC)); 1478da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1479da853ecaSopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1480da853ecaSopenharmony_ci break; 1481da853ecaSopenharmony_ci } 1482da853ecaSopenharmony_ci ASSERT_EQ(pair->second, attr.size); 1483da853ecaSopenharmony_ci } 1484da853ecaSopenharmony_ci close(fd); 1485da853ecaSopenharmony_ci } 1486da853ecaSopenharmony_ci} // namespace