@@ -460,3 +460,84 @@ TEST_F(StreamApiTest, kinesisVideoStreamFormatChanged_Valid)
460460
461461 MEMFREE (pBuffer);
462462}
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