|
@@ -2,10 +2,12 @@
|
|
|
* VLCMediaDiscoverer.m: VLCKit.framework VLCMediaDiscoverer implementation
|
|
|
*****************************************************************************
|
|
|
* Copyright (C) 2007 Pierre d'Herbemont
|
|
|
- * Copyright (C) 2007, 2014 VLC authors and VideoLAN
|
|
|
+ * Copyright (C) 2014-2015 Felix Paul Kühne
|
|
|
+ * Copyright (C) 2007, 2015 VLC authors and VideoLAN
|
|
|
* $Id$
|
|
|
*
|
|
|
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
|
|
|
+ * Felix Paul Kühne <fkuehne # videolan dot org>
|
|
|
*
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
@@ -31,22 +33,14 @@
|
|
|
|
|
|
@interface VLCMediaDiscoverer ()
|
|
|
{
|
|
|
- NSString * _localizedName;
|
|
|
- VLCMediaList * _discoveredMedia;
|
|
|
- void * _mdis;
|
|
|
+ NSString *_localizedName;
|
|
|
+ VLCMediaList *_discoveredMedia;
|
|
|
+ void *_mdis;
|
|
|
BOOL _running;
|
|
|
-}
|
|
|
-@end
|
|
|
|
|
|
-static NSArray * availableMediaDiscoverer = nil; // Global list of media discoverers
|
|
|
-
|
|
|
-/**
|
|
|
- * Declares call back functions to be used with libvlc event callbacks.
|
|
|
- */
|
|
|
-@interface VLCMediaDiscoverer()
|
|
|
-{
|
|
|
VLCLibrary *_privateLibrary;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* libvlc told us that the discoverer is actually running
|
|
|
*/
|
|
@@ -56,10 +50,13 @@ static NSArray * availableMediaDiscoverer = nil; // Global list of media dis
|
|
|
* libvlc told us that the discoverer stopped running
|
|
|
*/
|
|
|
- (void)_mediaDiscovererEnded;
|
|
|
+
|
|
|
@end
|
|
|
|
|
|
+static NSArray *availableMediaDiscoverer = nil; // Global list of media discoverers
|
|
|
+
|
|
|
/* libvlc event callback */
|
|
|
-static void HandleMediaDiscovererStarted(const libvlc_event_t * event, void * user_data)
|
|
|
+static void HandleMediaDiscovererStarted(const libvlc_event_t *event, void *user_data)
|
|
|
{
|
|
|
@autoreleasepool {
|
|
|
NSLog(@"HandleMediaDiscovererStarted");
|
|
@@ -70,7 +67,7 @@ static void HandleMediaDiscovererStarted(const libvlc_event_t * event, void * us
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void HandleMediaDiscovererEnded( const libvlc_event_t * event, void * user_data)
|
|
|
+static void HandleMediaDiscovererEnded( const libvlc_event_t *event, void *user_data)
|
|
|
{
|
|
|
@autoreleasepool {
|
|
|
NSLog(@"HandleMediaDiscovererEnded");
|
|
@@ -101,15 +98,27 @@ static void HandleMediaDiscovererEnded( const libvlc_event_t * event, void * use
|
|
|
_discoveredMedia = nil;
|
|
|
|
|
|
_privateLibrary = [VLCLibrary sharedLibrary];
|
|
|
- libvlc_retain([_privateLibrary instance]);
|
|
|
+ libvlc_retain(_privateLibrary.instance);
|
|
|
+
|
|
|
+ _mdis = libvlc_media_discoverer_new(_privateLibrary.instance,
|
|
|
+ [aServiceName UTF8String]);
|
|
|
+
|
|
|
+ if (_mdis == NULL) {
|
|
|
+ VKLog(@"media discovery initialization failed, maybe no such module?");
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
|
|
|
- _mdis = libvlc_media_discoverer_new_from_name([_privateLibrary instance],
|
|
|
- [aServiceName UTF8String]);
|
|
|
- NSAssert(_mdis, @"No such media discoverer");
|
|
|
libvlc_event_manager_t * p_em = libvlc_media_discoverer_event_manager(_mdis);
|
|
|
libvlc_event_attach(p_em, libvlc_MediaDiscovererStarted, HandleMediaDiscovererStarted, (__bridge void *)(self));
|
|
|
libvlc_event_attach(p_em, libvlc_MediaDiscovererEnded, HandleMediaDiscovererEnded, (__bridge void *)(self));
|
|
|
|
|
|
+ //FIXME: add more events
|
|
|
+ int returnValue = libvlc_media_discoverer_start(_mdis);
|
|
|
+ if (returnValue == -1) {
|
|
|
+ VKLog(@"media discovery start failed");
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+
|
|
|
_running = libvlc_media_discoverer_is_running(_mdis);
|
|
|
}
|
|
|
return self;
|
|
@@ -122,19 +131,18 @@ static void HandleMediaDiscovererEnded( const libvlc_event_t * event, void * use
|
|
|
libvlc_event_detach(em, libvlc_MediaDiscovererEnded, HandleMediaDiscovererEnded, (__bridge void *)(self));
|
|
|
[[VLCEventManager sharedManager] cancelCallToObject:self];
|
|
|
|
|
|
- libvlc_media_discoverer_release( _mdis );
|
|
|
+ libvlc_media_discoverer_release(_mdis);
|
|
|
|
|
|
libvlc_release(_privateLibrary.instance);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-- (VLCMediaList *) discoveredMedia
|
|
|
+- (VLCMediaList *)discoveredMedia
|
|
|
{
|
|
|
if (_discoveredMedia)
|
|
|
return _discoveredMedia;
|
|
|
|
|
|
- libvlc_media_list_t * p_mlist = libvlc_media_discoverer_media_list( _mdis );
|
|
|
- VLCMediaList * ret = [VLCMediaList mediaListWithLibVLCMediaList:p_mlist];
|
|
|
+ libvlc_media_list_t *p_mlist = libvlc_media_discoverer_media_list( _mdis );
|
|
|
+ VLCMediaList *ret = [VLCMediaList mediaListWithLibVLCMediaList:p_mlist];
|
|
|
libvlc_media_list_release( p_mlist );
|
|
|
|
|
|
_discoveredMedia = ret;
|
|
@@ -146,10 +154,10 @@ static void HandleMediaDiscovererEnded( const libvlc_event_t * event, void * use
|
|
|
if (_localizedName)
|
|
|
return _localizedName;
|
|
|
|
|
|
- char * name = libvlc_media_discoverer_localized_name( _mdis );
|
|
|
+ char *name = libvlc_media_discoverer_localized_name(_mdis);
|
|
|
if (name) {
|
|
|
_localizedName = @(name);
|
|
|
- free( name );
|
|
|
+ free(name);
|
|
|
}
|
|
|
return _localizedName;
|
|
|
}
|