diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 7619a1c1..1be88db7 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -98,6 +98,7 @@ def getSettings(): }, "webcam": { "streamUrl": s.get(["webcam", "stream"]), + "streamRatio": s.get(["webcam", "streamRatio"]), "snapshotUrl": s.get(["webcam", "snapshot"]), "ffmpegPath": s.get(["webcam", "ffmpeg"]), "bitrate": s.get(["webcam", "bitrate"]), @@ -299,6 +300,7 @@ def _saveSettings(data): if "webcam" in data.keys(): if "streamUrl" in data["webcam"]: s.set(["webcam", "stream"], data["webcam"]["streamUrl"]) + if "streamRatio" in data["webcam"] and data["webcam"]["streamRatio"] in ("16:9", "4:3"): s.set(["webcam", "streamRatio"], data["webcam"]["streamRatio"]) if "snapshotUrl" in data["webcam"]: s.set(["webcam", "snapshot"], data["webcam"]["snapshotUrl"]) if "ffmpegPath" in data["webcam"]: s.set(["webcam", "ffmpeg"], data["webcam"]["ffmpegPath"]) if "bitrate" in data["webcam"]: s.set(["webcam", "bitrate"], data["webcam"]["bitrate"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 8b9b8d15..e849aa17 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -155,6 +155,7 @@ default_settings = { }, "webcam": { "stream": None, + "streamRatio": "16:9", "snapshot": None, "ffmpeg": None, "ffmpegThreads": 1, diff --git a/src/octoprint/static/js/app/viewmodels/control.js b/src/octoprint/static/js/app/viewmodels/control.js index 95dcd764..544eeeed 100644 --- a/src/octoprint/static/js/app/viewmodels/control.js +++ b/src/octoprint/static/js/app/viewmodels/control.js @@ -49,6 +49,14 @@ $(function() { return self.keycontrolActive() && self.keycontrolPossible(); }); + self.webcamRatioClass = ko.pureComputed(function() { + if (self.settings.webcam_streamRatio() == "4:3") { + return "ratio43"; + } else { + return "ratio169"; + } + }); + self.settings.printerProfiles.currentProfileData.subscribe(function () { self._updateExtruderCount(); self.settings.printerProfiles.currentProfileData().extruder.count.subscribe(self._updateExtruderCount); diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index e8751dcd..5538917d 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -91,6 +91,8 @@ $(function() { } }; + self.webcam_available_ratios = ["16:9", "4:3"]; + var auto_locale = {language: "_default", display: gettext("Autodetect from browser"), english: undefined}; self.locales = ko.observableArray([auto_locale].concat(_.sortBy(_.values(AVAILABLE_LOCALES), function(n) { return n.display; @@ -110,6 +112,7 @@ $(function() { self.printer_defaultExtrusionLength = ko.observable(undefined); self.webcam_streamUrl = ko.observable(undefined); + self.webcam_streamRatio = ko.observable(undefined); self.webcam_snapshotUrl = ko.observable(undefined); self.webcam_ffmpegPath = ko.observable(undefined); self.webcam_bitrate = ko.observable(undefined); diff --git a/src/octoprint/templates/dialogs/settings/webcam.jinja2 b/src/octoprint/templates/dialogs/settings/webcam.jinja2 index 97d5924b..5b86f7bc 100644 --- a/src/octoprint/templates/dialogs/settings/webcam.jinja2 +++ b/src/octoprint/templates/dialogs/settings/webcam.jinja2 @@ -2,6 +2,7 @@
diff --git a/src/octoprint/templates/snippets/settings/webcam/webcamStreamRatio.jinja2 b/src/octoprint/templates/snippets/settings/webcam/webcamStreamRatio.jinja2 new file mode 100644 index 00000000..ee5cdd1d --- /dev/null +++ b/src/octoprint/templates/snippets/settings/webcam/webcamStreamRatio.jinja2 @@ -0,0 +1,7 @@ +