2015-01-10 3 views
2

GPUImage를 사용하여 외부 액세서리에서 오는 일련의 프레임을 렌더링하는 가장 좋은 방법은 무엇입니까? 일련의 프레임을 기술적으로 UIImages 시리즈로 얻을 수있는 최상의 성능을 찾고 있지만 처리 후 외부 액세서리에서 오는 것입니다. 그러나 처리는 GPUImage가 아니지만 가능한 최상의 성능을 얻을 필요가 있습니다.GPUImage 및 외부 액세서리로 성능

+0

외장 액세서리에도 의존하지 않습니까? 좀 더 구체적일지도 모르죠? – Volker

+0

내가 찾고있는 것은 UIImage의 소스를 다루고 그 이미지를 GPUImage로 파이프하는 것이기 때문에 그다지 중요하지 않습니다. 따라서 소스는 실제로는 아무 것도 될 수 없지만 한 번에 하나의 이미지 만 GPUImage로 파이프됩니다 UIImage의 소스입니다. UIImage가 작동하지 않는다면 일련의 ARGB 또는 RGBA 바이트 배열이 될 수도 있습니다. –

+0

기기에서 어떤 형식을 사용합니까? 바이트 배열? 그것이 바이트 배열이라면'CGBitmapContextCreateWithData'를 사용하여 UIImage를 생성합니까? 마지막으로 모든 프레임이 같은 크기입니까? 그게 사실이라면 GPUImagePicture + TextureSubimage.h 카테고리를 사용하여 꽤 좋은 성능을 얻을 수 있습니다. 모든 프레임에 대해 단일 텍스처를 재사용하기 위해 GPUImage에 기여했습니다. 이렇게하면 각 프레임에 'GPUImagePicture'를 만드는 오버 헤드가 제거됩니다. 좀 더 구체적인 도움이 필요하면 – Jack

답변

0

잠시 지났기 때문에 나는 내 자신의 질문에 답할 것이라고 생각했습니다. 기본적으로 나는 GPUImageRawDataInput을 사용하여 감았습니다. 여기에 나를 위해 일한 코드 덩어리입니다 ->

unsigned char *dataBuffer = ... // 640X480X4 bytes RGBA data 

if (!initialized) { 
    initialized = true; 

    self.rawDataInput = [[GPUImageRawDataInput alloc] initWithBytes:dataBuffer 
     size:CGSizeMake(640.0f, 480.0f) pixelFormat:GPUPixelFormatRGBA]; 

    [self.imageView setTransform:CGAffineTransformMakeRotation(-M_PI_2)]; 

    [self.rawDataInput addTarget:self.imageView]; 
} 
else { 
    [self.rawDataInput updateDataFromBytes:dataBuffer size:CGSizeMake(640.0f, 480.0f)]; 
} 

[self.rawDataInput processData];