1f39251c4SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
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
10cdf0e10cSrcweir *
11f39251c4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
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.
19cdf0e10cSrcweir *
20f39251c4SAndrew Rist *************************************************************/
21f39251c4SAndrew Rist
22f39251c4SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "mediawindowbase_impl.hxx"
25cdf0e10cSrcweir #include <avmedia/mediaitem.hxx>
26cdf0e10cSrcweir #include "mediamisc.hxx"
27cdf0e10cSrcweir #include "mediawindow.hrc"
28cdf0e10cSrcweir #include <tools/urlobj.hxx>
29cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30*46880872SDamjan Jovanovic #include <com/sun/star/lang/XMultiComponentFactory.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 {
65*46880872SDamjan Jovanovic uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
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 {
72*46880872SDamjan Jovanovic uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
73cdf0e10cSrcweir uno::Reference< media::XPlayer > xPlayer;
74cdf0e10cSrcweir
75cdf0e10cSrcweir rbJavaBased = sal_False;
76cdf0e10cSrcweir
77*46880872SDamjan Jovanovic if( xContext.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
85*46880872SDamjan Jovanovic uno::Reference< lang::XMultiComponentFactory > xFactory = xContext->getServiceManager();
86cdf0e10cSrcweir for( sal_uInt32 i = 0; !xPlayer.is() && ( i < ( sizeof( aServiceManagers ) / sizeof( ServiceManager ) ) ); ++i )
87cdf0e10cSrcweir {
88cdf0e10cSrcweir const String aServiceName( aServiceManagers[ i ].pServiceName, RTL_TEXTENCODING_ASCII_US );
89cdf0e10cSrcweir
90cdf0e10cSrcweir if( aServiceName.Len() )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir OSL_TRACE( "Trying to create media manager service %s", aServiceManagers[ i ].pServiceName );
93cdf0e10cSrcweir
94cdf0e10cSrcweir try
95cdf0e10cSrcweir {
96*46880872SDamjan Jovanovic uno::Reference< media::XManager > xManager( xFactory->createInstanceWithContext( aServiceName, xContext ), uno::UNO_QUERY );
97cdf0e10cSrcweir
98cdf0e10cSrcweir if( xManager.is() )
99cdf0e10cSrcweir {
100cdf0e10cSrcweir xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY );
101cdf0e10cSrcweir }
102cdf0e10cSrcweir }
103cdf0e10cSrcweir catch( ... )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir }
106cdf0e10cSrcweir }
107cdf0e10cSrcweir
108cdf0e10cSrcweir if( xPlayer.is() )
109cdf0e10cSrcweir {
110cdf0e10cSrcweir rbJavaBased = aServiceManagers[ i ].bIsJavaBased;
111cdf0e10cSrcweir }
112cdf0e10cSrcweir }
113cdf0e10cSrcweir }
114cdf0e10cSrcweir
115cdf0e10cSrcweir return xPlayer;
116cdf0e10cSrcweir }
117cdf0e10cSrcweir
118cdf0e10cSrcweir // ---------------------------------------------------------------------
119cdf0e10cSrcweir
setURL(const::rtl::OUString & rURL)120cdf0e10cSrcweir void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir if( rURL != getURL() )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir INetURLObject aURL( maFileURL = rURL );
125cdf0e10cSrcweir
126cdf0e10cSrcweir if( mxPlayer.is() )
127cdf0e10cSrcweir mxPlayer->stop();
128cdf0e10cSrcweir
129cdf0e10cSrcweir if( mxPlayerWindow.is() )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir mxPlayerWindow->setVisible( false );
132cdf0e10cSrcweir mxPlayerWindow.clear();
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
135cdf0e10cSrcweir mxPlayer.clear();
136cdf0e10cSrcweir
137cdf0e10cSrcweir if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
138cdf0e10cSrcweir maFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
139cdf0e10cSrcweir
140cdf0e10cSrcweir mxPlayer = createPlayer( maFileURL, mbIsMediaWindowJavaBased );
141cdf0e10cSrcweir onURLChanged();
142cdf0e10cSrcweir }
143cdf0e10cSrcweir }
144cdf0e10cSrcweir
145cdf0e10cSrcweir // ---------------------------------------------------------------------
146cdf0e10cSrcweir
onURLChanged()147cdf0e10cSrcweir void MediaWindowBaseImpl::onURLChanged()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir }
150cdf0e10cSrcweir
151cdf0e10cSrcweir // ---------------------------------------------------------------------
152cdf0e10cSrcweir
getURL() const153cdf0e10cSrcweir const ::rtl::OUString& MediaWindowBaseImpl::getURL() const
154cdf0e10cSrcweir {
155cdf0e10cSrcweir return maFileURL;
156cdf0e10cSrcweir }
157cdf0e10cSrcweir
158cdf0e10cSrcweir // ---------------------------------------------------------------------
159cdf0e10cSrcweir
isValid() const160cdf0e10cSrcweir bool MediaWindowBaseImpl::isValid() const
161cdf0e10cSrcweir {
162cdf0e10cSrcweir return( getPlayer().is() );
163cdf0e10cSrcweir }
164cdf0e10cSrcweir
165cdf0e10cSrcweir // ---------------------------------------------------------------------
166cdf0e10cSrcweir
stopPlayingInternal(bool bStop)167cdf0e10cSrcweir void MediaWindowBaseImpl::stopPlayingInternal( bool bStop )
168cdf0e10cSrcweir {
169cdf0e10cSrcweir if( isPlaying() )
170cdf0e10cSrcweir {
171cdf0e10cSrcweir bStop ? mxPlayer->stop() : mxPlayer->start();
172cdf0e10cSrcweir }
173cdf0e10cSrcweir }
174cdf0e10cSrcweir
175cdf0e10cSrcweir // ---------------------------------------------------------------------
176cdf0e10cSrcweir
getMediaWindow() const177cdf0e10cSrcweir MediaWindow* MediaWindowBaseImpl::getMediaWindow() const
178cdf0e10cSrcweir {
179cdf0e10cSrcweir return mpMediaWindow;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir
182cdf0e10cSrcweir // ---------------------------------------------------------------------
183cdf0e10cSrcweir
getPlayer() const184cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindowBaseImpl::getPlayer() const
185cdf0e10cSrcweir {
186cdf0e10cSrcweir return mxPlayer;
187cdf0e10cSrcweir }
188cdf0e10cSrcweir
189cdf0e10cSrcweir // ---------------------------------------------------------------------
190cdf0e10cSrcweir
getPlayerWindow() const191cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > MediaWindowBaseImpl::getPlayerWindow() const
192cdf0e10cSrcweir {
193cdf0e10cSrcweir return mxPlayerWindow;
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
196cdf0e10cSrcweir // ---------------------------------------------------------------------
197cdf0e10cSrcweir
setPlayerWindow(const uno::Reference<media::XPlayerWindow> & rxPlayerWindow)198cdf0e10cSrcweir void MediaWindowBaseImpl::setPlayerWindow( const uno::Reference< media::XPlayerWindow >& rxPlayerWindow )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir mxPlayerWindow = rxPlayerWindow;
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
203cdf0e10cSrcweir // ---------------------------------------------------------------------
204cdf0e10cSrcweir
cleanUp()205cdf0e10cSrcweir void MediaWindowBaseImpl::cleanUp()
206cdf0e10cSrcweir {
207cdf0e10cSrcweir uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY );
208cdf0e10cSrcweir if( xComponent.is() ) // this stops the player
209cdf0e10cSrcweir xComponent->dispose();
210cdf0e10cSrcweir
211cdf0e10cSrcweir mxPlayer.clear();
212cdf0e10cSrcweir
213cdf0e10cSrcweir mpMediaWindow = NULL;
214cdf0e10cSrcweir }
215cdf0e10cSrcweir
216cdf0e10cSrcweir // ---------------------------------------------------------------------
217cdf0e10cSrcweir
hasPreferredSize() const218cdf0e10cSrcweir bool MediaWindowBaseImpl::hasPreferredSize() const
219cdf0e10cSrcweir {
220cdf0e10cSrcweir return( mxPlayerWindow.is() );
221cdf0e10cSrcweir }
222cdf0e10cSrcweir
223cdf0e10cSrcweir // ---------------------------------------------------------------------
224cdf0e10cSrcweir
getPreferredSize() const225cdf0e10cSrcweir Size MediaWindowBaseImpl::getPreferredSize() const
226cdf0e10cSrcweir {
227cdf0e10cSrcweir Size aRet;
228cdf0e10cSrcweir
229cdf0e10cSrcweir if( mxPlayer.is() )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() );
232cdf0e10cSrcweir
233cdf0e10cSrcweir aRet.Width() = aPrefSize.Width;
234cdf0e10cSrcweir aRet.Height() = aPrefSize.Height;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir
237cdf0e10cSrcweir return aRet;
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
240cdf0e10cSrcweir // ---------------------------------------------------------------------
241cdf0e10cSrcweir
setZoom(::com::sun::star::media::ZoomLevel eLevel)242cdf0e10cSrcweir bool MediaWindowBaseImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
243cdf0e10cSrcweir {
244cdf0e10cSrcweir return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false );
245cdf0e10cSrcweir }
246cdf0e10cSrcweir
247cdf0e10cSrcweir // -------------------------------------------------------------------------
248cdf0e10cSrcweir
getZoom() const249cdf0e10cSrcweir ::com::sun::star::media::ZoomLevel MediaWindowBaseImpl::getZoom() const
250cdf0e10cSrcweir {
251cdf0e10cSrcweir return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
254cdf0e10cSrcweir // ---------------------------------------------------------------------
255cdf0e10cSrcweir
start()256cdf0e10cSrcweir bool MediaWindowBaseImpl::start()
257cdf0e10cSrcweir {
258cdf0e10cSrcweir return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false );
259cdf0e10cSrcweir }
260cdf0e10cSrcweir
261cdf0e10cSrcweir // ---------------------------------------------------------------------
262cdf0e10cSrcweir
stop()263cdf0e10cSrcweir void MediaWindowBaseImpl::stop()
264cdf0e10cSrcweir {
265cdf0e10cSrcweir if( mxPlayer.is() )
266cdf0e10cSrcweir mxPlayer->stop();
267cdf0e10cSrcweir }
268cdf0e10cSrcweir
269cdf0e10cSrcweir // ---------------------------------------------------------------------
270cdf0e10cSrcweir
isPlaying() const271cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaying() const
272cdf0e10cSrcweir {
273cdf0e10cSrcweir return( mxPlayer.is() && mxPlayer->isPlaying() );
274cdf0e10cSrcweir }
275cdf0e10cSrcweir
276cdf0e10cSrcweir // ---------------------------------------------------------------------
277cdf0e10cSrcweir
getDuration() const278cdf0e10cSrcweir double MediaWindowBaseImpl::getDuration() const
279cdf0e10cSrcweir {
280cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 );
281cdf0e10cSrcweir }
282cdf0e10cSrcweir
283cdf0e10cSrcweir // ---------------------------------------------------------------------
284cdf0e10cSrcweir
setMediaTime(double fTime)285cdf0e10cSrcweir void MediaWindowBaseImpl::setMediaTime( double fTime )
286cdf0e10cSrcweir {
287cdf0e10cSrcweir if( mxPlayer.is() )
288cdf0e10cSrcweir mxPlayer->setMediaTime( fTime );
289cdf0e10cSrcweir }
290cdf0e10cSrcweir
291cdf0e10cSrcweir // ---------------------------------------------------------------------
292cdf0e10cSrcweir
getMediaTime() const293cdf0e10cSrcweir double MediaWindowBaseImpl::getMediaTime() const
294cdf0e10cSrcweir {
295cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 );
296cdf0e10cSrcweir }
297cdf0e10cSrcweir
298cdf0e10cSrcweir // ---------------------------------------------------------------------
299cdf0e10cSrcweir
setStopTime(double fTime)300cdf0e10cSrcweir void MediaWindowBaseImpl::setStopTime( double fTime )
301cdf0e10cSrcweir {
302cdf0e10cSrcweir if( mxPlayer.is() )
303cdf0e10cSrcweir mxPlayer->setStopTime( fTime );
304cdf0e10cSrcweir }
305cdf0e10cSrcweir
306cdf0e10cSrcweir // ---------------------------------------------------------------------
307cdf0e10cSrcweir
getStopTime() const308cdf0e10cSrcweir double MediaWindowBaseImpl::getStopTime() const
309cdf0e10cSrcweir {
310cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getStopTime() : 0.0 );
311cdf0e10cSrcweir }
312cdf0e10cSrcweir
313cdf0e10cSrcweir // ---------------------------------------------------------------------
314cdf0e10cSrcweir
setRate(double fRate)315cdf0e10cSrcweir void MediaWindowBaseImpl::setRate( double fRate )
316cdf0e10cSrcweir {
317cdf0e10cSrcweir if( mxPlayer.is() )
318cdf0e10cSrcweir mxPlayer->setRate( fRate );
319cdf0e10cSrcweir }
320cdf0e10cSrcweir
321cdf0e10cSrcweir // ---------------------------------------------------------------------
322cdf0e10cSrcweir
getRate() const323cdf0e10cSrcweir double MediaWindowBaseImpl::getRate() const
324cdf0e10cSrcweir {
325cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 );
326cdf0e10cSrcweir }
327cdf0e10cSrcweir
328cdf0e10cSrcweir // ---------------------------------------------------------------------
329cdf0e10cSrcweir
setPlaybackLoop(bool bSet)330cdf0e10cSrcweir void MediaWindowBaseImpl::setPlaybackLoop( bool bSet )
331cdf0e10cSrcweir {
332cdf0e10cSrcweir if( mxPlayer.is() )
333cdf0e10cSrcweir mxPlayer->setPlaybackLoop( bSet );
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
336cdf0e10cSrcweir // ---------------------------------------------------------------------
337cdf0e10cSrcweir
isPlaybackLoop() const338cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaybackLoop() const
339cdf0e10cSrcweir {
340cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false );
341cdf0e10cSrcweir }
342cdf0e10cSrcweir
343cdf0e10cSrcweir // ---------------------------------------------------------------------
344cdf0e10cSrcweir
setMute(bool bSet)345cdf0e10cSrcweir void MediaWindowBaseImpl::setMute( bool bSet )
346cdf0e10cSrcweir {
347cdf0e10cSrcweir if( mxPlayer.is() )
348cdf0e10cSrcweir mxPlayer->setMute( bSet );
349cdf0e10cSrcweir }
350cdf0e10cSrcweir
351cdf0e10cSrcweir // ---------------------------------------------------------------------
352cdf0e10cSrcweir
isMute() const353cdf0e10cSrcweir bool MediaWindowBaseImpl::isMute() const
354cdf0e10cSrcweir {
355cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->isMute() : false );
356cdf0e10cSrcweir }
357cdf0e10cSrcweir
358cdf0e10cSrcweir // ---------------------------------------------------------------------
359cdf0e10cSrcweir
setVolumeDB(sal_Int16 nVolumeDB)360cdf0e10cSrcweir void MediaWindowBaseImpl::setVolumeDB( sal_Int16 nVolumeDB )
361cdf0e10cSrcweir {
362cdf0e10cSrcweir if( mxPlayer.is() )
363cdf0e10cSrcweir mxPlayer->setVolumeDB( nVolumeDB );
364cdf0e10cSrcweir }
365cdf0e10cSrcweir
366cdf0e10cSrcweir // ---------------------------------------------------------------------
367cdf0e10cSrcweir
getVolumeDB() const368cdf0e10cSrcweir sal_Int16 MediaWindowBaseImpl::getVolumeDB() const
369cdf0e10cSrcweir {
370cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 );
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir // -------------------------------------------------------------------------
374cdf0e10cSrcweir
updateMediaItem(MediaItem & rItem) const375cdf0e10cSrcweir void MediaWindowBaseImpl::updateMediaItem( MediaItem& rItem ) const
376cdf0e10cSrcweir {
377cdf0e10cSrcweir if( isPlaying() )
378cdf0e10cSrcweir rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
379cdf0e10cSrcweir else
380cdf0e10cSrcweir rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE );
381cdf0e10cSrcweir
382cdf0e10cSrcweir rItem.setDuration( getDuration() );
383cdf0e10cSrcweir rItem.setTime( getMediaTime() );
384cdf0e10cSrcweir rItem.setLoop( isPlaybackLoop() );
385cdf0e10cSrcweir rItem.setMute( isMute() );
386cdf0e10cSrcweir rItem.setVolumeDB( getVolumeDB() );
387cdf0e10cSrcweir rItem.setZoom( getZoom() );
388cdf0e10cSrcweir rItem.setURL( getURL() );
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
391cdf0e10cSrcweir // -------------------------------------------------------------------------
392cdf0e10cSrcweir
executeMediaItem(const MediaItem & rItem)393cdf0e10cSrcweir void MediaWindowBaseImpl::executeMediaItem( const MediaItem& rItem )
394cdf0e10cSrcweir {
395cdf0e10cSrcweir const sal_uInt32 nMaskSet = rItem.getMaskSet();
396cdf0e10cSrcweir
397cdf0e10cSrcweir // set URL first
398cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_URL )
399cdf0e10cSrcweir setURL( rItem.getURL() );
400cdf0e10cSrcweir
401cdf0e10cSrcweir // set different states next
402cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_TIME )
403cdf0e10cSrcweir setMediaTime( ::std::min( rItem.getTime(), getDuration() ) );
404cdf0e10cSrcweir
405cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_LOOP )
406cdf0e10cSrcweir setPlaybackLoop( rItem.isLoop() );
407cdf0e10cSrcweir
408cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_MUTE )
409cdf0e10cSrcweir setMute( rItem.isMute() );
410cdf0e10cSrcweir
411cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB )
412cdf0e10cSrcweir setVolumeDB( rItem.getVolumeDB() );
413cdf0e10cSrcweir
414cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_ZOOM )
415cdf0e10cSrcweir setZoom( rItem.getZoom() );
416cdf0e10cSrcweir
417cdf0e10cSrcweir // set play state at last
418cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_STATE )
419cdf0e10cSrcweir {
420cdf0e10cSrcweir switch( rItem.getState() )
421cdf0e10cSrcweir {
422cdf0e10cSrcweir case( MEDIASTATE_PLAY ):
423cdf0e10cSrcweir case( MEDIASTATE_PLAYFFW ):
424cdf0e10cSrcweir {
425cdf0e10cSrcweir /*
426cdf0e10cSrcweir const double fNewRate = ( ( MEDIASTATE_PLAYFFW == rItem.getState() ) ? AVMEDIA_FFW_PLAYRATE : 1.0 );
427cdf0e10cSrcweir
428cdf0e10cSrcweir if( getRate() != fNewRate )
429cdf0e10cSrcweir setRate( fNewRate );
430cdf0e10cSrcweir */
431cdf0e10cSrcweir if( !isPlaying() )
432cdf0e10cSrcweir start();
433cdf0e10cSrcweir }
434cdf0e10cSrcweir break;
435cdf0e10cSrcweir
436cdf0e10cSrcweir case( MEDIASTATE_PAUSE ):
437cdf0e10cSrcweir {
438cdf0e10cSrcweir if( isPlaying() )
439cdf0e10cSrcweir stop();
440cdf0e10cSrcweir }
441cdf0e10cSrcweir break;
442cdf0e10cSrcweir
443cdf0e10cSrcweir case( MEDIASTATE_STOP ):
444cdf0e10cSrcweir {
445cdf0e10cSrcweir if( isPlaying() )
446cdf0e10cSrcweir {
447cdf0e10cSrcweir setMediaTime( 0.0 );
448cdf0e10cSrcweir stop();
449cdf0e10cSrcweir setMediaTime( 0.0 );
450cdf0e10cSrcweir }
451cdf0e10cSrcweir }
452cdf0e10cSrcweir break;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir }
455cdf0e10cSrcweir }
456cdf0e10cSrcweir
457cdf0e10cSrcweir } // namespace priv
45897c864ccSmseidel } // namespace avmedia
459