FFmpeg
4.0
|
Xan video decoder for Wing Commander III computer game by Mario Brito (mbrit) and Mike Melanson ( o@st udent .dei .uc.p tmelan) son@ pcisy s.ne tMore...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/intreadwrite.h"
#include "libavutil/mem.h"
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "internal.h"
Go to the source code of this file.
Data Structures | |
struct | XanContext |
Macros | |
#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_end (AVCodecContext *avctx) |
static av_cold int | xan_decode_init (AVCodecContext *avctx) |
static int | xan_huffman_decode (uint8_t *dest, int dest_len, const uint8_t *src, int src_len) |
static void | xan_unpack (uint8_t *dest, int dest_len, const uint8_t *src, int src_len) |
unpack simple compression More... | |
static void | xan_wc3_output_pixel_run (XanContext *s, AVFrame *frame, const uint8_t *pixel_buffer, int x, int y, int pixel_count) |
static void | xan_wc3_copy_pixel_run (XanContext *s, AVFrame *frame, int x, int y, int pixel_count, int motion_x, int motion_y) |
static int | xan_wc3_decode_frame (XanContext *s, AVFrame *frame) |
static int | xan_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt) |
Variables | |
static const uint8_t | gamma_lookup [256] |
This is a gamma correction that xan3 applies to all palette entries. More... | |
AVCodec | ff_xan_wc3_decoder |
Xan video decoder for Wing Commander III computer game by Mario Brito (mbrit) and Mike Melanson ( o@st udent .dei .uc.p tmelan) son@ pcisy s.ne t
The xan_wc3 decoder outputs PAL8 data.
Definition in file xan.c.
Definition at line 46 of file xan.c.
Referenced by xan_decode_frame().
Definition at line 47 of file xan.c.
Referenced by xan_decode_frame().
Definition at line 48 of file xan.c.
Referenced by xan_decode_frame().
#define PALETTE_COUNT 256 |
Definition at line 49 of file xan.c.
Referenced by xan_decode_frame().
#define PALETTE_SIZE (PALETTE_COUNT * 3) |
Definition at line 50 of file xan.c.
Referenced by xan_decode_frame().
#define PALETTES_MAX 256 |
Definition at line 51 of file xan.c.
Referenced by xan_decode_frame().
|
static |
Definition at line 75 of file xan.c.
Referenced by xan_decode_init().
|
static |
|
static |
Definition at line 117 of file xan.c.
Referenced by xan_wc3_decode_frame().
unpack simple compression
dest | destination buffer of dest_len, must be padded with at least 130 bytes |
Definition at line 158 of file xan.c.
Referenced by xan_wc3_decode_frame().
|
inlinestatic |
Definition at line 212 of file xan.c.
Referenced by xan_wc3_decode_frame().
|
inlinestatic |
Definition at line 242 of file xan.c.
Referenced by xan_wc3_decode_frame().
|
static |
Definition at line 300 of file xan.c.
Referenced by xan_decode_frame().
|
static |
|
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 508 of file xan.c.
Referenced by xan_decode_frame().
AVCodec ff_xan_wc3_decoder |