diff options
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/common/vp9_alloccommon.c | 4 | ||||
-rw-r--r-- | vp9/common/vp9_postproc.c | 18 | ||||
-rw-r--r-- | vp9/common/vp9_postproc.h | 2 |
3 files changed, 17 insertions, 7 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c index b4b120bee..946341231 100644 --- a/vp9/common/vp9_alloccommon.c +++ b/vp9/common/vp9_alloccommon.c @@ -104,7 +104,9 @@ void vp9_free_postproc_buffers(VP9_COMMON *cm) { vpx_free_frame_buffer(&cm->post_proc_buffer); vpx_free_frame_buffer(&cm->post_proc_buffer_int); vpx_free(cm->postproc_state.limits); - cm->postproc_state.limits = 0; + cm->postproc_state.limits = NULL; + vpx_free(cm->postproc_state.generated_noise); + cm->postproc_state.generated_noise = NULL; #else (void)cm; #endif diff --git a/vp9/common/vp9_postproc.c b/vp9/common/vp9_postproc.c index 6adaf04d7..4356adca6 100644 --- a/vp9/common/vp9_postproc.c +++ b/vp9/common/vp9_postproc.c @@ -378,6 +378,14 @@ int vp9_post_proc_frame(struct VP9Common *cm, } } + if (flags & VP9D_ADDNOISE) { + if (!cm->postproc_state.generated_noise) { + cm->postproc_state.generated_noise = vpx_calloc( + cm->width + 256, sizeof(*cm->postproc_state.generated_noise)); + if (!cm->postproc_state.generated_noise) + return 1; + } + } if ((flags & VP9D_MFQE) && cm->current_video_frame >= 2 && ppstate->last_frame_valid && cm->bit_depth == 8 && @@ -419,14 +427,14 @@ int vp9_post_proc_frame(struct VP9Common *cm, double sigma; vpx_clear_system_state(); sigma = noise_level + .5 + .6 * q / 63.0; - ppstate->clamp = vpx_setup_noise(sigma, ppstate->noise, - sizeof(ppstate->noise)); + ppstate->clamp = vpx_setup_noise(sigma, ppstate->generated_noise, + cm->width + 256); ppstate->last_q = q; ppstate->last_noise = noise_level; } - vpx_plane_add_noise(ppbuf->y_buffer, ppstate->noise, ppstate->clamp, - ppstate->clamp, ppbuf->y_width, ppbuf->y_height, - ppbuf->y_stride); + vpx_plane_add_noise(ppbuf->y_buffer, ppstate->generated_noise, + ppstate->clamp, ppstate->clamp, ppbuf->y_width, + ppbuf->y_height, ppbuf->y_stride); } *dest = *ppbuf; diff --git a/vp9/common/vp9_postproc.h b/vp9/common/vp9_postproc.h index 5a4eb8d2c..810ac2a79 100644 --- a/vp9/common/vp9_postproc.h +++ b/vp9/common/vp9_postproc.h @@ -25,13 +25,13 @@ extern "C" { struct postproc_state { int last_q; int last_noise; - int8_t noise[3072]; int last_base_qindex; int last_frame_valid; MODE_INFO *prev_mip; MODE_INFO *prev_mi; int clamp; uint8_t *limits; + int8_t *generated_noise; }; struct VP9Common; |