From 5d579596088f4a0694c1d12b5e4b18144ca1056b Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Sun, 16 Jun 2024 08:56:57 +0300 Subject: [PATCH 1/2] fix(streams): handle missing codec_name in appendDOT function --- internal/streams/dot.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/streams/dot.go b/internal/streams/dot.go index aa008c40..b9a2b773 100644 --- a/internal/streams/dot.go +++ b/internal/streams/dot.go @@ -77,12 +77,17 @@ func (n *node) codec() []byte { return b[:len(b)-1] } -func (n *node) appendDOT(dot []byte, group string) []byte { - dot = fmt.Appendf(dot, "%d [group=%s, label=%q, title=%q];\n", n.ID, group, n.Codec["codec_name"], n.codec()) +func (n *node) appendDOT(dot []byte, group string) ([]byte, error) { + codecName, ok := n.Codec["codec_name"] + if !ok { + return nil, fmt.Errorf("codec_name not found in Codec map") + } + + dot = fmt.Appendf(dot, "%d [group=%s, label=%q, title=%q];\n", n.ID, group, codecName, n.codec()) //for _, sink := range n.Childs { // dot = fmt.Appendf(dot, "%d -> %d;\n", n.ID, sink) //} - return dot + return dot, nil } type conn struct { @@ -111,7 +116,7 @@ func (c *conn) appendDOT(dot []byte, group string) []byte { for _, recv := range c.Receivers { dot = fmt.Appendf(dot, "%d -> %d [label=%q];\n", c.ID, recv.ID, humanBytes(recv.Bytes)) - dot = recv.appendDOT(dot, "node") + dot, _ = recv.appendDOT(dot, "node") // TODO: handle error for debug purposes } for _, send := range c.Senders { dot = fmt.Appendf(dot, "%d -> %d [label=%q];\n", send.Parent, c.ID, humanBytes(send.Bytes)) From 906f554d74fa7d2cf18cbb6314a3d309342089ef Mon Sep 17 00:00:00 2001 From: Alex X Date: Sun, 16 Jun 2024 15:19:50 +0300 Subject: [PATCH 2/2] Code refactoring after #1195 --- internal/streams/dot.go | 25 +++++++++++++++---------- pkg/core/codec.go | 8 +++++++- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/internal/streams/dot.go b/internal/streams/dot.go index b9a2b773..96aa4115 100644 --- a/internal/streams/dot.go +++ b/internal/streams/dot.go @@ -67,6 +67,13 @@ type node struct { var codecKeys = []string{"codec_name", "sample_rate", "channels", "profile", "level"} +func (n *node) name() string { + if name, ok := n.Codec["codec_name"].(string); ok { + return name + } + return "unknown" +} + func (n *node) codec() []byte { b := make([]byte, 0, 128) for _, k := range codecKeys { @@ -74,20 +81,18 @@ func (n *node) codec() []byte { b = fmt.Appendf(b, "%s=%v\n", k, v) } } - return b[:len(b)-1] + if l := len(b); l > 0 { + return b[:l-1] + } + return b } -func (n *node) appendDOT(dot []byte, group string) ([]byte, error) { - codecName, ok := n.Codec["codec_name"] - if !ok { - return nil, fmt.Errorf("codec_name not found in Codec map") - } - - dot = fmt.Appendf(dot, "%d [group=%s, label=%q, title=%q];\n", n.ID, group, codecName, n.codec()) +func (n *node) appendDOT(dot []byte, group string) []byte { + dot = fmt.Appendf(dot, "%d [group=%s, label=%q, title=%q];\n", n.ID, group, n.name(), n.codec()) //for _, sink := range n.Childs { // dot = fmt.Appendf(dot, "%d -> %d;\n", n.ID, sink) //} - return dot, nil + return dot } type conn struct { @@ -116,7 +121,7 @@ func (c *conn) appendDOT(dot []byte, group string) []byte { for _, recv := range c.Receivers { dot = fmt.Appendf(dot, "%d -> %d [label=%q];\n", c.ID, recv.ID, humanBytes(recv.Bytes)) - dot, _ = recv.appendDOT(dot, "node") // TODO: handle error for debug purposes + dot = recv.appendDOT(dot, "node") } for _, send := range c.Senders { dot = fmt.Appendf(dot, "%d -> %d [label=%q];\n", send.Parent, c.ID, humanBytes(send.Bytes)) diff --git a/pkg/core/codec.go b/pkg/core/codec.go index d07b8b74..9c6c6b79 100644 --- a/pkg/core/codec.go +++ b/pkg/core/codec.go @@ -69,8 +69,14 @@ func FFmpegCodecName(name string) string { return "vp9" case CodecAV1: return "av1" + case CodecELD: + return "aac/eld" + case CodecFLAC: + return "flac" + case CodecMP3: + return "mp3" } - return "" + return name } func (c *Codec) String() (s string) {