mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
Merge branch 'develop' into better-encoding-detection
This commit is contained in:
commit
96c6d69809
@ -84,9 +84,12 @@ MediaViewImagePanel.zoomTextField.text=
|
|||||||
MediaViewImagePanel.rotationTextField.text=
|
MediaViewImagePanel.rotationTextField.text=
|
||||||
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
||||||
HtmlPanel.showImagesToggleButton.text=Download Images
|
HtmlPanel.showImagesToggleButton.text=Download Images
|
||||||
MediaPlayerPanel.audioSlider.toolTipText=
|
MediaViewImagePanel.tagsMenu.text_1=Tags Menu
|
||||||
MediaPlayerPanel.VolumeIcon.text=\ \ \ \ \ Volume
|
|
||||||
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
||||||
|
MediaPlayerPanel.audioSlider.toolTipText=
|
||||||
|
MediaPlayerPanel.rewindButton.text=\u2bc7\u2bc7
|
||||||
|
MediaPlayerPanel.fastForwardButton.text=\u2bc8\u2bc8
|
||||||
MediaPlayerPanel.playButton.text=\u25ba
|
MediaPlayerPanel.playButton.text=\u25ba
|
||||||
MediaPlayerPanel.infoLabel.text=No Errors
|
MediaPlayerPanel.infoLabel.text=No Errors
|
||||||
MediaViewImagePanel.tagsMenu.text_1=Tags Menu
|
MediaPlayerPanel.VolumeIcon.text=Volume
|
||||||
|
MediaPlayerPanel.playBackSpeedLabel.text=Speed:
|
||||||
|
@ -154,12 +154,15 @@ MediaViewImagePanel.zoomTextField.text=
|
|||||||
MediaViewImagePanel.rotationTextField.text=
|
MediaViewImagePanel.rotationTextField.text=
|
||||||
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
||||||
HtmlPanel.showImagesToggleButton.text=Download Images
|
HtmlPanel.showImagesToggleButton.text=Download Images
|
||||||
MediaPlayerPanel.audioSlider.toolTipText=
|
MediaViewImagePanel.tagsMenu.text_1=Tags Menu
|
||||||
MediaPlayerPanel.VolumeIcon.text=\ \ \ \ \ Volume
|
|
||||||
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
||||||
|
MediaPlayerPanel.audioSlider.toolTipText=
|
||||||
|
MediaPlayerPanel.rewindButton.text=\u2bc7\u2bc7
|
||||||
|
MediaPlayerPanel.fastForwardButton.text=\u2bc8\u2bc8
|
||||||
MediaPlayerPanel.playButton.text=\u25ba
|
MediaPlayerPanel.playButton.text=\u25ba
|
||||||
MediaPlayerPanel.infoLabel.text=No Errors
|
MediaPlayerPanel.infoLabel.text=No Errors
|
||||||
MediaViewImagePanel.tagsMenu.text_1=Tags Menu
|
MediaPlayerPanel.VolumeIcon.text=Volume
|
||||||
|
MediaPlayerPanel.playBackSpeedLabel.text=Speed:
|
||||||
# {0} - tableName
|
# {0} - tableName
|
||||||
SQLiteViewer.readTable.errorText=Error getting rows for table: {0}
|
SQLiteViewer.readTable.errorText=Error getting rows for table: {0}
|
||||||
# {0} - tableName
|
# {0} - tableName
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="259" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="131" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
@ -51,47 +51,42 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Component id="infoLabel" max="32767" attributes="0"/>
|
||||||
<Component id="playButton" min="-2" pref="64" max="-2" attributes="0"/>
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="progressSlider" pref="680" max="32767" attributes="0"/>
|
<Component id="buttonPanel" alignment="0" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<Component id="progressSlider" pref="623" max="32767" attributes="0"/>
|
||||||
<Component id="progressLabel" min="-2" max="-2" attributes="0"/>
|
</Group>
|
||||||
</Group>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="infoLabel" max="32767" attributes="0"/>
|
<Component id="progressLabel" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<Component id="playBackPanel" pref="0" max="32767" attributes="0"/>
|
||||||
<Component id="VolumeIcon" min="-2" pref="64" max="-2" attributes="0"/>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
<Component id="audioSlider" min="-2" pref="229" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="progressLabel" max="32767" attributes="0"/>
|
<Component id="progressLabel" max="32767" attributes="0"/>
|
||||||
<Component id="progressSlider" max="32767" attributes="0"/>
|
<Component id="progressSlider" max="32767" attributes="0"/>
|
||||||
</Group>
|
|
||||||
<Component id="playButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="audioSlider" min="-2" max="-2" attributes="0"/>
|
<Component id="buttonPanel" max="32767" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Component id="playBackPanel" pref="0" max="32767" attributes="0"/>
|
||||||
<Component id="VolumeIcon" alignment="3" min="-2" pref="23" max="-2" attributes="0"/>
|
|
||||||
<Component id="infoLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
|
||||||
|
<Component id="infoLabel" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -112,8 +107,102 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="progressLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.progressLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JPanel" name="buttonPanel">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="playButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.playButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="playButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="21" ipadY="0" insetsTop="5" insetsLeft="6" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="fastForwardButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.fastForwardButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fastForwardButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
<GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="6" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="rewindButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.rewindButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rewindButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="0" insetsBottom="1" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="VolumeIcon">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.VolumeIcon.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="horizontalTextPosition" type="int" value="2"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
<GridBagConstraints gridX="3" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="8" ipadY="7" insetsTop="6" insetsLeft="6" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JSlider" name="audioSlider">
|
||||||
|
<Properties>
|
||||||
|
<Property name="majorTickSpacing" type="int" value="10"/>
|
||||||
|
<Property name="maximum" type="int" value="50"/>
|
||||||
|
<Property name="minorTickSpacing" type="int" value="5"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.audioSlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="value" type="int" value="25"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[200, 21]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[200, 21]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
<GridBagConstraints gridX="4" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="-116" ipadY="7" insetsTop="3" insetsLeft="1" insetsBottom="0" insetsRight="10" anchor="18" weightX="0.0" weightY="0.0"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
<Component class="javax.swing.JLabel" name="infoLabel">
|
<Component class="javax.swing.JLabel" name="infoLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.infoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.infoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -122,48 +211,74 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JButton" name="playButton">
|
<Container class="javax.swing.JPanel" name="playBackPanel">
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Layout>
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.playButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<DimensionLayout dim="0">
|
||||||
</Property>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
</Properties>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Events>
|
<Component id="playBackSpeedLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="playButtonActionPerformed"/>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
</Events>
|
<Component id="playBackSpeedComboBox" min="-2" max="-2" attributes="0"/>
|
||||||
</Component>
|
<EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
|
||||||
<Component class="javax.swing.JLabel" name="progressLabel">
|
</Group>
|
||||||
<Properties>
|
</Group>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
</DimensionLayout>
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.progressLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<DimensionLayout dim="1">
|
||||||
</Property>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
</Properties>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
</Component>
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
<Component class="javax.swing.JLabel" name="VolumeIcon">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Properties>
|
<Component id="playBackSpeedComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Component id="playBackSpeedLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.VolumeIcon.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
</Group>
|
||||||
</Property>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
</Properties>
|
</Group>
|
||||||
</Component>
|
</Group>
|
||||||
<Component class="javax.swing.JSlider" name="audioSlider">
|
</DimensionLayout>
|
||||||
<Properties>
|
</Layout>
|
||||||
<Property name="majorTickSpacing" type="int" value="10"/>
|
<SubComponents>
|
||||||
<Property name="maximum" type="int" value="50"/>
|
<Component class="javax.swing.JComboBox" name="playBackSpeedComboBox">
|
||||||
<Property name="minorTickSpacing" type="int" value="5"/>
|
<Properties>
|
||||||
<Property name="paintTicks" type="boolean" value="true"/>
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<StringArray count="8">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.audioSlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<StringItem index="0" value="0.25x"/>
|
||||||
</Property>
|
<StringItem index="1" value="0.50x"/>
|
||||||
<Property name="value" type="int" value="25"/>
|
<StringItem index="2" value="0.75x"/>
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<StringItem index="3" value="1x"/>
|
||||||
<Dimension value="[200, 21]"/>
|
<StringItem index="4" value="1.25x"/>
|
||||||
</Property>
|
<StringItem index="5" value="1.50x"/>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<StringItem index="6" value="1.75x"/>
|
||||||
<Dimension value="[200, 21]"/>
|
<StringItem index="7" value="2x"/>
|
||||||
</Property>
|
</StringArray>
|
||||||
</Properties>
|
</Property>
|
||||||
</Component>
|
<Property name="selectedIndex" type="int" value="3"/>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[53, 23]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[53, 23]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[53, 23]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="playBackSpeedComboBoxActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="playBackSpeedLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MediaPlayerPanel.playBackSpeedLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
@ -24,6 +24,7 @@ import java.awt.event.ActionListener;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
@ -37,7 +38,6 @@ import javax.swing.SwingWorker;
|
|||||||
import javax.swing.Timer;
|
import javax.swing.Timer;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import org.freedesktop.gstreamer.Bus;
|
import org.freedesktop.gstreamer.Bus;
|
||||||
import org.freedesktop.gstreamer.ClockTime;
|
|
||||||
import org.freedesktop.gstreamer.Gst;
|
import org.freedesktop.gstreamer.Gst;
|
||||||
import org.freedesktop.gstreamer.GstObject;
|
import org.freedesktop.gstreamer.GstObject;
|
||||||
import org.freedesktop.gstreamer.State;
|
import org.freedesktop.gstreamer.State;
|
||||||
@ -52,8 +52,13 @@ import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector;
|
|||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.TskData;
|
import org.sleuthkit.datamodel.TskData;
|
||||||
import javafx.embed.swing.JFXPanel;
|
import javafx.embed.swing.JFXPanel;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
import org.freedesktop.gstreamer.ClockTime;
|
||||||
|
import org.freedesktop.gstreamer.Format;
|
||||||
import org.freedesktop.gstreamer.GstException;
|
import org.freedesktop.gstreamer.GstException;
|
||||||
|
import org.freedesktop.gstreamer.event.SeekFlags;
|
||||||
|
import org.freedesktop.gstreamer.event.SeekType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a video player that is part of the Media View layered pane. It uses
|
* This is a video player that is part of the Media View layered pane. It uses
|
||||||
@ -177,8 +182,10 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
private Bus.EOS endOfStreamListener;
|
private Bus.EOS endOfStreamListener;
|
||||||
|
|
||||||
//Update progress bar and time label during video playback
|
//Update progress bar and time label during video playback
|
||||||
private final Timer timer = new Timer(75, new VideoPanelUpdater());
|
//Updating every 16 MS = 62.5 FPS.
|
||||||
|
private final Timer timer = new Timer(16, new VideoPanelUpdater());
|
||||||
private static final int PROGRESS_SLIDER_SIZE = 2000;
|
private static final int PROGRESS_SLIDER_SIZE = 2000;
|
||||||
|
private static final int SKIP_IN_SECONDS = 30;
|
||||||
|
|
||||||
private ExtractMedia extractMediaWorker;
|
private ExtractMedia extractMediaWorker;
|
||||||
|
|
||||||
@ -202,11 +209,20 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
if (progressSlider.getValueIsAdjusting()) {
|
if (progressSlider.getValueIsAdjusting()) {
|
||||||
long duration = gstPlayBin.queryDuration(TimeUnit.NANOSECONDS);
|
long duration = gstPlayBin.queryDuration(TimeUnit.NANOSECONDS);
|
||||||
double relativePosition = progressSlider.getValue() * 1.0 / PROGRESS_SLIDER_SIZE;
|
double relativePosition = progressSlider.getValue() * 1.0 / PROGRESS_SLIDER_SIZE;
|
||||||
long newPos = (long) (relativePosition * duration);
|
long newStartTime = (long) (relativePosition * duration);
|
||||||
gstPlayBin.seek(newPos, TimeUnit.NANOSECONDS);
|
double playBackRate = getPlayBackRate();
|
||||||
|
gstPlayBin.seek(playBackRate,
|
||||||
|
Format.TIME,
|
||||||
|
//FLUSH - flushes the pipeline
|
||||||
|
//ACCURATE - video will seek exactly to the position requested
|
||||||
|
EnumSet.of(SeekFlags.FLUSH, SeekFlags.ACCURATE),
|
||||||
|
//Set the start position to newTime
|
||||||
|
SeekType.SET, newStartTime,
|
||||||
|
//Do nothing for the end position
|
||||||
|
SeekType.NONE, -1);
|
||||||
//Keep constantly updating the time label so users have a sense of
|
//Keep constantly updating the time label so users have a sense of
|
||||||
//where the slider they are dragging is in relation to the video time
|
//where the slider they are dragging is in relation to the video time
|
||||||
updateTimeLabel(newPos, duration);
|
updateTimeLabel(newStartTime, duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -220,10 +236,12 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
errorListener = new Bus.ERROR() {
|
errorListener = new Bus.ERROR() {
|
||||||
@Override
|
@Override
|
||||||
public void errorMessage(GstObject go, int i, String string) {
|
public void errorMessage(GstObject go, int i, String string) {
|
||||||
enableComponents(false);
|
SwingUtilities.invokeLater(() -> {
|
||||||
infoLabel.setText(String.format(
|
enableComponents(false);
|
||||||
"<html><font color='red'>%s</font></html>",
|
infoLabel.setText(String.format(
|
||||||
MEDIA_PLAYER_ERROR_STRING));
|
"<html><font color='red'>%s</font></html>",
|
||||||
|
MEDIA_PLAYER_ERROR_STRING));
|
||||||
|
});
|
||||||
timer.stop();
|
timer.stop();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -231,9 +249,13 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
@Override
|
@Override
|
||||||
public void stateChanged(GstObject go, State oldState, State currentState, State pendingState) {
|
public void stateChanged(GstObject go, State oldState, State currentState, State pendingState) {
|
||||||
if (State.PLAYING.equals(currentState)) {
|
if (State.PLAYING.equals(currentState)) {
|
||||||
playButton.setText("||");
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
playButton.setText("||");
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
playButton.setText("►");
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
playButton.setText("►");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -241,7 +263,6 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
@Override
|
@Override
|
||||||
public void endOfStream(GstObject go) {
|
public void endOfStream(GstObject go) {
|
||||||
gstPlayBin.seek(ClockTime.ZERO);
|
gstPlayBin.seek(ClockTime.ZERO);
|
||||||
progressSlider.setValue(0);
|
|
||||||
/**
|
/**
|
||||||
* Keep the video from automatically playing
|
* Keep the video from automatically playing
|
||||||
*/
|
*/
|
||||||
@ -268,7 +289,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
try {
|
try {
|
||||||
//Pushing off initialization to the background
|
//Pushing off initialization to the background
|
||||||
extractMediaWorker = new ExtractMedia(file, VideoUtils.getVideoFileInTempDir(file));
|
extractMediaWorker = new ExtractMedia(file, VideoUtils.getVideoFileInTempDir(file));
|
||||||
extractMediaWorker.execute();
|
extractMediaWorker.execute();
|
||||||
} catch (NoCurrentCaseException ex) {
|
} catch (NoCurrentCaseException ex) {
|
||||||
logger.log(Level.SEVERE, "Exception while getting open case.", ex); //NON-NLS
|
logger.log(Level.SEVERE, "Exception while getting open case.", ex); //NON-NLS
|
||||||
infoLabel.setText(String.format("<html><font color='red'>%s</font></html>", Bundle.GstVideoPanel_noOpenCase_errMsg()));
|
infoLabel.setText(String.format("<html><font color='red'>%s</font></html>", Bundle.GstVideoPanel_noOpenCase_errMsg()));
|
||||||
@ -301,8 +322,8 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
if (gstPlayBin != null) {
|
if (gstPlayBin != null) {
|
||||||
gstPlayBin.stop();
|
gstPlayBin.stop();
|
||||||
gstPlayBin.getBus().disconnect(endOfStreamListener);
|
gstPlayBin.getBus().disconnect(endOfStreamListener);
|
||||||
gstPlayBin.getBus().disconnect(endOfStreamListener);
|
gstPlayBin.getBus().disconnect(stateChangeListener);
|
||||||
gstPlayBin.getBus().disconnect(endOfStreamListener);
|
gstPlayBin.getBus().disconnect(errorListener);
|
||||||
gstPlayBin.dispose();
|
gstPlayBin.dispose();
|
||||||
fxAppSink.clear();
|
fxAppSink.clear();
|
||||||
gstPlayBin = null;
|
gstPlayBin = null;
|
||||||
@ -317,6 +338,9 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
progressSlider.setEnabled(isEnabled);
|
progressSlider.setEnabled(isEnabled);
|
||||||
videoPanel.setEnabled(isEnabled);
|
videoPanel.setEnabled(isEnabled);
|
||||||
audioSlider.setEnabled(isEnabled);
|
audioSlider.setEnabled(isEnabled);
|
||||||
|
rewindButton.setEnabled(isEnabled);
|
||||||
|
fastForwardButton.setEnabled(isEnabled);
|
||||||
|
playBackSpeedComboBox.setEnabled(isEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -373,7 +397,18 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
* @param total
|
* @param total
|
||||||
*/
|
*/
|
||||||
private void updateTimeLabel(long start, long total) {
|
private void updateTimeLabel(long start, long total) {
|
||||||
progressLabel.setText(formatTime(start, false) + "/" + formatTime(total, true));
|
progressLabel.setText(formatTime(start) + "/" + formatTime(total));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the current selected playback rate from the speed combo box.
|
||||||
|
*
|
||||||
|
* @return The selected rate.
|
||||||
|
*/
|
||||||
|
private double getPlayBackRate() {
|
||||||
|
int selectIndex = playBackSpeedComboBox.getSelectedIndex();
|
||||||
|
String selectText = playBackSpeedComboBox.getItemAt(selectIndex);
|
||||||
|
return Double.valueOf(selectText.substring(0, selectText.length() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -383,24 +418,18 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
"MediaPlayerPanel.unknownTime=Unknown",
|
"MediaPlayerPanel.unknownTime=Unknown",
|
||||||
"MediaPlayerPanel.timeFormat=%02d:%02d:%02d"
|
"MediaPlayerPanel.timeFormat=%02d:%02d:%02d"
|
||||||
})
|
})
|
||||||
private String formatTime(long ns, boolean ceiling) {
|
private String formatTime(long ns) {
|
||||||
if (ns == -1) {
|
if (ns == -1) {
|
||||||
return Bundle.MediaPlayerPanel_unknownTime();
|
return Bundle.MediaPlayerPanel_unknownTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
double millis = ns / 1000000.0;
|
long seconds = TimeUnit.SECONDS.convert(ns, TimeUnit.NANOSECONDS);
|
||||||
double seconds;
|
long hours = TimeUnit.HOURS.convert(seconds, TimeUnit.SECONDS);
|
||||||
if (ceiling) {
|
seconds -= TimeUnit.SECONDS.convert(hours, TimeUnit.HOURS);
|
||||||
seconds = Math.ceil(millis / 1000);
|
long minutes = TimeUnit.MINUTES.convert(seconds, TimeUnit.SECONDS);
|
||||||
} else {
|
seconds -= TimeUnit.SECONDS.convert(minutes, TimeUnit.MINUTES);
|
||||||
seconds = millis / 1000;
|
|
||||||
}
|
|
||||||
double hours = seconds / 3600;
|
|
||||||
seconds -= (int) hours * 3600;
|
|
||||||
double minutes = seconds / 60;
|
|
||||||
seconds -= (int) minutes * 60;
|
|
||||||
|
|
||||||
return String.format(Bundle.MediaPlayerPanel_timeFormat(), (int) hours, (int) minutes, (int) seconds);
|
return String.format(Bundle.MediaPlayerPanel_timeFormat(), hours, minutes, seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -422,7 +451,11 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
protected Void doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
if (!tempFile.exists() || tempFile.length() < sourceFile.getSize()) {
|
if (!tempFile.exists() || tempFile.length() < sourceFile.getSize()) {
|
||||||
progress = ProgressHandle.createHandle(NbBundle.getMessage(MediaPlayerPanel.class, "GstVideoPanel.ExtractMedia.progress.buffering", sourceFile.getName()), () -> this.cancel(true));
|
progress = ProgressHandle.createHandle(NbBundle.getMessage(MediaPlayerPanel.class, "GstVideoPanel.ExtractMedia.progress.buffering", sourceFile.getName()), () -> this.cancel(true));
|
||||||
progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progress.buffering"));
|
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progress.buffering"));
|
||||||
|
});
|
||||||
|
|
||||||
progress.start(100);
|
progress.start(100);
|
||||||
try {
|
try {
|
||||||
Files.createParentDirs(tempFile);
|
Files.createParentDirs(tempFile);
|
||||||
@ -443,8 +476,8 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
protected void done() {
|
protected void done() {
|
||||||
try {
|
try {
|
||||||
super.get();
|
super.get();
|
||||||
|
|
||||||
if(this.isCancelled()) {
|
if (this.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,8 +493,8 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
playBinBus.connect(endOfStreamListener);
|
playBinBus.connect(endOfStreamListener);
|
||||||
playBinBus.connect(stateChangeListener);
|
playBinBus.connect(stateChangeListener);
|
||||||
playBinBus.connect(errorListener);
|
playBinBus.connect(errorListener);
|
||||||
|
|
||||||
if(this.isCancelled()) {
|
if (this.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,14 +504,14 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
videoPanel.add(fxPanel);
|
videoPanel.add(fxPanel);
|
||||||
fxAppSink = new JavaFxAppSink("JavaFxAppSink", fxPanel);
|
fxAppSink = new JavaFxAppSink("JavaFxAppSink", fxPanel);
|
||||||
gstPlayBin.setVideoSink(fxAppSink);
|
gstPlayBin.setVideoSink(fxAppSink);
|
||||||
|
|
||||||
if(this.isCancelled()) {
|
if (this.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gstPlayBin.setVolume((audioSlider.getValue() * 2.0) / 100.0);
|
gstPlayBin.setVolume((audioSlider.getValue() * 2.0) / 100.0);
|
||||||
gstPlayBin.pause();
|
gstPlayBin.pause();
|
||||||
|
|
||||||
timer.start();
|
timer.start();
|
||||||
enableComponents(true);
|
enableComponents(true);
|
||||||
} catch (CancellationException ex) {
|
} catch (CancellationException ex) {
|
||||||
@ -506,12 +539,14 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
* pipeline. We start this updater when data-flow has just been
|
* pipeline. We start this updater when data-flow has just been
|
||||||
* initiated so buffering may still be in progress.
|
* initiated so buffering may still be in progress.
|
||||||
*/
|
*/
|
||||||
if (duration != -1) {
|
if (duration >= 0 && position >= 0) {
|
||||||
double relativePosition = (double) position / duration;
|
double relativePosition = (double) position / duration;
|
||||||
progressSlider.setValue((int) (relativePosition * PROGRESS_SLIDER_SIZE));
|
progressSlider.setValue((int) (relativePosition * PROGRESS_SLIDER_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTimeLabel(position, duration);
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
updateTimeLabel(position, duration);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -524,15 +559,22 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
java.awt.GridBagConstraints gridBagConstraints;
|
||||||
|
|
||||||
videoPanel = new javax.swing.JPanel();
|
videoPanel = new javax.swing.JPanel();
|
||||||
controlPanel = new javax.swing.JPanel();
|
controlPanel = new javax.swing.JPanel();
|
||||||
progressSlider = new javax.swing.JSlider();
|
progressSlider = new javax.swing.JSlider();
|
||||||
infoLabel = new javax.swing.JLabel();
|
|
||||||
playButton = new javax.swing.JButton();
|
|
||||||
progressLabel = new javax.swing.JLabel();
|
progressLabel = new javax.swing.JLabel();
|
||||||
|
buttonPanel = new javax.swing.JPanel();
|
||||||
|
playButton = new javax.swing.JButton();
|
||||||
|
fastForwardButton = new javax.swing.JButton();
|
||||||
|
rewindButton = new javax.swing.JButton();
|
||||||
VolumeIcon = new javax.swing.JLabel();
|
VolumeIcon = new javax.swing.JLabel();
|
||||||
audioSlider = new javax.swing.JSlider();
|
audioSlider = new javax.swing.JSlider();
|
||||||
|
infoLabel = new javax.swing.JLabel();
|
||||||
|
playBackPanel = new javax.swing.JPanel();
|
||||||
|
playBackSpeedComboBox = new javax.swing.JComboBox<>();
|
||||||
|
playBackSpeedLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
javax.swing.GroupLayout videoPanelLayout = new javax.swing.GroupLayout(videoPanel);
|
javax.swing.GroupLayout videoPanelLayout = new javax.swing.GroupLayout(videoPanel);
|
||||||
videoPanel.setLayout(videoPanelLayout);
|
videoPanel.setLayout(videoPanelLayout);
|
||||||
@ -542,7 +584,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
);
|
);
|
||||||
videoPanelLayout.setVerticalGroup(
|
videoPanelLayout.setVerticalGroup(
|
||||||
videoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
videoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 259, Short.MAX_VALUE)
|
.addGap(0, 131, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
|
|
||||||
progressSlider.setValue(0);
|
progressSlider.setValue(0);
|
||||||
@ -551,8 +593,9 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
progressSlider.setMinimumSize(new java.awt.Dimension(36, 21));
|
progressSlider.setMinimumSize(new java.awt.Dimension(36, 21));
|
||||||
progressSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
progressSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(infoLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.infoLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.progressLabel.text")); // NOI18N
|
||||||
infoLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
|
||||||
|
buttonPanel.setLayout(new java.awt.GridBagLayout());
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(playButton, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.playButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(playButton, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.playButton.text")); // NOI18N
|
||||||
playButton.addActionListener(new java.awt.event.ActionListener() {
|
playButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
@ -560,56 +603,136 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
playButtonActionPerformed(evt);
|
playButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
|
gridBagConstraints.gridx = 1;
|
||||||
|
gridBagConstraints.gridy = 0;
|
||||||
|
gridBagConstraints.ipadx = 21;
|
||||||
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(5, 6, 0, 0);
|
||||||
|
buttonPanel.add(playButton, gridBagConstraints);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.progressLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(fastForwardButton, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.fastForwardButton.text")); // NOI18N
|
||||||
|
fastForwardButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
fastForwardButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
|
gridBagConstraints.gridx = 2;
|
||||||
|
gridBagConstraints.gridy = 0;
|
||||||
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(5, 6, 0, 0);
|
||||||
|
buttonPanel.add(fastForwardButton, gridBagConstraints);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(rewindButton, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.rewindButton.text")); // NOI18N
|
||||||
|
rewindButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
rewindButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
|
gridBagConstraints.gridx = 0;
|
||||||
|
gridBagConstraints.gridy = 0;
|
||||||
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(5, 0, 1, 0);
|
||||||
|
buttonPanel.add(rewindButton, gridBagConstraints);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(VolumeIcon, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.VolumeIcon.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(VolumeIcon, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.VolumeIcon.text")); // NOI18N
|
||||||
|
VolumeIcon.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
|
||||||
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
|
gridBagConstraints.gridx = 3;
|
||||||
|
gridBagConstraints.gridy = 0;
|
||||||
|
gridBagConstraints.ipadx = 8;
|
||||||
|
gridBagConstraints.ipady = 7;
|
||||||
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(6, 6, 0, 0);
|
||||||
|
buttonPanel.add(VolumeIcon, gridBagConstraints);
|
||||||
|
|
||||||
audioSlider.setMajorTickSpacing(10);
|
audioSlider.setMajorTickSpacing(10);
|
||||||
audioSlider.setMaximum(50);
|
audioSlider.setMaximum(50);
|
||||||
audioSlider.setMinorTickSpacing(5);
|
audioSlider.setMinorTickSpacing(5);
|
||||||
audioSlider.setPaintTicks(true);
|
|
||||||
audioSlider.setToolTipText(org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.audioSlider.toolTipText")); // NOI18N
|
audioSlider.setToolTipText(org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.audioSlider.toolTipText")); // NOI18N
|
||||||
audioSlider.setValue(25);
|
audioSlider.setValue(25);
|
||||||
audioSlider.setMinimumSize(new java.awt.Dimension(200, 21));
|
audioSlider.setMinimumSize(new java.awt.Dimension(200, 21));
|
||||||
audioSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
audioSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
||||||
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
|
gridBagConstraints.gridx = 4;
|
||||||
|
gridBagConstraints.gridy = 0;
|
||||||
|
gridBagConstraints.ipadx = -116;
|
||||||
|
gridBagConstraints.ipady = 7;
|
||||||
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(3, 1, 0, 10);
|
||||||
|
buttonPanel.add(audioSlider, gridBagConstraints);
|
||||||
|
|
||||||
|
infoLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(infoLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.infoLabel.text")); // NOI18N
|
||||||
|
infoLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
||||||
|
|
||||||
|
playBackSpeedComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "0.25x", "0.50x", "0.75x", "1x", "1.25x", "1.50x", "1.75x", "2x" }));
|
||||||
|
playBackSpeedComboBox.setSelectedIndex(3);
|
||||||
|
playBackSpeedComboBox.setMaximumSize(new java.awt.Dimension(53, 23));
|
||||||
|
playBackSpeedComboBox.setMinimumSize(new java.awt.Dimension(53, 23));
|
||||||
|
playBackSpeedComboBox.setPreferredSize(new java.awt.Dimension(53, 23));
|
||||||
|
playBackSpeedComboBox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
playBackSpeedComboBoxActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(playBackSpeedLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.playBackSpeedLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout playBackPanelLayout = new javax.swing.GroupLayout(playBackPanel);
|
||||||
|
playBackPanel.setLayout(playBackPanelLayout);
|
||||||
|
playBackPanelLayout.setHorizontalGroup(
|
||||||
|
playBackPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(playBackPanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(playBackSpeedLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(playBackSpeedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(13, 13, 13))
|
||||||
|
);
|
||||||
|
playBackPanelLayout.setVerticalGroup(
|
||||||
|
playBackPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(playBackPanelLayout.createSequentialGroup()
|
||||||
|
.addGap(6, 6, 6)
|
||||||
|
.addGroup(playBackPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(playBackSpeedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(playBackSpeedLabel))
|
||||||
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
|
||||||
javax.swing.GroupLayout controlPanelLayout = new javax.swing.GroupLayout(controlPanel);
|
javax.swing.GroupLayout controlPanelLayout = new javax.swing.GroupLayout(controlPanel);
|
||||||
controlPanel.setLayout(controlPanelLayout);
|
controlPanel.setLayout(controlPanelLayout);
|
||||||
controlPanelLayout.setHorizontalGroup(
|
controlPanelLayout.setHorizontalGroup(
|
||||||
controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, controlPanelLayout.createSequentialGroup()
|
.addGroup(controlPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(controlPanelLayout.createSequentialGroup()
|
.addComponent(infoLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(playButton, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, controlPanelLayout.createSequentialGroup()
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(progressSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 680, Short.MAX_VALUE)
|
.addComponent(buttonPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addComponent(progressSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE))
|
||||||
.addComponent(progressLabel))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(controlPanelLayout.createSequentialGroup()
|
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(infoLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(progressLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGap(18, 18, 18)
|
.addComponent(playBackPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
|
||||||
.addComponent(VolumeIcon, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGap(10, 10, 10)))
|
||||||
.addGap(2, 2, 2)
|
.addGap(0, 0, 0))
|
||||||
.addComponent(audioSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
|
||||||
.addContainerGap())
|
|
||||||
);
|
);
|
||||||
controlPanelLayout.setVerticalGroup(
|
controlPanelLayout.setVerticalGroup(
|
||||||
controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(controlPanelLayout.createSequentialGroup()
|
.addGroup(controlPanelLayout.createSequentialGroup()
|
||||||
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGap(0, 0, 0)
|
||||||
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(progressLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(progressLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(progressSlider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addComponent(progressSlider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
.addComponent(playButton))
|
.addGap(5, 5, 5)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addComponent(buttonPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(audioSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(playBackPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
|
||||||
.addGroup(controlPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGap(14, 14, 14)
|
||||||
.addComponent(VolumeIcon, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(infoLabel))
|
||||||
.addComponent(infoLabel)))
|
|
||||||
.addGap(13, 13, 13))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
@ -628,23 +751,96 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void rewindButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rewindButtonActionPerformed
|
||||||
|
long currentTime = gstPlayBin.queryPosition(TimeUnit.NANOSECONDS);
|
||||||
|
//Skip 30 seconds.
|
||||||
|
long rewindDelta = TimeUnit.NANOSECONDS.convert(SKIP_IN_SECONDS, TimeUnit.SECONDS);
|
||||||
|
//Ensure new video position is within bounds
|
||||||
|
long newTime = Math.max(currentTime - rewindDelta, 0);
|
||||||
|
double playBackRate = getPlayBackRate();
|
||||||
|
gstPlayBin.seek(playBackRate,
|
||||||
|
Format.TIME,
|
||||||
|
//FLUSH - flushes the pipeline
|
||||||
|
//ACCURATE - video will seek exactly to the position requested
|
||||||
|
EnumSet.of(SeekFlags.FLUSH, SeekFlags.ACCURATE),
|
||||||
|
//Set the start position to newTime
|
||||||
|
SeekType.SET, newTime,
|
||||||
|
//Do nothing for the end position
|
||||||
|
SeekType.NONE, -1);
|
||||||
|
}//GEN-LAST:event_rewindButtonActionPerformed
|
||||||
|
|
||||||
|
private void fastForwardButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fastForwardButtonActionPerformed
|
||||||
|
long duration = gstPlayBin.queryDuration(TimeUnit.NANOSECONDS);
|
||||||
|
long currentTime = gstPlayBin.queryPosition(TimeUnit.NANOSECONDS);
|
||||||
|
//Skip 30 seconds.
|
||||||
|
long fastForwardDelta = TimeUnit.NANOSECONDS.convert(SKIP_IN_SECONDS, TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
//Ignore fast forward requests if there are less than 30 seconds left.
|
||||||
|
if (currentTime + fastForwardDelta >= duration) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
long newTime = currentTime + fastForwardDelta;
|
||||||
|
double playBackRate = getPlayBackRate();
|
||||||
|
gstPlayBin.seek(playBackRate,
|
||||||
|
Format.TIME,
|
||||||
|
//FLUSH - flushes the pipeline
|
||||||
|
//ACCURATE - video will seek exactly to the position requested
|
||||||
|
EnumSet.of(SeekFlags.FLUSH, SeekFlags.ACCURATE),
|
||||||
|
//Set the start position to newTime
|
||||||
|
SeekType.SET, newTime,
|
||||||
|
//Do nothing for the end position
|
||||||
|
SeekType.NONE, -1);
|
||||||
|
}//GEN-LAST:event_fastForwardButtonActionPerformed
|
||||||
|
|
||||||
private void playButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_playButtonActionPerformed
|
private void playButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_playButtonActionPerformed
|
||||||
if (gstPlayBin.isPlaying()) {
|
if (gstPlayBin.isPlaying()) {
|
||||||
gstPlayBin.pause();
|
gstPlayBin.pause();
|
||||||
} else {
|
} else {
|
||||||
|
double playBackRate = getPlayBackRate();
|
||||||
|
long currentTime = gstPlayBin.queryPosition(TimeUnit.NANOSECONDS);
|
||||||
|
//Set playback rate before play.
|
||||||
|
gstPlayBin.seek(playBackRate,
|
||||||
|
Format.TIME,
|
||||||
|
//FLUSH - flushes the pipeline
|
||||||
|
//ACCURATE - video will seek exactly to the position requested
|
||||||
|
EnumSet.of(SeekFlags.FLUSH, SeekFlags.ACCURATE),
|
||||||
|
//Set the start position to newTime
|
||||||
|
SeekType.SET, currentTime,
|
||||||
|
//Do nothing for the end position
|
||||||
|
SeekType.NONE, -1);
|
||||||
gstPlayBin.play();
|
gstPlayBin.play();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_playButtonActionPerformed
|
}//GEN-LAST:event_playButtonActionPerformed
|
||||||
|
|
||||||
|
private void playBackSpeedComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_playBackSpeedComboBoxActionPerformed
|
||||||
|
double playBackRate = getPlayBackRate();
|
||||||
|
long currentTime = gstPlayBin.queryPosition(TimeUnit.NANOSECONDS);
|
||||||
|
gstPlayBin.seek(playBackRate,
|
||||||
|
Format.TIME,
|
||||||
|
//FLUSH - flushes the pipeline
|
||||||
|
//ACCURATE - video will seek exactly to the position requested
|
||||||
|
EnumSet.of(SeekFlags.FLUSH, SeekFlags.ACCURATE),
|
||||||
|
//Set the position to the currentTime, we are only adjusting the
|
||||||
|
//playback rate.
|
||||||
|
SeekType.SET, currentTime,
|
||||||
|
SeekType.NONE, 0);
|
||||||
|
}//GEN-LAST:event_playBackSpeedComboBoxActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JLabel VolumeIcon;
|
private javax.swing.JLabel VolumeIcon;
|
||||||
private javax.swing.JSlider audioSlider;
|
private javax.swing.JSlider audioSlider;
|
||||||
|
private javax.swing.JPanel buttonPanel;
|
||||||
private javax.swing.JPanel controlPanel;
|
private javax.swing.JPanel controlPanel;
|
||||||
|
private javax.swing.JButton fastForwardButton;
|
||||||
private javax.swing.JLabel infoLabel;
|
private javax.swing.JLabel infoLabel;
|
||||||
|
private javax.swing.JPanel playBackPanel;
|
||||||
|
private javax.swing.JComboBox<String> playBackSpeedComboBox;
|
||||||
|
private javax.swing.JLabel playBackSpeedLabel;
|
||||||
private javax.swing.JButton playButton;
|
private javax.swing.JButton playButton;
|
||||||
private javax.swing.JLabel progressLabel;
|
private javax.swing.JLabel progressLabel;
|
||||||
private javax.swing.JSlider progressSlider;
|
private javax.swing.JSlider progressSlider;
|
||||||
|
private javax.swing.JButton rewindButton;
|
||||||
private javax.swing.JPanel videoPanel;
|
private javax.swing.JPanel videoPanel;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user