Changeset 253

Show
Ignore:
Timestamp:
06/05/08 18:10:17 (3 months ago)
Author:
Stuart Thiel
Message:

-Fixed #91
--Added an icon in the utility panel for exporting the clip
--Added code to interface with the javascript around this when running as an applet

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • MediAnnotate/trunk/src/org/mediannotate/app/MediAnnotater.java

    r243 r253  
    6767        public static String getcurrenUrl() { 
    6868                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(); 
    6982        } 
    7083         
  • MediAnnotate/trunk/src/org/mediannotate/app/PlayerPanel.java

    r248 r253  
    1919import org.mediannotate.ui.TimeLinePanel; 
    2020import org.mediannotate.ui.UtilityPanel; 
     21import org.mediannotate.ui.listener.ExportButtonListener; 
    2122import org.mediannotate.ui.listener.PlayButtonListener; 
    2223import org.mediannotate.ui.listener.StopButtonListener; 
     
    4243        PlayButtonListener playListener; 
    4344        StopButtonListener stopListener;         
     45        ExportButtonListener exportListener;     
    4446        TimeLineListener timeLineListener; 
    4547         
     
    5254        } 
    5355 
     56        public ExportButtonListener getExportListener() { 
     57                return exportListener; 
     58        } 
     59         
    5460        public Time getDurationTime() { 
    5561                return durationTime; 
     
    111117                         
    112118                        stopListener.setMovie(currentMedia); 
     119                        exportListener.setMovie(currentMedia); 
    113120                        playListener.setMovie(currentMedia); 
    114121                        timeLineListener.setMovie(currentMedia); 
     
    124131                playListener = new PlayButtonListener(); 
    125132                stopListener = new StopButtonListener(); 
    126                  
     133                exportListener = new ExportButtonListener(); 
    127134                utilityPanel = new UtilityPanel(this); 
    128135                 
  • MediAnnotate/trunk/src/org/mediannotate/dom/Media.java

    r203 r253  
    99import java.io.IOException; 
    1010import java.net.MalformedURLException; 
     11import java.net.URI; 
    1112import java.net.URL; 
    1213import java.net.URLDecoder; 
     
    9899        public abstract boolean isPlaying(); 
    99100        public abstract void redraw() throws Exception; 
     101        public abstract URI exportToFile(long startTime, long endTime) throws MediaException; 
    100102         
    101103} 
  • MediAnnotate/trunk/src/org/mediannotate/dom/QTAudio.java

    r209 r253  
    44import java.awt.Dimension; 
    55import java.io.BufferedInputStream; 
     6import java.io.File; 
    67import java.io.FileInputStream; 
     8import java.io.IOException; 
     9import java.net.URI; 
     10import java.net.URISyntaxException; 
    711 
    812import javax.sound.sampled.AudioInputStream; 
     
    1115import org.mediannotate.dom.audio.AudioInfo; 
    1216import org.mediannotate.ui.audio.SingleWaveformPanel; 
     17 
     18import quicktime.QTException; 
     19import quicktime.io.IOConstants; 
     20import quicktime.io.QTFile; 
     21import quicktime.std.StdQTConstants; 
    1322 
    1423 
     
    3645        } 
    3746         
     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        } 
    3877} 
  • MediAnnotate/trunk/src/org/mediannotate/dom/QTMovie.java

    r238 r253  
    22 
    33import java.awt.Component; 
     4import java.io.File; 
     5import java.io.IOException; 
     6import java.net.URI; 
    47 
    58import org.mediannotate.app.MAController; 
     
    912import quicktime.app.view.MoviePlayer; 
    1013import quicktime.app.view.QTFactory; 
     14import quicktime.io.IOConstants; 
    1115import quicktime.io.OpenMovieFile; 
    1216import quicktime.io.QTFile; 
     17import quicktime.std.StdQTConstants; 
    1318import quicktime.std.StdQTException; 
    14  
    1519 
    1620public class QTMovie extends org.mediannotate.dom.Media{ 
     
    4044        } 
    4145         
     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         
    4256        public Component getComponent() { 
    4357                try { 
     
    167181        } 
    168182 
     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          } 
    169238} 
  • MediAnnotate/trunk/src/org/mediannotate/dom/QTUndecidedMedia.java

    r227 r253  
    22 
    33import java.awt.Component; 
     4import java.net.URI; 
    45 
    56 
     
    8788                innerMedia.stop(); 
    8889        } 
     90 
     91        @Override 
     92        public URI exportToFile(long startTime, long endTime) throws MediaException { 
     93                return innerMedia.exportToFile(startTime, endTime); 
     94        } 
    8995         
    9096} 
  • MediAnnotate/trunk/src/org/mediannotate/ui/UtilityPanel.java

    r247 r253  
    4646                BufferedImage playImage = null; 
    4747                BufferedImage stopImage = null; 
     48                BufferedImage exportImage = null; 
    4849                ToolTipManager.sharedInstance().setInitialDelay(200); 
    4950                ToolTipManager.sharedInstance().setReshowDelay(200); 
     
    5960                        is = getClass().getResourceAsStream("stop.png"); 
    6061                        stopImage = ImageIO.read(is); 
     62                        is = getClass().getResourceAsStream("export.png"); 
     63                        exportImage = ImageIO.read(is);                  
    6164                        is.close(); 
    6265                } catch (IOException e) { 
     
    9497                jb.addKeyListener(p); 
    9598                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);            
    96105                 
    97106                 
  • MediAnnotate/trunk/src/test/org/mediannotate/unit/TestExportClip.java

    r251 r253  
    2828        @Test 
    2929        public void testExportClip() { 
    30                 File f = new File("resource/reeves.mov"); 
     30                File f = new File("resource/elmo.mpg"); 
    3131                try { 
    3232                        QTSession.open();