/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // UNO import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.IQueryInterface; import com.sun.star.lang.XInitialization; // awt import com.sun.star.awt.*; // media import com.sun.star.media.*; public class Player implements javax.media.ControllerListener, com.sun.star.lang.XServiceInfo, com.sun.star.media.XPlayer, com.sun.star.lang.XComponent { private com.sun.star.lang.XMultiServiceFactory maFactory; private String maURL; private javax.media.Player maPlayer; private javax.media.GainControl maGainControl; private boolean mbStarted = false; private boolean mbLooping = false; // ------------------------------------------------------------------------- public Player( com.sun.star.lang.XMultiServiceFactory aFactory, javax.media.Player aPlayer, String aURL ) { maFactory = aFactory; maURL = aURL; maPlayer = aPlayer; maPlayer.addControllerListener( this ); maGainControl = maPlayer.getGainControl(); } // ------------------------------------------------------------------------- public synchronized void controllerUpdate( javax.media.ControllerEvent aEvt ) { if( aEvt instanceof javax.media.EndOfMediaEvent || aEvt instanceof javax.media.StopAtTimeEvent ) { mbStarted = false; if( mbLooping ) { setMediaTime( 0.0 ); start(); } else if( aEvt instanceof javax.media.EndOfMediaEvent ) setMediaTime( getDuration() ); } } // ----------- // - XPlayer - // ----------- public synchronized void start() { if( !mbStarted ) { maPlayer.start(); mbStarted = true; } } // ------------------------------------------------------------------------- public synchronized void stop() { if( mbStarted ) { maPlayer.stop(); mbStarted = false; } } // ------------------------------------------------------------------------- public synchronized boolean isPlaying() { return mbStarted; } // ------------------------------------------------------------------------- public synchronized double getDuration() { return maPlayer.getDuration().getSeconds(); } // ------------------------------------------------------------------------- public synchronized void setMediaTime( double fTime ) { if( fTime >= 0.0 && fTime <= getDuration() ) maPlayer.setMediaTime( new javax.media.Time( fTime ) ); } // ------------------------------------------------------------------------- public synchronized double getMediaTime() { return maPlayer.getMediaTime().getSeconds(); } // ------------------------------------------------------------------------- public synchronized void setStopTime( double fTime ) { boolean bOldStarted = mbStarted; if( mbStarted ) stop(); maPlayer.setStopTime( new javax.media.Time( fTime ) ); if( bOldStarted ) start(); } // ------------------------------------------------------------------------- public synchronized double getStopTime() { return maPlayer.getStopTime().getSeconds(); } // ------------------------------------------------------------------------- public synchronized void setRate( double fRate ) { boolean bOldStarted = mbStarted; if( mbStarted ) stop(); maPlayer.setRate( (float) fRate ); if( bOldStarted ) start(); } // ------------------------------------------------------------------------- public synchronized double getRate() { return (double) maPlayer.getRate(); } // ------------------------------------------------------------------------- public synchronized void setPlaybackLoop( boolean bSet ) { mbLooping = bSet; } // ------------------------------------------------------------------------- public synchronized boolean isPlaybackLoop() { return mbLooping; } // ------------------------------------------------------------------------- public synchronized void setVolumeDB( short nVolumeDB ) { if( maGainControl != null ) maGainControl.setDB( nVolumeDB ); } // ------------------------------------------------------------------------- public synchronized short getVolumeDB() { return( maGainControl != null ? (short) maGainControl.getDB() : 0 ); } // ------------------------------------------------------------------------- public synchronized void setMute( boolean bSet ) { if( maGainControl != null ) maGainControl.setMute( bSet ); } // ------------------------------------------------------------------------- public synchronized boolean isMute() { return( maGainControl != null ? maGainControl.getMute() : false ); } // ------------------------------------------------------------------------- public synchronized com.sun.star.awt.Size getPreferredPlayerWindowSize() { java.awt.Component aVisualComponent = maPlayer.getVisualComponent(); com.sun.star.awt.Size aSize = new com.sun.star.awt.Size( 0, 0 ); if( aVisualComponent != null ) { java.awt.Dimension aDim = aVisualComponent.getPreferredSize(); aSize.Width = Math.max( aDim.width, 0 ); aSize.Height = Math.max( aDim.height, 0 ); } return aSize; } // ------------------------------------------------------------------------- public synchronized com.sun.star.media.XPlayerWindow createPlayerWindow( java.lang.Object[] aArgs ) { try { com.sun.star.media.XPlayerWindow xPlayerWindow = ( ( ( aArgs.length > 1 ) && ( AnyConverter.toInt( aArgs[ 0 ] ) > 0 ) ) ? new PlayerWindow( maFactory, aArgs, maPlayer ) : null ); // check if it is a real player window (video window) if( xPlayerWindow != null && xPlayerWindow.getZoomLevel() == com.sun.star.media.ZoomLevel.NOT_AVAILABLE ) xPlayerWindow = null; return xPlayerWindow; } catch( com.sun.star.lang.IllegalArgumentException e ) { return null; } } // ------------------------------------------------------------------------- public synchronized com.sun.star.media.XFrameGrabber createFrameGrabber() { return( (com.sun.star.media.XFrameGrabber) new FrameGrabber( maFactory, maURL ) ); } // -------------- // - XComponent - // -------------- public synchronized void addEventListener( com.sun.star.lang.XEventListener xListener ) { } // ------------------------------------------------------------------------- public synchronized void removeEventListener( com.sun.star.lang.XEventListener xListener ) { } // ------------------------------------------------------------------------- public synchronized void dispose() { if( maPlayer != null ) { maPlayer.stop(); maPlayer.close(); maPlayer = null; } } // ---------------- // - XServiceInfo - // ---------------- private static final String s_implName = "com.sun.star.comp.Player_Java"; private static final String s_serviceName = "com.sun.star.media.Player_Java"; public synchronized String getImplementationName() { return s_implName; } // ------------------------------------------------------------------------- public synchronized String [] getSupportedServiceNames() { return new String [] { s_serviceName }; } // ------------------------------------------------------------------------- public synchronized boolean supportsService( String serviceName ) { return serviceName.equals( s_serviceName ); } }