From 888eefd5c8bc0e7a326eb2f60129cc9d021417e8 Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Tue, 21 Apr 2026 01:36:29 +0300 Subject: [PATCH] feat: add configurable dimensions to ffmpeg encoder and validate frame size dynamically --- internal/transport/videochannel/ffmpeg.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/transport/videochannel/ffmpeg.go b/internal/transport/videochannel/ffmpeg.go index 9013761..5b61af6 100644 --- a/internal/transport/videochannel/ffmpeg.go +++ b/internal/transport/videochannel/ffmpeg.go @@ -19,7 +19,8 @@ import ( ) const ( - ffmpegFrameTimeout = 10 * time.Second + ffmpegFrameTimeout = 10 * time.Second + defaultVideoBitrate = "2048k" ) var ( @@ -112,6 +113,8 @@ type ffmpegEncoder struct { stdin io.WriteCloser stderr *bytes.Buffer frames chan []byte + width int + height int closed atomic.Bool closeOnce sync.Once errMu sync.Mutex @@ -162,6 +165,8 @@ func newFFmpegEncoder(spec codecSpec, width, height, fps int, bitrate string) (* stdin: stdin, stderr: stderr, frames: make(chan []byte, 8), + width: width, + height: height, } go enc.readIVF(stdout) @@ -169,8 +174,8 @@ func newFFmpegEncoder(spec codecSpec, width, height, fps int, bitrate string) (* } func (e *ffmpegEncoder) EncodeFrame(frame []byte) ([]byte, error) { - if len(frame) != logicalFrameBytes { - return nil, fmt.Errorf("unexpected encoder frame size: %d", len(frame)) + if len(frame) != e.width*e.height { + return nil, fmt.Errorf("unexpected encoder frame size: %d (expected %d)", len(frame), e.width*e.height) } if err := e.processErr(); err != nil { return nil, err