diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar
index 49c28c87d..e319b3966 100644
Binary files a/lib/installer-exclude/libjitsi.jar and b/lib/installer-exclude/libjitsi.jar differ
diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties
index 8a6751609..4a393ae79 100644
--- a/resources/languages/resources.properties
+++ b/resources/languages/resources.properties
@@ -1418,14 +1418,16 @@ impl.neomedia.configform.AUDIO=Audio
impl.neomedia.configform.VIDEO=Video
impl.neomedia.configform.H264=H.264
+impl.neomedia.configform.H264.defaultIntraRefresh=Periodic Intra Refresh
impl.neomedia.configform.H264.defaultProfile=Default profile to encode into:
impl.neomedia.configform.H264.defaultProfile.baseline=Baseline
-impl.neomedia.configform.H264.defaultProfile.main=Main
impl.neomedia.configform.H264.defaultProfile.high=High
-impl.neomedia.configform.H264.preset=Encoder Preset
+impl.neomedia.configform.H264.defaultProfile.main=Main
+impl.neomedia.configform.H264.keyint=Maximum interval between key frames
impl.neomedia.configform.H264.preferredKeyFrameRequester=Preferred method to request key frames:
impl.neomedia.configform.H264.preferredKeyFrameRequester.rtcp=RTCP
impl.neomedia.configform.H264.preferredKeyFrameRequester.signaling=Signaling
+impl.neomedia.configform.H264.preset=Encoder Preset
# The callrecordingconfig plugin was never really committed into trunk and its
# ConfigurationForm was actually put in the neomedia bundle.
diff --git a/src/net/java/sip/communicator/impl/neomedia/codec/video/h264/ConfigurationPanel.java b/src/net/java/sip/communicator/impl/neomedia/codec/video/h264/ConfigurationPanel.java
index 0619b8a25..deec20935 100644
--- a/src/net/java/sip/communicator/impl/neomedia/codec/video/h264/ConfigurationPanel.java
+++ b/src/net/java/sip/communicator/impl/neomedia/codec/video/h264/ConfigurationPanel.java
@@ -10,6 +10,7 @@
import java.awt.event.*;
import javax.swing.*;
+import javax.swing.event.*;
import net.java.sip.communicator.impl.neomedia.*;
import net.java.sip.communicator.plugin.desktoputil.*;
@@ -20,9 +21,10 @@
import org.jitsi.service.resources.*;
/**
- * Implements the H.264 configuration form (panel).
+ * Implements the H.264 configuration form/panel.
*
* @author Lyubomir Marinov
+ * @author Damian Minkov
*/
public class ConfigurationPanel
extends TransparentPanel
@@ -37,114 +39,140 @@ public class ConfigurationPanel
*/
public ConfigurationPanel()
{
- /* Create the UI components. */
- super(new FlowLayout());
+ // Create the UI components.
+ super(new BorderLayout());
TransparentPanel contentPanel
= new TransparentPanel(new GridBagLayout());
- add(contentPanel);
+ add(contentPanel, BorderLayout.NORTH);
- ResourceManagementService resources = NeomediaActivator.getResources();
- GridBagConstraints gridBagConstraints = new GridBagConstraints();
+ ResourceManagementService r = NeomediaActivator.getResources();
+ GridBagConstraints cnstrnts = new GridBagConstraints();
- JLabel defaultProfileLabel
- = new JLabel(
- resources.getI18NString(
+ cnstrnts.anchor = GridBagConstraints.FIRST_LINE_START;
+ cnstrnts.fill = GridBagConstraints.HORIZONTAL;
+
+ Component defaultProfileLabel
+ = createLineWrapLabel(
+ r.getI18NString(
"impl.neomedia.configform.H264.defaultProfile"));
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 0;
- contentPanel.add(defaultProfileLabel, gridBagConstraints);
+ cnstrnts.gridx = 0;
+ cnstrnts.gridy = 0;
+ cnstrnts.weightx = 1;
+ contentPanel.add(defaultProfileLabel, cnstrnts);
JComboBox defaultProfileComboBox = new JComboBox();
defaultProfileComboBox.setEditable(false);
defaultProfileComboBox.addItem(
new NameValuePair(
- resources.getI18NString(
+ r.getI18NString(
"impl.neomedia.configform.H264.defaultProfile."
+ JNIEncoder.BASELINE_PROFILE),
JNIEncoder.BASELINE_PROFILE));
defaultProfileComboBox.addItem(
new NameValuePair(
- resources.getI18NString(
+ r.getI18NString(
"impl.neomedia.configform.H264.defaultProfile."
+ JNIEncoder.MAIN_PROFILE),
JNIEncoder.MAIN_PROFILE));
defaultProfileComboBox.addItem(
new NameValuePair(
- resources.getI18NString(
+ r.getI18NString(
"impl.neomedia.configform.H264.defaultProfile."
+ JNIEncoder.HIGH_PROFILE),
JNIEncoder.HIGH_PROFILE));
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 1;
- gridBagConstraints.gridy = 0;
- contentPanel.add(defaultProfileComboBox, gridBagConstraints);
-
- JLabel preferredKeyFrameRequesterLabel
- = new JLabel(
- resources.getI18NString(
+ cnstrnts.gridx = 1;
+ cnstrnts.gridy = 0;
+ cnstrnts.weightx = 0;
+ contentPanel.add(defaultProfileComboBox, cnstrnts);
+
+ Component preferredKeyFrameRequesterLabel
+ = createLineWrapLabel(
+ r.getI18NString(
"impl.neomedia.configform.H264"
+ ".preferredKeyFrameRequester"));
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 1;
- contentPanel.add(preferredKeyFrameRequesterLabel, gridBagConstraints);
+ cnstrnts.gridx = 0;
+ cnstrnts.gridy = 1;
+ cnstrnts.weightx = 1;
+ contentPanel.add(preferredKeyFrameRequesterLabel, cnstrnts);
JComboBox preferredKeyFrameRequesterComboBox = new JComboBox();
preferredKeyFrameRequesterComboBox.setEditable(false);
preferredKeyFrameRequesterComboBox.addItem(
new NameValuePair(
- resources.getI18NString(
+ r.getI18NString(
"impl.neomedia.configform.H264"
+ ".preferredKeyFrameRequester."
+ KeyFrameControl.KeyFrameRequester.RTCP),
KeyFrameControl.KeyFrameRequester.RTCP));
preferredKeyFrameRequesterComboBox.addItem(
new NameValuePair(
- resources.getI18NString(
+ r.getI18NString(
"impl.neomedia.configform.H264"
+ ".preferredKeyFrameRequester."
+ KeyFrameControl.KeyFrameRequester.SIGNALING),
KeyFrameControl.KeyFrameRequester.SIGNALING));
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 1;
- gridBagConstraints.gridy = 1;
+ cnstrnts.gridx = 1;
+ cnstrnts.gridy = 1;
+ cnstrnts.weightx = 0;
contentPanel.add(
preferredKeyFrameRequesterComboBox,
- gridBagConstraints);
+ cnstrnts);
- JLabel presetLabel
- = new JLabel(resources.getI18NString(
- "impl.neomedia.configform.H264.preset"));
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 0;
- gridBagConstraints.gridy = 2;
- contentPanel.add(presetLabel, gridBagConstraints);
+ Component presetLabel
+ = createLineWrapLabel(
+ r.getI18NString("impl.neomedia.configform.H264.preset"));
+ cnstrnts.gridx = 0;
+ cnstrnts.gridy = 2;
+ cnstrnts.weightx = 1;
+ contentPanel.add(presetLabel, cnstrnts);
JComboBox presetComboBox = new JComboBox();
presetComboBox.setEditable(false);
- for(String presetSetting : JNIEncoder.AVAILABLE_PRESETS)
- {
- presetComboBox.addItem(
- new NameValuePair(presetSetting, presetSetting));
- }
- gridBagConstraints.anchor = GridBagConstraints.LINE_START;
- gridBagConstraints.gridx = 1;
- gridBagConstraints.gridy = 2;
- contentPanel.add(
- presetComboBox,
- gridBagConstraints);
+ for (String preset : JNIEncoder.AVAILABLE_PRESETS)
+ presetComboBox.addItem(new NameValuePair(preset, preset));
+ cnstrnts.gridx = 1;
+ cnstrnts.gridy = 2;
+ cnstrnts.weightx = 0;
+ contentPanel.add(presetComboBox, cnstrnts);
- /*
- * Load the values from the ConfigurationService into the UI components.
- */
- ConfigurationService configuration
- = NeomediaActivator.getConfigurationService();
+ JCheckBox defaultIntraRefreshCheckBox
+ = new SIPCommCheckBox(
+ r.getI18NString(
+ "impl.neomedia.configform.H264"
+ + ".defaultIntraRefresh"));
+ cnstrnts.gridwidth = GridBagConstraints.REMAINDER;
+ cnstrnts.gridx = 0;
+ cnstrnts.gridy = 3;
+ cnstrnts.weightx = 1;
+ contentPanel.add(defaultIntraRefreshCheckBox, cnstrnts);
+ cnstrnts.gridwidth = 1;
+
+ Component keyintLabel
+ = createLineWrapLabel(
+ r.getI18NString("impl.neomedia.configform.H264.keyint"));
+ cnstrnts.gridx = 0;
+ cnstrnts.gridy = 4;
+ cnstrnts.weightx = 1;
+ contentPanel.add(keyintLabel, cnstrnts);
+
+ JSpinner keyintSpinner
+ = new JSpinner(
+ new SpinnerNumberModel(
+ JNIEncoder.DEFAULT_KEYINT,
+ 1, JNIEncoder.X264_KEYINT_MAX_INFINITE,
+ JNIEncoder.DEFAULT_FRAME_RATE));
+ cnstrnts.gridx = 1;
+ cnstrnts.gridy = 4;
+ cnstrnts.weightx = 0;
+ contentPanel.add(keyintSpinner, cnstrnts);
+
+ // Load the values from the ConfigurationService into the UI components.
+ ConfigurationService cfg = NeomediaActivator.getConfigurationService();
setSelectedNameValuePair(
defaultProfileComboBox,
- configuration.getString(
+ cfg.getString(
JNIEncoder.DEFAULT_PROFILE_PNAME,
JNIEncoder.DEFAULT_DEFAULT_PROFILE));
addActionListener(
@@ -153,7 +181,7 @@ public ConfigurationPanel()
setSelectedNameValuePair(
preferredKeyFrameRequesterComboBox,
- configuration.getString(
+ cfg.getString(
KeyFrameControl.KeyFrameRequester.PREFERRED_PNAME,
KeyFrameControl.KeyFrameRequester.DEFAULT_PREFERRED));
addActionListener(
@@ -162,9 +190,50 @@ public ConfigurationPanel()
setSelectedNameValuePair(
presetComboBox,
- configuration.getString(
- JNIEncoder.PRESET_PNAME, JNIEncoder.DEFAULT_PRESET));
+ cfg.getString(
+ JNIEncoder.PRESET_PNAME,
+ JNIEncoder.DEFAULT_PRESET));
addActionListener(presetComboBox, JNIEncoder.PRESET_PNAME);
+
+ defaultIntraRefreshCheckBox.setSelected(
+ cfg.getBoolean(
+ JNIEncoder.DEFAULT_INTRA_REFRESH_PNAME,
+ JNIEncoder.DEFAULT_DEFAULT_INTRA_REFRESH));
+ defaultIntraRefreshCheckBox.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ JCheckBox checkBox = (JCheckBox) e.getSource();
+
+ NeomediaActivator
+ .getConfigurationService()
+ .setProperty(
+ JNIEncoder.DEFAULT_INTRA_REFRESH_PNAME,
+ Boolean.toString(
+ checkBox.isSelected()));
+ }
+ });
+
+ keyintSpinner.setValue(
+ cfg.getInt(JNIEncoder.KEYINT_PNAME, JNIEncoder.DEFAULT_KEYINT));
+ keyintSpinner.addChangeListener(
+ new ChangeListener()
+ {
+ public void stateChanged(ChangeEvent e)
+ {
+ JSpinner spinner = (JSpinner) e.getSource();
+ SpinnerNumberModel model
+ = (SpinnerNumberModel) spinner.getModel();
+ int value = model.getNumber().intValue();
+
+ NeomediaActivator
+ .getConfigurationService()
+ .setProperty(
+ JNIEncoder.KEYINT_PNAME,
+ Integer.toString(value));
+ }
+ });
}
/**
@@ -199,6 +268,28 @@ public void actionPerformed(ActionEvent e)
});
}
+ /**
+ * Initializes a new Component instance which is to display a
+ * specific text in the fashion of JLabel and with line wrapping.
+ *
+ * @param text the text to be displayed by the new instance
+ * @return a new Component instance which displays the specified
+ * text in the fashion of JLabel and with line wrapping
+ */
+ private Component createLineWrapLabel(String text)
+ {
+ JTextArea textArea = new JTextArea();
+
+ textArea.setEditable(false);
+ textArea.setFocusable(false);
+ textArea.setLineWrap(true);
+ textArea.setOpaque(false);
+
+ textArea.setText(text);
+
+ return textArea;
+ }
+
/**
* Sets the selected item in a specific JComboBox populated with
* NameValuePairs to the one which has a specific value.
@@ -209,16 +300,13 @@ public void actionPerformed(ActionEvent e)
*/
private void setSelectedNameValuePair(JComboBox comboBox, String value)
{
- int itemCount = comboBox.getItemCount();
-
- for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
+ for (int i = 0, count = comboBox.getItemCount(); i < count; i++)
{
- NameValuePair nameValuePair
- = (NameValuePair) comboBox.getItemAt(itemIndex);
+ NameValuePair nameValuePair = (NameValuePair) comboBox.getItemAt(i);
if (nameValuePair.value.equals(value))
{
- comboBox.setSelectedIndex(itemIndex);
+ comboBox.setSelectedIndex(i);
break;
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderFactoryJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderFactoryJabberImpl.java
index 3a1e62b9d..3b80d6254 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderFactoryJabberImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderFactoryJabberImpl.java
@@ -10,7 +10,6 @@
import net.java.sip.communicator.service.protocol.*;
-import org.jitsi.service.configuration.*;
import org.jivesoftware.smack.util.*;
import org.osgi.framework.*;
diff --git a/src/net/java/sip/communicator/plugin/jabberaccregwizz/JabberAccountRegistrationForm.java b/src/net/java/sip/communicator/plugin/jabberaccregwizz/JabberAccountRegistrationForm.java
index 2a4a419d8..c59b43189 100644
--- a/src/net/java/sip/communicator/plugin/jabberaccregwizz/JabberAccountRegistrationForm.java
+++ b/src/net/java/sip/communicator/plugin/jabberaccregwizz/JabberAccountRegistrationForm.java
@@ -15,9 +15,7 @@
import net.java.sip.communicator.plugin.desktoputil.wizard.*;
import net.java.sip.communicator.service.credentialsstorage.*;
import net.java.sip.communicator.service.protocol.*;
-
import net.java.sip.communicator.service.protocol.jabber.*;
-import org.jitsi.util.*;
/**
* The JabberAccountRegistrationForm.