FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
interplayvideo.c File Reference

Interplay MVE Video Decoder by Mike Melanson (melan.nosp@m.son@.nosp@m.pcisy.nosp@m.s.ne.nosp@m.t) For more information about the Interplay MVE format, visit: http://www.pcisys.net/~melanson/codecs/interplay-mve.txt This code is written in such a way that the identifiers match up with the encoding descriptions in the document. 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 "hpeldsp.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  IpvideoContext
 

Macros

#define BITSTREAM_READER_LE
 
#define PALETTE_COUNT   256
 

Functions

static int copy_from (IpvideoContext *s, AVFrame *src, AVFrame *dst, int delta_x, int delta_y)
 
static int ipvideo_decode_block_opcode_0x0 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x1 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x2 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x3 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x4 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x5 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x6 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x7 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x8 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x9 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xA (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xB (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xC (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xD (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xE (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xF (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x6_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x7_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x8_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0x9_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xA_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xB_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xC_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xD_16 (IpvideoContext *s, AVFrame *frame)
 
static int ipvideo_decode_block_opcode_0xE_16 (IpvideoContext *s, AVFrame *frame)
 
static void ipvideo_decode_opcodes (IpvideoContext *s, AVFrame *frame)
 
static av_cold int ipvideo_decode_init (AVCodecContext *avctx)
 
static int ipvideo_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int ipvideo_decode_end (AVCodecContext *avctx)
 

Variables

static int(*const ipvideo_decode_block [])(IpvideoContext *s, AVFrame *frame)
 
static int(*const ipvideo_decode_block16 [])(IpvideoContext *s, AVFrame *frame)
 
AVCodec ff_interplay_video_decoder
 

Detailed Description

Interplay MVE Video Decoder by Mike Melanson (melan.nosp@m.son@.nosp@m.pcisy.nosp@m.s.ne.nosp@m.t) For more information about the Interplay MVE format, visit: http://www.pcisys.net/~melanson/codecs/interplay-mve.txt This code is written in such a way that the identifiers match up with the encoding descriptions in the document.

This decoder presently only supports a PAL8 output colorspace.

An Interplay video frame consists of 2 parts: The decoding map and the video data. A demuxer must load these 2 parts together in a single buffer before sending it through the stream to this decoder.

Definition in file interplayvideo.c.

Macro Definition Documentation

#define BITSTREAM_READER_LE

Definition at line 43 of file interplayvideo.c.

#define PALETTE_COUNT   256

Definition at line 50 of file interplayvideo.c.

Function Documentation

static int copy_from ( IpvideoContext s,
AVFrame src,
AVFrame dst,
int  delta_x,
int  delta_y 
)
static
static int ipvideo_decode_block_opcode_0x0 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 93 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x1 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 98 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x2 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 103 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x3 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 127 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x4 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 153 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x5 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 174 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x6 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 187 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x7 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 196 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x8 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 240 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x9 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 318 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xA ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 388 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xB ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 454 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xC ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 468 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xD ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 487 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xE ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 512 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xF ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 529 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x6_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 550 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x7_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 562 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x8_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 599 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0x9_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 675 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xA_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 742 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xB_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 808 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xC_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 824 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xD_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 844 of file interplayvideo.c.

static int ipvideo_decode_block_opcode_0xE_16 ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 865 of file interplayvideo.c.

static void ipvideo_decode_opcodes ( IpvideoContext s,
AVFrame frame 
)
static

Definition at line 906 of file interplayvideo.c.

Referenced by ipvideo_decode_frame().

static av_cold int ipvideo_decode_init ( AVCodecContext avctx)
static

Definition at line 960 of file interplayvideo.c.

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

Definition at line 982 of file interplayvideo.c.

static av_cold int ipvideo_decode_end ( AVCodecContext avctx)
static

Definition at line 1040 of file interplayvideo.c.

Variable Documentation

int(* const ipvideo_decode_block[])(IpvideoContext *s, AVFrame *frame)
static
Initial value:
= {
}
static int ipvideo_decode_block_opcode_0x4(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xA(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x2(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x9(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x5(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xD(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x0(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x8(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x3(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x1(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x6(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xE(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xF(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xB(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x7(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xC(IpvideoContext *s, AVFrame *frame)

Definition at line 884 of file interplayvideo.c.

Referenced by ipvideo_decode_opcodes().

int(* const ipvideo_decode_block16[])(IpvideoContext *s, AVFrame *frame)
static
Initial value:
= {
}
static int ipvideo_decode_block_opcode_0x4(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x2(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x7_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x5(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x8_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xE_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xC_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x0(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x3(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x1(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xD_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x6_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xB_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0x9_16(IpvideoContext *s, AVFrame *frame)
static int ipvideo_decode_block_opcode_0xA_16(IpvideoContext *s, AVFrame *frame)

Definition at line 895 of file interplayvideo.c.

Referenced by ipvideo_decode_opcodes().

AVCodec ff_interplay_video_decoder
Initial value:
= {
.name = "interplayvideo",
.long_name = NULL_IF_CONFIG_SMALL("Interplay MVE video"),
.priv_data_size = sizeof(IpvideoContext),
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
static av_cold int ipvideo_decode_end(AVCodecContext *avctx)
static av_cold int ipvideo_decode_init(AVCodecContext *avctx)
#define AV_CODEC_CAP_PARAM_CHANGE
Codec supports changed parameters at any point.
Definition: avcodec.h:1030
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
Definition: ffmpeg.c:2035
static int ipvideo_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 1050 of file interplayvideo.c.