Я пытаюсь преобразовать 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;
}
Я открыт использовать любую другую библиотеку. Заранее спасибо за помощь.