xref: /aosp_15_r20/external/libjpeg-turbo/jdmainct.h (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1*dfc6aa5cSAndroid Build Coastguard Worker /*
2*dfc6aa5cSAndroid Build Coastguard Worker  * jdmainct.h
3*dfc6aa5cSAndroid Build Coastguard Worker  *
4*dfc6aa5cSAndroid Build Coastguard Worker  * This file was part of the Independent JPEG Group's software:
5*dfc6aa5cSAndroid Build Coastguard Worker  * Copyright (C) 1994-1996, Thomas G. Lane.
6*dfc6aa5cSAndroid Build Coastguard Worker  * For conditions of distribution and use, see the accompanying README.ijg
7*dfc6aa5cSAndroid Build Coastguard Worker  * file.
8*dfc6aa5cSAndroid Build Coastguard Worker  */
9*dfc6aa5cSAndroid Build Coastguard Worker 
10*dfc6aa5cSAndroid Build Coastguard Worker #define JPEG_INTERNALS
11*dfc6aa5cSAndroid Build Coastguard Worker #include "jpeglib.h"
12*dfc6aa5cSAndroid Build Coastguard Worker #include "jpegcomp.h"
13*dfc6aa5cSAndroid Build Coastguard Worker 
14*dfc6aa5cSAndroid Build Coastguard Worker 
15*dfc6aa5cSAndroid Build Coastguard Worker /* Private buffer controller object */
16*dfc6aa5cSAndroid Build Coastguard Worker 
17*dfc6aa5cSAndroid Build Coastguard Worker typedef struct {
18*dfc6aa5cSAndroid Build Coastguard Worker   struct jpeg_d_main_controller pub; /* public fields */
19*dfc6aa5cSAndroid Build Coastguard Worker 
20*dfc6aa5cSAndroid Build Coastguard Worker   /* Pointer to allocated workspace (M or M+2 row groups). */
21*dfc6aa5cSAndroid Build Coastguard Worker   JSAMPARRAY buffer[MAX_COMPONENTS];
22*dfc6aa5cSAndroid Build Coastguard Worker 
23*dfc6aa5cSAndroid Build Coastguard Worker   boolean buffer_full;          /* Have we gotten an iMCU row from decoder? */
24*dfc6aa5cSAndroid Build Coastguard Worker   JDIMENSION rowgroup_ctr;      /* counts row groups output to postprocessor */
25*dfc6aa5cSAndroid Build Coastguard Worker 
26*dfc6aa5cSAndroid Build Coastguard Worker   /* Remaining fields are only used in the context case. */
27*dfc6aa5cSAndroid Build Coastguard Worker 
28*dfc6aa5cSAndroid Build Coastguard Worker   /* These are the master pointers to the funny-order pointer lists. */
29*dfc6aa5cSAndroid Build Coastguard Worker   JSAMPIMAGE xbuffer[2];        /* pointers to weird pointer lists */
30*dfc6aa5cSAndroid Build Coastguard Worker 
31*dfc6aa5cSAndroid Build Coastguard Worker   int whichptr;                 /* indicates which pointer set is now in use */
32*dfc6aa5cSAndroid Build Coastguard Worker   int context_state;            /* process_data state machine status */
33*dfc6aa5cSAndroid Build Coastguard Worker   JDIMENSION rowgroups_avail;   /* row groups available to postprocessor */
34*dfc6aa5cSAndroid Build Coastguard Worker   JDIMENSION iMCU_row_ctr;      /* counts iMCU rows to detect image top/bot */
35*dfc6aa5cSAndroid Build Coastguard Worker } my_main_controller;
36*dfc6aa5cSAndroid Build Coastguard Worker 
37*dfc6aa5cSAndroid Build Coastguard Worker typedef my_main_controller *my_main_ptr;
38*dfc6aa5cSAndroid Build Coastguard Worker 
39*dfc6aa5cSAndroid Build Coastguard Worker 
40*dfc6aa5cSAndroid Build Coastguard Worker /* context_state values: */
41*dfc6aa5cSAndroid Build Coastguard Worker #define CTX_PREPARE_FOR_IMCU    0       /* need to prepare for MCU row */
42*dfc6aa5cSAndroid Build Coastguard Worker #define CTX_PROCESS_IMCU        1       /* feeding iMCU to postprocessor */
43*dfc6aa5cSAndroid Build Coastguard Worker #define CTX_POSTPONED_ROW       2       /* feeding postponed row group */
44*dfc6aa5cSAndroid Build Coastguard Worker 
45*dfc6aa5cSAndroid Build Coastguard Worker 
46*dfc6aa5cSAndroid Build Coastguard Worker LOCAL(void)
set_wraparound_pointers(j_decompress_ptr cinfo)47*dfc6aa5cSAndroid Build Coastguard Worker set_wraparound_pointers(j_decompress_ptr cinfo)
48*dfc6aa5cSAndroid Build Coastguard Worker /* Set up the "wraparound" pointers at top and bottom of the pointer lists.
49*dfc6aa5cSAndroid Build Coastguard Worker  * This changes the pointer list state from top-of-image to the normal state.
50*dfc6aa5cSAndroid Build Coastguard Worker  */
51*dfc6aa5cSAndroid Build Coastguard Worker {
52*dfc6aa5cSAndroid Build Coastguard Worker   my_main_ptr main_ptr = (my_main_ptr)cinfo->main;
53*dfc6aa5cSAndroid Build Coastguard Worker   int ci, i, rgroup;
54*dfc6aa5cSAndroid Build Coastguard Worker   int M = cinfo->_min_DCT_scaled_size;
55*dfc6aa5cSAndroid Build Coastguard Worker   jpeg_component_info *compptr;
56*dfc6aa5cSAndroid Build Coastguard Worker   JSAMPARRAY xbuf0, xbuf1;
57*dfc6aa5cSAndroid Build Coastguard Worker 
58*dfc6aa5cSAndroid Build Coastguard Worker   for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
59*dfc6aa5cSAndroid Build Coastguard Worker        ci++, compptr++) {
60*dfc6aa5cSAndroid Build Coastguard Worker     rgroup = (compptr->v_samp_factor * compptr->_DCT_scaled_size) /
61*dfc6aa5cSAndroid Build Coastguard Worker       cinfo->_min_DCT_scaled_size; /* height of a row group of component */
62*dfc6aa5cSAndroid Build Coastguard Worker     xbuf0 = main_ptr->xbuffer[0][ci];
63*dfc6aa5cSAndroid Build Coastguard Worker     xbuf1 = main_ptr->xbuffer[1][ci];
64*dfc6aa5cSAndroid Build Coastguard Worker     for (i = 0; i < rgroup; i++) {
65*dfc6aa5cSAndroid Build Coastguard Worker       xbuf0[i - rgroup] = xbuf0[rgroup * (M + 1) + i];
66*dfc6aa5cSAndroid Build Coastguard Worker       xbuf1[i - rgroup] = xbuf1[rgroup * (M + 1) + i];
67*dfc6aa5cSAndroid Build Coastguard Worker       xbuf0[rgroup * (M + 2) + i] = xbuf0[i];
68*dfc6aa5cSAndroid Build Coastguard Worker       xbuf1[rgroup * (M + 2) + i] = xbuf1[i];
69*dfc6aa5cSAndroid Build Coastguard Worker     }
70*dfc6aa5cSAndroid Build Coastguard Worker   }
71*dfc6aa5cSAndroid Build Coastguard Worker }
72