annotate dwt.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 1bf7af4db35a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
1 /*
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
2 * Copyright (C) 2004-2010 Michael Niedermayer <michaelni@gmx.at>
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
3 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
4 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
5 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
14 * Lesser General Public License for more details.
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
15 *
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
19 */
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
20
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
21 #ifndef AVCODEC_DWT_H
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
22 #define AVCODEC_DWT_H
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
23
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
24 #include <stdint.h>
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
25
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
26 typedef int DWTELEM;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
27 typedef short IDWTELEM;
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
28
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
29 typedef struct {
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
30 IDWTELEM *b0;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
31 IDWTELEM *b1;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
32 IDWTELEM *b2;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
33 IDWTELEM *b3;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
34 int y;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
35 } DWTCompose;
3326
fb245e797c5d Snow: cosmetics
lorenm
parents: 3323
diff changeset
36
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
37 /** Used to minimize the amount of memory used in order to optimize cache performance. **/
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
38 typedef struct slice_buffer_s {
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
39 IDWTELEM * * line; ///< For use by idwt and predict_slices.
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
40 IDWTELEM * * data_stack; ///< Used for internal purposes.
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
41 int data_stack_top;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
42 int line_count;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
43 int line_width;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
44 int data_count;
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
45 IDWTELEM * base_buffer; ///< Buffer that this structure is caching.
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
46 } slice_buffer;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
47
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
48 typedef struct DWTContext {
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
49 void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
50 void (*horizontal_compose97i)(IDWTELEM *b, int width);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
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);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
52 } DWTContext;
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
53
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
54 #define MAX_DECOMPOSITIONS 8
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
55
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
56 #define DWT_97 0
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
57 #define DWT_53 1
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
58
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
59 #define liftS lift
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
60 #if 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
61 #define W_AM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
62 #define W_AO 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
63 #define W_AS 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
65 #undef liftS
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
66 #define W_BM 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
67 #define W_BO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
68 #define W_BS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
69
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
70 #define W_CM 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
71 #define W_CO 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
72 #define W_CS 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
73
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
74 #define W_DM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
75 #define W_DO 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
76 #define W_DS 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
77 #elif 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
78 #define W_AM 55
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
79 #define W_AO 16
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
80 #define W_AS 5
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
81
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
82 #define W_BM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
83 #define W_BO 32
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
84 #define W_BS 6
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
85
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
86 #define W_CM 127
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
87 #define W_CO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
88 #define W_CS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
89
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
90 #define W_DM 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
91 #define W_DO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
92 #define W_DS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
93 #elif 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
94 #define W_AM 97
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
95 #define W_AO 32
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
96 #define W_AS 6
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
97
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
98 #define W_BM 63
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
99 #define W_BO 512
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
100 #define W_BS 10
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
101
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
102 #define W_CM 13
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
103 #define W_CO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
104 #define W_CS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
105
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
106 #define W_DM 15
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
107 #define W_DO 16
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
108 #define W_DS 5
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
109
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
110 #else
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
111
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
112 #define W_AM 203
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
113 #define W_AO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
114 #define W_AS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
115
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
116 #define W_BM 217
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
117 #define W_BO 2048
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
118 #define W_BS 12
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
119
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
120 #define W_CM 113
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
121 #define W_CO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
122 #define W_CS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
123
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
124 #define W_DM 227
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
125 #define W_DO 128
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
126 #define W_DS 9
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
127 #endif
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
128
11486
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
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)))
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
130 //#define slice_buffer_get_line(slice_buf, line_num) (ff_slice_buffer_load_line((slice_buf), (line_num)))
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
131
11486
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
132 void ff_slice_buffer_init(slice_buffer * buf, int line_count, int max_allocated_lines, int line_width, IDWTELEM * base_buffer);
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
133 void ff_slice_buffer_release(slice_buffer * buf, int line);
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
134 void ff_slice_buffer_flush(slice_buffer * buf);
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
135 void ff_slice_buffer_destroy(slice_buffer * buf);
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
136 IDWTELEM * ff_slice_buffer_load_line(slice_buffer * buf, int line);
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
137
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8208
diff changeset
138 void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8208
diff changeset
139 void ff_snow_horizontal_compose97i(IDWTELEM *b, int width);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8208
diff changeset
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);
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
141
11486
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
142 int ff_w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
1bf7af4db35a Add ff_ prefix to dwt functions
mru
parents: 11485
diff changeset
143 int ff_w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
144
11380
8f061327e46a Move ff_spatial_dwt() prototype to snow.h
mru
parents: 8590
diff changeset
145 void ff_spatial_dwt(int *buffer, int width, int height, int stride, int type, int decomposition_count);
8f061327e46a Move ff_spatial_dwt() prototype to snow.h
mru
parents: 8590
diff changeset
146
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
147 void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer * sb, int width, int height, int stride_line, int type, int decomposition_count);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
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);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
149 void ff_spatial_idwt_init(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
150 void ff_spatial_idwt_slice(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count, int y);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
151 void ff_spatial_idwt(IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count);
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
152
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
153 void ff_dwt_init(DWTContext *c);
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
154 void ff_dwt_init_x86(DWTContext *c);
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
155
11485
0f0cd6b5791f Separate DWT from snow and dsputil
mru
parents: 11460
diff changeset
156 #endif /* AVCODEC_DWT_H */