小编dhe*_*nke的帖子

将GPUImage与AVVideoCompositing一起使用

我正在尝试使用两种视频的组合GPUImageAVVideoCompositing实现两个视频之间的实时色度键过滤器.这样做天真地利用CIImage imageFromCVPixelBuffer进入CGImageGPUImage出来CGImage,以CIImageCVPixelBuffer,是非常低效的,并导致记忆问题.

我注意到框架中有纹理对象,渲染目标和帧缓冲区GPUImage.我希望能够利用CVOpenGLESTextureCacheCreateTextureFromImageiOS来保持GPU上的所有内容.

我不认为我完全理解框架的内部工作原理,因为我假设我可以在一个GPUImageTextureInput对象上设置一个过滤器链然后得到过滤器renderTarget,这是一个CVPixelBufferRef.在renderTarget下面的永远是零,并呼吁imageFromCurrentFrameBuffer将产生我一个灰色的框,这是不是我的形象.

请注意,下面的示例不是色度键,而是单个视频上的简单亮度滤镜,以尝试和证明该概念.

@implementation MyCustomCompositor : NSObject <AVVideoCompositing>

- (instancetype)init
{
    self = [super init];
    if (self) {
        CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, NULL, [GPUImageContext sharedImageProcessingContext].context, NULL, &_textureCache);
    }
    return self;
}

- (NSDictionary<NSString *,id> *)requiredPixelBufferAttributesForRenderContext
{
    return @{(NSString *)kCVPixelBufferPixelFormatTypeKey : @[@(kCVPixelFormatType_32BGRA)],
             (NSString *)kCVPixelBufferOpenGLCompatibilityKey : @YES};
}

- (NSDictionary<NSString *,id> *)sourcePixelBufferAttributes
{ …
Run Code Online (Sandbox Code Playgroud)

video opengl-es ios gpuimage

5
推荐指数
1
解决办法
1527
查看次数

标签 统计

gpuimage ×1

ios ×1

opengl-es ×1

video ×1