FFmpeg  4.0
Data Structures | Macros | Enumerations | Functions | Variables
iff.c File Reference

IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN bitmap decoder. More...

#include <stdint.h>
#include "libavutil/imgutils.h"
#include "bytestream.h"
#include "avcodec.h"
#include "internal.h"
#include "mathops.h"

Go to the source code of this file.

Data Structures

struct  IffContext
 

Macros

#define LUT8_PART(plane, v)
 
#define LUT8(plane)
 
#define LUT32(plane)
 
#define DECODE_HAM_PLANE32(x)
 
#define DECODE_RGBX_COMMON(type)
 
#define GETNIBBLE   ((i & 1) ? (src[i>>1] & 0xF) : (src[i>>1] >> 4))
 

Enumerations

enum  mask_type { MASK_NONE, MASK_HAS_MASK, MASK_HAS_TRANSPARENT_COLOR, MASK_LASSO }
 

Functions

static av_always_inline uint32_t gray2rgb (const uint32_t x)
 
static int cmap_read_palette (AVCodecContext *avctx, uint32_t *pal)
 Convert CMAP buffer (stored in extradata) to lavc palette format. More...
 
static int extract_header (AVCodecContext *const avctx, const AVPacket *const avpkt)
 Extracts the IFF extra context and updates internal decoder structures. More...
 
static av_cold int decode_end (AVCodecContext *avctx)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static void decodeplane8 (uint8_t *dst, const uint8_t *buf, int buf_size, int plane)
 Decode interleaved plane buffer up to 8bpp. More...
 
static void decodeplane32 (uint32_t *dst, const uint8_t *buf, int buf_size, int plane)
 Decode interleaved plane buffer up to 24bpp. More...
 
static void decode_ham_plane32 (uint32_t *dst, const uint8_t *buf, const uint32_t *const pal, unsigned buf_size)
 Converts one line of HAM6/8-encoded chunky buffer to 24bpp. More...
 
static void lookup_pal_indicies (uint32_t *dst, const uint32_t *buf, const uint32_t *const pal, unsigned width)
 
static int decode_byterun (uint8_t *dst, int dst_size, GetByteContext *gb)
 Decode one complete byterun1 encoded line. More...
 
static int decode_byterun2 (uint8_t *dst, int height, int line_size, GetByteContext *gb)
 
static void decode_rgb8 (GetByteContext *gb, uint8_t *dst, int width, int height, int linesize)
 Decode RGB8 buffer. More...
 
static void decode_rgbn (GetByteContext *gb, uint8_t *dst, int width, int height, int linesize)
 Decode RGBN buffer. More...
 
static void decode_deep_rle32 (uint8_t *dst, const uint8_t *src, int src_size, int width, int height, int linesize)
 Decode DEEP RLE 32-bit buffer. More...
 
static void decode_deep_tvdc32 (uint8_t *dst, const uint8_t *src, int src_size, int width, int height, int linesize, const int16_t *tvdc)
 Decode DEEP TVDC 32-bit buffer. More...
 
static void decode_short_horizontal_delta (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int bpp, int dst_size)
 
static void decode_byte_vertical_delta (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int xor, int bpp, int dst_size)
 
static void decode_delta_j (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int h, int bpp, int dst_size)
 
static void decode_short_vertical_delta (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int bpp, int dst_size)
 
static void decode_long_vertical_delta (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int bpp, int dst_size)
 
static void decode_short_vertical_delta2 (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int bpp, int dst_size)
 
static void decode_long_vertical_delta2 (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int bpp, int dst_size)
 
static void decode_delta_d (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int flag, int bpp, int dst_size)
 
static void decode_delta_e (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int flag, int bpp, int dst_size)
 
static void decode_delta_l (uint8_t *dst, const uint8_t *buf, const uint8_t *buf_end, int w, int flag, int bpp, int dst_size)
 
static int unsupported (AVCodecContext *avctx)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 

Variables

static const uint64_t plane8_lut [8][256]
 
static const uint32_t plane32_lut [32][16 *4]
 

Detailed Description

IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN bitmap decoder.

Definition in file iff.c.

Macro Definition Documentation

◆ LUT8_PART

