Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c

Issue 589243004: Update openjpeg (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Update to openjpeg r2891 Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * The copyright in this software is being made available under the 2-clauses 2 * The copyright in this software is being made available under the 2-clauses
3 * BSD License, included below. This software may be subject to other third 3 * BSD License, included below. This software may be subject to other third
4 * party and contributor rights, including patent rights, and no such rights 4 * party and contributor rights, including patent rights, and no such rights
5 * are granted under this license. 5 * are granted under this license.
6 * 6 *
7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8 * Copyright (c) 2002-2014, Professor Benoit Macq 8 * Copyright (c) 2002-2014, Professor Benoit Macq
9 * Copyright (c) 2001-2003, David Janssens 9 * Copyright (c) 2001-2003, David Janssens
10 * Copyright (c) 2002-2003, Yannick Verschueren 10 * Copyright (c) 2002-2003, Yannick Verschueren
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 { 211 {
212 OPJ_BYTE *l_current_data = p_dest; 212 OPJ_BYTE *l_current_data = p_dest;
213 OPJ_UINT32 l_nb_bytes = 0; 213 OPJ_UINT32 l_nb_bytes = 0;
214 OPJ_UINT32 compno; 214 OPJ_UINT32 compno;
215 OPJ_UINT32 poc; 215 OPJ_UINT32 poc;
216 opj_pi_iterator_t *l_pi = 00; 216 opj_pi_iterator_t *l_pi = 00;
217 opj_pi_iterator_t *l_current_pi = 00; 217 opj_pi_iterator_t *l_current_pi = 00;
218 opj_image_t *l_image = p_t2->image; 218 opj_image_t *l_image = p_t2->image;
219 opj_cp_t *l_cp = p_t2->cp; 219 opj_cp_t *l_cp = p_t2->cp;
220 opj_tcp_t *l_tcp = &l_cp->tcps[p_tile_no]; 220 opj_tcp_t *l_tcp = &l_cp->tcps[p_tile_no];
221 OPJ_UINT32 pocno = l_cp->m_specific_param.m_enc.m_cinema == OPJ_CINEMA4K _24? 2: 1; 221 OPJ_UINT32 pocno = (l_cp->rsiz == OPJ_PROFILE_CINEMA_4K)? 2: 1;
222 OPJ_UINT32 l_max_comp = l_cp->m_specific_param.m_enc.m_max_comp_size > 0 ? l_image->numcomps : 1; 222 OPJ_UINT32 l_max_comp = l_cp->m_specific_param.m_enc.m_max_comp_size > 0 ? l_image->numcomps : 1;
223 OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1; 223 OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1;
224 224
225 l_pi = opj_pi_initialise_encode(l_image, l_cp, p_tile_no, p_t2_mode); 225 l_pi = opj_pi_initialise_encode(l_image, l_cp, p_tile_no, p_t2_mode);
226 if (!l_pi) { 226 if (!l_pi) {
227 return OPJ_FALSE; 227 return OPJ_FALSE;
228 } 228 }
229 229
230 * p_data_written = 0; 230 * p_data_written = 0;
231 231
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 /** 470 /**
471 * Creates a Tier 2 handle 471 * Creates a Tier 2 handle
472 * 472 *
473 * @param p_image Source or destination image 473 * @param p_image Source or destination image
474 * @param p_cp Image coding parameters. 474 * @param p_cp Image coding parameters.
475 * @return a new T2 handle if successful, NULL otherwise. 475 * @return a new T2 handle if successful, NULL otherwise.
476 */ 476 */
477 opj_t2_t* opj_t2_create(opj_image_t *p_image, opj_cp_t *p_cp) 477 opj_t2_t* opj_t2_create(opj_image_t *p_image, opj_cp_t *p_cp)
478 { 478 {
479 /* create the t2 structure */ 479 /* create the t2 structure */
480 opj_t2_t *l_t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t)); 480 opj_t2_t *l_t2 = (opj_t2_t*)opj_calloc(1,sizeof(opj_t2_t));
481 if (!l_t2) { 481 if (!l_t2) {
482 return NULL; 482 return NULL;
483 } 483 }
484 memset(l_t2,0,sizeof(opj_t2_t));
485 484
486 l_t2->image = p_image; 485 l_t2->image = p_image;
487 l_t2->cp = p_cp; 486 l_t2->cp = p_cp;
488 487
489 return l_t2; 488 return l_t2;
490 } 489 }
491 490
492 void opj_t2_destroy(opj_t2_t *t2) { 491 void opj_t2_destroy(opj_t2_t *t2) {
493 if(t2) { 492 if(t2) {
494 opj_free(t2); 493 opj_free(t2);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 cblk = &prc->cblks.enc[cblkno]; 591 cblk = &prc->cblks.enc[cblkno];
593 592
594 cblk->numpasses = 0; 593 cblk->numpasses = 0;
595 opj_tgt_setvalue(prc->imsbtree, cblkno, band->nu mbps - (OPJ_INT32)cblk->numbps); 594 opj_tgt_setvalue(prc->imsbtree, cblkno, band->nu mbps - (OPJ_INT32)cblk->numbps);
596 } 595 }
597 ++band; 596 ++band;
598 } 597 }
599 } 598 }
600 599
601 bio = opj_bio_create(); 600 bio = opj_bio_create();
601 if (!bio) {
602 /* FIXME event manager error callback */
603 return OPJ_FALSE;
604 }
602 opj_bio_init_enc(bio, c, length); 605 opj_bio_init_enc(bio, c, length);
603 opj_bio_write(bio, 1, 1); /* Empty header bit */ 606 opj_bio_write(bio, 1, 1); /* Empty header bit */
604 607
605 /* Writing Packet header */ 608 /* Writing Packet header */
606 band = res->bands; 609 band = res->bands;
607 for (bandno = 0; bandno < res->numbands; ++bandno) { 610 for (bandno = 0; bandno < res->numbands; ++bandno) {
608 opj_tcd_precinct_t *prc = &band->precincts[precno]; 611 opj_tcd_precinct_t *prc = &band->precincts[precno];
609 612
610 l_nb_blocks = prc->cw * prc->ch; 613 l_nb_blocks = prc->cw * prc->ch;
611 cblk = prc->cblks.enc; 614 cblk = prc->cblks.enc;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 859
857 ++l_band; 860 ++l_band;
858 } 861 }
859 } 862 }
860 863
861 /* SOP markers */ 864 /* SOP markers */
862 865
863 if (p_tcp->csty & J2K_CP_CSTY_SOP) { 866 if (p_tcp->csty & J2K_CP_CSTY_SOP) {
864 if (p_max_length < 6) { 867 if (p_max_length < 6) {
865 /* TODO opj_event_msg(p_t2->cinfo->event_mgr, EVT_WARNIN G, "Not enough space for expected SOP marker\n"); */ 868 /* TODO opj_event_msg(p_t2->cinfo->event_mgr, EVT_WARNIN G, "Not enough space for expected SOP marker\n"); */
866 printf("Not enough space for expected SOP marker\n"); 869 fprintf(stderr, "Not enough space for expected SOP marke r\n");
867 } else if ((*l_current_data) != 0xff || (*(l_current_data + 1) ! = 0x91)) { 870 } else if ((*l_current_data) != 0xff || (*(l_current_data + 1) ! = 0x91)) {
868 /* TODO opj_event_msg(p_t2->cinfo->event_mgr, EVT_WARNIN G, "Expected SOP marker\n"); */ 871 /* TODO opj_event_msg(p_t2->cinfo->event_mgr, EVT_WARNIN G, "Expected SOP marker\n"); */
869 printf("Expected SOP marker\n"); 872 fprintf(stderr, "Warning: expected SOP marker\n");
870 fprintf(stderr, "Error : expected SOP marker\n");
871 } else { 873 } else {
872 l_current_data += 6; 874 l_current_data += 6;
873 } 875 }
874 876
875 /** TODO : check the Nsop value */ 877 /** TODO : check the Nsop value */
876 } 878 }
877 879
878 /* 880 /*
879 When the marker PPT/PPM is used the packet header are store in PPT/PPM m arker 881 When the marker PPT/PPM is used the packet header are store in PPT/PPM m arker
880 This part deal with this caracteristic 882 This part deal with this caracteristic
(...skipping 29 matching lines...) Expand all
910 l_present = opj_bio_read(l_bio, 1); 912 l_present = opj_bio_read(l_bio, 1);
911 JAS_FPRINTF(stderr, "present=%d \n", l_present ); 913 JAS_FPRINTF(stderr, "present=%d \n", l_present );
912 if (!l_present) { 914 if (!l_present) {
913 /* TODO MSD: no test to control the output of this function*/ 915 /* TODO MSD: no test to control the output of this function*/
914 opj_bio_inalign(l_bio); 916 opj_bio_inalign(l_bio);
915 l_header_data += opj_bio_numbytes(l_bio); 917 l_header_data += opj_bio_numbytes(l_bio);
916 opj_bio_destroy(l_bio); 918 opj_bio_destroy(l_bio);
917 919
918 /* EPH markers */ 920 /* EPH markers */
919 if (p_tcp->csty & J2K_CP_CSTY_EPH) { 921 if (p_tcp->csty & J2K_CP_CSTY_EPH) {
920 if (p_max_length < 2) { 922 if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data - *l_header_data_start)) < 2U) {
921 fprintf(stderr, "Not enough space for expected E PH marker\n"); 923 fprintf(stderr, "Not enough space for expected E PH marker\n");
922 } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) { 924 } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
923 fprintf(stderr, "Error : expected EPH marker\n") ; 925 fprintf(stderr, "Error : expected EPH marker\n") ;
924 } else { 926 } else {
925 l_header_data += 2; 927 l_header_data += 2;
926 } 928 }
927 } 929 }
928 930
929 l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_st art); 931 l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_st art);
930 *l_modified_length_ptr -= l_header_length; 932 *l_modified_length_ptr -= l_header_length;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 if (!opj_bio_inalign(l_bio)) { 1040 if (!opj_bio_inalign(l_bio)) {
1039 opj_bio_destroy(l_bio); 1041 opj_bio_destroy(l_bio);
1040 return OPJ_FALSE; 1042 return OPJ_FALSE;
1041 } 1043 }
1042 1044
1043 l_header_data += opj_bio_numbytes(l_bio); 1045 l_header_data += opj_bio_numbytes(l_bio);
1044 opj_bio_destroy(l_bio); 1046 opj_bio_destroy(l_bio);
1045 1047
1046 /* EPH markers */ 1048 /* EPH markers */
1047 if (p_tcp->csty & J2K_CP_CSTY_EPH) { 1049 if (p_tcp->csty & J2K_CP_CSTY_EPH) {
1048 if (p_max_length < 2) { 1050 if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data - *l_he ader_data_start)) < 2U) {
1049 fprintf(stderr, "Not enough space for expected EPH marke r\n"); 1051 fprintf(stderr, "Not enough space for expected EPH marke r\n");
1050 } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) { 1052 } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
1051 /* TODO opj_event_msg(t2->cinfo->event_mgr, EVT_ERROR, " Expected EPH marker\n"); */ 1053 /* TODO opj_event_msg(t2->cinfo->event_mgr, EVT_ERROR, " Expected EPH marker\n"); */
1052 fprintf(stderr, "Error : expected EPH marker\n"); 1054 fprintf(stderr, "Error : expected EPH marker\n");
1053 } else { 1055 } else {
1054 l_header_data += 2; 1056 l_header_data += 2;
1055 } 1057 }
1056 } 1058 }
1057 1059
1058 l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start); 1060 l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 else { 1124 else {
1123 l_seg = &l_cblk->segs[l_cblk->numsegs - 1]; 1125 l_seg = &l_cblk->segs[l_cblk->numsegs - 1];
1124 1126
1125 if (l_seg->numpasses == l_seg->maxpasses) { 1127 if (l_seg->numpasses == l_seg->maxpasses) {
1126 ++l_seg; 1128 ++l_seg;
1127 ++l_cblk->numsegs; 1129 ++l_cblk->numsegs;
1128 } 1130 }
1129 } 1131 }
1130 1132
1131 do { 1133 do {
1132 if (l_current_data + l_seg->newlen > p_src_data + p_max_length) { 1134 /* Check possible overflow (on l_current_data on ly, assumes input args already checked) then size */
1135 if (((OPJ_SIZE_T)(l_current_data + l_seg->newlen ) < (OPJ_SIZE_T)l_current_data) || (l_current_data + l_seg->newlen > p_src_data + p_max_length)) {
1133 fprintf(stderr, "read: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n", 1136 fprintf(stderr, "read: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
1134 l_seg->newlen, p_max_length, cbl kno, p_pi->precno, bandno, p_pi->resno, p_pi->compno); 1137 l_seg->newlen, p_max_length, cbl kno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
1135 return OPJ_FALSE; 1138 return OPJ_FALSE;
1136 } 1139 }
1137 1140
1138 #ifdef USE_JPWL 1141 #ifdef USE_JPWL
1139 /* we need here a j2k handle to verify if making a check to 1142 /* we need here a j2k handle to verify if making a check to
1140 the validity of cblocks parameters is selected from user (-W) */ 1143 the validity of cblocks parameters is selected from user (-W) */
1141 1144
1142 /* let's check that we are not exceeding */ 1145 /* let's check that we are not exceeding */
1143 if ((l_cblk->len + l_seg->newlen) > 8192) { 1146 if ((l_cblk->len + l_seg->newlen) > 8192) {
1144 opj_event_msg(p_t2->cinfo, EVT_WARNING, 1147 opj_event_msg(p_t2->cinfo, EVT_WARNING,
1145 "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n", 1148 "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
1146 l_seg->newlen, cblkno, p_pi->pre cno, bandno, p_pi->resno, p_pi->compno); 1149 l_seg->newlen, cblkno, p_pi->pre cno, bandno, p_pi->resno, p_pi->compno);
1147 if (!JPWL_ASSUME) { 1150 if (!JPWL_ASSUME) {
1148 opj_event_msg(p_t2->cinfo, EVT_E RROR, "JPWL: giving up\n"); 1151 opj_event_msg(p_t2->cinfo, EVT_E RROR, "JPWL: giving up\n");
1149 return OPJ_FALSE; 1152 return OPJ_FALSE;
1150 } 1153 }
1151 l_seg->newlen = 8192 - l_cblk->len; 1154 l_seg->newlen = 8192 - l_cblk->len;
1152 opj_event_msg(p_t2->cinfo, EVT_WARNING, " - truncating segment to %d\n", l_seg->newlen); 1155 opj_event_msg(p_t2->cinfo, EVT_WARNING, " - truncating segment to %d\n", l_seg->newlen);
1153 break; 1156 break;
1154 }; 1157 };
1155 1158
1156 #endif /* USE_JPWL */ 1159 #endif /* USE_JPWL */
1160 /* Check possible overflow on size */
1161 if ((l_cblk->data_current_size + l_seg->newlen) < l_cblk->data_current_size) {
1162 fprintf(stderr, "read: segment too long (%d) with current size (%d > %d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
1163 l_seg->newlen, l_cblk->data_curr ent_size, 0xFFFFFFFF - l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
1164 return OPJ_FALSE;
1165 }
1157 /* Check if the cblk->data have allocated enough memory */ 1166 /* Check if the cblk->data have allocated enough memory */
1158 if ((l_cblk->data_current_size + l_seg->newlen) > l_cblk->data_max_size) { 1167 if ((l_cblk->data_current_size + l_seg->newlen) > l_cblk->data_max_size) {
1159 OPJ_BYTE* new_cblk_data = (OPJ_BYTE*) opj_re alloc(l_cblk->data, l_cblk->data_current_size + l_seg->newlen); 1168 OPJ_BYTE* new_cblk_data = (OPJ_BYTE*) opj_re alloc(l_cblk->data, l_cblk->data_current_size + l_seg->newlen);
1160 if(! new_cblk_data) { 1169 if(! new_cblk_data) {
1161 opj_free(l_cblk->data); 1170 opj_free(l_cblk->data);
1171 l_cblk->data = NULL;
1162 l_cblk->data_max_size = 0; 1172 l_cblk->data_max_size = 0;
1163 /* opj_event_msg(p_manager, EVT_ERROR, " Not enough memory to realloc code block cata!\n"); */ 1173 /* opj_event_msg(p_manager, EVT_ERROR, " Not enough memory to realloc code block cata!\n"); */
1164 return OPJ_FALSE; 1174 return OPJ_FALSE;
1165 } 1175 }
1166 l_cblk->data_max_size = l_cblk->data_current _size + l_seg->newlen; 1176 l_cblk->data_max_size = l_cblk->data_current _size + l_seg->newlen;
1167 l_cblk->data = new_cblk_data; 1177 l_cblk->data = new_cblk_data;
1168 } 1178 }
1169 1179
1170 memcpy(l_cblk->data + l_cblk->data_current_size, l_current_data, l_seg->newlen); 1180 memcpy(l_cblk->data + l_cblk->data_current_size, l_current_data, l_seg->newlen);
1171 1181
(...skipping 18 matching lines...) Expand all
1190 1200
1191 l_cblk->real_num_segs = l_cblk->numsegs; 1201 l_cblk->real_num_segs = l_cblk->numsegs;
1192 ++l_cblk; 1202 ++l_cblk;
1193 } /* next code_block */ 1203 } /* next code_block */
1194 1204
1195 ++l_band; 1205 ++l_band;
1196 } 1206 }
1197 1207
1198 *(p_data_read) = (OPJ_UINT32)(l_current_data - p_src_data); 1208 *(p_data_read) = (OPJ_UINT32)(l_current_data - p_src_data);
1199 1209
1210
1200 return OPJ_TRUE; 1211 return OPJ_TRUE;
1201 } 1212 }
1202 1213
1203 OPJ_BOOL opj_t2_skip_packet_data( opj_t2_t* p_t2, 1214 OPJ_BOOL opj_t2_skip_packet_data( opj_t2_t* p_t2,
1204 opj_tcd_tile_t *p_tile, 1215 opj_tcd_tile_t *p_tile,
1205 opj_pi_iterator_t *p_pi, 1216 opj_pi_iterator_t *p_pi,
1206 OPJ_UINT32 * p_data_read, 1217 OPJ_UINT32 * p_data_read,
1207 OPJ_UINT32 p_max_length, 1218 OPJ_UINT32 p_max_length,
1208 opj_packet_info_t *pack_info) 1219 opj_packet_info_t *pack_info)
1209 { 1220 {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 seg->maxpasses = 10; 1346 seg->maxpasses = 10;
1336 } else { 1347 } else {
1337 seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1; 1348 seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1;
1338 } 1349 }
1339 } else { 1350 } else {
1340 seg->maxpasses = 109; 1351 seg->maxpasses = 109;
1341 } 1352 }
1342 1353
1343 return OPJ_TRUE; 1354 return OPJ_TRUE;
1344 } 1355 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t1.c ('k') | core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/tcd.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698