1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright (c) 1999-2000 Image Power, Inc. and the University of
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *   British Columbia.
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright (c) 2001-2002 Michael David Adams.
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * All rights reserved.
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* __START_OF_JASPER_LICENSE__
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * JasPer License Version 2.0
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright (c) 2001-2006 Michael David Adams
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright (c) 1999-2000 Image Power, Inc.
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright (c) 1999-2000 The University of British Columbia
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * All rights reserved.
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Permission is hereby granted, free of charge, to any person (the
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * "User") obtaining a copy of this software and associated documentation
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * files (the "Software"), to deal in the Software without restriction,
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * including without limitation the rights to use, copy, modify, merge,
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * publish, distribute, and/or sell copies of the Software, and to permit
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * persons to whom the Software is furnished to do so, subject to the
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * following conditions:
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 1.  The above copyright notices and this permission notice (which
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * includes the disclaimer below) shall be included in all copies or
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * substantial portions of the Software.
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 2.  The name of a copyright holder shall not be used to endorse or
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * promote products derived from the Software without specific prior
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * written permission.
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * LICENSE.  NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * THIS DISCLAIMER.  THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  IN NO
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  NO ASSURANCES ARE
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * PROPERTY RIGHTS OR OTHERWISE.  AS A CONDITION TO EXERCISING THE RIGHTS
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY.  THE SOFTWARE
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * RISK ACTIVITIES").  THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * __END_OF_JASPER_LICENSE__
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * JPEG-2000 Code Stream Library
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * $Id: jpc_cs.h,v 1.2 2008-05-26 09:40:52 vp153 Exp $
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#ifndef JPC_CS_H
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_CS_H
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/******************************************************************************\
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Includes.
75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\******************************************************************************/
76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "jasper/jas_image.h"
78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "jasper/jas_stream.h"
79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "jpc_cod.h"
81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/******************************************************************************\
83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Constants and Types.
84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\******************************************************************************/
85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The maximum number of resolution levels. */
87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MAXRLVLS	33
88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The maximum number of bands. */
90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MAXBANDS	(3 * JPC_MAXRLVLS + 1)
91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The maximum number of layers. */
93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MAXLYRS	16384
94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Code stream.
97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Code stream states.
101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Initial. */
104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_CS_INIT	0
105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Main header. */
106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_CS_MHDR	1
107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Tile-part header. */
108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_CS_THDR	2
109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Main trailer. */
110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_CS_MTLR	3
111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Tile-part data. */
112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_CS_TDATA	4
113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Unfortunately, the code stream syntax was not designed in such a way that
116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * any given marker segment can be correctly decoded without additional state
117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * derived from previously decoded marker segments.
118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * For example, a RGN/COC/QCC marker segment cannot be decoded unless the
119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * number of components is known.
120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Code stream state information.
124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of components. */
129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t numcomps;
130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_cstate_t;
132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* SOT marker segment parameters.
135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The tile number. */
140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t tileno;
141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The combined length of the marker segment and its auxilary data
143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      (i.e., packet data). */
144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t len;
145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The tile-part instance. */
147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t partno;
148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of tile-parts. */
150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t numparts;
151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_sot_t;
153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* SIZ marker segment parameters.
156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Per component information. */
159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The precision of the samples. */
163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t prec;
164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The signedness of the samples. */
166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t sgnd;
167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The horizontal separation of samples with respect to the reference
169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      grid. */
170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t hsamp;
171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The vertical separation of samples with respect to the reference
173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      grid. */
174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t vsamp;
175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_sizcomp_t;
177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* SIZ marker segment parameters. */
179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The code stream capabilities. */
183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t caps;
184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The width of the image in units of the reference grid. */
186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t width;
187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The height of the image in units of the reference grid. */
189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t height;
190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The horizontal offset from the origin of the reference grid to the
192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      left side of the image area. */
193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t xoff;
194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The vertical offset from the origin of the reference grid to the
196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      top side of the image area. */
197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t yoff;
198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The nominal width of a tile in units of the reference grid. */
200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t tilewidth;
201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The nominal height of a tile in units of the reference grid. */
203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t tileheight;
204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The horizontal offset from the origin of the reference grid to the
206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      left side of the first tile. */
207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t tilexoff;
208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The vertical offset from the origin of the reference grid to the
210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      top side of the first tile. */
211793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t tileyoff;
212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of components. */
214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t numcomps;
215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The per-component information. */
217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_sizcomp_t *comps;
218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_siz_t;
220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
222793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* COD marker segment parameters.
223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Coding style constants.
227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Precincts may be used. */
230793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_PRT	0x01
231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* SOP marker segments may be used. */
232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_SOP	0x02
233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* EPH marker segments may be used. */
234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_EPH	0x04
235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Progression order constants.
238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Layer-resolution-component-precinct progressive
241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  (i.e., progressive by fidelity). */
242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_LRCPPRG	0
243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Resolution-layer-component-precinct progressive
244793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  (i.e., progressive by resolution). */
245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_RLCPPRG	1
246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Resolution-precinct-component-layer progressive. */
247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_RPCLPRG	2
248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Precinct-component-resolution-layer progressive. */
249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_PCRLPRG	3
250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Component-position-resolution-layer progressive. */
251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_CPRLPRG	4
252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
253793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
254793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Code block style constants.
255793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
256793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
257793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_LAZY	0x01 /* Selective arithmetic coding bypass. */
258793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_RESET	0x02 /* Reset context probabilities. */
259793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_TERMALL	0x04 /* Terminate all coding passes. */
260793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_VSC		0x08 /* Vertical stripe causal context formation. */
261793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_PTERM	0x10 /* Predictable termination. */
262793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_SEGSYM	0x20 /* Use segmentation symbols. */
263793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
264793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Transform constants. */
265793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_INS	0x00 /* Irreversible 9/7. */
266793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_RFT	0x01 /* Reversible 5/3. */
267793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
268793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Multicomponent transform constants. */
269793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_NOMCT	0x00 /* No multicomponent transform. */
270793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COD_MCT		0x01 /* Multicomponent transform. */
271793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
272793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Get the code block size value from the code block size exponent. */
273793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_CBLKSIZEEXPN(x)		((x) - 2)
274793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Get the code block size exponent from the code block size value. */
275793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COX_GETCBLKSIZEEXPN(x)	((x) + 2)
276793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
277793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Per resolution-level information. */
278793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
279793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
280793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
281793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The packet partition width. */
282793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t parwidthval;
283793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
284793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The packet partition height. */
285793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t parheightval;
286793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
287793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_coxrlvl_t;
288793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
289793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Per component information. */
290793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
291793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
292793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
293793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The coding style. */
294793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t csty;
295793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
296793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of decomposition levels. */
297793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t numdlvls;
298793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
299793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The nominal code block width specifier. */
300793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t cblkwidthval;
301793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
302793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The nominal code block height specifier. */
303793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t cblkheightval;
304793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
305793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The style of coding passes. */
306793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t cblksty;
307793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
308793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The QMFB employed. */
309793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t qmfbid;
310793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
311793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of resolution levels. */
312793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int numrlvls;
313793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
314793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The per-resolution-level information. */
315793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_coxrlvl_t rlvls[JPC_MAXRLVLS];
316793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
317793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_coxcp_t;
318793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
319793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* COD marker segment parameters. */
320793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
321793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
322793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
323793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The general coding style. */
324793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t csty;
325793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
326793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The progression order. */
327793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t prg;
328793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
329793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of layers. */
330793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t numlyrs;
331793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
332793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The multicomponent transform. */
333793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t mctrans;
334793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
335793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Component-related parameters. */
336793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_coxcp_t compparms;
337793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
338793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_cod_t;
339793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
340793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* COC marker segment parameters. */
341793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
342793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
343793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
344793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The component number. */
345793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t compno;
346793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
347793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Component-related parameters. */
348793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_coxcp_t compparms;
349793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
350793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_coc_t;
351793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
352793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
353793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* RGN marker segment parameters.
354793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
355793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
356793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The maxshift ROI style. */
357793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_RGN_MAXSHIFT	0x00
358793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
359793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
360793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
361793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The component to which the marker applies. */
362793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t compno;
363793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
364793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The ROI style. */
365793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t roisty;
366793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
367793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The ROI shift value. */
368793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t roishift;
369793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
370793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_rgn_t;
371793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
372793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
373793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* QCD/QCC marker segment parameters.
374793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
375793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
376793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
377793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Quantization style constants.
378793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
379793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
380793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_NOQNT	0 /* No quantization. */
381793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_SIQNT	1 /* Scalar quantization, implicit. */
382793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_SEQNT	2 /* Scalar quantization, explicit. */
383793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
384793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
385793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Stepsize manipulation macros.
386793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
387793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
388793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_GETEXPN(x)	((x) >> 11)
389793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_GETMANT(x)	((x) & 0x07ff)
390793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_EXPN(x)		(assert(!((x) & (~0x1f))), (((x) & 0x1f) << 11))
391793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_QCX_MANT(x)		(assert(!((x) & (~0x7ff))), ((x) & 0x7ff))
392793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
393793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Per component information. */
394793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
395793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
396793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
397793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The quantization style. */
398793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t qntsty;
399793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
400793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of step sizes. */
401793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int numstepsizes;
402793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
403793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The step sizes. */
404793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t *stepsizes;
405793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
406793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of guard bits. */
407793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t numguard;
408793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
409793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_qcxcp_t;
410793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
411793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* QCC marker segment parameters. */
412793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
413793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
414793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
415793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The component associated with this marker segment. */
416793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t compno;
417793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
418793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The parameters. */
419793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_qcxcp_t compparms;
420793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
421793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_qcc_t;
422793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
423793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* QCD marker segment parameters. */
424793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
425793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
426793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
427793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The parameters. */
428793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_qcxcp_t compparms;
429793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
430793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_qcd_t;
431793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
432793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
433793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* POD marker segment parameters.
434793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
435793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
436793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
437793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
438793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The progression order. */
439793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t prgord;
440793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
441793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The lower bound (inclusive) on the resolution level for the
442793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      progression order volume. */
443793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t rlvlnostart;
444793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
445793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The upper bound (exclusive) on the resolution level for the
446793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      progression order volume. */
447793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t rlvlnoend;
448793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
449793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The lower bound (inclusive) on the component for the progression
450793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      order volume. */
451793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t compnostart;
452793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
453793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The upper bound (exclusive) on the component for the progression
454793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      order volume. */
455793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t compnoend;
456793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
457793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The upper bound (exclusive) on the layer for the progression
458793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      order volume. */
459793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t lyrnoend;
460793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
461793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_pocpchg_t;
462793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
463793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* An alias for the above type. */
464793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef jpc_pocpchg_t jpc_pchg_t;
465793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
466793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* POC marker segment parameters. */
467793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
468793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
469793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
470793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of progression order changes. */
471793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int numpchgs;
472793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
473793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The per-progression-order-change information. */
474793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_pocpchg_t *pchgs;
475793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
476793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_poc_t;
477793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
478793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
479793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* PPM/PPT marker segment parameters.
480793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
481793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
482793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* PPM marker segment parameters. */
483793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
484793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
485793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
486793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The index. */
487793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t ind;
488793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
489793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The length. */
490793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t len;
491793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
492793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The data. */
493793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uchar *data;
494793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
495793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_ppm_t;
496793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
497793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* PPT marker segment parameters. */
498793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
499793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
500793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
501793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The index. */
502793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast8_t ind;
503793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
504793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The length. */
505793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t len;
506793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
507793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The data. */
508793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    unsigned char *data;
509793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
510793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_ppt_t;
511793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
512793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
513793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* COM marker segment parameters.
514793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
515793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
516793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*
517793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Registration IDs.
518793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
519793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
520793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COM_BIN		0x00
521793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_COM_LATIN	0x01
522793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
523793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
524793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
525793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The registration ID. */
526793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t regid;
527793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
528793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The length of the data in bytes. */
529793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t len;
530793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
531793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The data. */
532793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uchar *data;
533793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
534793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_com_t;
535793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
536793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
537793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* SOP marker segment parameters.
538793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
539793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
540793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
541793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
542793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The sequence number. */
543793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t seqno;
544793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
545793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_sop_t;
546793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
547793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
548793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* CRG marker segment parameters.
549793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
550793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
551793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Per component information. */
552793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
553793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
554793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
555793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The horizontal offset. */
556793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t hoff;
557793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
558793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The vertical offset. */
559793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t voff;
560793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
561793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_crgcomp_t;
562793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
563793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
564793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
565793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The number of components. */
566793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int numcomps;
567793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
568793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Per component information. */
569793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_crgcomp_t *comps;
570793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
571793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_crg_t;
572793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
573793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
574793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Marker segment parameters for unknown marker type.
575793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
576793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
577793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
578793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
579793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The data. */
580793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uchar *data;
581793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
582793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The length. */
583793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t len;
584793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
585793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_unk_t;
586793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
587793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
588793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Generic marker segment parameters.
589793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
590793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
591793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef union {
592793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int soc;	/* unused */
593793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_sot_t sot;
594793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int sod;	/* unused */
595793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int eoc;	/* unused */
596793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_siz_t siz;
597793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_cod_t cod;
598793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_coc_t coc;
599793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_rgn_t rgn;
600793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_qcd_t qcd;
601793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_qcc_t qcc;
602793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_poc_t poc;
603793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* jpc_plm_t plm; */
604793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* jpc_plt_t plt; */
605793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_ppm_t ppm;
606793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_ppt_t ppt;
607793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_sop_t sop;
608793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int eph;	/* unused */
609793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_com_t com;
610793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_crg_t crg;
611793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_unk_t unk;
612793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_msparms_t;
613793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
614793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**************************************\
615793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Marker segment.
616793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\**************************************/
617793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
618793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Marker segment IDs. */
619793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
620793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The smallest valid marker value. */
621793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_MIN	0xff00
622793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
623793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The largest valid marker value. */
624793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_MAX	0xffff
625793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
626793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The minimum marker value that cannot occur within packet data. */
627793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_INMIN	0xff80
628793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* The maximum marker value that cannot occur within packet data. */
629793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_INMAX	0xffff
630793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
631793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Delimiting marker segments. */
632793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_SOC	0xff4f /* Start of code stream (SOC). */
633793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_SOT	0xff90 /* Start of tile-part (SOT). */
634793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_SOD	0xff93 /* Start of data (SOD). */
635793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_EOC	0xffd9 /* End of code stream (EOC). */
636793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
637793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Fixed information marker segments. */
638793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_SIZ	0xff51 /* Image and tile size (SIZ). */
639793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
640793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Functional marker segments. */
641793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_COD	0xff52 /* Coding style default (COD). */
642793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MS_COC	0xff53 /* Coding style component (COC). */
643793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_RGN	0xff5e /* Region of interest (RGN). */
644793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MS_QCD	0xff5c /* Quantization default (QCD). */
645793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MS_QCC	0xff5d /* Quantization component (QCC). */
646793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MS_POC	0xff5f /* Progression order default (POC). */
647793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
648793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Pointer marker segments. */
649793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_TLM	0xff55 /* Tile-part lengths, main header (TLM). */
650793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_PLM	0xff57 /* Packet length, main header (PLM). */
651793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_PLT	0xff58 /* Packet length, tile-part header (PLT). */
652793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_PPM	0xff60 /* Packed packet headers, main header (PPM). */
653793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_PPT	0xff61 /* Packet packet headers, tile-part header (PPT). */
654793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
655793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* In bit stream marker segments. */
656793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_SOP	0xff91	/* Start of packet (SOP). */
657793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_EPH	0xff92	/* End of packet header (EPH). */
658793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
659793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Informational marker segments. */
660793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_CRG	0xff63 /* Component registration (CRG). */
661793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define JPC_MS_COM	0xff64 /* Comment (COM). */
662793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
663793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Forward declaration. */
664793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerstruct jpc_msops_s;
665793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
666793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Generic marker segment class. */
667793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
668793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct {
669793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
670793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The type of marker segment. */
671793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t id;
672793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
673793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The length of the marker segment. */
674793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast16_t len;
675793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
676793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The starting offset within the stream. */
677793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    uint_fast32_t off;
678793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
679793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The parameters of the marker segment. */
680793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    jpc_msparms_t parms;
681793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
682793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* The marker segment operations. */
683793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    struct jpc_msops_s *ops;
684793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
685793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_ms_t;
686793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
687793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Marker segment operations (which depend on the marker segment type). */
688793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
689793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslertypedef struct jpc_msops_s {
690793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
691793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Destroy the marker segment parameters. */
692793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void (*destroyparms)(jpc_ms_t *ms);
693793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
694793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Get the marker segment parameters from a stream. */
695793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int (*getparms)(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in);
696793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
697793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Put the marker segment parameters to a stream. */
698793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int (*putparms)(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out);
699793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
700793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    /* Dump the marker segment parameters (for debugging). */
701793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int (*dumpparms)(jpc_ms_t *ms, FILE *out);
702793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
703793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} jpc_msops_t;
704793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
705793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/******************************************************************************\
706793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler* Macros/Functions.
707793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler\******************************************************************************/
708793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
709793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Create a code-stream state object. */
710793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerjpc_cstate_t *jpc_cstate_create(void);
711793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
712793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Destroy a code-stream state object. */
713793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslervoid jpc_cstate_destroy(jpc_cstate_t *cstate);
714793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
715793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Create a marker segment. */
716793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerjpc_ms_t *jpc_ms_create(int type);
717793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
718793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Destroy a marker segment. */
719793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslervoid jpc_ms_destroy(jpc_ms_t *ms);
720793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
721793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Does a marker segment have parameters? */
722793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	JPC_MS_HASPARMS(x) \
723793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    (!((x) == JPC_MS_SOC || (x) == JPC_MS_SOD || (x) == JPC_MS_EOC || \
724793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      (x) == JPC_MS_EPH || ((x) >= 0xff30 && (x) <= 0xff3f)))
725793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
726793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Get the marker segment type. */
727793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define	jpc_ms_gettype(ms) \
728793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    ((ms)->id)
729793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
730793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Read a marker segment from a stream. */
731793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerjpc_ms_t *jpc_getms(jas_stream_t *in, jpc_cstate_t *cstate);
732793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
733793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Write a marker segment to a stream. */
734793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_putms(jas_stream_t *out, jpc_cstate_t *cstate, jpc_ms_t *ms);
735793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
736793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Copy code stream data from one stream to another. */
737793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_getdata(jas_stream_t *in, jas_stream_t *out, long n);
738793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
739793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Copy code stream data from one stream to another. */
740793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_putdata(jas_stream_t *out, jas_stream_t *in, long n);
741793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
742793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Dump a marker segment (for debugging). */
743793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslervoid jpc_ms_dump(jpc_ms_t *ms, FILE *out);
744793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
745793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Read a 8-bit unsigned integer from a stream. */
746793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_getuint8(jas_stream_t *in, uint_fast8_t *val);
747793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
748793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Read a 16-bit unsigned integer from a stream. */
749793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_getuint16(jas_stream_t *in, uint_fast16_t *val);
750793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
751793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Read a 32-bit unsigned integer from a stream. */
752793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_getuint32(jas_stream_t *in, uint_fast32_t *val);
753793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
754793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Write a 8-bit unsigned integer to a stream. */
755793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_putuint8(jas_stream_t *out, uint_fast8_t val);
756793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
757793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Write a 16-bit unsigned integer to a stream. */
758793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_putuint16(jas_stream_t *out, uint_fast16_t val);
759793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
760793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/* Write a 32-bit unsigned integer to a stream. */
761793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint jpc_putuint32(jas_stream_t *out, uint_fast32_t val);
762793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
763793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#endif
764