FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
sanm.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/bswap.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "bytestream.h"
#include "copy_block.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  SANMVideoContext
 
struct  SANMFrameHeader
 

Macros

#define NGLYPHS   256
 
#define GLYPH_COORD_VECT_SIZE   16
 
#define PALETTE_SIZE   256
 
#define PALETTE_DELTA   768
 

Typedefs

typedef int(* frm_decoder )(SANMVideoContext *ctx)
 

Enumerations

enum  GlyphEdge {
  LEFT_EDGE, TOP_EDGE, RIGHT_EDGE, BOTTOM_EDGE,
  NO_EDGE
}
 
enum  GlyphDir {
  DIR_LEFT, DIR_UP, DIR_RIGHT, DIR_DOWN,
  NO_DIR
}
 

Functions

static enum GlyphEdge which_edge (int x, int y, int edge_size)
 Return enum GlyphEdge of box where point (x, y) lies. More...
 
static enum GlyphDir which_direction (enum GlyphEdge edge0, enum GlyphEdge edge1)
 
static void interp_point (int8_t *points, int x0, int y0, int x1, int y1, int pos, int npoints)
 
static void make_glyphs (int8_t *pglyphs, const int8_t *xvec, const int8_t *yvec, const int side_length)
 Construct glyphs by iterating through vector coordinates. More...
 
static void init_sizes (SANMVideoContext *ctx, int width, int height)
 
static void destroy_buffers (SANMVideoContext *ctx)
 
static av_cold int init_buffers (SANMVideoContext *ctx)
 
static void rotate_bufs (SANMVideoContext *ctx, int rotate_code)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int decode_end (AVCodecContext *avctx)
 
static int rle_decode (SANMVideoContext *ctx, uint8_t *dst, const int out_size)
 
static int old_codec1 (SANMVideoContext *ctx, int top, int left, int width, int height)
 
static void codec37_mv (uint8_t *dst, const uint8_t *src, int height, int stride, int x, int y)
 
static int old_codec37 (SANMVideoContext *ctx, int top, int left, int width, int height)
 
static int process_block (SANMVideoContext *ctx, uint8_t *dst, uint8_t *prev1, uint8_t *prev2, int stride, int tbl, int size)
 
static int old_codec47 (SANMVideoContext *ctx, int top, int left, int width, int height)
 
static int process_frame_obj (SANMVideoContext *ctx)
 
static int decode_0 (SANMVideoContext *ctx)
 
static int decode_nop (SANMVideoContext *ctx)
 
static void copy_block (uint16_t *pdest, uint16_t *psrc, int block_size, int pitch)
 
static void fill_block (uint16_t *pdest, uint16_t color, int block_size, int pitch)
 
static int draw_glyph (SANMVideoContext *ctx, uint16_t *dst, int index, uint16_t fg_color, uint16_t bg_color, int block_size, int pitch)
 
static int opcode_0xf7 (SANMVideoContext *ctx, int cx, int cy, int block_size, int pitch)
 
static int opcode_0xf8 (SANMVideoContext *ctx, int cx, int cy, int block_size, int pitch)
 
static int good_mvec (SANMVideoContext *ctx, int cx, int cy, int mx, int my, int block_size)
 
static int codec2subblock (SANMVideoContext *ctx, int cx, int cy, int blk_size)
 
static int decode_2 (SANMVideoContext *ctx)
 
static int decode_3 (SANMVideoContext *ctx)
 
static int decode_4 (SANMVideoContext *ctx)
 
static int decode_5 (SANMVideoContext *ctx)
 
static int decode_6 (SANMVideoContext *ctx)
 
static int decode_8 (SANMVideoContext *ctx)
 
static int read_frame_header (SANMVideoContext *ctx, SANMFrameHeader *hdr)
 
static void fill_frame (uint16_t *pbuf, int buf_size, uint16_t color)
 
static int copy_output (SANMVideoContext *ctx, SANMFrameHeader *hdr)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt)
 

Variables

static const int8_t glyph4_x [GLYPH_COORD_VECT_SIZE]
 
static const int8_t glyph4_y [GLYPH_COORD_VECT_SIZE]
 
static const int8_t glyph8_x [GLYPH_COORD_VECT_SIZE]
 
static const int8_t glyph8_y [GLYPH_COORD_VECT_SIZE]
 
static const int8_t motion_vectors [256][2]
 
static const int8_t c37_mv []
 
static const frm_decoder v1_decoders []
 
AVCodec ff_sanm_decoder
 

Macro Definition Documentation

#define NGLYPHS   256

Definition at line 32 of file sanm.c.

Referenced by draw_glyph().

#define GLYPH_COORD_VECT_SIZE   16

Definition at line 33 of file sanm.c.

Referenced by make_glyphs().

#define PALETTE_SIZE   256

Definition at line 34 of file sanm.c.

Referenced by decode_frame(), and decode_init().

#define PALETTE_DELTA   768

Definition at line 35 of file sanm.c.

