Forked from luca-bernardi/AVAsset+VideoOrientation.h
Created
November 1, 2015 09:24
-
-
Save hboon/d357396771c2ea20cd05 to your computer and use it in GitHub Desktop.
Find the video orientation of an AVAsset. (Useful if you need to send the video to a remote server)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// AVAsset+VideoOrientation.h | |
// | |
// Created by Luca Bernardi on 19/09/12. | |
// Copyright (c) 2012 Luca Bernardi. All rights reserved. | |
// | |
#import <AVFoundation/AVFoundation.h> | |
typedef enum { | |
LBVideoOrientationUp, //Device starts recording in Portrait | |
LBVideoOrientationDown, //Device starts recording in Portrait upside down | |
LBVideoOrientationLeft, //Device Landscape Left (home button on the left side) | |
LBVideoOrientationRight, //Device Landscape Right (home button on the Right side) | |
LBVideoOrientationNotFound = 99 //An Error occurred or AVAsset doesn't contains video track | |
} LBVideoOrientation; | |
@interface AVAsset (VideoOrientation) | |
/** | |
Returns a LBVideoOrientation that is the orientation | |
of the iPhone / iPad whent starst recording | |
@return A LBVideoOrientation that is the orientation of the video | |
*/ | |
@property (nonatomic, readonly) LBVideoOrientation videoOrientation; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// AVAsset+VideoOrientation.m | |
// | |
// Created by Luca Bernardi on 19/09/12. | |
// Copyright (c) 2012 Luca Bernardi. All rights reserved. | |
// | |
#import "AVAsset+VideoOrientation.h" | |
static inline CGFloat RadiansToDegrees(CGFloat radians) { | |
return radians * 180 / M_PI; | |
}; | |
@implementation AVAsset (VideoOrientation) | |
@dynamic videoOrientation; | |
- (LBVideoOrientation)videoOrientation | |
{ | |
NSArray *videoTracks = [self tracksWithMediaType:AVMediaTypeVideo]; | |
if ([videoTracks count] == 0) { | |
return LBVideoOrientationNotFound; | |
} | |
AVAssetTrack* videoTrack = [videoTracks objectAtIndex:0]; | |
CGAffineTransform txf = [videoTrack preferredTransform]; | |
CGFloat videoAngleInDegree = RadiansToDegrees(atan2(txf.b, txf.a)); | |
LBVideoOrientation orientation = 0; | |
switch ((int)videoAngleInDegree) { | |
case 0: | |
orientation = LBVideoOrientationRight; | |
break; | |
case 90: | |
orientation = LBVideoOrientationUp; | |
break; | |
case 180: | |
orientation = LBVideoOrientationLeft; | |
break; | |
case -90: | |
orientation = LBVideoOrientationDown; | |
break; | |
default: | |
orientation = LBVideoOrientationNotFound; | |
break; | |
} | |
return orientation; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment