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;
}

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

0 ответов

Другие вопросы по тегам