Referenced by decode_frame().

Typedef Documentation

typedef int(* frm_decoder)(SANMVideoContext *ctx)

Definition at line 1315 of file sanm.c.

Enumeration Type Documentation

enum GlyphEdge
Enumerator
LEFT_EDGE 
TOP_EDGE 
RIGHT_EDGE 
BOTTOM_EDGE 
NO_EDGE 

Definition at line 303 of file sanm.c.

enum GlyphDir
Enumerator
DIR_LEFT 
DIR_UP 
DIR_RIGHT 
DIR_DOWN 
NO_DIR 

Definition at line 311 of file sanm.c.

Function Documentation

static enum GlyphEdge which_edge ( int  x,
int  y,
int  edge_size 
)
static

Return enum GlyphEdge of box where point (x, y) lies.

Parameters
xx point coordinate
yy point coordinate
edge_sizebox width/height.

Definition at line 326 of file sanm.c.

Referenced by make_glyphs().

static enum GlyphDir which_direction ( enum GlyphEdge  edge0,
enum GlyphEdge  edge1 
)
static

Definition at line 342 of file sanm.c.

Referenced by make_glyphs().

static void interp_point ( int8_t *  points,
int  x0,
int  y0,
int  x1,
int  y1,
int  pos,
int  npoints 
)
static

Definition at line 365 of file sanm.c.

Referenced by make_glyphs().

static void make_glyphs ( int8_t *  pglyphs,
const int8_t *  xvec,
const int8_t *  yvec,
const int  side_length 
)
static

Construct glyphs by iterating through vector coordinates.

Parameters
pglyphspointer to table where glyphs are stored
xvecpointer to x component of vector coordinates
yvecpointer to y component of vector coordinates
side_lengthglyph width/height.

Definition at line 385 of file sanm.c.

Referenced by decode_init().

static void init_sizes ( SANMVideoContext ctx,
int  width,
int  height 
)
static

Definition at line 437 of file sanm.c.

Referenced by decode_init(), destroy_buffers(), and process_frame_obj().

static void destroy_buffers ( SANMVideoContext ctx)
static

Definition at line 450 of file sanm.c.

Referenced by decode_end(), and init_buffers().

static av_cold int init_buffers ( SANMVideoContext ctx)
static

Definition at line 463 of file sanm.c.

Referenced by decode_init(), and process_frame_obj().

static void rotate_bufs ( SANMVideoContext ctx,
int  rotate_code 
)
static

Definition at line 481 of file sanm.c.

Referenced by decode_frame(), and old_codec37().

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 488 of file sanm.c.

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 522 of file sanm.c.

static int rle_decode ( SANMVideoContext ctx,
uint8_t dst,
const int  out_size 
)
static

Definition at line 531 of file sanm.c.

Referenced by decode_5(), decode_8(), old_codec37(), and old_codec47().

static int old_codec1 ( SANMVideoContext ctx,
int  top,
int  left,
int  width,
int  height 
)
static

Definition at line 557 of file sanm.c.

Referenced by process_frame_obj().

static void codec37_mv ( uint8_t dst,
const uint8_t src,
int  height,
int  stride,
int  x,
int  y 
)
inlinestatic

Definition at line 604 of file sanm.c.

Referenced by old_codec37().

static int old_codec37 ( SANMVideoContext ctx,
int  top,
int  left,
int  width,
int  height 
)
static

Definition at line 623 of file sanm.c.

Referenced by process_frame_obj().

static int process_block ( SANMVideoContext ctx,
uint8_t dst,
uint8_t prev1,
uint8_t prev2,
int  stride,
int  tbl,
int  size 
)
static

Definition at line 769 of file sanm.c.

Referenced by old_codec47().

static int old_codec47 ( SANMVideoContext ctx,
int  top,
int  left,
int  width,
int  height 
)
static

Definition at line 859 of file sanm.c.

Referenced by process_frame_obj().

static int process_frame_obj ( SANMVideoContext ctx)
static

Definition at line 950 of file sanm.c.

Referenced by decode_frame().

static int decode_0 ( SANMVideoContext ctx)
static

Definition at line 994 of file sanm.c.

static int decode_nop ( SANMVideoContext ctx)
static

Definition at line 1011 of file sanm.c.

static void copy_block ( uint16_t *  pdest,
uint16_t *  psrc,
int  block_size,
int  pitch 
)
static

Definition at line 1017 of file sanm.c.

Referenced by codec2subblock().

static void fill_block ( uint16_t *  pdest,
uint16_t  color,
int  block_size,
int  pitch 
)
static

Definition at line 1036 of file sanm.c.

Referenced by codec2subblock().

static int draw_glyph ( SANMVideoContext ctx,
uint16_t *  dst,
int  index,
uint16_t  fg_color,
uint16_t  bg_color,
int  block_size,
int  pitch 
)
static

Definition at line 1046 of file sanm.c.

Referenced by opcode_0xf7(), and opcode_0xf8().

