FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
exr.c File Reference
#include <float.h>
#include <zlib.h>
#include "libavutil/avassert.h"
#include "libavutil/common.h"
#include "libavutil/imgutils.h"
#include "libavutil/intfloat.h"
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "libavutil/color_utils.h"
#include "avcodec.h"
#include "bytestream.h"
#include "exrdsp.h"
#include "get_bits.h"
#include "internal.h"
#include "half2float.h"
#include "mathops.h"
#include "thread.h"

Go to the source code of this file.

Data Structures

struct  HuffEntry
 
struct  EXRChannel
 
struct  EXRTileAttribute
 
struct  EXRThreadData
 
struct  EXRContext
 

Macros

#define USHORT_RANGE   (1 << 16)
 
#define BITMAP_SIZE   (1 << 13)
 
#define HUF_ENCBITS   16
 
#define HUF_ENCSIZE   ((1 << HUF_ENCBITS) + 1)
 
#define SHORT_ZEROCODE_RUN   59
 
#define LONG_ZEROCODE_RUN   63
 
#define SHORTEST_LONG_RUN   (2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN)
 
#define LONGEST_LONG_RUN   (255 + SHORTEST_LONG_RUN)
 
#define NBITS   16
 
#define A_OFFSET   (1 << (NBITS - 1))
 
#define MOD_MASK   ((1 << NBITS) - 1)
 
#define OFFSET(x)   offsetof(EXRContext, x)
 
#define VD   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
 

Enumerations

enum  ExrCompr {
  EXR_RAW, EXR_RLE, EXR_ZIP1, EXR_ZIP16,
  EXR_PIZ, EXR_PXR24, EXR_B44, EXR_B44A,
  EXR_DWAA, EXR_DWAB, EXR_UNKN, EXR_RAW,
  EXR_RLE, EXR_ZIP1, EXR_ZIP16, EXR_NBCOMPR
}
 
enum  ExrPixelType {
  EXR_UINT, EXR_HALF, EXR_FLOAT, EXR_UNKNOWN,
  EXR_UINT, EXR_HALF, EXR_FLOAT, EXR_UNKNOWN
}
 
enum  ExrTileLevelMode { EXR_TILE_LEVEL_ONE, EXR_TILE_LEVEL_MIPMAP, EXR_TILE_LEVEL_RIPMAP, EXR_TILE_LEVEL_UNKNOWN }
 
enum  ExrTileLevelRound { EXR_TILE_ROUND_UP, EXR_TILE_ROUND_DOWN, EXR_TILE_ROUND_UNKNOWN }
 

Functions

static int zip_uncompress (EXRContext *s, const uint8_t *src, int compressed_size, int uncompressed_size, EXRThreadData *td)
 
static int rle (uint8_t *dst, const uint8_t *src, int compressed_size, int uncompressed_size)
 
static int rle_uncompress (EXRContext *ctx, const uint8_t *src, int compressed_size, int uncompressed_size, EXRThreadData *td)
 
static uint16_t reverse_lut (const uint8_t *bitmap, uint16_t *lut)
 
static void apply_lut (const uint16_t *lut, uint16_t *dst, int dsize)
 
static void huf_canonical_code_table (uint64_t *freq)
 
static int huf_unpack_enc_table (GetByteContext *gb, int32_t im, int32_t iM, uint64_t *freq)
 
static int huf_build_dec_table (EXRContext *s, EXRThreadData *td, int im, int iM)
 
static int huf_decode (VLC *vlc, GetByteContext *gb, int nbits, int run_sym, int no, uint16_t *out)
 
static int huf_uncompress (EXRContext *s, EXRThreadData *td, GetByteContext *gb, uint16_t *dst, int dst_size)
 
static void wdec14 (uint16_t l, uint16_t h, uint16_t *a, uint16_t *b)
 
static void wdec16 (uint16_t l, uint16_t h, uint16_t *a, uint16_t *b)
 
static void wav_decode (uint16_t *in, int nx, int ox, int ny, int oy, uint16_t mx)
 
static int piz_uncompress (EXRContext *s, const uint8_t *src, int ssize, int dsize, EXRThreadData *td)
 
