[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
This commit is contained in:
Levi McCallum 2016-07-21 10:39:31 -07:00 committed by Adlai Holler
parent 1d4620edce
commit 0c70bca2bd

View File

@ -69,6 +69,7 @@ static NSString * const kStatus = @"status";
ASVideoNodePlayerState _playerState; ASVideoNodePlayerState _playerState;
AVAsset *_asset; AVAsset *_asset;
NSURL *_assetURL;
AVVideoComposition *_videoComposition; AVVideoComposition *_videoComposition;
AVAudioMix *_audioMix; AVAudioMix *_audioMix;
@ -127,10 +128,10 @@ static NSString * const kStatus = @"status";
ASDN::MutexLocker l(__instanceLock__); ASDN::MutexLocker l(__instanceLock__);
AVPlayerItem *playerItem = nil; AVPlayerItem *playerItem = nil;
if (self.assetURL != nil) { if (_assetURL != nil) {
playerItem = [[AVPlayerItem alloc] initWithURL:self.assetURL]; playerItem = [[AVPlayerItem alloc] initWithURL:_assetURL];
_asset = [playerItem asset]; _asset = [playerItem asset];
} else if (_asset != nil) { } else {
playerItem = [[AVPlayerItem alloc] initWithAsset:_asset]; 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."); NSLog(@"Asset is not playable.");
return; return;
} }
@ -444,8 +445,8 @@ static NSString * const kStatus = @"status";
{ {
ASDN::MutexLocker l(__instanceLock__); ASDN::MutexLocker l(__instanceLock__);
if (!ASObjectIsEqual(assetURL, self.assetURL)) { if (ASObjectIsEqual(assetURL, self.assetURL) == NO) {
self.asset = [AVURLAsset assetWithURL:assetURL]; [self _setAndFetchAsset:[AVURLAsset assetWithURL:assetURL] url:assetURL];
} }
} }
@ -453,7 +454,9 @@ static NSString * const kStatus = @"status";
{ {
ASDN::MutexLocker l(__instanceLock__); ASDN::MutexLocker l(__instanceLock__);
if ([_asset isKindOfClass:AVURLAsset.class]) { if (_assetURL != nil) {
return _assetURL;
} else if ([_asset isKindOfClass:AVURLAsset.class]) {
return ((AVURLAsset *)_asset).URL; return ((AVURLAsset *)_asset).URL;
} }
@ -464,15 +467,9 @@ static NSString * const kStatus = @"status";
{ {
ASDN::MutexLocker l(__instanceLock__); ASDN::MutexLocker l(__instanceLock__);
if (ASAssetIsEqual(asset, _asset)) { if (ASAssetIsEqual(asset, _asset) == NO) {
return; [self _setAndFetchAsset:asset url:nil];
} }
[self clearFetchedData];
_asset = asset;
[self setNeedsDataFetch];
} }
- (AVAsset *)asset - (AVAsset *)asset
@ -481,6 +478,14 @@ static NSString * const kStatus = @"status";
return _asset; return _asset;
} }
- (void)_setAndFetchAsset:(AVAsset *)asset url:(NSURL *)assetURL
{
[self clearFetchedData];
_asset = asset;
_assetURL = assetURL;
[self setNeedsDataFetch];
}
- (void)setVideoComposition:(AVVideoComposition *)videoComposition - (void)setVideoComposition:(AVVideoComposition *)videoComposition
{ {
ASDN::MutexLocker l(__instanceLock__); ASDN::MutexLocker l(__instanceLock__);