comparison snow.h @ 11485:0f0cd6b5791f libavcodec

Separate DWT from snow and dsputil This moves the DWT functions from snow.c and dsputil.c to a file of their own. A new struct, DWTContext, holds the function pointers previously part of DSPContext.
author mru
date Sun, 14 Mar 2010 17:50:12 +0000
parents a385968f8fb0
children
comparison
equal deleted inserted replaced
11484:5330f17dc769 11485:0f0cd6b5791f
21 21
22 #ifndef AVCODEC_SNOW_H 22 #ifndef AVCODEC_SNOW_H
23 #define AVCODEC_SNOW_H 23 #define AVCODEC_SNOW_H
24 24
25 #include "dsputil.h" 25 #include "dsputil.h"
26 #include "dwt.h"
26 27
27 #define MID_STATE 128 28 #define MID_STATE 128
28 29
29 #define MAX_DECOMPOSITIONS 8
30 #define MAX_PLANES 4 30 #define MAX_PLANES 4
31 #define QSHIFT 5 31 #define QSHIFT 5
32 #define QROOT (1<<QSHIFT) 32 #define QROOT (1<<QSHIFT)
33 #define LOSSLESS_QLOG -128 33 #define LOSSLESS_QLOG -128
34 #define FRAC_BITS 4 34 #define FRAC_BITS 4
35 #define MAX_REF_FRAMES 8 35 #define MAX_REF_FRAMES 8
36 36
37 #define LOG2_OBMC_MAX 8 37 #define LOG2_OBMC_MAX 8
38 #define OBMC_MAX (1<<(LOG2_OBMC_MAX)) 38 #define OBMC_MAX (1<<(LOG2_OBMC_MAX))
39
40 #define DWT_97 0
41 #define DWT_53 1
42
43 /** Used to minimize the amount of memory used in order to optimize cache performance. **/
44 struct slice_buffer_s {
45 IDWTELEM * * line; ///< For use by idwt and predict_slices.
46 IDWTELEM * * data_stack; ///< Used for internal purposes.
47 int data_stack_top;
48 int line_count;
49 int line_width;
50 int data_count;
51 IDWTELEM * base_buffer; ///< Buffer that this structure is caching.
52 };
53
54 #define liftS lift
55 #if 1
56 #define W_AM 3
57 #define W_AO 0
58 #define W_AS 1
59
60 #undef liftS
61 #define W_BM 1
62 #define W_BO 8
63 #define W_BS 4
64
65 #define W_CM 1
66 #define W_CO 0
67 #define W_CS 0
68
69 #define W_DM 3
70 #define W_DO 4
71 #define W_DS 3
72 #elif 0
73 #define W_AM 55
74 #define W_AO 16
75 #define W_AS 5
76
77 #define W_BM 3
78 #define W_BO 32
79 #define W_BS 6
80
81 #define W_CM 127
82 #define W_CO 64
83 #define W_CS 7
84
85 #define W_DM 7
86 #define W_DO 8
87 #define W_DS 4
88 #elif 0
89 #define W_AM 97
90 #define W_AO 32
91 #define W_AS 6
92
93 #define W_BM 63
94 #define W_BO 512
95 #define W_BS 10
96
97 #define W_CM 13
98 #define W_CO 8
99 #define W_CS 4
100
101 #define W_DM 15
102 #define W_DO 16
103 #define W_DS 5
104
105 #else
106
107 #define W_AM 203
108 #define W_AO 64
109 #define W_AS 7
110
111 #define W_BM 217
112 #define W_BO 2048
113 #define W_BS 12
114
115 #define W_CM 113
116 #define W_CO 64
117 #define W_CS 7
118
119 #define W_DM 227
120 #define W_DO 128
121 #define W_DS 9
122 #endif
123
124 void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
125 void ff_snow_horizontal_compose97i(IDWTELEM *b, int width);
126 void ff_snow_inner_add_yblock(const 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);
127
128 #if CONFIG_SNOW_ENCODER
129 int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
130 int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
131 #endif
132
133 void ff_spatial_dwt(int *buffer, int width, int height, int stride, int type, int decomposition_count);
134 39
135 /* C bits used by mmx/sse2/altivec */ 40 /* C bits used by mmx/sse2/altivec */
136 41
137 static av_always_inline void snow_interleave_line_header(int * i, int width, IDWTELEM * low, IDWTELEM * high){ 42 static av_always_inline void snow_interleave_line_header(int * i, int width, IDWTELEM * low, IDWTELEM * high){
138 (*i) = (width) - 2; 43 (*i) = (width) - 2;