| Index: webrtc/modules/video_processing/video_denoiser.cc
|
| diff --git a/webrtc/modules/video_processing/video_denoiser.cc b/webrtc/modules/video_processing/video_denoiser.cc
|
| index a7aa7d3b60c27de2aee479153a111e2a0732f580..e51f6285885ddb855f763289831551997a19f64d 100644
|
| --- a/webrtc/modules/video_processing/video_denoiser.cc
|
| +++ b/webrtc/modules/video_processing/video_denoiser.cc
|
| @@ -73,29 +73,23 @@ VideoDenoiser::VideoDenoiser(bool runtime_cpu_detection)
|
| filter_(DenoiserFilter::Create(runtime_cpu_detection, &cpu_type_)),
|
| ne_(new NoiseEstimation()) {}
|
|
|
| -void VideoDenoiser::DenoiserReset(const VideoFrame& frame,
|
| - VideoFrame* denoised_frame,
|
| - VideoFrame* denoised_frame_prev) {
|
| - width_ = frame.width();
|
| - height_ = frame.height();
|
| +void VideoDenoiser::DenoiserReset(
|
| + const rtc::scoped_refptr<VideoFrameBuffer>& frame,
|
| + rtc::scoped_refptr<I420Buffer>* denoised_frame,
|
| + rtc::scoped_refptr<I420Buffer>* denoised_frame_prev) {
|
| + width_ = frame->width();
|
| + height_ = frame->height();
|
| mb_cols_ = width_ >> 4;
|
| mb_rows_ = height_ >> 4;
|
| - stride_y_ = frame.video_frame_buffer()->StrideY();
|
| - stride_u_ = frame.video_frame_buffer()->StrideU();
|
| - stride_v_ = frame.video_frame_buffer()->StrideV();
|
| + stride_y_ = frame->StrideY();
|
| + stride_u_ = frame->StrideU();
|
| + stride_v_ = frame->StrideV();
|
|
|
| // Allocate an empty buffer for denoised_frame_prev.
|
| - denoised_frame_prev->CreateEmptyFrame(width_, height_, stride_y_, stride_u_,
|
| - stride_v_);
|
| + *denoised_frame_prev = new rtc::RefCountedObject<I420Buffer>(
|
| + width_, height_, stride_y_, stride_u_, stride_v_);
|
| // Allocate and initialize denoised_frame with key frame.
|
| - denoised_frame->CreateFrame(
|
| - frame.video_frame_buffer()->DataY(),
|
| - frame.video_frame_buffer()->DataU(),
|
| - frame.video_frame_buffer()->DataV(),
|
| - width_, height_, stride_y_, stride_u_, stride_v_, kVideoRotation_0);
|
| - // Set time parameters to the output frame.
|
| - denoised_frame->set_timestamp(frame.timestamp());
|
| - denoised_frame->set_render_time_ms(frame.render_time_ms());
|
| + *denoised_frame = I420Buffer::CopyKeepStride(frame);
|
|
|
| // Init noise estimator and allocate buffers.
|
| ne_->Init(width_, height_, cpu_type_);
|
| @@ -225,26 +219,26 @@ void VideoDenoiser::CopyLumaOnMargin(const uint8_t* y_src, uint8_t* y_dst) {
|
| }
|
| }
|
|
|
| -void VideoDenoiser::DenoiseFrame(const VideoFrame& frame,
|
| - VideoFrame* denoised_frame,
|
| - VideoFrame* denoised_frame_prev,
|
| - bool noise_estimation_enabled) {
|
| +void VideoDenoiser::DenoiseFrame(
|
| + const rtc::scoped_refptr<VideoFrameBuffer>& frame,
|
| + rtc::scoped_refptr<I420Buffer>* denoised_frame,
|
| + rtc::scoped_refptr<I420Buffer>* denoised_frame_prev,
|
| + bool noise_estimation_enabled) {
|
| // If previous width and height are different from current frame's, need to
|
| // reallocate the buffers and no denoising for the current frame.
|
| - if (width_ != frame.width() || height_ != frame.height()) {
|
| + if (width_ != frame->width() || height_ != frame->height()) {
|
| DenoiserReset(frame, denoised_frame, denoised_frame_prev);
|
| return;
|
| }
|
|
|
| // Set buffer pointers.
|
| - const uint8_t* y_src = frame.video_frame_buffer()->DataY();
|
| - const uint8_t* u_src = frame.video_frame_buffer()->DataU();
|
| - const uint8_t* v_src = frame.video_frame_buffer()->DataV();
|
| - uint8_t* y_dst = denoised_frame->video_frame_buffer()->MutableDataY();
|
| - uint8_t* u_dst = denoised_frame->video_frame_buffer()->MutableDataU();
|
| - uint8_t* v_dst = denoised_frame->video_frame_buffer()->MutableDataV();
|
| - uint8_t* y_dst_prev =
|
| - denoised_frame_prev->video_frame_buffer()->MutableDataY();
|
| + const uint8_t* y_src = frame->DataY();
|
| + const uint8_t* u_src = frame->DataU();
|
| + const uint8_t* v_src = frame->DataV();
|
| + uint8_t* y_dst = (*denoised_frame)->MutableDataY();
|
| + uint8_t* u_dst = (*denoised_frame)->MutableDataU();
|
| + uint8_t* v_dst = (*denoised_frame)->MutableDataV();
|
| + uint8_t* y_dst_prev = (*denoised_frame_prev)->MutableDataY();
|
| memset(x_density_.get(), 0, mb_cols_);
|
| memset(y_density_.get(), 0, mb_rows_);
|
| memset(moving_object_.get(), 1, mb_cols_ * mb_rows_);
|
| @@ -338,10 +332,6 @@ void VideoDenoiser::DenoiseFrame(const VideoFrame& frame,
|
| memcpy(u_dst, u_src, (height_ >> 1) * stride_u_);
|
| memcpy(v_dst, v_src, (height_ >> 1) * stride_v_);
|
|
|
| - // Set time parameters to the output frame.
|
| - denoised_frame->set_timestamp(frame.timestamp());
|
| - denoised_frame->set_render_time_ms(frame.render_time_ms());
|
| -
|
| #if DISPLAY || DISPLAYNEON
|
| // Show rectangular region
|
| ShowRect(filter_, moving_edge_, moving_object_, x_density_, y_density_, u_src,
|
|
|