/* * File : QT61ActiveMediaPlayer.java * Created : 19-sep-2003 11:02 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.media; import edu.xtec.jclic.PlayStation; import edu.xtec.jclic.bags.MediaBag; import edu.xtec.jclic.boxes.ActiveBox; import java.awt.Component; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.29 */ public class QT61ActiveMediaPlayer extends ActiveMediaPlayer{ quicktime.app.view.MoviePlayer player; quicktime.app.view.QTComponent canvas; boolean realized; /** Creates new QT61ActiveMediaPlayer */ public QT61ActiveMediaPlayer(edu.xtec.jclic.media.MediaContent mc, MediaBag mb, PlayStation ps) { super(mc, mb, ps); player=null; realized=false; if(!useAudioBuffer){ try{ player=QT61Tools.getPlayer(mb.getMediaDataSource(mc.mediaFileName)); if(player!=null){ // Mirar l'equivalent a aixo: //player.setControllerVisible(false); //player.setControllerSizeReserved(false); } } catch(Exception ex){ System.err.println("Error reading media \""+mc.mediaFileName+"\":\n"+ex); } } } public AudioBuffer createAudioBuffer(int seconds) throws Exception{ return new QT61AudioBuffer(mc.length); } public void realize(){ if(!useAudioBuffer){ try{ if(player!=null){ attachVisualComponent(); //player.startTasking(); //player.getMovieController().getMovie().setTimeScale(1000); player.getMovie().setTimeScale(1000); setTimeRanges(); //player.stopTasking(); realized=true; } } catch(Exception ex){ System.err.println("QuickTime exception:\n"+ex); } } } @Override protected void playNow(ActiveBox setBx) { if(useAudioBuffer) super.playNow(setBx); else if(player!=null){ try{ stop(); if(!realized) realize(); if(mc.mediaType==MediaContent.PLAY_VIDEO) linkTo(setBx); attachVisualComponent(); player.setTime(Math.max(mc.from, 0)); quicktime.app.time.TaskAllMovies.addMovieAndStart(); player.getMovie().setActive(true); player.setRate(1.0F); } catch(Exception ex){ System.err.println("QuickTime Exception:\n"+ex); } } } @Override public void stop() { super.stop(); if(!useAudioBuffer){ try{ if(player!=null){ player.setRate(0); player.getMovie().setActive(false); quicktime.app.time.TaskAllMovies.removeMovie(); } } catch(Exception ex){ System.err.println("QuickTime Error:\n"+ex); } } } @Override public void clear() { super.clear(); if(!useAudioBuffer){ try{ if(player!=null){ destroyVisualComponent(); realized=false; } } catch(Exception ex){ System.err.println("QuickTime Error:\n"+ex); } } } protected void setTimeRanges(){ if(useAudioBuffer || player==null) return; try{ if(mc.from>=0 || mc.to>=0){ int from=Math.max(0, mc.from); int to=mc.to; if(to<0){ to=player.getDuration(); } player.setTime(Math.max(mc.from, 0)); player.getMovie().setActiveSegment(new quicktime.std.movies.TimeInfo(from, to-from)); } // MIRAR AIXO!!! //if(mc.loop) // player.getMovieController().setLooping(true); } catch(Exception ex){ System.err.println("QuickTime Error:\n"+ex); } } protected Component getVisualComponent(){ if(player==null || mc.mediaType!=MediaContent.PLAY_VIDEO) return null; if(canvas==null){ try{ canvas=quicktime.app.view.QTFactory.makeQTComponent(player.getMovie()); //canvas=QTFactory.fromMoviePlayer(player); //canvas=new QTCanvas(); //canvas.setClient(player, false); } catch(Exception ex){ System.err.println("Error building QTCanvas!\n"+ex); } } return (Component)canvas; } }