From 220164501af9cb178e3f81a3139469e01e2995fc Mon Sep 17 00:00:00 2001 From: Julie Krasnick <99275379+jckras@users.noreply.github.com> Date: Wed, 4 Sep 2024 19:52:58 -0400 Subject: [PATCH] RSDK-5835: Remove libvpx dependency (#4342) --- etc/setup.sh | 3 +- gostream/codec/vpx/encoder.go | 94 ----------------------------------- gostream/codec/vpx/utils.go | 40 --------------- gostream/shell.nix | 2 +- 4 files changed, 2 insertions(+), 137 deletions(-) delete mode 100644 gostream/codec/vpx/encoder.go delete mode 100644 gostream/codec/vpx/utils.go diff --git a/etc/setup.sh b/etc/setup.sh index eff80e9ce83..81ad693e71a 100755 --- a/etc/setup.sh +++ b/etc/setup.sh @@ -30,7 +30,7 @@ do_piOS(){ apt-get update && apt-get install -y build-essential nodejs libnlopt-dev libx264-dev libtensorflowlite-dev ffmpeg libjpeg62-turbo-dev # Install Gostream dependencies - sudo apt-get install -y --no-install-recommends libopus-dev libvpx-dev libx11-dev libxext-dev libopusfile-dev + sudo apt-get install -y --no-install-recommends libopus-dev libx11-dev libxext-dev libopusfile-dev # Install backports apt-get install -y -t $(grep VERSION_CODENAME /etc/os-release | cut -d= -f2)-backports golang-go @@ -173,7 +173,6 @@ do_brew(){ brew "licensefinder" brew "opus" brew "opusfile" - brew "libvpx" brew "tensorflowlite" # Needs to be last EOS diff --git a/gostream/codec/vpx/encoder.go b/gostream/codec/vpx/encoder.go deleted file mode 100644 index 20e6612cb3c..00000000000 --- a/gostream/codec/vpx/encoder.go +++ /dev/null @@ -1,94 +0,0 @@ -// Package vpx contains the vpx video codec. -package vpx - -import ( - "context" - "fmt" - "image" - - "github.com/pion/mediadevices/pkg/codec" - "github.com/pion/mediadevices/pkg/codec/vpx" - "github.com/pion/mediadevices/pkg/prop" - - ourcodec "go.viam.com/rdk/gostream/codec" - "go.viam.com/rdk/logging" -) - -type encoder struct { - codec codec.ReadCloser - img image.Image - logger logging.Logger -} - -// Version determines the version of a vpx codec. -type Version string - -// The set of allowed vpx versions. -const ( - Version8 Version = "vp8" - Version9 Version = "vp9" -) - -// Gives suitable results. Probably want to make this configurable this in the future. -const bitrate = 3_200_000 - -// NewEncoder returns a vpx encoder of the given type that can encode images of the given width and height. It will -// also ensure that it produces key frames at the given interval. -func NewEncoder(codecVersion Version, width, height, keyFrameInterval int, logger logging.Logger) (ourcodec.VideoEncoder, error) { - enc := &encoder{logger: logger} - - var builder codec.VideoEncoderBuilder - switch codecVersion { - case Version8: - params, err := vpx.NewVP8Params() - if err != nil { - return nil, err - } - builder = ¶ms - params.BitRate = bitrate - params.KeyFrameInterval = keyFrameInterval - case Version9: - params, err := vpx.NewVP9Params() - if err != nil { - return nil, err - } - builder = ¶ms - params.BitRate = bitrate - params.KeyFrameInterval = keyFrameInterval - default: - return nil, fmt.Errorf("unsupported vpx version: %s", codecVersion) - } - - codec, err := builder.BuildVideoEncoder(enc, prop.Media{ - Video: prop.Video{ - Width: width, - Height: height, - }, - }) - if err != nil { - return nil, err - } - enc.codec = codec - - return enc, nil -} - -// Read returns an image for codec to process. -func (v *encoder) Read() (img image.Image, release func(), err error) { - return v.img, nil, nil -} - -// Encode asks the codec to process the given image. -func (v *encoder) Encode(_ context.Context, img image.Image) ([]byte, error) { - v.img = img - data, release, err := v.codec.Read() - dataCopy := make([]byte, len(data)) - copy(dataCopy, data) - release() - return dataCopy, err -} - -// Close closes the encoder. -func (v *encoder) Close() error { - return v.codec.Close() -} diff --git a/gostream/codec/vpx/utils.go b/gostream/codec/vpx/utils.go deleted file mode 100644 index 5df607217e8..00000000000 --- a/gostream/codec/vpx/utils.go +++ /dev/null @@ -1,40 +0,0 @@ -package vpx - -import ( - "fmt" - - "go.viam.com/rdk/gostream" - "go.viam.com/rdk/gostream/codec" - "go.viam.com/rdk/logging" -) - -// DefaultStreamConfig configures vpx as the encoder for a stream. -var DefaultStreamConfig gostream.StreamConfig - -func init() { - DefaultStreamConfig.VideoEncoderFactory = NewEncoderFactory(Version8) -} - -// NewEncoderFactory returns a vpx factory for the given vpx codec. -func NewEncoderFactory(codecVersion Version) codec.VideoEncoderFactory { - return &factory{codecVersion} -} - -type factory struct { - codecVersion Version -} - -func (f *factory) New(width, height, keyFrameInterval int, logger logging.Logger) (codec.VideoEncoder, error) { - return NewEncoder(f.codecVersion, width, height, keyFrameInterval, logger) -} - -func (f *factory) MIMEType() string { - switch f.codecVersion { - case Version8: - return "video/vp8" - case Version9: - return "video/vp9" - default: - panic(fmt.Errorf("unknown codec version %q", f.codecVersion)) - } -} diff --git a/gostream/shell.nix b/gostream/shell.nix index 33621f0ee97..2c00f7a4662 100644 --- a/gostream/shell.nix +++ b/gostream/shell.nix @@ -4,7 +4,7 @@ pkgs.mkShell { buildInputs = - [ pkgs.which pkgs.htop pkgs.go pkgs.nodejs pkgs.pkg-config pkgs.libvpx pkgs.x264 pkgs.libopus ] + [ pkgs.which pkgs.htop pkgs.go pkgs.nodejs pkgs.pkg-config pkgs.x264 pkgs.libopus ] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.darwin.apple_sdk.frameworks.AVFoundation pkgs.darwin.apple_sdk.frameworks.CoreMedia