FFmpeg
Data Structures | Functions | Variables
yop.c File Reference
#include <string.h>
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "decode.h"

Go to the source code of this file.

Data Structures

struct  YopDecContext
 

Functions

static av_cold int yop_decode_close (AVCodecContext *avctx)
 
static av_cold int yop_decode_init (AVCodecContext *avctx)
 
static int yop_paint_block (YopDecContext *s, int linesize, int tag)
 Paint a macroblock using the pattern in paint_lut. More...
 
static int yop_copy_previous_block (YopDecContext *s, int linesize, int copy_tag)
 Copy a previously painted macroblock to the current_block. More...
 
static uint8_t yop_get_next_nibble (YopDecContext *s)
 Return the next nibble in sequence, consuming a new byte on the input only if necessary. More...
 
static int yop_decode_frame (AVCodecContext *avctx, AVFrame *rframe, int *got_frame, AVPacket *avpkt)
 

Variables

static const uint8_t paint_lut [15][4]
 Lookup table for painting macroblocks. More...
 
static const int8_t motion_vector [16][2]
 Lookup table for copying macroblocks. More...
 
const FFCodec ff_yop_decoder
 

Function Documentation

◆ yop_decode_close()

static av_cold int yop_decode_close ( AVCodecContext avctx)
static

Definition at line 84 of file yop.c.

◆ yop_decode_init()

static av_cold int yop_decode_init ( AVCodecContext avctx)
static

Definition at line 93 of file yop.c.

◆ yop_paint_block()

static int yop_paint_block ( YopDecContext s,
int  linesize,
int  tag 
)
static

Paint a macroblock using the pattern in paint_lut.

Parameters
scodec context
tagthe tag that was in the nibble

Definition at line 134 of file yop.c.

Referenced by yop_decode_frame().

◆ yop_copy_previous_block()

static int yop_copy_previous_block ( YopDecContext s,
int  linesize,
int  copy_tag 
)
static

Copy a previously painted macroblock to the current_block.

Parameters
copy_tagthe tag that was in the nibble

Definition at line 155 of file yop.c.

Referenced by yop_decode_frame().

◆ yop_get_next_nibble()

static uint8_t yop_get_next_nibble ( YopDecContext s)
static

Return the next nibble in sequence, consuming a new byte on the input only if necessary.

Definition at line 179 of file yop.c.

Referenced by yop_decode_frame().

◆ yop_decode_frame()

static int yop_decode_frame ( AVCodecContext avctx,
AVFrame rframe,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 193 of file yop.c.

Variable Documentation

◆ paint_lut

const uint8_t paint_lut[15][4]
static
Initial value:
=
{{1, 2, 3, 4}, {1, 2, 0, 3},
{1, 2, 1, 3}, {1, 2, 2, 3},
{1, 0, 2, 3}, {1, 0, 0, 2},
{1, 0, 1, 2}, {1, 1, 2, 3},
{0, 1, 2, 3}, {0, 1, 0, 2},
{1, 1, 0, 2}, {0, 1, 1, 2},
{0, 0, 1, 2}, {0, 0, 0, 1},
{1, 1, 1, 2},
}

Lookup table for painting macroblocks.

Bytes 0-2 of each entry contain the macroblock positions to be painted (taken as (0, B0, B1, B2)). Byte 3 contains the number of bytes consumed on the input, equal to max(bytes 0-2) + 1.

Definition at line 58 of file yop.c.

Referenced by yop_paint_block().

◆ motion_vector

const int8_t motion_vector[16][2]
static
Initial value:
=
{{-4, -4}, {-2, -4},
{ 0, -4}, { 2, -4},
{-4, -2}, {-4, 0},
{-3, -3}, {-1, -3},
{ 1, -3}, { 3, -3},
{-3, -1}, {-2, -2},
{ 0, -2}, { 2, -2},
{ 4, -2}, {-2, 0},
}

Lookup table for copying macroblocks.

Each entry contains the respective x and y pixel offset for the copy source.

Definition at line 73 of file yop.c.

Referenced by yop_copy_previous_block().

◆ ff_yop_decoder

const FFCodec ff_yop_decoder
Initial value:
= {
.p.name = "yop",
CODEC_LONG_NAME("Psygnosis YOP Video"),
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_YOP,
.p.capabilities = AV_CODEC_CAP_DR1,
.priv_data_size = sizeof(YopDecContext),
.close = yop_decode_close,
}

Definition at line 272 of file yop.c.

AV_CODEC_ID_YOP
@ AV_CODEC_ID_YOP
Definition: codec_id.h:191
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:311
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:296
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
yop_decode_close
static av_cold int yop_decode_close(AVCodecContext *avctx)
Definition: yop.c:84
yop_decode_init
static av_cold int yop_decode_init(AVCodecContext *avctx)
Definition: yop.c:93
YopDecContext
Definition: yop.c:34
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
yop_decode_frame
static int yop_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, AVPacket *avpkt)
Definition: yop.c:193