我通过应用VideoCompositor
协议使用自定义AVVideoCompositing
。
我使用AVAsynchronousVideoCompositionRequest:sourceFrameByTrackID
来获取CVPixelBufferRef
,但看起来此函数返回了原始大小的Image。
当我尝试对其应用过滤器时,我遇到了内存问题。我认为这可能是因为图像尺寸过大。
CVPixelBufferRef resultPixels = [request sourceFrameByTrackID:request.sourceTrackIDs[0].intValue];
CIImage *sourceImage = [CIImage imageWithCVPixelBuffer:resultPixels];
sourceImage = [self.filterComplex applyFilterComplexOnCIImage:sourceImage];
sourceImage = [sourceImage imageByApplyingOrientation:[self orientationAtTransform:simpleLayerInstruction.transform]];
sourceImage = [self scaleAndResizeCIImage:sourceImage forRect:CGRectMake(0, 0, renderSize.width, renderSize.height)];
resultPixels = [self applyFilterComplexOnCIImage:sourceImage
context:self.filterRenderContext.cIContext];
[request finishWithComposedVideoFrame:resultPixels];
使用CVPixelBufferRef
时,我可以获得更小的AVAsynchronousVideoCompositionRequest:sourceFrameByTrackID
我可以先将结果pixel
调整为较小的CVPixelBufferRef
吗?
然后我可以创建一个较小的CIImage
。