12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- //
- // GPUImageMovieComposition.m
- // Givit
- //
- // Created by Sean Meiners on 2013/01/25.
- //
- //
- #import "GPUImageMovieComposition.h"
- #import "GPUImageMovieWriter.h"
- @implementation GPUImageMovieComposition
- @synthesize compositon = _compositon;
- @synthesize videoComposition = _videoComposition;
- @synthesize audioMix = _audioMix;
- - (id)initWithComposition:(AVComposition*)compositon
- andVideoComposition:(AVVideoComposition*)videoComposition
- andAudioMix:(AVAudioMix*)audioMix {
- if (!(self = [super init]))
- {
- return nil;
- }
- [self yuvConversionSetup];
- self.compositon = compositon;
- self.videoComposition = videoComposition;
- self.audioMix = audioMix;
- return self;
- }
- - (AVAssetReader*)createAssetReader
- {
- //NSLog(@"creating reader from composition: %@, video: %@, audio: %@ with duration: %@", _compositon, _videoComposition, _audioMix, CFBridgingRelease(CMTimeCopyDescription(kCFAllocatorDefault, _compositon.duration)));
- NSError *error = nil;
- AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:self.compositon error:&error];
- NSDictionary *outputSettings = @{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)};
- AVAssetReaderVideoCompositionOutput *readerVideoOutput = [AVAssetReaderVideoCompositionOutput assetReaderVideoCompositionOutputWithVideoTracks:[_compositon tracksWithMediaType:AVMediaTypeVideo]
- videoSettings:outputSettings];
- #if ! TARGET_IPHONE_SIMULATOR
- if( [_videoComposition isKindOfClass:[AVMutableVideoComposition class]] )
- [(AVMutableVideoComposition*)_videoComposition setRenderScale:1.0];
- #endif
- readerVideoOutput.videoComposition = self.videoComposition;
- readerVideoOutput.alwaysCopiesSampleData = NO;
- [assetReader addOutput:readerVideoOutput];
- NSArray *audioTracks = [_compositon tracksWithMediaType:AVMediaTypeAudio];
- BOOL shouldRecordAudioTrack = (([audioTracks count] > 0) && (self.audioEncodingTarget != nil) );
- AVAssetReaderAudioMixOutput *readerAudioOutput = nil;
- if (shouldRecordAudioTrack)
- {
- [self.audioEncodingTarget setShouldInvalidateAudioSampleWhenDone:YES];
-
- readerAudioOutput = [AVAssetReaderAudioMixOutput assetReaderAudioMixOutputWithAudioTracks:audioTracks audioSettings:nil];
- readerAudioOutput.audioMix = self.audioMix;
- readerAudioOutput.alwaysCopiesSampleData = NO;
- [assetReader addOutput:readerAudioOutput];
- }
- return assetReader;
- }
- @end
|