GPUImageMovieWriter.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #import <Foundation/Foundation.h>
  2. #import <AVFoundation/AVFoundation.h>
  3. #import "GPUImageContext.h"
  4. extern NSString *const kGPUImageColorSwizzlingFragmentShaderString;
  5. @protocol GPUImageMovieWriterDelegate <NSObject>
  6. @optional
  7. - (void)movieRecordingCompleted;
  8. - (void)movieRecordingFailedWithError:(NSError*)error;
  9. @end
  10. @interface GPUImageMovieWriter : NSObject <GPUImageInput>
  11. {
  12. BOOL alreadyFinishedRecording;
  13. NSURL *movieURL;
  14. NSString *fileType;
  15. AVAssetWriter *assetWriter;
  16. AVAssetWriterInput *assetWriterAudioInput;
  17. AVAssetWriterInput *assetWriterVideoInput;
  18. AVAssetWriterInputPixelBufferAdaptor *assetWriterPixelBufferInput;
  19. GPUImageContext *_movieWriterContext;
  20. CVPixelBufferRef renderTarget;
  21. CVOpenGLESTextureRef renderTexture;
  22. CGSize videoSize;
  23. GPUImageRotationMode inputRotation;
  24. }
  25. @property(readwrite, nonatomic) BOOL hasAudioTrack;
  26. @property(readwrite, nonatomic) BOOL shouldPassthroughAudio;
  27. @property(readwrite, nonatomic) BOOL shouldInvalidateAudioSampleWhenDone;
  28. @property(nonatomic, copy) void(^completionBlock)(void);
  29. @property(nonatomic, copy) void(^failureBlock)(NSError*);
  30. @property(nonatomic, assign) id<GPUImageMovieWriterDelegate> delegate;
  31. @property(readwrite, nonatomic) BOOL encodingLiveVideo;
  32. @property(nonatomic, copy) BOOL(^videoInputReadyCallback)(void);
  33. @property(nonatomic, copy) BOOL(^audioInputReadyCallback)(void);
  34. @property(nonatomic, copy) void(^audioProcessingCallback)(SInt16 **samplesRef, CMItemCount numSamplesInBuffer);
  35. @property(nonatomic) BOOL enabled;
  36. @property(nonatomic, readonly) AVAssetWriter *assetWriter;
  37. @property(nonatomic, readonly) CMTime duration;
  38. @property(nonatomic, assign) CGAffineTransform transform;
  39. @property(nonatomic, copy) NSArray *metaData;
  40. @property(nonatomic, assign, getter = isPaused) BOOL paused;
  41. @property(nonatomic, retain) GPUImageContext *movieWriterContext;
  42. // Initialization and teardown
  43. - (id)initWithMovieURL:(NSURL *)newMovieURL size:(CGSize)newSize;
  44. - (id)initWithMovieURL:(NSURL *)newMovieURL size:(CGSize)newSize fileType:(NSString *)newFileType outputSettings:(NSDictionary *)outputSettings;
  45. - (void)setHasAudioTrack:(BOOL)hasAudioTrack audioSettings:(NSDictionary *)audioOutputSettings;
  46. // Movie recording
  47. - (void)startRecording;
  48. - (void)startRecordingInOrientation:(CGAffineTransform)orientationTransform;
  49. - (void)finishRecording;
  50. - (void)finishRecordingWithCompletionHandler:(void (^)(void))handler;
  51. - (void)cancelRecording;
  52. - (void)processAudioBuffer:(CMSampleBufferRef)audioBuffer;
  53. - (void)enableSynchronizationCallbacks;
  54. @end