comparison snow.h @ 3198:6b9f0c4fbdbe libavcodec

First part of a series of speed-enchancing patches. This one sets up a snow.h and makes snow use the dsputil function pointer framework to access the three functions that will be implemented in asm in the other parts of the patchset. Patch by Robert Edele < yartrebo AH earthlink POIS net> Original thread: Subject: [Ffmpeg-devel] [PATCH] Snow mmx+sse2 asm optimizations Date: Sun, 05 Feb 2006 12:47:14 -0500
author gpoirier
date Thu, 16 Mar 2006 19:18:18 +0000
parents
children c1add9fe5c65
comparison
equal deleted inserted replaced
3197:8f53630cd24e 3198:6b9f0c4fbdbe
1 /*
2 * Copyright (C) 2004 Michael Niedermayer <michaelni@gmx.at>
3 * Copyright (C) 2006 Robert Edele <yartrebo@earthlink.net>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #ifndef _SNOW_H
21 #define _SNOW_H
22
23 #include "dsputil.h"
24
25 #define MID_STATE 128
26
27 #define MAX_DECOMPOSITIONS 8
28 #define MAX_PLANES 4
29 #define QSHIFT 5
30 #define QROOT (1<<QSHIFT)
31 #define LOSSLESS_QLOG -128
32 #define FRAC_BITS 8
33
34 #define LOG2_OBMC_MAX 6
35 #define OBMC_MAX (1<<(LOG2_OBMC_MAX))
36
37 /** Used to minimize the amount of memory used in order to optimize cache performance. **/
38 struct slice_buffer_s {
39 DWTELEM * * line; ///< For use by idwt and predict_slices.
40 DWTELEM * * data_stack; ///< Used for internal purposes.
41 int data_stack_top;
42 int line_count;
43 int line_width;
44 int data_count;
45 DWTELEM * base_buffer; ///< Buffer that this structure is caching.
46 };
47
48 #define liftS lift
49 #define lift5 lift
50 #if 1
51 #define W_AM 3
52 #define W_AO 0
53 #define W_AS 1
54
55 #undef liftS
56 #define W_BM 1
57 #define W_BO 8
58 #define W_BS 4
59
60 #define W_CM 1
61 #define W_CO 0
62 #define W_CS 0
63
64 #define W_DM 3
65 #define W_DO 4
66 #define W_DS 3
67 #elif 0
68 #define W_AM 55
69 #define W_AO 16
70 #define W_AS 5
71
72 #define W_BM 3
73 #define W_BO 32
74 #define W_BS 6
75
76 #define W_CM 127
77 #define W_CO 64
78 #define W_CS 7
79
80 #define W_DM 7
81 #define W_DO 8
82 #define W_DS 4
83 #elif 0
84 #define W_AM 97
85 #define W_AO 32
86 #define W_AS 6
87
88 #define W_BM 63
89 #define W_BO 512
90 #define W_BS 10
91
92 #define W_CM 13
93 #define W_CO 8
94 #define W_CS 4
95
96 #define W_DM 15
97 #define W_DO 16
98 #define W_DS 5
99
100 #else
101
102 #define W_AM 203
103 #define W_AO 64
104 #define W_AS 7
105
106 #define W_BM 217
107 #define W_BO 2048
108 #define W_BS 12
109
110 #define W_CM 113
111 #define W_CO 64
112 #define W_CS 7
113
114 #define W_DM 227
115 #define W_DO 128
116 #define W_DS 9
117 #endif
118
119 extern void ff_snow_vertical_compose97i(DWTELEM *b0, DWTELEM *b1, DWTELEM *b2, DWTELEM *b3, DWTELEM *b4, DWTELEM *b5, int width);
120 extern void ff_snow_horizontal_compose97i(DWTELEM *b, int width);
121 extern void ff_snow_inner_add_yblock(uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
122
123 #endif