NSException* libvlcException = [NSException
exceptionWithName:@"LibVLCException"
reason:[NSString stringWithFormat:@"libvlc has thrown us an error: %s (%s:%d %s)",
- libvlc_exception_get_message( ex ), file, line_number, function]
+ libvlc_errmsg(), file, line_number, function]
userInfo:nil];
libvlc_exception_clear( ex );
@throw libvlcException;
}
}
-void * CreateSharedLibraryOnStartup( void )
-{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- /* This library is not loaded for no reason, so let's create
- * a VLCLibrary instance. */
- [VLCLibrary sharedLibrary];
-
- [pool release];
-
- return NULL;
-}
-
-void * DestroySharedLibraryAtExit( void )
-{
- /* Release the global object that may have been alloc-ed
- * in -[VLCLibrary init] */
- [sharedLibrary release];
- sharedLibrary = nil;
-
- return NULL;
-}
-
@implementation VLCLibrary
+ (VLCLibrary *)sharedLibrary
{
libvlc_exception_t ex;
libvlc_exception_init( &ex );
- const char * lib_vlc_params[] = {
- "-I", "dummy", "--vout=opengllayer",
- "--no-video-title-show", "--no-sout-keep", "--ignore-config"
- //, "--control=motion", "--motion-use-rotate", "--video-filter=rotate"
- };
-
+ NSArray *vlcParams = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"VLCParams"];
+ if (!vlcParams) {
+ NSMutableArray *defaultParams = [NSMutableArray array];
+ [defaultParams addObject:@"-I macosx_dialog_provider"]; // No actual interface, just dialogs and nagging
+ [defaultParams addObject:@"--no-video-title-show"]; // Don't show the title on overlay when starting to play
+ [defaultParams addObject:@"--no-sout-keep"];
+ [defaultParams addObject:@"--ignore-config"]; // Don't read and write VLC config files
+ [defaultParams addObject:@"--vout=macosx"];
+ [defaultParams addObject:@"--text-renderer=quartztext"]; // our CoreText-based renderer
+ [defaultParams addObject:@"--verbose=-1"]; // Don't polute the log
+ [defaultParams addObject:@"--no-color"];
+ [defaultParams addObject:@"--no-media-library"];
+ [defaultParams addObject:@"--play-and-pause"];
+ vlcParams = defaultParams;
+ }
+
+ NSUInteger paramNum = 0;
+ NSUInteger count = [vlcParams count];
+ const char *lib_vlc_params[count];
+ while (paramNum < count) {
+ NSString *vlcParam = [vlcParams objectAtIndex:paramNum];
+ lib_vlc_params[paramNum] = [vlcParam cStringUsingEncoding:NSASCIIStringEncoding];
+ paramNum++;
+ }
instance = (void *)libvlc_new( sizeof(lib_vlc_params)/sizeof(lib_vlc_params[0]), lib_vlc_params, &ex );
catch_exception( &ex );
-
+ NSAssert(instance, @"libvlc failed to initialize");
+
// Assignment unneeded, as the audio unit will do it for us
/*audio = */ [[VLCAudio alloc] initWithLibrary:self];
}
return self;
}
+- (NSString *)version
+{
+ return [NSString stringWithUTF8String:libvlc_get_version()];
+}
+
+- (NSString *)changeset
+{
+ return [NSString stringWithUTF8String:libvlc_get_changeset()];
+}
+
- (void)dealloc
{
if( instance )