瀏覽代碼

macosx/framework: Make sure remainingTime is KVO.

Pierre d'Herbemont 15 年之前
父節點
當前提交
479bc77ffc
共有 2 個文件被更改,包括 8 次插入4 次删除
  1. 1 0
      Headers/Public/VLCMediaPlayer.h
  2. 7 4
      Sources/VLCMediaPlayer.m

+ 1 - 0
Headers/Public/VLCMediaPlayer.h

@@ -82,6 +82,7 @@ extern NSString * VLCMediaPlayerStateToString(VLCMediaPlayerState state);
     void * instance;                    //  Internal
     VLCMedia * media;                   //< Current media being played
     VLCTime * cachedTime;               //< Cached time of the media being played
+    VLCTime * cachedRemainingTime;      //< Cached remaining time of the media being played
     VLCMediaPlayerState cachedState;    //< Cached state of the media being played
     float position;                     //< The position of the media being played
     id drawable;                        //< The drawable associated to this media player

+ 7 - 4
Sources/VLCMediaPlayer.m

@@ -223,6 +223,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
     // Get rid of everything else
     [media release];
     [cachedTime release];
+    [cachedRemainingTime release];
     [drawable release];
 
     [super dealloc];
@@ -462,9 +463,7 @@ static void HandleMediaPlayerMediaChanged(const libvlc_event_t * event, void * s
 
 - (VLCTime *)remainingTime
 {
-    double currentTime = [[cachedTime numberValue] doubleValue];
-    double remaining = currentTime / position * (1 - position);
-    return [VLCTime timeWithNumber:[NSNumber numberWithDouble:-remaining]];
+    return cachedRemainingTime;
 }
 
 - (int)fps
@@ -875,6 +874,7 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
         delegate = nil;
         media = nil;
         cachedTime = [[VLCTime nullTime] retain];
+        cachedRemainingTime = [[VLCTime nullTime] retain];
         position = 0.0f;
         cachedState = VLCMediaPlayerStateStopped;
 
@@ -929,7 +929,10 @@ static const VLCMediaPlayerState libvlc_to_local_state[] =
     [self willChangeValueForKey:@"remainingTime"];
     [cachedTime release];
     cachedTime = [[VLCTime timeWithNumber:newTime] retain];
-
+    [cachedRemainingTime release];
+    double currentTime = [[cachedTime numberValue] doubleValue];
+    double remaining = currentTime / position * (1 - position);
+    cachedRemainingTime = [[VLCTime timeWithNumber:[NSNumber numberWithDouble:-remaining]] retain];
     [self didChangeValueForKey:@"remainingTime"];
     [self didChangeValueForKey:@"time"];
 }