From 0c70bca2bd4fd57567df75f8cd6b871d66b01d92 Mon Sep 17 00:00:00 2001 From: Levi McCallum Date: Thu, 21 Jul 2016 10:39:31 -0700 Subject: [PATCH] [ASVideoNode] Fix conditional that prevented local asset loading (#1962) * Fix conditional that prevented local asset loading * Allow setting new asset to clear previously set URL --- AsyncDisplayKit/ASVideoNode.mm | 35 +++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/AsyncDisplayKit/ASVideoNode.mm b/AsyncDisplayKit/ASVideoNode.mm index 5f679f5cc1..5165068961 100644 --- a/AsyncDisplayKit/ASVideoNode.mm +++ b/AsyncDisplayKit/ASVideoNode.mm @@ -69,6 +69,7 @@ static NSString * const kStatus = @"status"; ASVideoNodePlayerState _playerState; AVAsset *_asset; + NSURL *_assetURL; AVVideoComposition *_videoComposition; AVAudioMix *_audioMix; @@ -127,10 +128,10 @@ static NSString * const kStatus = @"status"; ASDN::MutexLocker l(__instanceLock__); AVPlayerItem *playerItem = nil; - if (self.assetURL != nil) { - playerItem = [[AVPlayerItem alloc] initWithURL:self.assetURL]; + if (_assetURL != nil) { + playerItem = [[AVPlayerItem alloc] initWithURL:_assetURL]; _asset = [playerItem asset]; - } else if (_asset != nil) { + } else { playerItem = [[AVPlayerItem alloc] initWithAsset:_asset]; } @@ -149,7 +150,7 @@ static NSString * const kStatus = @"status"; } } - if (![asset isPlayable]) { + if ([asset isPlayable] == NO) { NSLog(@"Asset is not playable."); return; } @@ -444,8 +445,8 @@ static NSString * const kStatus = @"status"; { ASDN::MutexLocker l(__instanceLock__); - if (!ASObjectIsEqual(assetURL, self.assetURL)) { - self.asset = [AVURLAsset assetWithURL:assetURL]; + if (ASObjectIsEqual(assetURL, self.assetURL) == NO) { + [self _setAndFetchAsset:[AVURLAsset assetWithURL:assetURL] url:assetURL]; } } @@ -453,7 +454,9 @@ static NSString * const kStatus = @"status"; { ASDN::MutexLocker l(__instanceLock__); - if ([_asset isKindOfClass:AVURLAsset.class]) { + if (_assetURL != nil) { + return _assetURL; + } else if ([_asset isKindOfClass:AVURLAsset.class]) { return ((AVURLAsset *)_asset).URL; } @@ -464,15 +467,9 @@ static NSString * const kStatus = @"status"; { ASDN::MutexLocker l(__instanceLock__); - if (ASAssetIsEqual(asset, _asset)) { - return; + if (ASAssetIsEqual(asset, _asset) == NO) { + [self _setAndFetchAsset:asset url:nil]; } - - [self clearFetchedData]; - - _asset = asset; - - [self setNeedsDataFetch]; } - (AVAsset *)asset @@ -481,6 +478,14 @@ static NSString * const kStatus = @"status"; return _asset; } +- (void)_setAndFetchAsset:(AVAsset *)asset url:(NSURL *)assetURL +{ + [self clearFetchedData]; + _asset = asset; + _assetURL = assetURL; + [self setNeedsDataFetch]; +} + - (void)setVideoComposition:(AVVideoComposition *)videoComposition { ASDN::MutexLocker l(__instanceLock__);