[vlc-devel] commit: macosx/framework: Sync the extension's input to their MediaPlayer' s input. (Pierre d'Herbemont )
git version control
git at videolan.org
Fri Jan 29 11:49:35 CET 2010
vlc | branch: master | Pierre d'Herbemont <pdherbemont at free.fr> | Fri Jan 29 01:44:38 2010 +0100| [23c70ac84c28b59606d4078fd4422412f6b0cc81] | committer: Pierre d'Herbemont
macosx/framework: Sync the extension's input to their MediaPlayer's input.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=23c70ac84c28b59606d4078fd4422412f6b0cc81
---
.../macosx/framework/Headers/Public/VLCExtension.h | 1 +
.../Headers/Public/VLCExtensionsManager.h | 3 +
projects/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 2a09219..5011792 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 ca89a36..dee0fb9 100644
--- a/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h
+++ b/projects/macosx/framework/Headers/Public/VLCExtensionsManager.h
@@ -9,9 +9,12 @@
#import <Cocoa/Cocoa.h>
@class VLCExtension;
+ at 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 52e19c1..843dabd 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 11c18b9..e202536 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 <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
More information about the vlc-devel
mailing list