diff --git a/ios/Video/RCTVideo.m b/ios/Video/RCTVideo.m index a56b08a2aa..5c2477950c 100644 --- a/ios/Video/RCTVideo.m +++ b/ios/Video/RCTVideo.m @@ -1265,39 +1265,29 @@ - (void)videoPlayerViewControllerDidDismiss:(AVPlayerViewController *)playerView } - (void)setFilter:(NSString *)filterName { - _filterName = filterName; - AVAsset *asset = _playerItem.asset; - - if (asset != nil) { - - CIFilter *filter = [CIFilter filterWithName:filterName]; - - _playerItem.videoComposition = [AVVideoComposition - videoCompositionWithAsset:asset - applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest *_Nonnull request) { - - if (filter == nil) { - - [request finishWithImage:request.sourceImage context:nil]; - - } else { - - CIImage *image = request.sourceImage.imageByClampingToExtent; - - [filter setValue:image forKey:kCIInputImageKey]; - - CIImage *output = [filter.outputImage imageByCroppingToRect:request.sourceImage.extent]; - - [request finishWithImage:output context:nil]; - - } - - }]; - + + if (!asset) { + return; + } else if (!_playerItem.videoComposition && (filterName == nil || [filterName isEqualToString:@""])) { + return; // Setting up an empty filter has a cost so avoid whenever possible } - + // TODO: filters don't work for HLS, check & return + + CIFilter *filter = [CIFilter filterWithName:filterName]; + _playerItem.videoComposition = [AVVideoComposition + videoCompositionWithAsset:asset + applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest *_Nonnull request) { + if (filter == nil) { + [request finishWithImage:request.sourceImage context:nil]; + } else { + CIImage *image = request.sourceImage.imageByClampingToExtent; + [filter setValue:image forKey:kCIInputImageKey]; + CIImage *output = [filter.outputImage imageByCroppingToRect:request.sourceImage.extent]; + [request finishWithImage:output context:nil]; + } + }]; } #pragma mark - React View Management @@ -1460,4 +1450,4 @@ - (NSString *)cacheDirectoryPath { return array[0]; } -@end \ No newline at end of file +@end