jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c
changeset 4203 059fe9142d1c
parent 4201 b3906ffdbcd6
child 4285 aba524fe54db
equal deleted inserted replaced
4202:20061d84dd36 4203:059fe9142d1c
   674 
   674 
   675     qlen = (*env)->GetArrayLength(env, qtables);
   675     qlen = (*env)->GetArrayLength(env, qtables);
   676 #ifdef DEBUG_IIO_JPEG
   676 #ifdef DEBUG_IIO_JPEG
   677     printf("in setQTables, qlen = %d, write is %d\n", qlen, write);
   677     printf("in setQTables, qlen = %d, write is %d\n", qlen, write);
   678 #endif
   678 #endif
       
   679     if (qlen > NUM_QUANT_TBLS) {
       
   680         /* Ignore extra qunterization tables. */
       
   681         qlen = NUM_QUANT_TBLS;
       
   682     }
   679     for (i = 0; i < qlen; i++) {
   683     for (i = 0; i < qlen; i++) {
   680         table = (*env)->GetObjectArrayElement(env, qtables, i);
   684         table = (*env)->GetObjectArrayElement(env, qtables, i);
   681         qdata = (*env)->GetObjectField(env, table, JPEGQTable_tableID);
   685         qdata = (*env)->GetObjectField(env, table, JPEGQTable_tableID);
   682         qdataBody = (*env)->GetPrimitiveArrayCritical(env, qdata, NULL);
   686         qdataBody = (*env)->GetPrimitiveArrayCritical(env, qdata, NULL);
   683 
   687 
   725                                       JPEGHuffmanTable_lengthsID);
   729                                       JPEGHuffmanTable_lengthsID);
   726     hlensLen = (*env)->GetArrayLength(env, huffLens);
   730     hlensLen = (*env)->GetArrayLength(env, huffLens);
   727     hlensBody = (*env)->GetShortArrayElements(env,
   731     hlensBody = (*env)->GetShortArrayElements(env,
   728                                               huffLens,
   732                                               huffLens,
   729                                               NULL);
   733                                               NULL);
       
   734     if (hlensLen > 16) {
       
   735         /* Ignore extra elements of bits array. Only 16 elements can be
       
   736            stored. 0-th element is not used. (see jpeglib.h, line 107)  */
       
   737         hlensLen = 16;
       
   738     }
   730     for (i = 1; i <= hlensLen; i++) {
   739     for (i = 1; i <= hlensLen; i++) {
   731         huff_ptr->bits[i] = (UINT8)hlensBody[i-1];
   740         huff_ptr->bits[i] = (UINT8)hlensBody[i-1];
   732     }
   741     }
   733     (*env)->ReleaseShortArrayElements(env,
   742     (*env)->ReleaseShortArrayElements(env,
   734                                       huffLens,
   743                                       huffLens,
   741     hvalsLen = (*env)->GetArrayLength(env, huffValues);
   750     hvalsLen = (*env)->GetArrayLength(env, huffValues);
   742     hvalsBody = (*env)->GetShortArrayElements(env,
   751     hvalsBody = (*env)->GetShortArrayElements(env,
   743                                               huffValues,
   752                                               huffValues,
   744                                               NULL);
   753                                               NULL);
   745 
   754 
       
   755     if (hvalsLen > 256) {
       
   756         /* Ignore extra elements of hufval array. Only 256 elements
       
   757            can be stored. (see jpeglib.h, line 109)                  */
       
   758         hlensLen = 256;
       
   759     }
   746     for (i = 0; i < hvalsLen; i++) {
   760     for (i = 0; i < hvalsLen; i++) {
   747         huff_ptr->huffval[i] = (UINT8)hvalsBody[i];
   761         huff_ptr->huffval[i] = (UINT8)hvalsBody[i];
   748     }
   762     }
   749     (*env)->ReleaseShortArrayElements(env,
   763     (*env)->ReleaseShortArrayElements(env,
   750                                       huffValues,
   764                                       huffValues,
   761     jobject table;
   775     jobject table;
   762     JHUFF_TBL *huff_ptr;
   776     JHUFF_TBL *huff_ptr;
   763     j_compress_ptr comp;
   777     j_compress_ptr comp;
   764     j_decompress_ptr decomp;
   778     j_decompress_ptr decomp;
   765     jsize hlen = (*env)->GetArrayLength(env, DCHuffmanTables);
   779     jsize hlen = (*env)->GetArrayLength(env, DCHuffmanTables);
       
   780 
       
   781     if (hlen > NUM_HUFF_TBLS) {
       
   782         /* Ignore extra DC huffman tables. */
       
   783         hlen = NUM_HUFF_TBLS;
       
   784     }
   766     for (i = 0; i < hlen; i++) {
   785     for (i = 0; i < hlen; i++) {
   767         if (cinfo->is_decompressor) {
   786         if (cinfo->is_decompressor) {
   768             decomp = (j_decompress_ptr) cinfo;
   787             decomp = (j_decompress_ptr) cinfo;
   769             if (decomp->dc_huff_tbl_ptrs[i] == NULL) {
   788             if (decomp->dc_huff_tbl_ptrs[i] == NULL) {
   770                 decomp->dc_huff_tbl_ptrs[i] =
   789                 decomp->dc_huff_tbl_ptrs[i] =
   782         table = (*env)->GetObjectArrayElement(env, DCHuffmanTables, i);
   801         table = (*env)->GetObjectArrayElement(env, DCHuffmanTables, i);
   783         setHuffTable(env, huff_ptr, table);
   802         setHuffTable(env, huff_ptr, table);
   784         huff_ptr->sent_table = !write;
   803         huff_ptr->sent_table = !write;
   785     }
   804     }
   786     hlen = (*env)->GetArrayLength(env, ACHuffmanTables);
   805     hlen = (*env)->GetArrayLength(env, ACHuffmanTables);
       
   806     if (hlen > NUM_HUFF_TBLS) {
       
   807         /* Ignore extra AC huffman tables. */
       
   808         hlen = NUM_HUFF_TBLS;
       
   809     }
   787     for (i = 0; i < hlen; i++) {
   810     for (i = 0; i < hlen; i++) {
   788         if (cinfo->is_decompressor) {
   811         if (cinfo->is_decompressor) {
   789             decomp = (j_decompress_ptr) cinfo;
   812             decomp = (j_decompress_ptr) cinfo;
   790             if (decomp->ac_huff_tbl_ptrs[i] == NULL) {
   813             if (decomp->ac_huff_tbl_ptrs[i] == NULL) {
   791                 decomp->ac_huff_tbl_ptrs[i] =
   814                 decomp->ac_huff_tbl_ptrs[i] =