[Libreoffice-commits] core.git: Branch 'feature/vlc' - avmedia/source

Minh Ngo nlminhtl at gmail.com
Fri Aug 2 02:25:02 PDT 2013


 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 <nlminhtl at 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 );
 


More information about the Libreoffice-commits mailing list