libavcodec/xan.c File Reference

Xan video decoder for Wing Commander III computer game by Mario Brito (mbrito@student.dei.uc.pt) and Mike Melanson (melanson@pcisys.net). More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "libavutil/lzo.h"

Go to the source code of this file.

Data Structures

struct  XanContext

Defines

#define BITSTREAM_READER_LE
#define RUNTIME_GAMMA   0
#define VGA__TAG   MKTAG('V', 'G', 'A', ' ')
#define PALT_TAG   MKTAG('P', 'A', 'L', 'T')
#define SHOT_TAG   MKTAG('S', 'H', 'O', 'T')
#define PALETTE_COUNT   256
#define PALETTE_SIZE   (PALETTE_COUNT * 3)
#define PALETTES_MAX   256

Functions

static av_cold int xan_decode_init (AVCodecContext *avctx)
static int xan_huffman_decode (unsigned char *dest, int dest_len, const unsigned char *src, int src_len)
static void xan_unpack (unsigned char *dest, int dest_len, const unsigned char *src, int src_len)
 unpack simple compression
static void xan_wc3_output_pixel_run (XanContext *s, const unsigned char *pixel_buffer, int x, int y, int pixel_count)
static void xan_wc3_copy_pixel_run (XanContext *s, int x, int y, int pixel_count, int motion_x, int motion_y)
static int xan_wc3_decode_frame (XanContext *s)
static int xan_decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
static av_cold int xan_decode_end (AVCodecContext *avctx)

Variables

static const uint8_t gamma_lookup [256]
 This is a gamma correction that xan3 applies to all palette entries.
AVCodec ff_xan_wc3_decoder


Detailed Description

Xan video decoder for Wing Commander III computer game by Mario Brito (mbrito@student.dei.uc.pt) and Mike Melanson (melanson@pcisys.net).

The xan_wc3 decoder outputs PAL8 data.

Definition in file xan.c.


Define Documentation

#define BITSTREAM_READER_LE

Definition at line 38 of file xan.c.

#define PALETTE_COUNT   256

Definition at line 48 of file xan.c.

#define PALETTE_SIZE   (PALETTE_COUNT * 3)

Definition at line 49 of file xan.c.

Referenced by wc3_read_header(), and xan_decode_frame().

#define PALETTES_MAX   256

Definition at line 50 of file xan.c.

Referenced by xan_decode_frame().

#define PALT_TAG   MKTAG('P', 'A', 'L', 'T')

Definition at line 46 of file xan.c.

Referenced by wc3_read_header(), and xan_decode_frame().

#define RUNTIME_GAMMA   0

Definition at line 43 of file xan.c.

#define SHOT_TAG   MKTAG('S', 'H', 'O', 'T')

Definition at line 47 of file xan.c.

Referenced by wc3_read_packet(), and xan_decode_frame().

#define VGA__TAG   MKTAG('V', 'G', 'A', ' ')

Definition at line 45 of file xan.c.

Referenced by wc3_read_packet(), and xan_decode_frame().


Function Documentation

static av_cold int xan_decode_end ( AVCodecContext avctx  )  [static]

Definition at line 606 of file xan.c.

static int xan_decode_frame ( AVCodecContext avctx,
void *  data,
int data_size,
AVPacket avpkt 
) [static]

Definition at line 502 of file xan.c.

static av_cold int xan_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 75 of file xan.c.

static int xan_huffman_decode ( unsigned char *  dest,
int  dest_len,
const unsigned char *  src,
int  src_len 
) [static]

Definition at line 100 of file xan.c.

Referenced by xan_wc3_decode_frame().

static void xan_unpack ( unsigned char *  dest,
int  dest_len,
const unsigned char *  src,
int  src_len 
) [static]

unpack simple compression

Parameters:
dest destination buffer of dest_len, must be padded with at least 130 bytes

Definition at line 138 of file xan.c.

Referenced by xan_decode_chroma(), xan_decode_frame_type0(), and xan_wc3_decode_frame().

static void xan_wc3_copy_pixel_run ( XanContext s,
int  x,
int  y,
int  pixel_count,
int  motion_x,
int  motion_y 
) [inline, static]

Definition at line 219 of file xan.c.

Referenced by xan_wc3_decode_frame().

static int xan_wc3_decode_frame ( XanContext s  )  [static]

Definition at line 270 of file xan.c.

Referenced by xan_decode_frame().

static void xan_wc3_output_pixel_run ( XanContext s,
const unsigned char *  pixel_buffer,
int  x,
int  y,
int  pixel_count 
) [inline, static]

Definition at line 189 of file xan.c.

Referenced by xan_wc3_decode_frame().


Variable Documentation

Initial value:

 {
    .name           = "xan_wc3",
    .type           = AVMEDIA_TYPE_VIDEO,
    .id             = AV_CODEC_ID_XAN_WC3,
    .priv_data_size = sizeof(XanContext),
    .init           = xan_decode_init,
    .close          = xan_decode_end,
    .decode         = xan_decode_frame,
    .capabilities   = CODEC_CAP_DR1,
    .long_name      = NULL_IF_CONFIG_SMALL("Wing Commander III / Xan"),
}

Definition at line 623 of file xan.c.

const uint8_t gamma_lookup[256] [static]

This is a gamma correction that xan3 applies to all palette entries.

There is a peculiarity, namely that the values are clamped to 253 - it seems likely that this table was calculated by a buggy fixed-point implementation, the one above under RUNTIME_GAMMA behaves like this for example. The exponent value of 0.8 can be explained by this as well, since 0.8 = 4/5 and thus pow(x, 0.8) is still easy to calculate. Also, the input values are first rotated to the left by 2.

Definition at line 466 of file xan.c.


Generated on Fri Oct 26 02:50:08 2012 for FFmpeg by  doxygen 1.5.8