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 "codec_internal.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, AVFrame *picture, 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
 
const FFCodec 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 271 of file exr.c.

◆ BITMAP_SIZE

#define BITMAP_SIZE   (1 << 13)

Definition at line 272 of file exr.c.

◆ HUF_ENCBITS

#define HUF_ENCBITS   16

Definition at line 297 of file exr.c.

◆ HUF_ENCSIZE

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

Definition at line 298 of file exr.c.

◆ SHORT_ZEROCODE_RUN

#define SHORT_ZEROCODE_RUN   59

Definition at line 323 of file exr.c.

◆ LONG_ZEROCODE_RUN

#define LONG_ZEROCODE_RUN   63

Definition at line 324 of file exr.c.

◆ SHORTEST_LONG_RUN

#define SHORTEST_LONG_RUN   (2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN)

Definition at line 325 of file exr.c.

◆ LONGEST_LONG_RUN

#define LONGEST_LONG_RUN   (255 + SHORTEST_LONG_RUN)

Definition at line 326 of file exr.c.

◆ NBITS

#define NBITS   16

Definition at line 498 of file exr.c.

◆ A_OFFSET

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

Definition at line 499 of file exr.c.

◆ MOD_MASK

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

Definition at line 500 of file exr.c.

◆ OFFSET

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

Definition at line 2289 of file exr.c.

◆ VD

Definition at line 2290 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 60 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 74 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 81 of file exr.c.

◆ ExrTileLevelRound

Enumerator
EXR_TILE_ROUND_UP 
EXR_TILE_ROUND_DOWN 
EXR_TILE_ROUND_UNKNOWN 

Definition at line 88 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 199 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 216 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 258 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 274 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 289 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 300 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 328 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 368 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 414 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 443 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 485 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 502 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 512 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 591 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 677 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 761 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 796 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 812 of file exr.c.

Referenced by decode_block().

◆ ac_uncompress()

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

Definition at line 889 of file exr.c.

Referenced by dwa_uncompress().

◆ idct_1d()

static void idct_1d ( float blk,
int  step 
)
static

Definition at line 913 of file exr.c.

Referenced by dct_inverse().

◆ dct_inverse()

static void dct_inverse ( float block)
static

Definition at line 957 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 968 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 976 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 989 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 1181 of file exr.c.

Referenced by decode_frame().

◆ skip_header_chunk()

static void skip_header_chunk ( EXRContext s)
static

Definition at line 1491 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 1520 of file exr.c.

Referenced by decode_header().

◆ decode_header()

static int decode_header ( EXRContext s,
AVFrame frame 
)
static

Definition at line 1550 of file exr.c.

Referenced by decode_frame().

◆ decode_frame()

static int decode_frame ( AVCodecContext avctx,
AVFrame picture,
int got_frame,
AVPacket avpkt 
)
static

Definition at line 2028 of file exr.c.

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 2212 of file exr.c.

◆ decode_end()

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 2264 of file exr.c.

Variable Documentation

◆ options

const AVOption options[]
static

Definition at line 2291 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 2338 of file exr.c.

◆ ff_exr_decoder

const FFCodec ff_exr_decoder
Initial value:
= {
.p.name = "exr",
.p.long_name = NULL_IF_CONFIG_SMALL("OpenEXR image"),
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_EXR,
.priv_data_size = sizeof(EXRContext),
.close = decode_end,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
.p.priv_class = &exr_class,
}

Definition at line 2345 of file exr.c.

decode_frame
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
Definition: exr.c:2028
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Definition: exr.c:2212
options
static const AVOption options[]
Definition: exr.c:2291
init
static int init
Definition: av_tx.c:47
decode_end
static av_cold int decode_end(AVCodecContext *avctx)
Definition: exr.c:2264
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:254
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:113
AV_CODEC_ID_EXR
@ AV_CODEC_ID_EXR
Definition: codec_id.h:230
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:237
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:117
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: codec_internal.h:31
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
exr_class
static const AVClass exr_class
Definition: exr.c:2338
EXRContext
Definition: exr.c:146