From 208aa16c80119a511ef073e3f881c103393a79ef Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Sat, 22 Feb 2020 15:40:01 +0100 Subject: [PATCH] Add settings for FFmpeg --- .../java/ctbrec/ui/settings/SettingsTab.java | 55 +++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java index 2f0d1c6f..617fe791 100644 --- a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java +++ b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java @@ -77,6 +77,8 @@ public class SettingsTab extends Tab implements TabSelectionListener { private TextField onlineCheckIntervalInSecs; private TextField leaveSpaceOnDevice; private TextField minimumLengthInSecs; + private TextField ffmpegParameters; + private TextField fileExtension; private CheckBox useAuthentication = new CheckBox(); private CheckBox useTLS = new CheckBox(); private CheckBox chooseStreamQuality = new CheckBox(); @@ -447,7 +449,39 @@ public class SettingsTab extends Tab implements TabSelectionListener { } }); GridPane.setMargin(minimumLengthInSecs, new Insets(0, 0, 0, CHECKBOX_MARGIN)); - layout.add(minimumLengthInSecs, 1, row); + layout.add(minimumLengthInSecs, 1, row++); + + tt = new Tooltip("FFmpeg parameters to use when merging stream segments"); + l = new Label("FFmpeg parameters"); + l.setTooltip(tt); + layout.add(l, 0, row); + String ffmpegParams = Config.getInstance().getSettings().ffmpegMergedDownloadArgs; + ffmpegParameters = new TextField(ffmpegParams); + ffmpegParameters.setTooltip(tt); + ffmpegParameters.textProperty().addListener((observable, oldValue, newValue) -> { + if(!ffmpegParameters.getText().isEmpty()) { + Config.getInstance().getSettings().ffmpegMergedDownloadArgs = ffmpegParameters.getText(); + saveConfig(); + } + }); + GridPane.setMargin(ffmpegParameters, new Insets(0, 0, 0, CHECKBOX_MARGIN)); + layout.add(ffmpegParameters, 1, row++); + + tt = new Tooltip("File extension to use for recordings"); + l = new Label("File Extension"); + l.setTooltip(tt); + layout.add(l, 0, row); + String fileSuffix = Config.getInstance().getSettings().ffmpegFileSuffix; + fileExtension = new TextField(fileSuffix); + fileExtension.setTooltip(tt); + fileExtension.textProperty().addListener((observable, oldValue, newValue) -> { + if(!fileExtension.getText().isEmpty()) { + Config.getInstance().getSettings().ffmpegFileSuffix = fileExtension.getText(); + saveConfig(); + } + }); + GridPane.setMargin(fileExtension, new Insets(0, 0, 0, CHECKBOX_MARGIN)); + layout.add(fileExtension, 1, row); TitledPane locations = new TitledPane("Recorder", layout); locations.setCollapsible(false); @@ -534,6 +568,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { GridPane.setFillWidth(mediaPlayer, true); GridPane.setHgrow(mediaPlayer, Priority.ALWAYS); GridPane.setMargin(mediaPlayer, new Insets(0, 0, 0, CHECKBOX_MARGIN)); + GridPane.setColumnSpan(mediaPlayer, 3); layout.add(mediaPlayer, 1, row++); Label l = new Label("Allow multiple players"); @@ -545,10 +580,10 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(multiplePlayers, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(multiplePlayers, 1, row++); + layout.add(multiplePlayers, 1, row); l = new Label("Show \"Player Starting\" Message"); - layout.add(l, 0, row); + layout.add(l, 2, row); showPlayerStarting.setSelected(Config.getInstance().getSettings().showPlayerStarting); showPlayerStarting.setOnAction(e -> { Config.getInstance().getSettings().showPlayerStarting = showPlayerStarting.isSelected(); @@ -556,7 +591,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(showPlayerStarting, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(showPlayerStarting, 1, row++); + layout.add(showPlayerStarting, 3, row++); l = new Label("Display stream resolution in overview"); layout.add(l, 0, row); @@ -568,10 +603,10 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(loadResolution, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(loadResolution, 1, row++); + layout.add(loadResolution, 1, row); l = new Label("Manually select stream quality"); - layout.add(l, 0, row); + layout.add(l, 2, row); chooseStreamQuality.setSelected(Config.getInstance().getSettings().chooseStreamQuality); chooseStreamQuality.setOnAction(e -> { Config.getInstance().getSettings().chooseStreamQuality = chooseStreamQuality.isSelected(); @@ -579,7 +614,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(chooseStreamQuality, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(chooseStreamQuality, 1, row++); + layout.add(chooseStreamQuality, 3, row++); l = new Label("Enable live previews (experimental)"); layout.add(l, 0, row); @@ -591,12 +626,12 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(livePreviews, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(livePreviews, 1, row++); + layout.add(livePreviews, 1, row); Tooltip tt = new Tooltip("The overviews will still be updated, but the thumbnails won't be changed. This is useful for less powerful systems."); l = new Label("Update thumbnails"); l.setTooltip(tt); - layout.add(l, 0, row); + layout.add(l, 2, row); updateThumbnails.setTooltip(tt); updateThumbnails.setSelected(Config.getInstance().getSettings().updateThumbnails); updateThumbnails.setOnAction(e -> { @@ -605,7 +640,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { }); GridPane.setMargin(l, new Insets(3, 0, 0, 0)); GridPane.setMargin(updateThumbnails, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN)); - layout.add(updateThumbnails, 1, row++); + layout.add(updateThumbnails, 3, row++); tt = new Tooltip("Update the thumbnail overviews every x seconds"); l = new Label("Update overview interval (seconds)");