FFmpeg
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 <stddef.h>
25 #include <stdint.h>
26 
28 
29 typedef int DWTELEM;
30 typedef short IDWTELEM;
31 
32 #define MAX_DECOMPOSITIONS 8
33 
34 typedef struct DWTCompose {
39  int y;
40 } DWTCompose;
41 
42 /** Used to minimize the amount of memory used in order to
43  * optimize cache performance. **/
44 typedef struct slice_buffer_s {
45  IDWTELEM **line; ///< For use by idwt and predict_slices.
46  IDWTELEM **data_stack; ///< Used for internal purposes.
51  IDWTELEM *base_buffer; ///< Buffer that this structure is caching.
52 } slice_buffer;
53 
54 struct SnowDWTContext;
55 
56 typedef struct SnowDWTContext {
57  void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
58  IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
59  int width);
60  void (*horizontal_compose97i)(IDWTELEM *b, IDWTELEM *temp, int width);
61  void (*inner_add_yblock)(const uint8_t *obmc, const int obmc_stride,
62  uint8_t **block, int b_w, int b_h, int src_x,
63  int src_y, int src_stride, slice_buffer *sb,
64  int add, uint8_t *dst8);
66 
67 
68 #define DWT_97 0
69 #define DWT_53 1
70 
71 #define liftS lift
72 #define W_AM 3
73 #define W_AO 0
74 #define W_AS 1
75 
76 #undef liftS
77 #define W_BM 1
78 #define W_BO 8
79 #define W_BS 4
80 
81 #define W_CM 1
82 #define W_CO 0
83 #define W_CS 0
84 
85 #define W_DM 3
86 #define W_DO 4
87 #define W_DS 3
88 
89 #define slice_buffer_get_line(slice_buf, line_num) \
90  ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] \
91  : ff_slice_buffer_load_line((slice_buf), \
92  (line_num)))
93 
94 int ff_slice_buffer_init(slice_buffer *buf, int line_count,
95  int max_allocated_lines, int line_width,
96  IDWTELEM *base_buffer);
101 
103  IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
104  int width);
106 void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride,
107  uint8_t **block, int b_w, int b_h, int src_x,
108  int src_y, int src_stride, slice_buffer *sb,
109  int add, uint8_t *dst8);
110 
111 int ff_w53_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h);
112 int ff_w97_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h);
113 
114 void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride,
115  int type, int decomposition_count);
116 
118  int height, int stride_line, int type,
119  int decomposition_count);
121  slice_buffer *slice_buf, IDWTELEM *temp,
122  int width, int height, int stride_line,
123  int type, int decomposition_count, int y);
125  int stride, int type, int decomposition_count);
126 
129 
130 #endif /* AVCODEC_DWT_H */
void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width)
Definition: snow_dwt.c:465
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
Definition: snow_dwt.c:731
else temp
Definition: vf_mcdeint.c:256
uint8_t * b[MAX_DWT_SUPPORT]
Definition: dirac_dwt.h:33
GLint GLenum type
Definition: opengl_enc.c:104
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:639
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
void ff_slice_buffer_flush(slice_buffer *buf)
Definition: snow_dwt.c:91
short IDWTELEM
Definition: dirac_dwt.h:27
The exact code depends on how similar the blocks are and how related they are to the block
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:319
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
#define height
int ff_w53_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h)
Definition: snow_dwt.c:832
void ff_dwt_init(SnowDWTContext *c)
Definition: snow_dwt.c:850
int data_stack_top
Definition: snow_dwt.h:47
int data_count
Definition: snow_dwt.h:50
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
int line_count
Definition: snow_dwt.h:48
IDWTELEM * b0
Definition: snow_dwt.h:35
Definition: graph2dot.c:48
#define width
IDWTELEM * b3
Definition: snow_dwt.h:38
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
IDWTELEM * base_buffer
Buffer that this structure is caching.
Definition: snow_dwt.h:51
void ff_slice_buffer_release(slice_buffer *buf, int line)
Definition: snow_dwt.c:78
void * buf
Definition: avisynth_c.h:766
short IDWTELEM
Definition: snow_dwt.h:30
int DWTELEM
Definition: snow_dwt.h:27
void ff_slice_buffer_destroy(slice_buffer *buf)
Definition: snow_dwt.c:103
IDWTELEM * b1
Definition: snow_dwt.h:36
MpegEncContext.
Definition: mpegvideo.h:81
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:104
IDWTELEM * b2
Definition: snow_dwt.h:37
int line_width
Definition: snow_dwt.h:49
IDWTELEM ** line
For use by idwt and predict_slices.
Definition: snow_dwt.h:45
IDWTELEM * ff_slice_buffer_load_line(slice_buffer *buf, int line)
Definition: snow_dwt.c:62
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:658
void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width)
Definition: snow_dwt.c:529
int ff_w97_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h)
Definition: snow_dwt.c:837
IDWTELEM ** data_stack
Used for internal purposes.
Definition: snow_dwt.h:46
void ff_dwt_init_x86(SnowDWTContext *c)
Definition: snowdsp.c:880
Used to minimize the amount of memory used in order to optimize cache performance.
Definition: snow_dwt.h:44
GLuint buffer
Definition: opengl_enc.c:101