Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
c97de57c
Commit
c97de57c
authored
Apr 09, 2005
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix QROOT != 8
Originally committed as revision 4114 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
9146ca37
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
24 deletions
+26
-24
snow.c
libavcodec/snow.c
+26
-24
No files found.
libavcodec/snow.c
View file @
c97de57c
...
...
@@ -31,7 +31,8 @@
#define MAX_DECOMPOSITIONS 8
#define MAX_PLANES 4
#define DWTELEM int
#define QROOT 8
#define QSHIFT 3
#define QROOT (1<<QSHIFT)
#define LOSSLESS_QLOG -128
#define FRAC_BITS 8
...
...
@@ -572,13 +573,7 @@ static void slice_buffer_destroy(slice_buffer * buf)
#undef qexp
#endif
#define QEXPSHIFT (7-FRAC_BITS+8) //FIXME try to change this to 0
static
const
uint8_t
qexp
[
8
]
=
{
128
,
140
,
152
,
166
,
181
,
197
,
215
,
235
// 64, 70, 76, 83, 91, 99, 108, 117
// 32, 35, 38, 41, 45, 49, 54, 59
// 16, 17, 19, 21, 23, 25, 27, 29
// 8, 9, 10, 10, 11, 12, 13, 15
};
static
uint8_t
qexp
[
QROOT
];
static
inline
int
mirror
(
int
v
,
int
m
){
if
(
v
<
0
)
return
-
v
;
...
...
@@ -1836,8 +1831,8 @@ static inline void unpack_coeffs(SnowContext *s, SubBand *b, SubBand * parent, i
static
inline
void
decode_subband_slice_buffered
(
SnowContext
*
s
,
SubBand
*
b
,
slice_buffer
*
sb
,
int
start_y
,
int
h
,
int
save_state
[
1
]){
const
int
w
=
b
->
width
;
int
x
,
y
;
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
128
);
int
qmul
=
qexp
[
qlog
&
7
]
<<
(
qlog
>>
3
);
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
QROOT
*
16
);
int
qmul
=
qexp
[
qlog
&
(
QROOT
-
1
)]
<<
(
qlog
>>
QSHIFT
);
int
qadd
=
(
s
->
qbias
*
qmul
)
>>
QBIAS_SHIFT
;
int
new_index
=
0
;
...
...
@@ -2843,13 +2838,11 @@ static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int b
const
int
level
=
b
->
level
;
const
int
w
=
b
->
width
;
const
int
h
=
b
->
height
;
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
128
);
const
int
qmul
=
qexp
[
qlog
&
7
]
<<
(
qlog
>>
3
);
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
QROOT
*
16
);
const
int
qmul
=
qexp
[
qlog
&
(
QROOT
-
1
)]
<<
(
qlog
>>
QSHIFT
);
int
x
,
y
,
thres1
,
thres2
;
START_TIMER
assert
(
QROOT
==
8
);
if
(
s
->
qlog
==
LOSSLESS_QLOG
)
return
;
bias
=
bias
?
0
:
(
3
*
qmul
)
>>
3
;
...
...
@@ -2905,16 +2898,14 @@ static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int b
static
void
dequantize_buffered
(
SnowContext
*
s
,
slice_buffer
*
sb
,
SubBand
*
b
,
DWTELEM
*
src
,
int
stride
){
const
int
w
=
b
->
width
;
const
int
h
=
b
->
height
;
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
128
);
const
int
qmul
=
qexp
[
qlog
&
7
]
<<
(
qlog
>>
3
);
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
QROOT
*
16
);
const
int
qmul
=
qexp
[
qlog
&
(
QROOT
-
1
)]
<<
(
qlog
>>
QSHIFT
);
const
int
qadd
=
(
s
->
qbias
*
qmul
)
>>
QBIAS_SHIFT
;
int
x
,
y
;
START_TIMER
if
(
s
->
qlog
==
LOSSLESS_QLOG
)
return
;
assert
(
QROOT
==
8
);
for
(
y
=
0
;
y
<
h
;
y
++
){
// DWTELEM * line = slice_buffer_get_line_from_address(sb, src + (y * stride));
DWTELEM
*
line
=
slice_buffer_get_line
(
sb
,
(
y
*
b
->
stride_line
)
+
b
->
buf_y_offset
)
+
b
->
buf_x_offset
;
...
...
@@ -2935,16 +2926,14 @@ static void dequantize_buffered(SnowContext *s, slice_buffer * sb, SubBand *b, D
static
void
dequantize
(
SnowContext
*
s
,
SubBand
*
b
,
DWTELEM
*
src
,
int
stride
){
const
int
w
=
b
->
width
;
const
int
h
=
b
->
height
;
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
128
);
const
int
qmul
=
qexp
[
qlog
&
7
]
<<
(
qlog
>>
3
);
const
int
qlog
=
clip
(
s
->
qlog
+
b
->
qlog
,
0
,
QROOT
*
16
);
const
int
qmul
=
qexp
[
qlog
&
(
QROOT
-
1
)]
<<
(
qlog
>>
QSHIFT
);
const
int
qadd
=
(
s
->
qbias
*
qmul
)
>>
QBIAS_SHIFT
;
int
x
,
y
;
START_TIMER
if
(
s
->
qlog
==
LOSSLESS_QLOG
)
return
;
assert
(
QROOT
==
8
);
for
(
y
=
0
;
y
<
h
;
y
++
){
for
(
x
=
0
;
x
<
w
;
x
++
){
int
i
=
src
[
x
+
y
*
stride
];
...
...
@@ -3129,6 +3118,16 @@ static int decode_header(SnowContext *s){
return
0
;
}
static
void
init_qexp
(){
int
i
;
double
v
=
128
;
for
(
i
=
0
;
i
<
QROOT
;
i
++
){
qexp
[
i
]
=
lrintf
(
v
);
v
*=
pow
(
2
,
1
.
0
/
QROOT
);
}
}
static
int
common_init
(
AVCodecContext
*
avctx
){
SnowContext
*
s
=
avctx
->
priv_data
;
int
width
,
height
;
...
...
@@ -3175,7 +3174,10 @@ static int common_init(AVCodecContext *avctx){
mcfh
(
8
,
0
)
mcfh
(
0
,
8
)
mcfh
(
8
,
8
)
if
(
!
qexp
[
0
])
init_qexp
();
dec
=
s
->
spatial_decomposition_count
=
5
;
s
->
spatial_decomposition_type
=
avctx
->
prediction_method
;
//FIXME add decorrelator type r transform_type
...
...
@@ -3367,7 +3369,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
if
(
pict
->
quality
){
s
->
qlog
=
rint
(
QROOT
*
log
(
pict
->
quality
/
(
float
)
FF_QP2LAMBDA
)
/
log
(
2
));
//<64 >60
s
->
qlog
+=
61
;
s
->
qlog
+=
61
*
QROOT
/
8
;
}
else
{
s
->
qlog
=
LOSSLESS_QLOG
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment