summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorMinh Ngo <nlminhtl@gmail.com>2013-07-31 09:18:36 +0300
committerMichael Meeks <michael.meeks@suse.com>2013-08-21 10:54:50 +0100
commit4f36924fcb92e54019d96811efb01bc7c3f6881b (patch)
treebd079ebb4f4016c8649c371b90c2ecd5053d07a2 /avmedia
parent2a6b3cb7616abd80ed59304facde14a23387dd1d (diff)
Playback loop
Change-Id: I18c544dadb553e7e173e9e377a337aa2b7eecb60
Diffstat (limited to 'avmedia')
-rw-r--r--avmedia/source/vlc/vlcframegrabber.cxx4
-rw-r--r--avmedia/source/vlc/vlcplayer.cxx30
-rw-r--r--avmedia/source/vlc/vlcplayer.hxx1
3 files changed, 31 insertions, 4 deletions
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<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 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<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 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<libvlc_media_t> mMedia;
boost::shared_ptr<libvlc_media_player_t> mPlayer;
const rtl::OUString mUrl;
+ bool mPlaybackLoop;
public:
VLCPlayer( const rtl::OUString& url );