]> git.sesse.net Git - vlc/commitdiff
macosx/framework: Sync the extension's input to their MediaPlayer's input.
authorPierre d'Herbemont <pdherbemont@free.fr>
Fri, 29 Jan 2010 00:44:38 +0000 (01:44 +0100)
committerPierre d'Herbemont <pdherbemont@free.fr>
Fri, 29 Jan 2010 10:49:25 +0000 (11:49 +0100)
projects/macosx/framework/Headers/Public/VLCExtension.h
projects/macosx/framework/Headers/Public/VLCExtensionsManager.h
projects/macosx/framework/Sources/VLCExtension.m
projects/macosx/framework/Sources/VLCExtensionsManager.m

index 2a0921914c7bc50b82310386162447e4ae77cdd8..5011792dfe7a63f6755db6db0a9cda7b0011032d 100644 (file)
@@ -18,4 +18,5 @@
 
 - (NSString *)name;
 - (NSString *)title;
+
 @end
index ca89a36fbbe91ad90ff96197d69d5fd66bc776b9..dee0fb90f4e75a882d4722569e83a6f9a3633c5f 100644 (file)
@@ -9,9 +9,12 @@
 #import <Cocoa/Cocoa.h>
 
 @class VLCExtension;
+@class VLCMediaPlayer;
 
 @interface VLCExtensionsManager : NSObject {
     void *instance;
+    NSMutableArray *_extensions;
+    VLCMediaPlayer *_player;
 }
 + (VLCExtensionsManager *)sharedManager;
 - (NSArray *)extensions;
index 52e19c18f84fffa33b479950ec20d7c742718b1a..843dabd8643a0ac379afdbc008040e2f3899a6a3 100644 (file)
@@ -39,5 +39,4 @@
     return [NSString stringWithUTF8String:_instance->psz_title];
 }
 
-
 @end
index 11c18b9258252f9a67e919c4412c8922312622c8..e202536b7309cb811dc4a4b45b2aa2b33f16c18e 100644 (file)
@@ -11,6 +11,7 @@
 #import "VLCLibrary.h"
 #import "VLCLibVLCBridging.h"
 #import <vlc_extensions.h>
+#import <vlc_input.h>
 
 #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