FFmpeg  4.0
Macros | Functions | Variables
vp8dsp.c File Reference

VP8 compatible video decoder. More...

#include "libavutil/common.h"
#include "libavutil/intreadwrite.h"
#include "mathops.h"
#include "vp8dsp.h"

Go to the source code of this file.

Macros

#define MK_IDCT_DC_ADD4_C(name)
 
#define LOAD_PIXELS
 
#define clip_int8(n)   (cm[(n) + 0x80] - 0x80)
 
#define NORMAL_LIMIT(vpn)
 E - limit at the macroblock edge I - limit for interior difference. More...
 
#define LOOP_FILTER(vpn, dir, size, stridea, strideb, maybe_inline)
 
#define UV_LOOP_FILTER(vpn, dir, stridea, strideb)
 
#define LOOP_FILTER_SIMPLE(vpn)
 
#define LOOP_FILTERS(vpn)
 
#define PUT_PIXELS(WIDTH)
 
#define FILTER_6TAP(src, F, stride)
 
#define FILTER_4TAP(src, F, stride)
 
#define VP8_EPEL_H(SIZE, TAPS)
 
#define VP8_EPEL_V(SIZE, TAPS)
 
#define VP8_EPEL_HV(SIZE, HTAPS, VTAPS)
 
#define VP8_BILINEAR(SIZE)
 
#define VP78_MC_FUNC(IDX, SIZE)
 
#define VP78_BILINEAR_MC_FUNC(IDX, SIZE)
 

Functions

static av_always_inline void filter_common (uint8_t *p, ptrdiff_t stride, int is4tap, int is_vp7)
 
static av_always_inline void vp7_filter_common (uint8_t *p, ptrdiff_t stride, int is4tap)
 
static av_always_inline void vp8_filter_common (uint8_t *p, ptrdiff_t stride, int is4tap)
 
static av_always_inline int vp7_simple_limit (uint8_t *p, ptrdiff_t stride, int flim)
 
static av_always_inline int vp8_simple_limit (uint8_t *p, ptrdiff_t stride, int flim)
 
static av_always_inline int hev (uint8_t *p, ptrdiff_t stride, int thresh)
 
static av_always_inline void filter_mbedge (uint8_t *p, ptrdiff_t stride)
 
av_cold void ff_vp78dsp_init (VP8DSPContext *dsp)
 

Variables

static const uint8_t subpel_filters [7][6]
 

Detailed Description

VP8 compatible video decoder.

Definition in file vp8dsp.c.

Macro Definition Documentation

◆ MK_IDCT_DC_ADD4_C

#define MK_IDCT_DC_ADD4_C (   name)
Value:
static void name ## _idct_dc_add4uv_c(uint8_t *dst, int16_t block[4][16], \
ptrdiff_t stride) \
{ \
name ## _idct_dc_add_c(dst + stride * 0 + 0, block[0], stride); \
name ## _idct_dc_add_c(dst + stride * 0 + 4, block[1], stride); \
name ## _idct_dc_add_c(dst + stride * 4 + 0, block[2], stride); \
name ## _idct_dc_add_c(dst + stride * 4 + 4, block[3], stride); \
} \
\
static void name ## _idct_dc_add4y_c(uint8_t *dst, int16_t block[4][16], \
ptrdiff_t stride) \
{ \
name ## _idct_dc_add_c(dst + 0, block[0], stride); \
name ## _idct_dc_add_c(dst + 4, block[1], stride); \
name ## _idct_dc_add_c(dst + 8, block[2], stride); \
name ## _idct_dc_add_c(dst + 12, block[3], stride); \
}
const char * name
Definition: avisynth_c.h:775
int stride
Definition: mace.c:144
static int16_t block[64]
Definition: dct.c:115
uint8_t

Definition at line 34 of file vp8dsp.c.

◆ LOAD_PIXELS

#define LOAD_PIXELS
Value:
int av_unused p3 = p[-4 * stride]; \
int av_unused p2 = p[-3 * stride]; \
int av_unused p1 = p[-2 * stride]; \
int av_unused p0 = p[-1 * stride]; \
int av_unused q0 = p[ 0 * stride]; \
int av_unused q1 = p[ 1 * stride]; \
int av_unused q2 = p[ 2 * stride]; \
int av_unused q3 = p[ 3 * stride];
static const uint8_t q1[256]
Definition: twofish.c:96
int stride
Definition: mace.c:144
static const uint8_t q0[256]
Definition: twofish.c:77
#define av_unused
Definition: attributes.h:125

Definition at line 249 of file vp8dsp.c.

Referenced by filter_common(), filter_mbedge(), hev(), vp7_simple_limit(), and vp8_simple_limit().

◆ clip_int8

#define clip_int8 (   n)    (cm[(n) + 0x80] - 0x80)

Definition at line 259 of file vp8dsp.c.

Referenced by filter_common(), and filter_mbedge().

◆ NORMAL_LIMIT

#define NORMAL_LIMIT (   vpn)
Value:
static av_always_inline int vp ## vpn ## _normal_limit(uint8_t *p, \
ptrdiff_t stride, \
int E, int I) \
{ \
LOAD_PIXELS \
return vp ## vpn ## _simple_limit(p, stride, E) && \
FFABS(p3 - p2) <= I && FFABS(p2 - p1) <= I && \
FFABS(p1 - p0) <= I && FFABS(q3 - q2) <= I && \
FFABS(q2 - q1) <= I && FFABS(q1 - q0) <= I; \
}
static const uint8_t q1[256]
Definition: twofish.c:96
int stride
Definition: mace.c:144
uint8_t
static const uint8_t q0[256]
Definition: twofish.c:77
#define E
Definition: avdct.c:32
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:72
#define av_always_inline
Definition: attributes.h:39

E - limit at the macroblock edge I - limit for interior difference.

Definition at line 327 of file vp8dsp.c.

◆ LOOP_FILTER

#define LOOP_FILTER (   vpn,
  dir,
  size,
  stridea,
  strideb,
  maybe_inline 
)

Definition at line 371 of file vp8dsp.c.

◆ UV_LOOP_FILTER

#define UV_LOOP_FILTER (   vpn,
  dir,
  stridea,
  strideb 
)
Value:
LOOP_FILTER(vpn, dir, 8, stridea, strideb, av_always_inline) \
static void vpn ## _ ## dir ## _loop_filter8uv_c(uint8_t *dstU, \
uint8_t *dstV, \
ptrdiff_t stride, int fE, \
int fI, int hev_thresh) \
{ \
vpn ## _ ## dir ## _loop_filter8_c(dstU, stride, fE, fI, hev_thresh); \
vpn ## _ ## dir ## _loop_filter8_c(dstV, stride, fE, fI, hev_thresh); \
} \
\
static void vpn ## _ ## dir ## _loop_filter8uv_inner_c(uint8_t *dstU, \
uint8_t *dstV, \
ptrdiff_t stride, \
int fE, int fI, \
int hev_thresh) \
{ \
vpn ## _ ## dir ## _loop_filter8_inner_c(dstU, stride, fE, fI, \
hev_thresh); \
vpn ## _ ## dir ## _loop_filter8_inner_c(dstV, stride, fE, fI, \
hev_thresh); \
}
int stride
Definition: mace.c:144
uint8_t
#define _
#define LOOP_FILTER(vpn, dir, size, stridea, strideb, maybe_inline)
Definition: vp8dsp.c:371
#define av_always_inline
Definition: attributes.h:39

Definition at line 408 of file vp8dsp.c.

◆ LOOP_FILTER_SIMPLE

