NSImage (RGB) в YUV с использованием libturbojpeg
Я пытаюсь преобразовать NSImage (снятое с помощью камеры FaceTime) в YUV, но пока безуспешно. Я пытался использоватьlibturbojpeg
но не может конвертировать (я имею в виду, что при отображении это просто красные, зеленые пиксели), ниже приведен код, который я использовал. Может ли кто-нибудь помочь мне исправить это. Обратите внимание, что мне не обязательно использоватьlibturbojpeg
поэтому любое другое решение, которое может работать с Objective-C, подойдет (совместное использование любого образца кода будет отличным).
- (NSData *) convertRGBNSDataToYUV:(NSData *) inputData {//here inputdata is NSData loaded from image using NSData.dataWithContentsOfFile method.
NSData *output = [[NSData alloc] init];
unsigned char *framebuffer = (unsigned char *)[inputData bytes];
int width = 1280, height=720, subsample=TJSAMP_422;
unsigned long dst_size = tjBufSizeYUV(width, height, subsample);
void *buffer;
buffer = calloc(1, dst_size);
//DLLEXPORT int tjEncodeYUV(tjhandle handle, unsigned char *srcBuf, int width,
//int pitch, int height, int pixelSize,
//unsigned char *dstBuf, int subsamp, int flags);
int pixalSize = 3;
int pitch = 0;
int flags = 0;
if (tjEncodeYUV(_compressor,framebuffer,width,pitch,height,pixalSize,buffer,subsample, flags) != 0){
NSLog(@"Error: YUV...%s",tjGetErrorStr());
} else {
NSData *data = [[NSData alloc] initWithBytes:buffer length:dst_size];
[data writeToFile:@"/Users/admin/Desktop/20200324_170708_745_IMG-1.yuv" atomically:YES];
free(buffer);
return data;
}
free(buffer);
return output;
}
Я открыт для использования любой другой библиотеки. Заранее благодарим за помощь.