Ich möchte einen planaren 4: 2: 0 YUV-Puffer zu einem JPEG-Bild mit Lipturbojpeg in C komprimieren, aber ich habe Probleme mit der tjCompressFromYUV()
-Funktion.libjpeg turbo tjCompressFromYUV
Dies ist mein Code:
#define PADDING 2
tjhandle tjh;
unsigned long buf_size;
unsigned char *jpegBuf = NULL;
unsigned long jpegSize;
int width = 352;
int height = 288;
int quality = 70;
unsigned char *ucp_frame;
int j;
FILE *fp = NULL;
ucp_frame = malloc(width * height * 3/2);
if (NULL == ucp_frame) {
printf("malloc error ucp_frame\n");
return 0;
}
fp = fopen("planar_352x288.raw", "rb");
if(NULL == fp) {
printf("fopen error\n");
return 0;
}
j = fread(ucp_frame, 1, width * height * 3/2, fp);
if(j != width * height * 3/2) {
printf("fread error\n");
return 0;
}
fclose(fp);
tjh = tjInitCompress();
if(NULL == tjh) {
printf("tjInitCompress error '%s'\n", tjGetErrorStr());
return 0;
}
buf_size = tjBufSizeYUV2(width, PADDING, height, TJSAMP_420);
jpegBuf = tjAlloc(buf_size);
if(tjCompressFromYUV(tjh, ucp_frame, width, PADDING, height,
TJSAMP_420, &jpegBuf, &jpegSize, quality,
TJFLAG_NOREALLOC)) {
printf("tjCompressFromYUV error '%s'\n", tjGetErrorStr());
}
Der String Fehler von tjGetErrorStr()
zurückgegeben wird "Bogus Eingangsfarbraum".
Ich habe versucht, libturbojpeg Versionen 1.4.2 und 1.4.90 zu verbinden.
Jede Hilfe geschätzt wolud,
Dank