#define LUT8_PART (   plane,
 
)
Value:
AV_LE2NE64C(UINT64_C(0x0000000)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1000000)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0010000)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1010000)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0000100)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1000100)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0010100)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1010100)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0000001)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1000001)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0010001)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1010001)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0000101)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1000101)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x0010101)<<32 | v) << plane, \
AV_LE2NE64C(UINT64_C(0x1010101)<<32 | v) << plane
int plane
Definition: avisynth_c.h:422
#define AV_LE2NE64C(x)
Definition: bswap.h:107

Definition at line 71 of file iff.c.

◆ LUT8

#define LUT8 (   plane)
Value:
{ \
LUT8_PART(plane, 0x0000000), \
LUT8_PART(plane, 0x1000000), \
LUT8_PART(plane, 0x0010000), \
LUT8_PART(plane, 0x1010000), \
LUT8_PART(plane, 0x0000100), \
LUT8_PART(plane, 0x1000100), \
LUT8_PART(plane, 0x0010100), \
LUT8_PART(plane, 0x1010100), \
LUT8_PART(plane, 0x0000001), \
LUT8_PART(plane, 0x1000001), \
LUT8_PART(plane, 0x0010001), \
LUT8_PART(plane, 0x1010001), \
LUT8_PART(plane, 0x0000101), \
LUT8_PART(plane, 0x1000101), \
LUT8_PART(plane, 0x0010101), \
LUT8_PART(plane, 0x1010101), \
}
int plane
Definition: avisynth_c.h:422

Definition at line 89 of file iff.c.

◆ LUT32

#define LUT32 (   plane)
Value:
{ \
0, 0, 0, 0, \
0, 0, 0, 1 << plane, \
0, 0, 1 << plane, 0, \
0, 0, 1 << plane, 1 << plane, \
0, 1 << plane, 0, 0, \
0, 1 << plane, 0, 1 << plane, \
0, 1 << plane, 1 << plane, 0, \
0, 1 << plane, 1 << plane, 1 << plane, \
1 << plane, 0, 0, 0, \
1 << plane, 0, 0, 1 << plane, \
1 << plane, 0, 1 << plane, 0, \
1 << plane, 0, 1 << plane, 1 << plane, \
1 << plane, 1 << plane, 0, 0, \
1 << plane, 1 << plane, 0, 1 << plane, \
1 << plane, 1 << plane, 1 << plane, 0, \
1 << plane, 1 << plane, 1 << plane, 1 << plane, \
}
int plane
Definition: avisynth_c.h:422

Definition at line 114 of file iff.c.

◆ DECODE_HAM_PLANE32

#define DECODE_HAM_PLANE32 (   x)
Value:
first = buf[x] << 1; \
second = buf[(x)+1] << 1; \
delta &= pal[first++]; \
delta |= pal[first]; \
dst[x] = delta; \
delta &= pal[second++]; \
delta |= pal[second]; \
dst[(x)+1] = delta
float delta
void * buf
Definition: avisynth_c.h:690

Definition at line 483 of file iff.c.

Referenced by decode_ham_plane32().

◆ DECODE_RGBX_COMMON

#define DECODE_RGBX_COMMON (   type)
Value:
if (!length) { \
length = bytestream2_get_byte(gb); \
if (!length) { \
length = bytestream2_get_be16(gb); \
if (!length) \
return; \
} \
} \
for (i = 0; i < length; i++) { \
*(type *)(dst + y*linesize + x * sizeof(type)) = pixel; \
x += 1; \
if (x >= width) { \
y += 1; \
if (y >= height) \
return; \
x = 0; \
} \
}
#define height
uint16_t width
Definition: gdv.c:47
cl_device_type type
uint8_t pixel
Definition: tiny_ssim.c:42
const char int length
Definition: avisynth_c.h:768

Definition at line 630 of file iff.c.

Referenced by decode_rgb8(), and decode_rgbn().

◆ GETNIBBLE

#define GETNIBBLE   ((i & 1) ? (src[i>>1] & 0xF) : (src[i>>1] >> 4))

Referenced by decode_deep_tvdc32().

Enumeration Type Documentation

◆ mask_type

enum mask_type
Enumerator
MASK_NONE 
MASK_HAS_MASK 
MASK_HAS_TRANSPARENT_COLOR 
MASK_LASSO 

Definition at line 39 of file iff.c.

Function Documentation

◆ gray2rgb()

static av_always_inline uint32_t gray2rgb ( const uint32_t  x)
static

Definition at line 146 of file iff.c.

Referenced by cmap_read_palette(), and extract_header().

