Commit 549b9331 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

macosx/framework: Handle media changed events.

parent 5871680a
...@@ -95,7 +95,7 @@ static void HandleMediaPositionChanged(const libvlc_event_t * event, void * self ...@@ -95,7 +95,7 @@ static void HandleMediaPositionChanged(const libvlc_event_t * event, void * self
static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void * self) static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void * self)
{ {
VLCMediaPlayerState newState; VLCMediaPlayerState newState;
if( event->type == libvlc_MediaPlayerPlaying ) if( event->type == libvlc_MediaPlayerPlaying )
newState = VLCMediaPlayerStatePlaying; newState = VLCMediaPlayerStatePlaying;
else if( event->type == libvlc_MediaPlayerPaused ) else if( event->type == libvlc_MediaPlayerPaused )
...@@ -109,19 +109,31 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void * ...@@ -109,19 +109,31 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
NSLog(@"%s: Unknown event", __FUNCTION__); NSLog(@"%s: Unknown event", __FUNCTION__);
return; return;
} }
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[VLCEventManager sharedManager] callOnMainThreadObject:self [[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(mediaPlayerStateChanged:) withMethod:@selector(mediaPlayerStateChanged:)
withArgumentAsObject:[NSNumber numberWithInt:newState]]; withArgumentAsObject:[NSNumber numberWithInt:newState]];
[[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self [[VLCEventManager sharedManager] callOnMainThreadDelegateOfObject:self
withDelegateMethod:@selector(mediaPlayerStateChanged:) withDelegateMethod:@selector(mediaPlayerStateChanged:)
withNotificationName:VLCMediaPlayerStateChanged]; withNotificationName:VLCMediaPlayerStateChanged];
[pool release]; [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 * ...@@ -134,6 +146,7 @@ static void HandleMediaInstanceStateChanged(const libvlc_event_t * event, void *
- (void)mediaPlayerTimeChanged:(NSNumber *)newTime; - (void)mediaPlayerTimeChanged:(NSNumber *)newTime;
- (void)mediaPlayerPositionChanged:(NSNumber *)newTime; - (void)mediaPlayerPositionChanged:(NSNumber *)newTime;
- (void)mediaPlayerStateChanged:(NSNumber *)newState; - (void)mediaPlayerStateChanged:(NSNumber *)newState;
- (void)mediaPlayerMediaChanged:(VLCMedia *)media;
@end @end
@implementation VLCMediaPlayer @implementation VLCMediaPlayer
...@@ -894,6 +907,7 @@ static const VLCMediaPlayerState libvlc_to_local_state[] = ...@@ -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 */ /* 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_MediaPlayerPositionChanged, HandleMediaPositionChanged, self, &ex );
libvlc_event_attach( p_em, libvlc_MediaPlayerTimeChanged, HandleMediaTimeChanged, 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 ); catch_exception( &ex );
} }
...@@ -906,6 +920,7 @@ static const VLCMediaPlayerState libvlc_to_local_state[] = ...@@ -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_MediaPlayerEndReached, HandleMediaInstanceStateChanged, self, NULL );
libvlc_event_detach( p_em, libvlc_MediaPlayerPositionChanged, HandleMediaPositionChanged, self, NULL ); libvlc_event_detach( p_em, libvlc_MediaPlayerPositionChanged, HandleMediaPositionChanged, self, NULL );
libvlc_event_detach( p_em, libvlc_MediaPlayerTimeChanged, HandleMediaTimeChanged, 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 - (void)mediaPlayerTimeChanged:(NSNumber *)newTime
...@@ -941,4 +956,15 @@ static const VLCMediaPlayerState libvlc_to_local_state[] = ...@@ -941,4 +956,15 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
[self didChangeValueForKey:@"state"]; [self didChangeValueForKey:@"state"];
} }
- (void)mediaPlayerMediaChanged:(VLCMedia *)newMedia
{
[self willChangeValueForKey:@"media"];
if (media != newMedia)
{
[media release];
media = [newMedia retain];
}
[self didChangeValueForKey:@"media"];
}
@end @end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment