Inheritance diagram for MediaApp::
Public Methods | |
void | handleOpenSeq () |
This function is called by _bmenu if the associated menu item is selected. More... | |
void | handleLightweightRenderer (boolean b) |
void | handleLoop (boolean loop) |
void | handleAutoPlay (boolean play) |
void | controllerUpdate (ControllerEvent ce) |
void | handleExit () |
This function is called by _bmenu if the associated menu item is selected. More... | |
void | handleStart () |
void | handleStop () |
void | handleContinue () |
void | handleStep () |
void | viewerModeChanged (ViewerModeEvent e) |
Implementation of ViewerModeListener. More... | |
void | handleFrameChanged (int newFrame) |
Implementation of FrameNavigatorUser. More... | |
Static Public Methods | |
void | main (String[] args) |
main is called when this is used as an application. More... | |
Protected Methods | |
boolean | buildSample (JFrame parent, JApplet applet, String[] args) |
|
main is called when this is used as an application. This function has to be overloaded in the "leaf node" application itself. Reimplemented from SampleApp.
|
|
This function is called by _bmenu if the associated menu item is selected.
00058 { 00059 _fc.setFileFilter(_imSeqFilter); 00060 int returnVal = _fc.showOpenDialog(this); 00061 if (returnVal != JFileChooser.APPROVE_OPTION) 00062 return; 00063 File file =_fc.getSelectedFile(); 00064 00065 try { 00066 if(_proc != null) _proc.close(); 00067 if(_jmframe != null) _jmframe.setTitle("Sequence (closed)"); 00068 00069 URL url = new URL("file:/"+file.getPath()); 00070 System.out.println(url); 00071 _proc = Manager.createProcessor(url); 00072 _proc.addControllerListener((ControllerListener)this); 00073 _proc.configure(); 00074 } 00075 catch (NoProcessorException e) { 00076 ErrorStreamArea.println("Error: " + e); 00077 } 00078 catch (MalformedURLException e) { 00079 ErrorStreamArea.println("Error:" + e); 00080 } 00081 catch (IOException e) { 00082 ErrorStreamArea.println("Error:" + e); 00083 } 00084 } |
|
00087 { 00088 Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(b)); 00089 } |
|
00092 { 00093 _loop = loop; 00094 } |
|
00097 { 00098 _autoPlay = play; 00099 } |
|
00103 { 00104 if (ce instanceof ConfigureCompleteEvent) { 00105 _proc.setContentDescriptor(null); 00106 00107 // Obtain the track controls. 00108 TrackControl tc[] = _proc.getTrackControls(); 00109 if (tc == null) { 00110 ErrorStreamArea.println("Failed to obtain track controls from the processor."); 00111 return; 00112 } 00113 00114 // Search for the track control for the video track. 00115 TrackControl videoTrack = null; 00116 for (int i = 0; i < tc.length; i++) { 00117 if (tc[i].getFormat() instanceof VideoFormat) { 00118 videoTrack = tc[i]; 00119 break; 00120 } 00121 } 00122 if (videoTrack == null) { 00123 ErrorStreamArea.println("The input media does not contain a video track."); 00124 return; 00125 } 00126 00127 VideoFormat format = (VideoFormat)videoTrack.getFormat(); 00128 _frameRate = format.getFrameRate(); 00129 OutputStreamArea.println("Video format: " + format); 00130 00131 // Instantiate and set the frame access codec to the data flow path. 00132 try { 00133 Codec codec[] = { /*new PreAccessCodec(),*/ 00134 new PostAccessCodec()}; 00135 videoTrack.setCodecChain(codec); 00136 } 00137 catch (UnsupportedPlugInException e) { 00138 ErrorStreamArea.println("The process does not support effects."); 00139 } 00140 00141 _proc.prefetch(); 00142 } 00143 else if (ce instanceof DurationUpdateEvent) { 00144 Time duration = _proc.getDuration(); 00145 if(duration == Duration.DURATION_UNKNOWN) 00146 ErrorStreamArea.println("DURATION_UNKNOWN"); 00147 _nrFrames = (int)(duration.getSeconds() * _frameRate); 00148 } 00149 else if (ce instanceof RealizeCompleteEvent) { 00150 Control ctrl = _proc.getControl("javax.media.control.FramePositioningControl"); 00151 _posCtrl = (FramePositioningControl)ctrl; 00152 00153 Control[] ctrls = _proc.getControls(); 00154 for(int i=0; i<ctrls.length; i++) System.out.println(ctrls[i]); 00155 //System.out.println(_posCtrl.getControlComponent()); 00156 } 00157 else if (ce instanceof PrefetchCompleteEvent) { 00158 final Component seqView = _proc.getVisualComponent(); 00159 final Component ctrl = _proc.getControlPanelComponent(); 00160 00161 final Runnable doShowComponents = new Runnable() { 00162 public void run() { showVideoComponents(seqView, ctrl); } 00163 }; 00164 00165 SwingUtilities.invokeLater(doShowComponents); 00166 00167 if(_autoPlay) handleStart(); 00168 } 00169 else if (ce instanceof EndOfMediaEvent) { 00170 if(_loop) 00171 handleStart(); 00172 else 00173 handleStop(); 00174 //System.err.println("End Of Media"); 00175 } 00176 } |
|
This function is called by _bmenu if the associated menu item is selected.
00182 { 00183 System.exit(0); 00184 } |
|
00187 { 00188 _nrDisplayed = 0; 00189 _startTime = System.currentTimeMillis(); 00190 _statField.setText("running"); 00191 _proc.setMediaTime(new Time(0.0)); 00192 _proc.start(); 00193 00194 _refreshTimer.setRepeats(true); 00195 _refreshTimer.start(); 00196 } |
|
00199 { 00200 _statField.setText("stopping"); 00201 _refreshTimer.stop(); 00202 _proc.stop(); 00203 } |
|
00207 { 00208 _nrDisplayed = 0; 00209 _startTime = System.currentTimeMillis(); 00210 _statField.setText("running"); 00211 _proc.start(); 00212 00213 _refreshTimer.setRepeats(true); 00214 _refreshTimer.start(); 00215 } |
|
00218 { 00219 handleFrameChanged(++_curFrame); 00220 00221 _refreshTimer.setRepeats(false); 00222 _refreshTimer.start(); 00223 } |
|
Implementation of ViewerModeListener.
Reimplemented from ViewerModeListener.
00228 { 00229 JInternalFrame[] frames = _desktop.getAllFrames(); 00230 for (int i=0; i<frames.length; i++) { 00231 CanvasViewer v = (CanvasViewer)frames[i].getClientProperty("Hx.Viewer"); 00232 if(v != null) v.setMode(e.getMode(), e.getSubMode()); 00233 } 00234 } |
|
Implementation of FrameNavigatorUser.
Reimplemented from FrameNavigatorUser.
00239 { 00240 double sec = ((double)newFrame) / _frameRate; 00241 _proc.setMediaTime(new Time(sec)); 00242 System.out.println("*setting frame "+newFrame+" (secs: "+sec+")"); 00243 00244 //int n = _posCtrl.seek(newFrame); 00245 //int n = _posCtrl.skip(1); 00246 //System.out.println("*seeking frame "+newFrame+" (retn: "+n+")"); 00247 //System.out.println("*skiping 1 frame (retn: "+n+")"); 00248 //System.out.println(_posCtrl.FRAME_UNKNOWN); 00249 /*if (_running) { 00250 _moveToFrame = newFrame; 00251 _frameNav.updateStatus(newFrame); 00252 } else { 00253 doOneFrame(newFrame, true); 00254 }*/ 00255 } |
|
Reimplemented from SampleApp.
00265 { 00266 OutputStreamArea out = new OutputStreamArea(10, 60, false); 00267 ErrorStreamArea errorText = new ErrorStreamArea(parent, 4, 60); 00268 00269 OutputStreamArea.println("Building "+getSampleName()+" GUI..."); 00270 00271 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 00272 parent.setBounds(0, 0, screenSize.width - 50, screenSize.height - 50); 00273 00274 _refreshTimer = createRefreshTimer(100); 00275 00276 // Create FileChooser, for loading sequences 00277 00278 _fc = new JFileChooser("\\videos"); 00279 _imSeqFilter = new ImSeqFilter(); 00280 _fc.addChoosableFileFilter(_imSeqFilter); 00281 00282 // Create desktop 00283 _desktop = new JDesktopPane(); 00284 //_desktop.putClientProperty("JDesktopPane.dragMode", "outline"); 00285 parent.getContentPane().add(_desktop); 00286 int x, y; 00287 00288 // Create frame for text output 00289 00290 JInternalFrame outFrame = new JInternalFrame("Output", 00291 true, false, true, true); 00292 outFrame.getContentPane().add(out); 00293 //outFrame.addInternalFrameListener(this); 00294 outFrame.pack(); 00295 // Should be based on desktop, but that is not packed yet. 00296 x = parent.getSize().width - outFrame.getSize().width; 00297 y = parent.getSize().height - outFrame.getSize().height; 00298 y = y - 65; // allow space for status bar 00299 outFrame.setLocation(x, y); 00300 _desktop.add(outFrame); 00301 outFrame.setVisible(true); 00302 00303 //_fixedFrames.add(outFrame); 00304 00305 // Create frame for errors 00306 00307 JInternalFrame errFrame = new JInternalFrame("Errors", 00308 true, false, true, true); 00309 errFrame.getContentPane().add(errorText); 00310 //errFrame.addInternalFrameListener(this); 00311 errFrame.pack(); 00312 errFrame.setLocation(x, y - errFrame.getSize().height); 00313 _desktop.add(errFrame); 00314 errFrame.setVisible(true); 00315 //_fixedFrames.add(errFrame); 00316 00317 00318 // Add ViewerControlBar to desktop 00319 00320 _vcb = new ViewerControlBar(); 00321 _vcb.addViewerModeListener(this); 00322 JInternalFrame vcbFrame = new JInternalFrame("ViewerControlBar", 00323 false, false, false, true); 00324 vcbFrame.getContentPane().add(_vcb); 00325 //vcbFrame.addInternalFrameListener(this); 00326 vcbFrame.pack(); 00327 _desktop.add(vcbFrame); 00328 vcbFrame.setVisible(true); 00329 00330 // Should be based on desktop, but that is not packed yet. 00331 x = parent.getSize().width - vcbFrame.getSize().width; 00332 y = 0; 00333 vcbFrame.setLocation(x, y); 00334 //_fixedFrames.add(vcbFrame); 00335 00336 // Add FrameNavigator 00337 00338 _frameNav = new SimpleFrameNavigator(this, 0, 0, 720, 1); 00339 JInternalFrame navFrame = new JInternalFrame("FrameNavigator", 00340 true, false, false, true); 00341 00342 JPanel butPanel = new JPanel(); 00343 00344 JButton b1 = new JButton("Start"); 00345 b1.setToolTipText("Start playing"); 00346 b1.addActionListener(new AbstractAction() { 00347 public void actionPerformed(ActionEvent e) { 00348 handleStart(); 00349 }}); 00350 butPanel.add(b1); 00351 00352 JButton b2 = new JButton("Stop"); 00353 b2.setToolTipText("Stop playing"); 00354 b2.addActionListener(new AbstractAction() { 00355 public void actionPerformed(ActionEvent e) { 00356 handleStop(); 00357 }}); 00358 butPanel.add(b2); 00359 00360 JButton b3 = new JButton("Cont"); 00361 b3.setToolTipText("Continue playing"); 00362 b3.addActionListener(new AbstractAction() { 00363 public void actionPerformed(ActionEvent e) { 00364 handleContinue(); 00365 }}); 00366 butPanel.add(b3); 00367 00368 JButton b4 = new JButton("Step"); 00369 b4.setToolTipText("Step one frame"); 00370 b4.addActionListener(new AbstractAction() { 00371 public void actionPerformed(ActionEvent e) { 00372 handleStep(); 00373 }}); 00374 butPanel.add(b4); 00375 00376 _statField = new JTextField("Status "); 00377 _statField.setEditable(false); 00378 butPanel.add(_statField); 00379 00380 _fpsField = new JTextField("xxxxxx fps "); 00381 _fpsField.setEditable(false); 00382 butPanel.add(_fpsField); 00383 00384 navFrame.getContentPane().add(_frameNav, BorderLayout.CENTER); 00385 navFrame.getContentPane().add(butPanel, BorderLayout.SOUTH); 00386 //navFrame.addInternalFrameListener(this); 00387 navFrame.pack(); 00388 _desktop.add(navFrame); 00389 navFrame.setVisible(true); 00390 00391 // Should be based on desktop, but that is not packed yet. 00392 x = parent.getSize().width - navFrame.getSize().width; 00393 y = vcbFrame.getSize().height; 00394 navFrame.setLocation(x, y); 00395 //_fixedFrames.add(navFrame); 00396 00397 00398 // Create ExtMenuBar: 00399 00400 _bmenu = new ExtMenuBar(this); 00401 _bmenu.addMenu("File"); 00402 _bmenu.addMenuItem("File", "Open Sequence", "handleOpenSeq"); 00403 _bmenu.addSeparator("File"); 00404 _bmenu.addMenuItem("File", "Exit", "handleExit"); 00405 00406 _bmenu.addMenu("Preferences"); 00407 _bmenu.addCheckBoxItem("Preferences", "Use Lightweight Renderer", 00408 "handleLightweightRenderer", true); 00409 _bmenu.addCheckBoxItem("Preferences", "Continous Loop", 00410 "handleLoop", _loop); 00411 _bmenu.addCheckBoxItem("Preferences", "Auto Play", 00412 "handleAutoPlay", _autoPlay); 00413 00414 parent.setJMenuBar(_bmenu); 00415 00416 //_windowMenu = new JMenu("Windows"); 00417 //_bmenu.add(_windowMenu); 00418 //updateWindowMenu(); 00419 00420 // handleSystemLF(); 00421 00422 Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true)); 00423 00424 OutputStreamArea.println("Done."); 00425 out.capture(); 00426 00427 return true; 00428 } |