mirror of https://bitbucket.org/ausocean/av.git
904 lines
19 KiB
Go
904 lines
19 KiB
Go
|
/*
|
||
|
DESCRIPTION
|
||
|
Code generated by "go build generate_parameters.go; ./generate_parameters”; DO NOT EDIT.
|
||
|
|
||
|
parameters.go contains implementations of the Parameter interface for all
|
||
|
parameter types required by the configuration struct.
|
||
|
|
||
|
AUTHORS
|
||
|
Saxon Nelson-Milton <saxon@ausocean.org>
|
||
|
|
||
|
LICENSE
|
||
|
Copyright (C) 2020 the Australian Ocean Lab (AusOcean)
|
||
|
|
||
|
It is free software: you can redistribute it and/or modify them
|
||
|
under the terms of the GNU General Public License as published by the
|
||
|
Free Software Foundation, either version 3 of the License, or (at your
|
||
|
option) any later version.
|
||
|
|
||
|
It is distributed in the hope that it will be useful, but WITHOUT
|
||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||
|
for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with revid in gpl.txt. If not, see http://www.gnu.org/licenses.
|
||
|
*/
|
||
|
|
||
|
package parameter
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type Parameter interface {
|
||
|
Type() string
|
||
|
Set(val string) error
|
||
|
}
|
||
|
|
||
|
type AutoWhiteBalance uint8
|
||
|
|
||
|
const (
|
||
|
AutoWhiteBalanceOff AutoWhiteBalance = iota
|
||
|
AutoWhiteBalanceAuto
|
||
|
AutoWhiteBalanceSun
|
||
|
AutoWhiteBalanceCloud
|
||
|
AutoWhiteBalanceShade
|
||
|
AutoWhiteBalanceTungsten
|
||
|
AutoWhiteBalanceFluorescent
|
||
|
AutoWhiteBalanceIncandescent
|
||
|
AutoWhiteBalanceFlash
|
||
|
AutoWhiteBalanceHorizon
|
||
|
)
|
||
|
|
||
|
func (a *AutoWhiteBalance) Type() string {
|
||
|
return "enum:Off,Auto,Sun,Cloud,Shade,Tungsten,Fluorescent,Incandescent,Flash,Horizon"
|
||
|
}
|
||
|
func (a *AutoWhiteBalance) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Off":
|
||
|
*a = AutoWhiteBalanceOff
|
||
|
case "Auto":
|
||
|
*a = AutoWhiteBalanceAuto
|
||
|
case "Sun":
|
||
|
*a = AutoWhiteBalanceSun
|
||
|
case "Cloud":
|
||
|
*a = AutoWhiteBalanceCloud
|
||
|
case "Shade":
|
||
|
*a = AutoWhiteBalanceShade
|
||
|
case "Tungsten":
|
||
|
*a = AutoWhiteBalanceTungsten
|
||
|
case "Fluorescent":
|
||
|
*a = AutoWhiteBalanceFluorescent
|
||
|
case "Incandescent":
|
||
|
*a = AutoWhiteBalanceIncandescent
|
||
|
case "Flash":
|
||
|
*a = AutoWhiteBalanceFlash
|
||
|
case "Horizon":
|
||
|
*a = AutoWhiteBalanceHorizon
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised AutoWhiteBalance: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type BitDepth uint
|
||
|
|
||
|
func (b *BitDepth) Type() string { return "uint" }
|
||
|
func (b *BitDepth) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*b = BitDepth(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Bitrate uint
|
||
|
|
||
|
func (b *Bitrate) Type() string { return "uint" }
|
||
|
func (b *Bitrate) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*b = Bitrate(_v)
|
||
|
|
||
|
if *b < 1000 || *b > 10000000 {
|
||
|
return fmt.Errorf("invalid value %v", *b)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Brightness uint
|
||
|
|
||
|
func (b *Brightness) Type() string { return "uint" }
|
||
|
func (b *Brightness) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*b = Brightness(_v)
|
||
|
|
||
|
if *b < 0 || *b > 100 {
|
||
|
return fmt.Errorf("invalid value %v", *b)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type BurstPeriod time.Duration
|
||
|
|
||
|
func (b *BurstPeriod) Type() string { return "time.Duration" }
|
||
|
func (b *BurstPeriod) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*b = BurstPeriod(time.Duration(_v) * time.Second)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type CBR bool
|
||
|
|
||
|
func (c *CBR) Type() string { return "bool" }
|
||
|
func (c *CBR) Set(val string) error {
|
||
|
switch val {
|
||
|
case "true":
|
||
|
*c = true
|
||
|
case "false":
|
||
|
*c = false
|
||
|
default:
|
||
|
return fmt.Errorf("not boolean value: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type CameraChan uint8
|
||
|
|
||
|
const (
|
||
|
CameraChanChannel1 CameraChan = iota
|
||
|
CameraChanChannel2
|
||
|
)
|
||
|
|
||
|
func (c *CameraChan) Type() string { return "enum:Channel1,Channel2" }
|
||
|
func (c *CameraChan) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Channel1":
|
||
|
*c = CameraChanChannel1
|
||
|
case "Channel2":
|
||
|
*c = CameraChanChannel2
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised CameraChan: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type CameraIP string
|
||
|
|
||
|
func (c *CameraIP) Type() string { return "string" }
|
||
|
func (c *CameraIP) Set(val string) error {
|
||
|
*c = CameraIP(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Channels uint
|
||
|
|
||
|
func (c *Channels) Type() string { return "uint" }
|
||
|
func (c *Channels) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*c = Channels(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type ClipDuration time.Duration
|
||
|
|
||
|
func (c *ClipDuration) Type() string { return "time.Duration" }
|
||
|
func (c *ClipDuration) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*c = ClipDuration(time.Duration(_v) * time.Second)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Codec uint8
|
||
|
|
||
|
const (
|
||
|
CodecH264 Codec = iota
|
||
|
CodecH265
|
||
|
CodecMJPEG
|
||
|
CodecPCM
|
||
|
CodecADPCM
|
||
|
)
|
||
|
|
||
|
func (c *Codec) Type() string { return "enum:H264,H265,MJPEG,PCM,ADPCM" }
|
||
|
func (c *Codec) Set(val string) error {
|
||
|
switch val {
|
||
|
case "H264":
|
||
|
*c = CodecH264
|
||
|
case "H265":
|
||
|
*c = CodecH265
|
||
|
case "MJPEG":
|
||
|
*c = CodecMJPEG
|
||
|
case "PCM":
|
||
|
*c = CodecPCM
|
||
|
case "ADPCM":
|
||
|
*c = CodecADPCM
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Codec: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Exposure uint8
|
||
|
|
||
|
const (
|
||
|
ExposureAuto Exposure = iota
|
||
|
ExposureNight
|
||
|
ExposureNightPreview
|
||
|
ExposureBackLight
|
||
|
ExposureSpotLight
|
||
|
ExposureSports
|
||
|
ExposureSnow
|
||
|
ExposureBeach
|
||
|
ExposureVeryLong
|
||
|
ExposureFixedFPS
|
||
|
ExposureAntiShake
|
||
|
ExposureFireworks
|
||
|
)
|
||
|
|
||
|
func (e *Exposure) Type() string {
|
||
|
return "enum:Auto,Night,NightPreview,BackLight,SpotLight,Sports,Snow,Beach,VeryLong,FixedFPS,AntiShake,Fireworks"
|
||
|
}
|
||
|
func (e *Exposure) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Auto":
|
||
|
*e = ExposureAuto
|
||
|
case "Night":
|
||
|
*e = ExposureNight
|
||
|
case "NightPreview":
|
||
|
*e = ExposureNightPreview
|
||
|
case "BackLight":
|
||
|
*e = ExposureBackLight
|
||
|
case "SpotLight":
|
||
|
*e = ExposureSpotLight
|
||
|
case "Sports":
|
||
|
*e = ExposureSports
|
||
|
case "Snow":
|
||
|
*e = ExposureSnow
|
||
|
case "Beach":
|
||
|
*e = ExposureBeach
|
||
|
case "VeryLong":
|
||
|
*e = ExposureVeryLong
|
||
|
case "FixedFPS":
|
||
|
*e = ExposureFixedFPS
|
||
|
case "AntiShake":
|
||
|
*e = ExposureAntiShake
|
||
|
case "Fireworks":
|
||
|
*e = ExposureFireworks
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Exposure: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type FileFPS uint
|
||
|
|
||
|
func (f *FileFPS) Type() string { return "uint" }
|
||
|
func (f *FileFPS) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*f = FileFPS(_v)
|
||
|
|
||
|
if *f < 1 || *f > 30 {
|
||
|
return fmt.Errorf("invalid value %v", *f)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Filter uint8
|
||
|
|
||
|
const (
|
||
|
FilterNoOp Filter = iota
|
||
|
FilterMOG
|
||
|
FilterVariableFPS
|
||
|
FilterKNN
|
||
|
FilterDifference
|
||
|
FilterBasic
|
||
|
)
|
||
|
|
||
|
func (f *Filter) Type() string { return "enum:NoOp,MOG,VariableFPS,KNN,Difference,Basic" }
|
||
|
func (f *Filter) Set(val string) error {
|
||
|
switch val {
|
||
|
case "NoOp":
|
||
|
*f = FilterNoOp
|
||
|
case "MOG":
|
||
|
*f = FilterMOG
|
||
|
case "VariableFPS":
|
||
|
*f = FilterVariableFPS
|
||
|
case "KNN":
|
||
|
*f = FilterKNN
|
||
|
case "Difference":
|
||
|
*f = FilterDifference
|
||
|
case "Basic":
|
||
|
*f = FilterBasic
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Filter: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type FrameRate uint
|
||
|
|
||
|
func (f *FrameRate) Type() string { return "uint" }
|
||
|
func (f *FrameRate) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*f = FrameRate(_v)
|
||
|
|
||
|
if *f < 1 || *f > 30 {
|
||
|
return fmt.Errorf("invalid value %v", *f)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type HTTPAddress string
|
||
|
|
||
|
func (h *HTTPAddress) Type() string { return "string" }
|
||
|
func (h *HTTPAddress) Set(val string) error {
|
||
|
*h = HTTPAddress(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Height uint
|
||
|
|
||
|
func (h *Height) Type() string { return "uint" }
|
||
|
func (h *Height) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*h = Height(_v)
|
||
|
|
||
|
if *h < 360 || *h > 1080 {
|
||
|
return fmt.Errorf("invalid value %v", *h)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type HorizontalFlip bool
|
||
|
|
||
|
func (h *HorizontalFlip) Type() string { return "bool" }
|
||
|
func (h *HorizontalFlip) Set(val string) error {
|
||
|
switch val {
|
||
|
case "true":
|
||
|
*h = true
|
||
|
case "false":
|
||
|
*h = false
|
||
|
default:
|
||
|
return fmt.Errorf("not boolean value: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Input uint8
|
||
|
|
||
|
const (
|
||
|
InputFile Input = iota
|
||
|
InputRaspivid
|
||
|
InputWebcam
|
||
|
InputRTSP
|
||
|
)
|
||
|
|
||
|
func (i *Input) Type() string { return "enum:File,Raspivid,Webcam,RTSP" }
|
||
|
func (i *Input) Set(val string) error {
|
||
|
switch val {
|
||
|
case "File":
|
||
|
*i = InputFile
|
||
|
case "Raspivid":
|
||
|
*i = InputRaspivid
|
||
|
case "Webcam":
|
||
|
*i = InputWebcam
|
||
|
case "RTSP":
|
||
|
*i = InputRTSP
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Input: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type InputPath string
|
||
|
|
||
|
func (i *InputPath) Type() string { return "string" }
|
||
|
func (i *InputPath) Set(val string) error {
|
||
|
*i = InputPath(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Level uint8
|
||
|
|
||
|
const (
|
||
|
LevelDebug Level = iota
|
||
|
LevelInfo
|
||
|
LevelWarning
|
||
|
LevelError
|
||
|
LevelFatal
|
||
|
)
|
||
|
|
||
|
func (l *Level) Type() string { return "enum:Debug,Info,Warning,Error,Fatal" }
|
||
|
func (l *Level) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Debug":
|
||
|
*l = LevelDebug
|
||
|
case "Info":
|
||
|
*l = LevelInfo
|
||
|
case "Warning":
|
||
|
*l = LevelWarning
|
||
|
case "Error":
|
||
|
*l = LevelError
|
||
|
case "Fatal":
|
||
|
*l = LevelFatal
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Level: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MinFPS uint
|
||
|
|
||
|
func (m *MinFPS) Type() string { return "uint" }
|
||
|
func (m *MinFPS) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MinFPS(_v)
|
||
|
|
||
|
if *m < 1 || *m > 30 {
|
||
|
return fmt.Errorf("invalid value %v", *m)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MinFrames uint
|
||
|
|
||
|
func (m *MinFrames) Type() string { return "uint" }
|
||
|
func (m *MinFrames) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MinFrames(_v)
|
||
|
|
||
|
if *m < 0 || *m > 1000 {
|
||
|
return fmt.Errorf("invalid value %v", *m)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Mode uint8
|
||
|
|
||
|
const (
|
||
|
ModeNormal Mode = iota
|
||
|
ModePaused
|
||
|
ModeBurst
|
||
|
ModeLoop
|
||
|
)
|
||
|
|
||
|
func (m *Mode) Type() string { return "enum:Normal,Paused,Burst,Loop" }
|
||
|
func (m *Mode) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Normal":
|
||
|
*m = ModeNormal
|
||
|
case "Paused":
|
||
|
*m = ModePaused
|
||
|
case "Burst":
|
||
|
*m = ModeBurst
|
||
|
case "Loop":
|
||
|
*m = ModeLoop
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Mode: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionDownscaling uint
|
||
|
|
||
|
func (m *MotionDownscaling) Type() string { return "uint" }
|
||
|
func (m *MotionDownscaling) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MotionDownscaling(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionHistory uint
|
||
|
|
||
|
func (m *MotionHistory) Type() string { return "uint" }
|
||
|
func (m *MotionHistory) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MotionHistory(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionInterval uint
|
||
|
|
||
|
func (m *MotionInterval) Type() string { return "uint" }
|
||
|
func (m *MotionInterval) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MotionInterval(_v)
|
||
|
|
||
|
if *m < 0 || *m > 30 {
|
||
|
return fmt.Errorf("invalid value %v", *m)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionKernel uint
|
||
|
|
||
|
func (m *MotionKernel) Type() string { return "uint" }
|
||
|
func (m *MotionKernel) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MotionKernel(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionMinArea float64
|
||
|
|
||
|
func (m *MotionMinArea) Type() string { return "float64" }
|
||
|
func (m *MotionMinArea) Set(val string) error {
|
||
|
_v, err := strconv.ParseFloat(val, 64)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to float: %w", err)
|
||
|
}
|
||
|
*m = MotionMinArea(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionPixels uint
|
||
|
|
||
|
func (m *MotionPixels) Type() string { return "uint" }
|
||
|
func (m *MotionPixels) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*m = MotionPixels(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type MotionThreshold float64
|
||
|
|
||
|
func (m *MotionThreshold) Type() string { return "float64" }
|
||
|
func (m *MotionThreshold) Set(val string) error {
|
||
|
_v, err := strconv.ParseFloat(val, 64)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to float: %w", err)
|
||
|
}
|
||
|
*m = MotionThreshold(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Output uint8
|
||
|
|
||
|
const (
|
||
|
OutputHTTP Output = iota
|
||
|
OutputRTMP
|
||
|
OutputRTP
|
||
|
OutputFile
|
||
|
)
|
||
|
|
||
|
func (o *Output) Type() string { return "enum:HTTP,RTMP,RTP,File" }
|
||
|
func (o *Output) Set(val string) error {
|
||
|
switch val {
|
||
|
case "HTTP":
|
||
|
*o = OutputHTTP
|
||
|
case "RTMP":
|
||
|
*o = OutputRTMP
|
||
|
case "RTP":
|
||
|
*o = OutputRTP
|
||
|
case "File":
|
||
|
*o = OutputFile
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Output: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type OutputPath string
|
||
|
|
||
|
func (o *OutputPath) Type() string { return "string" }
|
||
|
func (o *OutputPath) Set(val string) error {
|
||
|
*o = OutputPath(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Outputs []Output
|
||
|
|
||
|
func (o *Outputs) Type() string { return "enum:HTTP,RTMP,RTP,File" }
|
||
|
func (o *Outputs) Set(val string) error {
|
||
|
vals := strings.Split(val, ",")
|
||
|
*o = make([]Output, len(vals))
|
||
|
|
||
|
for i, v := range vals {
|
||
|
switch v {
|
||
|
case "HTTP":
|
||
|
(*o)[i] = OutputHTTP
|
||
|
case "RTMP":
|
||
|
(*o)[i] = OutputRTMP
|
||
|
case "RTP":
|
||
|
(*o)[i] = OutputRTP
|
||
|
case "File":
|
||
|
(*o)[i] = OutputFile
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised Outputs: %s", val)
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type PSITime time.Duration
|
||
|
|
||
|
func (p *PSITime) Type() string { return "time.Duration" }
|
||
|
func (p *PSITime) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*p = PSITime(time.Duration(_v) * time.Second)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Quantization uint
|
||
|
|
||
|
func (q *Quantization) Type() string { return "uint" }
|
||
|
func (q *Quantization) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*q = Quantization(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RBCapacity uint
|
||
|
|
||
|
func (r *RBCapacity) Type() string { return "uint" }
|
||
|
func (r *RBCapacity) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*r = RBCapacity(_v)
|
||
|
|
||
|
if *r < 1000000 || *r > 100000000 {
|
||
|
return fmt.Errorf("invalid value %v", *r)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RBMaxElements uint
|
||
|
|
||
|
func (r *RBMaxElements) Type() string { return "uint" }
|
||
|
func (r *RBMaxElements) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*r = RBMaxElements(_v)
|
||
|
|
||
|
if *r < 0 || *r > 4294967295 {
|
||
|
return fmt.Errorf("invalid value %v", *r)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RBWriteTimeout time.Duration
|
||
|
|
||
|
func (r *RBWriteTimeout) Type() string { return "time.Duration" }
|
||
|
func (r *RBWriteTimeout) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*r = RBWriteTimeout(time.Duration(_v) * time.Second)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RTMPURL string
|
||
|
|
||
|
func (r *RTMPURL) Type() string { return "string" }
|
||
|
func (r *RTMPURL) Set(val string) error {
|
||
|
*r = RTMPURL(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RTPAddress string
|
||
|
|
||
|
func (r *RTPAddress) Type() string { return "string" }
|
||
|
func (r *RTPAddress) Set(val string) error {
|
||
|
*r = RTPAddress(val)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type RecPeriod float64
|
||
|
|
||
|
func (r *RecPeriod) Type() string { return "float64" }
|
||
|
func (r *RecPeriod) Set(val string) error {
|
||
|
_v, err := strconv.ParseFloat(val, 64)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to float: %w", err)
|
||
|
}
|
||
|
*r = RecPeriod(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Rotation uint
|
||
|
|
||
|
func (r *Rotation) Type() string { return "uint" }
|
||
|
func (r *Rotation) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*r = Rotation(_v)
|
||
|
|
||
|
if *r < 0 || *r > 359 {
|
||
|
return fmt.Errorf("invalid value %v", *r)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type SampleRate uint
|
||
|
|
||
|
func (s *SampleRate) Type() string { return "uint" }
|
||
|
func (s *SampleRate) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*s = SampleRate(_v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Saturation int
|
||
|
|
||
|
func (s *Saturation) Type() string { return "int" }
|
||
|
func (s *Saturation) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*s = Saturation(_v)
|
||
|
|
||
|
if *s < -50 || *s > 50 {
|
||
|
return fmt.Errorf("invalid value %v", *s)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type ShowWindows bool
|
||
|
|
||
|
func (s *ShowWindows) Type() string { return "bool" }
|
||
|
func (s *ShowWindows) Set(val string) error {
|
||
|
switch val {
|
||
|
case "true":
|
||
|
*s = true
|
||
|
case "false":
|
||
|
*s = false
|
||
|
default:
|
||
|
return fmt.Errorf("not boolean value: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type VBRBitrate uint
|
||
|
|
||
|
func (v *VBRBitrate) Type() string { return "uint" }
|
||
|
func (v *VBRBitrate) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*v = VBRBitrate(_v)
|
||
|
|
||
|
if *v < 1 || *v > 30 {
|
||
|
return fmt.Errorf("invalid value %v", *v)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type VBRQuality uint8
|
||
|
|
||
|
const (
|
||
|
VBRQualityStandard VBRQuality = iota
|
||
|
VBRQualityFair
|
||
|
VBRQualityGood
|
||
|
VBRQualityGreat
|
||
|
VBRQualityExcellent
|
||
|
)
|
||
|
|
||
|
func (v *VBRQuality) Type() string { return "enum:Standard,Fair,Good,Great,Excellent" }
|
||
|
func (v *VBRQuality) Set(val string) error {
|
||
|
switch val {
|
||
|
case "Standard":
|
||
|
*v = VBRQualityStandard
|
||
|
case "Fair":
|
||
|
*v = VBRQualityFair
|
||
|
case "Good":
|
||
|
*v = VBRQualityGood
|
||
|
case "Great":
|
||
|
*v = VBRQualityGreat
|
||
|
case "Excellent":
|
||
|
*v = VBRQualityExcellent
|
||
|
default:
|
||
|
return fmt.Errorf("unrecognised VBRQuality: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type VerticalFlip bool
|
||
|
|
||
|
func (v *VerticalFlip) Type() string { return "bool" }
|
||
|
func (v *VerticalFlip) Set(val string) error {
|
||
|
switch val {
|
||
|
case "true":
|
||
|
*v = true
|
||
|
case "false":
|
||
|
*v = false
|
||
|
default:
|
||
|
return fmt.Errorf("not boolean value: %s", val)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type Width uint
|
||
|
|
||
|
func (w *Width) Type() string { return "uint" }
|
||
|
func (w *Width) Set(val string) error {
|
||
|
_v, err := strconv.Atoi(val)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to int: %w", err)
|
||
|
}
|
||
|
*w = Width(_v)
|
||
|
|
||
|
if *w < 640 || *w > 1920 {
|
||
|
return fmt.Errorf("invalid value %v", *w)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type WriteRate float64
|
||
|
|
||
|
func (w *WriteRate) Type() string { return "float64" }
|
||
|
func (w *WriteRate) Set(val string) error {
|
||
|
_v, err := strconv.ParseFloat(val, 64)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert set string to float: %w", err)
|
||
|
}
|
||
|
*w = WriteRate(_v)
|
||
|
return nil
|
||
|
}
|