diff --git a/ios/Video/RCTVideo.m b/ios/Video/RCTVideo.m index 39d9905a..5c247795 100644 --- a/ios/Video/RCTVideo.m +++ b/ios/Video/RCTVideo.m @@ -1265,40 +1265,29 @@ static int const RCTVideoUnset = -1; } - (void)setFilter:(NSString *)filterName { - - _filterName = filterName; - - AVAsset *asset = _playerItem.asset; - - if (asset != nil && filterName != nil) { + _filterName = filterName; + AVAsset *asset = _playerItem.asset; + + 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]; - - } - - - }]; - - } - + 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