Video editor fixes

This commit is contained in:
Ilya Laktyushin 2020-05-29 14:47:54 +03:00
parent d0b4ba6f7e
commit ab64a9699f
8 changed files with 51 additions and 18 deletions

View File

@ -3,6 +3,8 @@
#import <LegacyComponents/TGModernGalleryImageItemImageView.h>
#import <AVFoundation/AVFoundation.h>
@class TGPhotoEntitiesContainerView;
@interface TGMediaPickerGalleryVideoItemView : TGModernGalleryItemView <TGModernGalleryEditableItemView>
@property (nonatomic, strong) TGModernGalleryImageItemImageView *imageView;
@ -31,5 +33,6 @@
- (UIImage *)screenImage;
- (UIImage *)transitionImage;
- (CGRect)editorTransitionViewRect;
- (TGPhotoEntitiesContainerView *)entitiesView;
@end

View File

@ -12,6 +12,7 @@
@class TGPhotoEditorController;
@protocol TGPhotoPaintStickersContext;
@class TGPhotoEntitiesContainerView;
typedef enum {
TGPhotoEditorControllerGenericIntent = 0,
@ -54,6 +55,8 @@ typedef enum {
@property (nonatomic, assign) bool dontHideStatusBar;
@property (nonatomic, strong) PGCameraShotMetadata *metadata;
@property (nonatomic, strong) TGPhotoEntitiesContainerView *entitiesView;
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context item:(id<TGMediaEditableItem>)item intent:(TGPhotoEditorControllerIntent)intent adjustments:(id<TGMediaEditAdjustments>)adjustments caption:(NSString *)caption screenImage:(UIImage *)screenImage availableTabs:(TGPhotoEditorTab)availableTabs selectedTab:(TGPhotoEditorTab)selectedTab;
- (void)dismissEditor;

View File

@ -116,18 +116,22 @@ NSString *const kYUVVideoRangeConversionForLAFragmentShaderString = SHADER_STRIN
#pragma mark -
#pragma mark Initialization and teardown
- (UIInterfaceOrientation)orientationForTrack:(AVAsset *)asset {
- (GPUImageRotationMode)rotationForTrack:(AVAsset *)asset {
AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
CGAffineTransform trackTransform = [videoTrack preferredTransform];
if (trackTransform.a == -1 && trackTransform.d == -1) {
return UIInterfaceOrientationLandscapeRight;
return kGPUImageRotate180;
} else if (trackTransform.a == 1 && trackTransform.d == 1) {
return UIInterfaceOrientationLandscapeLeft;
return kGPUImageNoRotation;
} else if (trackTransform.b == -1 && trackTransform.c == 1) {
return UIInterfaceOrientationPortraitUpsideDown;
return kGPUImageRotateLeft;
} else {
return UIInterfaceOrientationPortrait;
if (trackTransform.c == 1) {
return kGPUImageRotateRightFlipVertical;
} else {
return kGPUImageRotateRight;
}
}
}
@ -385,16 +389,8 @@ NSString *const kYUVVideoRangeConversionForLAFragmentShaderString = SHADER_STRIN
AVAsset *asset = self.playerItem.asset;
if (asset != nil) {
UIInterfaceOrientation orientation = [self orientationForTrack:asset];
if (orientation == UIInterfaceOrientationPortrait) {
[currentTarget setInputRotation:kGPUImageRotateRight atIndex:targetTextureIndex];
} else if (orientation == UIInterfaceOrientationLandscapeRight) {
[currentTarget setInputRotation:kGPUImageRotate180 atIndex:targetTextureIndex];
} else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
[currentTarget setInputRotation:kGPUImageRotateLeft atIndex:targetTextureIndex];
} else {
[currentTarget setInputRotation:kGPUImageNoRotation atIndex:targetTextureIndex];
}
GPUImageRotationMode rotation = [self rotationForTrack:asset];
[currentTarget setInputRotation:rotation atIndex:targetTextureIndex];
}
}

View File

@ -51,6 +51,8 @@
#import "TGCameraCapturedPhoto.h"
#import "TGCameraCapturedVideo.h"
#import "PGPhotoEditor.h"
#import "TGAnimationUtils.h"
const CGFloat TGCameraSwipeMinimumVelocity = 600.0f;
@ -2665,10 +2667,17 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
UIImage *(^cropVideoThumbnail)(UIImage *, CGSize, CGSize, bool) = ^UIImage *(UIImage *image, CGSize targetSize, CGSize sourceSize, bool resize)
{
if ([adjustments cropAppliedForAvatar:false] || adjustments.hasPainting)
if ([adjustments cropAppliedForAvatar:false] || adjustments.hasPainting || adjustments.toolsApplied)
{
CGRect scaledCropRect = CGRectMake(adjustments.cropRect.origin.x * image.size.width / adjustments.originalSize.width, adjustments.cropRect.origin.y * image.size.height / adjustments.originalSize.height, adjustments.cropRect.size.width * image.size.width / adjustments.originalSize.width, adjustments.cropRect.size.height * image.size.height / adjustments.originalSize.height);
return TGPhotoEditorCrop(image, adjustments.paintingData.image, adjustments.cropOrientation, 0, scaledCropRect, adjustments.cropMirrored, targetSize, sourceSize, resize);
UIImage *paintingImage = adjustments.paintingData.stillImage;
if (paintingImage == nil) {
paintingImage = adjustments.paintingData.image;
}
if (adjustments.toolsApplied) {
image = [PGPhotoEditor resultImageForImage:image adjustments:adjustments];
}
return TGPhotoEditorCrop(image, paintingImage, adjustments.cropOrientation, 0, scaledCropRect, adjustments.cropMirrored, targetSize, sourceSize, resize);
}
return image;

View File

@ -20,6 +20,8 @@
#import <LegacyComponents/TGSecretTimerMenu.h>
#import "TGPhotoEntitiesContainerView.h"
@interface TGMediaPickerGalleryModel ()
{
TGMediaPickerGalleryInterfaceView *_interfaceView;
@ -361,11 +363,17 @@
UIView *referenceParentView = nil;
UIImage *image = nil;
TGPhotoEntitiesContainerView *entitiesView = nil;
bool isVideo = false;
if ([editorReferenceView isKindOfClass:[UIImageView class]])
{
screenImage = [(UIImageView *)editorReferenceView image];
referenceView = editorReferenceView;
if ([editorReferenceView.subviews.firstObject.subviews.firstObject.subviews.firstObject isKindOfClass:[TGPhotoEntitiesContainerView class]]) {
entitiesView = editorReferenceView.subviews.firstObject.subviews.firstObject.subviews.firstObject;
}
}
else if ([editorReferenceView isKindOfClass:[TGMediaPickerGalleryVideoItemView class]])
{
@ -378,6 +386,8 @@
referenceView = [[UIImageView alloc] initWithImage:screenImage];
referenceParentView = editorReferenceView;
entitiesView = [videoItemView entitiesView];
isVideo = true;
}
@ -386,6 +396,7 @@
TGPhotoEditorControllerIntent intent = isVideo ? TGPhotoEditorControllerVideoIntent : TGPhotoEditorControllerGenericIntent;
TGPhotoEditorController *controller = [[TGPhotoEditorController alloc] initWithContext:_context item:item.editableMediaItem intent:intent adjustments:editorValues caption:caption screenImage:screenImage availableTabs:_interfaceView.currentTabs selectedTab:tab];
controller.entitiesView =
controller.editingContext = _editingContext;
controller.stickersContext = _stickersContext;
self.editorController = controller;

View File

@ -790,7 +790,11 @@
CGPoint offset = TGPaintSubtractPoints(centerPoint, [TGPhotoPaintController fittedCropRect:cropRect centerScale:scale]);
CGPoint boundsCenter = TGPaintCenterOfRect(_contentWrapperView.bounds);
_entitiesContainerView.center = TGPaintAddPoints(boundsCenter, offset);
_entitiesContainerView.center = TGPaintAddPoints(boundsCenter, CGPointMake(offset.x, offset.y));
}
- (TGPhotoEntitiesContainerView *)entitiesView {
return _entitiesContainerView;
}
- (void)singleTap

View File

@ -26,6 +26,7 @@
- (void)setSnapshotImage:(UIImage *)snapshotImage;
- (void)setSnapshotView:(UIView *)snapshotView;
- (void)setPaintingImage:(UIImage *)paintingImage;
- (void)setEntitiesView:(UIView *)entitiesView;
- (void)animateTransitionIn;
- (void)animateTransitionOut;

View File

@ -40,6 +40,7 @@ const CGFloat TGPhotoCropViewOverscreenSize = 1000;
UIView *_snapshotView;
CGSize _snapshotSize;
UIImageView *_paintingImageView;
UIView *_entitiesView;
UIImage *_paintingImage;
@ -398,6 +399,11 @@ const CGFloat TGPhotoCropViewOverscreenSize = 1000;
}
}
- (void)setEntitiesView:(UIView *)entitiesView
{
_entitiesView = entitiesView;
}
#pragma mark - Crop Area
- (void)handleCropAreaChanged