Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
3302147f
Commit
3302147f
authored
Jul 02, 2014
by
Tim Kopp
Committed by
Gerrit Code Review
Jul 02, 2014
Browse files
Merge "VP9 denoising enabled by noise_sensitivity param"
parents
1e511a53
9c9922df
Changes
3
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_denoiser.c
View file @
3302147f
...
...
@@ -15,6 +15,17 @@
#include "vp9/common/vp9_reconinter.h"
#include "vp9/encoder/vp9_denoiser.h"
/* The VP9 denoiser is a work-in-progress. It currently is only designed to work
* with speed 6, though it (inexplicably) seems to also work with speed 5 (one
* would need to modify the source code in vp9_pickmode.c and vp9_encoder.c to
* make the calls to the vp9_denoiser_* functions when in speed 5).
*
* The implementation is very similar to that of the VP8 denoiser. While
* choosing the motion vectors / reference frames, the denoiser is run, and if
* it did not modify the signal to much, the denoised block is copied to the
* signal.
*/
#ifdef OUTPUT_YUV_DENOISED
static
void
make_grayscale
(
YV12_BUFFER_CONFIG
*
yuv
);
#endif
...
...
vp9/encoder/vp9_encoder.c
View file @
3302147f
...
...
@@ -65,7 +65,7 @@ void vp9_coef_tree_initialize();
// #define OUTPUT_YUV_REC
#ifdef OUTPUT_YUV_DENOISED
FILE
*
yuv_denoised_file
;
FILE
*
yuv_denoised_file
=
NULL
;
#endif
#ifdef OUTPUT_YUV_SRC
FILE
*
yuv_file
;
...
...
@@ -664,9 +664,11 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
cpi
->
ext_refresh_frame_context_pending
=
0
;
#if CONFIG_DENOISING
vp9_denoiser_alloc
(
&
(
cpi
->
denoiser
),
cm
->
width
,
cm
->
height
,
cm
->
subsampling_x
,
cm
->
subsampling_y
,
VP9_ENC_BORDER_IN_PIXELS
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_alloc
(
&
(
cpi
->
denoiser
),
cm
->
width
,
cm
->
height
,
cm
->
subsampling_x
,
cm
->
subsampling_y
,
VP9_ENC_BORDER_IN_PIXELS
);
}
#endif
}
...
...
@@ -857,8 +859,12 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) {
cpi
->
mb
.
nmvsadcost_hp
[
1
]
=
&
cpi
->
mb
.
nmvsadcosts_hp
[
1
][
MV_MAX
];
cal_nmvsadcosts_hp
(
cpi
->
mb
.
nmvsadcost_hp
);
#if CONFIG_DENOISING
#ifdef OUTPUT_YUV_DENOISED
yuv_denoised_file
=
fopen
(
"denoised.yuv"
,
"ab"
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
yuv_denoised_file
=
fopen
(
"denoised.yuv"
,
"ab"
);
}
#endif
#endif
#ifdef OUTPUT_YUV_SRC
yuv_file
=
fopen
(
"bd.yuv"
,
"ab"
);
...
...
@@ -1097,7 +1103,9 @@ void vp9_remove_compressor(VP9_COMP *cpi) {
}
#if CONFIG_DENOISING
vp9_denoiser_free
(
&
(
cpi
->
denoiser
));
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_free
(
&
(
cpi
->
denoiser
));
}
#endif
dealloc_compressor_data
(
cpi
);
...
...
@@ -1111,8 +1119,12 @@ void vp9_remove_compressor(VP9_COMP *cpi) {
vp9_remove_common
(
&
cpi
->
common
);
vpx_free
(
cpi
);
#if CONFIG_DENOISING
#ifdef OUTPUT_YUV_DENOISED
fclose
(
yuv_denoised_file
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
fclose
(
yuv_denoised_file
);
}
#endif
#endif
#ifdef OUTPUT_YUV_SRC
fclose
(
yuv_file
);
...
...
@@ -1323,6 +1335,7 @@ void vp9_write_yuv_frame(YV12_BUFFER_CONFIG *s, FILE *f) {
}
#endif
#if CONFIG_DENOISING
#if defined(OUTPUT_YUV_DENOISED)
// The denoiser buffer is allocated as a YUV 440 buffer. This function writes it
// as YUV 420. We simply use the top-left pixels of the UV buffers, since we do
...
...
@@ -1354,6 +1367,7 @@ void vp9_write_yuv_frame_420(YV12_BUFFER_CONFIG *s, FILE *f) {
}
while
(
--
h
);
}
#endif
#endif
#ifdef OUTPUT_YUV_REC
void
vp9_write_yuv_rec_frame
(
VP9_COMMON
*
cm
)
{
...
...
@@ -1592,12 +1606,14 @@ void vp9_update_reference_frames(VP9_COMP *cpi) {
&
cm
->
ref_frame_map
[
cpi
->
lst_fb_idx
],
cm
->
new_fb_idx
);
}
#if CONFIG_DENOISING
vp9_denoiser_update_frame_info
(
&
cpi
->
denoiser
,
*
cpi
->
Source
,
cpi
->
common
.
frame_type
,
cpi
->
refresh_alt_ref_frame
,
cpi
->
refresh_golden_frame
,
cpi
->
refresh_last_frame
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_update_frame_info
(
&
cpi
->
denoiser
,
*
cpi
->
Source
,
cpi
->
common
.
frame_type
,
cpi
->
refresh_alt_ref_frame
,
cpi
->
refresh_golden_frame
,
cpi
->
refresh_last_frame
);
}
#endif
}
...
...
@@ -2189,16 +2205,21 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
}
#endif
#ifdef OUTPUT_YUV_DENOISED
vp9_write_yuv_frame_420
(
&
cpi
->
denoiser
.
running_avg_y
[
INTRA_FRAME
],
yuv_denoised_file
);
#endif
#ifdef OUTPUT_YUV_SRC
vp9_write_yuv_frame
(
cpi
->
Source
,
yuv_file
);
#endif
set_speed_features
(
cpi
);
#if CONFIG_DENOISING
#ifdef OUTPUT_YUV_DENOISED
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_write_yuv_frame_420
(
&
cpi
->
denoiser
.
running_avg_y
[
INTRA_FRAME
],
yuv_denoised_file
);
}
#endif
#endif
// Decide q and q bounds.
q
=
vp9_rc_pick_q_and_bounds
(
cpi
,
&
bottom_index
,
&
top_index
);
...
...
vp9/encoder/vp9_pickmode.c
View file @
3302147f
...
...
@@ -440,7 +440,9 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
int
i
;
#if CONFIG_DENOISING
vp9_denoiser_reset_frame_stats
(
&
cpi
->
denoiser
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_reset_frame_stats
(
&
cpi
->
denoiser
);
}
#endif
if
(
cpi
->
sf
.
reuse_inter_pred_sby
)
{
...
...
@@ -658,7 +660,9 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
}
#if CONFIG_DENOISING
vp9_denoiser_update_frame_stats
(
&
cpi
->
denoiser
,
mbmi
,
sse_y
,
this_mode
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_update_frame_stats
(
&
cpi
->
denoiser
,
mbmi
,
sse_y
,
this_mode
);
}
#endif
if
(
this_rd
<
best_rd
||
x
->
skip
)
{
...
...
@@ -774,7 +778,9 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
}
#if CONFIG_DENOISING
vp9_denoiser_denoise
(
&
cpi
->
denoiser
,
x
,
mi_row
,
mi_col
,
bsize
);
if
(
cpi
->
oxcf
.
noise_sensitivity
>
0
)
{
vp9_denoiser_denoise
(
&
cpi
->
denoiser
,
x
,
mi_row
,
mi_col
,
bsize
);
}
#endif
return
INT64_MAX
;
...
...
Write
Preview
Supports
Markdown
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