Go to the documentation of this file.
21 #ifndef AVCODEC_SNOW_DWT_H
22 #define AVCODEC_SNOW_DWT_H
34 #define MAX_DECOMPOSITIONS 8
64 uint8_t **
block,
int b_w,
int b_h,
int src_x,
65 int src_y,
int src_stride, slice_buffer *sb,
66 int add, uint8_t *dst8);
91 #define slice_buffer_get_line(slice_buf, line_num) \
92 ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] \
93 : ff_slice_buffer_load_line((slice_buf), \
103 low[*
i + 1] = low[(*
i + 1)>>1];
110 for (; *
i >= 0; *
i -= 2) {
111 low[*
i + 1] =
high[*
i >> 1];
112 low[*
i] = low[*
i >> 1];
121 if ((
width ^ lift_high) & 1)
135 int max_allocated_lines,
int line_width,
143 uint8_t **
block,
int b_w,
int b_h,
int src_x,
144 int src_y,
int src_stride, slice_buffer *sb,
145 int add, uint8_t *dst8);
151 int type,
int decomposition_count);
155 int decomposition_count);
159 int type,
int decomposition_count,
int y);
161 int stride,
int type,
int decomposition_count);
void ff_dwt_init_x86(SnowDWTContext *c)
void ff_slice_buffer_flush(slice_buffer *buf)
Used to minimize the amount of memory used in order to optimize cache performance.
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
IDWTELEM ** data_stack
Used for internal purposes.
IDWTELEM ** line
For use by idwt and predict_slices.
void(* vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width)
void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride, int type, int decomposition_count)
static double b1(void *priv, double x, double y)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
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)
int ff_w97_32_c(struct MpegEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t line_size, int h)
static double b3(void *priv, double x, double y)
static av_always_inline void snow_interleave_line_footer(int *i, IDWTELEM *low, const IDWTELEM *high)
void ff_dwt_init(SnowDWTContext *c)
void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer *sb, int width, int height, int stride_line, int type, int decomposition_count)
int ff_slice_buffer_init(slice_buffer *buf, int line_count, int max_allocated_lines, int line_width, IDWTELEM *base_buffer)
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
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)
static int shift(int a, int b)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static double b2(void *priv, double x, double y)
int ff_w53_32_c(struct MpegEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t line_size, int h)
void(* horizontal_compose97i)(IDWTELEM *b, IDWTELEM *temp, int width)
static av_always_inline void snow_horizontal_compose_lift_lead_out(int i, IDWTELEM *dst, const IDWTELEM *src, const IDWTELEM *ref, int width, int w, int lift_high, int mul, int add, int shift)
#define i(width, name, range_min, range_max)
IDWTELEM * ff_slice_buffer_load_line(slice_buffer *buf, int line)
void ff_slice_buffer_destroy(slice_buffer *buf)
void ff_slice_buffer_release(slice_buffer *buf, int line)
the frame and frame 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 AVFrame structures Several references can point to the same frame buffer
static int ref[MAX_W *MAX_W]
IDWTELEM * base_buffer
Buffer that this structure is caching.
static av_always_inline void snow_horizontal_compose_liftS_lead_out(int i, IDWTELEM *dst, const IDWTELEM *src, const IDWTELEM *ref, int width, int w)
static av_always_inline void snow_interleave_line_header(int *i, int width, IDWTELEM *low, IDWTELEM *high)
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)
The exact code depends on how similar the blocks are and how related they are to the block
static double b0(void *priv, double x, double y)