FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
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
27
typedef
int
DWTELEM
;
28
typedef
short
IDWTELEM
;
29
30
#define MAX_DECOMPOSITIONS 8
31
32
typedef
struct
DWTCompose
{
33
IDWTELEM
*
b0
;
34
IDWTELEM
*
b1
;
35
IDWTELEM
*
b2
;
36
IDWTELEM
*
b3
;
37
int
y
;
38
}
DWTCompose
;
39
40
/** Used to minimize the amount of memory used in order to
41
* optimize cache performance. **/
42
typedef
struct
slice_buffer_s {
43
IDWTELEM
**
line
;
///< For use by idwt and predict_slices.
44
IDWTELEM
**
data_stack
;
///< Used for internal purposes.
45
int
data_stack_top
;
46
int
line_count
;
47
int
line_width
;
48
int
data_count
;
49
IDWTELEM
*
base_buffer
;
///< Buffer that this structure is caching.
50
}
slice_buffer
;
51
52
struct
SnowDWTContext
;
53
54
typedef
struct
SnowDWTContext
{
55
void
(*
vertical_compose97i
)(
IDWTELEM
*b0,
IDWTELEM
*b1,
IDWTELEM
*b2,
56
IDWTELEM
*b3,
IDWTELEM
*b4,
IDWTELEM
*b5,
57
int
width
);
58
void
(*
horizontal_compose97i
)(
IDWTELEM
*
b
,
IDWTELEM
*
temp
,
int
width
);
59
void
(*
inner_add_yblock
)(
const
uint8_t
*obmc,
const
int
obmc_stride,
60
uint8_t
**
block
,
int
b_w,
int
b_h,
int
src_x,
61
int
src_y,
int
src_stride,
slice_buffer
*sb,
62
int
add,
uint8_t
*dst8);
63
}
SnowDWTContext
;
64
65
66
#define DWT_97 0
67
#define DWT_53 1
68
69
#define liftS lift
70
#define W_AM 3
71
#define W_AO 0
72
#define W_AS 1
73
74
#undef liftS
75
#define W_BM 1
76
#define W_BO 8
77
#define W_BS 4
78
79
#define W_CM 1
80
#define W_CO 0
81
#define W_CS 0
82
83
#define W_DM 3
84
#define W_DO 4
85
#define W_DS 3
86
87
#define slice_buffer_get_line(slice_buf, line_num) \
88
((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] \
89
: ff_slice_buffer_load_line((slice_buf), \
90
(line_num)))
91
92
int
ff_slice_buffer_init
(
slice_buffer
*
buf
,
int
line_count,
93
int
max_allocated_lines,
int
line_width,
94
IDWTELEM
*base_buffer);
95
void
ff_slice_buffer_release
(
slice_buffer
*
buf
,
int
line
);
96
void
ff_slice_buffer_flush
(
slice_buffer
*
buf
);
97
void
ff_slice_buffer_destroy
(
slice_buffer
*
buf
);
98
IDWTELEM
*
ff_slice_buffer_load_line
(
slice_buffer
*
buf
,
int
line
);
99
100
void
ff_snow_vertical_compose97i
(
IDWTELEM
*b0,
IDWTELEM
*b1,
IDWTELEM
*b2,
101
IDWTELEM
*b3,
IDWTELEM
*b4,
IDWTELEM
*b5,
102
int
width
);
103
void
ff_snow_horizontal_compose97i
(
IDWTELEM
*
b
,
IDWTELEM
*
temp
,
int
width
);
104
void
ff_snow_inner_add_yblock
(
const
uint8_t
*obmc,
const
int
obmc_stride,
105
uint8_t
**
block
,
int
b_w,
int
b_h,
int
src_x,
106
int
src_y,
int
src_stride,
slice_buffer
*sb,
107
int
add,
uint8_t
*dst8);
108
109
int
ff_w53_32_c
(
struct
MpegEncContext
*
v
,
uint8_t
*pix1,
uint8_t
*pix2, ptrdiff_t line_size,
int
h);
110
int
ff_w97_32_c
(
struct
MpegEncContext
*
v
,
uint8_t
*pix1,
uint8_t
*pix2, ptrdiff_t line_size,
int
h);
111
112
void
ff_spatial_dwt
(
int
*
buffer
,
int
*
temp
,
int
width
,
int
height
,
int
stride
,
113
int
type
,
int
decomposition_count);
114
115
void
ff_spatial_idwt_buffered_init
(
DWTCompose
*cs,
slice_buffer
*sb,
int
width
,
116
int
height
,
int
stride_line,
int
type
,
117
int
decomposition_count);
118
void
ff_spatial_idwt_buffered_slice
(
SnowDWTContext
*dsp,
DWTCompose
*cs,
119
slice_buffer
*slice_buf,
IDWTELEM
*
temp
,
120
int
width
,
int
height
,
int
stride_line,
121
int
type
,
int
decomposition_count,
int
y
);
122
void
ff_spatial_idwt
(
IDWTELEM
*
buffer
,
IDWTELEM
*
temp
,
int
width
,
int
height
,
123
int
stride
,
int
type
,
int
decomposition_count);
124
125
void
ff_dwt_init
(
SnowDWTContext
*
c
);
126
void
ff_dwt_init_x86
(
SnowDWTContext
*
c
);
127
128
#endif
/* AVCODEC_DWT_H */
Generated on Fri Dec 5 2014 04:42:02 for FFmpeg by
1.8.2