◆ cmap_read_palette()

static int cmap_read_palette ( AVCodecContext avctx,
uint32_t *  pal 
)
static

Convert CMAP buffer (stored in extradata) to lavc palette format.

Definition at line 153 of file iff.c.

Referenced by decode_frame().

◆ extract_header()

static int extract_header ( AVCodecContext *const  avctx,
const AVPacket *const  avpkt 
)
static

Extracts the IFF extra context and updates internal decoder structures.

Parameters
avctxthe AVCodecContext where to extract extra context to
avpktthe AVPacket to extract extra context from or NULL to use avctx
Returns
>= 0 in case of success, a negative error code otherwise

Definition at line 200 of file iff.c.

Referenced by decode_frame(), and decode_init().

◆ decode_end()

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 368 of file iff.c.

Referenced by decode_frame().

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 380 of file iff.c.

Referenced by decode_frame().

◆ decodeplane8()

static void decodeplane8 ( uint8_t dst,
const uint8_t buf,
int  buf_size,
int  plane 
)
static

Decode interleaved plane buffer up to 8bpp.

Parameters
dstDestination buffer
bufSource buffer
buf_size
planeplane number to decode as

Definition at line 444 of file iff.c.

Referenced by decode_frame().

◆ decodeplane32()

static void decodeplane32 ( uint32_t *  dst,
const uint8_t buf,
int  buf_size,
int  plane 
)
static

Decode interleaved plane buffer up to 24bpp.

Parameters
dstDestination buffer
bufSource buffer
buf_size
planeplane number to decode as

Definition at line 465 of file iff.c.

Referenced by decode_frame().

◆ decode_ham_plane32()

static void decode_ham_plane32 ( uint32_t *  dst,
const uint8_t buf,
const uint32_t *const  pal,
unsigned  buf_size 
)
static

Converts one line of HAM6/8-encoded chunky buffer to 24bpp.

Parameters
dstthe destination 24bpp buffer
bufthe source 8bpp chunky buffer
palthe HAM decode table
buf_sizethe plane size in bytes

Definition at line 501 of file iff.c.

Referenced by decode_frame().

◆ lookup_pal_indicies()

static void lookup_pal_indicies ( uint32_t *  dst,
const uint32_t *  buf,
const uint32_t *const  pal,
unsigned  width 
)
static

Definition at line 516 of file iff.c.

Referenced by decode_frame().

◆ decode_byterun()

static int decode_byterun ( uint8_t dst,
int  dst_size,
GetByteContext gb 
)
static

Decode one complete byterun1 encoded line.

Parameters
dstthe destination buffer where to store decompressed bitstream
dst_sizethe destination plane size in bytes
bufthe source byterun1 compressed bitstream
buf_endthe EOF of source byterun1 compressed bitstream
Returns
number of consumed bytes in byterun1 compressed bitstream

Definition at line 533 of file iff.c.

Referenced by decode_frame().

◆ decode_byterun2()

static int decode_byterun2 ( uint8_t dst,
int  height,
int  line_size,
GetByteContext gb 
)
static

Definition at line 560 of file iff.c.

Referenced by decode_frame().

◆ decode_rgb8()

static void decode_rgb8 ( GetByteContext gb,
uint8_t dst,
int  width,
int  height,
int  linesize 
)
static

Decode RGB8 buffer.

Parameters
[out]dstDestination buffer
widthWidth of destination buffer (pixels)
heightHeight of destination buffer (pixels)
linesizeLine size of destination buffer (bytes)

Definition at line 657 of file iff.c.

Referenced by decode_frame().

◆ decode_rgbn()

static void decode_rgbn ( GetByteContext gb,
uint8_t dst,
int  width,
int  height,
int  linesize 
)
static

Decode RGBN buffer.

Parameters
[out]dstDestination buffer
widthWidth of destination buffer (pixels)
heightHeight of destination buffer (pixels)
linesizeLine size of destination buffer (bytes)

Definition at line 674 of file iff.c.

Referenced by decode_frame().

◆ decode_deep_rle32()

static void decode_deep_rle32 ( uint8_t dst,
const uint8_t src,
int  src_size,
int  width,
int  height,
int  linesize 
)
static

Decode DEEP RLE 32-bit buffer.

