#import "GPUImageOutput.h"

typedef enum {
    GPUPixelFormatBGRA = GL_BGRA,
    GPUPixelFormatRGBA = GL_RGBA,
    GPUPixelFormatRGB = GL_RGB
} GPUPixelFormat;

typedef enum {
    GPUPixelTypeUByte = GL_UNSIGNED_BYTE,
    GPUPixelTypeFloat = GL_FLOAT
} GPUPixelType;

@interface PGPhotoEditorRawDataInput : GPUImageOutput

- (instancetype)initWithBytes:(GLubyte *)bytesToUpload size:(CGSize)imageSize;
- (instancetype)initWithBytes:(GLubyte *)bytesToUpload size:(CGSize)imageSize pixelFormat:(GPUPixelFormat)pixelFormat;
- (instancetype)initWithBytes:(GLubyte *)bytesToUpload size:(CGSize)imageSize pixelFormat:(GPUPixelFormat)pixelFormat type:(GPUPixelType)pixelType;

@property (nonatomic, assign) GPUPixelFormat pixelFormat;
@property (nonatomic, assign) GPUPixelType   pixelType;

- (void)updateDataWithBytes:(GLubyte *)bytesToUpload size:(CGSize)imageSize;
- (void)processData;
- (void)processDataForTimestamp:(CMTime)frameTime;
- (CGSize)outputImageSize;
- (void)invalidate;

@end