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

Side by Side Diff: jdhuff.c

Issue 1258673007: Add jpeg_skip_scanlines() API to libjpeg-turbo (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@master
Patch Set: Updating google.patch Created 5 years, 4 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
« no previous file with comments | « jdcoefct.c ('k') | jdmainct.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * jdhuff.c 2 * jdhuff.c
3 * 3 *
4 * This file was part of the Independent JPEG Group's software: 4 * This file was part of the Independent JPEG Group's software:
5 * Copyright (C) 1991-1997, Thomas G. Lane. 5 * Copyright (C) 1991-1997, Thomas G. Lane.
6 * libjpeg-turbo Modifications: 6 * libjpeg-turbo Modifications:
7 * Copyright (C) 2009-2011, D. R. Commander. 7 * Copyright (C) 2009-2011, 2015, D. R. Commander.
8 * For conditions of distribution and use, see the accompanying README file. 8 * For conditions of distribution and use, see the accompanying README file.
9 * 9 *
10 * This file contains Huffman entropy decoding routines. 10 * This file contains Huffman entropy decoding routines.
11 * 11 *
12 * Much of the complexity here has to do with supporting input suspension. 12 * Much of the complexity here has to do with supporting input suspension.
13 * If the data source module demands suspension, we want to be able to back 13 * If the data source module demands suspension, we want to be able to back
14 * up to the start of the current MCU. To do this, we copy state variables 14 * up to the start of the current MCU. To do this, we copy state variables
15 * into local working storage, and update them back to the permanent 15 * into local working storage, and update them back to the permanent
16 * storage only upon successful completion of an MCU. 16 * storage only upon successful completion of an MCU.
17 */ 17 */
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 BITREAD_STATE_VARS; 554 BITREAD_STATE_VARS;
555 int blkn; 555 int blkn;
556 savable_state state; 556 savable_state state;
557 /* Outer loop handles each block in the MCU */ 557 /* Outer loop handles each block in the MCU */
558 558
559 /* Load up working state */ 559 /* Load up working state */
560 BITREAD_LOAD_STATE(cinfo,entropy->bitstate); 560 BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
561 ASSIGN_STATE(state, entropy->saved); 561 ASSIGN_STATE(state, entropy->saved);
562 562
563 for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { 563 for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
564 JBLOCKROW block = MCU_data[blkn]; 564 JBLOCKROW block = MCU_data ? MCU_data[blkn] : NULL;
565 d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn]; 565 d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn];
566 d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn]; 566 d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn];
567 register int s, k, r; 567 register int s, k, r;
568 568
569 /* Decode a single block's worth of coefficients */ 569 /* Decode a single block's worth of coefficients */
570 570
571 /* Section F.2.2.1: decode the DC coefficient difference */ 571 /* Section F.2.2.1: decode the DC coefficient difference */
572 HUFF_DECODE(s, br_state, dctbl, return FALSE, label1); 572 HUFF_DECODE(s, br_state, dctbl, return FALSE, label1);
573 if (s) { 573 if (s) {
574 CHECK_BIT_BUFFER(br_state, s, return FALSE); 574 CHECK_BIT_BUFFER(br_state, s, return FALSE);
575 r = GET_BITS(s); 575 r = GET_BITS(s);
576 s = HUFF_EXTEND(r, s); 576 s = HUFF_EXTEND(r, s);
577 } 577 }
578 578
579 if (entropy->dc_needed[blkn]) { 579 if (entropy->dc_needed[blkn]) {
580 /* Convert DC difference to actual value, update last_dc_val */ 580 /* Convert DC difference to actual value, update last_dc_val */
581 int ci = cinfo->MCU_membership[blkn]; 581 int ci = cinfo->MCU_membership[blkn];
582 s += state.last_dc_val[ci]; 582 s += state.last_dc_val[ci];
583 state.last_dc_val[ci] = s; 583 state.last_dc_val[ci] = s;
584 /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */ 584 if (block) {
585 (*block)[0] = (JCOEF) s; 585 /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
586 (*block)[0] = (JCOEF) s;
587 }
586 } 588 }
587 589
588 if (entropy->ac_needed[blkn]) { 590 if (entropy->ac_needed[blkn] && block) {
589 591
590 /* Section F.2.2.2: decode the AC coefficients */ 592 /* Section F.2.2.2: decode the AC coefficients */
591 /* Since zeroes are skipped, output area must be cleared beforehand */ 593 /* Since zeroes are skipped, output area must be cleared beforehand */
592 for (k = 1; k < DCTSIZE2; k++) { 594 for (k = 1; k < DCTSIZE2; k++) {
593 HUFF_DECODE(s, br_state, actbl, return FALSE, label2); 595 HUFF_DECODE(s, br_state, actbl, return FALSE, label2);
594 596
595 r = s >> 4; 597 r = s >> 4;
596 s &= 15; 598 s &= 15;
597 599
598 if (s) { 600 if (s) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 if (s) { 669 if (s) {
668 FILL_BIT_BUFFER_FAST 670 FILL_BIT_BUFFER_FAST
669 r = GET_BITS(s); 671 r = GET_BITS(s);
670 s = HUFF_EXTEND(r, s); 672 s = HUFF_EXTEND(r, s);
671 } 673 }
672 674
673 if (entropy->dc_needed[blkn]) { 675 if (entropy->dc_needed[blkn]) {
674 int ci = cinfo->MCU_membership[blkn]; 676 int ci = cinfo->MCU_membership[blkn];
675 s += state.last_dc_val[ci]; 677 s += state.last_dc_val[ci];
676 state.last_dc_val[ci] = s; 678 state.last_dc_val[ci] = s;
677 (*block)[0] = (JCOEF) s; 679 if (block)
680 (*block)[0] = (JCOEF) s;
678 } 681 }
679 682
680 if (entropy->ac_needed[blkn]) { 683 if (entropy->ac_needed[blkn] && block) {
681 684
682 for (k = 1; k < DCTSIZE2; k++) { 685 for (k = 1; k < DCTSIZE2; k++) {
683 HUFF_DECODE_FAST(s, l, actbl, slow_decode_mcu); 686 HUFF_DECODE_FAST(s, l, actbl, slow_decode_mcu);
684 r = s >> 4; 687 r = s >> 4;
685 s &= 15; 688 s &= 15;
686 689
687 if (s) { 690 if (s) {
688 k += r; 691 k += r;
689 FILL_BIT_BUFFER_FAST 692 FILL_BIT_BUFFER_FAST
690 r = GET_BITS(s); 693 r = GET_BITS(s);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 SIZEOF(huff_entropy_decoder)); 804 SIZEOF(huff_entropy_decoder));
802 cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; 805 cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
803 entropy->pub.start_pass = start_pass_huff_decoder; 806 entropy->pub.start_pass = start_pass_huff_decoder;
804 entropy->pub.decode_mcu = decode_mcu; 807 entropy->pub.decode_mcu = decode_mcu;
805 808
806 /* Mark tables unallocated */ 809 /* Mark tables unallocated */
807 for (i = 0; i < NUM_HUFF_TBLS; i++) { 810 for (i = 0; i < NUM_HUFF_TBLS; i++) {
808 entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; 811 entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
809 } 812 }
810 } 813 }
OLDNEW
« no previous file with comments | « jdcoefct.c ('k') | jdmainct.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698