Parameters
[out]dstDestination buffer
[in]srcSource buffer
src_sizeSource buffer size (bytes)
widthWidth of destination buffer (pixels)
heightHeight of destination buffer (pixels)
linesizeLine size of destination buffer (bytes)

Definition at line 694 of file iff.c.

Referenced by decode_frame().

◆ decode_deep_tvdc32()

static void decode_deep_tvdc32 ( uint8_t dst,
const uint8_t src,
int  src_size,
int  width,
int  height,
int  linesize,
const int16_t *  tvdc 
)
static

Decode DEEP TVDC 32-bit buffer.

Parameters
[out]dstDestination buffer
[in]srcSource buffer
src_sizeSource buffer size (bytes)
widthWidth of destination buffer (pixels)
heightHeight of destination buffer (pixels)
linesizeLine size of destination buffer (bytes)

Definition at line 744 of file iff.c.

Referenced by decode_frame().

◆ decode_short_horizontal_delta()

static void decode_short_horizontal_delta ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  bpp,
int  dst_size 
)
static

Definition at line 784 of file iff.c.

Referenced by decode_frame().

◆ decode_byte_vertical_delta()

static void decode_byte_vertical_delta ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  xor,
int  bpp,
int  dst_size 
)
static

Definition at line 837 of file iff.c.

Referenced by decode_frame().

◆ decode_delta_j()

static void decode_delta_j ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  h,
int  bpp,
int  dst_size 
)
static

Definition at line 904 of file iff.c.

Referenced by decode_frame().

◆ decode_short_vertical_delta()

static void decode_short_vertical_delta ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  bpp,
int  dst_size 
)
static

Definition at line 1015 of file iff.c.

Referenced by decode_frame().

◆ decode_long_vertical_delta()

static void decode_long_vertical_delta ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  bpp,
int  dst_size 
)
static

Definition at line 1083 of file iff.c.

Referenced by decode_frame().

◆ decode_short_vertical_delta2()

static void decode_short_vertical_delta2 ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  bpp,
int  dst_size 
)
static

Definition at line 1166 of file iff.c.

Referenced by decode_frame().

◆ decode_long_vertical_delta2()

static void decode_long_vertical_delta2 ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  bpp,
int  dst_size 
)
static

Definition at line 1226 of file iff.c.

Referenced by decode_frame().

◆ decode_delta_d()

static void decode_delta_d ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  flag,
int  bpp,
int  dst_size 
)
static

Definition at line 1305 of file iff.c.

Referenced by decode_frame().

◆ decode_delta_e()

static void decode_delta_e ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  flag,
int  bpp,
int  dst_size 
)
static

Definition at line 1360 of file iff.c.

Referenced by decode_frame().

◆ decode_delta_l()

static void decode_delta_l ( uint8_t dst,
const uint8_t buf,
const uint8_t buf_end,
int  w,
int  flag,
int  bpp,
int  dst_size 
)
static

Definition at line 1415 of file iff.c.

Referenced by decode_frame().

◆ unsupported()

static int unsupported ( AVCodecContext avctx)
static

Definition at line 1482 of file iff.c.

Referenced by decode_frame(), and txd_decode_frame().

◆ decode_frame()

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

Definition at line 1489 of file iff.c.

Variable Documentation

◆ plane8_lut

const uint64_t plane8_lut[8][256]
static
Initial value:
= {
LUT8(0), LUT8(1), LUT8(2), LUT8(3),
LUT8(4), LUT8(5), LUT8(6), LUT8(7),
}
#define LUT8(plane)
Definition: iff.c:89

Definition at line 109 of file iff.c.

Referenced by decodeplane8().

◆ plane32_lut

const uint32_t plane32_lut[32][16 *4]
static
Initial value:
= {
LUT32( 0), LUT32( 1), LUT32( 2), LUT32( 3),
LUT32( 4), LUT32( 5), LUT32( 6), LUT32( 7),
LUT32( 8), LUT32( 9), LUT32(10), LUT32(11),
LUT32(12), LUT32(13), LUT32(14), LUT32(15),
LUT32(16), LUT32(17), LUT32(18), LUT32(19),
LUT32(20), LUT32(21), LUT32(22), LUT32(23),
LUT32(24), LUT32(25), LUT32(26), LUT32(27),
LUT32(28), LUT32(29), LUT32(30), LUT32(31),
}
#define LUT32(plane)
Definition: iff.c:114

Definition at line 134 of file iff.c.

Referenced by decodeplane32().