Enable and fix chromium clang warnings in sdk/android targets.

Targets:
base_jni, internal_jni, video_jni, vp8_jni and vp9_jni

Bug: webrtc:163
Change-Id: I4aa68c81e6e7cbe5fdf78c90e464b46c55633252
Reviewed-on: https://webrtc-review.googlesource.com/66820
Commit-Queue: Paulina Hensman <phensman@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22744}
diff --git a/api/videosourceinterface.cc b/api/videosourceinterface.cc
index 5eda369..8cf8202 100644
--- a/api/videosourceinterface.cc
+++ b/api/videosourceinterface.cc
@@ -13,6 +13,7 @@
 namespace rtc {
 
 VideoSinkWants::VideoSinkWants() = default;
+VideoSinkWants::VideoSinkWants(const VideoSinkWants&) = default;
 VideoSinkWants::~VideoSinkWants() = default;
 
 }  // namespace rtc
diff --git a/api/videosourceinterface.h b/api/videosourceinterface.h
index ffb017a..065e2dc 100644
--- a/api/videosourceinterface.h
+++ b/api/videosourceinterface.h
@@ -22,6 +22,7 @@
 // should have when it is delivered to a certain sink.
 struct VideoSinkWants {
   VideoSinkWants();
+  VideoSinkWants(const VideoSinkWants&);
   ~VideoSinkWants();
   // Tells the source whether the sink wants frames with rotation applied.
   // By default, any rotation must be applied by the sink.
diff --git a/common_video/i420_buffer_pool.cc b/common_video/i420_buffer_pool.cc
index 48d6512..c403eeb 100644
--- a/common_video/i420_buffer_pool.cc
+++ b/common_video/i420_buffer_pool.cc
@@ -14,10 +14,14 @@
 
 namespace webrtc {
 
+I420BufferPool::I420BufferPool() : I420BufferPool(false) {}
+I420BufferPool::I420BufferPool(bool zero_initialize)
+    : I420BufferPool(zero_initialize, std::numeric_limits<size_t>::max()) {}
 I420BufferPool::I420BufferPool(bool zero_initialize,
                                size_t max_number_of_buffers)
     : zero_initialize_(zero_initialize),
       max_number_of_buffers_(max_number_of_buffers) {}
+I420BufferPool::~I420BufferPool() = default;
 
 void I420BufferPool::Release() {
   buffers_.clear();
diff --git a/common_video/include/i420_buffer_pool.h b/common_video/include/i420_buffer_pool.h
index 863eb10..1c425bb 100644
--- a/common_video/include/i420_buffer_pool.h
+++ b/common_video/include/i420_buffer_pool.h
@@ -29,11 +29,10 @@
 // are created. This is to prevent memory leaks where frames are not returned.
 class I420BufferPool {
  public:
-  I420BufferPool()
-      : I420BufferPool(false) {}
-  explicit I420BufferPool(bool zero_initialize)
-      : I420BufferPool(zero_initialize, std::numeric_limits<size_t>::max()) {}
+  I420BufferPool();
+  explicit I420BufferPool(bool zero_initialize);
   I420BufferPool(bool zero_initialze, size_t max_number_of_buffers);
+  ~I420BufferPool();
 
   // Returns a buffer from the pool. If no suitable buffer exist in the pool
   // and there are less than |max_number_of_buffers| pending, a buffer is
diff --git a/common_video/include/video_frame.h b/common_video/include/video_frame.h
index af363d4..ba6762f 100644
--- a/common_video/include/video_frame.h
+++ b/common_video/include/video_frame.h
@@ -34,6 +34,7 @@
   static size_t GetBufferPaddingBytes(VideoCodecType codec_type);
 
   EncodedImage();
+  EncodedImage(const EncodedImage&);
   EncodedImage(uint8_t* buffer, size_t length, size_t size);
 
   void SetEncodeTime(int64_t encode_start_ms, int64_t encode_finish_ms);
diff --git a/common_video/video_frame.cc b/common_video/video_frame.cc
index 1447fc1..f4ebac8 100644
--- a/common_video/video_frame.cc
+++ b/common_video/video_frame.cc
@@ -45,6 +45,8 @@
 
 EncodedImage::EncodedImage() : EncodedImage(nullptr, 0, 0) {}
 
+EncodedImage::EncodedImage(const EncodedImage&) = default;
+
 EncodedImage::EncodedImage(uint8_t* buffer, size_t length, size_t size)
       : _buffer(buffer), _length(length), _size(size) {}
 
diff --git a/media/base/adaptedvideotracksource.cc b/media/base/adaptedvideotracksource.cc
index 5a7168b..84b39d8 100644
--- a/media/base/adaptedvideotracksource.cc
+++ b/media/base/adaptedvideotracksource.cc
@@ -22,6 +22,7 @@
     : video_adapter_(required_alignment) {
   thread_checker_.DetachFromThread();
 }
+AdaptedVideoTrackSource::~AdaptedVideoTrackSource() = default;
 
 bool AdaptedVideoTrackSource::GetStats(Stats* stats) {
   rtc::CritScope lock(&stats_crit_);
diff --git a/media/base/adaptedvideotracksource.h b/media/base/adaptedvideotracksource.h
index 0db381f..e7edb9a 100644
--- a/media/base/adaptedvideotracksource.h
+++ b/media/base/adaptedvideotracksource.h
@@ -26,6 +26,7 @@
     : public webrtc::Notifier<webrtc::VideoTrackSourceInterface> {
  public:
   AdaptedVideoTrackSource();
+  ~AdaptedVideoTrackSource() override;
 
  protected:
   // Allows derived classes to initialize |video_adapter_| with a custom
diff --git a/media/base/codec.cc b/media/base/codec.cc
index e4b6b78..f5a71cc 100644
--- a/media/base/codec.cc
+++ b/media/base/codec.cc
@@ -22,6 +22,7 @@
 namespace cricket {
 
 FeedbackParams::FeedbackParams() = default;
+FeedbackParams::~FeedbackParams() = default;
 
 bool FeedbackParam::operator==(const FeedbackParam& other) const {
   return _stricmp(other.id().c_str(), id().c_str()) == 0 &&
diff --git a/media/base/codec.h b/media/base/codec.h
index 6a2dcf4..a49fe4b 100644
--- a/media/base/codec.h
+++ b/media/base/codec.h
@@ -36,6 +36,7 @@
       : id_(id),
         param_(kParamValueEmpty) {
   }
+
   bool operator==(const FeedbackParam& other) const;
 
   const std::string& id() const { return id_; }
@@ -49,6 +50,7 @@
 class FeedbackParams {
  public:
   FeedbackParams();
+  ~FeedbackParams();
   bool operator==(const FeedbackParams& other) const;
 
   bool Has(const FeedbackParam& param) const;
diff --git a/media/base/videobroadcaster.cc b/media/base/videobroadcaster.cc
index d2a9c54..09d69f2 100644
--- a/media/base/videobroadcaster.cc
+++ b/media/base/videobroadcaster.cc
@@ -21,6 +21,7 @@
 VideoBroadcaster::VideoBroadcaster() {
   thread_checker_.DetachFromThread();
 }
+VideoBroadcaster::~VideoBroadcaster() = default;
 
 void VideoBroadcaster::AddOrUpdateSink(
     VideoSinkInterface<webrtc::VideoFrame>* sink,
diff --git a/media/base/videobroadcaster.h b/media/base/videobroadcaster.h
index c19f3f7..078368e 100644
--- a/media/base/videobroadcaster.h
+++ b/media/base/videobroadcaster.h
@@ -33,6 +33,7 @@
                          public VideoSinkInterface<webrtc::VideoFrame> {
  public:
   VideoBroadcaster();
+  ~VideoBroadcaster() override;
   void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
                        const VideoSinkWants& wants) override;
   void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override;
diff --git a/media/base/videosourcebase.cc b/media/base/videosourcebase.cc
index 299795f..b193b9f 100644
--- a/media/base/videosourcebase.cc
+++ b/media/base/videosourcebase.cc
@@ -17,6 +17,7 @@
 VideoSourceBase::VideoSourceBase() {
   thread_checker_.DetachFromThread();
 }
+VideoSourceBase::~VideoSourceBase() = default;
 
 void VideoSourceBase::AddOrUpdateSink(
     VideoSinkInterface<webrtc::VideoFrame>* sink,
diff --git a/media/base/videosourcebase.h b/media/base/videosourcebase.h
index 35f85bb..6222e61 100644
--- a/media/base/videosourcebase.h
+++ b/media/base/videosourcebase.h
@@ -23,6 +23,7 @@
 class VideoSourceBase : public VideoSourceInterface<webrtc::VideoFrame> {
  public:
   VideoSourceBase();
+  ~VideoSourceBase() override;
   void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
                        const VideoSinkWants& wants) override;
   void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override;
diff --git a/media/engine/videodecodersoftwarefallbackwrapper.cc b/media/engine/videodecodersoftwarefallbackwrapper.cc
index eb4e98f..5c2d3e1 100644
--- a/media/engine/videodecodersoftwarefallbackwrapper.cc
+++ b/media/engine/videodecodersoftwarefallbackwrapper.cc
@@ -31,6 +31,8 @@
           std::string(fallback_decoder_->ImplementationName()) +
           " (fallback from: " + hw_decoder_->ImplementationName() + ")"),
       callback_(nullptr) {}
+VideoDecoderSoftwareFallbackWrapper::~VideoDecoderSoftwareFallbackWrapper() =
+    default;
 
 int32_t VideoDecoderSoftwareFallbackWrapper::InitDecode(
     const VideoCodec* codec_settings,
diff --git a/media/engine/videodecodersoftwarefallbackwrapper.h b/media/engine/videodecodersoftwarefallbackwrapper.h
index f286943..48744f6 100644
--- a/media/engine/videodecodersoftwarefallbackwrapper.h
+++ b/media/engine/videodecodersoftwarefallbackwrapper.h
@@ -26,6 +26,7 @@
   VideoDecoderSoftwareFallbackWrapper(
       std::unique_ptr<VideoDecoder> sw_fallback_decoder,
       std::unique_ptr<VideoDecoder> hw_decoder);
+  ~VideoDecoderSoftwareFallbackWrapper() override;
 
   int32_t InitDecode(const VideoCodec* codec_settings,
                      int32_t number_of_cores) override;
diff --git a/media/engine/videoencodersoftwarefallbackwrapper.cc b/media/engine/videoencodersoftwarefallbackwrapper.cc
index b8f64c0..50bc3f2 100644
--- a/media/engine/videoencodersoftwarefallbackwrapper.cc
+++ b/media/engine/videoencodersoftwarefallbackwrapper.cc
@@ -86,6 +86,8 @@
             1);  // No HW below.
   }
 }
+VideoEncoderSoftwareFallbackWrapper::~VideoEncoderSoftwareFallbackWrapper() =
+    default;
 
 bool VideoEncoderSoftwareFallbackWrapper::InitFallbackEncoder() {
   RTC_LOG(LS_WARNING) << "Encoder falling back to software encoding.";
diff --git a/media/engine/videoencodersoftwarefallbackwrapper.h b/media/engine/videoencodersoftwarefallbackwrapper.h
index a9a349c..c54728e 100644
--- a/media/engine/videoencodersoftwarefallbackwrapper.h
+++ b/media/engine/videoencodersoftwarefallbackwrapper.h
@@ -28,6 +28,7 @@
   VideoEncoderSoftwareFallbackWrapper(
       std::unique_ptr<webrtc::VideoEncoder> sw_encoder,
       std::unique_ptr<webrtc::VideoEncoder> hw_encoder);
+  ~VideoEncoderSoftwareFallbackWrapper() override;
 
   int32_t InitEncode(const VideoCodec* codec_settings,
                      int32_t number_of_cores,
diff --git a/modules/video_coding/codecs/vp8/include/vp8.h b/modules/video_coding/codecs/vp8/include/vp8.h
index 00808e2..57be521 100644
--- a/modules/video_coding/codecs/vp8/include/vp8.h
+++ b/modules/video_coding/codecs/vp8/include/vp8.h
@@ -23,14 +23,14 @@
  public:
   static std::unique_ptr<VP8Encoder> Create();
 
-  virtual ~VP8Encoder() {}
+  ~VP8Encoder() override {}
 };  // end of VP8Encoder class
 
 class VP8Decoder : public VideoDecoder {
  public:
   static std::unique_ptr<VP8Decoder> Create();
 
-  virtual ~VP8Decoder() {}
+  ~VP8Decoder() override {}
 };  // end of VP8Decoder class
 }  // namespace webrtc
 
diff --git a/modules/video_coding/codecs/vp9/include/vp9.h b/modules/video_coding/codecs/vp9/include/vp9.h
index 172e69e..39dc138 100644
--- a/modules/video_coding/codecs/vp9/include/vp9.h
+++ b/modules/video_coding/codecs/vp9/include/vp9.h
@@ -23,7 +23,7 @@
   static bool IsSupported();
   static std::unique_ptr<VP9Encoder> Create();
 
-  virtual ~VP9Encoder() {}
+  ~VP9Encoder() override {}
 };
 
 class VP9Decoder : public VideoDecoder {
@@ -31,7 +31,7 @@
   static bool IsSupported();
   static std::unique_ptr<VP9Decoder> Create();
 
-  virtual ~VP9Decoder() {}
+  ~VP9Decoder() override {}
 };
 }  // namespace webrtc
 
diff --git a/modules/video_coding/utility/moving_average.cc b/modules/video_coding/utility/moving_average.cc
index 8076f93..025899c 100644
--- a/modules/video_coding/utility/moving_average.cc
+++ b/modules/video_coding/utility/moving_average.cc
@@ -15,6 +15,7 @@
 namespace webrtc {
 
 MovingAverage::MovingAverage(size_t s) : sum_history_(s + 1, 0) {}
+MovingAverage::~MovingAverage() = default;
 
 void MovingAverage::AddSample(int sample) {
   count_++;
diff --git a/modules/video_coding/utility/moving_average.h b/modules/video_coding/utility/moving_average.h
index 7df3d3d..0b7a700 100644
--- a/modules/video_coding/utility/moving_average.h
+++ b/modules/video_coding/utility/moving_average.h
@@ -19,6 +19,7 @@
 class MovingAverage {
  public:
   explicit MovingAverage(size_t s);
+  ~MovingAverage();
   void AddSample(int sample);
   rtc::Optional<int> GetAverage() const;
   rtc::Optional<int> GetAverage(size_t num_samples) const;
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 0d4b157..6df1e61 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -75,14 +75,6 @@
   deps = [
     "../../rtc_base:checks",
   ]
-
-  if (is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [
-      "//build/config/clang:extra_warnings",
-      "//build/config/clang:find_bad_constructs",
-    ]
-  }
 }
 
 rtc_source_set("base_jni") {
@@ -112,14 +104,6 @@
     "../../rtc_base:rtc_base_approved",
     "../../system_wrappers:metrics_api",
   ]
-
-  if (is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [
-      "//build/config/clang:extra_warnings",
-      "//build/config/clang:find_bad_constructs",
-    ]
-  }
 }
 
 rtc_static_library("audio_jni") {
@@ -373,14 +357,6 @@
 
   configs += [ ":libjingle_peerconnection_jni_warnings_config" ]
 
-  if (is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [
-      "//build/config/clang:extra_warnings",
-      "//build/config/clang:find_bad_constructs",
-    ]
-  }
-
   # TODO(jschuh): Bug 1348: fix this warning.
   configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
 
@@ -462,14 +438,6 @@
     "src/jni/vp8codec.cc",
   ]
 
-  if (is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [
-      "//build/config/clang:extra_warnings",
-      "//build/config/clang:find_bad_constructs",
-    ]
-  }
-
   deps = [
     ":base_jni",
     ":generated_vp8_jni",
@@ -492,14 +460,6 @@
     "src/jni/vp9codec.cc",
   ]
 
-  if (is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [
-      "//build/config/clang:extra_warnings",
-      "//build/config/clang:find_bad_constructs",
-    ]
-  }
-
   deps = [
     ":base_jni",
     ":generated_vp9_jni",
diff --git a/sdk/android/src/jni/androidmediadecoder.cc b/sdk/android/src/jni/androidmediadecoder.cc
index ca013dd..0a3d81a7 100644
--- a/sdk/android/src/jni/androidmediadecoder.cc
+++ b/sdk/android/src/jni/androidmediadecoder.cc
@@ -61,7 +61,7 @@
  public:
   explicit MediaCodecVideoDecoder(
       JNIEnv* jni, VideoCodecType codecType, jobject render_egl_context);
-  virtual ~MediaCodecVideoDecoder();
+  ~MediaCodecVideoDecoder() override;
 
   int32_t InitDecode(const VideoCodec* codecSettings, int32_t numberOfCores)
       override;
diff --git a/sdk/android/src/jni/androidmediadecoder_jni.h b/sdk/android/src/jni/androidmediadecoder_jni.h
index 1d8cc30..b984dc5 100644
--- a/sdk/android/src/jni/androidmediadecoder_jni.h
+++ b/sdk/android/src/jni/androidmediadecoder_jni.h
@@ -24,7 +24,7 @@
     : public cricket::WebRtcVideoDecoderFactory {
  public:
   MediaCodecVideoDecoderFactory();
-  virtual ~MediaCodecVideoDecoderFactory();
+  ~MediaCodecVideoDecoderFactory() override;
 
   void SetEGLContext(JNIEnv* jni, jobject render_egl_context);
 
diff --git a/sdk/android/src/jni/androidmediaencoder.cc b/sdk/android/src/jni/androidmediaencoder.cc
index b190a65..adc6d50 100644
--- a/sdk/android/src/jni/androidmediaencoder.cc
+++ b/sdk/android/src/jni/androidmediaencoder.cc
@@ -93,7 +93,7 @@
 // this is the encoder queue from ViE encoder.
 class MediaCodecVideoEncoder : public VideoEncoder {
  public:
-  virtual ~MediaCodecVideoEncoder();
+  ~MediaCodecVideoEncoder() override;
   MediaCodecVideoEncoder(JNIEnv* jni,
                          const cricket::VideoCodec& codec,
                          jobject egl_context);
diff --git a/sdk/android/src/jni/androidmediaencoder_jni.h b/sdk/android/src/jni/androidmediaencoder_jni.h
index bd9fc30..4fd06bb 100644
--- a/sdk/android/src/jni/androidmediaencoder_jni.h
+++ b/sdk/android/src/jni/androidmediaencoder_jni.h
@@ -24,7 +24,7 @@
     : public cricket::WebRtcVideoEncoderFactory {
  public:
   MediaCodecVideoEncoderFactory();
-  virtual ~MediaCodecVideoEncoderFactory();
+  ~MediaCodecVideoEncoderFactory() override;
 
   void SetEGLContext(JNIEnv* jni, jobject egl_context);
 
diff --git a/sdk/android/src/jni/androidnetworkmonitor.cc b/sdk/android/src/jni/androidnetworkmonitor.cc
index 9555eff..84a545a 100644
--- a/sdk/android/src/jni/androidnetworkmonitor.cc
+++ b/sdk/android/src/jni/androidnetworkmonitor.cc
@@ -132,8 +132,18 @@
 
 NetworkInformation::NetworkInformation() = default;
 
+NetworkInformation::NetworkInformation(const NetworkInformation&) = default;
+
+NetworkInformation::NetworkInformation(NetworkInformation&&) = default;
+
 NetworkInformation::~NetworkInformation() = default;
 
+NetworkInformation& NetworkInformation::operator=(const NetworkInformation&) =
+    default;
+
+NetworkInformation& NetworkInformation::operator=(NetworkInformation&&) =
+    default;
+
 std::string NetworkInformation::ToString() const {
   std::stringstream ss;
   ss << "NetInfo[name " << interface_name << "; handle " << handle << "; type "
diff --git a/sdk/android/src/jni/androidnetworkmonitor.h b/sdk/android/src/jni/androidnetworkmonitor.h
index 9e45d2b..58b6686 100644
--- a/sdk/android/src/jni/androidnetworkmonitor.h
+++ b/sdk/android/src/jni/androidnetworkmonitor.h
@@ -47,7 +47,11 @@
   std::vector<rtc::IPAddress> ip_addresses;
 
   NetworkInformation();
+  NetworkInformation(const NetworkInformation&);
+  NetworkInformation(NetworkInformation&&);
   ~NetworkInformation();
+  NetworkInformation& operator=(const NetworkInformation&);
+  NetworkInformation& operator=(NetworkInformation&&);
 
   std::string ToString() const;
 };
diff --git a/sdk/android/src/jni/androidvideotracksource.cc b/sdk/android/src/jni/androidvideotracksource.cc
index 7df2cb5..4733cdf 100644
--- a/sdk/android/src/jni/androidvideotracksource.cc
+++ b/sdk/android/src/jni/androidvideotracksource.cc
@@ -31,7 +31,7 @@
 }
 
 AndroidVideoTrackSource* AndroidVideoTrackSourceFromJavaProxy(jlong j_proxy) {
-  auto proxy_source = reinterpret_cast<VideoTrackSourceProxy*>(j_proxy);
+  auto* proxy_source = reinterpret_cast<VideoTrackSourceProxy*>(j_proxy);
   return reinterpret_cast<AndroidVideoTrackSource*>(proxy_source->internal());
 }
 
@@ -51,6 +51,15 @@
   RTC_LOG(LS_INFO) << "AndroidVideoTrackSource ctor";
   camera_thread_checker_.DetachFromThread();
 }
+AndroidVideoTrackSource::~AndroidVideoTrackSource() = default;
+
+bool AndroidVideoTrackSource::is_screencast() const {
+  return is_screencast_;
+}
+
+rtc::Optional<bool> AndroidVideoTrackSource::needs_denoising() const {
+  return false;
+}
 
 void AndroidVideoTrackSource::SetState(SourceState state) {
   if (rtc::Thread::Current() != signaling_thread_) {
@@ -66,6 +75,14 @@
   }
 }
 
+AndroidVideoTrackSource::SourceState AndroidVideoTrackSource::state() const {
+  return state_;
+}
+
+bool AndroidVideoTrackSource::remote() const {
+  return false;
+}
+
 void AndroidVideoTrackSource::OnByteBufferFrameCaptured(const void* frame_data,
                                                         int length,
                                                         int width,
@@ -213,6 +230,11 @@
   video_adapter()->OnOutputFormatRequest(format);
 }
 
+rtc::scoped_refptr<SurfaceTextureHelper>
+AndroidVideoTrackSource::surface_texture_helper() {
+  return surface_texture_helper_;
+}
+
 static void JNI_AndroidVideoTrackSourceObserver_OnByteBufferFrameCaptured(
     JNIEnv* jni,
     const JavaParamRef<jclass>&,
diff --git a/sdk/android/src/jni/androidvideotracksource.h b/sdk/android/src/jni/androidvideotracksource.h
index c40203d..fba5e84 100644
--- a/sdk/android/src/jni/androidvideotracksource.h
+++ b/sdk/android/src/jni/androidvideotracksource.h
@@ -32,20 +32,21 @@
                           JNIEnv* jni,
                           const JavaRef<jobject>& j_surface_texture_helper,
                           bool is_screencast = false);
+  ~AndroidVideoTrackSource() override;
 
-  bool is_screencast() const override { return is_screencast_; }
+  bool is_screencast() const override;
 
   // Indicates that the encoder should denoise video before encoding it.
   // If it is not set, the default configuration is used which is different
   // depending on video codec.
-  rtc::Optional<bool> needs_denoising() const override { return false; }
+  rtc::Optional<bool> needs_denoising() const override;
 
   // Called by the native capture observer
   void SetState(SourceState state);
 
-  SourceState state() const override { return state_; }
+  SourceState state() const override;
 
-  bool remote() const override { return false; }
+  bool remote() const override;
 
   void OnByteBufferFrameCaptured(const void* frame_data,
                                  int length,
@@ -69,9 +70,7 @@
 
   void OnOutputFormatRequest(int width, int height, int fps);
 
-  rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper() {
-    return surface_texture_helper_;
-  }
+  rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper();
 
  private:
   rtc::Thread* signaling_thread_;
diff --git a/sdk/android/src/jni/video_renderer.cc b/sdk/android/src/jni/video_renderer.cc
index 6f7650a..02ea1b3 100644
--- a/sdk/android/src/jni/video_renderer.cc
+++ b/sdk/android/src/jni/video_renderer.cc
@@ -26,7 +26,7 @@
   JavaVideoRendererWrapper(JNIEnv* jni, const JavaRef<jobject>& j_callbacks)
       : j_callbacks_(jni, j_callbacks) {}
 
-  virtual ~JavaVideoRendererWrapper() {}
+  ~JavaVideoRendererWrapper() override {}
 
   void OnFrame(const VideoFrame& video_frame) override {
     JNIEnv* env = AttachCurrentThreadIfNeeded();
diff --git a/sdk/android/src/jni/videodecoderfactorywrapper.cc b/sdk/android/src/jni/videodecoderfactorywrapper.cc
index 47c1362..be717f9 100644
--- a/sdk/android/src/jni/videodecoderfactorywrapper.cc
+++ b/sdk/android/src/jni/videodecoderfactorywrapper.cc
@@ -25,6 +25,7 @@
     JNIEnv* jni,
     const JavaRef<jobject>& decoder_factory)
     : decoder_factory_(jni, decoder_factory) {}
+VideoDecoderFactoryWrapper::~VideoDecoderFactoryWrapper() = default;
 
 std::unique_ptr<VideoDecoder> VideoDecoderFactoryWrapper::CreateVideoDecoder(
     const SdpVideoFormat& format) {
diff --git a/sdk/android/src/jni/videodecoderfactorywrapper.h b/sdk/android/src/jni/videodecoderfactorywrapper.h
index 49ac849..a1716b1 100644
--- a/sdk/android/src/jni/videodecoderfactorywrapper.h
+++ b/sdk/android/src/jni/videodecoderfactorywrapper.h
@@ -25,6 +25,7 @@
  public:
   VideoDecoderFactoryWrapper(JNIEnv* jni,
                              const JavaRef<jobject>& decoder_factory);
+  ~VideoDecoderFactoryWrapper() override;
 
   std::vector<SdpVideoFormat> GetSupportedFormats() const override;
   std::unique_ptr<VideoDecoder> CreateVideoDecoder(
diff --git a/sdk/android/src/jni/videodecoderwrapper.cc b/sdk/android/src/jni/videodecoderwrapper.cc
index 6f34dd9..ec27b00 100644
--- a/sdk/android/src/jni/videodecoderwrapper.cc
+++ b/sdk/android/src/jni/videodecoderwrapper.cc
@@ -50,6 +50,8 @@
   decoder_thread_checker_.DetachFromThread();
 }
 
+VideoDecoderWrapper::~VideoDecoderWrapper() = default;
+
 int32_t VideoDecoderWrapper::InitDecode(const VideoCodec* codec_settings,
                                         int32_t number_of_cores) {
   RTC_DCHECK_RUN_ON(&decoder_thread_checker_);
@@ -194,6 +196,11 @@
                      decoder_qp ? decoder_qp : frame_extra_info.qp);
 }
 
+VideoDecoderWrapper::FrameExtraInfo::FrameExtraInfo() = default;
+VideoDecoderWrapper::FrameExtraInfo::FrameExtraInfo(const FrameExtraInfo&) =
+    default;
+VideoDecoderWrapper::FrameExtraInfo::~FrameExtraInfo() = default;
+
 int32_t VideoDecoderWrapper::HandleReturnCode(JNIEnv* jni,
                                               const JavaRef<jobject>& j_value,
                                               const char* method_name) {
diff --git a/sdk/android/src/jni/videodecoderwrapper.h b/sdk/android/src/jni/videodecoderwrapper.h
index c3cda74..6e5b5c0 100644
--- a/sdk/android/src/jni/videodecoderwrapper.h
+++ b/sdk/android/src/jni/videodecoderwrapper.h
@@ -28,6 +28,7 @@
 class VideoDecoderWrapper : public VideoDecoder {
  public:
   VideoDecoderWrapper(JNIEnv* jni, const JavaRef<jobject>& decoder);
+  ~VideoDecoderWrapper() override;
 
   int32_t InitDecode(const VideoCodec* codec_settings,
                      int32_t number_of_cores) override;
@@ -67,6 +68,10 @@
     uint32_t timestamp_rtp;
     int64_t timestamp_ntp;
     rtc::Optional<uint8_t> qp;
+
+    FrameExtraInfo();
+    FrameExtraInfo(const FrameExtraInfo&);
+    ~FrameExtraInfo();
   };
 
   int32_t InitDecodeInternal(JNIEnv* jni) RTC_RUN_ON(decoder_thread_checker_);
diff --git a/sdk/android/src/jni/videoencoderfactorywrapper.cc b/sdk/android/src/jni/videoencoderfactorywrapper.cc
index be29068..2c3d111 100644
--- a/sdk/android/src/jni/videoencoderfactorywrapper.cc
+++ b/sdk/android/src/jni/videoencoderfactorywrapper.cc
@@ -31,6 +31,7 @@
   supported_formats_ = JavaToNativeVector<SdpVideoFormat>(
       jni, j_supported_codecs, &VideoCodecInfoToSdpVideoFormat);
 }
+VideoEncoderFactoryWrapper::~VideoEncoderFactoryWrapper() = default;
 
 std::unique_ptr<VideoEncoder> VideoEncoderFactoryWrapper::CreateVideoEncoder(
     const SdpVideoFormat& format) {
@@ -44,6 +45,11 @@
   return JavaToNativeVideoEncoder(jni, encoder);
 }
 
+std::vector<SdpVideoFormat> VideoEncoderFactoryWrapper::GetSupportedFormats()
+    const {
+  return supported_formats_;
+}
+
 VideoEncoderFactory::CodecInfo VideoEncoderFactoryWrapper::QueryVideoEncoder(
     const SdpVideoFormat& format) const {
   JNIEnv* jni = AttachCurrentThreadIfNeeded();
diff --git a/sdk/android/src/jni/videoencoderfactorywrapper.h b/sdk/android/src/jni/videoencoderfactorywrapper.h
index af9557c..2c2dadc 100644
--- a/sdk/android/src/jni/videoencoderfactorywrapper.h
+++ b/sdk/android/src/jni/videoencoderfactorywrapper.h
@@ -27,14 +27,13 @@
  public:
   VideoEncoderFactoryWrapper(JNIEnv* jni,
                              const JavaRef<jobject>& encoder_factory);
+  ~VideoEncoderFactoryWrapper() override;
 
   std::unique_ptr<VideoEncoder> CreateVideoEncoder(
       const SdpVideoFormat& format) override;
 
   // Returns a list of supported codecs in order of preference.
-  std::vector<SdpVideoFormat> GetSupportedFormats() const override {
-    return supported_formats_;
-  }
+  std::vector<SdpVideoFormat> GetSupportedFormats() const override;
 
   CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;
 
diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc
index 63dd363..ae2f6ad 100644
--- a/sdk/android/src/jni/videoencoderwrapper.cc
+++ b/sdk/android/src/jni/videoencoderwrapper.cc
@@ -43,6 +43,7 @@
   picture_id_ = random.Rand<uint16_t>() & 0x7FFF;
   tl0_pic_idx_ = random.Rand<uint8_t>();
 }
+VideoEncoderWrapper::~VideoEncoderWrapper() = default;
 
 int32_t VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings,
                                         int32_t number_of_cores,
@@ -207,6 +208,10 @@
   }
 }
 
+bool VideoEncoderWrapper::SupportsNativeHandle() const {
+  return true;
+}
+
 const char* VideoEncoderWrapper::ImplementationName() const {
   return implementation_name_.c_str();
 }
diff --git a/sdk/android/src/jni/videoencoderwrapper.h b/sdk/android/src/jni/videoencoderwrapper.h
index fe553e9..f25e83d 100644
--- a/sdk/android/src/jni/videoencoderwrapper.h
+++ b/sdk/android/src/jni/videoencoderwrapper.h
@@ -30,6 +30,7 @@
 class VideoEncoderWrapper : public VideoEncoder {
  public:
   VideoEncoderWrapper(JNIEnv* jni, const JavaRef<jobject>& j_encoder);
+  ~VideoEncoderWrapper() override;
 
   int32_t InitEncode(const VideoCodec* codec_settings,
                      int32_t number_of_cores,
@@ -51,7 +52,7 @@
 
   ScalingSettings GetScalingSettings() const override;
 
-  bool SupportsNativeHandle() const override { return true; }
+  bool SupportsNativeHandle() const override;
 
   // Should only be called by JNI.
   void OnEncodedFrame(JNIEnv* jni,
diff --git a/sdk/android/src/jni/videoframe.cc b/sdk/android/src/jni/videoframe.cc
index 92e4a66..e1fb431 100644
--- a/sdk/android/src/jni/videoframe.cc
+++ b/sdk/android/src/jni/videoframe.cc
@@ -49,7 +49,7 @@
                          int width,
                          int height,
                          const JavaRef<jobject>& j_video_frame_buffer);
-  ~AndroidVideoI420Buffer();
+  ~AndroidVideoI420Buffer() override;
 
  private:
   const uint8_t* DataY() const override { return data_y_; }