1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <string> 17 #include "gtest/gtest.h" 18 #include "AVMuxerDemo.h" 19 #include "avcodec_errors.h" 20 21 using namespace std; 22 using namespace testing::ext; 23 using namespace OHOS; 24 using namespace OHOS::MediaAVCodec; 25 using namespace OHOS::Media; 26 27 namespace { 28 class InnerAVMuxerParamCheckTest : public testing::Test { 29 public: 30 static void SetUpTestCase(); 31 static void TearDownTestCase(); 32 void SetUp() override; 33 void TearDown() override; 34 }; 35 SetUpTestCase()36 void InnerAVMuxerParamCheckTest::SetUpTestCase() {} TearDownTestCase()37 void InnerAVMuxerParamCheckTest::TearDownTestCase() {} SetUp()38 void InnerAVMuxerParamCheckTest::SetUp() {} TearDown()39 void InnerAVMuxerParamCheckTest::TearDown() {} 40 const std::string HEVC_LIB_PATH = std::string(AV_CODEC_PATH) + "/libav_codec_hevc_parser.z.so"; 41 } 42 43 44 /** 45 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_001 46 * @tc.name : InnerCreate - fd check 47 * @tc.desc : param check test 48 */ 49 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_001, TestSize.Level2) 50 { 51 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 52 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 53 int32_t fd = -1; 54 int32_t ret = muxerDemo->InnerCreate(fd, format); 55 ASSERT_EQ(AVCS_ERR_NO_MEMORY, ret); 56 muxerDemo->InnerDestroy(); 57 58 fd = muxerDemo->InnerGetFdByMode(format); 59 ret = muxerDemo->InnerCreate(fd, format); 60 ASSERT_EQ(AVCS_ERR_OK, ret); 61 muxerDemo->InnerDestroy(); 62 delete muxerDemo; 63 } 64 65 66 /** 67 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_002 68 * @tc.name : InnerCreate - format check 69 * @tc.desc : param check test 70 */ 71 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_002, TestSize.Level2) 72 { 73 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 74 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 75 int32_t fd = muxerDemo->InnerGetFdByMode(format); 76 int32_t ret = muxerDemo->InnerCreate(fd, format); 77 ASSERT_EQ(AVCS_ERR_OK, ret); 78 muxerDemo->InnerDestroy(); 79 80 format = Plugins::OutputFormat::M4A; 81 fd = muxerDemo->InnerGetFdByMode(format); 82 ret = muxerDemo->InnerCreate(fd, format); 83 ASSERT_EQ(AVCS_ERR_OK, ret); 84 85 muxerDemo->InnerDestroy(); 86 87 format = Plugins::OutputFormat::DEFAULT; 88 fd = muxerDemo->InnerGetFdByMode(format); 89 ret = muxerDemo->InnerCreate(fd, format); 90 ASSERT_EQ(AVCS_ERR_OK, ret); 91 92 muxerDemo->InnerDestroy(); 93 delete muxerDemo; 94 } 95 96 /** 97 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_003 98 * @tc.name : InnerSetRotation - rotation check 99 * @tc.desc : param check test 100 */ 101 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_003, TestSize.Level2) 102 { 103 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 104 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 105 int32_t fd = muxerDemo->InnerGetFdByMode(format); 106 std::cout<<"fd "<< fd << endl; 107 int32_t ret = muxerDemo->InnerCreate(fd, format); 108 ASSERT_EQ(AVCS_ERR_OK, ret); 109 110 int32_t rotation; 111 112 rotation = 0; 113 ret = muxerDemo->InnerSetRotation(rotation); 114 ASSERT_EQ(AVCS_ERR_OK, ret); 115 116 rotation = 90; 117 ret = muxerDemo->InnerSetRotation(rotation); 118 ASSERT_EQ(AVCS_ERR_OK, ret); 119 120 rotation = 180; 121 ret = muxerDemo->InnerSetRotation(rotation); 122 ASSERT_EQ(AVCS_ERR_OK, ret); 123 124 rotation = 270; 125 ret = muxerDemo->InnerSetRotation(rotation); 126 ASSERT_EQ(AVCS_ERR_OK, ret); 127 128 rotation = -90; 129 ret = muxerDemo->InnerSetRotation(rotation); 130 ASSERT_EQ(AVCS_ERR_INVALID_VAL, ret); 131 132 rotation = 45; 133 ret = muxerDemo->InnerSetRotation(rotation); 134 ASSERT_EQ(AVCS_ERR_INVALID_VAL, ret); 135 136 muxerDemo->InnerDestroy(); 137 138 delete muxerDemo; 139 } 140 141 142 /** 143 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_004 144 * @tc.name : InnerAddTrack - (MediaDescriptionKey::MD_KEY_CODEC_MIME) check 145 * @tc.desc : param check test 146 */ 147 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_004, TestSize.Level2) 148 { 149 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 150 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 151 int32_t fd = muxerDemo->InnerGetFdByMode(format); 152 std::cout<<"fd "<< fd << endl; 153 154 int32_t ret = muxerDemo->InnerCreate(fd, format); 155 ASSERT_EQ(AVCS_ERR_OK, ret); 156 157 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 158 std::vector<uint8_t> a(100); 159 160 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 161 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 162 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 163 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 164 165 int trackIndex = 0; 166 int32_t trackId; 167 168 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 169 ASSERT_EQ(0, trackId); 170 171 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_MPEG); 172 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 173 ASSERT_EQ(0, trackId); 174 175 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_FLAC); 176 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 177 ASSERT_EQ(AVCS_ERR_UNSUPPORT_FILE_TYPE, trackId); 178 179 audioParams->Set<Tag::MIME_TYPE>("aaaaaa"); 180 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 181 ASSERT_EQ(AVCS_ERR_UNSUPPORT_FILE_TYPE, trackId); 182 183 muxerDemo->InnerDestroy(); 184 185 delete muxerDemo; 186 } 187 188 189 /** 190 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_005 191 * @tc.name : InnerAddTrack - (MediaDescriptionKey::MD_KEY_CHANNEL_COUNT) check 192 * @tc.desc : param check test 193 */ 194 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_005, TestSize.Level2) 195 { 196 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 197 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 198 int32_t fd = muxerDemo->InnerGetFdByMode(format); 199 int32_t ret = muxerDemo->InnerCreate(fd, format); 200 ASSERT_EQ(AVCS_ERR_OK, ret); 201 202 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 203 std::vector<uint8_t> a(100); 204 205 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 206 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 207 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 208 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 209 210 int trackIndex = 0; 211 int32_t trackId; 212 213 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 214 ASSERT_EQ(0, trackId); 215 216 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(-1); 217 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 218 ASSERT_EQ(AVCS_ERR_INVALID_VAL, trackId); 219 220 muxerDemo->InnerDestroy(); 221 delete muxerDemo; 222 } 223 224 225 /** 226 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_006 227 * @tc.name : InnerAddTrack - (MediaDescriptionKey::MD_KEY_SAMPLE_RATE) check 228 * @tc.desc : param check test 229 */ 230 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_006, TestSize.Level2) 231 { 232 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 233 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 234 int32_t fd = muxerDemo->InnerGetFdByMode(format); 235 int32_t ret = muxerDemo->InnerCreate(fd, format); 236 ASSERT_EQ(AVCS_ERR_OK, ret); 237 238 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 239 std::vector<uint8_t> a(100); 240 241 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 242 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 243 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 244 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 245 246 int trackIndex = 0; 247 int32_t trackId; 248 249 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 250 ASSERT_EQ(0, trackId); 251 252 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(-1); 253 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 254 ASSERT_EQ(AVCS_ERR_INVALID_VAL, trackId); 255 256 muxerDemo->InnerDestroy(); 257 delete muxerDemo; 258 } 259 260 /** 261 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_007 262 * @tc.name : InnerAddTrack - video (MediaDescriptionKey::MD_KEY_CODEC_MIME) check 263 * @tc.desc : param check test 264 */ 265 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_007, TestSize.Level2) 266 { 267 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 268 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 269 int32_t fd = muxerDemo->InnerGetFdByMode(format); 270 int32_t ret = muxerDemo->InnerCreate(fd, format); 271 ASSERT_EQ(AVCS_ERR_OK, ret); 272 273 std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 274 std::vector<uint8_t> a(100); 275 276 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_MPEG4); 277 videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 278 videoParams->Set<Tag::VIDEO_WIDTH>(352); 279 videoParams->Set<Tag::VIDEO_HEIGHT>(288); 280 281 int32_t trackId; 282 int trackIndex = 0; 283 284 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 285 ASSERT_EQ(0, trackId); 286 287 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_AVC); 288 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 289 ASSERT_EQ(0, trackId); 290 291 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::IMAGE_JPG); 292 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 293 ASSERT_EQ(0, trackId); 294 295 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::IMAGE_PNG); 296 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 297 ASSERT_EQ(0, trackId); 298 299 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::IMAGE_BMP); 300 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 301 ASSERT_EQ(0, trackId); 302 303 muxerDemo->InnerDestroy(); 304 delete muxerDemo; 305 } 306 307 308 /** 309 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_008 310 * @tc.name : InnerAddTrack - video (MediaDescriptionKey::MD_KEY_WIDTH) check 311 * @tc.desc : param check test 312 */ 313 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_008, TestSize.Level2) 314 { 315 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 316 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 317 int32_t fd = muxerDemo->InnerGetFdByMode(format); 318 int32_t ret = muxerDemo->InnerCreate(fd, format); 319 ASSERT_EQ(AVCS_ERR_OK, ret); 320 321 std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 322 std::vector<uint8_t> a(100); 323 324 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_MPEG4); 325 videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 326 videoParams->Set<Tag::VIDEO_WIDTH>(352); 327 videoParams->Set<Tag::VIDEO_HEIGHT>(288); 328 329 int trackIndex = 0; 330 int32_t trackId; 331 332 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 333 ASSERT_EQ(0, trackId); 334 335 videoParams->Set<Tag::VIDEO_WIDTH>(-1); 336 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 337 ASSERT_EQ(AVCS_ERR_INVALID_VAL, trackId); 338 339 muxerDemo->InnerDestroy(); 340 delete muxerDemo; 341 } 342 343 344 /** 345 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_009 346 * @tc.name : InnerAddTrack - video (MediaDescriptionKey::MD_KEY_HEIGHT) check 347 * @tc.desc : param check test 348 */ 349 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_009, TestSize.Level2) 350 { 351 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 352 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 353 int32_t fd = muxerDemo->InnerGetFdByMode(format); 354 int32_t ret = muxerDemo->InnerCreate(fd, format); 355 ASSERT_EQ(AVCS_ERR_OK, ret); 356 357 std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 358 std::vector<uint8_t> a(100); 359 360 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_MPEG4); 361 videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 362 videoParams->Set<Tag::VIDEO_WIDTH>(352); 363 videoParams->Set<Tag::VIDEO_HEIGHT>(288); 364 365 int trackIndex = 0; 366 int32_t trackId; 367 368 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 369 ASSERT_EQ(0, trackId); 370 371 videoParams->Set<Tag::VIDEO_HEIGHT>(-1); 372 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 373 ASSERT_EQ(AVCS_ERR_INVALID_VAL, trackId); 374 375 muxerDemo->InnerDestroy(); 376 delete muxerDemo; 377 } 378 379 380 /** 381 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_010 382 * @tc.name : InnerAddTrack - (any key) check 383 * @tc.desc : param check test 384 */ 385 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_010, TestSize.Level2) 386 { 387 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 388 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 389 int32_t fd = muxerDemo->InnerGetFdByMode(format); 390 int32_t ret = muxerDemo->InnerCreate(fd, format); 391 ASSERT_EQ(AVCS_ERR_OK, ret); 392 393 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 394 audioParams->SetData("aaaaa", "bbbbb"); 395 396 int trackIndex = 0; 397 int32_t trackId; 398 399 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 400 ASSERT_EQ(AVCS_ERR_INVALID_VAL, trackId); 401 402 muxerDemo->InnerDestroy(); 403 delete muxerDemo; 404 } 405 406 407 /** 408 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_011 409 * @tc.name : InnerWriteSample - info.trackIndex check 410 * @tc.desc : param check test 411 */ 412 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_011, TestSize.Level2) 413 { 414 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 415 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 416 int32_t fd = muxerDemo->InnerGetFdByMode(format); 417 int32_t ret = muxerDemo->InnerCreate(fd, format); 418 ASSERT_EQ(AVCS_ERR_OK, ret); 419 420 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 421 std::vector<uint8_t> a(100); 422 423 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 424 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 425 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 426 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 427 428 int trackIndex = 0; 429 int32_t trackId; 430 431 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 432 ASSERT_EQ(0, trackId); 433 434 435 ret = muxerDemo->InnerStart(); 436 ASSERT_EQ(AVCS_ERR_OK, ret); 437 438 uint8_t data[100]; 439 std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 440 441 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 442 ASSERT_EQ(AVCS_ERR_OK, ret); 443 444 trackIndex = -1; 445 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 446 ASSERT_EQ(AVCS_ERR_INVALID_VAL, ret); 447 448 muxerDemo->InnerDestroy(); 449 delete muxerDemo; 450 } 451 452 453 /** 454 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_012 455 * @tc.name : InnerWriteSample - info.presentationTimeUs check 456 * @tc.desc : param check test 457 */ 458 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_012, TestSize.Level2) 459 { 460 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 461 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 462 int32_t fd = muxerDemo->InnerGetFdByMode(format); 463 int32_t ret = muxerDemo->InnerCreate(fd, format); 464 ASSERT_EQ(AVCS_ERR_OK, ret); 465 466 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 467 std::vector<uint8_t> a(100); 468 469 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 470 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 471 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 472 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 473 474 int trackIndex = 0; 475 476 ret = muxerDemo->InnerAddTrack(trackIndex, audioParams); 477 ASSERT_EQ(0, ret); 478 std::cout << "trackIndex: " << trackIndex << std::endl; 479 ret = muxerDemo->InnerStart(); 480 ASSERT_EQ(AVCS_ERR_OK, ret); 481 482 uint8_t data[100]; 483 std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 484 485 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 486 ASSERT_EQ(AVCS_ERR_OK, ret); 487 488 avMemBuffer->pts_ = -1; 489 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 490 ASSERT_EQ(AVCS_ERR_OK, ret); 491 492 muxerDemo->InnerDestroy(); 493 delete muxerDemo; 494 } 495 496 497 /** 498 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_013 499 * @tc.name : InnerWriteSample - info.size check 500 * @tc.desc : param check test 501 */ 502 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_013, TestSize.Level2) 503 { 504 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 505 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 506 int32_t fd = muxerDemo->InnerGetFdByMode(format); 507 int32_t ret = muxerDemo->InnerCreate(fd, format); 508 ASSERT_EQ(AVCS_ERR_OK, ret); 509 510 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 511 std::vector<uint8_t> a(100); 512 513 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 514 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 515 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 516 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 517 518 int trackIndex = 0; 519 int32_t trackId; 520 521 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 522 ASSERT_EQ(0, trackId); 523 524 ret = muxerDemo->InnerStart(); 525 ASSERT_EQ(AVCS_ERR_OK, ret); 526 527 uint8_t data[100]; 528 std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 529 530 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 531 ASSERT_EQ(AVCS_ERR_OK, ret); 532 533 avMemBuffer->memory_->SetSize(-1); 534 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 535 ASSERT_EQ(AVCS_ERR_OK, ret); 536 537 muxerDemo->InnerDestroy(); 538 delete muxerDemo; 539 } 540 /** 541 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_014 542 * @tc.name : InnerWriteSample - info.offset check 543 * @tc.desc : param check test 544 */ 545 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_014, TestSize.Level2) 546 { 547 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 548 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 549 int32_t fd = muxerDemo->InnerGetFdByMode(format); 550 int32_t ret = muxerDemo->InnerCreate(fd, format); 551 ASSERT_EQ(AVCS_ERR_OK, ret); 552 553 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 554 std::vector<uint8_t> a(100); 555 556 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 557 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 558 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 559 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 560 561 int trackIndex = 0; 562 int32_t trackId; 563 564 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 565 ASSERT_EQ(0, trackId); 566 567 ret = muxerDemo->InnerStart(); 568 ASSERT_EQ(AVCS_ERR_OK, ret); 569 570 uint8_t data[100]; 571 std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 572 573 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 574 ASSERT_EQ(AVCS_ERR_OK, ret); 575 576 avMemBuffer->memory_->SetOffset(-1); 577 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 578 ASSERT_EQ(AVCS_ERR_OK, ret); 579 580 muxerDemo->InnerDestroy(); 581 delete muxerDemo; 582 } 583 584 585 /** 586 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_015 587 * @tc.name : InnerWriteSample - info.flags check 588 * @tc.desc : param check test 589 */ 590 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_015, TestSize.Level2) 591 { 592 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 593 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 594 int32_t fd = muxerDemo->InnerGetFdByMode(format); 595 int32_t ret = muxerDemo->InnerCreate(fd, format); 596 ASSERT_EQ(AVCS_ERR_OK, ret); 597 598 std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 599 std::vector<uint8_t> a(100); 600 601 audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 602 audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 603 audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(1); 604 audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(48000); 605 606 int trackIndex = 0; 607 int32_t trackId; 608 609 trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 610 ASSERT_EQ(0, trackId); 611 612 ret = muxerDemo->InnerStart(); 613 ASSERT_EQ(AVCS_ERR_OK, ret); 614 615 uint8_t data[100]; 616 std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 617 618 avMemBuffer->flag_ = static_cast<uint32_t>(Plugins::AVBufferFlag::SYNC_FRAME); 619 ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 620 ASSERT_EQ(AVCS_ERR_OK, ret); 621 622 muxerDemo->InnerDestroy(); 623 delete muxerDemo; 624 } 625 626 /** 627 * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_016 628 * @tc.name : InnerAddTrack - video (MediaDescriptionKey::MD_KEY_COLOR_PRIMARIES) check 629 * @tc.desc : param check test 630 */ 631 HWTEST_F(InnerAVMuxerParamCheckTest, SUB_MULTIMEDIA_MEDIA_MUXER_PARAM_CHECK_016, TestSize.Level2) 632 { 633 if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) { 634 std::cout << "the hevc of mimetype is not supported" << std::endl; 635 return; 636 } 637 638 AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 639 Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 640 int32_t fd = muxerDemo->InnerGetFdByMode(format); 641 int32_t ret = muxerDemo->InnerCreate(fd, format); 642 ASSERT_EQ(AVCS_ERR_OK, ret); 643 644 std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 645 std::vector<uint8_t> a(100); 646 647 videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_HEVC); 648 videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(a); 649 videoParams->Set<Tag::VIDEO_WIDTH>(352); 650 videoParams->Set<Tag::VIDEO_HEIGHT>(288); 651 videoParams->Set<Tag::VIDEO_FRAME_RATE>(60); 652 videoParams->Set<Tag::VIDEO_DELAY>(2); 653 videoParams->Set<Tag::VIDEO_COLOR_PRIMARIES>(Plugins::ColorPrimary::BT709); 654 videoParams->Set<Tag::VIDEO_COLOR_TRC>(Plugins::TransferCharacteristic::BT709); 655 videoParams->Set<Tag::VIDEO_COLOR_MATRIX_COEFF>(Plugins::MatrixCoefficient::BT709); 656 videoParams->Set<Tag::VIDEO_COLOR_RANGE>(false); 657 videoParams->Set<Tag::VIDEO_IS_HDR_VIVID>(true); 658 659 videoParams->Set<Tag::MEDIA_CREATION_TIME>(nullptr); 660 videoParams->SetData(nullptr, nullptr); 661 videoParams->SetData(0, 0); 662 663 int trackIndex = 0; 664 int32_t trackId; 665 666 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 667 ASSERT_EQ(0, trackId); 668 669 videoParams->Set<Tag::VIDEO_COLOR_PRIMARIES>(static_cast<Plugins::ColorPrimary>(0)); 670 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 671 ASSERT_NE(0, trackId); 672 673 videoParams->Set<Tag::VIDEO_COLOR_PRIMARIES>(Plugins::ColorPrimary::BT709); 674 videoParams->Set<Tag::VIDEO_COLOR_TRC>(static_cast<Plugins::TransferCharacteristic>(0)); 675 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 676 ASSERT_NE(0, trackId); 677 678 videoParams->Set<Tag::VIDEO_COLOR_TRC>(Plugins::TransferCharacteristic::BT709); 679 videoParams->Set<Tag::VIDEO_COLOR_MATRIX_COEFF>(static_cast<Plugins::MatrixCoefficient>(3)); 680 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 681 ASSERT_NE(0, trackId); 682 683 videoParams->Set<Tag::VIDEO_COLOR_MATRIX_COEFF>(Plugins::MatrixCoefficient::BT709); 684 videoParams->Set<Tag::VIDEO_IS_HDR_VIVID>(false); 685 trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 686 ASSERT_EQ(0, trackId); 687 688 muxerDemo->InnerDestroy(); 689 delete muxerDemo; 690 } 691