Skip to content

Commit 9258d7a

Browse files
committed
Add test for decoding multiple h265 nalus in single fu
1 parent 3d46c98 commit 9258d7a

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

pkg/format/rtph265/decoder_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"encoding/binary"
66
"errors"
7+
"os"
78
"testing"
89

910
"github.com/bluenviron/mediacommon/v2/pkg/codecs/h265"
@@ -130,6 +131,42 @@ func TestDecodeErrorMissingPacket(t *testing.T) {
130131
require.EqualError(t, err, "discarding frame since a RTP packet is missing")
131132
}
132133

134+
func TestDecodeMultipleNALUsInFU(t *testing.T) {
135+
data, err := os.ReadFile("testdata/multiple-nalus-in-fu.rtp")
136+
require.NoError(t, err)
137+
138+
pkts, err := unserializePackets(data)
139+
require.NoError(t, err)
140+
require.Equal(t, 2, len(pkts), "must be 2 packets")
141+
142+
d := &Decoder{}
143+
err = d.Init()
144+
require.NoError(t, err)
145+
146+
_, err = d.Decode(pkts[0])
147+
require.Equal(t, ErrMorePacketsNeeded, err)
148+
149+
nalus, err := d.Decode(pkts[1])
150+
require.NoError(t, err)
151+
require.Equal(t, 4, len(nalus), "must be 4 NALUs")
152+
153+
expectedNALUs := []struct {
154+
typ h265.NALUType
155+
size int
156+
}{
157+
{h265.NALUType_VPS_NUT, 24},
158+
{h265.NALUType_SPS_NUT, 42},
159+
{h265.NALUType_PPS_NUT, 7},
160+
{h265.NALUType_IDR_W_RADL, 2715},
161+
}
162+
163+
for i, nalu := range nalus {
164+
typ := h265.NALUType((nalu[0] >> 1) & 0b111111)
165+
require.Equal(t, expectedNALUs[i].typ, typ, "nalu types don't match")
166+
require.Equal(t, expectedNALUs[i].size, len(nalu), "nalu sizes don't match")
167+
}
168+
}
169+
133170
func serializePackets(packets []*rtp.Packet) ([]byte, error) {
134171
var buf []byte
135172

2.77 KB
Binary file not shown.

0 commit comments

Comments
 (0)