xref: /AOO41X/main/avmedia/source/java/Player.java (revision e357d40e15f361adee5a8c2a5199dfabaf4d2b4b)
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