[vlc-devel] commit: macosx/framework: handle duration changed events. (Pierre d' Herbemont )
git version control
git at videolan.org
Sat Jan 16 18:26:14 CET 2010
vlc | branch: master | Pierre d'Herbemont <pdherbemont at free.fr> | Sat Jan 16 15:40:26 2010 +0100| [5aa0d7fdeb551e4ce95d0d6ca94c9c670407b946] | committer: Pierre d'Herbemont
macosx/framework: handle duration changed events.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5aa0d7fdeb551e4ce95d0d6ca94c9c670407b946
---
projects/macosx/framework/Sources/VLCMedia.m | 34 ++++++++++++++-----------
1 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/projects/macosx/framework/Sources/VLCMedia.m b/projects/macosx/framework/Sources/VLCMedia.m
index 54bca01..a2c2006 100644
--- a/projects/macosx/framework/Sources/VLCMedia.m
+++ b/projects/macosx/framework/Sources/VLCMedia.m
@@ -118,21 +118,21 @@ static void HandleMediaMetaChanged(const libvlc_event_t * event, void * self)
[pool release];
}
-//static void HandleMediaDurationChanged(const libvlc_event_t * event, void * self)
-//{
-// NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-//
-// [[VLCEventManager sharedManager] callOnMainThreadObject:self
-// withMethod:@selector(setLength:)
-// withArgumentAsObject:[VLCTime timeWithNumber:
-// [NSNumber numberWithLongLong:event->u.media_duration_changed.new_duration]]];
-// [pool release];
-//}
+static void HandleMediaDurationChanged(const libvlc_event_t * event, void * self)
+{
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+
+ [[VLCEventManager sharedManager] callOnMainThreadObject:self
+ withMethod:@selector(setLength:)
+ withArgumentAsObject:[VLCTime timeWithNumber:
+ [NSNumber numberWithLongLong:event->u.media_duration_changed.new_duration]]];
+ [pool release];
+}
static void HandleMediaStateChanged(const libvlc_event_t * event, void * self)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-
+
[[VLCEventManager sharedManager] callOnMainThreadObject:self
withMethod:@selector(setStateAsNumber:)
withArgumentAsObject:[NSNumber numberWithInt:
@@ -232,7 +232,7 @@ static void HandleMediaSubItemAdded(const libvlc_event_t * event, void * self)
* Before libvlc_event_detach. So this can't happen in dealloc */
libvlc_event_manager_t * p_em = libvlc_media_event_manager(p_md);
libvlc_event_detach(p_em, libvlc_MediaMetaChanged, HandleMediaMetaChanged, self, NULL);
-// libvlc_event_detach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self, NULL);
+ libvlc_event_detach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self, NULL);
libvlc_event_detach(p_em, libvlc_MediaStateChanged, HandleMediaStateChanged, self, NULL);
libvlc_event_detach(p_em, libvlc_MediaSubItemAdded, HandleMediaSubItemAdded, self, NULL);
}
@@ -295,11 +295,15 @@ static void HandleMediaSubItemAdded(const libvlc_event_t * event, void * self)
if (!length)
{
+ // Force preparsing of this item.
+ [self length];
+
+ // wait until we are preparsed
while (!length && ![self isPreparsed] && [aDate timeIntervalSinceNow] > 0)
{
usleep( thread_sleep );
}
-
+
// So we're done waiting, but sometimes we trap the fact that the parsing
// was done before the length gets assigned, so lets go ahead and assign
// it ourselves.
@@ -440,10 +444,10 @@ static void HandleMediaSubItemAdded(const libvlc_event_t * event, void * self)
libvlc_event_manager_t * p_em = libvlc_media_event_manager( p_md );
libvlc_event_attach(p_em, libvlc_MediaMetaChanged, HandleMediaMetaChanged, self, &ex);
-// libvlc_event_attach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self, &ex);
+ libvlc_event_attach(p_em, libvlc_MediaDurationChanged, HandleMediaDurationChanged, self, &ex);
libvlc_event_attach(p_em, libvlc_MediaStateChanged, HandleMediaStateChanged, self, &ex);
libvlc_event_attach(p_em, libvlc_MediaSubItemAdded, HandleMediaSubItemAdded, self, &ex);
-
+
libvlc_media_list_t * p_mlist = libvlc_media_subitems( p_md );
if (!p_mlist)
More information about the vlc-devel
mailing list