Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
MediaFileViewer.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2011-2019 Basis Technology Corp.
5 * Contact: carrier <at> sleuthkit <dot> org
6 *s
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19package org.sleuthkit.autopsy.contentviewers;
20
21import java.awt.CardLayout;
22import java.awt.Component;
23import java.util.ArrayList;
24import java.util.List;
25import java.util.logging.Level;
26import org.freedesktop.gstreamer.GstException;
27import org.openide.util.NbBundle;
28import org.sleuthkit.autopsy.coreutils.Logger;
29import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
30import org.sleuthkit.datamodel.AbstractFile;
31
35@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
36class MediaFileViewer extends javax.swing.JPanel implements FileTypeViewer {
37
38 private static final Logger LOGGER = Logger.getLogger(MediaFileViewer.class.getName());
39 private static final long serialVersionUID = 1L;
40 private AbstractFile lastFile;
41 //UI
42 private MediaPlayerPanel mediaPlayerPanel;
43 private final MediaViewImagePanel imagePanel;
44 private final boolean imagePanelInited;
45
46 private static final String IMAGE_VIEWER_LAYER = "IMAGE"; //NON-NLS
47 private static final String MEDIA_PLAYER_LAYER = "AUDIO_VIDEO"; //NON-NLS
48
52 MediaFileViewer() {
53
54 initComponents();
55
56 try {
57 mediaPlayerPanel = new MediaPlayerPanel();
58 } catch (GstException | UnsatisfiedLinkError ex) {
59 LOGGER.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and frame extraction capabilities", ex); //NON-NLS
61 NbBundle.getMessage(this.getClass(), "MediaFileViewer.initGst.gstException.msg"),
62 ex.getMessage());
63 }
64 imagePanel = new MediaViewImagePanel();
65 imagePanelInited = imagePanel.isInited();
66
67 customizeComponents();
68 LOGGER.log(Level.INFO, "Created MediaView instance: {0}", this); //NON-NLS
69 }
70
71 private void customizeComponents() {
72 add(imagePanel, IMAGE_VIEWER_LAYER);
73
74 if (mediaPlayerPanel != null) {
75 add(mediaPlayerPanel, MEDIA_PLAYER_LAYER);
76 }
77
78 showImagePanel();
79 }
80
86 @SuppressWarnings("unchecked")
87 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
88 private void initComponents() {
89
90 setLayout(new java.awt.CardLayout());
91 getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(MediaFileViewer.class, "MediaFileViewer.AccessibleContext.accessibleDescription")); // NOI18N
92 }// </editor-fold>//GEN-END:initComponents
93 // Variables declaration - do not modify//GEN-BEGIN:variables
94 // End of variables declaration//GEN-END:variables
95
101 @Override
102 public List<String> getSupportedMIMETypes() {
103
104 List<String> mimeTypes = new ArrayList<>();
105
106 mimeTypes.addAll(this.imagePanel.getSupportedMimeTypes());
107 if (mediaPlayerPanel != null) {
108 mimeTypes.addAll(this.mediaPlayerPanel.getSupportedMimeTypes());
109 }
110
111 return mimeTypes;
112 }
113
119 @Override
120 public void setFile(AbstractFile file) {
121 try {
122
123 if (file == null) {
124 resetComponent();
125 return;
126 }
127
128 if (file.equals(lastFile)) {
129 return; //prevent from loading twice if setNode() called mult. times
130 }
131
132 lastFile = file;
133 if (mediaPlayerPanel != null && mediaPlayerPanel.isSupported(file)) {
134 mediaPlayerPanel.loadFile(file);
135 this.showVideoPanel();
136 } else if (imagePanelInited && imagePanel.isSupported(file)) {
137 imagePanel.loadFile(file);
138 this.showImagePanel();
139 }
140 } catch (Exception e) {
141 LOGGER.log(Level.SEVERE, "Exception while setting node", e); //NON-NLS
142 }
143 }
144
148 private void showVideoPanel() {
149 CardLayout layout = (CardLayout) this.getLayout();
150 layout.show(this, MEDIA_PLAYER_LAYER);
151 }
152
156 private void showImagePanel() {
157 CardLayout layout = (CardLayout) this.getLayout();
158 layout.show(this, IMAGE_VIEWER_LAYER);
159 }
160
161 @Override
162 public Component getComponent() {
163 return this;
164 }
165
166 @Override
167 public void resetComponent() {
168 if (mediaPlayerPanel != null) {
169 mediaPlayerPanel.reset();
170 }
171 imagePanel.reset();
172 lastFile = null;
173 }
174
178 protected interface MediaViewPanel {
179
183 List<String> getSupportedMimeTypes();
184
191
192 boolean isSupported(AbstractFile file);
193 }
194
195 @Override
196 public boolean isSupported(AbstractFile file){
197 return mediaPlayerPanel.isSupported(file) || imagePanel.isSupported(file);
198 }
199}
synchronized static Logger getLogger(String name)
Definition Logger.java:124

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.