KSYGPUPicInput.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // KSYGPUPicInput.h
  3. // KSYStreamer
  4. //
  5. // Created by yiqian on 1/30/16.
  6. // Copyright © 2016 yiqian. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <AVFoundation/AVFoundation.h>
  10. #import <CoreMedia/CoreMedia.h>
  11. #import <GPUImage/GPUImage.h>
  12. /** GPU图像输输入
  13. * 将采集到的YUV/RGB数据上传到GPU, 传递给其他filter进行处理
  14. * 支持的颜色格式包括:
  15. - kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: (NV12)
  16. - kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:(NV12)
  17. - kCVPixelFormatType_420YpCbCr8Planar:(I420)
  18. - kCVPixelFormatType_420YpCbCr8PlanarFullRange:(I420)
  19. - kCVPixelFormatType_32BGRA:(BGRA)
  20. * 支持图像裁剪
  21. * 支持图像旋转
  22. */
  23. @interface KSYGPUPicInput : GPUImageOutput
  24. /// Initialization and teardown
  25. - (id)init;
  26. /**
  27. @abstract 设置输入图像的像素格式
  28. @param fmt 像素格式
  29. */
  30. - (id)initWithFmt:(OSType)fmt;
  31. /**
  32. @abstract 裁剪区域 将输入的图像按照区域裁剪出中间的一块
  33. @discussion cropRegion 标记了左上角的位置和宽高, 范围都是0.0 到1.0, 非法值无法设置成功
  34. */
  35. @property(readwrite, nonatomic) CGRect cropRegion;
  36. /**
  37. @abstract 输出图像的尺寸
  38. @discussion 设置了裁剪区域, 并且改变了宽高比后, 需要调用此接口, 否则图像可能变形
  39. */
  40. - (void) forceProcessingAtSize:(CGSize)frameSize;
  41. /**
  42. @abstract 实际输出图像的尺寸
  43. @discussion forceProcessingAtSize: 也是对outputSize属性进行赋值
  44. */
  45. @property(nonatomic) CGSize outputSize;
  46. /**
  47. @abstract 输出画面的朝向
  48. @discussion 输出的画面旋转90度的整数倍, 默认为 kGPUImageNoRotation
  49. @discussion 直接连接到KSYGPUPicMixer时, 旋转90度的情况可能出现问题, 请尽量保证中间有其他滤镜
  50. */
  51. @property(nonatomic, assign) GPUImageRotationMode outputRotation;
  52. /**
  53. @abstract 是否允许超时丢帧
  54. @discussion 当video frame处理超时时,该属性为YES时,将丢弃新的video frame,为NO时将等待处理完毕的信号。
  55. @discussion 默认为YES。
  56. */
  57. @property(nonatomic, assign) BOOL alwaysDiscardsLateVideoFrames;
  58. /**
  59. @abstract 输入图像数据
  60. @param sampleBuffer 图像数据和时间信息
  61. */
  62. - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer;
  63. /**
  64. @abstract 输入图像数据
  65. @param pixelBuffer 图像数据
  66. @param timeInfo 时间信息
  67. */
  68. - (void)processPixelBuffer:(CVPixelBufferRef)pixelBuffer
  69. time:(CMTime)timeInfo;
  70. /**
  71. @abstract 输入图像数据
  72. @param pData 图像数据每个分量的指针, 比如pData[0]为Y分量的指针
  73. @param pixelFmt 图像数据类型, 必须与init时指定的格式一致
  74. @param width 图像宽度
  75. @param height 图像高度
  76. @param strides 图像数据每个分量的行偏移, 比如 stride[0] 为Y分量的行偏移
  77. @param timeInfo 时间信息
  78. */
  79. - (void)processPixelData:(void**) pData
  80. format:(OSType) pixelFmt
  81. width:(size_t) width
  82. height:(size_t) height
  83. stride:(size_t*) strides
  84. time:(CMTime) timeInfo ;
  85. @end
  86. /** GPU图像输输入
  87. 过期的类, 请使用KSYGPUPicInput
  88. */
  89. @interface KSYGPUYUVInput : KSYGPUPicInput
  90. @end