Changeset 253
- Timestamp:
- 06/05/08 18:10:17 (3 months ago)
- Files:
-
- MediAnnotate/trunk/src/org/mediannotate/app/ExportMovieThread.java (added)
- MediAnnotate/trunk/src/org/mediannotate/app/MediAnnotater.java (modified) (1 diff)
- MediAnnotate/trunk/src/org/mediannotate/app/PlayerPanel.java (modified) (5 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/Media.java (modified) (2 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTAudio.java (modified) (3 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTMovie.java (modified) (4 diffs)
- MediAnnotate/trunk/src/org/mediannotate/dom/QTUndecidedMedia.java (modified) (2 diffs)
- MediAnnotate/trunk/src/org/mediannotate/ui/UtilityPanel.java (modified) (3 diffs)
- MediAnnotate/trunk/src/org/mediannotate/ui/export.png (added)
- MediAnnotate/trunk/src/org/mediannotate/ui/listener/ExportButtonListener.java (added)
- MediAnnotate/trunk/src/test/org/mediannotate/unit/TestExportClip.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
MediAnnotate/trunk/src/org/mediannotate/app/MediAnnotater.java
r243 r253 67 67 public static String getcurrenUrl() { 68 68 return _currenUrl; 69 } 70 71 public static void exportClip(String time) { 72 time = time.replace('\n', ' '); //dirty, but effective. Don't want linebreaks screwing this up 73 long in = Long.parseLong(time.replaceAll("^.*<start>(.*)</start>.*$", "$1")); 74 long out = Long.parseLong(time.replaceAll("^.*<end>(.*)</end>.*$", "$1")); 75 ExportMovieThread emt = new ExportMovieThread(myController, in, out, myPlayerPanel, applet); 76 emt.start(); 77 } 78 79 public static void exportClip(long in, long out) { 80 ExportMovieThread emt = new ExportMovieThread(myController, in, out, myPlayerPanel, applet); 81 emt.start(); 69 82 } 70 83 MediAnnotate/trunk/src/org/mediannotate/app/PlayerPanel.java
r248 r253 19 19 import org.mediannotate.ui.TimeLinePanel; 20 20 import org.mediannotate.ui.UtilityPanel; 21 import org.mediannotate.ui.listener.ExportButtonListener; 21 22 import org.mediannotate.ui.listener.PlayButtonListener; 22 23 import org.mediannotate.ui.listener.StopButtonListener; … … 42 43 PlayButtonListener playListener; 43 44 StopButtonListener stopListener; 45 ExportButtonListener exportListener; 44 46 TimeLineListener timeLineListener; 45 47 … … 52 54 } 53 55 56 public ExportButtonListener getExportListener() { 57 return exportListener; 58 } 59 54 60 public Time getDurationTime() { 55 61 return durationTime; … … 111 117 112 118 stopListener.setMovie(currentMedia); 119 exportListener.setMovie(currentMedia); 113 120 playListener.setMovie(currentMedia); 114 121 timeLineListener.setMovie(currentMedia); … … 124 131 playListener = new PlayButtonListener(); 125 132 stopListener = new StopButtonListener(); 126 133 exportListener = new ExportButtonListener(); 127 134 utilityPanel = new UtilityPanel(this); 128 135 MediAnnotate/trunk/src/org/mediannotate/dom/Media.java
r203 r253 9 9 import java.io.IOException; 10 10 import java.net.MalformedURLException; 11 import java.net.URI; 11 12 import java.net.URL; 12 13 import java.net.URLDecoder; … … 98 99 public abstract boolean isPlaying(); 99 100 public abstract void redraw() throws Exception; 101 public abstract URI exportToFile(long startTime, long endTime) throws MediaException; 100 102 101 103 } MediAnnotate/trunk/src/org/mediannotate/dom/QTAudio.java
r209 r253 4 4 import java.awt.Dimension; 5 5 import java.io.BufferedInputStream; 6 import java.io.File; 6 7 import java.io.FileInputStream; 8 import java.io.IOException; 9 import java.net.URI; 10 import java.net.URISyntaxException; 7 11 8 12 import javax.sound.sampled.AudioInputStream; … … 11 15 import org.mediannotate.dom.audio.AudioInfo; 12 16 import org.mediannotate.ui.audio.SingleWaveformPanel; 17 18 import quicktime.QTException; 19 import quicktime.io.IOConstants; 20 import quicktime.io.QTFile; 21 import quicktime.std.StdQTConstants; 13 22 14 23 … … 36 45 } 37 46 47 @Override 48 public URI exportToFile(long startTime, long endTime) throws MediaException { 49 URI theURI = null; 50 try { 51 innerMovie.setSelection((int)startTime, (int)(endTime-startTime)); 52 quicktime.std.movies.Movie newMovie = innerMovie.copySelection(); 53 54 File f = File.createTempFile("movie_", ".mov"); 55 newMovie.convertToFile( 56 new QTFile(f), 57 StdQTConstants.kQTFileTypeMovie, 58 StdQTConstants.kMoviePlayer, 59 IOConstants.smSystemScript); 60 theURI = f.toURI(); 61 } catch (QTException e) { 62 throw new MediaException(e); 63 } catch (IOException e) { 64 throw new MediaException(e); 65 } 66 String url = ""; 67 68 try { 69 theURI = new URI(url); 70 } catch (URISyntaxException e) { 71 // TODO Auto-generated catch block 72 e.printStackTrace(); 73 } 74 75 return theURI; 76 } 38 77 } MediAnnotate/trunk/src/org/mediannotate/dom/QTMovie.java
r238 r253 2 2 3 3 import java.awt.Component; 4 import java.io.File; 5 import java.io.IOException; 6 import java.net.URI; 4 7 5 8 import org.mediannotate.app.MAController; … … 9 12 import quicktime.app.view.MoviePlayer; 10 13 import quicktime.app.view.QTFactory; 14 import quicktime.io.IOConstants; 11 15 import quicktime.io.OpenMovieFile; 12 16 import quicktime.io.QTFile; 17 import quicktime.std.StdQTConstants; 13 18 import quicktime.std.StdQTException; 14 15 19 16 20 public class QTMovie extends org.mediannotate.dom.Media{ … … 40 44 } 41 45 46 public QTMovie(String url, quicktime.std.movies.Movie innerMovie) throws MediaException { 47 super(url); 48 this.innerMovie = innerMovie; 49 try { 50 innerMoviePlayer = new MoviePlayer(innerMovie); 51 } catch (StdQTException e) { 52 throw new MediaException(e); 53 } 54 } 55 42 56 public Component getComponent() { 43 57 try { … … 167 181 } 168 182 183 /** 184 * Grabbed a bunch of code from 185 * http://commons.oreilly.com/wiki/index.php/QuickTime_for_Java:_A_Developer's_Notebook/Working_with_Components 186 * 187 * That didn't actually work, but it taught me a bunch of stuff that may or may not have been helpful. 188 * 189 * Then I found this: 190 * http://lists.apple.com/archives/QuickTime-java/2006/Aug/msg00033.html 191 * 192 * Which showed me other ways to do things, flattening being the one that worked (not copyToFile) 193 * 194 */ 195 @Override 196 public URI exportToFile(long startTime, long endTime) throws MediaException { 197 URI theURI = null; 198 try { 199 innerMovie.setSelection((int)startTime, (int)(endTime-startTime)); 200 quicktime.std.movies.Movie newMovie = innerMovie.copySelection(); 201 String extension = mediaFile.getCanonicalPath().replaceAll("^.*(\\..*)$", "$1"); 202 File f = File.createTempFile("mo_", extension); 203 theURI = f.toURI(); 204 205 206 System.out.println(newMovie.getTimeScale()); 207 newMovie.flatten( 208 StdQTConstants.flattenAddMovieToDataFork | 209 StdQTConstants.flattenForceMovieResourceBeforeMovieData, 210 new QTFile(f), // fileOut 211 StdQTConstants.kMoviePlayer, // creator 212 IOConstants.smSystemScript, // scriptTag 213 StdQTConstants.createMovieFileDeleteCurFile, 214 StdQTConstants.movieInDataForkResID, 215 null 216 ); 217 218 219 } catch (QTException e) { 220 throw new MediaException(e); 221 } catch (IOException e) { 222 throw new MediaException(e); 223 } 224 225 return theURI; 226 } 227 public class ExportChoice { 228 String name; 229 int subtype; 230 public ExportChoice (String n, int st) { 231 name = n; 232 subtype = st; 233 } 234 public String toString( ) { 235 return name; 236 } 237 } 169 238 } MediAnnotate/trunk/src/org/mediannotate/dom/QTUndecidedMedia.java
r227 r253 2 2 3 3 import java.awt.Component; 4 import java.net.URI; 4 5 5 6 … … 87 88 innerMedia.stop(); 88 89 } 90 91 @Override 92 public URI exportToFile(long startTime, long endTime) throws MediaException { 93 return innerMedia.exportToFile(startTime, endTime); 94 } 89 95 90 96 } MediAnnotate/trunk/src/org/mediannotate/ui/UtilityPanel.java
r247 r253 46 46 BufferedImage playImage = null; 47 47 BufferedImage stopImage = null; 48 BufferedImage exportImage = null; 48 49 ToolTipManager.sharedInstance().setInitialDelay(200); 49 50 ToolTipManager.sharedInstance().setReshowDelay(200); … … 59 60 is = getClass().getResourceAsStream("stop.png"); 60 61 stopImage = ImageIO.read(is); 62 is = getClass().getResourceAsStream("export.png"); 63 exportImage = ImageIO.read(is); 61 64 is.close(); 62 65 } catch (IOException e) { … … 94 97 jb.addKeyListener(p); 95 98 this.add(jb); 99 100 jb = new JButton(new ImageIcon(exportImage)); 101 jb.addActionListener(p.getExportListener()); 102 jb.setToolTipText("Export Clip"); 103 jb.addKeyListener(p); 104 this.add(jb); 96 105 97 106 MediAnnotate/trunk/src/test/org/mediannotate/unit/TestExportClip.java
r251 r253 28 28 @Test 29 29 public void testExportClip() { 30 File f = new File("resource/ reeves.mov");30 File f = new File("resource/elmo.mpg"); 31 31 try { 32 32 QTSession.open();
