dsputil.h
Go to the documentation of this file.
1 /*
2  * DSP utils
3  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 /**
24  * @file
25  * DSP utils.
26  * note, many functions in here may use MMX which trashes the FPU state, it is
27  * absolutely necessary to call emms_c() between dsp & float/double code
28  */
29 
30 #ifndef AVCODEC_DSPUTIL_H
31 #define AVCODEC_DSPUTIL_H
32 
33 #include "libavutil/intreadwrite.h"
34 #include "avcodec.h"
35 #include "rnd_avg.h"
36 
37 
38 //#define DEBUG
39 
40 /* encoding scans */
41 extern const uint8_t ff_alternate_horizontal_scan[64];
42 extern const uint8_t ff_alternate_vertical_scan[64];
43 extern const uint8_t ff_zigzag_direct[64];
44 extern const uint8_t ff_zigzag248_direct[64];
45 
46 /* pixel operations */
47 #define MAX_NEG_CROP 1024
48 
49 /* temporary */
50 extern uint32_t ff_squareTbl[512];
51 extern const uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP];
52 
53 void ff_put_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
54 void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
55 void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
56 void ff_avg_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
57 
58 /* RV40 functions */
63 
64 void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
65  int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height);
66 
67 /* minimum alignment rules ;)
68 If you notice errors in the align stuff, need more alignment for some ASM code
69 for some CPU or need to use a function with less aligned data then send a mail
70 to the ffmpeg-devel mailing list, ...
71 
72 !warning These alignments might not match reality, (missing attribute((align))
73 stuff somewhere possible).
74 I (Michael) did not check them, these are just the alignments which I think
75 could be reached easily ...
76 
77 !future video codecs might need functions with less strict alignment
78 */
79 
80 /* add and put pixel (decoding) */
81 // blocksizes for op_pixels_func are 8x4,8x8 16x8 16x16
82 //h for op_pixels_func is limited to {width/2, width} but never larger than 16 and never smaller than 4
83 typedef void (*tpel_mc_func)(uint8_t *block/*align width (8 or 16)*/, const uint8_t *pixels/*align 1*/, int line_size, int w, int h);
84 typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, ptrdiff_t stride);
85 
86 typedef void (*op_fill_func)(uint8_t *block/*align width (8 or 16)*/, uint8_t value, int line_size, int h);
87 
88 #define DEF_OLD_QPEL(name)\
89 void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, ptrdiff_t stride);\
90 void ff_put_no_rnd_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, ptrdiff_t stride);\
91 void ff_avg_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, ptrdiff_t stride);
92 
93 DEF_OLD_QPEL(qpel16_mc11_old_c)
94 DEF_OLD_QPEL(qpel16_mc31_old_c)
95 DEF_OLD_QPEL(qpel16_mc12_old_c)
96 DEF_OLD_QPEL(qpel16_mc32_old_c)
97 DEF_OLD_QPEL(qpel16_mc13_old_c)
98 DEF_OLD_QPEL(qpel16_mc33_old_c)
99 DEF_OLD_QPEL(qpel8_mc11_old_c)
100 DEF_OLD_QPEL(qpel8_mc31_old_c)
101 DEF_OLD_QPEL(qpel8_mc12_old_c)
102 DEF_OLD_QPEL(qpel8_mc32_old_c)
103 DEF_OLD_QPEL(qpel8_mc13_old_c)
104 DEF_OLD_QPEL(qpel8_mc33_old_c)
105 
106 /* motion estimation */
107 // h is limited to {width/2, width, 2*width} but never larger than 16 and never smaller than 2
108 // although currently h<4 is not used as functions with width <8 are neither used nor implemented
109 typedef int (*me_cmp_func)(void /*MpegEncContext*/ *s, uint8_t *blk1/*align width (8 or 16)*/, uint8_t *blk2/*align 1*/, int line_size, int h)/* __attribute__ ((const))*/;
110 
111 /**
112  * Scantable.
113  */
114 typedef struct ScanTable{
116  uint8_t permutated[64];
117  uint8_t raster_end[64];
118 } ScanTable;
119 
120 void ff_init_scantable(uint8_t *, ScanTable *st, const uint8_t *src_scantable);
121 void ff_init_scantable_permutation(uint8_t *idct_permutation,
122  int idct_permutation_type);
123 
124 /**
125  * DSPContext.
126  */
127 typedef struct DSPContext {
128  /* pixel ops : interface with DCT */
129  void (*get_pixels)(int16_t *block/*align 16*/, const uint8_t *pixels/*align 8*/, int line_size);
130  void (*diff_pixels)(int16_t *block/*align 16*/, const uint8_t *s1/*align 8*/, const uint8_t *s2/*align 8*/, int stride);
131  void (*put_pixels_clamped)(const int16_t *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
132  void (*put_signed_pixels_clamped)(const int16_t *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
133  void (*add_pixels_clamped)(const int16_t *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
134  void (*add_pixels8)(uint8_t *pixels, int16_t *block, int line_size);
135  int (*sum_abs_dctelem)(int16_t *block/*align 16*/);
136  /**
137  * translational global motion compensation.
138  */
139  void (*gmc1)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x16, int y16, int rounder);
140  /**
141  * global motion compensation.
142  */
143  void (*gmc )(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int ox, int oy,
144  int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height);
145  void (*clear_block)(int16_t *block/*align 16*/);
146  void (*clear_blocks)(int16_t *blocks/*align 16*/);
147  int (*pix_sum)(uint8_t * pix, int line_size);
148  int (*pix_norm1)(uint8_t * pix, int line_size);
149 // 16x16 8x8 4x4 2x2 16x8 8x4 4x2 8x16 4x8 2x4
150 
151  me_cmp_func sad[6]; /* identical to pix_absAxA except additional void * */
165 
170  me_cmp_func ildct_cmp[6]; //only width 16 used
171  me_cmp_func frame_skip_cmp[6]; //only width 8 used
172 
173  int (*ssd_int8_vs_int16)(const int8_t *pix1, const int16_t *pix2,
174  int size);
175 
176  /**
177  * Thirdpel motion compensation with rounding (a+b+1)>>1.
178  * this is an array[12] of motion compensation functions for the 9 thirdpe
179  * positions<br>
180  * *pixels_tab[ xthirdpel + 4*ythirdpel ]
181  * @param block destination where the result is stored
182  * @param pixels source
183  * @param line_size number of bytes in a horizontal line of block
184  * @param h height
185  */
186  tpel_mc_func put_tpel_pixels_tab[11]; //FIXME individual func ptr per width?
187  tpel_mc_func avg_tpel_pixels_tab[11]; //FIXME individual func ptr per width?
188 
193 
195 
196  /* huffyuv specific */
197  void (*add_bytes)(uint8_t *dst/*align 16*/, uint8_t *src/*align 16*/, int w);
198  void (*diff_bytes)(uint8_t *dst/*align 16*/, const uint8_t *src1/*align 16*/, const uint8_t *src2/*align 1*/,int w);
199  /**
200  * subtract huffyuv's variant of median prediction
201  * note, this might read from src1[-1], src2[-1]
202  */
203  void (*sub_hfyu_median_prediction)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w, int *left, int *left_top);
204  void (*add_hfyu_median_prediction)(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top);
205  int (*add_hfyu_left_prediction)(uint8_t *dst, const uint8_t *src, int w, int left);
206  void (*add_hfyu_left_prediction_bgr32)(uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha);
207  /* this might write to dst[w] */
208  void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w);
209  void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len);
210 
211  void (*h263_v_loop_filter)(uint8_t *src, int stride, int qscale);
212  void (*h263_h_loop_filter)(uint8_t *src, int stride, int qscale);
213 
214  /* assume len is a multiple of 8, and arrays are 16-byte aligned */
215  void (*vector_clipf)(float *dst /* align 16 */, const float *src /* align 16 */, float min, float max, int len /* align 16 */);
216 
217  /* (I)DCT */
218  void (*fdct)(int16_t *block/* align 16*/);
219  void (*fdct248)(int16_t *block/* align 16*/);
220 
221  /* IDCT really*/
222  void (*idct)(int16_t *block/* align 16*/);
223 
224  /**
225  * block -> idct -> clip to unsigned 8 bit -> dest.
226  * (-1392, 0, 0, ...) -> idct -> (-174, -174, ...) -> put -> (0, 0, ...)
227  * @param line_size size in bytes of a horizontal line of dest
228  */
229  void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, int16_t *block/*align 16*/);
230 
231  /**
232  * block -> idct -> add dest -> clip to unsigned 8 bit -> dest.
233  * @param line_size size in bytes of a horizontal line of dest
234  */
235  void (*idct_add)(uint8_t *dest/*align 8*/, int line_size, int16_t *block/*align 16*/);
236 
237  /**
238  * idct input permutation.
239  * several optimized IDCTs need a permutated input (relative to the normal order of the reference
240  * IDCT)
241  * this permutation must be performed before the idct_put/add, note, normally this can be merged
242  * with the zigzag/alternate scan<br>
243  * an example to avoid confusion:
244  * - (->decode coeffs -> zigzag reorder -> dequant -> reference idct ->...)
245  * - (x -> reference dct -> reference idct -> x)
246  * - (x -> reference dct -> simple_mmx_perm = idct_permutation -> simple_idct_mmx -> x)
247  * - (->decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant -> simple_idct_mmx ->...)
248  */
251 #define FF_NO_IDCT_PERM 1
252 #define FF_LIBMPEG2_IDCT_PERM 2
253 #define FF_SIMPLE_IDCT_PERM 3
254 #define FF_TRANSPOSE_IDCT_PERM 4
255 #define FF_PARTTRANS_IDCT_PERM 5
256 #define FF_SSE2_IDCT_PERM 6
257 
258  int (*try_8x8basis)(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale);
259  void (*add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale);
260 #define BASIS_SHIFT 16
261 #define RECON_SHIFT 6
262 
263  void (*draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides);
264 #define EDGE_WIDTH 16
265 #define EDGE_TOP 1
266 #define EDGE_BOTTOM 2
267 
268  void (*shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
269 
270  /**
271  * Calculate scalar product of two vectors.
272  * @param len length of vectors, should be multiple of 16
273  */
274  int32_t (*scalarproduct_int16)(const int16_t *v1, const int16_t *v2/*align 16*/, int len);
275  /* ape functions */
276  /**
277  * Calculate scalar product of v1 and v2,
278  * and v1[i] += v3[i] * mul
279  * @param len length of vectors, should be multiple of 16
280  */
281  int32_t (*scalarproduct_and_madd_int16)(int16_t *v1/*align 16*/, const int16_t *v2, const int16_t *v3, int len, int mul);
282 
283  /**
284  * Apply symmetric window in 16-bit fixed-point.
285  * @param output destination array
286  * constraints: 16-byte aligned
287  * @param input source array
288  * constraints: 16-byte aligned
289  * @param window window array
290  * constraints: 16-byte aligned, at least len/2 elements
291  * @param len full window length
292  * constraints: multiple of ? greater than zero
293  */
294  void (*apply_window_int16)(int16_t *output, const int16_t *input,
295  const int16_t *window, unsigned int len);
296 
297  /**
298  * Clip each element in an array of int32_t to a given minimum and maximum value.
299  * @param dst destination array
300  * constraints: 16-byte aligned
301  * @param src source array
302  * constraints: 16-byte aligned
303  * @param min minimum value
304  * constraints: must be in the range [-(1 << 24), 1 << 24]
305  * @param max maximum value
306  * constraints: must be in the range [-(1 << 24), 1 << 24]
307  * @param len number of elements in the array
308  * constraints: multiple of 32 greater than zero
309  */
311  int32_t max, unsigned int len);
312 
314 } DSPContext;
315 
316 void ff_dsputil_static_init(void);
317 void ff_dsputil_init(DSPContext* p, AVCodecContext *avctx);
320 
321 int ff_check_alignment(void);
322 
323 void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type);
324 
332 
334 
335 #endif /* AVCODEC_DSPUTIL_H */
int(* sum_abs_dctelem)(int16_t *block)
Definition: dsputil.h:135
void ff_dsputil_static_init(void)
Definition: dsputil.c:2644
me_cmp_func vsad[6]
Definition: dsputil.h:158
void(* sub_hfyu_median_prediction)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w, int *left, int *left_top)
subtract huffyuv&#39;s variant of median prediction note, this might read from src1[-1], src2[-1]
Definition: dsputil.h:203
const char * s
Definition: avisynth_c.h:668
static int shift(int a, int b)
Definition: sonic.c:86
void(* fdct248)(int16_t *block)
Definition: dsputil.h:219
me_cmp_func frame_skip_cmp[6]
Definition: dsputil.h:171
void(* shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height)
Definition: dsputil.h:268
if max(w)>1 w=0.9 *w/max(w)
const uint8_t ff_alternate_vertical_scan[64]
Definition: dsputil.c:85
void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil_ppc.c:140
void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
void ff_dsputil_init_arm(DSPContext *c, AVCodecContext *avctx)
Scantable.
Definition: dsputil.h:114
me_cmp_func dct_max[6]
Definition: dsputil.h:163
#define MAX_NEG_CROP
Definition: dsputil.h:47
void(* gmc1)(uint8_t *dst, uint8_t *src, int srcStride, int h, int x16, int y16, int rounder)
translational global motion compensation.
Definition: dsputil.h:139
me_cmp_func sse[6]
Definition: dsputil.h:152
const uint8_t ff_cropTbl[256+2 *MAX_NEG_CROP]
Definition: mathtables.c:94
const uint8_t ff_zigzag248_direct[64]
Definition: dsputil.c:60
#define wrap(func)
Definition: w64xmmtest.h:70
void(* bswap16_buf)(uint16_t *dst, const uint16_t *src, int len)
Definition: dsputil.h:209
void(* clear_block)(int16_t *block)
Definition: dsputil.h:145
void(* fdct)(int16_t *block)
Definition: dsputil.h:218
int stride
Definition: mace.c:144
output residual component w
void ff_dsputil_init(DSPContext *p, AVCodecContext *avctx)
Definition: dsputil.c:2675
void(* get_pixels)(int16_t *block, const uint8_t *pixels, int line_size)
Definition: dsputil.h:129
void(* add_pixels8)(uint8_t *pixels, int16_t *block, int line_size)
Definition: dsputil.h:134
uint8_t
const uint8_t ff_alternate_horizontal_scan[64]
Definition: dsputil.c:74
uint32_t ff_squareTbl[512]
Definition: dsputil.c:45
#define DEF_OLD_QPEL(name)
Definition: dsputil.h:88
me_cmp_func me_pre_cmp[6]
Definition: dsputil.h:166
int(* pix_sum)(uint8_t *pix, int line_size)
Definition: dsputil.h:147
me_cmp_func me_cmp[6]
Definition: dsputil.h:167
me_cmp_func dct_sad[6]
Definition: dsputil.h:154
attribute_deprecated void dsputil_init(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil.c:2927
void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil_mmx.c:1563
uint8_t idct_permutation[64]
idct input permutation.
Definition: dsputil.h:249
me_cmp_func ildct_cmp[6]
Definition: dsputil.h:170
const uint8_t * scantable
Definition: dsputil.h:115
qpel_mc_func put_qpel_pixels_tab[2][16]
Definition: dsputil.h:189
me_cmp_func nsse[6]
Definition: dsputil.h:160
qpel_mc_func put_mspel_pixels_tab[8]
Definition: dsputil.h:192
void(* qpel_mc_func)(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
Definition: dsputil.h:84
void ff_dsputil_init_alpha(DSPContext *c, AVCodecContext *avctx)
void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
me_cmp_func w53[6]
Definition: dsputil.h:161
static double alpha(void *priv, double x, double y)
Definition: vf_geq.c:86
void(* vector_clipf)(float *dst, const float *src, float min, float max, int len)
Definition: dsputil.h:215
void(* add_hfyu_median_prediction)(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top)
Definition: dsputil.h:204
#define s2
Definition: regdef.h:39
tpel_mc_func avg_tpel_pixels_tab[11]
Definition: dsputil.h:187
void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
int ff_check_alignment(void)
Definition: dsputil.c:2655
void(* add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale)
Definition: dsputil.h:259
qpel_mc_func avg_qpel_pixels_tab[2][16]
Definition: dsputil.h:190
const char * r
Definition: vf_curves.c:94
void(* h263_h_loop_filter)(uint8_t *src, int stride, int qscale)
Definition: dsputil.h:212
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame This method is called when a frame is wanted on an output For an input
void(* clear_blocks)(int16_t *blocks)
Definition: dsputil.h:146
overlapping window(triangular window to avoid too much overlapping) ovidx
me_cmp_func mb_cmp[6]
Definition: dsputil.h:169
void ff_set_cmp(DSPContext *c, me_cmp_func *cmp, int type)
Definition: dsputil.c:1869
void(* apply_window_int16)(int16_t *output, const int16_t *input, const int16_t *window, unsigned int len)
Apply symmetric window in 16-bit fixed-point.
Definition: dsputil.h:294
void ff_dsputil_init_bfin(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil_bfin.c:126
external API header
int size
me_cmp_func vsse[6]
Definition: dsputil.h:159
void ff_dsputil_init_dwt(DSPContext *c)
Definition: snow_dwt.c:847
int32_t(* scalarproduct_and_madd_int16)(int16_t *v1, const int16_t *v2, const int16_t *v3, int len, int mul)
Calculate scalar product of v1 and v2, and v1[i] += v3[i] * mul.
Definition: dsputil.h:281
void(* draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides)
Definition: dsputil.h:263
void(* put_signed_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size)
Definition: dsputil.h:132
void(* add_bytes)(uint8_t *dst, uint8_t *src, int w)
Definition: dsputil.h:197
int(* me_cmp_func)(void *s, uint8_t *blk1, uint8_t *blk2, int line_size, int h)
Definition: dsputil.h:109
void(* put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size)
Definition: dsputil.h:131
int32_t
void ff_dsputil_init_vis(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil_vis.c:26
static av_always_inline int cmp(MpegEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags)
compares a block (either a full macroblock or a partition thereof) against a proposed motion-compensa...
Definition: motion_est.c:251
#define diff(a, as, b, bs)
Definition: vf_phase.c:80
void(* tpel_mc_func)(uint8_t *block, const uint8_t *pixels, int line_size, int w, int h)
Definition: dsputil.h:83
void(* diff_bytes)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w)
Definition: dsputil.h:198
me_cmp_func bit[6]
Definition: dsputil.h:156
void(* add_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size)
Definition: dsputil.h:133
void(* vector_clip_int32)(int32_t *dst, const int32_t *src, int32_t min, int32_t max, unsigned int len)
Clip each element in an array of int32_t to a given minimum and maximum value.
Definition: dsputil.h:310
static int width
Definition: tests/utils.c:158
dest
Definition: start.py:60
AVS_Value src
Definition: avisynth_c.h:523
void(* op_fill_func)(uint8_t *block, uint8_t value, int line_size, int h)
Definition: dsputil.h:86
typedef void(RENAME(mix_any_func_type))
int idct_permutation_type
Definition: dsputil.h:250
void(* idct_add)(uint8_t *dest, int line_size, int16_t *block)
block -> idct -> add dest -> clip to unsigned 8 bit -> dest.
Definition: dsputil.h:235
main external API structure.
me_cmp_func dct264_sad[6]
Definition: dsputil.h:164
op_fill_func fill_block_tab[2]
Definition: dsputil.h:313
void * buf
Definition: avisynth_c.h:594
void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
Definition: dsputil.c:1338
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
int(* pix_norm1)(uint8_t *pix, int line_size)
Definition: dsputil.h:148
double value
Definition: eval.c:82
void(* add_hfyu_left_prediction_bgr32)(uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha)
Definition: dsputil.h:206
void(* bswap_buf)(uint32_t *dst, const uint32_t *src, int w)
Definition: dsputil.h:208
void(* gmc)(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy, int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height)
global motion compensation.
Definition: dsputil.h:143
#define s1
Definition: regdef.h:38
int32_t(* scalarproduct_int16)(const int16_t *v1, const int16_t *v2, int len)
Calculate scalar product of two vectors.
Definition: dsputil.h:274
#define type
me_cmp_func w97[6]
Definition: dsputil.h:162
static int weight(int i, int blen, int offset)
struct ScanTable ScanTable
Scantable.
void ff_init_scantable(uint8_t *, ScanTable *st, const uint8_t *src_scantable)
Definition: dsputil.c:110
#define attribute_deprecated
Definition: attributes.h:90
void(* idct)(int16_t *block)
Definition: dsputil.h:222
me_cmp_func rd[6]
Definition: dsputil.h:157
tpel_mc_func put_tpel_pixels_tab[11]
Thirdpel motion compensation with rounding (a+b+1)>>1.
Definition: dsputil.h:186
void ff_avg_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
Definition: dsputil.c:1342
const uint8_t ff_zigzag_direct[64]
Definition: mathtables.c:115
void ff_put_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
Definition: dsputil.c:1330
static double c[64]
void ff_dsputil_init_sh4(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil_sh4.c:93
static int16_t basis[64][64]
void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy, int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height)
Definition: dsputil.c:546
me_cmp_func sad[6]
Definition: dsputil.h:151
these buffered frames must be flushed immediately if a new input produces new output(Example:frame rate-doubling filter:filter_frame must(1) flush the second copy of the previous frame, if it is still there,(2) push the first copy of the incoming frame,(3) keep the second copy for later.) If the input frame is not enough to produce output
int(* ssd_int8_vs_int16)(const int8_t *pix1, const int16_t *pix2, int size)
Definition: dsputil.h:173
Same thing on a dB scale
int(* add_hfyu_left_prediction)(uint8_t *dst, const uint8_t *src, int w, int left)
Definition: dsputil.h:205
void(* idct_put)(uint8_t *dest, int line_size, int16_t *block)
block -> idct -> clip to unsigned 8 bit -> dest.
Definition: dsputil.h:229
void(* h263_v_loop_filter)(uint8_t *src, int stride, int qscale)
Definition: dsputil.h:211
me_cmp_func hadamard8_diff[6]
Definition: dsputil.h:153
int len
void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
me_cmp_func quant_psnr[6]
Definition: dsputil.h:155
qpel_mc_func put_no_rnd_qpel_pixels_tab[2][16]
Definition: dsputil.h:191
void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
Definition: dsputil.c:1334
struct DSPContext DSPContext
DSPContext.
me_cmp_func me_sub_cmp[6]
Definition: dsputil.h:168
float min
void ff_init_scantable_permutation(uint8_t *idct_permutation, int idct_permutation_type)
Definition: dsputil.c:131
int(* try_8x8basis)(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale)
Definition: dsputil.h:258
void(* diff_pixels)(int16_t *block, const uint8_t *s1, const uint8_t *s2, int stride)
Definition: dsputil.h:130
void avpriv_dsputil_init(DSPContext *p, AVCodecContext *avctx)
Definition: dsputil.c:2932
me_cmp_func pix_abs[2][4]
Definition: dsputil.h:194
DSPContext.
Definition: dsputil.h:127