From 4f36924fcb92e54019d96811efb01bc7c3f6881b Mon Sep 17 00:00:00 2001 From: Minh Ngo Date: Wed, 31 Jul 2013 09:18:36 +0300 Subject: Playback loop Change-Id: I18c544dadb553e7e173e9e377a337aa2b7eecb60 --- avmedia/source/vlc/vlcframegrabber.cxx | 4 ++-- avmedia/source/vlc/vlcplayer.cxx | 30 ++++++++++++++++++++++++++++-- avmedia/source/vlc/vlcplayer.hxx | 1 + 3 files changed, 31 insertions(+), 4 deletions(-) (limited to 'avmedia') diff --git a/avmedia/source/vlc/vlcframegrabber.cxx b/avmedia/source/vlc/vlcframegrabber.cxx index efabd3904e3c..4630f15c2f79 100644 --- a/avmedia/source/vlc/vlcframegrabber.cxx +++ b/avmedia/source/vlc/vlcframegrabber.cxx @@ -34,7 +34,7 @@ namespace { void EventHandler( const libvlc_event_t *evemt, void *pData ) { - switch (evemt->type) + switch ( evemt->type ) { case libvlc_MediaPlayerPaused: osl::Condition *condition = static_cast( pData ); @@ -53,7 +53,7 @@ namespace libvlc_event_attach( manager, libvlc_MediaPlayerPaused, EventHandler, &condition ); libvlc_audio_set_mute( player, true ); - if (libvlc_media_player_play( player ) == -1) + if ( libvlc_media_player_play( player ) == -1 ) { std::cerr << "Couldn't play" << std::endl; } diff --git a/avmedia/source/vlc/vlcplayer.cxx b/avmedia/source/vlc/vlcplayer.cxx index c4628edcfbd1..ca32ef81c356 100644 --- a/avmedia/source/vlc/vlcplayer.cxx +++ b/avmedia/source/vlc/vlcplayer.cxx @@ -42,6 +42,7 @@ VLCPlayer::VLCPlayer( const rtl::OUString& url ) , mMedia( InitMedia( url, mInstance ), libvlc_media_release ) , mPlayer( libvlc_media_player_new_from_media( mMedia.get() ), libvlc_media_player_release ) , mUrl( url ) + , mPlaybackLoop( false ) { } @@ -98,13 +99,38 @@ double SAL_CALL VLCPlayer::getRate() return libvlc_media_player_get_rate( mPlayer.get() ); } +namespace +{ + void EventHandler( const libvlc_event_t *evemt, void *pData ) + { + switch (evemt->type) + { + case libvlc_MediaPlayerEndReached: + boost::shared_ptr player = *static_cast< boost::shared_ptr* >( pData ); + libvlc_media_player_stop( player.get() ); + libvlc_media_player_play( player.get() ) + break; + } + } +} + void SAL_CALL VLCPlayer::setPlaybackLoop( ::sal_Bool bSet ) { + ::osl::MutexGuard aGuard(m_aMutex); + mPlaybackLoop = bSet; + + libvlc_event_manager_t *manager = libvlc_media_player_event_manager( mPlayer.get() ); + + if ( bSet ) + libvlc_event_attach( manager, libvlc_MediaPlayerEndReached, EventHandler, &mPlayer ); + else + libvlc_event_detach( manager, libvlc_MediaPlayerEndReached, EventHandler, &mPlayer ); } ::sal_Bool SAL_CALL VLCPlayer::isPlaybackLoop() { - return false; + ::osl::MutexGuard aGuard(m_aMutex); + return mPlaybackLoop; } void SAL_CALL VLCPlayer::setVolumeDB( ::sal_Int16 nDB ) @@ -210,4 +236,4 @@ uno::Reference< css::media::XFrameGrabber > SAL_CALL VLCPlayer::createFrameGrabb } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/avmedia/source/vlc/vlcplayer.hxx b/avmedia/source/vlc/vlcplayer.hxx index 81136025e530..acdee37494fb 100644 --- a/avmedia/source/vlc/vlcplayer.hxx +++ b/avmedia/source/vlc/vlcplayer.hxx @@ -41,6 +41,7 @@ class VLCPlayer : public ::cppu::BaseMutex, boost::shared_ptr mMedia; boost::shared_ptr mPlayer; const rtl::OUString mUrl; + bool mPlaybackLoop; public: VLCPlayer( const rtl::OUString& url ); -- cgit v1.2.3