static int pxr24_uncompress (EXRContext *s, const uint8_t *src, int compressed_size, int uncompressed_size, EXRThreadData *td)
 
static void unpack_14 (const uint8_t b[14], uint16_t s[16])
 
static void unpack_3 (const uint8_t b[3], uint16_t s[16])
 
static int b44_uncompress (EXRContext *s, const uint8_t *src, int compressed_size, int uncompressed_size, EXRThreadData *td)
 
static int ac_uncompress (EXRContext *s, GetByteContext *gb, float *block)
 
static void idct_1d (float *blk, int step)
 
static void dct_inverse (float *block)
 
static void convert (float y, float u, float v, float *b, float *g, float *r)
 
static float to_linear (float x, float scale)
 
static int dwa_uncompress (EXRContext *s, const uint8_t *src, int compressed_size, int uncompressed_size, EXRThreadData *td)
 
static int decode_block (AVCodecContext *avctx, void *tdata, int jobnr, int threadnr)
 
static void skip_header_chunk (EXRContext *s)
 
static int check_header_variable (EXRContext *s, const char *value_name, const char *value_type, unsigned int minimum_length)
 Check if the variable name corresponds to its data type. More...
 
static int decode_header (EXRContext *s, AVFrame *frame)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int decode_end (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass exr_class
 
AVCodec ff_exr_decoder
 

Detailed Description

OpenEXR decoder

Author
Jimmy Christensen

For more information on the OpenEXR format, visit: http://openexr.com/

Definition in file exr.c.

Macro Definition Documentation

◆ USHORT_RANGE

#define USHORT_RANGE   (1 << 16)

Definition at line 270 of file exr.c.

◆ BITMAP_SIZE

#define BITMAP_SIZE   (1 << 13)

Definition at line 271 of file exr.c.

◆ HUF_ENCBITS

#define HUF_ENCBITS   16

Definition at line 296 of file exr.c.

◆ HUF_ENCSIZE

#define HUF_ENCSIZE   ((1 << HUF_ENCBITS) + 1)

Definition at line 297 of file exr.c.

◆ SHORT_ZEROCODE_RUN

#define SHORT_ZEROCODE_RUN   59

Definition at line 322 of file exr.c.

◆ LONG_ZEROCODE_RUN

#define LONG_ZEROCODE_RUN   63

Definition at line 323 of file exr.c.

◆ SHORTEST_LONG_RUN

#define SHORTEST_LONG_RUN   (2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN)

Definition at line 324 of file exr.c.

◆ LONGEST_LONG_RUN

#define LONGEST_LONG_RUN   (255 + SHORTEST_LONG_RUN)

Definition at line 325 of file exr.c.

◆ NBITS

#define NBITS   16

Definition at line 497 of file exr.c.

◆ A_OFFSET

#define A_OFFSET   (1 << (NBITS - 1))

Definition at line 498 of file exr.c.

◆ MOD_MASK

#define MOD_MASK   ((1 << NBITS) - 1)

Definition at line 499 of file exr.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(EXRContext, x)

Definition at line 2285 of file exr.c.

◆ VD

Definition at line 2286 of file exr.c.

Enumeration Type Documentation

◆ ExrCompr

enum ExrCompr
Enumerator
EXR_RAW 
EXR_RLE 
EXR_ZIP1 
EXR_ZIP16 
EXR_PIZ 
EXR_PXR24 
EXR_B44 
EXR_B44A 
EXR_DWAA 
EXR_DWAB 
EXR_UNKN 
EXR_RAW 
EXR_RLE 
EXR_ZIP1 
EXR_ZIP16 
EXR_NBCOMPR 

Definition at line 59 of file exr.c.

◆ ExrPixelType

Enumerator
EXR_UINT 
EXR_HALF 
EXR_FLOAT 
EXR_UNKNOWN 
EXR_UINT 
EXR_HALF 
EXR_FLOAT 
EXR_UNKNOWN 

Definition at line 73 of file exr.c.

◆ ExrTileLevelMode

Enumerator
EXR_TILE_LEVEL_ONE 
EXR_TILE_LEVEL_MIPMAP 
EXR_TILE_LEVEL_RIPMAP 
EXR_TILE_LEVEL_UNKNOWN 

Definition at line 80 of file exr.c.

◆ ExrTileLevelRound

Enumerator
EXR_TILE_ROUND_UP 
EXR_TILE_ROUND_DOWN 
EXR_TILE_ROUND_UNKNOWN 

Definition at line 87 of file exr.c.

Function Documentation

◆ zip_uncompress()

static int zip_uncompress ( EXRContext s,
const uint8_t src,
int  compressed_size,
int  uncompressed_size,
EXRThreadData td 
)
static

Definition at line 198 of file exr.c.

Referenced by decode_block().

◆ rle()

static int rle ( uint8_t dst,
const uint8_t src,
int  compressed_size,
int  uncompressed_size 
)
static

Definition at line 215 of file exr.c.

Referenced by decode_frame(), dwa_uncompress(), epic_decode_run_length(), and rle_uncompress().

◆ rle_uncompress()

static int rle_uncompress ( EXRContext ctx,
const uint8_t src,
int  compressed_size,
int  uncompressed_size,
EXRThreadData td 
)
static

Definition at line 257 of file exr.c.

Referenced by decode_block().

◆ reverse_lut()

static uint16_t reverse_lut ( const uint8_t bitmap,
uint16_t *  lut 
)
static

Definition at line 273 of file exr.c.

Referenced by piz_uncompress().

◆ apply_lut()

static void apply_lut ( const uint16_t *  lut,
uint16_t *  dst,
int  dsize 
)
static

Definition at line 288 of file exr.c.

Referenced by piz_uncompress().

◆ huf_canonical_code_table()

static void huf_canonical_code_table ( uint64_t *  freq)
static

Definition at line 299 of file exr.c.

Referenced by huf_unpack_enc_table().

◆ huf_unpack_enc_table()

static int huf_unpack_enc_table ( GetByteContext gb,
int32_t  im,
int32_t  iM,
uint64_t *  freq 
)
static

Definition at line 327 of file exr.c.

Referenced by huf_uncompress().

◆ huf_build_dec_table()

static int huf_build_dec_table ( EXRContext s,
EXRThreadData td,
int  im,
int  iM 
)
static

Definition at line 367 of file exr.c.

Referenced by huf_uncompress().

◆ huf_decode()

static int huf_decode ( VLC vlc,
GetByteContext gb,
int  nbits,
int  run_sym,
int  no,
uint16_t *  out 
)
static

Definition at line 413 of file exr.c.

Referenced by huf_uncompress().

◆ huf_uncompress()

static int huf_uncompress ( EXRContext s,
EXRThreadData td,
GetByteContext gb,
uint16_t *  dst,
int  dst_size 
)
static

Definition at line 442 of file exr.c.

Referenced by dwa_uncompress(), and piz_uncompress().

◆ wdec14()

static void wdec14 ( uint16_t  l,
uint16_t  h,
uint16_t *  a,
uint16_t *  b 
)
inlinestatic

Definition at line 484 of file exr.c.

Referenced by wav_decode().

◆ wdec16()

static void wdec16 ( uint16_t  l,
uint16_t  h,
uint16_t *  a,
uint16_t *  b 
)
inlinestatic

Definition at line 501 of file exr.c.

Referenced by wav_decode().

◆ wav_decode()

static void wav_decode ( uint16_t *  in,
int  nx,
int  ox,
int  ny,
int  oy,
uint16_t  mx 
)
static

Definition at line 511 of file exr.c.

Referenced by piz_uncompress().

◆ piz_uncompress()

static int piz_uncompress ( EXRContext s,
const uint8_t src,
int  ssize,
int  dsize,
EXRThreadData td 
)
static

Definition at line 590 of file exr.c.

Referenced by decode_block().

◆ pxr24_uncompress()

static int pxr24_uncompress ( EXRContext s,
const uint8_t src,
int  compressed_size,
int  uncompressed_size,
EXRThreadData td 
)
static

Definition at line 676 of file exr.c.

Referenced by decode_block().

◆ unpack_14()

static void unpack_14 ( const uint8_t  b[14],
uint16_t  s[16] 
)
static

Definition at line 760 of file exr.c.

Referenced by b44_uncompress().

◆ unpack_3()

static void unpack_3 ( const uint8_t  b[3],
uint16_t  s[16] 
)
static

Definition at line 795 of file exr.c.

Referenced by b44_uncompress().

◆ b44_uncompress()

static int b44_uncompress ( EXRContext s,
const uint8_t src,
int  compressed_size,
int  uncompressed_size,
EXRThreadData td 
)
static

Definition at line 811 of file exr.c.

Referenced by decode_block().

◆ ac_uncompress()

static int ac_uncompress ( EXRContext s,
GetByteContext gb,
float *  block 
)
static

Definition at line 888 of file exr.c.

Referenced by dwa_uncompress().

◆ idct_1d()

static void idct_1d ( float *  blk,
int  step 
)
static

Definition at line 912 of file exr.c.

Referenced by dct_inverse().

◆ dct_inverse()

static void dct_inverse ( float *  block)
static

Definition at line 956 of file exr.c.

Referenced by dwa_uncompress().

◆ convert()

static void convert ( float  y,
float  u,
float  v,
float *  b,
float *  g,
float *  r 
)
static

Definition at line 967 of file exr.c.

Referenced by dwa_uncompress(), and query_formats().

◆ to_linear()

static float to_linear ( float  x,
float  scale 
)
static

Definition at line 975 of file exr.c.

Referenced by dwa_uncompress().

◆ dwa_uncompress()

static int dwa_uncompress ( EXRContext s,
const uint8_t src,
int  compressed_size,
int  uncompressed_size,
EXRThreadData td 
)
static

Definition at line 988 of file exr.c.

Referenced by decode_block().

◆ decode_block()

static int decode_block ( AVCodecContext avctx,
void *  tdata,
int  jobnr,
int  threadnr 
)
static

Definition at line 1180 of file exr.c.

Referenced by decode_frame().

◆ skip_header_chunk()

static void skip_header_chunk ( EXRContext s)
static

Definition at line 1485 of file exr.c.

Referenced by decode_header().

◆ check_header_variable()

static int check_header_variable ( EXRContext s,
const char *  value_name,
const char *  value_type,
unsigned int  minimum_length 
)
static

Check if the variable name corresponds to its data type.

Parameters
sthe EXRContext
value_namename of the variable to check
value_typetype of the variable to check
minimum_lengthminimum length of the variable data
Returns
bytes to read containing variable data -1 if variable is not found 0 if buffer ended prematurely

Definition at line 1514 of file exr.c.

Referenced by decode_header().

◆ decode_header()

static int decode_header ( EXRContext s,
AVFrame frame 
)
static

Definition at line 1544 of file exr.c.

Referenced by decode_frame().

◆ decode_frame()

static int decode_frame ( AVCodecContext avctx,
void *  data,
int got_frame,
AVPacket avpkt 
)
static

Definition at line 2022 of file exr.c.

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 2208 of file exr.c.

◆ decode_end()

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 2260 of file exr.c.

Variable Documentation

◆ options

const AVOption options[]
static

Definition at line 2287 of file exr.c.

◆ exr_class

const AVClass exr_class
static
Initial value:
= {
.class_name = "EXR",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 2334 of file exr.c.

◆ ff_exr_decoder

AVCodec ff_exr_decoder
Initial value:
= {
.name = "exr",
.long_name = NULL_IF_CONFIG_SMALL("OpenEXR image"),
.priv_data_size = sizeof(EXRContext),
.close = decode_end,
.priv_class = &exr_class,
}

Definition at line 2341 of file exr.c.

init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:31
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Definition: exr.c:2208
decode_frame
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: exr.c:2022
options
static const AVOption options[]
Definition: exr.c:2287
decode_end
static av_cold int decode_end(AVCodecContext *avctx)
Definition: exr.c:2260
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:108
AV_CODEC_ID_EXR
@ AV_CODEC_ID_EXR
Definition: codec_id.h:229
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:112
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
exr_class
static const AVClass exr_class
Definition: exr.c:2334
EXRContext
Definition: exr.c:145