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