1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org 12c4e10b884294e4622e2470235489809a7bd73a1epbos@webrtc.org#include "webrtc/modules/video_processing/main/source/video_processing_impl.h" 13c4e10b884294e4622e2470235489809a7bd73a1epbos@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 149402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org#include "webrtc/system_wrappers/interface/logging.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 163f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <assert.h> 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgnamespace { 21b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid SetSubSampling(VideoProcessingModule::FrameStats* stats, 22b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const int32_t width, 23b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const int32_t height) { 24b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org if (width * height >= 640 * 480) { 25b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplWidth = 3; 26b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplHeight = 3; 27b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } else if (width * height >= 352 * 288) { 28b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplWidth = 2; 29b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplHeight = 2; 30b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } else if (width * height >= 176 * 144) { 31b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplWidth = 1; 32b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplHeight = 1; 33b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } else { 34b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplWidth = 0; 35b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplHeight = 0; 36b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 38b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org} // namespace 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgVideoProcessingModule* VideoProcessingModule::Create(const int32_t id) { 41b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return new VideoProcessingModuleImpl(id); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModule::Destroy(VideoProcessingModule* module) { 45b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org if (module) 46b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org delete static_cast<VideoProcessingModuleImpl*>(module); 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 49b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::ChangeUniqueId(const int32_t id) { 50b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 51b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org id_ = id; 52b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org brightness_detection_.ChangeUniqueId(id); 53b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org deflickering_.ChangeUniqueId(id); 54b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org denoising_.ChangeUniqueId(id); 55b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.ChangeUniqueId(id); 56b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return VPM_OK; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::Id() const { 60b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 61b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return id_; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 64b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgVideoProcessingModuleImpl::VideoProcessingModuleImpl(const int32_t id) 65b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org : id_(id), 66b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org mutex_(*CriticalSectionWrapper::CreateCriticalSection()) { 67b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org brightness_detection_.ChangeUniqueId(id); 68b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org deflickering_.ChangeUniqueId(id); 69b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org denoising_.ChangeUniqueId(id); 70b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.ChangeUniqueId(id); 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgVideoProcessingModuleImpl::~VideoProcessingModuleImpl() { 74b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org delete &mutex_; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModuleImpl::Reset() { 78b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 79b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org deflickering_.Reset(); 80b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org denoising_.Reset(); 81b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org brightness_detection_.Reset(); 82b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.Reset(); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModule::GetFrameStats(FrameStats* stats, 86b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const I420VideoFrame& frame) { 87b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org if (frame.IsZeroSize()) { 889402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org LOG(LS_ERROR) << "Zero size frame."; 89b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return VPM_PARAMETER_ERROR; 90b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org int width = frame.width(); 93b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org int height = frame.height(); 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 95b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org ClearFrameStats(stats); // The histogram needs to be zeroed out. 96b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org SetSubSampling(stats, width, height); 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const uint8_t* buffer = frame.buffer(kYPlane); 99b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org // Compute histogram and sum of frame 100b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org for (int i = 0; i < height; i += (1 << stats->subSamplHeight)) { 101b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org int k = i * width; 102b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org for (int j = 0; j < width; j += (1 << stats->subSamplWidth)) { 103b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->hist[buffer[k + j]]++; 104b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->sum += buffer[k + j]; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 106b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org } 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 108b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->num_pixels = (width * height) / ((1 << stats->subSamplWidth) * 109b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org (1 << stats->subSamplHeight)); 110b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org assert(stats->num_pixels > 0); 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org // Compute mean value of frame 113b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->mean = stats->sum / stats->num_pixels; 114b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org 115b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return VPM_OK; 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 118b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgbool VideoProcessingModule::ValidFrameStats(const FrameStats& stats) { 1199402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org if (stats.num_pixels == 0) { 1209402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org LOG(LS_WARNING) << "Invalid frame stats."; 1219402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org return false; 1229402619982e7ab5113d4d2a6fb2cbdf8d50f4f65asapersson@webrtc.org } 123b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return true; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 126b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModule::ClearFrameStats(FrameStats* stats) { 127b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->mean = 0; 128b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->sum = 0; 129b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->num_pixels = 0; 130b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplWidth = 0; 131b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org stats->subSamplHeight = 0; 132b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org memset(stats->hist, 0, sizeof(stats->hist)); 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModule::ColorEnhancement(I420VideoFrame* frame) { 136b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return VideoProcessing::ColorEnhancement(frame); 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModule::Brighten(I420VideoFrame* frame, int delta) { 140b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return VideoProcessing::Brighten(frame, delta); 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 143b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::Deflickering(I420VideoFrame* frame, 144b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org FrameStats* stats) { 145b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 146b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return deflickering_.ProcessFrame(frame, stats); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 149b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::Denoising(I420VideoFrame* frame) { 150b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 151b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return denoising_.ProcessFrame(frame); 152b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org} 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 154b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::BrightnessDetection( 155b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const I420VideoFrame& frame, 156b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const FrameStats& stats) { 157b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 158b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return brightness_detection_.ProcessFrame(frame, stats); 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModuleImpl::EnableTemporalDecimation(bool enable) { 163b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 164b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.EnableTemporalDecimation(enable); 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 168b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModuleImpl::SetInputFrameResampleMode(VideoFrameResampling 169b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org resampling_mode) { 170b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped cs(&mutex_); 171b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.SetInputFrameResampleMode(resampling_mode); 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 174b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::SetTargetResolution(uint32_t width, 175b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org uint32_t height, 176b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org uint32_t frame_rate) { 177b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped cs(&mutex_); 178b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.SetTargetResolution(width, height, frame_rate); 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 181b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orguint32_t VideoProcessingModuleImpl::Decimatedframe_rate() { 182b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped cs(&mutex_); 183b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.Decimatedframe_rate(); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 186b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orguint32_t VideoProcessingModuleImpl::DecimatedWidth() const { 187b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped cs(&mutex_); 188b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.DecimatedWidth(); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orguint32_t VideoProcessingModuleImpl::DecimatedHeight() const { 192b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped cs(&mutex_); 193b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.DecimatedHeight(); 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 196b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgint32_t VideoProcessingModuleImpl::PreprocessFrame( 197b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org const I420VideoFrame& frame, 198b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org I420VideoFrame **processed_frame) { 199b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 200b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.PreprocessFrame(frame, processed_frame); 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 203b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgVideoContentMetrics* VideoProcessingModuleImpl::ContentMetrics() const { 204b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 205b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org return frame_pre_processor_.ContentMetrics(); 206b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org} 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 208b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.orgvoid VideoProcessingModuleImpl::EnableContentAnalysis(bool enable) { 209b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org CriticalSectionScoped mutex(&mutex_); 210b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org frame_pre_processor_.EnableContentAnalysis(enable); 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 213b576a696e444c2873191463dcf03de1a82a50dd4mikhal@webrtc.org} // namespace webrtc 214