#define LOOP_FILTER_SIMPLE (   vpn)
Value:
static void vpn ## _v_loop_filter_simple_c(uint8_t *dst, ptrdiff_t stride, \
int flim) \
{ \
int i; \
for (i = 0; i < 16; i++) \
if (vpn ## _simple_limit(dst + i, stride, flim)) \
vpn ## _filter_common(dst + i, stride, 1); \
} \
\
static void vpn ## _h_loop_filter_simple_c(uint8_t *dst, ptrdiff_t stride, \
int flim) \
{ \
int i; \
for (i = 0; i < 16; i++) \
if (vpn ## _simple_limit(dst + i * stride, 1, flim)) \
vpn ## _filter_common(dst + i * stride, 1, 1); \
}
int stride
Definition: mace.c:144
uint8_t

Definition at line 431 of file vp8dsp.c.

◆ LOOP_FILTERS

#define LOOP_FILTERS (   vpn)
Value:
LOOP_FILTER(vpn, v, 16, 1, stride, ) \
LOOP_FILTER(vpn, h, 16, stride, 1, ) \
UV_LOOP_FILTER(vpn, v, 1, stride) \
UV_LOOP_FILTER(vpn, h, stride, 1) \
LOOP_FILTER_SIMPLE(vpn) \
int stride
Definition: mace.c:144
#define LOOP_FILTER(vpn, dir, size, stridea, strideb, maybe_inline)
Definition: vp8dsp.c:371

Definition at line 450 of file vp8dsp.c.

Referenced by ff_vp78dsp_init().

◆ PUT_PIXELS

#define PUT_PIXELS (   WIDTH)
Value:
static void put_vp8_pixels ## WIDTH ## _c(uint8_t *dst, ptrdiff_t dststride, \
uint8_t *src, ptrdiff_t srcstride, \
int h, int x, int y) \
{ \
int i; \
for (i = 0; i < h; i++, dst += dststride, src += srcstride) \
memcpy(dst, src, WIDTH); \
}
#define WIDTH
Definition: c93.c:43
#define src
Definition: vp8dsp.c:254
uint8_t

Definition at line 467 of file vp8dsp.c.

◆ FILTER_6TAP

#define FILTER_6TAP (   src,
  F,
  stride 
)

◆ FILTER_4TAP

#define FILTER_4TAP (   src,
  F,
  stride 
)

◆ VP8_EPEL_H

#define VP8_EPEL_H (   SIZE,
  TAPS 
)
Value:
static void put_vp8_epel ## SIZE ## _h ## TAPS ## _c(uint8_t *dst, \
ptrdiff_t dststride, \
ptrdiff_t srcstride, \
int h, int mx, int my) \
{ \
const uint8_t *filter = subpel_filters[mx - 1]; \
int x, y; \
for (y = 0; y < h; y++) { \
for (x = 0; x < SIZE; x++) \
dst[x] = FILTER_ ## TAPS ## TAP(src, filter, 1); \
dst += dststride; \
src += srcstride; \
} \
}
static const uint8_t subpel_filters[7][6]
Definition: vp8dsp.c:457
#define MAX_NEG_CROP
Definition: mathops.h:31
#define src
Definition: vp8dsp.c:254
static void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, int16_t *high, ptrdiff_t high_stride, int len, int clip)
Definition: cfhd.c:114
uint8_t
#define SIZE
Definition: cabac.c:23
#define cm
Definition: dvbsubdec.c:37
#define ff_crop_tab

Definition at line 490 of file vp8dsp.c.

◆ VP8_EPEL_V

#define VP8_EPEL_V (   SIZE,
  TAPS 
)
Value:
static void put_vp8_epel ## SIZE ## _v ## TAPS ## _c(uint8_t *dst, \
ptrdiff_t dststride, \
ptrdiff_t srcstride, \
int h, int mx, int my) \
{ \
const uint8_t *filter = subpel_filters[my - 1]; \
int x, y; \
for (y = 0; y < h; y++) { \
for (x = 0; x < SIZE; x++) \
dst[x] = FILTER_ ## TAPS ## TAP(src, filter, srcstride); \
dst += dststride; \
src += srcstride; \
} \
}
static const uint8_t subpel_filters[7][6]
Definition: vp8dsp.c:457
#define MAX_NEG_CROP
Definition: mathops.h:31
#define src
Definition: vp8dsp.c:254
static void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, int16_t *high, ptrdiff_t high_stride, int len, int clip)
Definition: cfhd.c:114
uint8_t
#define SIZE
Definition: cabac.c:23
#define cm
Definition: dvbsubdec.c:37
#define ff_crop_tab

Definition at line 508 of file vp8dsp.c.

◆ VP8_EPEL_HV

#define VP8_EPEL_HV (   SIZE,
  HTAPS,
  VTAPS 
)

Definition at line 526 of file vp8dsp.c.

