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(-)
New commits: commit 4580191af3dfbe5562c6d5912991e48ac1c4e230 Author: Minh Ngo <nlmin...@gmail.com> Date: Wed Jul 31 09:18:36 2013 +0300 Playback loop Change-Id: I18c544dadb553e7e173e9e377a337aa2b7eecb60 diff --git a/avmedia/source/vlc/vlcframegrabber.cxx b/avmedia/source/vlc/vlcframegrabber.cxx index efabd39..4630f15 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<osl::Condition*>( 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 c4628ed..ca32ef8 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<libvlc_media_player_t> player = *static_cast< boost::shared_ptr<libvlc_media_player_t>* >( 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 8113602..acdee37 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<libvlc_media_t> mMedia; boost::shared_ptr<libvlc_media_player_t> mPlayer; const rtl::OUString mUrl; + bool mPlaybackLoop; public: VLCPlayer( const rtl::OUString& url ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits