From 5f634e5818b7906f54c7e6ce2f68c9be4c2eee06 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 25 May 2020 20:21:02 +0300 Subject: [PATCH] Video editor fixes --- .../LegacyComponents/Sources/PGPhotoEditor.h | 1 + .../LegacyComponents/Sources/PGPhotoEditor.m | 6 +++++ .../LegacyComponents/Sources/PGVideoMovie.h | 2 ++ .../LegacyComponents/Sources/PGVideoMovie.m | 9 ++++++- .../TGMediaPickerGalleryVideoItemView.m | 24 ++++++++++++------- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/submodules/LegacyComponents/Sources/PGPhotoEditor.h b/submodules/LegacyComponents/Sources/PGPhotoEditor.h index 1e1f030d94..6475a37742 100644 --- a/submodules/LegacyComponents/Sources/PGPhotoEditor.h +++ b/submodules/LegacyComponents/Sources/PGPhotoEditor.h @@ -45,6 +45,7 @@ - (void)setCIImage:(CIImage *)ciImage; - (void)processAnimated:(bool)animated completion:(void (^)(void))completion; +- (void)reprocess; - (void)createResultImageWithCompletion:(void (^)(UIImage *image))completion; - (UIImage *)currentResultImage; diff --git a/submodules/LegacyComponents/Sources/PGPhotoEditor.m b/submodules/LegacyComponents/Sources/PGPhotoEditor.m index 64f9db5523..4340fb2f70 100644 --- a/submodules/LegacyComponents/Sources/PGPhotoEditor.m +++ b/submodules/LegacyComponents/Sources/PGPhotoEditor.m @@ -320,6 +320,12 @@ } synchronous:synchronous]; } +- (void)reprocess { + if ([_currentInput isKindOfClass:[PGVideoMovie class]]) { + [(PGVideoMovie *)_currentInput reprocessCurrent]; + } +} + - (void)updateProcessChain { [GPUImageFramebuffer setMark:self.forVideo]; diff --git a/submodules/LegacyComponents/Sources/PGVideoMovie.h b/submodules/LegacyComponents/Sources/PGVideoMovie.h index ac0f541090..f1e3379bcb 100755 --- a/submodules/LegacyComponents/Sources/PGVideoMovie.h +++ b/submodules/LegacyComponents/Sources/PGVideoMovie.h @@ -23,4 +23,6 @@ - (void)cancelProcessing; - (void)processMovieFrame:(CMSampleBufferRef)movieSampleBuffer; +- (void)reprocessCurrent; + @end diff --git a/submodules/LegacyComponents/Sources/PGVideoMovie.m b/submodules/LegacyComponents/Sources/PGVideoMovie.m index 7a55f9a045..5ebc683494 100755 --- a/submodules/LegacyComponents/Sources/PGVideoMovie.m +++ b/submodules/LegacyComponents/Sources/PGVideoMovie.m @@ -116,6 +116,7 @@ NSString *const kYUVVideoRangeConversionForLAFragmentShaderString = SHADER_STRIN @implementation PGVideoMovie { bool videoEncodingIsFinished; + bool _shouldReprocessCurrentFrame; } @synthesize asset = _asset; @@ -341,8 +342,10 @@ NSString *const kYUVVideoRangeConversionForLAFragmentShaderString = SHADER_STRIN - (void)processPixelBufferAtTime:(CMTime)outputItemTime { - if ([playerItemOutput hasNewPixelBufferForItemTime:outputItemTime]) + if ([playerItemOutput hasNewPixelBufferForItemTime:outputItemTime] || _shouldReprocessCurrentFrame) { + _shouldReprocessCurrentFrame = false; + __unsafe_unretained PGVideoMovie *weakSelf = self; CVPixelBufferRef pixelBuffer = [playerItemOutput copyPixelBufferForItemTime:outputItemTime itemTimeForDisplay:NULL]; if (pixelBuffer != NULL) @@ -355,6 +358,10 @@ NSString *const kYUVVideoRangeConversionForLAFragmentShaderString = SHADER_STRIN } } +- (void)reprocessCurrent { + _shouldReprocessCurrentFrame = true; +} + - (BOOL)readNextVideoFrameFromOutput:(AVAssetReaderOutput *)readerVideoTrackOutput; { if (reader.status == AVAssetReaderStatusReading && !videoEncodingIsFinished) diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m index e8359a6088..f06deeb344 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItemView.m @@ -449,6 +449,10 @@ [strongSelf->_entitiesContainerView setupWithPaintingData:adjustments.paintingData]; [strongSelf->_photoEditor importAdjustments:adjustments]; + + if (!strongSelf.isPlaying) { + [strongSelf->_photoEditor reprocess]; + } }]]; } else @@ -810,13 +814,12 @@ { if (_videoView != nil) { - UIImage *image = nil; - - UIGraphicsBeginImageContextWithOptions(_videoView.bounds.size, true, [UIScreen mainScreen].scale); - if (_lastRenderedScreenImage != nil) return _lastRenderedScreenImage; + UIImage *image = nil; + + UIGraphicsBeginImageContextWithOptions(_videoView.bounds.size, true, [UIScreen mainScreen].scale); AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_player.currentItem.asset]; generator.appliesPreferredTrackTransform = true; generator.maximumSize = TGFitSize(_videoDimensions, CGSizeMake(1280.0f, 1280.0f)); @@ -853,11 +856,16 @@ generator.requestedTimeToleranceBefore = kCMTimeZero; CGImageRef imageRef = [generator copyCGImageAtTime:_player.currentTime actualTime:nil error:NULL]; - _lastRenderedScreenImage = [UIImage imageWithCGImage:imageRef]; - CGImageRelease(imageRef); - TGVideoEditAdjustments *adjustments = (TGVideoEditAdjustments *)[self.item.editingContext adjustmentsForItem:self.item.editableMediaItem]; + UIImage *renderedImage = [UIImage imageWithCGImage:imageRef]; + CGImageRelease(imageRef); + + if (adjustments.toolsApplied) { + renderedImage = [PGPhotoEditor resultImageForImage:renderedImage adjustments:adjustments]; + } + _lastRenderedScreenImage = renderedImage; + CGSize originalSize = _videoDimensions; CGRect cropRect = CGRectMake(0, 0, _videoDimensions.width, _videoDimensions.height); UIImageOrientation cropOrientation = UIImageOrientationUp; @@ -873,7 +881,7 @@ CGRect drawRect = CGRectMake(-cropRect.origin.x * ratio, -cropRect.origin.y * ratio, originalSize.width * ratio, originalSize.height * ratio); [_lastRenderedScreenImage drawInRect:drawRect]; - + if (_paintingImageView.image != nil) [_paintingImageView.image drawInRect:drawRect]; }