/* * This file is part of VLCJ. * * VLCJ is free software: you can redistribute it and/or modify * it 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. * * VLCJ 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 VLCJ. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2009-2016 Caprica Software Limited. */ package uk.co.caprica.vlcj.test.basic; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import uk.co.caprica.vlcj.binding.LibVlcConst; import uk.co.caprica.vlcj.player.MediaPlayer; public class PlayerVideoAdjustPanel extends JPanel { private static final long serialVersionUID = 1L; private final MediaPlayer mediaPlayer; private JCheckBox enableVideoAdjustCheckBox; private JLabel contrastLabel; private JSlider contrastSlider; private JLabel brightnessLabel; private JSlider brightnessSlider; private JLabel hueLabel; private JSlider hueSlider; private JLabel saturationLabel; private JSlider saturationSlider; private JLabel gammaLabel; private JSlider gammaSlider; public PlayerVideoAdjustPanel(MediaPlayer mediaPlayer) { this.mediaPlayer = mediaPlayer; createUI(); } private void createUI() { createControls(); layoutControls(); registerListeners(); } private void createControls() { enableVideoAdjustCheckBox = new JCheckBox("Video Adjust"); contrastLabel = new JLabel("Contrast"); contrastSlider = new JSlider(); contrastSlider.setOrientation(JSlider.HORIZONTAL); contrastSlider.setMinimum(Math.round(LibVlcConst.MIN_CONTRAST * 100.0f)); contrastSlider.setMaximum(Math.round(LibVlcConst.MAX_CONTRAST * 100.0f)); contrastSlider.setPreferredSize(new Dimension(100, 40)); contrastSlider.setToolTipText("Change Contrast"); contrastSlider.setEnabled(false); contrastSlider.setPaintLabels(true); contrastSlider.setPaintTicks(true); brightnessLabel = new JLabel("Brightness"); brightnessSlider = new JSlider(); brightnessSlider.setOrientation(JSlider.HORIZONTAL); brightnessSlider.setMinimum(Math.round(LibVlcConst.MIN_BRIGHTNESS * 100.0f)); brightnessSlider.setMaximum(Math.round(LibVlcConst.MAX_BRIGHTNESS * 100.0f)); brightnessSlider.setPreferredSize(new Dimension(100, 40)); brightnessSlider.setToolTipText("Change Brightness"); brightnessSlider.setEnabled(false); hueLabel = new JLabel("Hue"); hueSlider = new JSlider(); hueSlider.setOrientation(JSlider.HORIZONTAL); hueSlider.setMinimum(LibVlcConst.MIN_HUE); hueSlider.setMaximum(LibVlcConst.MAX_HUE); hueSlider.setPreferredSize(new Dimension(100, 40)); hueSlider.setToolTipText("Change "); hueSlider.setEnabled(false); saturationLabel = new JLabel("Saturation"); saturationSlider = new JSlider(); saturationSlider.setOrientation(JSlider.HORIZONTAL); saturationSlider.setMinimum(Math.round(LibVlcConst.MIN_SATURATION * 100.0f)); saturationSlider.setMaximum(Math.round(LibVlcConst.MAX_SATURATION * 100.0f)); saturationSlider.setPreferredSize(new Dimension(100, 40)); saturationSlider.setToolTipText("Change "); saturationSlider.setEnabled(false); gammaLabel = new JLabel("Gamma"); gammaSlider = new JSlider(); gammaSlider.setOrientation(JSlider.HORIZONTAL); gammaSlider.setMinimum(Math.round(LibVlcConst.MIN_GAMMA * 100.0f)); gammaSlider.setMaximum(Math.round(LibVlcConst.MAX_GAMMA * 100.0f)); gammaSlider.setPreferredSize(new Dimension(100, 40)); gammaSlider.setToolTipText("Change "); gammaSlider.setEnabled(false); contrastSlider.setValue(Math.round(mediaPlayer.getBrightness() * 100.0f)); brightnessSlider.setValue(Math.round(mediaPlayer.getContrast() * 100.0f)); hueSlider.setValue(mediaPlayer.getHue()); saturationSlider.setValue(Math.round(mediaPlayer.getSaturation() * 100.0f)); gammaSlider.setValue(Math.round(mediaPlayer.getGamma() * 100.0f)); } private void layoutControls() { setBorder(new EmptyBorder(4, 4, 4, 4)); setLayout(new BorderLayout()); JPanel slidersPanel = new JPanel(); slidersPanel.setLayout(new BoxLayout(slidersPanel, BoxLayout.Y_AXIS)); slidersPanel.add(enableVideoAdjustCheckBox); slidersPanel.add(contrastLabel); slidersPanel.add(contrastSlider); slidersPanel.add(brightnessLabel); slidersPanel.add(brightnessSlider); slidersPanel.add(hueLabel); slidersPanel.add(hueSlider); slidersPanel.add(saturationLabel); slidersPanel.add(saturationSlider); slidersPanel.add(gammaLabel); slidersPanel.add(gammaSlider); add(slidersPanel, BorderLayout.CENTER); } private void registerListeners() { enableVideoAdjustCheckBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { boolean enabled = enableVideoAdjustCheckBox.isSelected(); contrastSlider.setEnabled(enabled); brightnessSlider.setEnabled(enabled); hueSlider.setEnabled(enabled); saturationSlider.setEnabled(enabled); gammaSlider.setEnabled(enabled); mediaPlayer.setAdjustVideo(enabled); } }); contrastSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); // if(!source.getValueIsAdjusting()) { mediaPlayer.setContrast(source.getValue() / 100.0f); // } } }); brightnessSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); // if(!source.getValueIsAdjusting()) { mediaPlayer.setBrightness(source.getValue() / 100.0f); // } } }); hueSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); // if(!source.getValueIsAdjusting()) { mediaPlayer.setHue(source.getValue()); // } } }); saturationSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); // if(!source.getValueIsAdjusting()) { mediaPlayer.setSaturation(source.getValue() / 100.0f); // } } }); gammaSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); // if(!source.getValueIsAdjusting()) { mediaPlayer.setGamma(source.getValue() / 100.0f); // } } }); } }