FFmpeg  4.4.6
Data Structures | Macros | Functions | Variables
clearvideo.c File Reference

ClearVideo decoder. More...

#include "libavutil/mem_internal.h"
#include "libavutil/thread.h"
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "idctdsp.h"
#include "internal.h"
#include "mathops.h"
#include "clearvideodata.h"

Go to the source code of this file.

Data Structures

struct  LevelCodes
 
struct  MV
 
struct  MVInfo
 
struct  TileInfo
 
struct  CLVContext
 

Macros

#define CLV_VLC_BITS   9
 
#define DCT_TEMPLATE(blk, step, bias, shift, dshift, OP)
 
#define ROP(x)   x
 
#define COP(x)   (((x) + 4) >> 3)
 

Functions

static int decode_block (CLVContext *ctx, int16_t *blk, int has_ac, int ac_quant)
 
static void clv_dct (int16_t *block)
 
static int decode_mb (CLVContext *c, int x, int y)
 
static int copy_block (AVCodecContext *avctx, AVFrame *dst, AVFrame *src, int plane, int x, int y, int dx, int dy, int size)
 
static int copyadd_block (AVCodecContext *avctx, AVFrame *dst, AVFrame *src, int plane, int x, int y, int dx, int dy, int size, int bias)
 
static MV mvi_predict (MVInfo *mvi, int mb_x, int mb_y, MV diff)
 
static void mvi_reset (MVInfo *mvi, int mb_w, int mb_h, int mb_size)
 
static void mvi_update_row (MVInfo *mvi)
 
static TileInfodecode_tile_info (GetBitContext *gb, const LevelCodes *lc, int level)
 
static int tile_do_block (AVCodecContext *avctx, AVFrame *dst, AVFrame *src, int plane, int x, int y, int dx, int dy, int size, int bias)
 
static int restore_tree (AVCodecContext *avctx, AVFrame *dst, AVFrame *src, int plane, int x, int y, int size, TileInfo *tile, MV root_mv)
 
static void extend_edges (AVFrame *buf, int tile_size)
 
static int clv_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold void build_vlc (VLC *vlc, const uint8_t counts[16], const uint16_t **syms, unsigned *offset)
 
static av_cold void clv_init_static (void)
 
static av_cold int clv_decode_init (AVCodecContext *avctx)
 
static av_cold int clv_decode_end (AVCodecContext *avctx)
 

Variables

static const MV zero_mv = { 0 }
 
static VLC dc_vlc
 
static VLC ac_vlc
 
static LevelCodes lev [4+3+3]
 
static VLC_TYPE vlc_buf [16716][2]
 
AVCodec ff_clearvideo_decoder
 

Detailed Description

ClearVideo decoder.

Definition in file clearvideo.c.

Macro Definition Documentation

◆ CLV_VLC_BITS

#define CLV_VLC_BITS   9

Definition at line 38 of file clearvideo.c.

◆ DCT_TEMPLATE

#define DCT_TEMPLATE (   blk,
  step,
  bias,
  shift,
  dshift,
  OP 
)
Value:
const int t0 = OP(2841 * blk[1 * step] + 565 * blk[7 * step]); \
const int t1 = OP( 565 * blk[1 * step] - 2841 * blk[7 * step]); \
const int t2 = OP(1609 * blk[5 * step] + 2408 * blk[3 * step]); \
const int t3 = OP(2408 * blk[5 * step] - 1609 * blk[3 * step]); \
const int t4 = OP(1108 * blk[2 * step] - 2676 * blk[6 * step]); \
const int t5 = OP(2676 * blk[2 * step] + 1108 * blk[6 * step]); \
const int t6 = ((blk[0 * step] + blk[4 * step]) * (1 << dshift)) + bias; \
const int t7 = ((blk[0 * step] - blk[4 * step]) * (1 << dshift)) + bias; \
const int t8 = t0 + t2; \
const int t9 = t0 - t2; \
const int tA = (int)(181U * (t9 + (t1 - t3)) + 0x80) >> 8; \
const int tB = (int)(181U * (t9 - (t1 - t3)) + 0x80) >> 8; \
const int tC = t1 + t3; \
\
blk[0 * step] = (t6 + t5 + t8) >> shift; \
blk[1 * step] = (t7 + t4 + tA) >> shift; \
blk[2 * step] = (t7 - t4 + tB) >> shift; \
blk[3 * step] = (t6 - t5 + tC) >> shift; \
blk[4 * step] = (t6 - t5 - tC) >> shift; \
blk[5 * step] = (t7 - t4 - tB) >> shift; \
blk[6 * step] = (t7 + t4 - tA) >> shift; \
blk[7 * step] = (t6 + t5 - t8) >> shift; \
int
#define OP(LOAD, STORE)
Definition: hpeldsp_alpha.c:55
#define t5
Definition: regdef.h:33
#define t0
Definition: regdef.h:28
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define t8
Definition: regdef.h:53
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
#define t9
Definition: regdef.h:54
#define t2
Definition: regdef.h:30
#define t7
Definition: regdef.h:35
#define blk(i)
Definition: sha.c:185
static int shift(int a, int b)
Definition: sonic.c:82

