Ignore:
Timestamp:
2011-04-17T22:34:09+02:00 (13 years ago)
Author:
guardian
Message:

linked both

Location:
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping
Files:
1 deleted
7 edited

Legend:

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

    r25861 r25864  
    2929import org.openstreetmap.josm.plugins.*;
    3030import org.openstreetmap.josm.plugins.videomapping.video.GPSVideoPlayer;
     31import org.openstreetmap.josm.plugins.videomapping.video.VideoEngine;
    3132import org.openstreetmap.josm.tools.Shortcut;
    3233import org.openstreetmap.josm.actions.JosmAction;
     
    6869        public VideoPlugin(PluginInformation info) {
    6970                super(info);
     71                VideoEngine.setupPlayer();
    7072                MapView.addLayerChangeListener(this);                           
    7173                createMenusAndShortCuts();
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java

    r25861 r25864  
    3535import org.openstreetmap.josm.gui.layer.GpxLayer;
    3636import org.openstreetmap.josm.gui.layer.Layer;
     37import org.openstreetmap.josm.plugins.videomapping.video.GPSVideo;
    3738import org.openstreetmap.josm.plugins.videomapping.video.GPSVideoPlayer;
     39import org.openstreetmap.josm.plugins.videomapping.video.Video;
    3840
    3941//Basic rendering and GPS layer interaction
     
    4446        private WayPoint iconPosition;
    4547        private final int GPS_INTERVALL=1000;
     48        private GPSVideoPlayer gpsVideoPlayer;
    4649
    4750        public VideoPositionLayer(GpxLayer gpsLayer) {
     
    7376        public void paint(Graphics2D g, MapView map, Bounds bound) {
    7477                paintGpsTrack(g);
     78                paintSyncedTrack(g);
    7579                paintPositionIcon(g);
    76                 paintInterpolatedSegment(g);
     80                //paintInterpolatedSegment(g); //just a test for my own
    7781        }
    7882
     
    8589        }
    8690       
     91        private void paintSyncedTrack(Graphics2D g) {
     92                g.setColor(Color.GREEN);
     93                for (WayPoint n : gpsTrack) {
     94                        if (n.attr.containsKey("synced"))
     95                        {
     96                                Point p = Main.map.mapView.getPoint(n.getEastNorth());
     97                    g.drawOval(p.x - 2, p.y - 2, 4, 4);
     98                        }                               
     99                }
     100               
     101        }
     102
    87103        private void paintPositionIcon(Graphics2D g) {
    88104                Point p=Main.map.mapView.getPoint(iconPosition.getEastNorth());
     
    119135                test.setHours(14);
    120136                test.setMinutes(50);
    121                 test.setSeconds(33);
    122                
     137                test.setSeconds(33);           
    123138                ls.add(getWayPointBefore(new Date(test.getTime()+500)));
    124139                ls.add(interpolate(new Date(test.getTime()+500)));
    125                 System.out.print(test);
    126140                return ls;
    127141        }
     
    201215        return iconPosition.getTime();
    202216    }
     217   
     218    public WayPoint getCurrentWayPoint()
     219    {
     220        return iconPosition;
     221    }
     222
     223
     224
     225        public List<WayPoint> getTrack() {
     226                return gpsTrack;
     227               
     228        }
    203229
    204230        public void mouseReleased(MouseEvent e) {
     
    208234            if(wp!=null)
    209235            {
     236                if (gpsVideoPlayer.areAllVideosSynced())
     237                {
     238                        //we set the video to right position
     239                        gpsVideoPlayer.jumpTo(wp.getTime());
     240                }
    210241                iconPosition=wp;
    211             }
    212             Main.map.mapView.repaint();
     242                Main.map.mapView.repaint();
     243            }           
    213244        }
    214245               
     
    293324        }
    294325
    295         public void mousePressed(MouseEvent arg0) {
    296                 // TODO Auto-generated method stub
    297                
     326        public void mousePressed(MouseEvent e) {
    298327        }
    299328
     
    306335                // TODO Auto-generated method stub
    307336               
     337        }
     338       
     339        public void setGPSVideoPlayer(GPSVideoPlayer player)
     340        {
     341                gpsVideoPlayer=player;
    308342        }
    309343   
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideo.java

    r25861 r25864  
    22import java.awt.Canvas;
    33import java.io.File;
     4import java.util.Calendar;
     5import java.util.Date;
     6import java.util.List;
    47
    58import javax.swing.JComponent;
     9
     10import org.openstreetmap.josm.Main;
     11import org.openstreetmap.josm.data.gpx.WayPoint;
     12import org.openstreetmap.josm.plugins.videomapping.VideoPositionLayer;
    613
    714// a specific synced video
    815public class GPSVideo extends Video{
    916        public JComponent SyncComponent;
    10         public GPSVideo(File filename, Canvas canvas) {
    11                 super(filename, canvas);
     17        private WayPoint syncWayPoint;
     18        private long syncVideoTime;
     19        private Date start;
     20        private Date end;
     21        public WayPoint firstWayPoint;
     22        public WayPoint lastWayPoint;
     23        private VideoPositionLayer videoPositionLayer;
     24       
     25        public GPSVideo(File filename) {
     26                super(filename);
    1227        }
    13    
     28       
     29        public GPSVideo(Video video)
     30        {
     31                super(video.filename);
     32                this.player=video.player;
     33        }
     34       
     35        public void doSync(VideoPositionLayer layer) {
     36                this.videoPositionLayer=layer;
     37                syncWayPoint=layer.getCurrentWayPoint();
     38                syncVideoTime=getCurrentTime();
     39                //calc now, to avoid calculations on every click
     40                start=new Date(syncWayPoint.getTime().getTime()-syncVideoTime);
     41                end=new Date(start.getTime()+player.getLength());
     42                firstWayPoint=getFirstGPS();
     43                lastWayPoint=getLastGPS();
     44                markSyncedWayPoints();
     45                Main.map.mapView.repaint();
     46                System.out.println(firstWayPoint.getTime());
     47                System.out.println(lastWayPoint.getTime());
     48
     49        }
     50
     51        //make sure we don't leave the GPS track
     52        private WayPoint getFirstGPS() {
     53                if(start.before(videoPositionLayer.getFirstWayPoint().getTime()))
     54                {
     55                        return videoPositionLayer.getFirstWayPoint();
     56                }
     57                else
     58                {
     59                        return videoPositionLayer.getWayPointBefore(start);
     60                }
     61        }
     62       
     63        //make sure we don't leave the GPS track
     64        private WayPoint getLastGPS() {         
     65                if(end.after(videoPositionLayer.getLastWayPoint().getTime()))
     66                {
     67                        return videoPositionLayer.getLastWayPoint();
     68                }
     69                else
     70                {
     71                        return videoPositionLayer.getWayPointBefore(end);
     72                }
     73        }
     74
     75        private void markSyncedWayPoints() {
     76                List <WayPoint> track =videoPositionLayer.getTrack();
     77                int start=track.indexOf(firstWayPoint);
     78                int end=track.indexOf(lastWayPoint);
     79                List <WayPoint> ls =videoPositionLayer.getTrack().subList(start, end);
     80                for (WayPoint n : ls) {
     81                        n.attr.put("synced", Boolean.TRUE);
     82                }
     83               
     84               
     85        }
     86
     87        public boolean isSynced() {
     88                return firstWayPoint!=null;
     89        }
     90
     91        public void jumpTo(Date GPSTime) {
     92                if((GPSTime.after(firstWayPoint.getTime())&(GPSTime.before(lastWayPoint.getTime()))))
     93                {
     94                        long diff=GPSTime.getTime()-start.getTime();
     95                        player.setTime(diff);
     96                        System.out.println(diff);
     97                }
     98        } 
    1499
    15100}
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java

    r25861 r25864  
    88import java.awt.event.WindowEvent;
    99import java.io.File;
    10 import java.sql.Date;
    11 import java.sql.Time;
    1210import java.text.DateFormat;
     11import java.util.Calendar;
     12import java.util.Date;
    1313import java.util.Iterator;
    1414import java.util.LinkedList;
     
    2323import org.openstreetmap.josm.Main;
    2424import org.openstreetmap.josm.data.gpx.WayPoint;
    25 import org.openstreetmap.josm.plugins.videomapping.GpsPlayer;
    2625import org.openstreetmap.josm.plugins.videomapping.VideoObserver;
    2726import org.openstreetmap.josm.plugins.videomapping.VideoPositionLayer;
     
    3332public class GPSVideoPlayer extends VideoPlayer
    3433{
    35         private JPanel syncPanel;
    3634        private List<GPSVideo> videos;
    37         private List<JButton> syncButtons;
    3835        private VideoPositionLayer videoPositionLayer;
    3936
    4037        public GPSVideoPlayer(DateFormat videoTimeFormat,VideoPositionLayer videoPositionLayer) throws HeadlessException {
    4138                super(videoTimeFormat);
    42                 extendUI();
    43                 syncButtons=new LinkedList<JButton>();
     39                videos = new LinkedList<GPSVideo>();
    4440                this.videoPositionLayer=videoPositionLayer;
     41                videoPositionLayer.setGPSVideoPlayer(this);
    4542        }
    4643
     44
    4745        @Override
    48         public GPSVideo addVideo(File Videofile) {
    49                
    50                 GPSVideo video=(GPSVideo) super.addVideo(Videofile);
     46        public GPSVideo addVideo(File Videofile) {             
     47                GPSVideo video = new GPSVideo(super.addVideo(Videofile));
    5148                videos.add(video);
    5249                JButton syncButton= new JButton(tr("Sync"));
    53                 syncButton.setBackground(Color.RED);
    54                 syncPanel.add(syncButton);
     50                syncButton.setBackground(Color.RED);           
    5551                syncButton.addActionListener(new ActionListener() {
    5652            //do a sync
    5753            public void actionPerformed(ActionEvent e) {
    5854                GPSVideo v=findVideo((JButton)e.getSource());
    59                 doSync(v,videoPositionLayer);
     55                v.doSync(videoPositionLayer);
    6056            }
    6157                });
     58                video.SyncComponent=syncButton;
     59                //video.panel.add(syncButton,BorderLayout.SOUTH);
     60                controlsPanel.add(syncButton);
    6261                return video;
    63         }
    64 
    65         protected void doSync(GPSVideo v, VideoPositionLayer layer) {
    66                 WayPoint first=getFirstGPS(v.getTime(),layer.getGPSDate());
    67                
    68         }
    69 
    70         //make sure we don't leave the GPS track
    71         private WayPoint getFirstGPS(long videoTime, java.util.Date gpsDate) {
    72                 Date start=new Date(gpsDate.getTime()-videoTime);
    73                 if(start.before(videoPositionLayer.getFirstWayPoint().getTime()))
    74                 {
    75                         return videoPositionLayer.getFirstWayPoint();
    76                 }
    77                 else
    78                 {
    79                         return videoPositionLayer.getWayPointBefore(start);
    80                 }
    81         }
    82        
    83         //make sure we don't leave the GPS track
    84         private WayPoint getLastGPS(long videoTime, java.util.Date gpsDate) {
    85                 Date end=new Date(gpsDate.getTime()-videoTime);
    86                 if(end.after(videoPositionLayer.getLastWayPoint().getTime()))
    87                 {
    88                         return videoPositionLayer.getLastWayPoint();
    89                 }
    90                 else
    91                 {
    92                         return videoPositionLayer.getWayPointBefore(end);
    93                 }
    94         }
     62        }       
    9563
    9664        protected GPSVideo findVideo(JButton source) {
     
    10068                return null;
    10169        }
     70       
     71        public void jumpTo(Date date)
     72        {
     73                for (GPSVideo video : videos) {
     74                        video.jumpTo(date);
     75                }
     76        }
     77       
     78        public boolean areAllVideosSynced()
     79        {
    10280
    103         private void extendUI() {
    104                 syncPanel=new JPanel(new FlowLayout());
    105                 screenPanel.add(syncPanel,BorderLayout.EAST);
    106                                
     81                for (GPSVideo video : videos) {
     82                        if (!video.isSynced()) return false;
     83                }
     84                return true;           
    10785        }
    10886       
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/Video.java

    r25861 r25864  
    11package org.openstreetmap.josm.plugins.videomapping.video;
    22
     3import java.awt.BorderLayout;
    34import java.awt.Canvas;
     5import java.awt.FlowLayout;
    46import java.io.File;
     7
     8import javax.swing.JPanel;
    59
    610import uk.co.caprica.vlcj.player.MediaPlayer;
     
    1014        public MediaPlayer player;
    1115        public Canvas canvas;
     16        public JPanel panel;
    1217       
    13         public Video(File filename, Canvas canvas) {
     18        public Video(File filename) {
    1419                this.filename=filename;
    15                 this.canvas=canvas;
     20                canvas=new Canvas();
     21                panel=new JPanel();
     22                panel.setLayout(new FlowLayout());
     23                panel.add(canvas,BorderLayout.CENTER);
    1624        }
    1725       
    18         public long getTime()
     26        public long getCurrentTime()
    1927        {
    2028                return player.getTime();
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java

    r25765 r25864  
    8585        }
    8686       
     87        private Video getVideo(MediaPlayer mp)
     88        {
     89                for (Video video : videos) {
     90                        if (video.player==mp) return video;
     91                }
     92                return null;
     93        }
     94
     95        public List<Video> getVideos() {               
     96                return videos;
     97        }
     98
    8799        public void play()
    88100        {
     
    119131                       
    120132        //TODO muss auf Rückgabe für alle Videos erweitert werden
    121         public long getCurrentVideoTime()
     133        public long getVideoTime()
    122134        {
    123135                return videos.get(0).player.getTime();
     
    212224        }
    213225
     226        public void addObserver(VideosObserver observer) {
     227                observers.add(observer);
     228               
     229        }
     230
     231        private void notifyObservers(VideoObserversEvents event)
     232        {
     233                for (VideosObserver observer : observers) {
     234                        observer.update(event);
     235                }
     236        }
     237
    214238        public void backward(MediaPlayer arg0) {
    215239               
     
    285309               
    286310        }
    287        
    288         private Video getVideo(MediaPlayer mp)
    289         {
    290                 for (Video video : videos) {
    291                         if (video.player==mp) return video;
    292                 }
    293                 return null;
    294         }
    295        
    296         private void notifyObservers(VideoObserversEvents event)
    297         {
    298                 for (VideosObserver observer : observers) {
    299                         observer.update(event);
    300                 }
    301         }
    302 
    303         public void addObserver(VideosObserver observer) {
    304                 observers.add(observer);
    305                
    306         }
    307311
    308312}
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java

    r25861 r25864  
    9696        public Video addVideo(File Videofile)
    9797        {
    98                 Video video = new Video(Videofile,new Canvas());
    99                 canvasPanel.add(video.canvas);
     98                Video video = new Video(Videofile);             
     99                canvasPanel.add(video.panel);
    100100                video.canvas.setSize(new Dimension(300, 300)); // will be updated by the video engine itself
    101101                videoengine.add(video);
     
    104104        return video;
    105105        }
    106 
    107         protected void play() {
    108                 videoengine.play();
    109                
    110         }
     106       
     107        public List <Video> getVideos()
     108        {
     109                return videoengine.getVideos();
     110        }
     111
    111112       
    112113        protected void pause(){
     114                if (notificationTimer!=null)
     115                {
     116                        notificationTimer.cancel();
     117                        notificationTimer=null;
     118                }
     119                else
     120                {
     121                        startNotificationTimer();
     122                }
    113123                videoengine.pause();
    114124        }
     
    126136                {
    127137                        //do reset after loop time experienced
    128                         final long videoResetTime=(long) videoengine.getCurrentVideoTime()-loopLength/2;
     138                        final long videoResetTime=(long) videoengine.getVideoTime()-loopLength/2;
    129139                        TimerTask reset=new TimerTask() {               
    130140                @Override
     
    237247                        isManualJump=true;
    238248                        videoengine.jumpToPosition((timeline.getValue()));
     249                        System.out.println("manual jump");
    239250                }
    240251            }
     
    343354        public void update_plays() {
    344355                timeline.setValue(videoengine.getPosition());
    345                 System.out.println(videoengine.getPosition());
     356                setTitle(Long.toString(videoengine.getVideoTime()));
    346357                isManualJump=false;
     358                System.out.println("update");
    347359               
    348360        }
Note: See TracChangeset for help on using the changeset viewer.