1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // UNO 29*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 30*cdf0e10cSrcweir import com.sun.star.uno.XComponentContext; 31*cdf0e10cSrcweir import com.sun.star.uno.AnyConverter; 32*cdf0e10cSrcweir import com.sun.star.uno.IQueryInterface; 33*cdf0e10cSrcweir import com.sun.star.lang.XInitialization; 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir // awt 36*cdf0e10cSrcweir import com.sun.star.awt.*; 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir // media 39*cdf0e10cSrcweir import com.sun.star.media.*; 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir public class Player implements javax.media.ControllerListener, 42*cdf0e10cSrcweir com.sun.star.lang.XServiceInfo, 43*cdf0e10cSrcweir com.sun.star.media.XPlayer, 44*cdf0e10cSrcweir com.sun.star.lang.XComponent 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir { 48*cdf0e10cSrcweir private com.sun.star.lang.XMultiServiceFactory maFactory; 49*cdf0e10cSrcweir private String maURL; 50*cdf0e10cSrcweir private javax.media.Player maPlayer; 51*cdf0e10cSrcweir private javax.media.GainControl maGainControl; 52*cdf0e10cSrcweir private boolean mbStarted = false; 53*cdf0e10cSrcweir private boolean mbLooping = false; 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir // ------------------------------------------------------------------------- 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir public Player( com.sun.star.lang.XMultiServiceFactory aFactory, 58*cdf0e10cSrcweir javax.media.Player aPlayer, String aURL ) 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir maFactory = aFactory; 61*cdf0e10cSrcweir maURL = aURL; 62*cdf0e10cSrcweir maPlayer = aPlayer; 63*cdf0e10cSrcweir maPlayer.addControllerListener( this ); 64*cdf0e10cSrcweir maGainControl = maPlayer.getGainControl(); 65*cdf0e10cSrcweir } 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir // ------------------------------------------------------------------------- 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir public synchronized void controllerUpdate( javax.media.ControllerEvent aEvt ) 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir if( aEvt instanceof javax.media.EndOfMediaEvent || 72*cdf0e10cSrcweir aEvt instanceof javax.media.StopAtTimeEvent ) 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir mbStarted = false; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir if( mbLooping ) 77*cdf0e10cSrcweir { 78*cdf0e10cSrcweir setMediaTime( 0.0 ); 79*cdf0e10cSrcweir start(); 80*cdf0e10cSrcweir } 81*cdf0e10cSrcweir else if( aEvt instanceof javax.media.EndOfMediaEvent ) 82*cdf0e10cSrcweir setMediaTime( getDuration() ); 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir // ----------- 87*cdf0e10cSrcweir // - XPlayer - 88*cdf0e10cSrcweir // ----------- 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir public synchronized void start() 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir if( !mbStarted ) 93*cdf0e10cSrcweir { 94*cdf0e10cSrcweir maPlayer.start(); 95*cdf0e10cSrcweir mbStarted = true; 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir // ------------------------------------------------------------------------- 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir public synchronized void stop() 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir if( mbStarted ) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir maPlayer.stop(); 106*cdf0e10cSrcweir mbStarted = false; 107*cdf0e10cSrcweir } 108*cdf0e10cSrcweir } 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir // ------------------------------------------------------------------------- 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir public synchronized boolean isPlaying() 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir return mbStarted; 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir // ------------------------------------------------------------------------- 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir public synchronized double getDuration() 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir return maPlayer.getDuration().getSeconds(); 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir // ------------------------------------------------------------------------- 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir public synchronized void setMediaTime( double fTime ) 127*cdf0e10cSrcweir { 128*cdf0e10cSrcweir if( fTime >= 0.0 && fTime <= getDuration() ) 129*cdf0e10cSrcweir maPlayer.setMediaTime( new javax.media.Time( fTime ) ); 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir // ------------------------------------------------------------------------- 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir public synchronized double getMediaTime() 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir return maPlayer.getMediaTime().getSeconds(); 137*cdf0e10cSrcweir } 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir // ------------------------------------------------------------------------- 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir public synchronized void setStopTime( double fTime ) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir boolean bOldStarted = mbStarted; 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir if( mbStarted ) 146*cdf0e10cSrcweir stop(); 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir maPlayer.setStopTime( new javax.media.Time( fTime ) ); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir if( bOldStarted ) 151*cdf0e10cSrcweir start(); 152*cdf0e10cSrcweir } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir // ------------------------------------------------------------------------- 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir public synchronized double getStopTime() 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir return maPlayer.getStopTime().getSeconds(); 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir // ------------------------------------------------------------------------- 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir public synchronized void setRate( double fRate ) 164*cdf0e10cSrcweir { 165*cdf0e10cSrcweir boolean bOldStarted = mbStarted; 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir if( mbStarted ) 168*cdf0e10cSrcweir stop(); 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir maPlayer.setRate( (float) fRate ); 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir if( bOldStarted ) 173*cdf0e10cSrcweir start(); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir // ------------------------------------------------------------------------- 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir public synchronized double getRate() 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir return (double) maPlayer.getRate(); 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir // ------------------------------------------------------------------------- 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir public synchronized void setPlaybackLoop( boolean bSet ) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir mbLooping = bSet; 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir // ------------------------------------------------------------------------- 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir public synchronized boolean isPlaybackLoop() 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir return mbLooping; 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir // ------------------------------------------------------------------------- 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir public synchronized void setVolumeDB( short nVolumeDB ) 200*cdf0e10cSrcweir { 201*cdf0e10cSrcweir if( maGainControl != null ) 202*cdf0e10cSrcweir maGainControl.setDB( nVolumeDB ); 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir // ------------------------------------------------------------------------- 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir public synchronized short getVolumeDB() 208*cdf0e10cSrcweir { 209*cdf0e10cSrcweir return( maGainControl != null ? (short) maGainControl.getDB() : 0 ); 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir // ------------------------------------------------------------------------- 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir public synchronized void setMute( boolean bSet ) 215*cdf0e10cSrcweir { 216*cdf0e10cSrcweir if( maGainControl != null ) 217*cdf0e10cSrcweir maGainControl.setMute( bSet ); 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir // ------------------------------------------------------------------------- 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir public synchronized boolean isMute() 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir return( maGainControl != null ? maGainControl.getMute() : false ); 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir // ------------------------------------------------------------------------- 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir public synchronized com.sun.star.awt.Size getPreferredPlayerWindowSize() 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir java.awt.Component aVisualComponent = maPlayer.getVisualComponent(); 232*cdf0e10cSrcweir com.sun.star.awt.Size aSize = new com.sun.star.awt.Size( 0, 0 ); 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir if( aVisualComponent != null ) 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir java.awt.Dimension aDim = aVisualComponent.getPreferredSize(); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir aSize.Width = Math.max( aDim.width, 0 ); 239*cdf0e10cSrcweir aSize.Height = Math.max( aDim.height, 0 ); 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir return aSize; 243*cdf0e10cSrcweir } 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir // ------------------------------------------------------------------------- 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir public synchronized com.sun.star.media.XPlayerWindow createPlayerWindow( java.lang.Object[] aArgs ) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir try 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir com.sun.star.media.XPlayerWindow xPlayerWindow = ( ( ( aArgs.length > 1 ) && ( AnyConverter.toInt( aArgs[ 0 ] ) > 0 ) ) ? 252*cdf0e10cSrcweir new PlayerWindow( maFactory, aArgs, maPlayer ) : 253*cdf0e10cSrcweir null ); 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir // check if it is a real player window (video window) 256*cdf0e10cSrcweir if( xPlayerWindow != null && xPlayerWindow.getZoomLevel() == com.sun.star.media.ZoomLevel.NOT_AVAILABLE ) 257*cdf0e10cSrcweir xPlayerWindow = null; 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir return xPlayerWindow; 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir catch( com.sun.star.lang.IllegalArgumentException e ) 262*cdf0e10cSrcweir { 263*cdf0e10cSrcweir return null; 264*cdf0e10cSrcweir } 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir // ------------------------------------------------------------------------- 268*cdf0e10cSrcweir 269*cdf0e10cSrcweir public synchronized com.sun.star.media.XFrameGrabber createFrameGrabber() 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir return( (com.sun.star.media.XFrameGrabber) new FrameGrabber( maFactory, maURL ) ); 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir // -------------- 275*cdf0e10cSrcweir // - XComponent - 276*cdf0e10cSrcweir // -------------- 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir public synchronized void addEventListener( com.sun.star.lang.XEventListener xListener ) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir // ------------------------------------------------------------------------- 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir public synchronized void removeEventListener( com.sun.star.lang.XEventListener xListener ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir // ------------------------------------------------------------------------- 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir public synchronized void dispose() 291*cdf0e10cSrcweir { 292*cdf0e10cSrcweir if( maPlayer != null ) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir maPlayer.stop(); 295*cdf0e10cSrcweir maPlayer.close(); 296*cdf0e10cSrcweir maPlayer = null; 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir // ---------------- 301*cdf0e10cSrcweir // - XServiceInfo - 302*cdf0e10cSrcweir // ---------------- 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir private static final String s_implName = "com.sun.star.comp.Player_Java"; 305*cdf0e10cSrcweir private static final String s_serviceName = "com.sun.star.media.Player_Java"; 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir public synchronized String getImplementationName() 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir return s_implName; 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir // ------------------------------------------------------------------------- 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir public synchronized String [] getSupportedServiceNames() 315*cdf0e10cSrcweir { 316*cdf0e10cSrcweir return new String [] { s_serviceName }; 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir // ------------------------------------------------------------------------- 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir public synchronized boolean supportsService( String serviceName ) 322*cdf0e10cSrcweir { 323*cdf0e10cSrcweir return serviceName.equals( s_serviceName ); 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir } 326