[vlc-devel] commit: macosx/framework: Handle media changed events. (Pierre d'Herbemont )

git version control git at videolan.org
Wed Dec 23 17:21:02 CET 2009


vlc | branch: master | Pierre d'Herbemont <pdherbemont at free.fr> | Tue Dec 22 20:50:14 2009 +0100| [549b9331e876edcbaf91b75a4388cd4054b8f011] | committer: Pierre d'Herbemont 

macosx/framework: Handle media changed events.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=549b9331e876edcbaf91b75a4388cd4054b8f011
---

 projects/macosx/framework/Sources/VLCMediaPlayer.m |   36 +++++++++++++++++---
 1 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/projects/macosx/framework/Sources/VLCMediaPlayer.m b/projects/macosx/framework/Sources/VLCMediaPlayer.m
index e66efe1..d94ef56 100644
--- a/projects/macosx/framework/Sources/VLCMediaPlayer.m
+++ b/projects/macosx/framework/Sources/VLCMediaPlayer.m
@@ -95,7 +95,7 @@ static void HandleMediaPositionChanged(const libvlc_event_t * event, void * self
 static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void * self)
 {
     VLCMediaPlayerState newState;
-
+    
     if( event->type == libvlc_MediaPlayerPlaying )
         newState = VLCMediaPlayerStatePlaying;
     else if( event->type == libvlc_MediaPlayerPaused )
@@ -109,19 +109,31 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
         NSLog(@"%s: Unknown event", __FUNCTION__);
         return;
     }
-
+    
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-
+    
     [[VLCEventManager sharedManager] callOnMainThreadObject:self 
                                                  withMethod:@selector(mediaPlayerStateChanged:) 
                                        withArgumentAsObject:[NSNumber numberWithInt:newState]];
-
+    
     [[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self
                                                    withDelegateMethod:@selector(mediaPlayerStateChanged:)
                                                  withNotificationName:VLCMediaPlayerStateChanged];
-
+    
     [pool release];
+    
+}
 
+static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * self)
+{
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    
+    [[VLCEventManager sharedManager] callOnMainThreadObject:self 
+                                                 withMethod:@selector(mediaPlayerMediaChanged:) 
+                                       withArgumentAsObject:[VLCMedia mediaWithLibVLCMediaDescriptor:event->u.media_player_media_changed.new_media]];
+        
+    [pool release];
+    
 }
 
 
@@ -134,6 +146,7 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
 - (void)mediaPlayerTimeChanged:(NSNumber *)newTime;
 - (void)mediaPlayerPositionChanged:(NSNumber *)newTime;
 - (void)mediaPlayerStateChanged:(NSNumber *)newState;
+- (void)mediaPlayerMediaChanged:(VLCMedia *)media;
 @end
 
 @implementation VLCMediaPlayer
@@ -894,6 +907,7 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
     /* FIXME: We may want to turn that off when none is interested by that */
     libvlc_event_attach( p_em, libvlc_MediaPlayerPositionChanged, HandleMediaPositionChanged,      self, &ex );
     libvlc_event_attach( p_em, libvlc_MediaPlayerTimeChanged,     HandleMediaTimeChanged,          self, &ex );
+    libvlc_event_attach( p_em, libvlc_MediaPlayerMediaChanged,     HandleMediaPlayerMediaChanged,  self, &ex );
     catch_exception( &ex );
 }
 
@@ -906,6 +920,7 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
     libvlc_event_detach( p_em, libvlc_MediaPlayerEndReached,       HandleMediaInstanceStateChanged, self, NULL );
     libvlc_event_detach( p_em, libvlc_MediaPlayerPositionChanged,  HandleMediaPositionChanged,      self, NULL );
     libvlc_event_detach( p_em, libvlc_MediaPlayerTimeChanged,      HandleMediaTimeChanged,          self, NULL );
+    libvlc_event_attach( p_em, libvlc_MediaPlayerMediaChanged,     HandleMediaPlayerMediaChanged,   self, NULL );
 }
 
 - (void)mediaPlayerTimeChanged:(NSNumber *)newTime
@@ -941,4 +956,15 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
     [self didChangeValueForKey:@"state"];
 }
 
+- (void)mediaPlayerMediaChanged:(VLCMedia *)newMedia
+{
+    [self willChangeValueForKey:@"media"];
+    if (media != newMedia)
+    {
+        [media release];
+        media = [newMedia retain];
+    }
+    [self didChangeValueForKey:@"media"];
+}
+
 @end




More information about the vlc-devel mailing list