KSYGPUPicOutput.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #import <Foundation/Foundation.h>
  2. #import <AVFoundation/AVFoundation.h>
  3. #import <GPUImage/GPUImage.h>
  4. /** GPU图像输出
  5. 从GPU中取得处理后的图像, 通过回调函数将pixelBuffer和时间戳送出
  6. * 本模块含有一个GPUImageInput的接口, 从其他filter接收渲染结果
  7. * 通过inputSize 查询输入的图像尺寸
  8. * 通过outputSize 设置输出的图像尺寸
  9. * 通过cropRegion 设置裁剪区域
  10. * 初始化时可指定输出数据的像素格式
  11. * 支持的输出颜色格式包括:
  12. - kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: (NV12)
  13. - kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:(NV12)
  14. - kCVPixelFormatType_420YpCbCr8Planar:(I420)
  15. - kCVPixelFormatType_420YpCbCr8PlanarFullRange:(I420)
  16. - kCVPixelFormatType_32BGRA:(BGRA)
  17. - kCVPixelFormatType_4444AYpCbCr8:(AYUV) 排列顺序为 (A Y' Cb Cr)
  18. */
  19. @interface KSYGPUPicOutput : NSObject <GPUImageInput>
  20. /// @name Initialization
  21. /**
  22. @abstract 初始化方法
  23. */
  24. - (id) init;
  25. /**
  26. @abstract 指定输出格式的初始化
  27. @param fmt 输出格式
  28. @see outputPixelFormat
  29. */
  30. - (id) initWithOutFmt:(OSType) fmt;
  31. /// @name query and settings
  32. /**
  33. @abstract output format (默认:kCVPixelFormatType_32BGRA)
  34. @discussion 非法颜色格式都会被当做 kCVPixelFormatType_32BGRA 处理
  35. */
  36. @property(nonatomic, readonly) OSType outputPixelFormat;
  37. /**
  38. @abstract GPUImageInput - (BOOL)enabled;
  39. */
  40. @property(nonatomic) BOOL enabled;
  41. /**
  42. @abstract 是否使用自定义输出尺寸 (默认为NO)
  43. @discussion NO: outputSize自动跟随输入图像的变化而变化
  44. @discussion YES: outputSize使用外部自定义设置,忽略输入尺寸
  45. */
  46. @property(nonatomic, assign) BOOL bCustomOutputSize;
  47. /**
  48. @abstract output picture size
  49. @discussion 当bCustomOutputSize设置为NO时,outputSize无法被修改
  50. @discussion 可以对裁剪后的图像再进行缩放
  51. @discussion 输出尺寸必须为4的整数倍, 内部会进行向上取整
  52. @see bCustomOutputSize
  53. */
  54. @property(nonatomic, assign) CGSize outputSize;
  55. /**
  56. @abstract 裁剪区域 将输入的图像按照区域裁剪出中间的一块
  57. @discussion cropRegion 标记了左上角的位置和宽高, 范围都是0.0 到1.0
  58. */
  59. @property(readwrite, nonatomic) CGRect cropRegion;
  60. /**
  61. @abstract input picture size
  62. */
  63. @property(nonatomic, readonly) CGSize inputSize;
  64. /** 是否冻结图像(主动提供重复图像)
  65. @discussion 比如:视频采集被打断时, bAutoRepeat为NO,则停止提供图像; 为YES, 则主动提供最后一帧图像
  66. */
  67. @property(nonatomic, readwrite) BOOL bAutoRepeat;
  68. /** 0表示根据过去输入的图像来猜测帧率, 1~30 表示按照设定的帧率提供重复的帧, 默认为0 */
  69. @property(nonatomic, readwrite) int targetFps;
  70. /**
  71. @abstract input roation mode
  72. @return 图像的旋转模式
  73. */
  74. - (GPUImageRotationMode) getInputRotation;
  75. #pragma mark - raw data
  76. /**
  77. @abstract 视频处理回调接口
  78. @discussion pixelBuffer 美颜处理后,编码之前的视频数据
  79. @discussion timeInfo 时间戳
  80. @warnning 请注意本函数的执行时间,如果太长可能导致不可预知的问题
  81. */
  82. @property(nonatomic, copy) void(^videoProcessingCallback)(CVPixelBufferRef pixelBuffer, CMTime timeInfo );
  83. @end