Refactor denoiser frame buffer update
Use frame buffer pointer swap instead of memcpy when possible. These two CLs make the denoiser when running on vidyo1 720p at speed -6 over 10% faster. Change-Id: I64fe8a2422cafca6787a50c7f4dfb961191c0a9d
This commit is contained in:
@@ -365,6 +365,15 @@ static void copy_frame(YV12_BUFFER_CONFIG dest, const YV12_BUFFER_CONFIG src) {
|
||||
}
|
||||
}
|
||||
|
||||
static void swap_frame_buffer(YV12_BUFFER_CONFIG dest,
|
||||
YV12_BUFFER_CONFIG src) {
|
||||
uint8_t *tmp_buf = dest.y_buffer;
|
||||
assert(dest.y_width == src.y_width);
|
||||
assert(dest.y_height == src.y_height);
|
||||
dest.y_buffer = src.y_buffer;
|
||||
src.y_buffer = tmp_buf;
|
||||
}
|
||||
|
||||
void vp9_denoiser_update_frame_info(VP9_DENOISER *denoiser,
|
||||
YV12_BUFFER_CONFIG src,
|
||||
FRAME_TYPE frame_type,
|
||||
@@ -374,22 +383,23 @@ void vp9_denoiser_update_frame_info(VP9_DENOISER *denoiser,
|
||||
if (frame_type == KEY_FRAME) {
|
||||
int i;
|
||||
// Start at 1 so as not to overwrite the INTRA_FRAME
|
||||
for (i = 1; i < MAX_REF_FRAMES; ++i) {
|
||||
for (i = 1; i < MAX_REF_FRAMES; ++i)
|
||||
copy_frame(denoiser->running_avg_y[i], src);
|
||||
}
|
||||
} else { /* For non key frames */
|
||||
if (refresh_alt_ref_frame) {
|
||||
copy_frame(denoiser->running_avg_y[ALTREF_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
if (refresh_golden_frame) {
|
||||
copy_frame(denoiser->running_avg_y[GOLDEN_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
if (refresh_last_frame) {
|
||||
copy_frame(denoiser->running_avg_y[LAST_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* For non key frames */
|
||||
if (refresh_alt_ref_frame) {
|
||||
swap_frame_buffer(denoiser->running_avg_y[ALTREF_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
if (refresh_golden_frame) {
|
||||
swap_frame_buffer(denoiser->running_avg_y[GOLDEN_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
if (refresh_last_frame) {
|
||||
swap_frame_buffer(denoiser->running_avg_y[LAST_FRAME],
|
||||
denoiser->running_avg_y[INTRA_FRAME]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user