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] = |