Go to the source code of this file.
|
#define | SIZEOF_PIXEL ((bit_depth + 7) / 8) |
|
#define | randomize_buffers() |
|
#define | randomize_buffers() |
|
#define | SIZEOF_COEF (2 * ((bit_depth + 7) / 8)) |
|
#define | setpx(a, b, c) |
|
#define | setdx(a, b, c, d) setpx(a,b,c-(d)+(rnd()%((d)*2+1))) |
|
#define | setsx(a, b, c, d) setdx(a,b,c,(d) << (bit_depth - 8)) |
|
#define | randomize_buffers(bidx, lineoff, str) |
|
#define | M(a) (((a)[1] << 8) | (a)[0]) |
|
#define | DST_BUF_SIZE (size * size * SIZEOF_PIXEL) |
|
#define | SRC_BUF_STRIDE 72 |
|
#define | SRC_BUF_SIZE ((size + 7) * SRC_BUF_STRIDE * SIZEOF_PIXEL) |
|
#define | src (buf + 3 * SIZEOF_PIXEL * (SRC_BUF_STRIDE + 1)) |
|
#define | randomize_buffers() |
|
|
static void | check_ipred (void) |
|
static void | fwht_1d (double *out, const double *in, int sz) |
|
static void | fdct_1d (double *out, const double *in, int sz) |
|
static void | fadst4_1d (double *out, const double *in, int sz) |
|
static void | fadst_1d (double *out, const double *in, int sz) |
|
static void | ftx_2d (double *out, const double *in, enum TxfmMode tx, enum TxfmType txtp, int sz) |
|
static void | ftx (int16_t *buf, enum TxfmMode tx, enum TxfmType txtp, int sz, int bit_depth) |
|
static int | copy_subcoefs (int16_t *out, const int16_t *in, enum TxfmMode tx, enum TxfmType txtp, int sz, int sub, int bit_depth) |
|
static int | iszero (const int16_t *c, int sz) |
|
static void | check_itxfm (void) |
|
static void | randomize_loopfilter_buffers (int bidx, int lineoff, int str, int bit_depth, int dir, const int *E, const int *F, const int *H, const int *I, uint8_t *buf0, uint8_t *buf1) |
|
static void | check_loopfilter (void) |
|
static void | check_mc (void) |
|
void | checkasm_check_vp9dsp (void) |
|
|
static const uint32_t | pixel_mask [3] = { 0xffffffff, 0x03ff03ff, 0x0fff0fff } |
|
◆ SIZEOF_PIXEL
◆ randomize_buffers [1/4]
#define randomize_buffers |
( |
| ) |
|
Value: do { \
int k; \
} \
} \
} while (0)
Definition at line 540 of file vp9dsp.c.
◆ randomize_buffers [2/4]
#define randomize_buffers |
( |
| ) |
|
Value: do { \
for (y = 0; y < sz; y++) { \
} \
for (x = 0; x < sz; x++) { \
coef[y * sz + x] =
src[y * sz + x] - dst[y * sz + x]; \
} else { \
((uint16_t *)
src)[y * sz + x] - \
((uint16_t *) dst)[y * sz + x]; \
} \
} \
} \
} while(0)
Definition at line 540 of file vp9dsp.c.
◆ SIZEOF_COEF
#define SIZEOF_COEF (2 * ((bit_depth + 7) / 8)) |
◆ setpx
#define setpx |
( |
|
a, |
|
|
|
b, |
|
|
|
c |
|
) |
| |
Value: do { \
buf0[(
a) + (
b) * jstride] = av_clip_uint8(
c); \
} else { \
((uint16_t *)buf0)[(
a) + (
b) * jstride] = av_clip_uintp2(
c,
bit_depth); \
} \
} while (0)
Definition at line 379 of file vp9dsp.c.
◆ setdx
◆ setsx
◆ randomize_buffers [3/4]
#define randomize_buffers |
( |
|
bidx, |
|
|
|
lineoff, |
|
|
|
str |
|
) |
| |
#define M |
( |
|
a | ) |
(((a)[1] << 8) | (a)[0]) |
◆ DST_BUF_SIZE
◆ SRC_BUF_STRIDE
#define SRC_BUF_STRIDE 72 |
◆ SRC_BUF_SIZE
◆ src
◆ randomize_buffers [4/4]
#define randomize_buffers |
( |
| ) |
|
Value: do { \
int k; \
} \
} \
} \
} while (0)
Definition at line 540 of file vp9dsp.c.
◆ ftx1d_fn
typedef void(* ftx1d_fn) (double *out, const double *in, int sz) |
◆ check_ipred()
static void check_ipred |
( |
void |
| ) |
|
|
static |
◆ fwht_1d()
static void fwht_1d |
( |
double * |
out, |
|
|
const double * |
in, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ fdct_1d()
static void fdct_1d |
( |
double * |
out, |
|
|
const double * |
in, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ fadst4_1d()
static void fadst4_1d |
( |
double * |
out, |
|
|
const double * |
in, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ fadst_1d()
static void fadst_1d |
( |
double * |
out, |
|
|
const double * |
in, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ ftx_2d()
static void ftx_2d |
( |
double * |
out, |
|
|
const double * |
in, |
|
|
enum TxfmMode |
tx, |
|
|
enum TxfmType |
txtp, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ ftx()
◆ copy_subcoefs()
◆ iszero()
static int iszero |
( |
const int16_t * |
c, |
|
|
int |
sz |
|
) |
| |
|
static |
◆ check_itxfm()
static void check_itxfm |
( |
void |
| ) |
|
|
static |
◆ randomize_loopfilter_buffers()
static void randomize_loopfilter_buffers |
( |
int |
bidx, |
|
|
int |
lineoff, |
|
|
int |
str, |
|
|
int |
bit_depth, |
|
|
int |
dir, |
|
|
const int * |
E, |
|
|
const int * |
F, |
|
|
const int * |
H, |
|
|
const int * |
I, |
|
|
uint8_t * |
buf0, |
|
|
uint8_t * |
buf1 |
|
) |
| |
|
static |
◆ check_loopfilter()
static void check_loopfilter |
( |
void |
| ) |
|
|
static |
◆ check_mc()
static void check_mc |
( |
void |
| ) |
|
|
static |
◆ checkasm_check_vp9dsp()
void checkasm_check_vp9dsp |
( |
void |
| ) |
|
◆ pixel_mask
const uint32_t pixel_mask[3] = { 0xffffffff, 0x03ff03ff, 0x0fff0fff } |
|
static |
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
static void randomize_loopfilter_buffers(int bidx, int lineoff, int str, int bit_depth, int dir, const int *E, const int *F, const int *H, const int *I, uint8_t *buf0, uint8_t *buf1)
static const uint16_t mask[17]
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
F H1 F F H1 F F F F H1<-F-------F-------F v v v H2 H3 H2 ^ ^ ^ F-------F-------F-> H1<-F-------F-------F|||||||||F H1 F|||||||||F H1 Funavailable fullpel samples(outside the picture for example) shall be equalto the closest available fullpel sampleSmaller pel interpolation:--------------------------if diag_mc is set then points which lie on a line between 2 vertically, horizontally or diagonally adjacent halfpel points shall be interpolatedlinearly with rounding to nearest and halfway values rounded up.points which lie on 2 diagonals at the same time should only use the onediagonal not containing the fullpel point F--> O q O<--h1-> O q O<--F v \/v \/v O O O O O O O|/|\|q q q q q|/|\|O O O O O O O ^/\ ^/\ ^ h2--> O q O<--h3-> O q O<--h2 v \/v \/v O O O O O O O|\|/|q q q q q|\|/|O O O O O O O ^/\ ^/\ ^ F--> O q O<--h1-> O q O<--Fthe remaining points shall be bilinearly interpolated from theup to 4 surrounding halfpel and fullpel points, again rounding should be tonearest and halfway values rounded upcompliant Snow decoders MUST support 1-1/8 pel luma and 1/2-1/16 pel chromainterpolation at leastOverlapped block motion compensation:-------------------------------------FIXMELL band prediction:===================Each sample in the LL0 subband is predicted by the median of the left, top andleft+top-topleft samples, samples outside the subband shall be considered tobe 0. To reverse this prediction in the decoder apply the following.for(y=0;y< height;y++){ for(x=0;x< width;x++){ sample[y][x]+=median(sample[y-1][x], sample[y][x-1], sample[y-1][x]+sample[y][x-1]-sample[y-1][x-1]);}}sample[-1][ *]=sample[ *][-1]=0;width, height here are the width and height of the LL0 subband not of the finalvideoDequantization:===============FIXMEWavelet Transform:==================Snow supports 2 wavelet transforms, the symmetric biorthogonal 5/3 integertransform and an integer approximation of the symmetric biorthogonal 9/7daubechies wavelet.2D IDWT(inverse discrete wavelet transform) --------------------------------------------The 2D IDWT applies a 2D filter recursively, each time combining the4 lowest frequency subbands into a single subband until only 1 subbandremains.The 2D filter is done by first applying a 1D filter in the vertical directionand then applying it in the horizontal one. --------------- --------------- --------------- ---------------|LL0|HL0|||||||||||||---+---|HL1||L0|H0|HL1||LL1|HL1|||||LH0|HH0|||||||||||||-------+-------|-> L1 H1 LH1 HH1 LH1 HH1 LH1 HH1 this can end with a L or a H
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static const uint32_t pixel_mask[3]
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a