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