annotate dsputil.h @ 625:bb6a69f9d409 libavcodec

slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG) per context DCT selection
author michaelni
date Thu, 29 Aug 2002 23:55:32 +0000
parents 92e99e506920
children 23a093d6e450
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
1 /*
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
2 * DSP utils
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard.
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
4 *
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
8 * version 2 of the License, or (at your option) any later version.
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
9 *
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
10 * This library is distributed in the hope that it will be useful,
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
13 * Lesser General Public License for more details.
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
14 *
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
18 */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
19 #ifndef DSPUTIL_H
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 #define DSPUTIL_H
986e461dc072 Initial revision
glantau
parents:
diff changeset
21
986e461dc072 Initial revision
glantau
parents:
diff changeset
22 #include "common.h"
252
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
23 #include "avcodec.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
24
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
25 //#define DEBUG
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
26 /* dct code */
986e461dc072 Initial revision
glantau
parents:
diff changeset
27 typedef short DCTELEM;
986e461dc072 Initial revision
glantau
parents:
diff changeset
28
474
11dbd00682fc avoid name clash with libjpeg - added missing externs
bellard
parents: 429
diff changeset
29 void fdct_ifast (DCTELEM *data);
625
bb6a69f9d409 slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents: 623
diff changeset
30 void ff_jpeg_fdct_islow (DCTELEM *data);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
31
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 void j_rev_dct (DCTELEM *data);
986e461dc072 Initial revision
glantau
parents:
diff changeset
33
986e461dc072 Initial revision
glantau
parents:
diff changeset
34 void fdct_mmx(DCTELEM *block);
986e461dc072 Initial revision
glantau
parents:
diff changeset
35
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
36 /* encoding scans */
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
37 extern UINT8 ff_alternate_horizontal_scan[64];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
38 extern UINT8 ff_alternate_vertical_scan[64];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
39 extern UINT8 zigzag_direct[64];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
40
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
41 /* permutation table */
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
42 extern UINT8 permutation[64];
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
43
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
44 /* pixel operations */
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 #define MAX_NEG_CROP 384
986e461dc072 Initial revision
glantau
parents:
diff changeset
46
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 /* temporary */
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 extern UINT32 squareTbl[512];
50
4ea4c10d03d8 export for imgconvert usage
glantau
parents: 34
diff changeset
49 extern UINT8 cropTbl[256 + 2 * MAX_NEG_CROP];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
50
986e461dc072 Initial revision
glantau
parents:
diff changeset
51 void dsputil_init(void);
986e461dc072 Initial revision
glantau
parents:
diff changeset
52
986e461dc072 Initial revision
glantau
parents:
diff changeset
53 /* pixel ops : interface with DCT */
986e461dc072 Initial revision
glantau
parents:
diff changeset
54
19
82d4c9be9873 MMX/MMXEXT iDCT support, using external functions currently defined in libmpeg2
arpi_esp
parents: 6
diff changeset
55 extern void (*ff_idct)(DCTELEM *block);
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
56 extern void (*ff_idct_put)(UINT8 *dest, int line_size, DCTELEM *block);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
57 extern void (*ff_idct_add)(UINT8 *dest, int line_size, DCTELEM *block);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 extern void (*get_pixels)(DCTELEM *block, const UINT8 *pixels, int line_size);
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 296
diff changeset
59 extern void (*diff_pixels)(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, int stride);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 extern void (*put_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 extern void (*add_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
62 extern void (*gmc1)(UINT8 *dst, UINT8 *src, int srcStride, int h, int x16, int y16, int rounder);
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
63 extern void (*clear_blocks)(DCTELEM *blocks);
612
c0005de2be59 new ratecontrol code
michaelni
parents: 493
diff changeset
64 extern int (*pix_sum)(UINT8 * pix, int line_size);
c0005de2be59 new ratecontrol code
michaelni
parents: 493
diff changeset
65 extern int (*pix_norm1)(UINT8 * pix, int line_size);
c0005de2be59 new ratecontrol code
michaelni
parents: 493
diff changeset
66
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
67
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
68
986e461dc072 Initial revision
glantau
parents:
diff changeset
69 void get_pixels_c(DCTELEM *block, const UINT8 *pixels, int line_size);
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 296
diff changeset
70 void diff_pixels_c(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, int stride);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
71 void put_pixels_clamped_c(const DCTELEM *block, UINT8 *pixels, int line_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
72 void add_pixels_clamped_c(const DCTELEM *block, UINT8 *pixels, int line_size);
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
73 void clear_blocks_c(DCTELEM *blocks);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
74
986e461dc072 Initial revision
glantau
parents:
diff changeset
75 /* add and put pixel (decoding) */
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 typedef void (*op_pixels_func)(UINT8 *block, const UINT8 *pixels, int line_size, int h);
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
77 typedef void (*qpel_mc_func)(UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
78
986e461dc072 Initial revision
glantau
parents:
diff changeset
79 extern op_pixels_func put_pixels_tab[4];
986e461dc072 Initial revision
glantau
parents:
diff changeset
80 extern op_pixels_func avg_pixels_tab[4];
986e461dc072 Initial revision
glantau
parents:
diff changeset
81 extern op_pixels_func put_no_rnd_pixels_tab[4];
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 extern op_pixels_func avg_no_rnd_pixels_tab[4];
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
83 extern qpel_mc_func qpel_mc_rnd_tab[16];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
84 extern qpel_mc_func qpel_mc_no_rnd_tab[16];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
85
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
86 /* motion estimation */
986e461dc072 Initial revision
glantau
parents:
diff changeset
87
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
88 typedef int (*op_pixels_abs_func)(UINT8 *blk1, UINT8 *blk2, int line_size);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
89
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 extern op_pixels_abs_func pix_abs16x16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 extern op_pixels_abs_func pix_abs16x16_x2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 extern op_pixels_abs_func pix_abs16x16_y2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 extern op_pixels_abs_func pix_abs16x16_xy2;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
94 extern op_pixels_abs_func pix_abs8x8;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
95 extern op_pixels_abs_func pix_abs8x8_x2;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
96 extern op_pixels_abs_func pix_abs8x8_y2;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
97 extern op_pixels_abs_func pix_abs8x8_xy2;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
98
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
99 int pix_abs16x16_c(UINT8 *blk1, UINT8 *blk2, int lx);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
100 int pix_abs16x16_x2_c(UINT8 *blk1, UINT8 *blk2, int lx);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
101 int pix_abs16x16_y2_c(UINT8 *blk1, UINT8 *blk2, int lx);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 255
diff changeset
102 int pix_abs16x16_xy2_c(UINT8 *blk1, UINT8 *blk2, int lx);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
103
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
104 static inline int block_permute_op(int j)
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
105 {
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
106 return permutation[j];
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
107 }
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
108
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
109 void block_permute(INT16 *block);
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
110
62
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
111 #if defined(HAVE_MMX)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
112
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 #define MM_MMX 0x0001 /* standard MMX */
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 #define MM_3DNOW 0x0004 /* AMD 3DNOW */
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 #define MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 #define MM_SSE 0x0008 /* SSE functions */
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 #define MM_SSE2 0x0010 /* PIV SSE2 functions */
986e461dc072 Initial revision
glantau
parents:
diff changeset
118
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 extern int mm_flags;
986e461dc072 Initial revision
glantau
parents:
diff changeset
120
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 int mm_support(void);
986e461dc072 Initial revision
glantau
parents:
diff changeset
122
986e461dc072 Initial revision
glantau
parents:
diff changeset
123 static inline void emms(void)
986e461dc072 Initial revision
glantau
parents:
diff changeset
124 {
6
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
125 __asm __volatile ("emms;":::"memory");
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
126 }
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
127
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
128 #define emms_c() \
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
129 {\
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
130 if (mm_flags & MM_MMX)\
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
131 emms();\
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
133
986e461dc072 Initial revision
glantau
parents:
diff changeset
134 #define __align8 __attribute__ ((aligned (8)))
986e461dc072 Initial revision
glantau
parents:
diff changeset
135
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 void dsputil_init_mmx(void);
403
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 324
diff changeset
137 void dsputil_set_bit_exact_mmx(void);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
138
62
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
139 #elif defined(ARCH_ARMV4L)
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
140
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
141 #define emms_c()
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
142
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
143 /* This is to use 4 bytes read to the IDCT pointers for some 'zero'
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
144 line ptimizations */
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
145 #define __align8 __attribute__ ((aligned (4)))
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
146
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
147 void dsputil_init_armv4l(void);
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
148
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
149 #elif defined(HAVE_MLIB)
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
150
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
151 #define emms_c()
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
152
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
153 /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
154 #define __align8 __attribute__ ((aligned (8)))
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
155
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
156 void dsputil_init_mlib(void);
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
157
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
158 #elif defined(ARCH_ALPHA)
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
159
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
160 #define emms_c()
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
161 #define __align8 __attribute__ ((aligned (8)))
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
162
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
163 void dsputil_init_alpha(void);
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 190
diff changeset
164
623
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
165 #elif defined(ARCH_POWERPC)
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
166
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
167 #define emms_c()
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
168 #define __align8 __attribute__ ((aligned (16)))
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
169
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
170 void dsputil_init_altivec(void);
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
171
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 #else
986e461dc072 Initial revision
glantau
parents:
diff changeset
173
6
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
174 #define emms_c()
ec4642daa6fe added emms_c() macro which should can used in c code in both mmx/non mmx cases
glantau
parents: 2
diff changeset
175
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 #define __align8
986e461dc072 Initial revision
glantau
parents:
diff changeset
177
986e461dc072 Initial revision
glantau
parents:
diff changeset
178 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
179
493
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
180 #ifdef __GNUC__
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
181
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
182 struct unaligned_64 { uint64_t l; } __attribute__((packed));
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
183 struct unaligned_32 { uint32_t l; } __attribute__((packed));
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
184
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
185 #define LD32(a) (((const struct unaligned_32 *) (a))->l)
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
186 #define LD64(a) (((const struct unaligned_64 *) (a))->l)
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
187
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
188 #define ST32(a, b) (((struct unaligned_32 *) (a))->l) = (b)
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
189
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
190 #else /* __GNUC__ */
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
191
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
192 #define LD32(a) (*((uint32_t*)(a)))
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
193 #define LD64(a) (*((uint64_t*)(a)))
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
194
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
195 #define ST32(a, b) *((uint32_t*)(a)) = (b)
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
196
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
197 #endif /* !__GNUC__ */
873b9075d853 move unaligned access macros to dsputil.h - added unaligned 32 bit store
bellard
parents: 480
diff changeset
198
252
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
199 /* PSNR */
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
200 void get_psnr(UINT8 *orig_image[3], UINT8 *coded_image[3],
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
201 int orig_linesize[3], int coded_linesize,
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
202 AVCodecContext *avctx);
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 214
diff changeset
203
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
204 #endif