FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 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

#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:291
#define AV_LE2NE64C(x)
Definition: bswap.h:107

Definition at line 71 of file iff.c.

#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:291
#define LUT8_PART(plane, v)
Definition: iff.c:71

Definition at line 89 of file iff.c.

#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:291

Definition at line 114 of file iff.c.

#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:553

Definition at line 485 of file iff.c.

Referenced by decode_ham_plane32().

#define DECODE_RGBX_COMMON (   type)
Value:
if (!length) { \
length = bytestream2_get_byte(gb); \
if (!length) { \
length = bytestream2_get_be16(gb); \
} \
} \
for (i = 0; i < length; i++) { \
*(type *)(dst + y*linesize + x * sizeof(type)) = pixel; \
x += 1; \
if (x >= width) { \
y += 1; \
if (y >= height) \
x = 0; \
} \
}
#define height
GLsizei GLsizei * length
Definition: opengl_enc.c:115
return
#define width
GLint GLenum type
Definition: opengl_enc.c:105
uint8_t pixel
Definition: tiny_ssim.c:42
if(ret< 0)
Definition: vf_mcdeint.c:282
for(j=16;j >0;--j)

Definition at line 562 of file iff.c.

Referenced by decode_rgb8(), and decode_rgbn().

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

Referenced by decode_deep_tvdc32().

Enumeration Type Documentation

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

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().

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().

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().

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 368 of file iff.c.

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 381 of file iff.c.

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 446 of file iff.c.

Referenced by decode_frame().

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 467 of file iff.c.

Referenced by decode_frame().

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 503 of file iff.c.

Referenced by decode_frame().

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

Definition at line 518 of file iff.c.

Referenced by decode_frame().

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 535 of file iff.c.

Referenced by decode_frame().

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 589 of file iff.c.

Referenced by decode_frame().

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 606 of file iff.c.

Referenced by decode_frame().

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 626 of file iff.c.

Referenced by decode_frame().

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)
int]tvdc TVDC lookup table

Definition at line 676 of file iff.c.

Referenced by decode_frame().

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 716 of file iff.c.

Referenced by decode_frame().

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 769 of file iff.c.

Referenced by decode_frame().

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 836 of file iff.c.

Referenced by decode_frame().

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 947 of file iff.c.

Referenced by decode_frame().

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 1015 of file iff.c.

Referenced by decode_frame().

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 1098 of file iff.c.

Referenced by decode_frame().

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 1158 of file iff.c.

Referenced by decode_frame().

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 1237 of file iff.c.

Referenced by decode_frame().

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 1292 of file iff.c.

Referenced by decode_frame().

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 1347 of file iff.c.

Referenced by decode_frame().

static int unsupported ( AVCodecContext avctx)
static

Definition at line 1414 of file iff.c.

Referenced by decode_frame(), mov_build_index(), and txd_decode_frame().

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

Definition at line 1421 of file iff.c.

Variable Documentation

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().

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().