static int opcode_0xf7 ( SANMVideoContext ctx,
int  cx,
int  cy,
int  block_size,
int  pitch 
)
static

Definition at line 1068 of file sanm.c.

Referenced by codec2subblock().

static int opcode_0xf8 ( SANMVideoContext ctx,
int  cx,
int  cy,
int  block_size,
int  pitch 
)
static

Definition at line 1102 of file sanm.c.

Referenced by codec2subblock().

static int good_mvec ( SANMVideoContext ctx,
int  cx,
int  cy,
int  mx,
int  my,
int  block_size 
)
static

Definition at line 1130 of file sanm.c.

Referenced by codec2subblock().

static int codec2subblock ( SANMVideoContext ctx,
int  cx,
int  cy,
int  blk_size 
)
static

Definition at line 1146 of file sanm.c.

Referenced by decode_2().

static int decode_2 ( SANMVideoContext ctx)
static

Definition at line 1231 of file sanm.c.

static int decode_3 ( SANMVideoContext ctx)
static

Definition at line 1243 of file sanm.c.

static int decode_4 ( SANMVideoContext ctx)
static

Definition at line 1249 of file sanm.c.

static int decode_5 ( SANMVideoContext ctx)
static

Definition at line 1255 of file sanm.c.

static int decode_6 ( SANMVideoContext ctx)
static

Definition at line 1278 of file sanm.c.

static int decode_8 ( SANMVideoContext ctx)
static

Definition at line 1293 of file sanm.c.

static int read_frame_header ( SANMVideoContext ctx,
SANMFrameHeader hdr 
)
static

Definition at line 1322 of file sanm.c.

Referenced by decode_frame().

static void fill_frame ( uint16_t *  pbuf,
int  buf_size,
uint16_t  color 
)
static

Definition at line 1362 of file sanm.c.

Referenced by decode_frame().

static int copy_output ( SANMVideoContext ctx,
SANMFrameHeader hdr 
)
static

Definition at line 1368 of file sanm.c.

Referenced by decode_frame().

static int decode_frame ( AVCodecContext avctx,
void data,
int *  got_frame_ptr,
AVPacket pkt 
)
static

Definition at line 1390 of file sanm.c.

Variable Documentation

const int8_t glyph4_x[GLYPH_COORD_VECT_SIZE]
static
Initial value:
= {
0, 1, 2, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 2, 1
}

Definition at line 37 of file sanm.c.

Referenced by decode_init().

const int8_t glyph4_y[GLYPH_COORD_VECT_SIZE]
static
Initial value:
= {
0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 2, 2
}

Definition at line 41 of file sanm.c.

Referenced by decode_init().

const int8_t glyph8_x[GLYPH_COORD_VECT_SIZE]
static
Initial value:
= {
0, 2, 5, 7, 7, 7, 7, 7, 7, 5, 2, 0, 0, 0, 0, 0
}

Definition at line 45 of file sanm.c.

Referenced by decode_init().

const int8_t glyph8_y[GLYPH_COORD_VECT_SIZE]
static
Initial value:
= {
0, 0, 0, 0, 1, 3, 4, 6, 7, 7, 7, 7, 6, 4, 3, 1
}

Definition at line 49 of file sanm.c.

Referenced by decode_init().

const int8_t motion_vectors[256][2]
static

Definition at line 53 of file sanm.c.

Referenced by codec2subblock(), and process_block().

const int8_t c37_mv[]
static

Definition at line 107 of file sanm.c.

Referenced by old_codec37().

const frm_decoder v1_decoders[]
static
Initial value:
= {
}
static int decode_5(SANMVideoContext *ctx)
Definition: sanm.c:1255
static int decode_3(SANMVideoContext *ctx)
Definition: sanm.c:1243
static int decode_nop(SANMVideoContext *ctx)
Definition: sanm.c:1011
static int decode_6(SANMVideoContext *ctx)
Definition: sanm.c:1278
static int decode_2(SANMVideoContext *ctx)
Definition: sanm.c:1231
static int decode_8(SANMVideoContext *ctx)
Definition: sanm.c:1293
static int decode_0(SANMVideoContext *ctx)
Definition: sanm.c:994
static int decode_4(SANMVideoContext *ctx)
Definition: sanm.c:1249

Definition at line 1317 of file sanm.c.

Referenced by decode_frame().

AVCodec ff_sanm_decoder
Initial value:
= {
.name = "sanm",
.long_name = NULL_IF_CONFIG_SMALL("LucasArts SANM/Smush video"),
.priv_data_size = sizeof(SANMVideoContext),
.close = decode_end,
.capabilities = AV_CODEC_CAP_DR1,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt)
Definition: sanm.c:1390
static av_cold int decode_init(AVCodecContext *avctx)
Definition: sanm.c:488
static av_cold int decode_end(AVCodecContext *avctx)
Definition: sanm.c:522
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
Definition: ffmpeg.c:2035
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 1519 of file sanm.c.