DYT/Tool/OpenSceneGraph-3.6.5/include/OpenEXR/openexr_chunkio.h

196 lines
5.3 KiB
C
Raw Permalink Normal View History

2024-12-24 23:49:36 +00:00
/*
** SPDX-License-Identifier: BSD-3-Clause
** Copyright Contributors to the OpenEXR Project.
*/
#ifndef OPENEXR_CORE_CHUNKIO_H
#define OPENEXR_CORE_CHUNKIO_H
#include "openexr_part.h"
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/** @file */
/** @brief Retrieve the chunk table offset for the part in question.
*/
EXR_EXPORT exr_result_t exr_get_chunk_table_offset (
exr_const_context_t ctxt, int part_index, uint64_t* chunk_offset_out);
/**
* Struct describing raw data information about a chunk.
*
* A chunk is the generic term for a pixel data block in an EXR file,
* as described in the OpenEXR File Layout documentation. This is
* common between all different forms of data that can be stored.
*/
typedef struct
{
int32_t idx;
/** For tiles, this is the tilex; for scans it is the x. */
int32_t start_x;
/** For tiles, this is the tiley; for scans it is the scanline y. */
int32_t start_y;
int32_t height; /**< For this chunk. */
int32_t width; /**< For this chunk. */
uint8_t level_x; /**< For tiled files. */
uint8_t level_y; /**< For tiled files. */
uint8_t type;
uint8_t compression;
uint64_t data_offset;
uint64_t packed_size;
uint64_t unpacked_size;
uint64_t sample_count_data_offset;
uint64_t sample_count_table_size;
} exr_chunk_info_t;
/**************************************/
/** initialize chunk info with the default values from the specified part
*
* The 'x' and 'y' parameters are used to indicate the starting position
* of the chunk being initialized. This does not perform any I/O to validate
* and so the values are only indicative. (but can be used to do things
* like compress / decompress a chunk without having a file to actually
* read
*/
EXR_EXPORT
exr_result_t exr_chunk_default_initialize (
exr_context_t ctxt, int part_index,
const exr_attr_box2i_t *box,
int levelx, int levely,
exr_chunk_info_t* cinfo);
/**************************************/
EXR_EXPORT
exr_result_t exr_read_scanline_chunk_info (
exr_const_context_t ctxt, int part_index, int y, exr_chunk_info_t* cinfo);
EXR_EXPORT
exr_result_t exr_read_tile_chunk_info (
exr_const_context_t ctxt,
int part_index,
int tilex,
int tiley,
int levelx,
int levely,
exr_chunk_info_t* cinfo);
/** Read the packed data block for a chunk.
*
* This assumes that the buffer pointed to by @p packed_data is
* large enough to hold the chunk block info packed_size bytes.
*/
EXR_EXPORT
exr_result_t exr_read_chunk (
exr_const_context_t ctxt,
int part_index,
const exr_chunk_info_t* cinfo,
void* packed_data);
/**
* Read chunk for deep data.
*
* This allows one to read the packed data, the sample count data, or both.
* \c exr_read_chunk also works to read deep data packed data,
* but this is a routine to get the sample count table and the packed
* data in one go, or if you want to pre-read the sample count data,
* you can get just that buffer.
*/
EXR_EXPORT
exr_result_t exr_read_deep_chunk (
exr_const_context_t ctxt,
int part_index,
const exr_chunk_info_t* cinfo,
void* packed_data,
void* sample_data);
/**************************************/
/** Initialize a \c exr_chunk_info_t structure when encoding scanline
* data (similar to read but does not do anything with a chunk
* table).
*/
EXR_EXPORT
exr_result_t exr_write_scanline_chunk_info (
exr_context_t ctxt, int part_index, int y, exr_chunk_info_t* cinfo);
/** Initialize a \c exr_chunk_info_t structure when encoding tiled data
* (similar to read but does not do anything with a chunk table).
*/
EXR_EXPORT
exr_result_t exr_write_tile_chunk_info (
exr_context_t ctxt,
int part_index,
int tilex,
int tiley,
int levelx,
int levely,
exr_chunk_info_t* cinfo);
/**
* @p y must the appropriate starting y for the specified chunk.
*/
EXR_EXPORT
exr_result_t exr_write_scanline_chunk (
exr_context_t ctxt,
int part_index,
int y,
const void* packed_data,
uint64_t packed_size);
/**
* @p y must the appropriate starting y for the specified chunk.
*/
EXR_EXPORT
exr_result_t exr_write_deep_scanline_chunk (
exr_context_t ctxt,
int part_index,
int y,
const void* packed_data,
uint64_t packed_size,
uint64_t unpacked_size,
const void* sample_data,
uint64_t sample_data_size);
EXR_EXPORT
exr_result_t exr_write_tile_chunk (
exr_context_t ctxt,
int part_index,
int tilex,
int tiley,
int levelx,
int levely,
const void* packed_data,
uint64_t packed_size);
EXR_EXPORT
exr_result_t exr_write_deep_tile_chunk (
exr_context_t ctxt,
int part_index,
int tilex,
int tiley,
int levelx,
int levely,
const void* packed_data,
uint64_t packed_size,
uint64_t unpacked_size,
const void* sample_data,
uint64_t sample_data_size);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* OPENEXR_CORE_CHUNKIO_H */