/* * JPEG 2000 image decoder * Copyright (c) 2007 Kamil Nowosad * Copyright (c) 2013 Nicolas Bertrand * Copyright (c) 2022 Caleb Etemesi * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_JPEG2000DEC_H #define AVCODEC_JPEG2000DEC_H #include "bytestream.h" #include "jpeg2000.h" #include "jpeg2000dsp.h" #define MAX_POCS 32 typedef struct Jpeg2000POCEntry { uint16_t LYEpoc; uint16_t CSpoc; uint16_t CEpoc; uint8_t RSpoc; uint8_t REpoc; uint8_t Ppoc; } Jpeg2000POCEntry; typedef struct Jpeg2000POC { Jpeg2000POCEntry poc[MAX_POCS]; int nb_poc; int is_default; } Jpeg2000POC; typedef struct Jpeg2000TilePart { uint8_t tile_index; // Tile index who refers the tile-part const uint8_t *tp_end; GetByteContext header_tpg; // bit stream of header if PPM header is used GetByteContext tpg; // bit stream in tile-part } Jpeg2000TilePart; /* RMK: For JPEG2000 DCINEMA 3 tile-parts in a tile * one per component, so tile_part elements have a size of 3 */ typedef struct Jpeg2000Tile { Jpeg2000Component *comp; uint8_t properties[4]; Jpeg2000CodingStyle codsty[4]; Jpeg2000QuantStyle qntsty[4]; Jpeg2000POC poc; Jpeg2000TilePart tile_part[32]; uint8_t has_ppt; // whether this tile has a ppt marker uint8_t *packed_headers; // contains packed headers. Used only along with PPT marker int packed_headers_size; // size in bytes of the packed headers GetByteContext packed_headers_stream; // byte context corresponding to packed headers uint16_t tp_idx; // Tile-part index int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}} } Jpeg2000Tile; typedef struct Jpeg2000DecoderContext { AVClass *class; AVCodecContext *avctx; GetByteContext g; int width, height; int image_offset_x, image_offset_y; int tile_offset_x, tile_offset_y; uint8_t cbps[4]; // bits per sample in particular components uint8_t sgnd[4]; // if a component is signed uint8_t properties[4]; uint8_t has_ppm; uint8_t *packed_headers; // contains packed headers. Used only along with PPM marker int packed_headers_size; GetByteContext packed_headers_stream; uint8_t in_tile_headers; int cdx[4], cdy[4]; int precision; int ncomponents; int colour_space; uint32_t palette[256]; int8_t pal8; int cdef[4]; int tile_width, tile_height; unsigned numXtiles, numYtiles; int maxtilelen; AVRational sar; Jpeg2000CodingStyle codsty[4]; Jpeg2000QuantStyle qntsty[4]; Jpeg2000POC poc; uint8_t roi_shift[4]; int bit_index; int curtileno; Jpeg2000Tile *tile; Jpeg2000DSPContext dsp; /*options parameters*/ int reduction_factor; } Jpeg2000DecoderContext; #endif //AVCODEC_JPEG2000DEC_H