我正在努力调试一个奇怪的问题。在整个 UI 停止响应触摸captureOutput:didOutputSampleBuffer:fromConnection:
之后。CVPixelBufferUnlockBaseAddress(imageBuffer,0);
相机预览有效,但我所有的按钮都停止响应,我什至添加了一个 UITapGesture 也无法正常工作。我尝试将其放入调度中,但仍然没有成功。
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
if (state != CAMERA) {
return;
}
if (self.state != CAMERA_DECODING)
{
self.state = CAMERA_DECODING;
}
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
//Lock the image buffer
CVPixelBufferLockBaseAddress(imageBuffer,0);
//Get information about the image
baseAddress = (uint8_t *)CVPixelBufferGetBaseAddressOfPlane(imageBuffer,0);
int pixelFormat = CVPixelBufferGetPixelFormatType(imageBuffer);
switch (pixelFormat) {
case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
//NSLog(@"Capture pixel format=NV12");
bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer,0);
width = bytesPerRow;//CVPixelBufferGetWidthOfPlane(imageBuffer,0);
height = CVPixelBufferGetHeightOfPlane(imageBuffer,0);
break;
case kCVPixelFormatType_422YpCbCr8:
//NSLog(@"Capture pixel format=UYUY422");
bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer,0);
width = CVPixelBufferGetWidth(imageBuffer);
height = CVPixelBufferGetHeight(imageBuffer);
int len = width*height;
int dstpos=1;
for (int i=0;i<len;i++){
baseAddress[i]=baseAddress[dstpos];
dstpos+=2;
}
break;
default:
// NSLog(@"Capture pixel format=RGB32");
break;
}
unsigned char *pResult=NULL;
int resLength = MWB_scanGrayscaleImage(baseAddress,width,height, &pResult);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);