| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C)2011 D. R. Commander. All Rights Reserved. | 2 * Copyright (C)2011-2012 D. R. Commander. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are met: | 5 * modification, are permitted provided that the following conditions are met: |
| 6 * | 6 * |
| 7 * - Redistributions of source code must retain the above copyright notice, | 7 * - Redistributions of source code must retain the above copyright notice, |
| 8 * this list of conditions and the following disclaimer. | 8 * this list of conditions and the following disclaimer. |
| 9 * - Redistributions in binary form must reproduce the above copyright notice, | 9 * - Redistributions in binary form must reproduce the above copyright notice, |
| 10 * this list of conditions and the following disclaimer in the documentation | 10 * this list of conditions and the following disclaimer in the documentation |
| 11 * and/or other materials provided with the distribution. | 11 * and/or other materials provided with the distribution. |
| 12 * - Neither the name of the libjpeg-turbo Project nor the names of its | 12 * - Neither the name of the libjpeg-turbo Project nor the names of its |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 (*env)->SetIntField(env, obj, _fid, jpegSubsamp); | 343 (*env)->SetIntField(env, obj, _fid, jpegSubsamp); |
| 344 bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegWidth", "I")); | 344 bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegWidth", "I")); |
| 345 (*env)->SetIntField(env, obj, _fid, width); | 345 (*env)->SetIntField(env, obj, _fid, width); |
| 346 bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegHeight", "I")); | 346 bailif0(_fid=(*env)->GetFieldID(env, _cls, "jpegHeight", "I")); |
| 347 (*env)->SetIntField(env, obj, _fid, height); | 347 (*env)->SetIntField(env, obj, _fid, height); |
| 348 | 348 |
| 349 bailout: | 349 bailout: |
| 350 return; | 350 return; |
| 351 } | 351 } |
| 352 | 352 |
| 353 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3BIIIII | 353 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3BIIIIIII |
| 354 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst
, | 354 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst
, |
| 355 » » jint width, jint pitch, jint height, jint pf, jint flags) | 355 » » jint x, jint y, jint width, jint pitch, jint height, jint pf, ji
nt flags) |
| 356 { | 356 { |
| 357 tjhandle handle=0; | 357 tjhandle handle=0; |
| 358 » jsize arraySize=0; | 358 » jsize arraySize=0, actualPitch; |
| 359 unsigned char *jpegBuf=NULL, *dstBuf=NULL; | 359 unsigned char *jpegBuf=NULL, *dstBuf=NULL; |
| 360 | 360 |
| 361 gethandle(); | 361 gethandle(); |
| 362 | 362 |
| 363 if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF) | 363 if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF) |
| 364 _throw("Invalid argument in decompress()"); | 364 _throw("Invalid argument in decompress()"); |
| 365 if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF) | 365 if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF) |
| 366 _throw("Mismatch between Java and C API"); | 366 _throw("Mismatch between Java and C API"); |
| 367 | 367 |
| 368 if((*env)->GetArrayLength(env, src)<jpegSize) | 368 if((*env)->GetArrayLength(env, src)<jpegSize) |
| 369 _throw("Source buffer is not large enough"); | 369 _throw("Source buffer is not large enough"); |
| 370 » arraySize=(pitch==0)? width*tjPixelSize[pf]*height:pitch*height; | 370 » actualPitch=(pitch==0)? width*tjPixelSize[pf]:pitch; |
| 371 » arraySize=(y+height-1)*actualPitch + (x+width)*tjPixelSize[pf]; |
| 371 if((*env)->GetArrayLength(env, dst)<arraySize) | 372 if((*env)->GetArrayLength(env, dst)<arraySize) |
| 372 _throw("Destination buffer is not large enough"); | 373 _throw("Destination buffer is not large enough"); |
| 373 | 374 |
| 374 bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0)); | 375 bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0)); |
| 375 bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0)); | 376 bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0)); |
| 376 | 377 |
| 377 » if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, dstBuf, width
, | 378 » if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, |
| 378 » » pitch, height, pf, flags)==-1) | 379 » » &dstBuf[y*actualPitch + x*tjPixelSize[pf]], width, pitch, height
, pf, |
| 380 » » flags)==-1) |
| 379 { | 381 { |
| 380 (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); | 382 (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); |
| 381 (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); | 383 (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); |
| 382 dstBuf=jpegBuf=NULL; | 384 dstBuf=jpegBuf=NULL; |
| 383 _throw(tjGetErrorStr()); | 385 _throw(tjGetErrorStr()); |
| 384 } | 386 } |
| 385 | 387 |
| 386 bailout: | 388 bailout: |
| 387 if(dstBuf) (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); | 389 if(dstBuf) (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); |
| 388 if(jpegBuf) (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); | 390 if(jpegBuf) (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); |
| 389 return; | 391 return; |
| 390 } | 392 } |
| 391 | 393 |
| 392 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3IIIIII | 394 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3BIIIII |
| 393 » (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst, | 395 » (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst
, |
| 394 jint width, jint pitch, jint height, jint pf, jint flags) | 396 jint width, jint pitch, jint height, jint pf, jint flags) |
| 395 { | 397 { |
| 398 Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIII
I |
| 399 (env, obj, src, jpegSize, dst, 0, 0, width, pitch, height, pf, f
lags); |
| 400 } |
| 401 |
| 402 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3IIIIIIII |
| 403 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst, |
| 404 jint x, jint y, jint width, jint stride, jint height, jint pf, j
int flags) |
| 405 { |
| 396 tjhandle handle=0; | 406 tjhandle handle=0; |
| 397 » jsize arraySize=0; | 407 » jsize arraySize=0, actualStride; |
| 398 unsigned char *jpegBuf=NULL, *dstBuf=NULL; | 408 unsigned char *jpegBuf=NULL, *dstBuf=NULL; |
| 399 | 409 |
| 400 gethandle(); | 410 gethandle(); |
| 401 | 411 |
| 402 if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF) | 412 if(pf<0 || pf>=org_libjpegturbo_turbojpeg_TJ_NUMPF) |
| 403 _throw("Invalid argument in decompress()"); | 413 _throw("Invalid argument in decompress()"); |
| 404 if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF) | 414 if(org_libjpegturbo_turbojpeg_TJ_NUMPF!=TJ_NUMPF) |
| 405 _throw("Mismatch between Java and C API"); | 415 _throw("Mismatch between Java and C API"); |
| 406 if(tjPixelSize[pf]!=sizeof(jint)) | 416 if(tjPixelSize[pf]!=sizeof(jint)) |
| 407 _throw("Pixel format must be 32-bit when decompressing to an int
eger buffer."); | 417 _throw("Pixel format must be 32-bit when decompressing to an int
eger buffer."); |
| 408 | 418 |
| 409 if((*env)->GetArrayLength(env, src)<jpegSize) | 419 if((*env)->GetArrayLength(env, src)<jpegSize) |
| 410 _throw("Source buffer is not large enough"); | 420 _throw("Source buffer is not large enough"); |
| 411 » arraySize=(pitch==0)? width*height:pitch*height; | 421 » actualStride=(stride==0)? width:stride; |
| 422 » arraySize=(y+height-1)*actualStride + x+width; |
| 412 if((*env)->GetArrayLength(env, dst)<arraySize) | 423 if((*env)->GetArrayLength(env, dst)<arraySize) |
| 413 _throw("Destination buffer is not large enough"); | 424 _throw("Destination buffer is not large enough"); |
| 414 | 425 |
| 415 bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0)); | 426 bailif0(jpegBuf=(*env)->GetPrimitiveArrayCritical(env, src, 0)); |
| 416 bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0)); | 427 bailif0(dstBuf=(*env)->GetPrimitiveArrayCritical(env, dst, 0)); |
| 417 | 428 |
| 418 » if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, dstBuf, width
, | 429 » if(tjDecompress2(handle, jpegBuf, (unsigned long)jpegSize, |
| 419 » » pitch*sizeof(jint), height, pf, flags)==-1) | 430 » » &dstBuf[(y*actualStride + x)*sizeof(int)], width, stride*sizeof(
jint), |
| 431 » » height, pf, flags)==-1) |
| 420 { | 432 { |
| 421 (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); | 433 (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); |
| 422 (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); | 434 (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); |
| 423 dstBuf=jpegBuf=NULL; | 435 dstBuf=jpegBuf=NULL; |
| 424 _throw(tjGetErrorStr()); | 436 _throw(tjGetErrorStr()); |
| 425 } | 437 } |
| 426 | 438 |
| 427 bailout: | 439 bailout: |
| 428 if(dstBuf) (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); | 440 if(dstBuf) (*env)->ReleasePrimitiveArrayCritical(env, dst, dstBuf, 0); |
| 429 if(jpegBuf) (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); | 441 if(jpegBuf) (*env)->ReleasePrimitiveArrayCritical(env, src, jpegBuf, 0); |
| 430 return; | 442 return; |
| 431 } | 443 } |
| 432 | 444 |
| 445 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
___3BI_3IIIIII |
| 446 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jintArray dst, |
| 447 jint width, jint stride, jint height, jint pf, jint flags) |
| 448 { |
| 449 Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIII
I |
| 450 (env, obj, src, jpegSize, dst, 0, 0, width, stride, height, pf,
flags); |
| 451 |
| 452 } |
| 453 |
| 433 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
ToYUV | 454 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
ToYUV |
| 434 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst
, | 455 (JNIEnv *env, jobject obj, jbyteArray src, jint jpegSize, jbyteArray dst
, |
| 435 jint flags) | 456 jint flags) |
| 436 { | 457 { |
| 437 tjhandle handle=0; | 458 tjhandle handle=0; |
| 438 unsigned char *jpegBuf=NULL, *dstBuf=NULL; | 459 unsigned char *jpegBuf=NULL, *dstBuf=NULL; |
| 439 int jpegSubsamp=-1, jpegWidth=0, jpegHeight=0; | 460 int jpegSubsamp=-1, jpegWidth=0, jpegHeight=0; |
| 440 | 461 |
| 441 gethandle(); | 462 gethandle(); |
| 442 | 463 |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 if(dstSizesi) (*env)->ReleaseIntArrayElements(env, jdstSizes, dstSizesi,
0); | 695 if(dstSizesi) (*env)->ReleaseIntArrayElements(env, jdstSizes, dstSizesi,
0); |
| 675 if(t) free(t); | 696 if(t) free(t); |
| 676 return jdstSizes; | 697 return jdstSizes; |
| 677 } | 698 } |
| 678 | 699 |
| 679 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_destroy | 700 JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_destroy |
| 680 (JNIEnv *env, jobject obj) | 701 (JNIEnv *env, jobject obj) |
| 681 { | 702 { |
| 682 Java_org_libjpegturbo_turbojpeg_TJCompressor_destroy(env, obj); | 703 Java_org_libjpegturbo_turbojpeg_TJCompressor_destroy(env, obj); |
| 683 } | 704 } |
| OLD | NEW |