Merged in writerate (pull request #421)

revid: remove writerate parameter and change rate for audio

Approved-by: Saxon Milton
This commit is contained in:
Trek Hopton 2020-08-14 03:56:04 +00:00
commit 9f4e7439d1
8 changed files with 9 additions and 33 deletions

View File

@ -191,7 +191,7 @@ func TestEncodePcm(t *testing.T) {
sampleSize := 2 sampleSize := 2
blockSize := 16000 blockSize := 16000
writeFreq := float64(sampleRate*sampleSize) / float64(blockSize) writeFreq := float64(sampleRate*sampleSize) / float64(blockSize)
e, err := NewEncoder(nopCloser{&buf}, (*testLogger)(t), PacketBasedPSI(10), Rate(int(writeFreq)), MediaType(EncodeAudio)) e, err := NewEncoder(nopCloser{&buf}, (*testLogger)(t), PacketBasedPSI(10), Rate(writeFreq), MediaType(EncodeAudio))
if err != nil { if err != nil {
t.Fatalf("could not create MTS encoder, failed with error: %v", err) t.Fatalf("could not create MTS encoder, failed with error: %v", err)
} }

View File

@ -97,12 +97,12 @@ func MediaType(mt int) func(*Encoder) error {
// Rate is an option that can be passed to NewEncoder. It is used to specifiy // Rate is an option that can be passed to NewEncoder. It is used to specifiy
// the rate at which the access units should be played in playback. This will // the rate at which the access units should be played in playback. This will
// be used to create timestamps and counts such as PTS and PCR. // be used to create timestamps and counts such as PTS and PCR.
func Rate(r int) func(*Encoder) error { func Rate(r float64) func(*Encoder) error {
return func(e *Encoder) error { return func(e *Encoder) error {
if r < 1 || r > 60 { if r < 1 || r > 60 {
return ErrInvalidRate return ErrInvalidRate
} }
e.writePeriod = time.Duration(float64(time.Second) / float64(r)) e.writePeriod = time.Duration(float64(time.Second) / r)
return nil return nil
} }
} }

View File

@ -230,9 +230,8 @@ type Config struct {
// qualityStandard, qualityFair, qualityGood, qualityGreat and qualityExcellent. // qualityStandard, qualityFair, qualityGood, qualityGreat and qualityExcellent.
VBRQuality Quality VBRQuality Quality
VerticalFlip bool // VerticalFlip flips video vertically for Raspivid input. VerticalFlip bool // VerticalFlip flips video vertically for Raspivid input.
Width uint // Width defines the input video width Raspivid input. Width uint // Width defines the input video width Raspivid input.
WriteRate float64 // WriteRate is how many times a second revid encoders will be written to.
} }
// Validate checks for any errors in the config fields and defaults settings // Validate checks for any errors in the config fields and defaults settings

View File

@ -51,7 +51,6 @@ func TestValidate(t *testing.T) {
BurstPeriod: defaultBurstPeriod, BurstPeriod: defaultBurstPeriod,
MinFrames: defaultMinFrames, MinFrames: defaultMinFrames,
FrameRate: defaultFrameRate, FrameRate: defaultFrameRate,
WriteRate: defaultWriteRate,
ClipDuration: defaultClipDuration, ClipDuration: defaultClipDuration,
PSITime: defaultPSITime, PSITime: defaultPSITime,
FileFPS: defaultFileFPS, FileFPS: defaultFileFPS,

View File

@ -130,7 +130,6 @@ var params = []Param{
{N: "VBRQuality", BT: "uint8", E: []string{"Standard", "Fair", "Good", "Great", "Excellent"}}, {N: "VBRQuality", BT: "uint8", E: []string{"Standard", "Fair", "Good", "Great", "Excellent"}},
{N: "VerticalFlip", BT: "bool"}, {N: "VerticalFlip", BT: "bool"},
{N: "Width", BT: "uint", Min: 640, Max: 1920}, {N: "Width", BT: "uint", Min: 640, Max: 1920},
{N: "WriteRate", BT: "float64"},
} }
const fileHeader = ` const fileHeader = `

View File

@ -915,16 +915,3 @@ func (w *Width) Set(val string) error {
*w = Width(_v) *w = Width(_v)
return nil 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
}

View File

@ -49,7 +49,6 @@ const (
defaultBurstPeriod = 10 // Seconds defaultBurstPeriod = 10 // Seconds
defaultMinFrames = 100 defaultMinFrames = 100
defaultFrameRate = 25 defaultFrameRate = 25
defaultWriteRate = 25
defaultClipDuration = 0 defaultClipDuration = 0
defaultPSITime = 2 defaultPSITime = 2
defaultFileFPS = 0 defaultFileFPS = 0
@ -536,14 +535,6 @@ var Variables = []struct {
Type_: "uint", Type_: "uint",
Update: func(c *Config, v string) { c.Width = parseUint("Width", v, c) }, Update: func(c *Config, v string) { c.Width = parseUint("Width", v, c) },
}, },
{
Name: "WriteRate",
Type_: "uint",
Update: func(c *Config, v string) { c.WriteRate = float64(parseUint("WriteRate", v, c)) },
Validate: func(c *Config) {
c.WriteRate = float64(lessThanOrEqual("WriteRate", uint(c.WriteRate), 0, c, defaultWriteRate))
},
},
} }
func parseUint(n, v string, c *Config) uint { func parseUint(n, v string, c *Config) uint {

View File

@ -169,7 +169,7 @@ func (r *Revid) reset(c config.Config) error {
r.cfg.Logger.Log(logger.Debug, "setting up revid pipeline") r.cfg.Logger.Log(logger.Debug, "setting up revid pipeline")
err = r.setupPipeline( err = r.setupPipeline(
func(dst io.WriteCloser, fps float64) (io.WriteCloser, error) { func(dst io.WriteCloser, rate float64) (io.WriteCloser, error) {
var st int var st int
var encOptions []func(*mts.Encoder) error var encOptions []func(*mts.Encoder) error
@ -212,10 +212,11 @@ func (r *Revid) reset(c config.Config) error {
case config.InputAudio: case config.InputAudio:
st = mts.EncodeAudio st = mts.EncodeAudio
encOptions = append(encOptions, mts.TimeBasedPSI(time.Duration(r.cfg.PSITime)*time.Second)) encOptions = append(encOptions, mts.TimeBasedPSI(time.Duration(r.cfg.PSITime)*time.Second))
rate = 1 / r.cfg.RecPeriod
default: default:
panic("unknown input type") panic("unknown input type")
} }
encOptions = append(encOptions, mts.MediaType(st), mts.Rate(int(fps))) encOptions = append(encOptions, mts.MediaType(st), mts.Rate(rate))
return mts.NewEncoder(dst, &encLog{r.cfg.Logger}, encOptions...) return mts.NewEncoder(dst, &encLog{r.cfg.Logger}, encOptions...)
}, },
func(dst io.WriteCloser, fps int) (io.WriteCloser, error) { func(dst io.WriteCloser, fps int) (io.WriteCloser, error) {
@ -311,7 +312,7 @@ func (r *Revid) setupPipeline(mtsEnc func(dst io.WriteCloser, rate float64) (io.
// as a destination. // as a destination.
if len(mtsSenders) != 0 { if len(mtsSenders) != 0 {
mw := multiWriter(mtsSenders...) mw := multiWriter(mtsSenders...)
e, _ := mtsEnc(mw, r.cfg.WriteRate) e, _ := mtsEnc(mw, float64(r.cfg.FrameRate))
encoders = append(encoders, e) encoders = append(encoders, e)
} }