snow_dwt.h
Go to the documentation of this file.
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_SNOW_DWT_H
22 #define AVCODEC_SNOW_DWT_H
23 
24 #include <stdint.h>
25 
26 typedef int DWTELEM;
27 typedef short IDWTELEM;
28 
29 #define MAX_DECOMPOSITIONS 8
30 
31 typedef struct DWTCompose {
36  int y;
37 } DWTCompose;
38 
39 /** Used to minimize the amount of memory used in order to
40  * optimize cache performance. **/
41 typedef struct slice_buffer_s {
42  IDWTELEM **line; ///< For use by idwt and predict_slices.
43  IDWTELEM **data_stack; ///< Used for internal purposes.
48  IDWTELEM *base_buffer; ///< Buffer that this structure is caching.
49 } slice_buffer;
50 
51 struct SnowDWTContext;
52 
53 typedef struct SnowDWTContext {
54  void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
55  IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
56  int width);
57  void (*horizontal_compose97i)(IDWTELEM *b, IDWTELEM *temp, int width);
58  void (*inner_add_yblock)(const uint8_t *obmc, const int obmc_stride,
59  uint8_t **block, int b_w, int b_h, int src_x,
60  int src_y, int src_stride, slice_buffer *sb,
61  int add, uint8_t *dst8);
63 
64 
65 #define DWT_97 0
66 #define DWT_53 1
67 
68 #define liftS lift
69 #define W_AM 3
70 #define W_AO 0
71 #define W_AS 1
72 
73 #undef liftS
74 #define W_BM 1
75 #define W_BO 8
76 #define W_BS 4
77 
78 #define W_CM 1
79 #define W_CO 0
80 #define W_CS 0
81 
82 #define W_DM 3
83 #define W_DO 4
84 #define W_DS 3
85 
86 #define slice_buffer_get_line(slice_buf, line_num) \
87  ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] \
88  : ff_slice_buffer_load_line((slice_buf), \
89  (line_num)))
90 
91 int ff_slice_buffer_init(slice_buffer *buf, int line_count,
92  int max_allocated_lines, int line_width,
93  IDWTELEM *base_buffer);
98 
100  IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
101  int width);
103 void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride,
104  uint8_t **block, int b_w, int b_h, int src_x,
105  int src_y, int src_stride, slice_buffer *sb,
106  int add, uint8_t *dst8);
107 
108 int ff_w53_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
109 int ff_w97_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
110 
111 void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride,
112  int type, int decomposition_count);
113 
115  int height, int stride_line, int type,
116  int decomposition_count);
118  slice_buffer *slice_buf, IDWTELEM *temp,
119  int width, int height, int stride_line,
120  int type, int decomposition_count, int y);
122  int stride, int type, int decomposition_count);
123 
126 
127 #endif /* AVCODEC_DWT_H */
float v
void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width)
Definition: snow_dwt.c:470
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
Definition: snow_dwt.c:736
int data_stack_top
Definition: snow_dwt.h:44
else temp
Definition: vf_mcdeint.c:148
struct SnowDWTContext SnowDWTContext
void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer *sb, int width, int height, int stride_line, int type, int decomposition_count)
Definition: snow_dwt.c:644
int data_count
Definition: snow_dwt.h:47
int ff_slice_buffer_init(slice_buffer *buf, int line_count, int max_allocated_lines, int line_width, IDWTELEM *base_buffer)
Definition: snow_dwt.c:28
int stride
Definition: mace.c:144
void ff_slice_buffer_flush(slice_buffer *buf)
Definition: snow_dwt.c:91
IDWTELEM ** line
For use by idwt and predict_slices.
Definition: snow_dwt.h:42
short IDWTELEM
Definition: dirac_dwt.h:27
uint8_t
void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride, int type, int decomposition_count)
Definition: snow_dwt.c:324
int line_width
Definition: snow_dwt.h:46
IDWTELEM ** data_stack
Used for internal purposes.
Definition: snow_dwt.h:43
void ff_dwt_init(SnowDWTContext *c)
Definition: snow_dwt.c:855
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)
Definition: snow.c:36
Used to minimize the amount of memory used in order to optimize cache performance.
Definition: snow_dwt.h:41
IDWTELEM * b0
Definition: snow_dwt.h:32
Definition: graph2dot.c:48
struct DWTCompose DWTCompose
IDWTELEM * b3
Definition: snow_dwt.h:35
void ff_slice_buffer_release(slice_buffer *buf, int line)
Definition: snow_dwt.c:78
int ff_w97_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
Definition: snow_dwt.c:842
static int width
Definition: tests/utils.c:158
typedef void(RENAME(mix_any_func_type))
void * buf
Definition: avisynth_c.h:594
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
short IDWTELEM
Definition: snow_dwt.h:27
#define type
int DWTELEM
Definition: snow_dwt.h:26
void ff_slice_buffer_destroy(slice_buffer *buf)
Definition: snow_dwt.c:99
IDWTELEM * b1
Definition: snow_dwt.h:33
IDWTELEM * b2
Definition: snow_dwt.h:34
static double c[64]
IDWTELEM * ff_slice_buffer_load_line(slice_buffer *buf, int line)
Definition: snow_dwt.c:62
IDWTELEM * b[MAX_DWT_SUPPORT]
Definition: dirac_dwt.h:33
the buffer and buffer reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFilterBuffer structures They must not be accessed but through references stored in AVFilterBufferRef structures Several references can point to the same buffer
int ff_w53_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
Definition: snow_dwt.c:837
void ff_spatial_idwt_buffered_slice(SnowDWTContext *dsp, DWTCompose *cs, slice_buffer *slice_buf, IDWTELEM *temp, int width, int height, int stride_line, int type, int decomposition_count, int y)
Definition: snow_dwt.c:663
void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width)
Definition: snow_dwt.c:534
int line_count
Definition: snow_dwt.h:45
IDWTELEM * base_buffer
Buffer that this structure is caching.
Definition: snow_dwt.h:48
struct slice_buffer_s slice_buffer
Used to minimize the amount of memory used in order to optimize cache performance.
void ff_dwt_init_x86(SnowDWTContext *c)
Definition: snowdsp.c:878