Ignore:
Timestamp:
2011-04-25T16:28:14+02:00 (14 years ago)
Author:
guardian
Message:

playback/sync multiple videos

Location:
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java

    r25865 r25894  
    176176                saveProperties();
    177177            }
    178         });       
     178        });
     179        //TODO read deinterlacers list out of videoengine
    179180        VDeinterlacer= new JMenu("Deinterlacer");
    180181        VIntNone= new JRadioButtonMenuItem(new JosmAction(tr("none"), null, tr("no deinterlacing"),null, false) {           
     
    217218        fc.setSelectedFile(new File(mostRecentFolder));
    218219        if(fc.showOpenDialog(Main.main.parent)!=JFileChooser.CANCEL_OPTION)
    219         {
     220        {               
    220221                mostRecentFolder=fc.getSelectedFile().getAbsolutePath();
    221222                saveProperties();
    222                 videoPositionLayer= new VideoPositionLayer(gpsLayer);
    223                 gpsVideoPlayer = new GPSVideoPlayer(new SimpleDateFormat("hh:mm:ss") ,videoPositionLayer);
    224                 gpsVideoPlayer.setJumpLength(jumpLength);
    225                 gpsVideoPlayer.setLoopLength(loopLength);
    226                 gpsVideoPlayer.addVideo(fc.getSelectedFile());
    227                 enableVideoControlMenus(true);
     223                if(videoPositionLayer==null)
     224                {
     225                        videoPositionLayer= new VideoPositionLayer(gpsLayer);
     226                gpsVideoPlayer = new GPSVideoPlayer(new SimpleDateFormat("hh:mm:ss") ,videoPositionLayer);
     227                gpsVideoPlayer.setJumpLength(jumpLength);
     228                gpsVideoPlayer.setLoopLength(loopLength);
     229                enableVideoControlMenus(true);
     230                }               
     231                gpsVideoPlayer.addVideo(fc.getSelectedFile());         
    228232        }
    229233               
     
    272276    }
    273277       
    274         private void applySettings()
    275         {
    276                 //GUI
    277         VCenterIcon.setSelected(autoCenter);
    278         VIntNone.setSelected(true);
    279         if(deinterlacer=="")
    280                 VIntNone.setSelected(true);
    281         if(deinterlacer=="bob")
    282                 VIntBob.setSelected(true);
    283         if(deinterlacer=="linear")
    284                 VIntLinear.setSelected(true);
    285         }
    286        
     278
    287279        private void showJumpTo()
    288280        {
     
    345337
    346338        public void layerRemoved(Layer arg0) {
     339                if(arg0 instanceof VideoPositionLayer)
     340                        enableVideoControlMenus(false);
    347341                activeLayerChange(null,arg0);
    348342               
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideo.java

    r25865 r25894  
    1414// a specific synced video
    1515public class GPSVideo extends Video{
     16        private static final String SYNC_KEY = "synced";
    1617        public JComponent SyncComponent;
    1718        private WayPoint syncWayPoint;
     
    2324        private VideoPositionLayer videoPositionLayer;
    2425       
    25         public GPSVideo(File filename) {
    26                 super(filename);
     26        public GPSVideo(File filename, String id) {
     27                super(filename,id);
    2728        }
    2829       
    2930        public GPSVideo(Video video)
    3031        {
    31                 super(video.filename);
     32                super(video.filename,video.id);
    3233                this.player=video.player;
    3334        }
    3435       
     36        //calculates attributes basing upon the current position
    3537        public void doSync(VideoPositionLayer layer) {
    3638                this.videoPositionLayer=layer;
     39                if (isSynced())
     40                        removeSyncedWayPoints();
    3741                syncWayPoint=layer.getCurrentWayPoint();
    3842                syncVideoTime=getCurrentTime();
     
    4448                markSyncedWayPoints();
    4549                Main.map.mapView.repaint();
    46                 System.out.println(firstWayPoint.getTime());
    47                 System.out.println(lastWayPoint.getTime());
    48 
    4950        }
    5051
     
    7273                }
    7374        }
     75       
     76        private void removeSyncedWayPoints() {
     77                List <WayPoint> track =videoPositionLayer.getTrack();
     78                int start=track.indexOf(firstWayPoint);
     79                int end=track.indexOf(lastWayPoint);
     80                List <WayPoint> ls =videoPositionLayer.getTrack().subList(start, end);
     81                for (WayPoint n : ls) {
     82                        n.attr.keySet().remove(SYNC_KEY);
     83                }                               
     84        }
    7485
    7586        private void markSyncedWayPoints() {
     
    7990                List <WayPoint> ls =videoPositionLayer.getTrack().subList(start, end);
    8091                for (WayPoint n : ls) {
    81                         n.attr.put("synced", Boolean.TRUE);
    82                 }
    83                
    84                
     92                        n.attr.put(SYNC_KEY, id);
     93                }                               
    8594        }
    8695
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java

    r25865 r25894  
    4343
    4444
    45         @Override
    4645        public GPSVideo addVideo(File Videofile) {             
    47                 GPSVideo video = new GPSVideo(super.addVideo(Videofile));
     46                GPSVideo video = new GPSVideo(super.addVideo(Videofile,Integer.toString(videos.size())));
     47                enableSingleVideoMode(true);
    4848                videos.add(video);
     49                addSyncButton(video);
     50                return video;
     51        }
     52
     53
     54        private void addSyncButton(GPSVideo video) {
    4955                JButton syncButton= new JButton(tr("Sync"));
    5056                syncButton.setBackground(Color.RED);           
    5157                syncButton.addActionListener(new ActionListener() {
    52             //do a sync
    5358            public void actionPerformed(ActionEvent e) {
    54                 GPSVideo v=findVideo((JButton)e.getSource());
    55                 v.doSync(videoPositionLayer);
    56             }
     59                resync(e);
     60            }                   
    5761                });
    5862                video.SyncComponent=syncButton;
    5963                //video.panel.add(syncButton,BorderLayout.SOUTH);
    6064                controlsPanel.add(syncButton);
    61                 return video;
    6265        }       
    6366
     67        //do a (re)sync
     68        private void resync(ActionEvent e) {
     69                JButton btn =(JButton)e.getSource();
     70        GPSVideo v=findVideo(btn);
     71        v.doSync(videoPositionLayer);
     72        btn.setBackground(Color.GREEN);
     73        enableSingleVideoMode(false);
     74        }
     75       
    6476        protected GPSVideo findVideo(JButton source) {
    6577                for (GPSVideo v : videos) {
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/Video.java

    r25864 r25894  
    1212public class Video {
    1313        public File filename;
     14        public String id; //unique id to make it easy to identify
    1415        public MediaPlayer player;
    1516        public Canvas canvas;
    16         public JPanel panel;
     17        public JPanel panel;   
    1718       
    18         public Video(File filename) {
     19        public Video(File filename, String id) {
    1920                this.filename=filename;
     21                this.id=id;
    2022                canvas=new Canvas();
    2123                panel=new JPanel();
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java

    r25864 r25894  
    3131        private final String[] libvlcArgs = {""};
    3232    private final String[] standardMediaOptions = {""};
    33     private final String[] deinterlacers = {"bob","linear"};
     33    private final static String[] deinterlacers = {"bob","linear"};
    3434    private final float initialCanvasFactor = 0.5f;
     35        private boolean singleVideoMode; //commands will only affect the last added video
     36        private Video lastAddedVideo;
    3537       
    3638        //called at plugin start to setup library
     
    6971                        mp.setStandardMediaOptions(standardMediaOptions);
    7072                        videos.add(video);
     73                        lastAddedVideo=video;
    7174                        mp.setVideoSurface(video.canvas);
    7275                mp.addMediaPlayerEventListener(this);
     
    97100        }
    98101
    99         public void play()
    100         {
    101                 for (Video video : videos) {
    102                         video.player.play();
     102        public void play()     
     103        {
     104                if (singleVideoMode)
     105                {
     106                        lastAddedVideo.player.play();
     107                }
     108                else
     109                {
     110                        for (Video video : videos) {
     111                                video.player.play();
     112                        }
    103113                }
    104114                System.out.println("abspielen");
    105115        }
    106116       
     117        //toggles pause and play
    107118        public void pause()
    108119        {
    109                 for (Video video : videos) {
    110                         video.player.pause();
    111                 }
    112         }
    113        
     120                if (singleVideoMode)
     121                {
     122                        lastAddedVideo.player.pause();
     123                }
     124                else
     125                {
     126                        for (Video video : videos) {
     127                                video.player.pause();
     128                        }
     129                }
     130        }
     131       
     132        //ensures that all stop
     133        public void pauseAll() {
     134                for (Video video : videos) {
     135                        if (video.player.isPlaying())
     136                                video.player.pause();
     137                }       
     138        }
     139
    114140        //jumps relative for ms in all videos
    115         public void jump(long ms) {
    116                 for (Video video : videos) {
    117                         long start=video.player.getTime();
    118                         video.player.setTime(start+ms);
    119                 }
     141        public void jumpFor(long ms) {
     142                if (singleVideoMode)
     143                {
     144                        long start=lastAddedVideo.player.getTime();
     145                        lastAddedVideo.player.setTime(start+ms);
     146                }
     147                else
     148                {
     149                        for (Video video : videos) {
     150                                long start=video.player.getTime();
     151                                video.player.setTime(start+ms);
     152                        }
     153                }
     154                notifyObservers(VideoObserversEvents.jumping);
    120155               
    121156        }
     
    124159        public void jumpTo(long msVideo)
    125160        {
    126                 for (Video video : videos) {
    127                         video.player.setTime(msVideo);
     161                if (singleVideoMode)
     162                {
     163                        lastAddedVideo.player.setTime(msVideo);
     164                }
     165                else
     166                {
     167                        for (Video video : videos) {
     168                                video.player.setTime(msVideo);
     169                        }
    128170                }
    129171                notifyObservers(VideoObserversEvents.jumping);
    130172        }
    131173                       
    132         //TODO muss auf Rückgabe für alle Videos erweitert werden
     174        //TODO muss evtl. auf Rückgabe für alle Videos erweitert werden
    133175        public long getVideoTime()
    134176        {
     
    139181        public void jumpToPosition(int percent)
    140182        {
    141                 for (Video video : videos) {
    142                         float position = ((float)percent/100f);
    143                         video.player.setPosition(position);
     183                float position = ((float)percent/100f);
     184                if (singleVideoMode)
     185                {
     186                        lastAddedVideo.player.setPosition(position);
     187                }
     188                else
     189                {
     190                        for (Video video : videos) {
     191                                video.player.setPosition(position);
     192                        }
    144193                }
    145194                notifyObservers(VideoObserversEvents.jumping);
    146195        }
    147196       
     197        //TODO has to be for every video
    148198        public int getPosition()
    149199        {
     
    155205        public void setSpeed(int percent)
    156206        {
     207                if (singleVideoMode)
     208                {
     209                        lastAddedVideo.player.setRate((float)(percent/100f));
     210                }
    157211                for (Video video : videos) {
    158212                        video.player.setRate((float)(percent/100f));
     
    196250        public void setDeinterlacer (String deinterlacer)
    197251        {
    198                 for (Video video : videos) {
    199                         video.player.setDeinterlace(deinterlacer);
    200                 }
    201         }
    202        
    203         public String[] getDeinterlacers()
     252                if (singleVideoMode)
     253                {
     254                        lastAddedVideo.player.setDeinterlace(deinterlacer);
     255                }
     256                else
     257                {
     258                        for (Video video : videos) {
     259                                video.player.setDeinterlace(deinterlacer);
     260                        }
     261                }
     262        }
     263       
     264        public static String[] getDeinterlacers()
    204265        {
    205266                return deinterlacers;
     
    208269        public void mute()
    209270        {
     271                if (singleVideoMode)
     272                {
     273                        lastAddedVideo.player.mute();
     274                }
    210275                for (Video video : videos) {
    211276                        video.player.mute();
     
    310375        }
    311376
     377        public boolean isNoVideoPlaying() {
     378                for (Video video : videos) {
     379                        if (video.player.isPlaying())
     380                                return false;
     381                }
     382                return true;
     383        }
     384
     385        public void enableSingleVideoMode(boolean enabled) {
     386                singleVideoMode = true;
     387               
     388        }
     389
    312390}
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java

    r25865 r25894  
    9494        }
    9595       
    96         public Video addVideo(File Videofile)
    97         {
    98                 Video video = new Video(Videofile);             
     96        public Video addVideo(File Videofile,String id)
     97        {
     98                Video video = new Video(Videofile,id);         
    9999                canvasPanel.add(video.panel);
    100100                video.canvas.setSize(new Dimension(300, 300)); // will be updated by the video engine itself
     
    112112       
    113113        public void pause(){
    114                 if (notificationTimer!=null)
    115                 {
    116                         notificationTimer.cancel();
    117                         notificationTimer=null;
    118                 }
     114                videoengine.pause();
     115                if (videoengine.isNoVideoPlaying())
     116                        stopNotificationTimer();
    119117                else
    120                 {
    121118                        startNotificationTimer();
    122                 }
    123                 videoengine.pause();
     119        }
     120       
     121        public void pauseAll()
     122        {
     123                stopNotificationTimer();
     124                videoengine.pauseAll();
    124125        }
    125126
    126127        public void backward() {
    127                 videoengine.jump(-jumpLength); 
     128                videoengine.jumpFor(-jumpLength);       
    128129        }
    129130
    130131        public void forward() {
    131                 videoengine.jump(jumpLength);   
     132                videoengine.jumpFor(jumpLength);       
    132133        }
    133134
     
    157158        }
    158159
     160        //TODO auf mehrere Videos umstellen
    159161        public void toggleLooping() {
    160162                if(loopingTimer==null)
     
    299301    }
    300302   
     303    public void enableSingleVideoMode(boolean enabled)
     304    {
     305        pauseAll();
     306        videoengine.enableSingleVideoMode(enabled);
     307    }
     308   
    301309    public void addObserver(VideoPlayerObserver observer)
    302310    {
     
    305313       
    306314       
     315        private void stopNotificationTimer() {
     316                /*
     317                if(notificationTimer!=null)
     318                {
     319                        notificationTimer.cancel();
     320                        notificationTimer=null;
     321                }
     322                */
     323        }
     324
    307325        private void startNotificationTimer() {
    308                 if(notificationTimer==null)
    309                 {
    310                         notificationTimer= new Timer();
    311                     notificationTimer.schedule(new TimerTask() {                               
    312                                 @Override
    313                                 public void run() {
    314                                         notifyObservers();
    315                                        
    316                                 }
    317                         },notificationIntervall,notificationIntervall);
    318                 }
     326                notificationTimer= new Timer();
     327                notificationTimer.schedule(new TimerTask() {                           
     328                        @Override
     329                        public void run() {
     330                                notifyObservers();
     331                               
     332                        }
     333                },notificationIntervall,notificationIntervall);
    319334        }
    320335       
     
    369384                        {
    370385                                speed.setValue(videoengine.getSpeed());
     386                                break;
    371387                        }
    372388                        case jumping:
    373                         {                               
     389                        {                       
     390                                break;
    374391                        }
    375392                }               
Note: See TracChangeset for help on using the changeset viewer.