@@ -4326,6 +4326,85 @@ VOID TEST(KernelCodecTest, VideoFrameH264_BFrameDetection_EdgeCases)
43264326 }
43274327}
43284328
4329+ VOID TEST (KernelCodecTest, VideoFrameVideoInfoFrameHandling)
4330+ {
4331+ srs_error_t err;
4332+
4333+ // Test both AVC and HEVC video codecs
4334+ SrsFormat format;
4335+ HELPER_EXPECT_SUCCESS (format.initialize ());
4336+
4337+ // Test 1: AVC Video Info Frame handling with additional NALU data (mock data set 2)
4338+ {
4339+ // AVC Video Info Frame - mock data set 2
4340+ // Frame type 5 (Video Info Frame) | Codec ID 7 (AVC)
4341+ uint8_t avc_video_info_frame2[] = {
4342+ 0x57 , // Frame type 5 (Video Info Frame) | Codec ID 7 (AVC)
4343+ 0x01 , // AVC packet type 1 (NALU)
4344+ 0x00 , 0x00 , 0x00 , // Composition time 0
4345+ // NALU data (mock IDR frame)
4346+ 0x00 , 0x00 , 0x00 , 0x01 , // NAL unit start code
4347+ 0x65 , 0x88 , 0x84 , 0x00 // IDR NALU (mock data)
4348+ };
4349+
4350+ // Call on_video with AVC video info frame - should not return error
4351+ err = format.on_video (2000 , (char *)avc_video_info_frame2, sizeof (avc_video_info_frame2));
4352+ EXPECT_TRUE (err == NULL ) << " Failed to handle AVC Video Info Frame with NALU data" ;
4353+
4354+ // Verify avc_packet_type_ is correctly set to SrsVideoAvcFrameTraitNALU (1)
4355+ EXPECT_TRUE (format.video_ != NULL ) << " Video packet should be initialized after on_video call" ;
4356+ EXPECT_EQ (format.video_ ->avc_packet_type_ , SrsVideoAvcFrameTraitNALU)
4357+ << " Expected avc_packet_type_ to be SrsVideoAvcFrameTraitNALU (1), got "
4358+ << format.video_ ->avc_packet_type_ ;
4359+
4360+ srs_freep (err);
4361+ }
4362+
4363+ // Test 2: HEVC Video Info Frame handling with coded frames (mock data set 2)
4364+ {
4365+ // HEVC Video Info Frame (enhanced RTMP format) - mock data set 2
4366+ uint8_t hevc_video_info_frame2[] = {
4367+ 0xD1 , // Frame type 5 (Video Info Frame) | Extended header flag (0x80) | Packet type 1
4368+ 0x68 , 0x76 , 0x63 , 0x31 , // 'hvc1' FourCC (HEVC)
4369+ 0x00 , 0x00 , 0x00 // Composition time 0 (for coded frames packet type)
4370+ };
4371+
4372+ // Call on_video with HEVC video info frame - should not return error
4373+ err = format.on_video (4000 , (char *)hevc_video_info_frame2, sizeof (hevc_video_info_frame2));
4374+ EXPECT_TRUE (err == NULL ) << " Failed to handle HEVC Video Info Frame with coded frames" ;
4375+
4376+ // Verify avc_packet_type_ is correctly set to SrsVideoHEVCFrameTraitPacketTypeCodedFrames (1)
4377+ EXPECT_TRUE (format.video_ != NULL ) << " Video packet should be initialized after on_video call" ;
4378+ EXPECT_EQ (format.video_ ->avc_packet_type_ , SrsVideoHEVCFrameTraitPacketTypeCodedFrames)
4379+ << " Expected avc_packet_type_ to be SrsVideoHEVCFrameTraitPacketTypeCodedFrames (1), got "
4380+ << format.video_ ->avc_packet_type_ ;
4381+
4382+ srs_freep (err);
4383+ }
4384+
4385+ // Test 3: HEVC Video Info Frame handling with coded frames X (optimized zero composition time)
4386+ {
4387+ // HEVC Video Info Frame with coded frames X (optimized)
4388+ uint8_t hevc_video_info_frame3[] = {
4389+ 0xD3 , // Frame type 5 (Video Info Frame) | Extended header flag (0x80) | Packet type 3 (coded frames X)
4390+ 0x68 , 0x76 , 0x63 , 0x31 // 'hvc1' FourCC (HEVC)
4391+ // No composition time field for coded frames X (implied to be zero)
4392+ };
4393+
4394+ // Call on_video with HEVC video info frame - should not return error
4395+ err = format.on_video (7000 , (char *)hevc_video_info_frame3, sizeof (hevc_video_info_frame3));
4396+ EXPECT_TRUE (err == NULL ) << " Failed to handle HEVC Video Info Frame with coded frames X" ;
4397+
4398+ // Verify avc_packet_type_ is correctly set to SrsVideoHEVCFrameTraitPacketTypeCodedFramesX (3)
4399+ EXPECT_TRUE (format.video_ != NULL ) << " Video packet should be initialized after on_video call" ;
4400+ EXPECT_EQ (format.video_ ->avc_packet_type_ , SrsVideoHEVCFrameTraitPacketTypeCodedFramesX)
4401+ << " Expected avc_packet_type_ to be SrsVideoHEVCFrameTraitPacketTypeCodedFramesX (3), got "
4402+ << format.video_ ->avc_packet_type_ ;
4403+
4404+ srs_freep (err);
4405+ }
4406+ }
4407+
43294408VOID TEST (KernelCodecTest, VideoFrameH265)
43304409{
43314410 srs_error_t err;
0 commit comments