2016-03-23 34 views
0

Cでlibturbojpegを使用してプレーン4:2:0のYUVバッファをjpegイメージに圧縮したいのですが、tjCompressFromYUV()機能を使用する際に問題があります。libjpeg turbo tjCompressFromYUV

これは私のコードです:

#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()); 
} 

tjGetErrorStr()によって返されたエラー文字列が "偽の入力色空間" です。

libturbojpegバージョン1.4.2と1.4.90をリンクしようとしました。

すべてのヘルプは、それは問題が予想通り小さなテストプログラムでtjBufSizeYUV2コールが実行する、私は投稿のコードを含むプログラムであったが、[OK]を、

おかげ

答えて

0

を理解さwolud。側では

jpegBuftjBufSizeYUV2を呼び出す前に事前に割り当てられている場合、tjBufSizeYUV2に渡されたflag引数がTJFLAG_NOREALLOC、または他のjpegBuftjFree(jpegBuf);が後で呼び出された場合でも解放されません含まれている必要がありますようです注意してください。

関連する問題