From 23c70ac84c28b59606d4078fd4422412f6b0cc81 Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Fri, 29 Jan 2010 01:44:38 +0100 Subject: [PATCH] macosx/framework: Sync the extension's input to their MediaPlayer's input. --- .../framework/Headers/Public/VLCExtension.h | 1 + .../Headers/Public/VLCExtensionsManager.h | 3 ++ .../macosx/framework/Sources/VLCExtension.m | 1 - .../framework/Sources/VLCExtensionsManager.m | 40 ++++++++++++++++--- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/projects/macosx/framework/Headers/Public/VLCExtension.h b/projects/macosx/framework/Headers/Public/VLCExtension.h index 2a0921914c..5011792dfe 100644 --- a/projects/macosx/framework/Headers/Public/VLCExtension.h +++ b/projects/macosx/framework/Headers/Public/VLCExtension.h @@ -18,4 +18,5 @@ - (NSString *)name; - (NSString *)title; + @end diff --git a/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h b/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h index ca89a36fbb..dee0fb90f4 100644 --- a/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h +++ b/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h @@ -9,9 +9,12 @@ #import @class VLCExtension; +@class VLCMediaPlayer; @interface VLCExtensionsManager : NSObject { void *instance; + NSMutableArray *_extensions; + VLCMediaPlayer *_player; } + (VLCExtensionsManager *)sharedManager; - (NSArray *)extensions; diff --git a/projects/macosx/framework/Sources/VLCExtension.m b/projects/macosx/framework/Sources/VLCExtension.m index 52e19c18f8..843dabd864 100644 --- a/projects/macosx/framework/Sources/VLCExtension.m +++ b/projects/macosx/framework/Sources/VLCExtension.m @@ -39,5 +39,4 @@ return [NSString stringWithUTF8String:_instance->psz_title]; } - @end diff --git a/projects/macosx/framework/Sources/VLCExtensionsManager.m b/projects/macosx/framework/Sources/VLCExtensionsManager.m index 11c18b9258..e202536b73 100644 --- a/projects/macosx/framework/Sources/VLCExtensionsManager.m +++ b/projects/macosx/framework/Sources/VLCExtensionsManager.m @@ -11,6 +11,7 @@ #import "VLCLibrary.h" #import "VLCLibVLCBridging.h" #import +#import #define _instance ((extensions_manager_t *)instance) @@ -34,6 +35,9 @@ static VLCExtensionsManager *sharedManager = nil; module_unneed(_instance, _instance->p_module); vlc_object_release(_instance); + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_extensions release]; [super dealloc]; } @@ -56,21 +60,21 @@ static VLCExtensionsManager *sharedManager = nil; vlc_object_release(libvlc); } - NSMutableArray *array = [NSMutableArray array]; + if (_extensions) + return _extensions; + _extensions = [[NSMutableArray alloc] init]; extension_t *ext; FOREACH_ARRAY(ext, _instance->extensions) VLCExtension *extension = [[VLCExtension alloc] initWithInstance:ext]; - [array addObject:extension]; + [_extensions addObject:extension]; [extension release]; FOREACH_END() - return array; + return _extensions; } - (void)runExtension:(VLCExtension *)extension { extension_t *ext = [extension instance]; - NSLog(@"extension_TriggerOnly = %d", extension_TriggerOnly(_instance, ext)); - NSLog(@"extension_IsActivated = %d", extension_IsActivated(_instance, ext)); if(extension_TriggerOnly(_instance, ext)) extension_Trigger(_instance, ext); @@ -80,4 +84,30 @@ static VLCExtensionsManager *sharedManager = nil; extension_Activate(_instance, ext); } } + +- (void)mediaPlayerLikelyChangedInput +{ + input_thread_t *input = _player ? libvlc_media_player_get_input_thread([_player libVLCMediaPlayer]) : NULL; + for(VLCExtension *extension in _extensions) + extension_SetInput(_instance, [extension instance], input); + if (input) + vlc_object_release(input); +} + +- (void)setMediaPlayer:(VLCMediaPlayer *)player +{ + if (_player == player) + return; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center removeObserver:self name:VLCMediaPlayerStateChanged object:_player]; + + [_player release]; + _player = [player retain]; + + [self mediaPlayerLikelyChangedInput]; + + + if (player) + [center addObserver:self selector:@selector(mediaPlayerLikelyChangedInput) name:VLCMediaPlayerStateChanged object:_player]; +} @end -- 2.39.5