blob: 858e1f289f25dcfebc79903389dc841339e7c8e3 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <AVFoundation/AVFoundation.h>
CGAffineTransform FVPGetStandardizedTransformForTrack(AVAssetTrack *track) {
CGAffineTransform t = track.preferredTransform;
CGSize size = track.naturalSize;
// Each case of control flows corresponds to a specific
// `UIImageOrientation`, with 8 cases in total.
if (t.a == 1 && t.b == 0 && t.c == 0 && t.d == 1) {
// UIImageOrientationUp
t.tx = 0;
t.ty = 0;
} else if (t.a == -1 && t.b == 0 && t.c == 0 && t.d == -1) {
// UIImageOrientationDown
t.tx = size.width;
t.ty = size.height;
} else if (t.a == 0 && t.b == -1 && t.c == 1 && t.d == 0) {
// UIImageOrientationLeft
t.tx = 0;
t.ty = size.width;
} else if (t.a == 0 && t.b == 1 && t.c == -1 && t.d == 0) {
// UIImageOrientationRight
t.tx = size.height;
t.ty = 0;
} else if (t.a == -1 && t.b == 0 && t.c == 0 && t.d == 1) {
// UIImageOrientationUpMirrored
t.tx = size.width;
t.ty = 0;
} else if (t.a == 1 && t.b == 0 && t.c == 0 && t.d == -1) {
// UIImageOrientationDownMirrored
t.tx = 0;
t.ty = size.height;
} else if (t.a == 0 && t.b == -1 && t.c == -1 && t.d == 0) {
// UIImageOrientationLeftMirrored
t.tx = size.height;
t.ty = size.width;
} else if (t.a == 0 && t.b == 1 && t.c == 1 && t.d == 0) {
// UIImageOrientationRightMirrored
t.tx = 0;
t.ty = 0;
}
return t;
}