@@ -460,3 +460,84 @@ TEST_F(StreamApiTest, kinesisVideoStreamFormatChanged_Valid)
460
460
461
461
MEMFREE (pBuffer);
462
462
}
463
+
464
+ TEST_F (StreamApiTest, kinesisVideoStreamFormatChanged_Multitrack_free)
465
+ {
466
+ UINT32 cpdSize = 1 ;
467
+ PBYTE pCpd = (PBYTE) MEMALLOC (cpdSize);
468
+ UINT32 cpd2Size = MKV_MAX_CODEC_PRIVATE_LEN;
469
+ PBYTE pCpd2 = (PBYTE) MEMALLOC (cpd2Size);
470
+
471
+ PTrackInfo trackInfos = (PTrackInfo) MEMALLOC (2 * SIZEOF (TrackInfo));
472
+
473
+ // Set the on-the-stack CPD to some values
474
+ MEMSET (pCpd, 0xab , cpdSize);
475
+ MEMSET (pCpd2, 0x55 , cpd2Size);
476
+
477
+ trackInfos[0 ].trackId = TEST_TRACKID;
478
+ trackInfos[0 ].trackType = MKV_TRACK_INFO_TYPE_VIDEO;
479
+ trackInfos[0 ].codecPrivateDataSize = cpdSize;
480
+ trackInfos[0 ].codecPrivateData = pCpd;
481
+ STRCPY (trackInfos[0 ].codecId , (PCHAR) " TestCodec1" );
482
+ STRCPY (trackInfos[0 ].trackName , (PCHAR) " TestTrack1" );
483
+ trackInfos[0 ].trackCustomData .trackVideoConfig .videoWidth = 1280 ;
484
+ trackInfos[0 ].trackCustomData .trackVideoConfig .videoHeight = 720 ;
485
+
486
+ trackInfos[1 ].trackId = TEST_TRACKID + 1 ;
487
+ trackInfos[1 ].trackType = MKV_TRACK_INFO_TYPE_AUDIO;
488
+ trackInfos[1 ].codecPrivateDataSize = cpd2Size;
489
+ trackInfos[1 ].codecPrivateData = pCpd2;
490
+ STRCPY (trackInfos[1 ].codecId , (PCHAR) " TestCodec2" );
491
+ STRCPY (trackInfos[1 ].trackName , (PCHAR) " TestTrack2" );
492
+ trackInfos[1 ].trackCustomData .trackAudioConfig .channelConfig = 5 ;
493
+ trackInfos[1 ].trackCustomData .trackAudioConfig .samplingFrequency = 44000 ;
494
+
495
+ mStreamInfo .streamCaps .trackInfoCount = 2 ;
496
+ mStreamInfo .streamCaps .trackInfoList = trackInfos;
497
+
498
+ mStreamInfo .streamCaps .nalAdaptationFlags = NAL_ADAPTATION_ANNEXB_CPD_NALS;
499
+
500
+ // Create a stream
501
+ CreateStream ();
502
+
503
+ // Free the codecs which were used in the stream creation track infos
504
+ MEMFREE (pCpd);
505
+ MEMFREE (pCpd2);
506
+ MEMFREE (trackInfos);
507
+
508
+ // Set the CPD for track 1
509
+ cpdSize = 3000 ;
510
+ pCpd = (PBYTE) MEMALLOC (cpdSize);
511
+ MEMSET (pCpd, 1 , cpdSize);
512
+ EXPECT_EQ (STATUS_SUCCESS, kinesisVideoStreamFormatChanged (mStreamHandle , cpdSize, pCpd, TEST_TRACKID));
513
+
514
+ // Free the CPD
515
+ MEMFREE (pCpd);
516
+
517
+ // Set the CPD for track 2
518
+ cpdSize = 5000 ;
519
+ pCpd = (PBYTE) MEMALLOC (cpdSize);
520
+ MEMSET (pCpd, 2 , cpdSize);
521
+ EXPECT_EQ (STATUS_SUCCESS, kinesisVideoStreamFormatChanged (mStreamHandle , cpdSize, pCpd, TEST_TRACKID + 1 ));
522
+
523
+ // Free the cpd
524
+ MEMFREE (pCpd);
525
+
526
+ // Set the CPD for track 1
527
+ cpdSize = 300 ;
528
+ pCpd = (PBYTE) MEMALLOC (cpdSize);
529
+ MEMSET (pCpd, 3 , cpdSize);
530
+ EXPECT_EQ (STATUS_SUCCESS, kinesisVideoStreamFormatChanged (mStreamHandle , cpdSize, pCpd, TEST_TRACKID));
531
+
532
+ // Free the CPD
533
+ MEMFREE (pCpd);
534
+
535
+ // Set the CPD for track 2
536
+ cpdSize = 50 ;
537
+ pCpd = (PBYTE) MEMALLOC (cpdSize);
538
+ MEMSET (pCpd, 4 , cpdSize);
539
+ EXPECT_EQ (STATUS_SUCCESS, kinesisVideoStreamFormatChanged (mStreamHandle , cpdSize, pCpd, TEST_TRACKID + 1 ));
540
+
541
+ // Free the cpd
542
+ MEMFREE (pCpd);
543
+ }
0 commit comments