Refactor VideoDenoiser to use a buffer pool, replacing explicit double buffering.
Also improve denoiser to not assume identical stride of all involved frames, and delete the no longer needed function I420Buffer::CopyKeepStride. BUG=None Review-Url: https://codereview.webrtc.org/2469763002 Cr-Commit-Position: refs/heads/master@{#14940}
This commit is contained in:
@ -42,7 +42,7 @@ class DenoiserFilter {
|
||||
const uint8_t* b,
|
||||
int b_stride,
|
||||
unsigned int* sse) = 0;
|
||||
virtual DenoiserDecision MbDenoise(uint8_t* mc_running_avg_y,
|
||||
virtual DenoiserDecision MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
|
||||
@ -48,7 +48,7 @@ uint32_t DenoiserFilterC::Variance16x8(const uint8_t* a,
|
||||
return *sse - ((static_cast<int64_t>(sum) * sum) >> 7);
|
||||
}
|
||||
|
||||
DenoiserDecision DenoiserFilterC::MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision DenoiserFilterC::MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
|
||||
@ -27,7 +27,7 @@ class DenoiserFilterC : public DenoiserFilter {
|
||||
const uint8_t* b,
|
||||
int b_stride,
|
||||
unsigned int* sse) override;
|
||||
DenoiserDecision MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
|
||||
@ -87,7 +87,7 @@ uint32_t DenoiserFilterNEON::Variance16x8(const uint8_t* a,
|
||||
return *sse - ((sum * sum) >> 7);
|
||||
}
|
||||
|
||||
DenoiserDecision DenoiserFilterNEON::MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision DenoiserFilterNEON::MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_running_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int running_avg_y_stride,
|
||||
|
||||
@ -27,7 +27,7 @@ class DenoiserFilterNEON : public DenoiserFilter {
|
||||
const uint8_t* b,
|
||||
int b_stride,
|
||||
unsigned int* sse) override;
|
||||
DenoiserDecision MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
|
||||
@ -119,7 +119,7 @@ uint32_t DenoiserFilterSSE2::Variance16x8(const uint8_t* src,
|
||||
return *sse - ((sum * sum) >> 7);
|
||||
}
|
||||
|
||||
DenoiserDecision DenoiserFilterSSE2::MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision DenoiserFilterSSE2::MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
@ -150,7 +150,7 @@ DenoiserDecision DenoiserFilterSSE2::MbDenoise(uint8_t* mc_running_avg_y,
|
||||
const __m128i v_sig =
|
||||
_mm_loadu_si128(reinterpret_cast<const __m128i*>(&sig[0]));
|
||||
const __m128i v_mc_running_avg_y =
|
||||
_mm_loadu_si128(reinterpret_cast<__m128i*>(&mc_running_avg_y[0]));
|
||||
_mm_loadu_si128(reinterpret_cast<const __m128i*>(&mc_running_avg_y[0]));
|
||||
__m128i v_running_avg_y;
|
||||
const __m128i pdiff = _mm_subs_epu8(v_mc_running_avg_y, v_sig);
|
||||
const __m128i ndiff = _mm_subs_epu8(v_sig, v_mc_running_avg_y);
|
||||
|
||||
@ -27,7 +27,7 @@ class DenoiserFilterSSE2 : public DenoiserFilter {
|
||||
const uint8_t* b,
|
||||
int b_stride,
|
||||
unsigned int* sse) override;
|
||||
DenoiserDecision MbDenoise(uint8_t* mc_running_avg_y,
|
||||
DenoiserDecision MbDenoise(const uint8_t* mc_running_avg_y,
|
||||
int mc_avg_y_stride,
|
||||
uint8_t* running_avg_y,
|
||||
int avg_y_stride,
|
||||
|
||||
Reference in New Issue
Block a user