in tjunittest.c [720:825]
static void bufSizeTest(void)
{
int w, h, i, subsamp;
void *srcBuf = NULL;
unsigned char *dstBuf = NULL;
tjhandle handle = NULL;
size_t dstSize = 0;
int numSamp = TJ_NUMSAMP;
if ((handle = tj3Init(TJINIT_COMPRESS)) == NULL)
THROW_TJ(NULL);
TRY_TJ(handle, tj3Set(handle, TJPARAM_NOREALLOC, !alloc));
if (lossless) {
TRY_TJ(handle, tj3Set(handle, TJPARAM_LOSSLESS, lossless));
TRY_TJ(handle, tj3Set(handle, TJPARAM_LOSSLESSPSV,
((psv++ - 1) % 7) + 1));
numSamp = 1;
} else
TRY_TJ(handle, tj3Set(handle, TJPARAM_QUALITY, 100));
printf("Buffer size regression test\n");
for (subsamp = 0; subsamp < numSamp; subsamp++) {
TRY_TJ(handle, tj3Set(handle, TJPARAM_SUBSAMP, subsamp));
for (w = 1; w < 48; w++) {
int maxh = (w == 1) ? 2048 : 48;
for (h = 1; h < maxh; h++) {
if (h % 100 == 0) printf("%.4d x %.4d\b\b\b\b\b\b\b\b\b\b\b", w, h);
if ((srcBuf = malloc(w * h * 4 * sampleSize)) == NULL)
THROW("Memory allocation failure");
if (!alloc || doYUV) {
if (doYUV) dstSize = tj3YUVBufSize(w, yuvAlign, h, subsamp);
else dstSize = tj3JPEGBufSize(w, h, subsamp);
if ((dstBuf = (unsigned char *)tj3Alloc(dstSize)) == NULL)
THROW("Memory allocation failure");
}
for (i = 0; i < w * h * 4; i++) {
if (random() < RAND_MAX / 2) setVal(srcBuf, i, 0);
else setVal(srcBuf, i, maxSample);
}
if (doYUV) {
TRY_TJ(handle, tj3EncodeYUV8(handle, (unsigned char *)srcBuf, w, 0,
h, TJPF_BGRX, dstBuf, yuvAlign));
} else {
if (precision == 8) {
TRY_TJ(handle, tj3Compress8(handle, (unsigned char *)srcBuf, w, 0,
h, TJPF_BGRX, &dstBuf, &dstSize));
} else if (precision == 12) {
TRY_TJ(handle, tj3Compress12(handle, (short *)srcBuf, w, 0, h,
TJPF_BGRX, &dstBuf, &dstSize));
} else {
TRY_TJ(handle, tj3Compress16(handle, (unsigned short *)srcBuf, w,
0, h, TJPF_BGRX, &dstBuf, &dstSize));
}
}
free(srcBuf); srcBuf = NULL;
if (!alloc || doYUV) {
tj3Free(dstBuf); dstBuf = NULL;
}
if ((srcBuf = malloc(h * w * 4 * sampleSize)) == NULL)
THROW("Memory allocation failure");
if (!alloc || doYUV) {
if (doYUV) dstSize = tj3YUVBufSize(h, yuvAlign, w, subsamp);
else dstSize = tj3JPEGBufSize(h, w, subsamp);
if ((dstBuf = (unsigned char *)tj3Alloc(dstSize)) == NULL)
THROW("Memory allocation failure");
}
for (i = 0; i < h * w * 4; i++) {
if (random() < RAND_MAX / 2) setVal(srcBuf, i, 0);
else setVal(srcBuf, i, maxSample);
}
if (doYUV) {
TRY_TJ(handle, tj3EncodeYUV8(handle, (unsigned char *)srcBuf, h, 0,
w, TJPF_BGRX, dstBuf, yuvAlign));
} else {
if (precision == 8) {
TRY_TJ(handle, tj3Compress8(handle, (unsigned char *)srcBuf, h, 0,
w, TJPF_BGRX, &dstBuf, &dstSize));
} else if (precision == 12) {
TRY_TJ(handle, tj3Compress12(handle, (short *)srcBuf, h, 0, w,
TJPF_BGRX, &dstBuf, &dstSize));
} else {
TRY_TJ(handle, tj3Compress16(handle, (unsigned short *)srcBuf, h,
0, w, TJPF_BGRX, &dstBuf, &dstSize));
}
}
free(srcBuf); srcBuf = NULL;
if (!alloc || doYUV) {
tj3Free(dstBuf); dstBuf = NULL;
}
}
}
}
printf("Done. \n");
bailout:
free(srcBuf);
tj3Free(dstBuf);
tj3Destroy(handle);
}