Changeset 203
- Timestamp:
- 03/23/08 00:48:12 (10 months ago)
- Files:
-
- MediAnnotate/trunk/src/MyResources.properties (added)
- MediAnnotate/trunk/src/org/mediannotate/app/MAController.java (modified) (3 diffs)
- MediAnnotate/trunk/src/org/mediannotate/app/PlayerPanel.java (modified) (10 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/IMediaObserver.java (copied) (copied from MediAnnotate/trunk/src/org/mediannotate/dom/IMovieObserver.java) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/dom/IMediaSubscriber.java (copied) (copied from MediAnnotate/trunk/src/org/mediannotate/dom/IMovieSubscriber.java) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/dom/Media.java (copied) (copied from MediAnnotate/trunk/src/org/mediannotate/dom/Movie.java) (2 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/MediaException.java (added)
- MediAnnotate/trunk/src/org/mediannotate/dom/MediaFactory.java (copied) (copied from MediAnnotate/trunk/src/org/mediannotate/dom/MovieFactory.java) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/dom/MediaSubscriber.java (copied) (copied from MediAnnotate/trunk/src/org/mediannotate/dom/MovieSubscriber.java) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTAudio.java (added)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTAudioWaveformUnsupported.java (added)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTMovie.java (modified) (3 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/audio (added)
- MediAnnotate/trunk/src/org/mediannotate/dom/audio/AudioInfo.java (added)
- MediAnnotate/trunk/src/org/mediannotate/ui/audio (added)
- MediAnnotate/trunk/src/org/mediannotate/ui/audio/SingleWaveformPanel.java (added)
- MediAnnotate/trunk/src/org/mediannotate/ui/listener/PlayButtonListener.java (modified) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/ui/listener/StopButtonListener.java (modified) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/ui/listener/TimeLineListener.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
MediAnnotate/trunk/src/org/mediannotate/app/MAController.java
r173 r203 12 12 import javax.swing.filechooser.FileFilter; 13 13 14 import org.mediannotate.dom.Movie; 15 import org.mediannotate.dom.MovieFactory; 14 import org.mediannotate.dom.Media; 15 import org.mediannotate.dom.MediaException; 16 import org.mediannotate.dom.MediaFactory; 16 17 17 18 … … 46 47 // TODO Auto-generated method stub 47 48 try { 48 Pattern p = Pattern.compile( "^.*\\.(avi|mov|mpg)$", Pattern.CASE_INSENSITIVE);49 Pattern p = Pattern.compile(MediaFactory.getAcceptedExpressionPattern(), Pattern.CASE_INSENSITIVE); 49 50 Matcher m = p.matcher(f.getCanonicalPath()); 50 51 return m.matches() || f.isDirectory(); 51 52 } catch (IOException e) { 53 // TODO Auto-generated catch block 54 e.printStackTrace(); 55 } catch (Exception e) { 52 56 // TODO Auto-generated catch block 53 57 e.printStackTrace(); … … 79 83 synchronized (mutex) { 80 84 81 M oviepreviousMovie = myPlayerPanel.getCurrentMovie();85 Media previousMovie = myPlayerPanel.getCurrentMovie(); 82 86 83 myPlayerPanel.displayMovie(MovieFactory.getMovie(url)); 87 try { 88 myPlayerPanel.displayMovie(MediaFactory.getMedia(url)); 89 } catch (MediaException e) { 90 // TODO Auto-generated catch block 91 e.printStackTrace(); 92 } 84 93 85 94 if(previousMovie != null) { MediAnnotate/trunk/src/org/mediannotate/app/PlayerPanel.java
r184 r203 15 15 import javax.swing.JPanel; 16 16 17 import org.mediannotate.dom.IM ovieObserver;18 import org.mediannotate.dom.M ovie;17 import org.mediannotate.dom.IMediaObserver; 18 import org.mediannotate.dom.Media; 19 19 import org.mediannotate.ui.TimeLinePanel; 20 20 import org.mediannotate.ui.UtilityPanel; … … 26 26 import quicktime.QTException; 27 27 28 public class PlayerPanel extends JPanel implements IM ovieObserver, KeyListener, ComponentListener, MouseListener{28 public class PlayerPanel extends JPanel implements IMediaObserver, KeyListener, ComponentListener, MouseListener{ 29 29 /** 30 30 * … … 35 35 private TimeLinePanel timeLinePanel = new TimeLinePanel(); 36 36 private UtilityPanel utilityPanel; 37 private Component currentM ovieComponent;37 private Component currentMediaComponent; 38 38 private JPanel moviePanel = new JPanel(); 39 M ovie currentMovie;39 Media currentMedia; 40 40 41 41 … … 60 60 } 61 61 62 public M oviegetCurrentMovie() {63 return currentM ovie;62 public Media getCurrentMovie() { 63 return currentMedia; 64 64 } 65 65 … … 74 74 */ 75 75 public long getTime() { 76 return currentM ovie.getTime();76 return currentMedia.getTime(); 77 77 } 78 78 … … 85 85 * @param m 86 86 */ 87 public void displayMovie(M oviem) {87 public void displayMovie(Media m) { 88 88 89 89 try { 90 90 if(oldMovieComponent != null) { 91 91 moviePanel.remove(oldMovieComponent); 92 currentM ovie.removeMovieObserver(this);92 currentMedia.removeMediaObserver(this); 93 93 } 94 94 } catch (Exception e) { … … 96 96 } 97 97 98 currentM ovie= m;99 if(currentM ovie!= null) {100 currentM ovie.addMovieObserver(this);101 currentM ovieComponent = m.getComponent();102 oldMovieComponent = currentM ovieComponent;103 Dimension newD = getAspectRespectingDimension(moviePanel.getSize(), currentMovieComponent.getPreferredSize());104 currentM ovieComponent.setBounds((moviePanel.getWidth()-newD.width)/2 , (moviePanel.getHeight()-newD.height)/2, newD.width, newD.height);105 106 moviePanel.add(currentM ovieComponent);107 currentM ovieComponent.setVisible(true);98 currentMedia = m; 99 if(currentMedia != null) { 100 currentMedia.addMediaObserver(this); 101 currentMediaComponent = m.getComponent(); 102 oldMovieComponent = currentMediaComponent; 103 Dimension newD = currentMedia.getAspectRespectingDimension(moviePanel.getSize()); 104 currentMediaComponent.setBounds((moviePanel.getWidth()-newD.width)/2 , (moviePanel.getHeight()-newD.height)/2, newD.width, newD.height); 105 106 moviePanel.add(currentMediaComponent); 107 currentMediaComponent.setVisible(true); 108 108 moviePanel.repaint(); 109 durationTime = new Time(currentM ovie.getDuration());110 utilityPanel.setDuration(currentM ovie.getDuration());109 durationTime = new Time(currentMedia.getDuration()); 110 utilityPanel.setDuration(currentMedia.getDuration()); 111 111 112 stopListener.setMovie(currentM ovie);113 playListener.setMovie(currentM ovie);114 timeLineListener.setMovie(currentM ovie);112 stopListener.setMovie(currentMedia); 113 playListener.setMovie(currentMedia); 114 timeLineListener.setMovie(currentMedia); 115 115 } 116 116 … … 157 157 158 158 public void notifyOfMovieChange() { 159 setTime(currentM ovie.getTime());159 setTime(currentMedia.getTime()); 160 160 try { 161 currentM ovie.redraw();161 currentMedia.redraw(); 162 162 } catch (QTException e) { 163 163 // TODO Auto-generated catch block 164 164 e.printStackTrace(); 165 } catch (Exception e) { 166 // TODO Auto-generated catch block 167 e.printStackTrace(); 165 168 } 166 169 } … … 168 171 public long getInTime() { 169 172 if(!getTimeLinePanel().isInActive()) return 0; 170 return currentM ovie.getIn();173 return currentMedia.getIn(); 171 174 } 172 175 173 176 public long getOutTime() { 174 177 if(!getTimeLinePanel().isOutActive()) return durationTime.getAllInMilli(); 175 return currentM ovie.getOut();178 return currentMedia.getOut(); 176 179 } 177 180 178 181 public void setInTime(long time) { 179 182 getTimeLinePanel().setIn(time/(float)durationTime.getAllInMilli()); 180 currentM ovie.setIn(time);183 currentMedia.setIn(time); 181 184 } 182 185 183 186 public void setOutTime(long time) { 184 187 getTimeLinePanel().setOut(time/(float)durationTime.getAllInMilli()); 185 currentM ovie.setOut(time);188 currentMedia.setOut(time); 186 189 } 187 190 … … 213 216 public void componentResized(ComponentEvent e) { 214 217 if(oldMovieComponent!=null) { 215 Dimension newD = getAspectRespectingDimension(moviePanel.getSize(), currentMovieComponent.getPreferredSize());216 currentM ovieComponent.setBounds((moviePanel.getWidth()-newD.width)/2 , (moviePanel.getHeight()-newD.height)/2, newD.width, newD.height);218 Dimension newD = currentMedia.getAspectRespectingDimension(moviePanel.getSize()); 219 currentMediaComponent.setBounds((moviePanel.getWidth()-newD.width)/2 , (moviePanel.getHeight()-newD.height)/2, newD.width, newD.height); 217 220 repaint(); 218 221 } 219 222 } 220 223 221 public static Dimension getAspectRespectingDimension(Dimension outter, Dimension inner) { 222 float aspectRatio = inner.width/(float)inner.height; 223 if(outter.width/aspectRatio < outter.height) { 224 return new Dimension(outter.width, (int)(outter.width/aspectRatio)); 225 } else { 226 return new Dimension((int)(outter.height*aspectRatio), outter.height); 227 } 228 229 } 224 230 225 231 226 public void mouseClicked(MouseEvent e) { MediAnnotate/trunk/src/org/mediannotate/dom/IMediaObserver.java
r116 r203 1 1 package org.mediannotate.dom; 2 2 3 public interface IM ovieObserver {3 public interface IMediaObserver { 4 4 public void notifyOfMovieChange(); 5 5 } MediAnnotate/trunk/src/org/mediannotate/dom/IMediaSubscriber.java
r145 r203 1 1 package org.mediannotate.dom; 2 2 3 public interface IM ovieSubscriber {4 public void addM ovieObserver(IMovieObserver observer);5 public void removeM ovieObserver(IMovieObserver observer);3 public interface IMediaSubscriber { 4 public void addMediaObserver(IMediaObserver observer); 5 public void removeMediaObserver(IMediaObserver observer); 6 6 public void notifyOfChange(); 7 7 } MediAnnotate/trunk/src/org/mediannotate/dom/Media.java
r150 r203 2 2 3 3 import java.awt.Component; 4 import java.awt.Dimension; 5 import java.io.BufferedInputStream; 6 import java.io.BufferedOutputStream; 7 import java.io.File; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 import java.net.MalformedURLException; 11 import java.net.URL; 12 import java.net.URLDecoder; 13 import java.util.HashMap; 4 14 5 import quicktime.QTException;15 import org.mediannotate.app.MediAnnotater; 6 16 7 public interface Movie extends IMovieSubscriber{17 public abstract class Media extends MediaSubscriber { 8 18 9 19 /** … … 11 21 * @return 12 22 */ 13 public long getTime(); 14 public void setTime(long time); 15 public void setIn(long time); 16 public void setOut(long time); 17 public long getIn(); 18 public long getOut(); 19 public boolean shouldStopPlaying(); 20 public long getDuration(); 21 public void start(); 22 public void stop(); 23 public Component getComponent(); 24 public void dispose(); 25 public boolean isPlaying(); 26 public void redraw() throws QTException; 23 public abstract long getTime(); 24 private static HashMap<String, File> knownFiles = new HashMap<String, File>(); 25 protected File mediaFile; 26 27 28 public Media(String media_url) throws MediaException{ 29 try { 30 String original_url = media_url; 31 32 33 if(knownFiles.containsKey(original_url)) { 34 mediaFile = knownFiles.get(original_url); 35 } else { 36 37 mediaFile = new File(URLDecoder.decode(media_url, "UTF-8").replaceAll("file:\\\\*(.*)", "$1")); 38 39 if(!mediaFile.exists()) { 40 media_url = new URL(media_url).toExternalForm(); 41 42 URL myURL = new URL(media_url); 43 mediaFile = File.createTempFile("vertov_", media_url.replaceFirst("^(.*)(\\..*)$", "$2")); 44 mediaFile.deleteOnExit(); 45 MediAnnotater.tempFiles.add(mediaFile); 46 47 BufferedInputStream bis = new BufferedInputStream(myURL.openStream()); 48 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(mediaFile)); 49 byte[] myBytes = new byte[1024*1024]; 50 int myByteCount = bis.read(myBytes); 51 int totalCount = myByteCount; 52 while(myByteCount != -1) { 53 System.out.println("We've read: " + totalCount); 54 bos.write(myBytes, 0, myByteCount); 55 myByteCount = bis.read(myBytes); 56 totalCount += myByteCount; 57 } 58 System.out.println("We've finished loading the file"); 59 60 bos.flush(); 61 bos.close(); 62 bis.close(); 63 media_url = mediaFile.getAbsolutePath().replaceFirst("^file:/([^/])", "file://$1"); 64 } 65 knownFiles.put(original_url, mediaFile); 66 } 67 68 69 } catch (MalformedURLException e1) { 70 e1.printStackTrace(); 71 } catch (IOException e) { 72 // TODO Auto-generated catch block 73 e.printStackTrace(); 74 } 75 } 76 77 public Dimension getAspectRespectingDimension(Dimension outter) { 78 Dimension inner = getComponent().getPreferredSize(); 79 float aspectRatio = inner.width/(float)inner.height; 80 if(outter.width/aspectRatio < outter.height) { 81 return new Dimension(outter.width, (int)(outter.width/aspectRatio)); 82 } else { 83 return new Dimension((int)(outter.height*aspectRatio), outter.height); 84 } 85 } 86 87 public abstract void setTime(long time); 88 public abstract void setIn(long time); 89 public abstract void setOut(long time); 90 public abstract long getIn(); 91 public abstract long getOut(); 92 public abstract boolean shouldStopPlaying(); 93 public abstract long getDuration(); 94 public abstract void start(); 95 public abstract void stop(); 96 public abstract Component getComponent(); 97 public abstract void dispose(); 98 public abstract boolean isPlaying(); 99 public abstract void redraw() throws Exception; 27 100 28 101 } MediAnnotate/trunk/src/org/mediannotate/dom/MediaFactory.java
r116 r203 1 1 package org.mediannotate.dom; 2 2 3 public class MovieFactory { 3 import java.util.ResourceBundle; 4 4 5 public static Movie getMovie(String movie_url) { 6 return new QTMovie(movie_url); 5 public class MediaFactory { 6 7 /* 8 * These constatnts should have strings that can be matched against available 9 * OS strings from System.ge"os.name" 10 */ 11 private static final String LINUX_OS = "LINUX"; 12 private static final String MAC_OS = "Mac OS"; 13 private static final String WINDOWS_OS = "Windows"; 14 15 private static final String osProperty = System.getProperty("os.name"); 16 17 private static String os = null; 18 private static String extension_pattern = null; 19 private static final String LINUX = "linux"; 20 private static final String MAC = "mac"; 21 private static final String WINDOWS = "windows"; 22 public static Media getMedia(String media_url) throws MediaException{ 23 String extension = findExtensionFromURL(media_url); 24 25 26 System.out.println(extension); 27 28 try { 29 String className = ResourceBundle.getBundle("MyResources").getString(getOS()+extension); 30 return (Media) Class.forName(className).getConstructor(String.class).newInstance(media_url); 31 } catch (Exception e) { 32 throw new MediaException(e); 33 } 34 35 } 36 37 38 39 private static String getOS() { 40 if(os == null) { 41 if(osProperty.contains(MAC_OS)) os = MAC; 42 else if(osProperty.contains(LINUX_OS)) os = LINUX; 43 else if(osProperty.contains(WINDOWS_OS)) os = WINDOWS; 44 } 45 return os; 46 } 47 48 private static String findExtensionFromURL(String url) { 49 return url.substring(url.lastIndexOf('.')); 50 } 51 52 public static String getAcceptedExpressionPattern() { 53 if(extension_pattern == null) { 54 extension_pattern = ResourceBundle.getBundle("MyResources").getString("extension_"+getOS()); 55 } 56 return extension_pattern; 7 57 } 8 58 MediAnnotate/trunk/src/org/mediannotate/dom/MediaSubscriber.java
r145 r203 3 3 import java.util.LinkedList; 4 4 5 public class M ovieSubscriber implements IMovieSubscriber {5 public class MediaSubscriber implements IMediaSubscriber { 6 6 7 LinkedList<IM ovieObserver> observers = new LinkedList<IMovieObserver>();7 LinkedList<IMediaObserver> observers = new LinkedList<IMediaObserver>(); 8 8 9 public void addM ovieObserver(IMovieObserver observer) {9 public void addMediaObserver(IMediaObserver observer) { 10 10 observers.add(observer); 11 11 } 12 12 13 public void removeM ovieObserver(IMovieObserver observer) {13 public void removeMediaObserver(IMediaObserver observer) { 14 14 observers.remove(observer); 15 15 } 16 16 17 17 public void notifyOfChange() { 18 for(IM ovieObserver o: observers) {18 for(IMediaObserver o: observers) { 19 19 o.notifyOfMovieChange(); 20 20 } MediAnnotate/trunk/src/org/mediannotate/dom/QTMovie.java
r186 r203 2 2 3 3 import java.awt.Component; 4 import java.io.BufferedInputStream;5 import java.io.BufferedOutputStream;6 import java.io.File;7 import java.io.FileOutputStream;8 import java.io.IOException;9 import java.net.MalformedURLException;10 import java.net.URL;11 import java.net.URLDecoder;12 import java.util.HashMap;13 4 14 5 import org.mediannotate.app.MAController; 15 import org.mediannotate.app.MediAnnotater;16 6 17 7 import quicktime.QTException; … … 24 14 25 15 26 public class QTMovie extends MovieSubscriber implements org.mediannotate.dom.Movie{16 public class QTMovie extends org.mediannotate.dom.Media{ 27 17 28 pr ivatequicktime.std.movies.Movie innerMovie;18 protected quicktime.std.movies.Movie innerMovie; 29 19 private MoviePlayer innerMoviePlayer; 30 20 private long inTime; 31 21 private long outTime; 32 22 private boolean startedPlayingAfterOutTime; 33 private static HashMap<String, File> knownFiles = new HashMap<String, File>();34 35 public QTMovie(String url) {36 23 37 24 public QTMovie(String url) throws MediaException { 25 super(url); 38 26 try { 39 String original_url = url;40 41 File f = null;42 43 if(knownFiles.containsKey(original_url)) {44 f = knownFiles.get(original_url);45 } else {46 47 f = new File(URLDecoder.decode(url, "UTF-8").replaceAll("file:\\\\*(.*)", "$1"));48 49 if(!f.exists()) {50 url = new URL(url).toExternalForm();51 52 URL myURL = new URL(url);53 f = File.createTempFile("vertov_", url.replaceFirst("^(.*)(\\..*)$", "$2"));54 f.deleteOnExit();55 MediAnnotater.tempFiles.add(f);56 57 BufferedInputStream bis = new BufferedInputStream(myURL.openStream());58 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));59 byte[] myBytes = new byte[1024*1024];60 int myByteCount = bis.read(myBytes);61 int totalCount = myByteCount;62 while(myByteCount != -1) {63 System.out.println("We've read: " + totalCount);64 bos.write(myBytes, 0, myByteCount);65 myByteCount = bis.read(myBytes);66 totalCount += myByteCount;67 }68 System.out.println("We've finished loading the file");69 70 bos.flush();71 bos.close();72 bis.close();73 url = f.getAbsolutePath().replaceFirst("^file:/([^/])", "file://$1");74 }75 knownFiles.put(original_url, f);76 }77 27 innerMovie = quicktime.std.movies.Movie.fromFile( 78 OpenMovieFile.asRead( 79 new QTFile(f))); 80 81 } catch (MalformedURLException e1) { 82 e1.printStackTrace(); 83 } catch (IOException e) { 84 // TODO Auto-generated catch block 85 e.printStackTrace(); 86 } catch (QTException e) { 87 // TODO Auto-generated catch block 88 e.printStackTrace(); 89 } 90 91 System.out.println("Playing: " + url); 92 try { 93 28 OpenMovieFile.asRead( 29 new QTFile(mediaFile))); 30 System.out.println("Playing: " + url); 94 31 innerMoviePlayer = new MoviePlayer(innerMovie); 95 96 } catch (QTException e ) {97 e.printStackTrace();32 33 } catch (QTException e1) { 34 throw new MediaException(e1); 98 35 } 99 36 } … … 105 42 } catch (QTException e) { 106 43 e.printStackTrace(); 44 System.out.println(e.errorCodeToString()); 45 System.out.println(e.getMessage()); 107 46 } 108 47 throw new NullPointerException(); MediAnnotate/trunk/src/org/mediannotate/ui/listener/PlayButtonListener.java
r116 r203 4 4 import java.awt.event.ActionListener; 5 5 6 import org.mediannotate.dom.M ovie;6 import org.mediannotate.dom.Media; 7 7 8 8 public class PlayButtonListener implements ActionListener { 9 9 10 private M ovieinnerMovie;10 private Media innerMovie; 11 11 12 public void setMovie(M oviem) {12 public void setMovie(Media m) { 13 13 innerMovie = m; 14 14 } MediAnnotate/trunk/src/org/mediannotate/ui/listener/StopButtonListener.java
r116 r203 4 4 import java.awt.event.ActionListener; 5 5 6 import org.mediannotate.dom.M ovie;6 import org.mediannotate.dom.Media; 7 7 8 8 public class StopButtonListener implements ActionListener { 9 9 10 private M ovieinnerMovie;10 private Media innerMovie; 11 11 12 public void setMovie(M oviem) {12 public void setMovie(Media m) { 13 13 innerMovie = m; 14 14 } MediAnnotate/trunk/src/org/mediannotate/ui/listener/TimeLineListener.java
r150 r203 7 7 import java.awt.event.MouseMotionListener; 8 8 9 import org.mediannotate.dom.M ovie;9 import org.mediannotate.dom.Media; 10 10 import org.mediannotate.ui.TimeLinePanel; 11 11 12 12 public class TimeLineListener implements MouseListener, MouseMotionListener { 13 13 14 private M ovieinnerMovie;14 private Media innerMovie; 15 15 private TimeLinePanel myTimeLine = null; 16 16 17 public void setMovie(M oviem) {17 public void setMovie(Media m) { 18 18 innerMovie = m; 19 19 }