◆ VP8_BILINEAR

#define VP8_BILINEAR (   SIZE)

Definition at line 585 of file vp8dsp.c.

◆ VP78_MC_FUNC

#define VP78_MC_FUNC (   IDX,
  SIZE 
)
Value:
dsp->put_vp8_epel_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
dsp->put_vp8_epel_pixels_tab[IDX][0][1] = put_vp8_epel ## SIZE ## _h4_c; \
dsp->put_vp8_epel_pixels_tab[IDX][0][2] = put_vp8_epel ## SIZE ## _h6_c; \
dsp->put_vp8_epel_pixels_tab[IDX][1][0] = put_vp8_epel ## SIZE ## _v4_c; \
dsp->put_vp8_epel_pixels_tab[IDX][1][1] = put_vp8_epel ## SIZE ## _h4v4_c; \
dsp->put_vp8_epel_pixels_tab[IDX][1][2] = put_vp8_epel ## SIZE ## _h6v4_c; \
dsp->put_vp8_epel_pixels_tab[IDX][2][0] = put_vp8_epel ## SIZE ## _v6_c; \
dsp->put_vp8_epel_pixels_tab[IDX][2][1] = put_vp8_epel ## SIZE ## _h4v6_c; \
dsp->put_vp8_epel_pixels_tab[IDX][2][2] = put_vp8_epel ## SIZE ## _h6v6_c
#define SIZE
Definition: cabac.c:23

Definition at line 644 of file vp8dsp.c.

Referenced by ff_vp78dsp_init().

◆ VP78_BILINEAR_MC_FUNC

#define VP78_BILINEAR_MC_FUNC (   IDX,
  SIZE 
)
Value:
dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][0][1] = put_vp8_bilinear ## SIZE ## _h_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][0][2] = put_vp8_bilinear ## SIZE ## _h_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][1][0] = put_vp8_bilinear ## SIZE ## _v_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][1][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][1][2] = put_vp8_bilinear ## SIZE ## _hv_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][2][0] = put_vp8_bilinear ## SIZE ## _v_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][2][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
dsp->put_vp8_bilinear_pixels_tab[IDX][2][2] = put_vp8_bilinear ## SIZE ## _hv_c
#define SIZE
Definition: cabac.c:23

Definition at line 655 of file vp8dsp.c.

Referenced by ff_vp78dsp_init().

Function Documentation

◆ filter_common()

static av_always_inline void filter_common ( uint8_t p,
ptrdiff_t  stride,
int  is4tap,
int  is_vp7 
)
static

Definition at line 261 of file vp8dsp.c.

Referenced by vp7_filter_common(), and vp8_filter_common().

◆ vp7_filter_common()

static av_always_inline void vp7_filter_common ( uint8_t p,
ptrdiff_t  stride,
int  is4tap 
)
static

Definition at line 297 of file vp8dsp.c.

◆ vp8_filter_common()

static av_always_inline void vp8_filter_common ( uint8_t p,
ptrdiff_t  stride,
int  is4tap 
)
static

Definition at line 303 of file vp8dsp.c.

◆ vp7_simple_limit()

static av_always_inline int vp7_simple_limit ( uint8_t p,
ptrdiff_t  stride,
int  flim 
)
static

Definition at line 309 of file vp8dsp.c.

◆ vp8_simple_limit()

static av_always_inline int vp8_simple_limit ( uint8_t p,
ptrdiff_t  stride,
int  flim 
)
static

Definition at line 316 of file vp8dsp.c.

◆ hev()

static av_always_inline int hev ( uint8_t p,
ptrdiff_t  stride,
int  thresh 
)
static

Definition at line 343 of file vp8dsp.c.

◆ filter_mbedge()

static av_always_inline void filter_mbedge ( uint8_t p,
ptrdiff_t  stride 
)
static

Definition at line 349 of file vp8dsp.c.

◆ ff_vp78dsp_init()

av_cold void ff_vp78dsp_init ( VP8DSPContext dsp)

Definition at line 666 of file vp8dsp.c.

Referenced by check_mc(), and vp78_decode_init().

Variable Documentation

◆ subpel_filters

const uint8_t subpel_filters[7][6]
static