ffmpeg / libavcodec / dwt.h @ 33996217
History | View | Annotate | Download (4.77 KB)
1 |
/*
|
---|---|
2 |
* Copyright (C) 2004-2010 Michael Niedermayer <michaelni@gmx.at>
|
3 |
*
|
4 |
* This file is part of FFmpeg.
|
5 |
*
|
6 |
* FFmpeg is free software; you can redistribute it and/or
|
7 |
* modify it under the terms of the GNU Lesser General Public
|
8 |
* License as published by the Free Software Foundation; either
|
9 |
* version 2.1 of the License, or (at your option) any later version.
|
10 |
*
|
11 |
* FFmpeg is distributed in the hope that it will be useful,
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 |
* Lesser General Public License for more details.
|
15 |
*
|
16 |
* You should have received a copy of the GNU Lesser General Public
|
17 |
* License along with FFmpeg; if not, write to the Free Software
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
19 |
*/
|
20 |
|
21 |
#ifndef AVCODEC_DWT_H
|
22 |
#define AVCODEC_DWT_H
|
23 |
|
24 |
#include <stdint.h> |
25 |
|
26 |
typedef int DWTELEM; |
27 |
typedef short IDWTELEM; |
28 |
|
29 |
typedef struct { |
30 |
IDWTELEM *b0; |
31 |
IDWTELEM *b1; |
32 |
IDWTELEM *b2; |
33 |
IDWTELEM *b3; |
34 |
int y;
|
35 |
} DWTCompose; |
36 |
|
37 |
/** Used to minimize the amount of memory used in order to optimize cache performance. **/
|
38 |
typedef struct slice_buffer_s { |
39 |
IDWTELEM * * line; ///< For use by idwt and predict_slices.
|
40 |
IDWTELEM * * data_stack; ///< Used for internal purposes.
|
41 |
int data_stack_top;
|
42 |
int line_count;
|
43 |
int line_width;
|
44 |
int data_count;
|
45 |
IDWTELEM * base_buffer; ///< Buffer that this structure is caching.
|
46 |
} slice_buffer; |
47 |
|
48 |
typedef struct DWTContext { |
49 |
void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width); |
50 |
void (*horizontal_compose97i)(IDWTELEM *b, int width); |
51 |
void (*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); |
52 |
} DWTContext; |
53 |
|
54 |
#define MAX_DECOMPOSITIONS 8 |
55 |
|
56 |
#define DWT_97 0 |
57 |
#define DWT_53 1 |
58 |
|
59 |
#define liftS lift
|
60 |
#if 1 |
61 |
#define W_AM 3 |
62 |
#define W_AO 0 |
63 |
#define W_AS 1 |
64 |
|
65 |
#undef liftS
|
66 |
#define W_BM 1 |
67 |
#define W_BO 8 |
68 |
#define W_BS 4 |
69 |
|
70 |
#define W_CM 1 |
71 |
#define W_CO 0 |
72 |
#define W_CS 0 |
73 |
|
74 |
#define W_DM 3 |
75 |
#define W_DO 4 |
76 |
#define W_DS 3 |
77 |
#elif 0 |
78 |
#define W_AM 55 |
79 |
#define W_AO 16 |
80 |
#define W_AS 5 |
81 |
|
82 |
#define W_BM 3 |
83 |
#define W_BO 32 |
84 |
#define W_BS 6 |
85 |
|
86 |
#define W_CM 127 |
87 |
#define W_CO 64 |
88 |
#define W_CS 7 |
89 |
|
90 |
#define W_DM 7 |
91 |
#define W_DO 8 |
92 |
#define W_DS 4 |
93 |
#elif 0 |
94 |
#define W_AM 97 |
95 |
#define W_AO 32 |
96 |
#define W_AS 6 |
97 |
|
98 |
#define W_BM 63 |
99 |
#define W_BO 512 |
100 |
#define W_BS 10 |
101 |
|
102 |
#define W_CM 13 |
103 |
#define W_CO 8 |
104 |
#define W_CS 4 |
105 |
|
106 |
#define W_DM 15 |
107 |
#define W_DO 16 |
108 |
#define W_DS 5 |
109 |
|
110 |
#else
|
111 |
|
112 |
#define W_AM 203 |
113 |
#define W_AO 64 |
114 |
#define W_AS 7 |
115 |
|
116 |
#define W_BM 217 |
117 |
#define W_BO 2048 |
118 |
#define W_BS 12 |
119 |
|
120 |
#define W_CM 113 |
121 |
#define W_CO 64 |
122 |
#define W_CS 7 |
123 |
|
124 |
#define W_DM 227 |
125 |
#define W_DO 128 |
126 |
#define W_DS 9 |
127 |
#endif
|
128 |
|
129 |
#define slice_buffer_get_line(slice_buf, line_num) ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] : ff_slice_buffer_load_line((slice_buf), (line_num)))
|
130 |
//#define slice_buffer_get_line(slice_buf, line_num) (ff_slice_buffer_load_line((slice_buf), (line_num)))
|
131 |
|
132 |
void ff_slice_buffer_init(slice_buffer * buf, int line_count, int max_allocated_lines, int line_width, IDWTELEM * base_buffer); |
133 |
void ff_slice_buffer_release(slice_buffer * buf, int line); |
134 |
void ff_slice_buffer_flush(slice_buffer * buf);
|
135 |
void ff_slice_buffer_destroy(slice_buffer * buf);
|
136 |
IDWTELEM * ff_slice_buffer_load_line(slice_buffer * buf, int line);
|
137 |
|
138 |
void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width); |
139 |
void ff_snow_horizontal_compose97i(IDWTELEM *b, int width); |
140 |
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); |
141 |
|
142 |
int ff_w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); |
143 |
int ff_w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); |
144 |
|
145 |
void ff_spatial_dwt(int *buffer, int width, int height, int stride, int type, int decomposition_count); |
146 |
|
147 |
void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer * sb, int width, int height, int stride_line, int type, int decomposition_count); |
148 |
void ff_spatial_idwt_buffered_slice(DWTContext *dsp, DWTCompose *cs, slice_buffer * slice_buf, int width, int height, int stride_line, int type, int decomposition_count, int y); |
149 |
void ff_spatial_idwt_init(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count); |
150 |
void ff_spatial_idwt_slice(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count, int y); |
151 |
void ff_spatial_idwt(IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count); |
152 |
|
153 |
void ff_dwt_init(DWTContext *c);
|
154 |
void ff_dwt_init_x86(DWTContext *c);
|
155 |
|
156 |
#endif /* AVCODEC_DWT_H */ |