Я пишу код обработки видео, используя AVComposition
. Предоставляя только необходимые справочные данные, я получаю CVPixelBuffer
от API Apple, который я не контролирую. Этот буфер CVPixel содержит ранее обработанный видеокадр, поскольку они, по-видимому, перерабатываются этим Apple API, который я не контролирую. Итак, моя цель — установить для всех пикселей в CVPixelBufferRef значение [0, 0, 0, 0] (в цветовом пространстве RGBA). Я могу сделать это на процессоре с помощью этой функции:
- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer
{
CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
for( int row = 0; row < bufferHeight; row++ ) {
for( int column = 0; column < bufferWidth; column++ ) {
pixel[0] = 0;
pixel[1] = 0;
pixel[2] = 0;
pixel[3] = 0;
pixel += 4;
}
}
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
}
Есть ли способ сделать то же самое с помощью графического процессора? Кроме того, возможно ли это сделать через CoreImage? поскольку я не знаю openGL, и его настройка кажется довольно сложной.