NSImage (RGB) для YUV с использованием libturbojpeg - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь преобразовать 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;
}

Я открыт использовать любую другую библиотеку. Заранее спасибо за помощь.

...