%PDF- %PDF-
| Direktori : /usr/include/OpenEXR/ |
| Current File : //usr/include/OpenEXR/openexr_chunkio.h |
/*
** 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
/**
* Structure 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;
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.
* \ref 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 \ref 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 \ref 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 */