From b3c3b842c834394c935fbcf23068cf467825dab8 Mon Sep 17 00:00:00 2001 From: Saxon Date: Sun, 13 Oct 2019 18:25:36 +1030 Subject: [PATCH] input/gvctrl: moved unexported stuff from gvctrl.go to be more friendly to API users --- input/gvctrl/gvctrl.go | 89 ++++++++++--------------------------- input/gvctrl/gvctrl_test.go | 6 +-- input/gvctrl/utils.go | 47 ++++++++++++++++++-- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/input/gvctrl/gvctrl.go b/input/gvctrl/gvctrl.go index 5a60f6c3..818cf1cd 100644 --- a/input/gvctrl/gvctrl.go +++ b/input/gvctrl/gvctrl.go @@ -34,65 +34,6 @@ import ( "time" ) -type codec string - -const ( - codecH265 codec = "28" - codecH264 codec = "10" - codecMJPEG codec = "4" -) - -type quality string - -const ( - qualityStandard quality = "0" - qualityFair quality = "1" - qualityGood quality = "2" - qualityGreat quality = "3" - qualityExcellent quality = "4" -) - -const ( - res256 = "4480256" - res360 = "6400360" - res720 = "12800720" -) - -const ( - defaultCodec = codecH264 - defaultRes = "6400360" // 360p - defaultFrameRate = "25000" // 25 fps - defaultVBR = "0" // Variable bitrate off - defaultQuality = qualityGood - defaultVBRBitRate = "250000" // 512 kbps (lowest with 360p) - defaultCBRBitRate = "512000" - defaultRefresh = "2000" // 2 seconds -) - -type settings struct { - codec codec - res string - frameRate string - vbr string - quality quality - vbrBitRate string - cbrBitRate string - refresh string -} - -func newSettings() settings { - return settings{ - codec: defaultCodec, - res: defaultRes, - frameRate: defaultFrameRate, - vbr: defaultVBR, - quality: defaultQuality, - vbrBitRate: defaultVBRBitRate, - cbrBitRate: defaultCBRBitRate, - refresh: defaultRefresh, - } -} - type option func(s settings) (settings, error) func Set(host string, options ...option) error { @@ -144,14 +85,22 @@ func Set(host string, options ...option) error { return nil } -func Codec(c codec) option { +type Codec string + +const ( + CodecH265 Codec = "28" + CodecH264 Codec = "10" + CodecMJPEG Codec = "4" +) + +func CodecOut(c Codec) option { return func(s settings) (settings, error) { switch c { - case codecH265, codecH264, codecMJPEG: + case CodecH265, CodecH264, CodecMJPEG: s.codec = c return s, nil default: - return s, fmt.Errorf("unknown codec: %v", c) + return s, fmt.Errorf("unknown Codec: %v", c) } } } @@ -187,14 +136,24 @@ func VariableBitRate(b bool) option { } } -func VBRQuality(q quality) option { +type Quality string + +const ( + QualityStandard Quality = "0" + QualityFair Quality = "1" + QualityGood Quality = "2" + QualityGreat Quality = "3" + QualityExcellent Quality = "4" +) + +func VBRQuality(q Quality) option { return func(s settings) (settings, error) { switch q { - case qualityStandard, qualityFair, qualityGood, qualityGreat, qualityExcellent: + case QualityStandard, QualityFair, QualityGood, QualityGreat, QualityExcellent: s.quality = q return s, nil default: - return s, fmt.Errorf("invalid quality: %v", q) + return s, fmt.Errorf("invalid Quality: %v", q) } } } diff --git a/input/gvctrl/gvctrl_test.go b/input/gvctrl/gvctrl_test.go index e11ca244..92bbb5a8 100644 --- a/input/gvctrl/gvctrl_test.go +++ b/input/gvctrl/gvctrl_test.go @@ -297,7 +297,7 @@ func TestPopulateForm(t *testing.T) { }, { in: settings{ - codec: codecH265, + codec: CodecH265, res: defaultRes, frameRate: defaultFrameRate, vbr: defaultVBR, @@ -310,7 +310,7 @@ func TestPopulateForm(t *testing.T) { }, { in: settings{ - codec: codecMJPEG, + codec: CodecMJPEG, res: defaultRes, frameRate: defaultFrameRate, vbr: defaultVBR, @@ -323,7 +323,7 @@ func TestPopulateForm(t *testing.T) { }, { in: settings{ - codec: codecH264, + codec: CodecH264, res: defaultRes, frameRate: defaultFrameRate, vbr: "1", diff --git a/input/gvctrl/utils.go b/input/gvctrl/utils.go index 74b527d5..1ca158da 100644 --- a/input/gvctrl/utils.go +++ b/input/gvctrl/utils.go @@ -34,6 +34,47 @@ import ( "strings" ) +const ( + res256 = "4480256" + res360 = "6400360" + res720 = "12800720" +) + +const ( + defaultCodec = CodecH264 + defaultRes = "6400360" // 360p + defaultFrameRate = "25000" // 25 fps + defaultVBR = "0" // Variable bitrate off + defaultQuality = QualityGood + defaultVBRBitRate = "250000" // 512 kbps (lowest with 360p) + defaultCBRBitRate = "512000" + defaultRefresh = "2000" // 2 seconds +) + +type settings struct { + codec Codec + res string + frameRate string + vbr string + quality Quality + vbrBitRate string + cbrBitRate string + refresh string +} + +func newSettings() settings { + return settings{ + codec: defaultCodec, + res: defaultRes, + frameRate: defaultFrameRate, + vbr: defaultVBR, + quality: defaultQuality, + vbrBitRate: defaultVBRBitRate, + cbrBitRate: defaultCBRBitRate, + refresh: defaultRefresh, + } +} + func md5Hex(s string) string { h := md5.New() h.Write([]byte(s)) @@ -63,7 +104,7 @@ func populateForm(s settings) url.Values { f.Set("dwFrameRate", s.frameRate) f.Set("custom_qp_init", "25") - if s.codec == codecMJPEG { + if s.codec == CodecMJPEG { f.Set("vbr_enable", "1") f.Set("dwVbrQuality", string(s.quality)) @@ -97,11 +138,11 @@ func populateForm(s settings) url.Values { } f.Set("gop_N", s.refresh) - if s.codec == codecMJPEG { + if s.codec == CodecMJPEG { f.Set("gop_N", "1500") } - if s.codec == codecH264 || s.codec == codecH265 { + if s.codec == CodecH264 || s.codec == CodecH265 { f.Set("dwEncProfile", "1") f.Set("dwEncLevel", "31") f.Set("dwEntropy", "0")