Definition at line 132 of file clearvideo.c.

◆ ROP

#define ROP (   x)    x

Definition at line 156 of file clearvideo.c.

◆ COP

#define COP (   x)    (((x) + 4) >> 3)

Definition at line 157 of file clearvideo.c.

Function Documentation

◆ decode_block()

static int decode_block ( CLVContext ctx,
int16_t *  blk,
int  has_ac,
int  ac_quant 
)
inlinestatic

Definition at line 88 of file clearvideo.c.

Referenced by decode_mb().

◆ clv_dct()

static void clv_dct ( int16_t *  block)
static

Definition at line 159 of file clearvideo.c.

Referenced by decode_mb().

◆ decode_mb()

static int decode_mb ( CLVContext c,
int  x,
int  y 
)
static

Definition at line 177 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ copy_block()

static int copy_block ( AVCodecContext avctx,
AVFrame dst,
AVFrame src,
int  plane,
int  x,
int  y,
int  dx,
int  dy,
int  size 
)
static

Definition at line 224 of file clearvideo.c.

Referenced by clv_decode_frame(), and tile_do_block().

◆ copyadd_block()

static int copyadd_block ( AVCodecContext avctx,
AVFrame dst,
AVFrame src,
int  plane,
int  x,
int  y,
int  dx,
int  dy,
int  size,
int  bias 
)
static

Definition at line 260 of file clearvideo.c.

Referenced by tile_do_block().

◆ mvi_predict()

static MV mvi_predict ( MVInfo mvi,
int  mb_x,
int  mb_y,
MV  diff 
)
static

Definition at line 298 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ mvi_reset()

static void mvi_reset ( MVInfo mvi,
int  mb_w,
int  mb_h,
int  mb_size 
)
static

Definition at line 344 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ mvi_update_row()

static void mvi_update_row ( MVInfo mvi)
static

Definition at line 354 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ decode_tile_info()

static TileInfo* decode_tile_info ( GetBitContext gb,
const LevelCodes lc,
int  level 
)
static

Definition at line 364 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ tile_do_block()

static int tile_do_block ( AVCodecContext avctx,
AVFrame dst,
AVFrame src,
int  plane,
int  x,
int  y,
int  dx,
int  dy,
int  size,
int  bias 
)
static

Definition at line 417 of file clearvideo.c.

Referenced by restore_tree().

◆ restore_tree()

static int restore_tree ( AVCodecContext avctx,
AVFrame dst,
AVFrame src,
int  plane,
int  x,
int  y,
int  size,
TileInfo tile,
MV  root_mv 
)
static

Definition at line 431 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ extend_edges()

static void extend_edges ( AVFrame buf,
int  tile_size 
)
static

Definition at line 462 of file clearvideo.c.

Referenced by clv_decode_frame().

◆ clv_decode_frame()

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

Definition at line 501 of file clearvideo.c.

◆ build_vlc()

static av_cold void build_vlc ( VLC vlc,
const uint8_t  counts[16],
const uint16_t **  syms,
unsigned *  offset 
)
static

Definition at line 653 of file clearvideo.c.

Referenced by clv_init_static().

◆ clv_init_static()

static av_cold void clv_init_static ( void  )
static

Definition at line 674 of file clearvideo.c.

Referenced by clv_decode_init().

◆ clv_decode_init()

static av_cold int clv_decode_init ( AVCodecContext avctx)
static

Definition at line 707 of file clearvideo.c.

◆ clv_decode_end()

static av_cold int clv_decode_end ( AVCodecContext avctx)
static

Definition at line 757 of file clearvideo.c.

Variable Documentation

◆ zero_mv

const MV zero_mv = { 0 }
static

Definition at line 50 of file clearvideo.c.

Referenced by clv_decode_frame(), and mvi_predict().

◆ dc_vlc

VLC dc_vlc
static

Definition at line 84 of file clearvideo.c.

Referenced by clv_init_static(), and decode_block().

◆ ac_vlc

VLC ac_vlc
static

Definition at line 84 of file clearvideo.c.

Referenced by clv_init_static(), and decode_block().

◆ lev

LevelCodes lev[4+3+3]
static

◆ vlc_buf

VLC_TYPE vlc_buf[16716][2]
static

◆ ff_clearvideo_decoder

AVCodec ff_clearvideo_decoder
Initial value:
= {
.name = "clearvideo",
.long_name = NULL_IF_CONFIG_SMALL("Iterated Systems ClearVideo"),
.priv_data_size = sizeof(CLVContext),
.close = clv_decode_end,
.capabilities = AV_CODEC_CAP_DR1,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:31
static av_cold int clv_decode_init(AVCodecContext *avctx)
Definition: clearvideo.c:707
static int clv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: clearvideo.c:501
static av_cold int clv_decode_end(AVCodecContext *avctx)
Definition: clearvideo.c:757
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
@ AV_CODEC_ID_CLEARVIDEO
Definition: codec_id.h:277
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:41
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: internal.h:49
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117

Definition at line 769 of file clearvideo.c.