[ad_1]

I’m empirically trying to get the right instructions from an `AVCompositionTrack`

.

```
func compositionLayerInstruction(for track: AVCompositionTrack, assetTrack: AVAssetTrack) -> AVMutableVideoCompositionLayerInstruction {
let instruction = AVMutableVideoCompositionLayerInstruction(assetTrack: track)
var transform = assetTrack.preferredTransform
let assetSize = assetTrack.naturalSize
let tranA = transform.a
let tranB = transform.b
let tranC = transform.c
let tranD = transform.d
if tranA == 0 && tranB == 1 && tranC == -1 && tranD == 0 {
transform = CGAffineTransform(a: 0, b: 1, c: -1, d: 0, tx: assetSize.height, ty: 0)
}
if tranA == 0 && tranB == 1 && tranC == 1 && tranD == 0 {
transform = CGAffineTransform(a: 0, b: 1, c: 1, d: 0, tx: 0, ty: 0)
}
if tranA == 1 && tranB == 0 && tranC == 0 && tranD == 1 {
transform = CGAffineTransform(a: 1, b: 0, c: 0, d: 1, tx: assetSize.width, ty: assetSize.height)
}
instruction.setTransform(transform, at: .zero)
return instruction
}
```

I’m doing it using a trial and error approach.

I get the preferredTransform property of the assetTrack and I try to apply the correct CGAffineTransform transformation verifying that the video is in the right orientation.

The first 2 transformations are working fine.

This process is driving me crazy.

The questions I have are these:

How can I understand what is the 4th case in the if statements if I haven’t already encountered it?

What kind of transformation should I apply to the 3rd and 4th cases?

Is there a way to understand how this transform thing works?

[ad_2]