1f39251c4SAndrew Rist /**************************************************************
2*97c864ccSmseidel  *
3f39251c4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4f39251c4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5f39251c4SAndrew Rist  * distributed with this work for additional information
6f39251c4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7f39251c4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8f39251c4SAndrew Rist  * "License"); you may not use this file except in compliance
9f39251c4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*97c864ccSmseidel  *
11f39251c4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*97c864ccSmseidel  *
13f39251c4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14f39251c4SAndrew Rist  * software distributed under the License is distributed on an
15f39251c4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f39251c4SAndrew Rist  * KIND, either express or implied.  See the License for the
17f39251c4SAndrew Rist  * specific language governing permissions and limitations
18f39251c4SAndrew Rist  * under the License.
19*97c864ccSmseidel  *
20f39251c4SAndrew Rist  *************************************************************/
21f39251c4SAndrew Rist 
22f39251c4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "mediawindowbase_impl.hxx"
25*97c864ccSmseidel #include <avmedia/mediaitem.hxx>
26cdf0e10cSrcweir #include "mediamisc.hxx"
27cdf0e10cSrcweir #include "mediawindow.hrc"
28cdf0e10cSrcweir #include <tools/urlobj.hxx>
29cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
31cdf0e10cSrcweir #include <com/sun/star/media/XManager.hpp>
32cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HDL_
33cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hdl>
34cdf0e10cSrcweir #endif
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #define MEDIA_TIMER_TIMEOUT 100
37cdf0e10cSrcweir 
38cdf0e10cSrcweir using namespace ::com::sun::star;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir namespace avmedia { namespace priv {
41cdf0e10cSrcweir 
42cdf0e10cSrcweir // -----------------------
43cdf0e10cSrcweir // - MediaWindowBaseImpl -
44cdf0e10cSrcweir // -----------------------
45cdf0e10cSrcweir 
46cdf0e10cSrcweir struct ServiceManager
47cdf0e10cSrcweir {
48cdf0e10cSrcweir 	const char* pServiceName;
49cdf0e10cSrcweir     sal_Bool    bIsJavaBased;
50cdf0e10cSrcweir };
51cdf0e10cSrcweir 
52cdf0e10cSrcweir // ---------------------------------------------------------------------
53cdf0e10cSrcweir 
54cdf0e10cSrcweir 
MediaWindowBaseImpl(MediaWindow * pMediaWindow)55cdf0e10cSrcweir MediaWindowBaseImpl::MediaWindowBaseImpl( MediaWindow* pMediaWindow ) :
56cdf0e10cSrcweir     mpMediaWindow( pMediaWindow ),
57cdf0e10cSrcweir     mbIsMediaWindowJavaBased( sal_False )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir // ---------------------------------------------------------------------
62cdf0e10cSrcweir 
~MediaWindowBaseImpl()63cdf0e10cSrcweir MediaWindowBaseImpl::~MediaWindowBaseImpl()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
66cdf0e10cSrcweir }
67cdf0e10cSrcweir 
68cdf0e10cSrcweir // -------------------------------------------------------------------------
69cdf0e10cSrcweir 
createPlayer(const::rtl::OUString & rURL,sal_Bool & rbJavaBased)70cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL, sal_Bool& rbJavaBased )
71cdf0e10cSrcweir {
72cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory >    xFactory( ::comphelper::getProcessServiceFactory() );
73cdf0e10cSrcweir     uno::Reference< media::XPlayer >                xPlayer;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir     rbJavaBased = sal_False;
76cdf0e10cSrcweir 
77cdf0e10cSrcweir     if( xFactory.is() )
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         static const ServiceManager aServiceManagers[] =
80cdf0e10cSrcweir         {
81cdf0e10cSrcweir             { AVMEDIA_MANAGER_SERVICE_NAME, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED },
82cdf0e10cSrcweir             { AVMEDIA_MANAGER_SERVICE_NAME_FALLBACK1, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED_FALLBACK1 }
83cdf0e10cSrcweir         };
84cdf0e10cSrcweir 
85cdf0e10cSrcweir         for( sal_uInt32 i = 0; !xPlayer.is() && ( i < ( sizeof( aServiceManagers ) / sizeof( ServiceManager ) ) ); ++i )
86cdf0e10cSrcweir         {
87cdf0e10cSrcweir             const String aServiceName( aServiceManagers[ i ].pServiceName, RTL_TEXTENCODING_ASCII_US );
88cdf0e10cSrcweir 
89cdf0e10cSrcweir             if( aServiceName.Len() )
90cdf0e10cSrcweir             {
91cdf0e10cSrcweir                 OSL_TRACE( "Trying to create media manager service %s", aServiceManagers[ i ].pServiceName );
92cdf0e10cSrcweir 
93cdf0e10cSrcweir                 try
94cdf0e10cSrcweir                 {
95cdf0e10cSrcweir                     uno::Reference< media::XManager > xManager( xFactory->createInstance( aServiceName ), uno::UNO_QUERY );
96cdf0e10cSrcweir 
97cdf0e10cSrcweir                     if( xManager.is() )
98cdf0e10cSrcweir                     {
99cdf0e10cSrcweir                         xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY );
100cdf0e10cSrcweir                     }
101cdf0e10cSrcweir                 }
102cdf0e10cSrcweir                 catch( ... )
103cdf0e10cSrcweir                 {
104cdf0e10cSrcweir                 }
105cdf0e10cSrcweir             }
106cdf0e10cSrcweir 
107cdf0e10cSrcweir             if( xPlayer.is() )
108cdf0e10cSrcweir             {
109cdf0e10cSrcweir                 rbJavaBased = aServiceManagers[ i ].bIsJavaBased;
110cdf0e10cSrcweir             }
111cdf0e10cSrcweir         }
112cdf0e10cSrcweir     }
113*97c864ccSmseidel 
114cdf0e10cSrcweir     return xPlayer;
115cdf0e10cSrcweir }
116cdf0e10cSrcweir 
117cdf0e10cSrcweir // ---------------------------------------------------------------------
118cdf0e10cSrcweir 
setURL(const::rtl::OUString & rURL)119cdf0e10cSrcweir void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir     if( rURL != getURL() )
122cdf0e10cSrcweir     {
123cdf0e10cSrcweir         INetURLObject aURL( maFileURL = rURL );
124*97c864ccSmseidel 
125cdf0e10cSrcweir         if( mxPlayer.is() )
126cdf0e10cSrcweir             mxPlayer->stop();
127*97c864ccSmseidel 
128cdf0e10cSrcweir         if( mxPlayerWindow.is() )
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             mxPlayerWindow->setVisible( false );
131cdf0e10cSrcweir             mxPlayerWindow.clear();
132cdf0e10cSrcweir         }
133*97c864ccSmseidel 
134cdf0e10cSrcweir         mxPlayer.clear();
135*97c864ccSmseidel 
136cdf0e10cSrcweir         if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
137cdf0e10cSrcweir             maFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
138*97c864ccSmseidel 
139cdf0e10cSrcweir         mxPlayer = createPlayer( maFileURL, mbIsMediaWindowJavaBased );
140cdf0e10cSrcweir         onURLChanged();
141cdf0e10cSrcweir     }
142cdf0e10cSrcweir }
143cdf0e10cSrcweir 
144cdf0e10cSrcweir // ---------------------------------------------------------------------
145cdf0e10cSrcweir 
onURLChanged()146cdf0e10cSrcweir void MediaWindowBaseImpl::onURLChanged()
147cdf0e10cSrcweir {
148cdf0e10cSrcweir }
149cdf0e10cSrcweir 
150cdf0e10cSrcweir // ---------------------------------------------------------------------
151*97c864ccSmseidel 
getURL() const152cdf0e10cSrcweir const ::rtl::OUString& MediaWindowBaseImpl::getURL() const
153cdf0e10cSrcweir {
154cdf0e10cSrcweir     return maFileURL;
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir // ---------------------------------------------------------------------
158cdf0e10cSrcweir 
isValid() const159cdf0e10cSrcweir bool MediaWindowBaseImpl::isValid() const
160cdf0e10cSrcweir {
161cdf0e10cSrcweir     return( getPlayer().is() );
162cdf0e10cSrcweir }
163cdf0e10cSrcweir 
164cdf0e10cSrcweir // ---------------------------------------------------------------------
165cdf0e10cSrcweir 
stopPlayingInternal(bool bStop)166cdf0e10cSrcweir void MediaWindowBaseImpl::stopPlayingInternal( bool bStop )
167cdf0e10cSrcweir {
168cdf0e10cSrcweir     if( isPlaying() )
169cdf0e10cSrcweir     {
170cdf0e10cSrcweir         bStop ? mxPlayer->stop() : mxPlayer->start();
171cdf0e10cSrcweir     }
172cdf0e10cSrcweir }
173cdf0e10cSrcweir 
174cdf0e10cSrcweir // ---------------------------------------------------------------------
175cdf0e10cSrcweir 
getMediaWindow() const176cdf0e10cSrcweir MediaWindow* MediaWindowBaseImpl::getMediaWindow() const
177cdf0e10cSrcweir {
178cdf0e10cSrcweir     return mpMediaWindow;
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir // ---------------------------------------------------------------------
182cdf0e10cSrcweir 
getPlayer() const183cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindowBaseImpl::getPlayer() const
184cdf0e10cSrcweir {
185cdf0e10cSrcweir     return mxPlayer;
186cdf0e10cSrcweir }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir // ---------------------------------------------------------------------
189cdf0e10cSrcweir 
getPlayerWindow() const190cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > MediaWindowBaseImpl::getPlayerWindow() const
191cdf0e10cSrcweir {
192cdf0e10cSrcweir     return mxPlayerWindow;
193cdf0e10cSrcweir }
194cdf0e10cSrcweir 
195cdf0e10cSrcweir // ---------------------------------------------------------------------
196cdf0e10cSrcweir 
setPlayerWindow(const uno::Reference<media::XPlayerWindow> & rxPlayerWindow)197cdf0e10cSrcweir void MediaWindowBaseImpl::setPlayerWindow( const uno::Reference< media::XPlayerWindow >& rxPlayerWindow )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir     mxPlayerWindow = rxPlayerWindow;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir // ---------------------------------------------------------------------
203cdf0e10cSrcweir 
cleanUp()204cdf0e10cSrcweir void MediaWindowBaseImpl::cleanUp()
205cdf0e10cSrcweir {
206cdf0e10cSrcweir     uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY );
207cdf0e10cSrcweir     if( xComponent.is() ) // this stops the player
208cdf0e10cSrcweir         xComponent->dispose();
209*97c864ccSmseidel 
210cdf0e10cSrcweir     mxPlayer.clear();
211*97c864ccSmseidel 
212cdf0e10cSrcweir     mpMediaWindow = NULL;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir // ---------------------------------------------------------------------
216cdf0e10cSrcweir 
hasPreferredSize() const217cdf0e10cSrcweir bool MediaWindowBaseImpl::hasPreferredSize() const
218cdf0e10cSrcweir {
219cdf0e10cSrcweir     return( mxPlayerWindow.is() );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir // ---------------------------------------------------------------------
223cdf0e10cSrcweir 
getPreferredSize() const224cdf0e10cSrcweir Size MediaWindowBaseImpl::getPreferredSize() const
225cdf0e10cSrcweir {
226cdf0e10cSrcweir     Size aRet;
227cdf0e10cSrcweir 
228cdf0e10cSrcweir     if( mxPlayer.is() )
229cdf0e10cSrcweir     {
230cdf0e10cSrcweir         awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() );
231cdf0e10cSrcweir 
232cdf0e10cSrcweir         aRet.Width() = aPrefSize.Width;
233cdf0e10cSrcweir         aRet.Height() = aPrefSize.Height;
234cdf0e10cSrcweir     }
235cdf0e10cSrcweir 
236cdf0e10cSrcweir     return aRet;
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir // ---------------------------------------------------------------------
240cdf0e10cSrcweir 
setZoom(::com::sun::star::media::ZoomLevel eLevel)241cdf0e10cSrcweir bool MediaWindowBaseImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir     return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false );
244cdf0e10cSrcweir }
245cdf0e10cSrcweir 
246cdf0e10cSrcweir // -------------------------------------------------------------------------
247cdf0e10cSrcweir 
getZoom() const248cdf0e10cSrcweir ::com::sun::star::media::ZoomLevel MediaWindowBaseImpl::getZoom() const
249cdf0e10cSrcweir {
250cdf0e10cSrcweir     return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE );
251cdf0e10cSrcweir }
252cdf0e10cSrcweir 
253cdf0e10cSrcweir // ---------------------------------------------------------------------
254cdf0e10cSrcweir 
start()255cdf0e10cSrcweir bool MediaWindowBaseImpl::start()
256cdf0e10cSrcweir {
257cdf0e10cSrcweir     return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false );
258cdf0e10cSrcweir }
259cdf0e10cSrcweir 
260cdf0e10cSrcweir // ---------------------------------------------------------------------
261cdf0e10cSrcweir 
stop()262cdf0e10cSrcweir void MediaWindowBaseImpl::stop()
263cdf0e10cSrcweir {
264cdf0e10cSrcweir     if( mxPlayer.is() )
265cdf0e10cSrcweir         mxPlayer->stop();
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
268cdf0e10cSrcweir // ---------------------------------------------------------------------
269cdf0e10cSrcweir 
isPlaying() const270cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaying() const
271cdf0e10cSrcweir {
272cdf0e10cSrcweir     return( mxPlayer.is() && mxPlayer->isPlaying() );
273cdf0e10cSrcweir }
274cdf0e10cSrcweir 
275cdf0e10cSrcweir // ---------------------------------------------------------------------
276cdf0e10cSrcweir 
getDuration() const277cdf0e10cSrcweir double MediaWindowBaseImpl::getDuration() const
278cdf0e10cSrcweir {
279cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 );
280cdf0e10cSrcweir }
281cdf0e10cSrcweir 
282cdf0e10cSrcweir // ---------------------------------------------------------------------
283cdf0e10cSrcweir 
setMediaTime(double fTime)284cdf0e10cSrcweir void MediaWindowBaseImpl::setMediaTime( double fTime )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir     if( mxPlayer.is() )
287cdf0e10cSrcweir         mxPlayer->setMediaTime( fTime );
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir // ---------------------------------------------------------------------
291cdf0e10cSrcweir 
getMediaTime() const292cdf0e10cSrcweir double MediaWindowBaseImpl::getMediaTime() const
293cdf0e10cSrcweir {
294cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 );
295cdf0e10cSrcweir }
296cdf0e10cSrcweir 
297cdf0e10cSrcweir // ---------------------------------------------------------------------
298cdf0e10cSrcweir 
setStopTime(double fTime)299cdf0e10cSrcweir void MediaWindowBaseImpl::setStopTime( double fTime )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir     if( mxPlayer.is() )
302cdf0e10cSrcweir         mxPlayer->setStopTime( fTime );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir 
305cdf0e10cSrcweir // ---------------------------------------------------------------------
306cdf0e10cSrcweir 
getStopTime() const307cdf0e10cSrcweir double MediaWindowBaseImpl::getStopTime() const
308cdf0e10cSrcweir {
309cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->getStopTime() : 0.0 );
310cdf0e10cSrcweir }
311cdf0e10cSrcweir 
312cdf0e10cSrcweir // ---------------------------------------------------------------------
313cdf0e10cSrcweir 
setRate(double fRate)314cdf0e10cSrcweir void MediaWindowBaseImpl::setRate( double fRate )
315cdf0e10cSrcweir {
316cdf0e10cSrcweir     if( mxPlayer.is() )
317cdf0e10cSrcweir         mxPlayer->setRate( fRate );
318cdf0e10cSrcweir }
319cdf0e10cSrcweir 
320cdf0e10cSrcweir // ---------------------------------------------------------------------
321cdf0e10cSrcweir 
getRate() const322cdf0e10cSrcweir double MediaWindowBaseImpl::getRate() const
323cdf0e10cSrcweir {
324cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 );
325cdf0e10cSrcweir }
326cdf0e10cSrcweir 
327cdf0e10cSrcweir // ---------------------------------------------------------------------
328cdf0e10cSrcweir 
setPlaybackLoop(bool bSet)329cdf0e10cSrcweir void MediaWindowBaseImpl::setPlaybackLoop( bool bSet )
330cdf0e10cSrcweir {
331cdf0e10cSrcweir     if( mxPlayer.is() )
332cdf0e10cSrcweir         mxPlayer->setPlaybackLoop( bSet );
333cdf0e10cSrcweir }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir // ---------------------------------------------------------------------
336cdf0e10cSrcweir 
isPlaybackLoop() const337cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaybackLoop() const
338cdf0e10cSrcweir {
339cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false );
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
342cdf0e10cSrcweir // ---------------------------------------------------------------------
343cdf0e10cSrcweir 
setMute(bool bSet)344cdf0e10cSrcweir void MediaWindowBaseImpl::setMute( bool bSet )
345cdf0e10cSrcweir {
346cdf0e10cSrcweir     if( mxPlayer.is() )
347cdf0e10cSrcweir         mxPlayer->setMute( bSet );
348cdf0e10cSrcweir }
349cdf0e10cSrcweir 
350cdf0e10cSrcweir // ---------------------------------------------------------------------
351cdf0e10cSrcweir 
isMute() const352cdf0e10cSrcweir bool MediaWindowBaseImpl::isMute() const
353cdf0e10cSrcweir {
354cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->isMute() : false );
355cdf0e10cSrcweir }
356cdf0e10cSrcweir 
357cdf0e10cSrcweir // ---------------------------------------------------------------------
358cdf0e10cSrcweir 
setVolumeDB(sal_Int16 nVolumeDB)359cdf0e10cSrcweir void MediaWindowBaseImpl::setVolumeDB( sal_Int16 nVolumeDB )
360cdf0e10cSrcweir {
361cdf0e10cSrcweir     if( mxPlayer.is() )
362cdf0e10cSrcweir         mxPlayer->setVolumeDB( nVolumeDB );
363cdf0e10cSrcweir }
364cdf0e10cSrcweir 
365cdf0e10cSrcweir // ---------------------------------------------------------------------
366*97c864ccSmseidel 
getVolumeDB() const367cdf0e10cSrcweir sal_Int16 MediaWindowBaseImpl::getVolumeDB() const
368cdf0e10cSrcweir {
369cdf0e10cSrcweir     return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 );
370cdf0e10cSrcweir }
371cdf0e10cSrcweir 
372cdf0e10cSrcweir // -------------------------------------------------------------------------
373cdf0e10cSrcweir 
updateMediaItem(MediaItem & rItem) const374cdf0e10cSrcweir void MediaWindowBaseImpl::updateMediaItem( MediaItem& rItem ) const
375cdf0e10cSrcweir {
376cdf0e10cSrcweir     if( isPlaying() )
377cdf0e10cSrcweir         rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
378cdf0e10cSrcweir     else
379cdf0e10cSrcweir         rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE );
380*97c864ccSmseidel 
381cdf0e10cSrcweir     rItem.setDuration( getDuration() );
382cdf0e10cSrcweir     rItem.setTime( getMediaTime() );
383cdf0e10cSrcweir     rItem.setLoop( isPlaybackLoop() );
384cdf0e10cSrcweir     rItem.setMute( isMute() );
385cdf0e10cSrcweir     rItem.setVolumeDB( getVolumeDB() );
386cdf0e10cSrcweir     rItem.setZoom( getZoom() );
387cdf0e10cSrcweir     rItem.setURL( getURL() );
388cdf0e10cSrcweir }
389cdf0e10cSrcweir 
390cdf0e10cSrcweir // -------------------------------------------------------------------------
391cdf0e10cSrcweir 
executeMediaItem(const MediaItem & rItem)392cdf0e10cSrcweir void MediaWindowBaseImpl::executeMediaItem( const MediaItem& rItem )
393cdf0e10cSrcweir {
394cdf0e10cSrcweir     const sal_uInt32 nMaskSet = rItem.getMaskSet();
395cdf0e10cSrcweir 
396*97c864ccSmseidel     // set URL first
397cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_URL )
398cdf0e10cSrcweir         setURL( rItem.getURL() );
399*97c864ccSmseidel 
400cdf0e10cSrcweir     // set different states next
401cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_TIME )
402cdf0e10cSrcweir         setMediaTime( ::std::min( rItem.getTime(), getDuration() ) );
403*97c864ccSmseidel 
404cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_LOOP )
405cdf0e10cSrcweir         setPlaybackLoop( rItem.isLoop() );
406cdf0e10cSrcweir 
407cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_MUTE )
408cdf0e10cSrcweir         setMute( rItem.isMute() );
409*97c864ccSmseidel 
410cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB )
411cdf0e10cSrcweir         setVolumeDB( rItem.getVolumeDB() );
412cdf0e10cSrcweir 
413cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_ZOOM )
414cdf0e10cSrcweir         setZoom( rItem.getZoom() );
415*97c864ccSmseidel 
416cdf0e10cSrcweir     // set play state at last
417cdf0e10cSrcweir     if( nMaskSet & AVMEDIA_SETMASK_STATE )
418cdf0e10cSrcweir     {
419cdf0e10cSrcweir         switch( rItem.getState() )
420cdf0e10cSrcweir         {
421cdf0e10cSrcweir             case( MEDIASTATE_PLAY ):
422cdf0e10cSrcweir             case( MEDIASTATE_PLAYFFW ):
423cdf0e10cSrcweir             {
424*97c864ccSmseidel /*
425cdf0e10cSrcweir                 const double fNewRate = ( ( MEDIASTATE_PLAYFFW == rItem.getState() ) ? AVMEDIA_FFW_PLAYRATE : 1.0 );
426*97c864ccSmseidel 
427cdf0e10cSrcweir                 if( getRate() != fNewRate )
428cdf0e10cSrcweir                     setRate( fNewRate );
429cdf0e10cSrcweir */
430cdf0e10cSrcweir                 if( !isPlaying() )
431cdf0e10cSrcweir                     start();
432cdf0e10cSrcweir             }
433cdf0e10cSrcweir             break;
434cdf0e10cSrcweir 
435cdf0e10cSrcweir             case( MEDIASTATE_PAUSE ):
436cdf0e10cSrcweir             {
437cdf0e10cSrcweir                 if( isPlaying() )
438cdf0e10cSrcweir                     stop();
439cdf0e10cSrcweir             }
440cdf0e10cSrcweir             break;
441*97c864ccSmseidel 
442cdf0e10cSrcweir             case( MEDIASTATE_STOP ):
443cdf0e10cSrcweir             {
444cdf0e10cSrcweir                 if( isPlaying() )
445cdf0e10cSrcweir                 {
446cdf0e10cSrcweir                     setMediaTime( 0.0 );
447cdf0e10cSrcweir                     stop();
448cdf0e10cSrcweir                     setMediaTime( 0.0 );
449cdf0e10cSrcweir                 }
450cdf0e10cSrcweir             }
451cdf0e10cSrcweir             break;
452cdf0e10cSrcweir         }
453cdf0e10cSrcweir     }
454cdf0e10cSrcweir }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir } // namespace priv
457*97c864ccSmseidel } // namespace avmedia
458