diff --git a/internal/codecprocessor/h264_test.go b/internal/codecprocessor/h264_test.go index 6f124fb6..fb20b5d5 100644 --- a/internal/codecprocessor/h264_test.go +++ b/internal/codecprocessor/h264_test.go @@ -208,7 +208,7 @@ func TestH264RTPOversized(t *testing.T) { })) require.NoError(t, err) - var out []*rtp.Packet + var out []*rtp.Packet //nolint:prealloc for _, pkt := range []*rtp.Packet{ { diff --git a/internal/codecprocessor/h265_test.go b/internal/codecprocessor/h265_test.go index 67767ace..7b094d74 100644 --- a/internal/codecprocessor/h265_test.go +++ b/internal/codecprocessor/h265_test.go @@ -208,7 +208,7 @@ func TestH265RTPOversized(t *testing.T) { })) require.NoError(t, err) - var out []*rtp.Packet + var out []*rtp.Packet //nolint:prealloc for _, pkt := range []*rtp.Packet{ { diff --git a/internal/core/path.go b/internal/core/path.go index a06973a8..955dc9fd 100644 --- a/internal/core/path.go +++ b/internal/core/path.go @@ -584,9 +584,11 @@ func (pa *path) doAPIPathsGet(req pathAPIPathsGetReq) { return pa.stream.BytesSent() }(), Readers: func() []defs.APIPathSourceOrReader { - ret := []defs.APIPathSourceOrReader{} + ret := make([]defs.APIPathSourceOrReader, len(pa.readers)) + i := 0 for r := range pa.readers { - ret = append(ret, r.APIReaderDescribe()) + ret[i] = r.APIReaderDescribe() + i++ } return ret }(), diff --git a/internal/defs/source.go b/internal/defs/source.go index ae5fd893..0a0d39e4 100644 --- a/internal/defs/source.go +++ b/internal/defs/source.go @@ -42,22 +42,32 @@ func FormatsInfo(formats []format.Format) string { strings.Join(FormatsToCodecs(formats), ", ")) } -// MediasToCodecs returns the name of codecs of given formats. -func MediasToCodecs(medias []*description.Media) []string { - var formats []format.Format +func gatherFormats(medias []*description.Media) []format.Format { + n := 0 for _, media := range medias { - formats = append(formats, media.Formats...) + n += len(media.Formats) } - return FormatsToCodecs(formats) + if n == 0 { + return nil + } + + formats := make([]format.Format, n) + n = 0 + + for _, media := range medias { + n += copy(formats[n:], media.Formats) + } + + return formats +} + +// MediasToCodecs returns the name of codecs of given formats. +func MediasToCodecs(medias []*description.Media) []string { + return FormatsToCodecs(gatherFormats(medias)) } // MediasInfo returns a description of medias. func MediasInfo(medias []*description.Media) string { - var formats []format.Format - for _, media := range medias { - formats = append(formats, media.Formats...) - } - - return FormatsInfo(formats) + return FormatsInfo(gatherFormats(medias)) } diff --git a/internal/playback/on_get_test.go b/internal/playback/on_get_test.go index c0139e90..540d1e6d 100644 --- a/internal/playback/on_get_test.go +++ b/internal/playback/on_get_test.go @@ -613,11 +613,11 @@ func TestOnGet(t *testing.T) { sampleData := make(map[int][][]byte) for _, track := range p.Tracks { - var samples [][]byte - for _, sample := range track.Samples { + samples := make([][]byte, len(track.Samples)) + for i, sample := range track.Samples { buf, err = sample.GetPayload() require.NoError(t, err) - samples = append(samples, buf) + samples[i] = buf sample.GetPayload = nil } sampleData[track.ID] = samples diff --git a/internal/stream/reader.go b/internal/stream/reader.go index 359d1426..e1767072 100644 --- a/internal/stream/reader.go +++ b/internal/stream/reader.go @@ -41,11 +41,24 @@ func (r *Reader) OnData(medi *description.Media, forma format.Format, cb OnDataF // Formats returns all formats for which the reader has registered a OnData callback. func (r *Reader) Formats() []format.Format { - var out []format.Format + n := 0 + for _, formats := range r.onDatas { + for range formats { + n++ + } + } + + if n == 0 { + return nil + } + + out := make([]format.Format, n) + n = 0 for _, formats := range r.onDatas { for forma := range formats { - out = append(out, forma) + out[n] = forma + n++ } }