我有一個攝像頭會話,我從緩衝區採取圖片:製作隊列線程安全
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
//rotate image 90°
ciImage = [ciImage imageByApplyingTransform:CGAffineTransformMakeRotation(-M_PI/2.0)];
}
,我在圖像上應用過濾器,我希望它應用在另一個隊列過濾器,它不是線程安全的,所以如果我把圖像加快,它會將圖像混合在一起(50/50從左到右,我認爲),但我試圖使它線程安全,它不會工作使用NSLock或NSRecursiveLock,因爲它會將圖像混合在一起。
dispatch_async(filterQueue, ^{
CIImage *scaleImage = [CIFilter filterWithName:@"CILanczosScaleTransform" keysAndValues:kCIInputImageKey, ciImage, @"inputScale", [NSNumber numberWithFloat:0.5], nil].outputImage;
CGImageRef cgImage = [imageContext createCGImage:scaleImage fromRect:scaleImage.extent];
[self.pictureArray addObject:[UIImage imageWithCGImage:cgImage]];
CGImageRelease(cgImage);
});
有人能幫助我嗎?我在如何使代碼線程安全
圖像融合這樣沒有多少知識:http://i.stack.imgur.com/wjrIl.png
不,它不工作:([圖像混合像這樣:](http://i.stack.imgur.com/wjrIl。png) –
嘗試使用dispatch_sync強制執行塊的順序 –
您的filterQueue是否爲併發隊列?你可以嘗試使用一個串行隊列。 –