diff --git a/modules/video_coding/codec_timer.cc b/modules/video_coding/codec_timer.cc
index 0d4099b..b051957 100644
--- a/modules/video_coding/codec_timer.cc
+++ b/modules/video_coding/codec_timer.cc
@@ -18,7 +18,7 @@
 
 // The first kIgnoredSampleCount samples will be ignored.
 const int kIgnoredSampleCount = 5;
-// Return the |kPercentile| value in RequiredDecodeTimeMs().
+// Return the `kPercentile` value in RequiredDecodeTimeMs().
 const float kPercentile = 0.95f;
 // The window size in ms.
 const int64_t kTimeLimitMs = 10000;
@@ -30,7 +30,7 @@
 VCMCodecTimer::~VCMCodecTimer() = default;
 
 void VCMCodecTimer::AddTiming(int64_t decode_time_ms, int64_t now_ms) {
-  // Ignore the first |kIgnoredSampleCount| samples.
+  // Ignore the first `kIgnoredSampleCount` samples.
   if (ignored_sample_count_ < kIgnoredSampleCount) {
     ++ignored_sample_count_;
     return;
diff --git a/modules/video_coding/codec_timer.h b/modules/video_coding/codec_timer.h
index 412e4cc..2948b82 100644
--- a/modules/video_coding/codec_timer.h
+++ b/modules/video_coding/codec_timer.h
@@ -40,7 +40,7 @@
   int ignored_sample_count_;
   // Queue with history of latest decode time values.
   std::queue<Sample> history_;
-  // |filter_| contains the same values as |history_|, but in a data structure
+  // `filter_` contains the same values as `history_`, but in a data structure
   // that allows efficient retrieval of the percentile value.
   PercentileFilter<int64_t> filter_;
 };
diff --git a/modules/video_coding/codecs/h264/h264_decoder_impl.cc b/modules/video_coding/codecs/h264/h264_decoder_impl.cc
index 83f9a77..e696987 100644
--- a/modules/video_coding/codecs/h264/h264_decoder_impl.cc
+++ b/modules/video_coding/codecs/h264/h264_decoder_impl.cc
@@ -69,9 +69,9 @@
 int H264DecoderImpl::AVGetBuffer2(AVCodecContext* context,
                                   AVFrame* av_frame,
                                   int flags) {
-  // Set in |InitDecode|.
+  // Set in `InitDecode`.
   H264DecoderImpl* decoder = static_cast<H264DecoderImpl*>(context->opaque);
-  // DCHECK values set in |InitDecode|.
+  // DCHECK values set in `InitDecode`.
   RTC_DCHECK(decoder);
   // Necessary capability to be allowed to provide our own buffers.
   RTC_DCHECK(context->codec->capabilities | AV_CODEC_CAP_DR1);
@@ -85,12 +85,12 @@
   // |context->coded_width| due to reordering.
   int width = av_frame->width;
   int height = av_frame->height;
-  // See |lowres|, if used the decoder scales the image by 1/2^(lowres). This
+  // See `lowres`, if used the decoder scales the image by 1/2^(lowres). This
   // has implications on which resolutions are valid, but we don't use it.
   RTC_CHECK_EQ(context->lowres, 0);
-  // Adjust the |width| and |height| to values acceptable by the decoder.
-  // Without this, FFmpeg may overflow the buffer. If modified, |width| and/or
-  // |height| are larger than the actual image and the image has to be cropped
+  // Adjust the `width` and `height` to values acceptable by the decoder.
+  // Without this, FFmpeg may overflow the buffer. If modified, `width` and/or
+  // `height` are larger than the actual image and the image has to be cropped
   // (top-left corner) after decoding to avoid visible borders to the right and
   // bottom of the actual image.
   avcodec_align_dimensions(context, &width, &height);
@@ -105,8 +105,8 @@
     return ret;
   }
 
-  // The video frame is stored in |frame_buffer|. |av_frame| is FFmpeg's version
-  // of a video frame and will be set up to reference |frame_buffer|'s data.
+  // The video frame is stored in `frame_buffer`. `av_frame` is FFmpeg's version
+  // of a video frame and will be set up to reference `frame_buffer`'s data.
 
   // FFmpeg expects the initial allocation to be zero-initialized according to
   // http://crbug.com/390941. Our pool is set up to zero-initialize new buffers.
@@ -125,7 +125,7 @@
   av_frame->format = context->pix_fmt;
   av_frame->reordered_opaque = context->reordered_opaque;
 
-  // Set |av_frame| members as required by FFmpeg.
+  // Set `av_frame` members as required by FFmpeg.
   av_frame->data[kYPlaneIndex] = frame_buffer->MutableDataY();
   av_frame->linesize[kYPlaneIndex] = frame_buffer->StrideY();
   av_frame->data[kUPlaneIndex] = frame_buffer->MutableDataU();
@@ -152,8 +152,8 @@
 }
 
 void H264DecoderImpl::AVFreeBuffer2(void* opaque, uint8_t* data) {
-  // The buffer pool recycles the buffer used by |video_frame| when there are no
-  // more references to it. |video_frame| is a thin buffer holder and is not
+  // The buffer pool recycles the buffer used by `video_frame` when there are no
+  // more references to it. `video_frame` is a thin buffer holder and is not
   // recycled.
   VideoFrame* video_frame = static_cast<VideoFrame*>(opaque);
   delete video_frame;
@@ -208,8 +208,8 @@
 
   // Function used by FFmpeg to get buffers to store decoded frames in.
   av_context_->get_buffer2 = AVGetBuffer2;
-  // |get_buffer2| is called with the context, there |opaque| can be used to get
-  // a pointer |this|.
+  // `get_buffer2` is called with the context, there `opaque` can be used to get
+  // a pointer `this`.
   av_context_->opaque = this;
 
   const AVCodec* codec = avcodec_find_decoder(av_context_->codec_id);
@@ -311,7 +311,7 @@
   h264_bitstream_parser_.ParseBitstream(input_image);
   absl::optional<int> qp = h264_bitstream_parser_.GetLastSliceQp();
 
-  // Obtain the |video_frame| containing the decoded image.
+  // Obtain the `video_frame` containing the decoded image.
   VideoFrame* input_frame =
       static_cast<VideoFrame*>(av_buffer_get_opaque(av_frame_->buf[0]));
   RTC_DCHECK(input_frame);
@@ -377,7 +377,7 @@
   // interface to pass a VideoFrameBuffer instead of a VideoFrame?
   decoded_image_callback_->Decoded(decoded_frame, absl::nullopt, qp);
 
-  // Stop referencing it, possibly freeing |input_frame|.
+  // Stop referencing it, possibly freeing `input_frame`.
   av_frame_unref(av_frame_.get());
   input_frame = nullptr;
 
diff --git a/modules/video_coding/codecs/h264/h264_decoder_impl.h b/modules/video_coding/codecs/h264/h264_decoder_impl.h
index bca482d8..6ba4eb7 100644
--- a/modules/video_coding/codecs/h264/h264_decoder_impl.h
+++ b/modules/video_coding/codecs/h264/h264_decoder_impl.h
@@ -60,8 +60,8 @@
   H264DecoderImpl();
   ~H264DecoderImpl() override;
 
-  // If |codec_settings| is NULL it is ignored. If it is not NULL,
-  // |codec_settings->codecType| must be |kVideoCodecH264|.
+  // If `codec_settings` is NULL it is ignored. If it is not NULL,
+  // |codec_settings->codecType| must be `kVideoCodecH264`.
   int32_t InitDecode(const VideoCodec* codec_settings,
                      int32_t number_of_cores) override;
   int32_t Release() override;
@@ -69,7 +69,7 @@
   int32_t RegisterDecodeCompleteCallback(
       DecodedImageCallback* callback) override;
 
-  // |missing_frames|, |fragmentation| and |render_time_ms| are ignored.
+  // `missing_frames`, `fragmentation` and `render_time_ms` are ignored.
   int32_t Decode(const EncodedImage& input_image,
                  bool /*missing_frames*/,
                  int64_t render_time_ms = -1) override;
@@ -78,12 +78,12 @@
 
  private:
   // Called by FFmpeg when it needs a frame buffer to store decoded frames in.
-  // The |VideoFrame| returned by FFmpeg at |Decode| originate from here. Their
-  // buffers are reference counted and freed by FFmpeg using |AVFreeBuffer2|.
+  // The `VideoFrame` returned by FFmpeg at `Decode` originate from here. Their
+  // buffers are reference counted and freed by FFmpeg using `AVFreeBuffer2`.
   static int AVGetBuffer2(AVCodecContext* context,
                           AVFrame* av_frame,
                           int flags);
-  // Called by FFmpeg when it is done with a video frame, see |AVGetBuffer2|.
+  // Called by FFmpeg when it is done with a video frame, see `AVGetBuffer2`.
   static void AVFreeBuffer2(void* opaque, uint8_t* data);
 
   bool IsInitialized() const;
@@ -92,7 +92,7 @@
   void ReportInit();
   void ReportError();
 
-  // Used by ffmpeg via |AVGetBuffer2()| to allocate I420 images.
+  // Used by ffmpeg via `AVGetBuffer2()` to allocate I420 images.
   VideoFrameBufferPool ffmpeg_buffer_pool_;
   // Used to allocate NV12 images if NV12 output is preferred.
   VideoFrameBufferPool output_buffer_pool_;
diff --git a/modules/video_coding/codecs/h264/h264_encoder_impl.cc b/modules/video_coding/codecs/h264/h264_encoder_impl.cc
index 879e95b..4e78d1e 100644
--- a/modules/video_coding/codecs/h264/h264_encoder_impl.cc
+++ b/modules/video_coding/codecs/h264/h264_encoder_impl.cc
@@ -88,11 +88,11 @@
 }  // namespace
 
 // Helper method used by H264EncoderImpl::Encode.
-// Copies the encoded bytes from |info| to |encoded_image|. The
+// Copies the encoded bytes from `info` to `encoded_image`. The
 // |encoded_image->_buffer| may be deleted and reallocated if a bigger buffer is
 // required.
 //
-// After OpenH264 encoding, the encoded bytes are stored in |info| spread out
+// After OpenH264 encoding, the encoded bytes are stored in `info` spread out
 // over a number of layers and "NAL units". Each NAL unit is a fragment starting
 // with the four-byte start code {0,0,0,1}. All of this data (including the
 // start codes) is copied to the |encoded_image->_buffer|.
@@ -104,7 +104,7 @@
     const SLayerBSInfo& layerInfo = info->sLayerInfo[layer];
     for (int nal = 0; nal < layerInfo.iNalCount; ++nal, ++fragments_count) {
       RTC_CHECK_GE(layerInfo.pNalLengthInByte[nal], 0);
-      // Ensure |required_capacity| will not overflow.
+      // Ensure `required_capacity` will not overflow.
       RTC_CHECK_LE(layerInfo.pNalLengthInByte[nal],
                    std::numeric_limits<size_t>::max() - required_capacity);
       required_capacity += layerInfo.pNalLengthInByte[nal];
@@ -124,8 +124,8 @@
     // Iterate NAL units making up this layer, noting fragments.
     size_t layer_len = 0;
     for (int nal = 0; nal < layerInfo.iNalCount; ++nal, ++frag) {
-      // Because the sum of all layer lengths, |required_capacity|, fits in a
-      // |size_t|, we know that any indices in-between will not overflow.
+      // Because the sum of all layer lengths, `required_capacity`, fits in a
+      // `size_t`, we know that any indices in-between will not overflow.
       RTC_DCHECK_GE(layerInfo.pNalLengthInByte[nal], 4);
       RTC_DCHECK_EQ(layerInfo.pBsBuf[layer_len + 0], start_code[0]);
       RTC_DCHECK_EQ(layerInfo.pBsBuf[layer_len + 1], start_code[1]);
@@ -459,7 +459,7 @@
     }
     if (send_key_frame) {
       // API doc says ForceIntraFrame(false) does nothing, but calling this
-      // function forces a key frame regardless of the |bIDR| argument's value.
+      // function forces a key frame regardless of the `bIDR` argument's value.
       // (If every frame is a key frame we get lag/delays.)
       encoders_[i]->ForceIntraFrame(true);
       configurations_[i].key_frame_request = false;
@@ -485,7 +485,7 @@
     encoded_images_[i].SetSpatialIndex(configurations_[i].simulcast_idx);
 
     // Split encoded image up into fragments. This also updates
-    // |encoded_image_|.
+    // `encoded_image_`.
     RtpFragmentize(&encoded_images_[i], &info);
 
     // Encoder can skip frames to save bandwidth in which case
@@ -552,8 +552,8 @@
   // The following parameters are extension parameters (they're in SEncParamExt,
   // not in SEncParamBase).
   encoder_params.bEnableFrameSkip = configurations_[i].frame_dropping_on;
-  // |uiIntraPeriod|    - multiple of GOP size
-  // |keyFrameInterval| - number of frames
+  // `uiIntraPeriod`    - multiple of GOP size
+  // `keyFrameInterval` - number of frames
   encoder_params.uiIntraPeriod = configurations_[i].key_frame_interval;
   // Reuse SPS id if possible. This helps to avoid reset of chromium HW decoder
   // on each key-frame.
diff --git a/modules/video_coding/codecs/h264/h264_encoder_impl.h b/modules/video_coding/codecs/h264/h264_encoder_impl.h
index 2a78b14..b96de10 100644
--- a/modules/video_coding/codecs/h264/h264_encoder_impl.h
+++ b/modules/video_coding/codecs/h264/h264_encoder_impl.h
@@ -58,7 +58,7 @@
   ~H264EncoderImpl() override;
 
   // |settings.max_payload_size| is ignored.
-  // The following members of |codec_settings| are used. The rest are ignored.
+  // The following members of `codec_settings` are used. The rest are ignored.
   // - codecType (must be kVideoCodecH264)
   // - targetBitrate
   // - maxFramerate
diff --git a/modules/video_coding/codecs/h264/include/h264.h b/modules/video_coding/codecs/h264/include/h264.h
index 1f8f796..bd859d6 100644
--- a/modules/video_coding/codecs/h264/include/h264.h
+++ b/modules/video_coding/codecs/h264/include/h264.h
@@ -32,7 +32,7 @@
                  const std::string& packetization_mode);
 
 // Set to disable the H.264 encoder/decoder implementations that are provided if
-// |rtc_use_h264| build flag is true (if false, this function does nothing).
+// `rtc_use_h264` build flag is true (if false, this function does nothing).
 // This function should only be called before or during WebRTC initialization
 // and is not thread-safe.
 RTC_EXPORT void DisableRtcUseH264();
diff --git a/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h b/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
index 8976250..856d9ec 100644
--- a/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
+++ b/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
@@ -24,7 +24,7 @@
 
 class MultiplexDecoderAdapter : public VideoDecoder {
  public:
-  // |factory| is not owned and expected to outlive this class.
+  // `factory` is not owned and expected to outlive this class.
   MultiplexDecoderAdapter(VideoDecoderFactory* factory,
                           const SdpVideoFormat& associated_format,
                           bool supports_augmenting_data = false);
diff --git a/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h b/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h
index c43109e..2e5aad8 100644
--- a/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h
+++ b/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h
@@ -33,7 +33,7 @@
 
 class MultiplexEncoderAdapter : public VideoEncoder {
  public:
-  // |factory| is not owned and expected to outlive this class.
+  // `factory` is not owned and expected to outlive this class.
   MultiplexEncoderAdapter(VideoEncoderFactory* factory,
                           const SdpVideoFormat& associated_format,
                           bool supports_augmenting_data = false);
diff --git a/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.h b/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.h
index 9f9f39c..299a015 100644
--- a/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.h
+++ b/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.h
@@ -25,11 +25,11 @@
 // bitstream data.
 struct MultiplexImageHeader {
   // The number of frame components making up the complete picture data.
-  // For example, |frame_count| = 2 for the case of YUV frame with Alpha frame.
+  // For example, `frame_count` = 2 for the case of YUV frame with Alpha frame.
   uint8_t component_count;
 
   // The increasing image ID given by the encoder. For different components
-  // of a single picture, they have the same |picture_index|.
+  // of a single picture, they have the same `picture_index`.
   uint16_t image_index;
 
   // The location of the first MultiplexImageComponentHeader in the bitstream,
@@ -111,7 +111,7 @@
   // Note: It is caller responsibility to release the buffer of the result.
   static EncodedImage PackAndRelease(const MultiplexImage& image);
 
-  // Note: The image components just share the memory with |combined_image|.
+  // Note: The image components just share the memory with `combined_image`.
   static MultiplexImage Unpack(const EncodedImage& combined_image);
 };
 
diff --git a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
index db525b8..10f4517 100644
--- a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
+++ b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc
@@ -22,7 +22,7 @@
 
 namespace webrtc {
 
-// Callback wrapper that helps distinguish returned results from |encoders_|
+// Callback wrapper that helps distinguish returned results from `encoders_`
 // instances.
 class MultiplexEncoderAdapter::AdapterEncodedImageCallback
     : public webrtc::EncodedImageCallback {
@@ -158,7 +158,7 @@
   }
 
   // The input image is forwarded as-is, unless it is a native buffer and
-  // |supports_augmented_data_| is true in which case we need to map it in order
+  // `supports_augmented_data_` is true in which case we need to map it in order
   // to access the underlying AugmentedVideoFrameBuffer.
   VideoFrame forwarded_image = input_image;
   if (supports_augmented_data_ &&
@@ -216,7 +216,7 @@
       encoders_[kYUVStream]->Encode(forwarded_image, &adjusted_frame_types);
 
   // If we do not receive an alpha frame, we send a single frame for this
-  // |picture_index_|. The receiver will receive |frame_count| as 1 which
+  // `picture_index_`. The receiver will receive `frame_count` as 1 which
   // specifies this case.
   if (rv || !has_alpha)
     return rv;
@@ -259,7 +259,7 @@
   bitrate_allocation.SetBitrate(
       0, 0, parameters.bitrate.GetBitrate(0, 0) - augmenting_data_size_);
   for (auto& encoder : encoders_) {
-    // TODO(emircan): |framerate| is used to calculate duration in encoder
+    // TODO(emircan): `framerate` is used to calculate duration in encoder
     // instances. We report the total frame rate to keep real time for now.
     // Remove this after refactoring duration logic.
     encoder->SetRates(RateControlParameters(
diff --git a/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc b/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
index 7ecb24a..b64b3a0 100644
--- a/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
+++ b/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
@@ -201,7 +201,7 @@
 };
 
 // TODO(emircan): Currently VideoCodecUnitTest tests do a complete setup
-// step that goes beyond constructing |decoder_|. Simplify these tests to do
+// step that goes beyond constructing `decoder_`. Simplify these tests to do
 // less.
 TEST_P(TestMultiplexAdapter, ConstructAndDestructDecoder) {
   EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release());
diff --git a/modules/video_coding/codecs/test/video_codec_unittest.h b/modules/video_coding/codecs/test/video_codec_unittest.h
index adab355..13bcbf0 100644
--- a/modules/video_coding/codecs/test/video_codec_unittest.h
+++ b/modules/video_coding/codecs/test/video_codec_unittest.h
@@ -83,7 +83,7 @@
                            CodecSpecificInfo* codec_specific_info);
 
   // Helper methods for waiting for multiple encoded frames. Caller must
-  // define how many frames are to be waited for via |num_frames| before calling
+  // define how many frames are to be waited for via `num_frames` before calling
   // Encode(). Then, they can expect to retrive them via WaitForEncodedFrames().
   void SetWaitForEncodedFramesThreshold(size_t num_frames);
   bool WaitForEncodedFrames(
diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
index dee5b1b..8be6e8c 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
@@ -168,7 +168,7 @@
   VideoCodecType codec_type = PayloadStringToCodecType(codec_name);
   webrtc::test::CodecSettings(codec_type, &codec_settings);
 
-  // TODO(brandtr): Move the setting of |width| and |height| to the tests, and
+  // TODO(brandtr): Move the setting of `width` and `height` to the tests, and
   // DCHECK that they are set before initializing the codec instead.
   codec_settings.width = static_cast<uint16_t>(width);
   codec_settings.height = static_cast<uint16_t>(height);
diff --git a/modules/video_coding/codecs/test/videocodec_test_stats_impl.cc b/modules/video_coding/codecs/test/videocodec_test_stats_impl.cc
index aa0ff0b..914f639 100644
--- a/modules/video_coding/codecs/test/videocodec_test_stats_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_stats_impl.cc
@@ -202,7 +202,7 @@
   const size_t target_bitrate_kbps =
       CalcLayerTargetBitrateKbps(first_frame_num, last_frame_num, spatial_idx,
                                  temporal_idx, aggregate_independent_layers);
-  RTC_CHECK_GT(target_bitrate_kbps, 0);  // We divide by |target_bitrate_kbps|.
+  RTC_CHECK_GT(target_bitrate_kbps, 0);  // We divide by `target_bitrate_kbps`.
 
   for (size_t frame_num = first_frame_num; frame_num <= last_frame_num;
        ++frame_num) {
diff --git a/modules/video_coding/codecs/test/videocodec_test_stats_impl.h b/modules/video_coding/codecs/test/videocodec_test_stats_impl.h
index f68513a..61850d3 100644
--- a/modules/video_coding/codecs/test/videocodec_test_stats_impl.h
+++ b/modules/video_coding/codecs/test/videocodec_test_stats_impl.h
@@ -31,7 +31,7 @@
   // Creates a FrameStatistics for the next frame to be processed.
   void AddFrame(const FrameStatistics& frame_stat);
 
-  // Returns the FrameStatistics corresponding to |frame_number| or |timestamp|.
+  // Returns the FrameStatistics corresponding to `frame_number` or `timestamp`.
   FrameStatistics* GetFrame(size_t frame_number, size_t spatial_idx);
   FrameStatistics* GetFrameWithTimestamp(size_t timestamp, size_t spatial_idx);
 
diff --git a/modules/video_coding/codecs/test/videoprocessor.cc b/modules/video_coding/codecs/test/videoprocessor.cc
index 23eadfc..473be01 100644
--- a/modules/video_coding/codecs/test/videoprocessor.cc
+++ b/modules/video_coding/codecs/test/videoprocessor.cc
@@ -591,7 +591,7 @@
 
   // Erase all buffered input frames that we have moved past for all
   // simulcast/spatial layers. Never buffer more than
-  // |kMaxBufferedInputFrames| frames, to protect against long runs of
+  // `kMaxBufferedInputFrames` frames, to protect against long runs of
   // consecutive frame drops for a particular layer.
   const auto min_last_decoded_frame_num = std::min_element(
       last_decoded_frame_num_.cbegin(), last_decoded_frame_num_.cend());
diff --git a/modules/video_coding/codecs/test/videoprocessor.h b/modules/video_coding/codecs/test/videoprocessor.h
index d9e10f1..eafe492 100644
--- a/modules/video_coding/codecs/test/videoprocessor.h
+++ b/modules/video_coding/codecs/test/videoprocessor.h
@@ -219,7 +219,7 @@
   std::vector<std::unique_ptr<VideoProcessorDecodeCompleteCallback>>
       decode_callback_;
 
-  // Each call to ProcessFrame() will read one frame from |input_frame_reader_|.
+  // Each call to ProcessFrame() will read one frame from `input_frame_reader_`.
   FrameReader* const input_frame_reader_;
 
   // Input frames are used as reference for frame quality evaluations.
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
index c84d9ac..4de8d91 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers.cc
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers.cc
@@ -310,7 +310,7 @@
   RTC_DCHECK_LT(stream_index, StreamCount());
   RTC_DCHECK_GT(bitrates_bps.size(), 0);
   RTC_DCHECK_LE(bitrates_bps.size(), num_layers_);
-  // |bitrates_bps| uses individual rate per layer, but Vp8EncoderConfig wants
+  // `bitrates_bps` uses individual rate per layer, but Vp8EncoderConfig wants
   // the accumulated rate, so sum them up.
   new_bitrates_bps_ = bitrates_bps;
   new_bitrates_bps_->resize(num_layers_);
@@ -419,11 +419,11 @@
     // base-layer references).
     tl_config.layer_sync = IsSyncFrame(tl_config);
 
-    // Increment frame age, this needs to be in sync with |pattern_idx_|,
+    // Increment frame age, this needs to be in sync with `pattern_idx_`,
     // so must update it here. Resetting age to 0 must be done when encoding is
     // complete though, and so in the case of pipelining encoder it might lag.
     // To prevent this data spill over into the next iteration,
-    // the |pedning_frames_| map is reset in loops. If delay is constant,
+    // the `pedning_frames_` map is reset in loops. If delay is constant,
     // the relative age should still be OK for the search order.
     for (size_t& n : frames_since_buffer_refresh_) {
       ++n;
@@ -444,7 +444,7 @@
 
 void DefaultTemporalLayers::ValidateReferences(BufferFlags* flags,
                                                Vp8BufferReference ref) const {
-  // Check if the buffer specified by |ref| is actually referenced, and if so
+  // Check if the buffer specified by `ref` is actually referenced, and if so
   // if it also a dynamically updating one (buffers always just containing
   // keyframes are always safe to reference).
   if ((*flags & BufferFlags::kReference) &&
@@ -552,7 +552,7 @@
       for (Vp8BufferReference buffer : kAllBuffers) {
         if (is_static_buffer_[BufferToIndex(buffer)]) {
           // Update frame count of all kf-only buffers, regardless of state of
-          // |pending_frames_|.
+          // `pending_frames_`.
           ResetNumFramesSinceBufferRefresh(buffer);
         } else {
           // Key-frames update all buffers, this should be reflected when
diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc b/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
index a18ac40..07fd7dc 100644
--- a/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
+++ b/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc
@@ -653,8 +653,8 @@
 
   uint32_t timestamp = 0;
   for (int i = 0; i < 7; ++i) {
-    // Temporal pattern starts from 0 after key frame. Let the first |i| - 1
-    // frames be delta frames, and the |i|th one key frame.
+    // Temporal pattern starts from 0 after key frame. Let the first `i` - 1
+    // frames be delta frames, and the `i`th one key frame.
     for (int j = 1; j <= i; ++j) {
       // Since last frame was always a keyframe and thus index 0 in the pattern,
       // this loop starts at index 1.
@@ -780,7 +780,7 @@
   // of the buffer state; which buffers references which temporal layers (if
   // (any). If a given buffer is never updated, it is legal to reference it
   // even for sync frames. In order to be general, don't assume TL0 always
-  // updates |last|.
+  // updates `last`.
   std::vector<Vp8FrameConfig> tl_configs(kMaxPatternLength);
   for (int i = 0; i < kMaxPatternLength; ++i) {
     Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp_);
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
index 60295e5..e25a896 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
@@ -46,7 +46,7 @@
     DeblockParams(int max_level, int degrade_qp, int min_qp)
         : max_level(max_level), degrade_qp(degrade_qp), min_qp(min_qp) {}
     int max_level;   // Deblocking strength: [0, 16].
-    int degrade_qp;  // If QP value is below, start lowering |max_level|.
+    int degrade_qp;  // If QP value is below, start lowering `max_level`.
     int min_qp;      // If QP value is below, turn off deblocking.
   };
 
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 996dedf..712a833 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -107,10 +107,10 @@
   }
 }
 
-// Adds configuration from |new_config| to |base_config|. Both configs consist
-// of optionals, and only optionals which are set in |new_config| can have
-// an effect. (That is, set values in |base_config| cannot be unset.)
-// Returns |true| iff any changes were made to |base_config|.
+// Adds configuration from `new_config` to `base_config`. Both configs consist
+// of optionals, and only optionals which are set in `new_config` can have
+// an effect. (That is, set values in `base_config` cannot be unset.)
+// Returns `true` iff any changes were made to `base_config`.
 bool MaybeExtendVp8EncoderConfig(const Vp8EncoderConfig& new_config,
                                  Vp8EncoderConfig* base_config) {
   bool changes_made = false;
@@ -711,7 +711,7 @@
 #else
   // For non-ARM, increase encoding complexity (i.e., use lower speed setting)
   // if resolution is below CIF. Otherwise, keep the default/user setting
-  // (|cpu_speed_default_|) set on InitEncode via VP8().complexity.
+  // (`cpu_speed_default_`) set on InitEncode via VP8().complexity.
   if (width * height < 352 * 288)
     return (cpu_speed_default_ < -4) ? -4 : cpu_speed_default_;
   else
@@ -976,8 +976,8 @@
     flags[i] = send_key_frame ? VPX_EFLAG_FORCE_KF : EncodeFlags(tl_configs[i]);
   }
 
-  // Scale and map buffers and set |raw_images_| to hold pointers to the result.
-  // Because |raw_images_| are set to hold pointers to the prepared buffers, we
+  // Scale and map buffers and set `raw_images_` to hold pointers to the result.
+  // Because `raw_images_` are set to hold pointers to the prepared buffers, we
   // need to keep these buffers alive through reference counting until after
   // encoding is complete.
   std::vector<rtc::scoped_refptr<VideoFrameBuffer>> prepared_buffers =
@@ -1017,7 +1017,7 @@
   // Set the encoder frame flags and temporal layer_id for each spatial stream.
   // Note that streams are defined starting from lowest resolution at
   // position 0 to highest resolution at position |encoders_.size() - 1|,
-  // whereas |encoder_| is from highest to lowest resolution.
+  // whereas `encoder_` is from highest to lowest resolution.
   for (size_t i = 0; i < encoders_.size(); ++i) {
     const size_t stream_idx = encoders_.size() - 1 - i;
 
@@ -1048,7 +1048,7 @@
          (num_tries == 1 &&
           error == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT)) {
     ++num_tries;
-    // Note we must pass 0 for |flags| field in encode call below since they are
+    // Note we must pass 0 for `flags` field in encode call below since they are
     // set above in |libvpx_interface_->vpx_codec_control_| function for each
     // encoder/spatial layer.
     error = libvpx_->codec_encode(&encoders_[0], &raw_images_[0], timestamp_,
@@ -1237,8 +1237,8 @@
                                   VideoFrameBuffer::Type::kNV12};
 
   if (inited_) {
-    // |encoder_idx| is libvpx index where 0 is highest resolution.
-    // |si| is simulcast index, where 0 is lowest resolution.
+    // `encoder_idx` is libvpx index where 0 is highest resolution.
+    // `si` is simulcast index, where 0 is lowest resolution.
     for (size_t si = 0, encoder_idx = encoders_.size() - 1;
          si < encoders_.size(); ++si, --encoder_idx) {
       info.fps_allocation[si].clear();
@@ -1308,7 +1308,7 @@
 
   rtc::scoped_refptr<VideoFrameBuffer> mapped_buffer;
   if (buffer->type() != VideoFrameBuffer::Type::kNative) {
-    // |buffer| is already mapped.
+    // `buffer` is already mapped.
     mapped_buffer = buffer;
   } else {
     // Attempt to map to one of the supported formats.
@@ -1330,7 +1330,7 @@
     RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
               converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
 
-    // Because |buffer| had to be converted, use |converted_buffer| instead...
+    // Because `buffer` had to be converted, use `converted_buffer` instead...
     buffer = mapped_buffer = converted_buffer;
   }
 
@@ -1349,15 +1349,15 @@
       RTC_NOTREACHED();
   }
 
-  // Prepare |raw_images_| from |mapped_buffer| and, if simulcast, scaled
-  // versions of |buffer|.
+  // Prepare `raw_images_` from `mapped_buffer` and, if simulcast, scaled
+  // versions of `buffer`.
   std::vector<rtc::scoped_refptr<VideoFrameBuffer>> prepared_buffers;
   SetRawImagePlanes(&raw_images_[0], mapped_buffer);
   prepared_buffers.push_back(mapped_buffer);
   for (size_t i = 1; i < encoders_.size(); ++i) {
     // Native buffers should implement optimized scaling and is the preferred
     // buffer to scale. But if the buffer isn't native, it should be cheaper to
-    // scale from the previously prepared buffer which is smaller than |buffer|.
+    // scale from the previously prepared buffer which is smaller than `buffer`.
     VideoFrameBuffer* buffer_to_scale =
         buffer->type() == VideoFrameBuffer::Type::kNative
             ? buffer.get()
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
index ed80eac..f744594 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
@@ -83,7 +83,7 @@
   int GetEncodedPartitions(const VideoFrame& input_image,
                            bool retransmission_allowed);
 
-  // Set the stream state for stream |stream_idx|.
+  // Set the stream state for stream `stream_idx`.
   void SetStreamState(bool send_stream, int stream_idx);
 
   uint32_t MaxIntraTarget(uint32_t optimal_buffer_size);
@@ -95,8 +95,8 @@
   bool UpdateVpxConfiguration(size_t stream_index);
 
   void MaybeUpdatePixelFormat(vpx_img_fmt fmt);
-  // Prepares |raw_image_| to reference image data of |buffer|, or of mapped or
-  // scaled versions of |buffer|. Returns a list of buffers that got referenced
+  // Prepares `raw_image_` to reference image data of `buffer`, or of mapped or
+  // scaled versions of `buffer`. Returns a list of buffers that got referenced
   // as a result, allowing the caller to keep references to them until after
   // encoding has finished. On failure to convert the buffer, an empty list is
   // returned.
diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.cc b/modules/video_coding/codecs/vp8/screenshare_layers.cc
index caccb42..1c4c6c3 100644
--- a/modules/video_coding/codecs/vp8/screenshare_layers.cc
+++ b/modules/video_coding/codecs/vp8/screenshare_layers.cc
@@ -255,7 +255,7 @@
   RTC_DCHECK_GE(bitrates_bps.size(), 1);
   RTC_DCHECK_LE(bitrates_bps.size(), 2);
 
-  // |bitrates_bps| uses individual rates per layer, but we want to use the
+  // `bitrates_bps` uses individual rates per layer, but we want to use the
   // accumulated rate here.
   uint32_t tl0_kbps = bitrates_bps[0] / 1000;
   uint32_t tl1_kbps = tl0_kbps;
@@ -354,7 +354,7 @@
     RTC_DCHECK_EQ(vp8_info.referencedBuffersCount, 0u);
     RTC_DCHECK_EQ(vp8_info.updatedBuffersCount, 0u);
 
-    // Note that |frame_config| is not derefernced if |is_keyframe|,
+    // Note that `frame_config` is not derefernced if `is_keyframe`,
     // meaning it's never dereferenced if the optional may be unset.
     for (int i = 0; i < static_cast<int>(Vp8FrameConfig::Buffer::kCount); ++i) {
       bool references = false;
diff --git a/modules/video_coding/codecs/vp9/include/vp9.h b/modules/video_coding/codecs/vp9/include/vp9.h
index 7cf1c2e..7294de2 100644
--- a/modules/video_coding/codecs/vp9/include/vp9.h
+++ b/modules/video_coding/codecs/vp9/include/vp9.h
@@ -34,7 +34,7 @@
   // Deprecated. Returns default implementation using VP9 Profile 0.
   // TODO(emircan): Remove once this is no longer used.
   static std::unique_ptr<VP9Encoder> Create();
-  // Parses VP9 Profile from |codec| and returns the appropriate implementation.
+  // Parses VP9 Profile from `codec` and returns the appropriate implementation.
   static std::unique_ptr<VP9Encoder> Create(const cricket::VideoCodec& codec);
 
   ~VP9Encoder() override {}
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
index 3500ef59..8d8cb95 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
@@ -240,7 +240,7 @@
     buffer = nullptr;  // Triggers full frame concealment.
   }
   // During decode libvpx may get and release buffers from
-  // |libvpx_buffer_pool_|. In practice libvpx keeps a few (~3-4) buffers alive
+  // `libvpx_buffer_pool_`. In practice libvpx keeps a few (~3-4) buffers alive
   // at a time.
   if (vpx_codec_decode(decoder_, buffer,
                        static_cast<unsigned int>(input_image.size()), 0,
@@ -273,7 +273,7 @@
     return WEBRTC_VIDEO_CODEC_NO_OUTPUT;
   }
 
-  // This buffer contains all of |img|'s image data, a reference counted
+  // This buffer contains all of `img`'s image data, a reference counted
   // Vp9FrameBuffer. (libvpx is done with the buffers after a few
   // vpx_codec_decode calls or vpx_codec_destroy).
   rtc::scoped_refptr<Vp9FrameBufferPool::Vp9FrameBuffer> img_buffer =
@@ -310,7 +310,7 @@
               img->stride[VPX_PLANE_V],
               // WrappedI420Buffer's mechanism for allowing the release of its
               // frame buffer is through a callback function. This is where we
-              // should release |img_buffer|.
+              // should release `img_buffer`.
               [img_buffer] {});
         }
       } else if (img->fmt == VPX_IMG_FMT_I444) {
@@ -321,7 +321,7 @@
             img->stride[VPX_PLANE_V],
             // WrappedI444Buffer's mechanism for allowing the release of its
             // frame buffer is through a callback function. This is where we
-            // should release |img_buffer|.
+            // should release `img_buffer`.
             [img_buffer] {});
       } else {
         RTC_LOG(LS_ERROR)
@@ -373,7 +373,7 @@
   if (decoder_ != nullptr) {
     if (inited_) {
       // When a codec is destroyed libvpx will release any buffers of
-      // |libvpx_buffer_pool_| it is currently using.
+      // `libvpx_buffer_pool_` it is currently using.
       if (vpx_codec_destroy(decoder_)) {
         ret_val = WEBRTC_VIDEO_CODEC_MEMORY;
       }
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
index f29ad92..2c1aa22 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
@@ -1041,7 +1041,7 @@
   // doing this.
   input_image_ = &input_image;
 
-  // In case we need to map the buffer, |mapped_buffer| is used to keep it alive
+  // In case we need to map the buffer, `mapped_buffer` is used to keep it alive
   // through reference counting until after encoding has finished.
   rtc::scoped_refptr<const VideoFrameBuffer> mapped_buffer;
   const I010BufferInterface* i010_buffer;
@@ -1888,7 +1888,7 @@
 
   rtc::scoped_refptr<VideoFrameBuffer> mapped_buffer;
   if (buffer->type() != VideoFrameBuffer::Type::kNative) {
-    // |buffer| is already mapped.
+    // `buffer` is already mapped.
     mapped_buffer = buffer;
   } else {
     // Attempt to map to one of the supported formats.
@@ -1910,11 +1910,11 @@
     RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
               converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
 
-    // Because |buffer| had to be converted, use |converted_buffer| instead.
+    // Because `buffer` had to be converted, use `converted_buffer` instead.
     buffer = mapped_buffer = converted_buffer;
   }
 
-  // Prepare |raw_| from |mapped_buffer|.
+  // Prepare `raw_` from `mapped_buffer`.
   switch (mapped_buffer->type()) {
     case VideoFrameBuffer::Type::kI420:
     case VideoFrameBuffer::Type::kI420A: {
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.h b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.h
index 954c044..7c87d58 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.h
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.h
@@ -103,8 +103,8 @@
   size_t SteadyStateSize(int sid, int tid);
 
   void MaybeRewrapRawWithFormat(const vpx_img_fmt fmt);
-  // Prepares |raw_| to reference image data of |buffer|, or of mapped or scaled
-  // versions of |buffer|. Returns the buffer that got referenced as a result,
+  // Prepares `raw_` to reference image data of `buffer`, or of mapped or scaled
+  // versions of `buffer`. Returns the buffer that got referenced as a result,
   // allowing the caller to keep a reference to it until after encoding has
   // finished. On failure to convert the buffer, null is returned.
   rtc::scoped_refptr<VideoFrameBuffer> PrepareBufferForProfile0(
@@ -202,9 +202,9 @@
   // Flags that can affect speed vs quality tradeoff, and are configureable per
   // resolution ranges.
   struct PerformanceFlags {
-    // If false, a lookup will be made in |settings_by_resolution| base on the
+    // If false, a lookup will be made in `settings_by_resolution` base on the
     // highest currently active resolution, and the overall speed then set to
-    // to the |base_layer_speed| matching that entry.
+    // to the `base_layer_speed` matching that entry.
     // If true, each active resolution will have it's speed and deblock_mode set
     // based on it resolution, and the high layer speed configured for non
     // base temporal layer frames.
@@ -223,9 +223,9 @@
     // setting B at wvga and above, you'd use map {{0, A}, {230400, B}}.
     std::map<int, ParameterSet> settings_by_resolution;
   };
-  // Performance flags, ordered by |min_pixel_count|.
+  // Performance flags, ordered by `min_pixel_count`.
   const PerformanceFlags performance_flags_;
-  // Caching of of |speed_configs_|, where index i maps to the resolution as
+  // Caching of of `speed_configs_`, where index i maps to the resolution as
   // specified in |codec_.spatialLayer[i]|.
   std::vector<PerformanceFlags::ParameterSet>
       performance_flags_by_spatial_index_;
diff --git a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
index e965384..ca669dcb 100644
--- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
@@ -538,7 +538,7 @@
         bitrate_allocation, codec_settings.maxFramerate));
 
     frames = producer.SetNumInputFrames(num_frames_to_encode).Encode();
-    // With |sl_idx| spatial layer disabled, there are |sl_idx| spatial layers
+    // With `sl_idx` spatial layer disabled, there are `sl_idx` spatial layers
     // left.
     ASSERT_THAT(frames, SizeIs(num_frames_to_encode * sl_idx));
     for (size_t i = 0; i < frames.size(); ++i) {
diff --git a/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.cc b/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.cc
index d1f58b1..f399c59 100644
--- a/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.cc
+++ b/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.cc
@@ -44,7 +44,7 @@
           &Vp9FrameBufferPool::VpxGetFrameBuffer,
           // Called by libvpx when it no longer uses a frame buffer.
           &Vp9FrameBufferPool::VpxReleaseFrameBuffer,
-          // |this| will be passed as |user_priv| to VpxGetFrameBuffer.
+          // `this` will be passed as `user_priv` to VpxGetFrameBuffer.
           this)) {
     // Failed to configure libvpx to use Vp9FrameBufferPool.
     return false;
@@ -152,11 +152,11 @@
   rtc::scoped_refptr<Vp9FrameBuffer> buffer = pool->GetFrameBuffer(min_size);
   fb->data = buffer->GetData();
   fb->size = buffer->GetDataSize();
-  // Store Vp9FrameBuffer* in |priv| for use in VpxReleaseFrameBuffer.
-  // This also makes vpx_codec_get_frame return images with their |fb_priv| set
-  // to |buffer| which is important for external reference counting.
-  // Release from refptr so that the buffer's |ref_count_| remains 1 when
-  // |buffer| goes out of scope.
+  // Store Vp9FrameBuffer* in `priv` for use in VpxReleaseFrameBuffer.
+  // This also makes vpx_codec_get_frame return images with their `fb_priv` set
+  // to `buffer` which is important for external reference counting.
+  // Release from refptr so that the buffer's `ref_count_` remains 1 when
+  // `buffer` goes out of scope.
   fb->priv = static_cast<void*>(buffer.release());
   return 0;
 }
@@ -171,7 +171,7 @@
     buffer->Release();
     // When libvpx fails to decode and you continue to try to decode (and fail)
     // libvpx can for some reason try to release the same buffer multiple times.
-    // Setting |priv| to null protects against trying to Release multiple times.
+    // Setting `priv` to null protects against trying to Release multiple times.
     fb->priv = nullptr;
   }
   return 0;
diff --git a/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.h b/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.h
index bce10be..f46f1b7 100644
--- a/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.h
+++ b/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.h
@@ -83,7 +83,7 @@
   // buffers used to decompress frames. This is only supported for VP9.
   bool InitializeVpxUsePool(vpx_codec_ctx* vpx_codec_context);
 
-  // Gets a frame buffer of at least |min_size|, recycling an available one or
+  // Gets a frame buffer of at least `min_size`, recycling an available one or
   // creating a new one. When no longer referenced from the outside the buffer
   // becomes recyclable.
   rtc::scoped_refptr<Vp9FrameBuffer> GetFrameBuffer(size_t min_size);
@@ -99,10 +99,10 @@
 
   // InitializeVpxUsePool configures libvpx to call this function when it needs
   // a new frame buffer. Parameters:
-  // |user_priv| Private data passed to libvpx, InitializeVpxUsePool sets it up
+  // `user_priv` Private data passed to libvpx, InitializeVpxUsePool sets it up
   //             to be a pointer to the pool.
-  // |min_size|  Minimum size needed by libvpx (to decompress a frame).
-  // |fb|        Pointer to the libvpx frame buffer object, this is updated to
+  // `min_size`  Minimum size needed by libvpx (to decompress a frame).
+  // `fb`        Pointer to the libvpx frame buffer object, this is updated to
   //             use the pool's buffer.
   // Returns 0 on success. Returns < 0 on failure.
   static int32_t VpxGetFrameBuffer(void* user_priv,
@@ -111,15 +111,15 @@
 
   // InitializeVpxUsePool configures libvpx to call this function when it has
   // finished using one of the pool's frame buffer. Parameters:
-  // |user_priv| Private data passed to libvpx, InitializeVpxUsePool sets it up
+  // `user_priv` Private data passed to libvpx, InitializeVpxUsePool sets it up
   //             to be a pointer to the pool.
-  // |fb|        Pointer to the libvpx frame buffer object, its |priv| will be
+  // `fb`        Pointer to the libvpx frame buffer object, its `priv` will be
   //             a pointer to one of the pool's Vp9FrameBuffer.
   static int32_t VpxReleaseFrameBuffer(void* user_priv,
                                        vpx_codec_frame_buffer* fb);
 
  private:
-  // Protects |allocated_buffers_|.
+  // Protects `allocated_buffers_`.
   mutable Mutex buffers_lock_;
   // All buffers, in use or ready to be recycled.
   std::vector<rtc::scoped_refptr<Vp9FrameBuffer>> allocated_buffers_
diff --git a/modules/video_coding/decoder_database.h b/modules/video_coding/decoder_database.h
index 406b53e..e726669 100644
--- a/modules/video_coding/decoder_database.h
+++ b/modules/video_coding/decoder_database.h
@@ -40,7 +40,7 @@
   bool DeregisterReceiveCodec(uint8_t payload_type);
 
   // Returns a decoder specified by frame.PayloadType. The decoded frame
-  // callback of the decoder is set to |decoded_frame_callback|. If no such
+  // callback of the decoder is set to `decoded_frame_callback`. If no such
   // decoder already exists an instance will be created and initialized.
   // nullptr is returned if no decoder with the specified payload type was found
   // and the function failed to create one.
diff --git a/modules/video_coding/deprecated/nack_module.cc b/modules/video_coding/deprecated/nack_module.cc
index f8cfd34..334eb82 100644
--- a/modules/video_coding/deprecated/nack_module.cc
+++ b/modules/video_coding/deprecated/nack_module.cc
@@ -130,7 +130,7 @@
     return 0;
   }
 
-  // Since the |newest_seq_num_| is a packet we have actually received we know
+  // Since the `newest_seq_num_` is a packet we have actually received we know
   // that packet has never been Nacked.
   if (seq_num == newest_seq_num_)
     return 0;
diff --git a/modules/video_coding/deprecated/nack_module.h b/modules/video_coding/deprecated/nack_module.h
index 2fac6ce..ec1a688 100644
--- a/modules/video_coding/deprecated/nack_module.h
+++ b/modules/video_coding/deprecated/nack_module.h
@@ -93,7 +93,7 @@
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
   // Returns how many packets we have to wait in order to receive the packet
-  // with probability |probabilty| or higher.
+  // with probability `probabilty` or higher.
   int WaitNumberOfPackets(float probability) const
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
@@ -103,7 +103,7 @@
   KeyFrameRequestSender* const keyframe_request_sender_;
 
   // TODO(philipel): Some of the variables below are consistently used on a
-  // known thread (e.g. see |initialized_|). Those probably do not need
+  // known thread (e.g. see `initialized_`). Those probably do not need
   // synchronized access.
   std::map<uint16_t, NackInfo, DescendingSeqNumComp<uint16_t>> nack_list_
       RTC_GUARDED_BY(mutex_);
diff --git a/modules/video_coding/event_wrapper.h b/modules/video_coding/event_wrapper.h
index 77ca7b5..c1f160c 100644
--- a/modules/video_coding/event_wrapper.h
+++ b/modules/video_coding/event_wrapper.h
@@ -37,7 +37,7 @@
   // be released. It is possible that multiple (random) threads are released
   // Depending on timing.
   //
-  // |max_time_ms| is the maximum time to wait in milliseconds.
+  // `max_time_ms` is the maximum time to wait in milliseconds.
   virtual EventTypeWrapper Wait(int max_time_ms) = 0;
 };
 
diff --git a/modules/video_coding/fec_controller_default.cc b/modules/video_coding/fec_controller_default.cc
index 827c853..88315a8 100644
--- a/modules/video_coding/fec_controller_default.cc
+++ b/modules/video_coding/fec_controller_default.cc
@@ -125,17 +125,17 @@
     // Get the FEC code rate for Delta frames (set to 0 when NA).
     delta_fec_params.fec_rate =
         loss_prot_logic_->SelectedMethod()->RequiredProtectionFactorD();
-    // The RTP module currently requires the same |max_fec_frames| for both
+    // The RTP module currently requires the same `max_fec_frames` for both
     // key and delta frames.
     delta_fec_params.max_fec_frames =
         loss_prot_logic_->SelectedMethod()->MaxFramesFec();
     key_fec_params.max_fec_frames =
         loss_prot_logic_->SelectedMethod()->MaxFramesFec();
   }
-  // Set the FEC packet mask type. |kFecMaskBursty| is more effective for
+  // Set the FEC packet mask type. `kFecMaskBursty` is more effective for
   // consecutive losses and little/no packet re-ordering. As we currently
   // do not have feedback data on the degree of correlated losses and packet
-  // re-ordering, we keep default setting to |kFecMaskRandom| for now.
+  // re-ordering, we keep default setting to `kFecMaskRandom` for now.
   delta_fec_params.fec_mask_type = kFecMaskRandom;
   key_fec_params.fec_mask_type = kFecMaskRandom;
   // Update protection callback with protection settings.
diff --git a/modules/video_coding/frame_buffer2.cc b/modules/video_coding/frame_buffer2.cc
index ba77b72..58633e3 100644
--- a/modules/video_coding/frame_buffer2.cc
+++ b/modules/video_coding/frame_buffer2.cc
@@ -133,7 +133,7 @@
   int64_t wait_ms = latest_return_time_ms_ - now_ms;
   frames_to_decode_.clear();
 
-  // |last_continuous_frame_| may be empty below, but nullopt is smaller
+  // `last_continuous_frame_` may be empty below, but nullopt is smaller
   // than everything else and loop will immediately terminate as expected.
   for (auto frame_it = frames_.begin();
        frame_it != frames_.end() && frame_it->first <= last_continuous_frame_;
@@ -232,7 +232,7 @@
 EncodedFrame* FrameBuffer::GetNextFrame() {
   RTC_DCHECK_RUN_ON(&callback_checker_);
   int64_t now_ms = clock_->TimeInMilliseconds();
-  // TODO(ilnik): remove |frames_out| use frames_to_decode_ directly.
+  // TODO(ilnik): remove `frames_out` use frames_to_decode_ directly.
   std::vector<EncodedFrame*> frames_out;
 
   RTC_DCHECK(!frames_to_decode_.empty());
@@ -549,13 +549,13 @@
   auto last_decoded_frame = decoded_frames_history_.GetLastDecodedFrameId();
   RTC_DCHECK(!last_decoded_frame || *last_decoded_frame < info->first);
 
-  // In this function we determine how many missing dependencies this |frame|
-  // has to become continuous/decodable. If a frame that this |frame| depend
+  // In this function we determine how many missing dependencies this `frame`
+  // has to become continuous/decodable. If a frame that this `frame` depend
   // on has already been decoded then we can ignore that dependency since it has
   // already been fulfilled.
   //
-  // For all other frames we will register a backwards reference to this |frame|
-  // so that |num_missing_continuous| and |num_missing_decodable| can be
+  // For all other frames we will register a backwards reference to this `frame`
+  // so that `num_missing_continuous` and `num_missing_decodable` can be
   // decremented as frames become continuous/are decoded.
   struct Dependency {
     int64_t frame_id;
@@ -565,9 +565,9 @@
 
   // Find all dependencies that have not yet been fulfilled.
   for (size_t i = 0; i < frame.num_references; ++i) {
-    // Does |frame| depend on a frame earlier than the last decoded one?
+    // Does `frame` depend on a frame earlier than the last decoded one?
     if (last_decoded_frame && frame.references[i] <= *last_decoded_frame) {
-      // Was that frame decoded? If not, this |frame| will never become
+      // Was that frame decoded? If not, this `frame` will never become
       // decodable.
       if (!decoded_frames_history_.WasDecoded(frame.references[i])) {
         int64_t now_ms = clock_->TimeInMilliseconds();
diff --git a/modules/video_coding/frame_buffer2.h b/modules/video_coding/frame_buffer2.h
index 721668a1..9226cc3 100644
--- a/modules/video_coding/frame_buffer2.h
+++ b/modules/video_coding/frame_buffer2.h
@@ -61,7 +61,7 @@
   int64_t InsertFrame(std::unique_ptr<EncodedFrame> frame);
 
   // Get the next frame for decoding. Will return at latest after
-  // |max_wait_time_ms|.
+  // `max_wait_time_ms`.
   void NextFrame(
       int64_t max_wait_time_ms,
       bool keyframe_required,
@@ -116,7 +116,7 @@
 
   using FrameMap = std::map<int64_t, FrameInfo>;
 
-  // Check that the references of |frame| are valid.
+  // Check that the references of `frame` are valid.
   bool ValidReferences(const EncodedFrame& frame) const;
 
   int64_t FindNextFrame(int64_t now_ms) RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
@@ -134,9 +134,9 @@
   void PropagateDecodability(const FrameInfo& info)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
-  // Update the corresponding FrameInfo of |frame| and all FrameInfos that
-  // |frame| references.
-  // Return false if |frame| will never be decodable, true otherwise.
+  // Update the corresponding FrameInfo of `frame` and all FrameInfos that
+  // `frame` references.
+  // Return false if `frame` will never be decodable, true otherwise.
   bool UpdateFrameInfoWithIncomingFrame(const EncodedFrame& frame,
                                         FrameMap::iterator info)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc
index 58184bb..efa215e 100644
--- a/modules/video_coding/generic_decoder.cc
+++ b/modules/video_coding/generic_decoder.cc
@@ -214,7 +214,7 @@
     MutexLock lock(&lock_);
     int initial_size = _timestampMap.Size();
     _timestampMap.Add(timestamp, frameInfo);
-    // If no frame is dropped, the new size should be |initial_size| + 1
+    // If no frame is dropped, the new size should be `initial_size` + 1
     dropped_frames = (initial_size + 1) - _timestampMap.Size();
   }
   if (dropped_frames > 0) {
diff --git a/modules/video_coding/generic_decoder.h b/modules/video_coding/generic_decoder.h
index 4beae60..aaab5fc 100644
--- a/modules/video_coding/generic_decoder.h
+++ b/modules/video_coding/generic_decoder.h
@@ -48,7 +48,7 @@
 
  private:
   SequenceChecker construction_thread_;
-  // Protect |_timestampMap|.
+  // Protect `_timestampMap`.
   Clock* const _clock;
   // This callback must be set before the decoder thread starts running
   // and must only be unset when external threads (e.g decoder thread)
@@ -63,12 +63,12 @@
   // Set by the field trial WebRTC-SlowDownDecoder to simulate a slow decoder.
   FieldTrialOptional<TimeDelta> _extra_decode_time;
 
-  // Set by the field trial WebRTC-LowLatencyRenderer. The parameter |enabled|
+  // Set by the field trial WebRTC-LowLatencyRenderer. The parameter `enabled`
   // determines if the low-latency renderer algorithm should be used for the
   // case min playout delay=0 and max playout delay>0.
   FieldTrialParameter<bool> low_latency_renderer_enabled_;
   // Set by the field trial WebRTC-LowLatencyRenderer. The parameter
-  // |include_predecode_buffer| determines if the predecode buffer should be
+  // `include_predecode_buffer` determines if the predecode buffer should be
   // taken into account when calculating maximum number of frames in composition
   // queue.
   FieldTrialParameter<bool> low_latency_renderer_include_predecode_buffer_;
diff --git a/modules/video_coding/h264_sps_pps_tracker.cc b/modules/video_coding/h264_sps_pps_tracker.cc
index 4becdb7..0741a26 100644
--- a/modules/video_coding/h264_sps_pps_tracker.cc
+++ b/modules/video_coding/h264_sps_pps_tracker.cc
@@ -102,7 +102,7 @@
           video_header->height = sps->second.height;
 
           // If the SPS/PPS was supplied out of band then we will have saved
-          // the actual bitstream in |data|.
+          // the actual bitstream in `data`.
           if (sps->second.data && pps->second.data) {
             RTC_DCHECK_GT(sps->second.size, 0);
             RTC_DCHECK_GT(pps->second.size, 0);
diff --git a/modules/video_coding/h264_sps_pps_tracker.h b/modules/video_coding/h264_sps_pps_tracker.h
index 30c4f25..600e2ee 100644
--- a/modules/video_coding/h264_sps_pps_tracker.h
+++ b/modules/video_coding/h264_sps_pps_tracker.h
@@ -35,7 +35,7 @@
   H264SpsPpsTracker();
   ~H264SpsPpsTracker();
 
-  // Returns fixed bitstream and modifies |video_header|.
+  // Returns fixed bitstream and modifies `video_header`.
   FixedBitstream CopyAndFixBitstream(rtc::ArrayView<const uint8_t> bitstream,
                                      RTPVideoHeader* video_header);
 
diff --git a/modules/video_coding/include/video_codec_interface.h b/modules/video_coding/include/video_codec_interface.h
index 4737dde..261ffb1 100644
--- a/modules/video_coding/include/video_codec_interface.h
+++ b/modules/video_coding/include/video_codec_interface.h
@@ -36,12 +36,12 @@
   int8_t keyIdx;  // Negative value to skip keyIdx.
 
   // Used to generate the list of dependency frames.
-  // |referencedBuffers| and |updatedBuffers| contain buffer IDs.
+  // `referencedBuffers` and `updatedBuffers` contain buffer IDs.
   // Note that the buffer IDs here have a one-to-one mapping with the actual
   // codec buffers, but the exact mapping (i.e. whether 0 refers to Last,
   // to Golden or to Arf) is not pre-determined.
   // More references may be specified than are strictly necessary, but not less.
-  // TODO(bugs.webrtc.org/10242): Remove |useExplicitDependencies| once all
+  // TODO(bugs.webrtc.org/10242): Remove `useExplicitDependencies` once all
   // encoder-wrappers are updated.
   bool useExplicitDependencies;
   static constexpr size_t kBuffersCount = 3;
diff --git a/modules/video_coding/include/video_coding.h b/modules/video_coding/include/video_coding.h
index a7cb50e..df4533e 100644
--- a/modules/video_coding/include/video_coding.h
+++ b/modules/video_coding/include/video_coding.h
@@ -134,10 +134,10 @@
 
   // Sets the maximum number of sequence numbers that we are allowed to NACK
   // and the oldest sequence number that we will consider to NACK. If a
-  // sequence number older than |max_packet_age_to_nack| is missing
+  // sequence number older than `max_packet_age_to_nack` is missing
   // a key frame will be requested. A key frame will also be requested if the
   // time of incomplete or non-continuous frames in the jitter buffer is above
-  // |max_incomplete_time_ms|.
+  // `max_incomplete_time_ms`.
   virtual void SetNackSettings(size_t max_nack_list_size,
                                int max_packet_age_to_nack,
                                int max_incomplete_time_ms) = 0;
diff --git a/modules/video_coding/include/video_coding_defines.h b/modules/video_coding/include/video_coding_defines.h
index 641e712..2f1d8c8 100644
--- a/modules/video_coding/include/video_coding_defines.h
+++ b/modules/video_coding/include/video_coding_defines.h
@@ -32,8 +32,8 @@
 
 enum {
   // Timing frames settings. Timing frames are sent every
-  // |kDefaultTimingFramesDelayMs|, or if the frame is at least
-  // |kDefaultOutliserFrameSizePercent| in size of average frame.
+  // `kDefaultTimingFramesDelayMs`, or if the frame is at least
+  // `kDefaultOutliserFrameSizePercent` in size of average frame.
   kDefaultTimingFramesDelayMs = 200,
   kDefaultOutlierFrameSizePercent = 500,
   // Maximum number of frames for what we store encode start timing information.
diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc
index 2352a79..c3b0961 100644
--- a/modules/video_coding/jitter_buffer.cc
+++ b/modules/video_coding/jitter_buffer.cc
@@ -210,8 +210,8 @@
   return num_duplicated_packets_;
 }
 
-// Returns immediately or a |max_wait_time_ms| ms event hang waiting for a
-// complete frame, |max_wait_time_ms| decided by caller.
+// Returns immediately or a `max_wait_time_ms` ms event hang waiting for a
+// complete frame, `max_wait_time_ms` decided by caller.
 VCMEncodedFrame* VCMJitterBuffer::NextCompleteFrame(uint32_t max_wait_time_ms) {
   MutexLock lock(&mutex_);
   if (!running_) {
@@ -820,7 +820,7 @@
   }
 }
 
-// Must be called under the critical section |mutex_|.
+// Must be called under the critical section `mutex_`.
 void VCMJitterBuffer::CleanUpOldOrEmptyFrames() {
   decodable_frames_.CleanUpOldOrEmptyFrames(&last_decoded_state_,
                                             &free_frames_);
@@ -831,13 +831,13 @@
   }
 }
 
-// Must be called from within |mutex_|.
+// Must be called from within `mutex_`.
 bool VCMJitterBuffer::IsPacketRetransmitted(const VCMPacket& packet) const {
   return missing_sequence_numbers_.find(packet.seqNum) !=
          missing_sequence_numbers_.end();
 }
 
-// Must be called under the critical section |mutex_|. Should never be
+// Must be called under the critical section `mutex_`. Should never be
 // called with retransmitted frames, they must be filtered out before this
 // function is called.
 void VCMJitterBuffer::UpdateJitterEstimate(const VCMJitterSample& sample,
@@ -863,7 +863,7 @@
                        frame.size(), incomplete_frame);
 }
 
-// Must be called under the critical section |mutex_|. Should never be
+// Must be called under the critical section `mutex_`. Should never be
 // called with retransmitted frames, they must be filtered out before this
 // function is called.
 void VCMJitterBuffer::UpdateJitterEstimate(int64_t latest_packet_time_ms,
diff --git a/modules/video_coding/jitter_buffer.h b/modules/video_coding/jitter_buffer.h
index b15ca75..137a687 100644
--- a/modules/video_coding/jitter_buffer.h
+++ b/modules/video_coding/jitter_buffer.h
@@ -93,7 +93,7 @@
   // Gets number of duplicated packets received.
   int num_duplicated_packets() const;
 
-  // Wait |max_wait_time_ms| for a complete frame to arrive.
+  // Wait `max_wait_time_ms` for a complete frame to arrive.
   // If found, a pointer to the frame is returned. Returns nullptr otherwise.
   VCMEncodedFrame* NextCompleteFrame(uint32_t max_wait_time_ms);
 
@@ -112,7 +112,7 @@
                          bool* retransmitted) const;
 
   // Inserts a packet into a frame returned from GetFrame().
-  // If the return value is <= 0, |frame| is invalidated and the pointer must
+  // If the return value is <= 0, `frame` is invalidated and the pointer must
   // be dropped after this function returns.
   VCMFrameBufferEnum InsertPacket(const VCMPacket& packet, bool* retransmitted);
 
@@ -138,36 +138,36 @@
 
   // Gets the frame assigned to the timestamp of the packet. May recycle
   // existing frames if no free frames are available. Returns an error code if
-  // failing, or kNoError on success. |frame_list| contains which list the
+  // failing, or kNoError on success. `frame_list` contains which list the
   // packet was in, or NULL if it was not in a FrameList (a new frame).
   VCMFrameBufferEnum GetFrame(const VCMPacket& packet,
                               VCMFrameBuffer** frame,
                               FrameList** frame_list)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
-  // Returns true if |frame| is continuous in |decoding_state|, not taking
+  // Returns true if `frame` is continuous in `decoding_state`, not taking
   // decodable frames into account.
   bool IsContinuousInState(const VCMFrameBuffer& frame,
                            const VCMDecodingState& decoding_state) const
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  // Returns true if |frame| is continuous in the |last_decoded_state_|, taking
+  // Returns true if `frame` is continuous in the `last_decoded_state_`, taking
   // all decodable frames into account.
   bool IsContinuous(const VCMFrameBuffer& frame) const
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  // Looks for frames in |incomplete_frames_| which are continuous in the
-  // provided |decoded_state|. Starts the search from the timestamp of
-  // |decoded_state|.
+  // Looks for frames in `incomplete_frames_` which are continuous in the
+  // provided `decoded_state`. Starts the search from the timestamp of
+  // `decoded_state`.
   void FindAndInsertContinuousFramesWithState(
       const VCMDecodingState& decoded_state)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  // Looks for frames in |incomplete_frames_| which are continuous in
-  // |last_decoded_state_| taking all decodable frames into account. Starts
-  // the search from |new_frame|.
+  // Looks for frames in `incomplete_frames_` which are continuous in
+  // `last_decoded_state_` taking all decodable frames into account. Starts
+  // the search from `new_frame`.
   void FindAndInsertContinuousFrames(const VCMFrameBuffer& new_frame)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
   VCMFrameBuffer* NextFrame() const RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
   // Returns true if the NACK list was updated to cover sequence numbers up to
-  // |sequence_number|. If false a key frame is needed to get into a state where
+  // `sequence_number`. If false a key frame is needed to get into a state where
   // we can continue decoding.
   bool UpdateNackList(uint16_t sequence_number)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
@@ -182,7 +182,7 @@
   // continue decoding.
   bool HandleTooOldPackets(uint16_t latest_sequence_number)
       RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  // Drops all packets in the NACK list up until |last_decoded_sequence_number|.
+  // Drops all packets in the NACK list up until `last_decoded_sequence_number`.
   void DropPacketsFromNackList(uint16_t last_decoded_sequence_number);
 
   // Gets an empty frame, creating a new frame if necessary (i.e. increases
@@ -204,7 +204,7 @@
   // Should only be called prior to actual use.
   void CleanUpOldOrEmptyFrames() RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
-  // Returns true if |packet| is likely to have been retransmitted.
+  // Returns true if `packet` is likely to have been retransmitted.
   bool IsPacketRetransmitted(const VCMPacket& packet) const;
 
   // The following three functions update the jitter estimate with the
diff --git a/modules/video_coding/jitter_buffer_unittest.cc b/modules/video_coding/jitter_buffer_unittest.cc
index 752ceb8..801eeb6 100644
--- a/modules/video_coding/jitter_buffer_unittest.cc
+++ b/modules/video_coding/jitter_buffer_unittest.cc
@@ -1544,7 +1544,7 @@
   EXPECT_GE(InsertFrame(VideoFrameType::kVideoFrameKey), kNoError);
   EXPECT_TRUE(DecodeCompleteFrame());
 
-  // Drop one frame and insert |kNackHistoryLength| to trigger NACKing a too
+  // Drop one frame and insert `kNackHistoryLength` to trigger NACKing a too
   // old packet.
   DropFrame(1);
   // Insert a frame which should trigger a recycle until the next key frame.
@@ -1597,7 +1597,7 @@
   EXPECT_GE(InsertFrame(VideoFrameType::kVideoFrameKey), kNoError);
   EXPECT_TRUE(DecodeCompleteFrame());
 
-  // Generate and drop |kNackHistoryLength| packets to fill the NACK list.
+  // Generate and drop `kNackHistoryLength` packets to fill the NACK list.
   DropFrame(max_nack_list_size_ + 1);
   // Insert a frame which should trigger a recycle until the next key frame.
   EXPECT_EQ(kFlushIndicator, InsertFrame(VideoFrameType::kVideoFrameDelta));
diff --git a/modules/video_coding/loss_notification_controller.cc b/modules/video_coding/loss_notification_controller.cc
index 77d47c4..3377ab5 100644
--- a/modules/video_coding/loss_notification_controller.cc
+++ b/modules/video_coding/loss_notification_controller.cc
@@ -19,8 +19,8 @@
 
 namespace webrtc {
 namespace {
-// Keep a container's size no higher than |max_allowed_size|, by paring its size
-// down to |target_size| whenever it has more than |max_allowed_size| elements.
+// Keep a container's size no higher than `max_allowed_size`, by paring its size
+// down to `target_size` whenever it has more than `max_allowed_size` elements.
 template <typename Container>
 void PareDown(Container* container,
               size_t max_allowed_size,
@@ -67,7 +67,7 @@
 
   last_received_seq_num_ = rtp_seq_num;
 
-  // |frame| is not nullptr iff the packet is the first packet in the frame.
+  // `frame` is not nullptr iff the packet is the first packet in the frame.
   if (frame != nullptr) {
     // Ignore repeated or reordered frames.
     // TODO(bugs.webrtc.org/10336): Handle frame reordering.
diff --git a/modules/video_coding/loss_notification_controller.h b/modules/video_coding/loss_notification_controller.h
index 4d536ba..ecba412 100644
--- a/modules/video_coding/loss_notification_controller.h
+++ b/modules/video_coding/loss_notification_controller.h
@@ -36,7 +36,7 @@
   ~LossNotificationController();
 
   // An RTP packet was received from the network.
-  // |frame| is non-null iff the packet is the first packet in the frame.
+  // `frame` is non-null iff the packet is the first packet in the frame.
   void OnReceivedPacket(uint16_t rtp_seq_num, const FrameDetails* frame);
 
   // A frame was assembled from packets previously received.
@@ -54,9 +54,9 @@
 
   // When the loss of a packet or the non-decodability of a frame is detected,
   // produces a key frame request or a loss notification.
-  // 1. |last_received_seq_num| is the last received sequence number.
-  // 2. |decodability_flag| refers to the frame associated with the last packet.
-  //    It is set to |true| if and only if all of that frame's dependencies are
+  // 1. `last_received_seq_num` is the last received sequence number.
+  // 2. `decodability_flag` refers to the frame associated with the last packet.
+  //    It is set to `true` if and only if all of that frame's dependencies are
   //    known to be decodable, and the frame itself is not yet known to be
   //    unassemblable (i.e. no earlier parts of it were lost).
   //    Clarifications:
@@ -90,7 +90,7 @@
   // the last decodable-and-non-discardable frame. Since this is a bit of
   // a mouthful, last_decodable_non_discardable_.first_seq_num is used,
   // which hopefully is a bit easier for human beings to parse
-  // than |first_seq_num_of_last_decodable_non_discardable_|.
+  // than `first_seq_num_of_last_decodable_non_discardable_`.
   struct FrameInfo {
     explicit FrameInfo(uint16_t first_seq_num) : first_seq_num(first_seq_num) {}
     uint16_t first_seq_num;
diff --git a/modules/video_coding/media_opt_util.cc b/modules/video_coding/media_opt_util.cc
index 01fc5fb..7580c95 100644
--- a/modules/video_coding/media_opt_util.cc
+++ b/modules/video_coding/media_opt_util.cc
@@ -153,7 +153,7 @@
       rtc::saturated_cast<int>(
           2.0f * base_layer_framerate * parameters->rtt / 1000.0f + 0.5f),
       1);
-  // |kUpperLimitFramesFec| is the upper limit on how many frames we
+  // `kUpperLimitFramesFec` is the upper limit on how many frames we
   // allow any FEC to be based on.
   if (max_frames_fec > kUpperLimitFramesFec) {
     max_frames_fec = kUpperLimitFramesFec;
@@ -171,7 +171,7 @@
   // The condition should depend on resolution and content. For now, use
   // threshold on bytes per frame, with some effect for the frame size.
   // The condition for turning off FEC is also based on other factors,
-  // such as |_numLayers|, |_maxFramesFec|, and |_rtt|.
+  // such as `_numLayers`, `_maxFramesFec`, and `_rtt`.
   int estimate_bytes_per_frame = 1000 * BitsPerFrame(parameters) / 8;
   int max_bytes_per_frame = kMaxBytesPerFrameForFec;
   int num_pixels = parameters->codecWidth * parameters->codecHeight;
diff --git a/modules/video_coding/media_opt_util.h b/modules/video_coding/media_opt_util.h
index 44d0989..1d98ea6 100644
--- a/modules/video_coding/media_opt_util.h
+++ b/modules/video_coding/media_opt_util.h
@@ -177,7 +177,7 @@
  protected:
   enum { kUpperLimitFramesFec = 6 };
   // Thresholds values for the bytes/frame and round trip time, below which we
-  // may turn off FEC, depending on |_numLayers| and |_maxFramesFec|.
+  // may turn off FEC, depending on `_numLayers` and `_maxFramesFec`.
   // Max bytes/frame for VGA, corresponds to ~140k at 25fps.
   enum { kMaxBytesPerFrameForFec = 700 };
   // Max bytes/frame for CIF and lower: corresponds to ~80k at 25fps.
@@ -306,8 +306,8 @@
 
   // Updates the filtered loss for the average and max window packet loss,
   // and returns the filtered loss probability in the interval [0, 255].
-  // The returned filtered loss value depends on the parameter |filter_mode|.
-  // The input parameter |lossPr255| is the received packet loss.
+  // The returned filtered loss value depends on the parameter `filter_mode`.
+  // The input parameter `lossPr255` is the received packet loss.
 
   // Return value                 : The filtered loss probability
   uint8_t FilteredLoss(int64_t nowMs,
diff --git a/modules/video_coding/nack_requester.cc b/modules/video_coding/nack_requester.cc
index 6983576..dac85fc 100644
--- a/modules/video_coding/nack_requester.cc
+++ b/modules/video_coding/nack_requester.cc
@@ -195,7 +195,7 @@
     return 0;
   }
 
-  // Since the |newest_seq_num_| is a packet we have actually received we know
+  // Since the `newest_seq_num_` is a packet we have actually received we know
   // that packet has never been Nacked.
   if (seq_num == newest_seq_num_)
     return 0;
diff --git a/modules/video_coding/nack_requester.h b/modules/video_coding/nack_requester.h
index 8b01237..46d904b 100644
--- a/modules/video_coding/nack_requester.h
+++ b/modules/video_coding/nack_requester.h
@@ -129,7 +129,7 @@
       RTC_EXCLUSIVE_LOCKS_REQUIRED(worker_thread_);
 
   // Returns how many packets we have to wait in order to receive the packet
-  // with probability |probabilty| or higher.
+  // with probability `probabilty` or higher.
   int WaitNumberOfPackets(float probability) const
       RTC_EXCLUSIVE_LOCKS_REQUIRED(worker_thread_);
 
@@ -139,7 +139,7 @@
   KeyFrameRequestSender* const keyframe_request_sender_;
 
   // TODO(philipel): Some of the variables below are consistently used on a
-  // known thread (e.g. see |initialized_|). Those probably do not need
+  // known thread (e.g. see `initialized_`). Those probably do not need
   // synchronized access.
   std::map<uint16_t, NackInfo, DescendingSeqNumComp<uint16_t>> nack_list_
       RTC_GUARDED_BY(worker_thread_);
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index c98ae00..9ad56ca 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -123,7 +123,7 @@
     return;
 
   // Avoid iterating over the buffer more than once by capping the number of
-  // iterations to the |size_| of the buffer.
+  // iterations to the `size_` of the buffer.
   ++seq_num;
   size_t diff = ForwardDiff<uint16_t>(first_seq_num_, seq_num);
   size_t iterations = std::min(diff, buffer_.size());
@@ -135,8 +135,8 @@
     ++first_seq_num_;
   }
 
-  // If |diff| is larger than |iterations| it means that we don't increment
-  // |first_seq_num_| until we reach |seq_num|, so we set it here.
+  // If `diff` is larger than `iterations` it means that we don't increment
+  // `first_seq_num_` until we reach `seq_num`, so we set it here.
   first_seq_num_ = seq_num;
 
   is_cleared_to_first_seq_num_ = true;
@@ -229,7 +229,7 @@
       uint16_t start_seq_num = seq_num;
 
       // Find the start index by searching backward until the packet with
-      // the |frame_begin| flag is set.
+      // the `frame_begin` flag is set.
       int start_index = index;
       size_t tested_packets = 0;
       int64_t frame_timestamp = buffer_[start_index]->timestamp;
@@ -285,7 +285,7 @@
         start_index = start_index > 0 ? start_index - 1 : buffer_.size() - 1;
 
         // In the case of H264 we don't have a frame_begin bit (yes,
-        // |frame_begin| might be set to true but that is a lie). So instead
+        // `frame_begin` might be set to true but that is a lie). So instead
         // we traverese backwards as long as we have a previous packet and
         // the timestamp of that packet is the same as this one. This may cause
         // the PacketBuffer to hand out incomplete frames.
diff --git a/modules/video_coding/packet_buffer.h b/modules/video_coding/packet_buffer.h
index f4dbe31..51528a6 100644
--- a/modules/video_coding/packet_buffer.h
+++ b/modules/video_coding/packet_buffer.h
@@ -71,7 +71,7 @@
     bool buffer_cleared = false;
   };
 
-  // Both |start_buffer_size| and |max_buffer_size| must be a power of 2.
+  // Both `start_buffer_size` and `max_buffer_size` must be a power of 2.
   PacketBuffer(size_t start_buffer_size, size_t max_buffer_size);
   ~PacketBuffer();
 
@@ -107,7 +107,7 @@
   // If the packet buffer has received its first packet.
   bool first_packet_received_;
 
-  // If the buffer is cleared to |first_seq_num_|.
+  // If the buffer is cleared to `first_seq_num_`.
   bool is_cleared_to_first_seq_num_;
 
   // Buffer that holds the the inserted packets and information needed to
diff --git a/modules/video_coding/packet_buffer_unittest.cc b/modules/video_coding/packet_buffer_unittest.cc
index 97012618..cc1f177 100644
--- a/modules/video_coding/packet_buffer_unittest.cc
+++ b/modules/video_coding/packet_buffer_unittest.cc
@@ -377,9 +377,9 @@
   EXPECT_THAT(packets, SizeIs(7));
 }
 
-// If |sps_pps_idr_is_keyframe| is true, we require keyframes to contain
+// If `sps_pps_idr_is_keyframe` is true, we require keyframes to contain
 // SPS/PPS/IDR and the keyframes we create as part of the test do contain
-// SPS/PPS/IDR. If |sps_pps_idr_is_keyframe| is false, we only require and
+// SPS/PPS/IDR. If `sps_pps_idr_is_keyframe` is false, we only require and
 // create keyframes containing only IDR.
 class PacketBufferH264Test : public PacketBufferTest {
  protected:
diff --git a/modules/video_coding/receiver_unittest.cc b/modules/video_coding/receiver_unittest.cc
index b2d5bc6..1b6ee34 100644
--- a/modules/video_coding/receiver_unittest.cc
+++ b/modules/video_coding/receiver_unittest.cc
@@ -244,15 +244,15 @@
         receiver_(receiver) {}
   virtual ~SimulatedClockWithFrames() {}
 
-  // If |stop_on_frame| is true and next frame arrives between now and
-  // now+|milliseconds|, the clock will be advanced to the arrival time of next
+  // If `stop_on_frame` is true and next frame arrives between now and
+  // now+`milliseconds`, the clock will be advanced to the arrival time of next
   // frame.
-  // Otherwise, the clock will be advanced by |milliseconds|.
+  // Otherwise, the clock will be advanced by `milliseconds`.
   //
   // For both cases, a frame will be inserted into the jitter buffer at the
   // instant when the clock time is timestamps_.front().arrive_time.
   //
-  // Return true if some frame arrives between now and now+|milliseconds|.
+  // Return true if some frame arrives between now and now+`milliseconds`.
   bool AdvanceTimeMilliseconds(int64_t milliseconds, bool stop_on_frame) {
     return AdvanceTimeMicroseconds(milliseconds * 1000, stop_on_frame);
   }
@@ -282,10 +282,10 @@
   }
 
   // Input timestamps are in unit Milliseconds.
-  // And |arrive_timestamps| must be positive and in increasing order.
-  // |arrive_timestamps| determine when we are going to insert frames into the
+  // And `arrive_timestamps` must be positive and in increasing order.
+  // `arrive_timestamps` determine when we are going to insert frames into the
   // jitter buffer.
-  // |render_timestamps| are the timestamps on the frame.
+  // `render_timestamps` are the timestamps on the frame.
   void SetFrames(const int64_t* arrive_timestamps,
                  const int64_t* render_timestamps,
                  size_t size) {
@@ -328,12 +328,12 @@
 
 // Use a SimulatedClockWithFrames
 // Wait call will do either of these:
-// 1. If |stop_on_frame| is true, the clock will be turned to the exact instant
+// 1. If `stop_on_frame` is true, the clock will be turned to the exact instant
 // that the first frame comes and the frame will be inserted into the jitter
-// buffer, or the clock will be turned to now + |max_time| if no frame comes in
+// buffer, or the clock will be turned to now + `max_time` if no frame comes in
 // the window.
-// 2. If |stop_on_frame| is false, the clock will be turn to now + |max_time|,
-// and all the frames arriving between now and now + |max_time| will be
+// 2. If `stop_on_frame` is false, the clock will be turn to now + `max_time`,
+// and all the frames arriving between now and now + `max_time` will be
 // inserted into the jitter buffer.
 //
 // This is used to simulate the JitterBuffer getting packets from internet as
@@ -382,9 +382,9 @@
 };
 
 // Test whether VCMReceiver::FrameForDecoding handles parameter
-// |max_wait_time_ms| correctly:
-// 1. The function execution should never take more than |max_wait_time_ms|.
-// 2. If the function exit before now + |max_wait_time_ms|, a frame must be
+// `max_wait_time_ms` correctly:
+// 1. The function execution should never take more than `max_wait_time_ms`.
+// 2. If the function exit before now + `max_wait_time_ms`, a frame must be
 //    returned.
 TEST_F(VCMReceiverTimingTest, FrameForDecoding) {
   const size_t kNumFrames = 100;
@@ -436,9 +436,9 @@
 }
 
 // Test whether VCMReceiver::FrameForDecoding handles parameter
-// |prefer_late_decoding| and |max_wait_time_ms| correctly:
-// 1. The function execution should never take more than |max_wait_time_ms|.
-// 2. If the function exit before now + |max_wait_time_ms|, a frame must be
+// `prefer_late_decoding` and `max_wait_time_ms` correctly:
+// 1. The function execution should never take more than `max_wait_time_ms`.
+// 2. If the function exit before now + `max_wait_time_ms`, a frame must be
 //    returned and the end time must be equal to the render timestamp - delay
 //    for decoding and rendering.
 TEST_F(VCMReceiverTimingTest, FrameForDecodingPreferLateDecoding) {
diff --git a/modules/video_coding/rtp_frame_reference_finder.h b/modules/video_coding/rtp_frame_reference_finder.h
index d244777..9ce63cd 100644
--- a/modules/video_coding/rtp_frame_reference_finder.h
+++ b/modules/video_coding/rtp_frame_reference_finder.h
@@ -31,7 +31,7 @@
   // The RtpFrameReferenceFinder will hold onto the frame until:
   //  - the required information to determine its references has been received,
   //    in which case it (and possibly other) frames are returned, or
-  //  - There are too many stashed frames (determined by |kMaxStashedFrames|),
+  //  - There are too many stashed frames (determined by `kMaxStashedFrames`),
   //    in which case it gets dropped, or
   //  - It gets cleared by ClearTo, in which case its dropped.
   //  - The frame is old, in which case it also gets dropped.
@@ -41,7 +41,7 @@
   // might need to calculate the references of a frame.
   ReturnVector PaddingReceived(uint16_t seq_num);
 
-  // Clear all stashed frames that include packets older than |seq_num|.
+  // Clear all stashed frames that include packets older than `seq_num`.
   void ClearTo(uint16_t seq_num);
 
  private:
@@ -49,7 +49,7 @@
 
   // How far frames have been cleared out of the buffer by RTP sequence number.
   // A frame will be cleared if it contains a packet with a sequence number
-  // older than |cleared_to_seq_num_|.
+  // older than `cleared_to_seq_num_`.
   int cleared_to_seq_num_ = -1;
   const int64_t picture_id_offset_;
   std::unique_ptr<internal::RtpFrameReferenceFinderImpl> impl_;
diff --git a/modules/video_coding/rtp_frame_reference_finder_unittest.cc b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
index a5b0fc4..c58f1a9 100644
--- a/modules/video_coding/rtp_frame_reference_finder_unittest.cc
+++ b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
@@ -106,9 +106,9 @@
     OnCompleteFrames(reference_finder_->PaddingReceived(seq_num));
   }
 
-  // Check if a frame with picture id |pid| and spatial index |sidx| has been
+  // Check if a frame with picture id `pid` and spatial index `sidx` has been
   // delivered from the packet buffer, and if so, if it has the references
-  // specified by |refs|.
+  // specified by `refs`.
   template <typename... T>
   void CheckReferences(int64_t picture_id_offset,
                        uint16_t sidx,
diff --git a/modules/video_coding/rtp_vp8_ref_finder.cc b/modules/video_coding/rtp_vp8_ref_finder.cc
index b448b23..66cddac 100644
--- a/modules/video_coding/rtp_vp8_ref_finder.cc
+++ b/modules/video_coding/rtp_vp8_ref_finder.cc
@@ -65,7 +65,7 @@
     last_picture_id_ = old_picture_id;
   }
   // Find if there has been a gap in fully received frames and save the picture
-  // id of those frames in |not_yet_received_frames_|.
+  // id of those frames in `not_yet_received_frames_`.
   if (AheadOf<uint16_t, kFrameIdLength>(frame->Id(), last_picture_id_)) {
     do {
       last_picture_id_ = Add<kFrameIdLength>(last_picture_id_, 1);
diff --git a/modules/video_coding/rtp_vp9_ref_finder.cc b/modules/video_coding/rtp_vp9_ref_finder.cc
index d823871..01e6b45 100644
--- a/modules/video_coding/rtp_vp9_ref_finder.cc
+++ b/modules/video_coding/rtp_vp9_ref_finder.cc
@@ -80,7 +80,7 @@
 
   // The VP9 `tl0_pic_idx` is 8 bits and therefor wraps often. In the case of
   // packet loss the next received frame could have a `tl0_pic_idx` that looks
-  // older than the previously received frame. Always wrap forward if |frame| is
+  // older than the previously received frame. Always wrap forward if `frame` is
   // newer in RTP packet sequence number order.
   int64_t unwrapped_tl0;
   auto tl0_it = gof_info_.rbegin();
@@ -233,7 +233,7 @@
   }
 
   // For every reference this frame has, check if there is a frame missing in
-  // the interval (|ref_pid|, |picture_id|) in any of the lower temporal
+  // the interval (`ref_pid`, `picture_id`) in any of the lower temporal
   // layers. If so, we are missing a required frame.
   uint8_t num_references = info.gof->num_ref_pics[gof_idx];
   for (size_t i = 0; i < num_references; ++i) {
diff --git a/modules/video_coding/rtp_vp9_ref_finder.h b/modules/video_coding/rtp_vp9_ref_finder.h
index dc912b6..145cbce 100644
--- a/modules/video_coding/rtp_vp9_ref_finder.h
+++ b/modules/video_coding/rtp_vp9_ref_finder.h
@@ -72,7 +72,7 @@
   std::deque<std::unique_ptr<RtpFrameObject>> stashed_frames_;
 
   // Where the current scalability structure is in the
-  // |scalability_structures_| array.
+  // `scalability_structures_` array.
   uint8_t current_ss_idx_ = 0;
 
   // Holds received scalability structures.
diff --git a/modules/video_coding/session_info.cc b/modules/video_coding/session_info.cc
index 150fc77c..bee763c 100644
--- a/modules/video_coding/session_info.cc
+++ b/modules/video_coding/session_info.cc
@@ -292,7 +292,7 @@
   return complete_;
 }
 
-// Find the end of the NAL unit which the packet pointed to by |packet_it|
+// Find the end of the NAL unit which the packet pointed to by `packet_it`
 // belongs to. Returns an iterator to the last packet of the frame if the end
 // of the NAL unit wasn't found.
 VCMSessionInfo::PacketIterator VCMSessionInfo::FindNaluEnd(
@@ -491,7 +491,7 @@
     }
   }
 
-  // The insert operation invalidates the iterator |rit|.
+  // The insert operation invalidates the iterator `rit`.
   PacketIterator packet_list_it = packets_.insert(rit.base(), packet);
 
   size_t returnLength = InsertBuffer(frame_buffer, packet_list_it);
diff --git a/modules/video_coding/session_info.h b/modules/video_coding/session_info.h
index 06a348e..dc27a64 100644
--- a/modules/video_coding/session_info.h
+++ b/modules/video_coding/session_info.h
@@ -80,13 +80,13 @@
 
   // Finds the packet of the beginning of the next VP8 partition. If
   // none is found the returned iterator points to |packets_.end()|.
-  // |it| is expected to point to the last packet of the previous partition,
-  // or to the first packet of the frame. |packets_skipped| is incremented
+  // `it` is expected to point to the last packet of the previous partition,
+  // or to the first packet of the frame. `packets_skipped` is incremented
   // for each packet found which doesn't have the beginning bit set.
   PacketIterator FindNextPartitionBeginning(PacketIterator it) const;
 
   // Returns an iterator pointing to the last packet of the partition pointed to
-  // by |it|.
+  // by `it`.
   PacketIterator FindPartitionEnd(PacketIterator it) const;
   static bool InSequence(const PacketIterator& it,
                          const PacketIterator& prev_it);
@@ -97,7 +97,7 @@
                 uint8_t* frame_buffer);
   void ShiftSubsequentPackets(PacketIterator it, int steps_to_shift);
   PacketIterator FindNaluEnd(PacketIterator packet_iter) const;
-  // Deletes the data of all packets between |start| and |end|, inclusively.
+  // Deletes the data of all packets between `start` and `end`, inclusively.
   // Note that this function doesn't delete the actual packets.
   size_t DeletePacketData(PacketIterator start, PacketIterator end);
   void UpdateCompleteSession();
diff --git a/modules/video_coding/svc/svc_rate_allocator.cc b/modules/video_coding/svc/svc_rate_allocator.cc
index a51bdb0..2d27d47 100644
--- a/modules/video_coding/svc/svc_rate_allocator.cc
+++ b/modules/video_coding/svc/svc_rate_allocator.cc
@@ -117,8 +117,8 @@
   return bitrates;
 }
 
-// Returns the minimum bitrate needed for |num_active_layers| spatial layers to
-// become active using the configuration specified by |codec|.
+// Returns the minimum bitrate needed for `num_active_layers` spatial layers to
+// become active using the configuration specified by `codec`.
 DataRate FindLayerTogglingThreshold(const VideoCodec& codec,
                                     size_t first_active_layer,
                                     size_t num_active_layers) {
@@ -142,7 +142,7 @@
             .minBitrate);
 
     // Do a binary search until upper and lower bound is the highest bitrate for
-    // |num_active_layers| - 1 layers and lowest bitrate for |num_active_layers|
+    // `num_active_layers` - 1 layers and lowest bitrate for `num_active_layers`
     // layers respectively.
     while (upper_bound - lower_bound > DataRate::BitsPerSec(1)) {
       DataRate try_rate = (lower_bound + upper_bound) / 2;
diff --git a/modules/video_coding/test/stream_generator.h b/modules/video_coding/test/stream_generator.h
index ef3dcc1..f542bab 100644
--- a/modules/video_coding/test/stream_generator.h
+++ b/modules/video_coding/test/stream_generator.h
@@ -31,8 +31,8 @@
   StreamGenerator(uint16_t start_seq_num, int64_t current_time);
   void Init(uint16_t start_seq_num, int64_t current_time);
 
-  // |time_ms| denotes the timestamp you want to put on the frame, and the unit
-  // is millisecond. GenerateFrame will translate |time_ms| into a 90kHz
+  // `time_ms` denotes the timestamp you want to put on the frame, and the unit
+  // is millisecond. GenerateFrame will translate `time_ms` into a 90kHz
   // timestamp and put it on the frame.
   void GenerateFrame(VideoFrameType type,
                      int num_media_packets,
diff --git a/modules/video_coding/timestamp_map.cc b/modules/video_coding/timestamp_map.cc
index f6fb818..f843ea6 100644
--- a/modules/video_coding/timestamp_map.cc
+++ b/modules/video_coding/timestamp_map.cc
@@ -62,7 +62,7 @@
 }
 
 size_t VCMTimestampMap::Size() const {
-  // The maximum number of elements in the list is |capacity_| - 1. The list is
+  // The maximum number of elements in the list is `capacity_` - 1. The list is
   // empty if the add and pop indices are equal.
   return next_add_idx_ >= next_pop_idx_
              ? next_add_idx_ - next_pop_idx_
diff --git a/modules/video_coding/timing.cc b/modules/video_coding/timing.cc
index dc25efe..b90f8fc 100644
--- a/modules/video_coding/timing.cc
+++ b/modules/video_coding/timing.cc
@@ -195,8 +195,8 @@
     estimated_complete_time_ms = now_ms;
   }
 
-  // Make sure the actual delay stays in the range of |min_playout_delay_ms_|
-  // and |max_playout_delay_ms_|.
+  // Make sure the actual delay stays in the range of `min_playout_delay_ms_`
+  // and `max_playout_delay_ms_`.
   int actual_delay = std::max(current_delay_ms_, min_playout_delay_ms_);
   actual_delay = std::min(actual_delay, max_playout_delay_ms_);
   return estimated_complete_time_ms + actual_delay;
@@ -213,10 +213,10 @@
   MutexLock lock(&mutex_);
 
   if (render_time_ms == 0 && zero_playout_delay_min_pacing_->us() > 0) {
-    // |render_time_ms| == 0 indicates that the frame should be decoded and
+    // `render_time_ms` == 0 indicates that the frame should be decoded and
     // rendered as soon as possible. However, the decoder can be choked if too
     // many frames are sent at ones. Therefore, limit the interframe delay to
-    // |zero_playout_delay_min_pacing_|.
+    // `zero_playout_delay_min_pacing_`.
     int64_t earliest_next_decode_start_time =
         last_decode_scheduled_ts_ + zero_playout_delay_min_pacing_->ms();
     int64_t max_wait_time_ms = now_ms >= earliest_next_decode_start_time
diff --git a/modules/video_coding/timing.h b/modules/video_coding/timing.h
index 2f3fdfe..b49911d 100644
--- a/modules/video_coding/timing.h
+++ b/modules/video_coding/timing.h
@@ -77,8 +77,8 @@
   void IncomingTimestamp(uint32_t time_stamp, int64_t last_packet_time_ms);
 
   // Returns the receiver system time when the frame with timestamp
-  // |frame_timestamp| should be rendered, assuming that the system time
-  // currently is |now_ms|.
+  // `frame_timestamp` should be rendered, assuming that the system time
+  // currently is `now_ms`.
   virtual int64_t RenderTimeMs(uint32_t frame_timestamp, int64_t now_ms) const;
 
   // Returns the maximum time in ms that we can wait for a frame to become
@@ -126,8 +126,8 @@
       RTC_PT_GUARDED_BY(mutex_);
   int render_delay_ms_ RTC_GUARDED_BY(mutex_);
   // Best-effort playout delay range for frames from capture to render.
-  // The receiver tries to keep the delay between |min_playout_delay_ms_|
-  // and |max_playout_delay_ms_| taking the network jitter into account.
+  // The receiver tries to keep the delay between `min_playout_delay_ms_`
+  // and `max_playout_delay_ms_` taking the network jitter into account.
   // A special case is where min_playout_delay_ms_ = max_playout_delay_ms_ = 0,
   // in which case the receiver tries to play the frames as they arrive.
   int min_playout_delay_ms_ RTC_GUARDED_BY(mutex_);
diff --git a/modules/video_coding/unique_timestamp_counter.h b/modules/video_coding/unique_timestamp_counter.h
index 8a08d1d..23540c6 100644
--- a/modules/video_coding/unique_timestamp_counter.h
+++ b/modules/video_coding/unique_timestamp_counter.h
@@ -26,7 +26,7 @@
   ~UniqueTimestampCounter() = default;
 
   void Add(uint32_t timestamp);
-  // Returns number of different |timestamp| passed to the UniqueCounter.
+  // Returns number of different `timestamp` passed to the UniqueCounter.
   int GetUniqueSeen() const { return unique_seen_; }
 
  private:
diff --git a/modules/video_coding/utility/frame_dropper.cc b/modules/video_coding/utility/frame_dropper.cc
index 5c518fa..8ea8a8e 100644
--- a/modules/video_coding/utility/frame_dropper.cc
+++ b/modules/video_coding/utility/frame_dropper.cc
@@ -33,7 +33,7 @@
 const float kDefaultIncomingFrameRate = 30;
 const float kLeakyBucketSizeSeconds = 0.5f;
 
-// A delta frame that is bigger than |kLargeDeltaFactor| times the average
+// A delta frame that is bigger than `kLargeDeltaFactor` times the average
 // delta frame is a large frame that is spread out for accumulation.
 const int kLargeDeltaFactor = 3;
 
diff --git a/modules/video_coding/utility/frame_dropper.h b/modules/video_coding/utility/frame_dropper.h
index 014b5dd..b45b7fe 100644
--- a/modules/video_coding/utility/frame_dropper.h
+++ b/modules/video_coding/utility/frame_dropper.h
@@ -67,13 +67,13 @@
   // drops on the following packets that may be much smaller. Instead these
   // large frames are accumulated over several frames when the bucket leaks.
 
-  // |large_frame_accumulation_spread_| represents the number of frames over
+  // `large_frame_accumulation_spread_` represents the number of frames over
   // which a large frame is accumulated.
   float large_frame_accumulation_spread_;
-  // |large_frame_accumulation_count_| represents the number of frames left
+  // `large_frame_accumulation_count_` represents the number of frames left
   // to finish accumulating a large frame.
   int large_frame_accumulation_count_;
-  // |large_frame_accumulation_chunk_size_| represents the size of a single
+  // `large_frame_accumulation_chunk_size_` represents the size of a single
   // chunk for large frame accumulation.
   float large_frame_accumulation_chunk_size_;
 
diff --git a/modules/video_coding/utility/frame_dropper_unittest.cc b/modules/video_coding/utility/frame_dropper_unittest.cc
index df99d08..066103a 100644
--- a/modules/video_coding/utility/frame_dropper_unittest.cc
+++ b/modules/video_coding/utility/frame_dropper_unittest.cc
@@ -44,7 +44,7 @@
   void ValidateNoDropsAtTargetBitrate(int large_frame_size_bytes,
                                       int large_frame_rate,
                                       bool is_large_frame_delta) {
-    // Smaller frame size is computed to meet |kTargetBitRateKbps|.
+    // Smaller frame size is computed to meet `kTargetBitRateKbps`.
     int small_frame_size_bytes =
         kFrameSizeBytes -
         (large_frame_size_bytes * large_frame_rate) / kIncomingFrameRate;
diff --git a/modules/video_coding/utility/ivf_file_writer.h b/modules/video_coding/utility/ivf_file_writer.h
index 140b9c0..874f60a 100644
--- a/modules/video_coding/utility/ivf_file_writer.h
+++ b/modules/video_coding/utility/ivf_file_writer.h
@@ -28,8 +28,8 @@
  public:
   // Takes ownership of the file, which will be closed either through
   // Close or ~IvfFileWriter. If writing a frame would take the file above the
-  // |byte_limit| the file will be closed, the write (and all future writes)
-  // will fail. A |byte_limit| of 0 is equivalent to no limit.
+  // `byte_limit` the file will be closed, the write (and all future writes)
+  // will fail. A `byte_limit` of 0 is equivalent to no limit.
   static std::unique_ptr<IvfFileWriter> Wrap(FileWrapper file,
                                              size_t byte_limit);
   ~IvfFileWriter();
diff --git a/modules/video_coding/utility/quality_scaler.cc b/modules/video_coding/utility/quality_scaler.cc
index 2859ac2..4d5e2b1 100644
--- a/modules/video_coding/utility/quality_scaler.cc
+++ b/modules/video_coding/utility/quality_scaler.cc
@@ -108,7 +108,7 @@
           switch (quality_scaler_->CheckQp()) {
             case QualityScaler::CheckQpResult::kInsufficientSamples: {
               result_.observed_enough_frames = false;
-              // After this line, |this| may be deleted.
+              // After this line, `this` may be deleted.
               break;
             }
             case QualityScaler::CheckQpResult::kNormalQp: {
@@ -133,7 +133,7 @@
           }
           state_ = State::kCompleted;
           // Starting the next task deletes the pending task. After this line,
-          // |this| has been deleted.
+          // `this` has been deleted.
           quality_scaler_->StartNextCheckQpTask();
         }),
         GetCheckingQpDelayMs());
diff --git a/modules/video_coding/utility/quality_scaler.h b/modules/video_coding/utility/quality_scaler.h
index 20169a3..aae5ce5 100644
--- a/modules/video_coding/utility/quality_scaler.h
+++ b/modules/video_coding/utility/quality_scaler.h
@@ -38,7 +38,7 @@
 // video stream down or up).
 class QualityScaler {
  public:
-  // Construct a QualityScaler with given |thresholds| and |handler|.
+  // Construct a QualityScaler with given `thresholds` and `handler`.
   // This starts the quality scaler periodically checking what the average QP
   // has been recently.
   QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
diff --git a/modules/video_coding/utility/simulcast_test_fixture_impl.cc b/modules/video_coding/utility/simulcast_test_fixture_impl.cc
index 6d3195c..d3951e5 100644
--- a/modules/video_coding/utility/simulcast_test_fixture_impl.cc
+++ b/modules/video_coding/utility/simulcast_test_fixture_impl.cc
@@ -169,7 +169,7 @@
   }
 }
 
-// Fills in an I420Buffer from |plane_colors|.
+// Fills in an I420Buffer from `plane_colors`.
 void CreateImage(const rtc::scoped_refptr<I420Buffer>& buffer,
                  int plane_colors[kNumOfPlanes]) {
   SetPlane(buffer->MutableDataY(), plane_colors[0], buffer->width(),
@@ -465,7 +465,7 @@
 
 void SimulcastTestFixtureImpl::TestPaddingTwoStreamsOneMaxedOut() {
   // We are just below limit of sending second stream, so we should get
-  // the first stream maxed out (at |maxBitrate|), and padding for two.
+  // the first stream maxed out (at `maxBitrate`), and padding for two.
   SetRates(kTargetBitrates[0] + kMinBitrates[1] - 1, 30);
   std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams,
                                           VideoFrameType::kVideoFrameDelta);
@@ -492,7 +492,7 @@
 
 void SimulcastTestFixtureImpl::TestPaddingOneStreamTwoMaxedOut() {
   // We are just below limit of sending third stream, so we should get
-  // first stream's rate maxed out at |targetBitrate|, second at |maxBitrate|.
+  // first stream's rate maxed out at `targetBitrate`, second at `maxBitrate`.
   SetRates(kTargetBitrates[0] + kTargetBitrates[1] + kMinBitrates[2] - 1, 30);
   std::vector<VideoFrameType> frame_types(kNumberOfSimulcastStreams,
                                           VideoFrameType::kVideoFrameDelta);
@@ -649,7 +649,7 @@
   EXPECT_EQ(0, encoder_->InitEncode(&settings_, kSettings));
   SetRates(settings_.startBitrate, 30);
   ExpectStreams(VideoFrameType::kVideoFrameKey, 1);
-  // Resize |input_frame_| to the new resolution.
+  // Resize `input_frame_` to the new resolution.
   input_buffer_ = I420Buffer::Create(settings_.width, settings_.height);
   input_buffer_->InitializeData();
   input_frame_ = std::make_unique<webrtc::VideoFrame>(
diff --git a/modules/video_coding/utility/vp9_uncompressed_header_parser.cc b/modules/video_coding/utility/vp9_uncompressed_header_parser.cc
index 07ba325..d941f38 100644
--- a/modules/video_coding/utility/vp9_uncompressed_header_parser.cc
+++ b/modules/video_coding/utility/vp9_uncompressed_header_parser.cc
@@ -72,7 +72,7 @@
   // Reads a bit from the input stream and returns:
   // * false if bit cannot be read
   // * true if bit matches expected_val
-  // * false if bit does not match expected_val - in which case |error_msg| is
+  // * false if bit does not match expected_val - in which case `error_msg` is
   //   logged as warning, if provided.
   bool VerifyNextBooleanIs(bool expected_val, absl::string_view error_msg) {
     uint32_t val;
@@ -88,7 +88,7 @@
     return true;
   }
 
-  // Reads |bits| bits from the bitstream and interprets them as an unsigned
+  // Reads `bits` bits from the bitstream and interprets them as an unsigned
   // integer that gets cast to the type T before returning.
   // Returns nullopt if all bits cannot be read.
   // If number of bits matches size of data type, the bits parameter may be
@@ -106,11 +106,11 @@
     return (static_cast<T>(val));
   }
 
-  // Helper method that reads |num_bits| from the bitstream, returns:
+  // Helper method that reads `num_bits` from the bitstream, returns:
   // * false if bits cannot be read.
-  // * true if |expected_val| matches the read bits
-  // * false if |expected_val| does not match the read bits, and logs
-  //   |error_msg| as a warning (if provided).
+  // * true if `expected_val` matches the read bits
+  // * false if `expected_val` does not match the read bits, and logs
+  //   `error_msg` as a warning (if provided).
   bool VerifyNextUnsignedIs(int num_bits,
                             uint32_t expected_val,
                             absl::string_view error_msg) {
@@ -128,7 +128,7 @@
   }
 
   // Basically the same as ReadUnsigned() - but for signed integers.
-  // Here |bits| indicates the size of the value - number of bits read from the
+  // Here `bits` indicates the size of the value - number of bits read from the
   // bit buffer is one higher (the sign bit). This is made to matche the spec in
   // which eg s(4) = f(1) sign-bit, plus an f(4).
   template <typename T>
@@ -148,7 +148,7 @@
     return {static_cast<T>(sign_val)};
   }
 
-  // Reads |bits| from the bitstream, disregarding their value.
+  // Reads `bits` from the bitstream, disregarding their value.
   // Returns true if full number of bits were read, false otherwise.
   bool ConsumeBits(int bits) { return buffer_->ConsumeBits(bits); }
 
diff --git a/modules/video_coding/video_codec_initializer.cc b/modules/video_coding/video_codec_initializer.cc
index 17ea66a..5d06a2c 100644
--- a/modules/video_coding/video_codec_initializer.cc
+++ b/modules/video_coding/video_codec_initializer.cc
@@ -76,8 +76,8 @@
       static_cast<unsigned char>(streams.size());
   video_codec.minBitrate = streams[0].min_bitrate_bps / 1000;
   bool codec_active = false;
-  // Active configuration might not be fully copied to |streams| for SVC yet.
-  // Therefore the |config| is checked here.
+  // Active configuration might not be fully copied to `streams` for SVC yet.
+  // Therefore the `config` is checked here.
   for (const VideoStream& stream : config.simulcast_layers) {
     if (stream.active) {
       codec_active = true;
diff --git a/modules/video_coding/video_coding_impl.h b/modules/video_coding/video_coding_impl.h
index d747994..9633fb7 100644
--- a/modules/video_coding/video_coding_impl.h
+++ b/modules/video_coding/video_coding_impl.h
@@ -120,7 +120,7 @@
   size_t max_nack_list_size_;
 
   // Callbacks are set before the decoder thread starts.
-  // Once the decoder thread has been started, usage of |_codecDataBase| moves
+  // Once the decoder thread has been started, usage of `_codecDataBase` moves
   // over to the decoder thread.
   VCMDecoderDataBase _codecDataBase;
 
diff --git a/modules/video_coding/video_receiver2.cc b/modules/video_coding/video_receiver2.cc
index 380f4ca..d26d3f4 100644
--- a/modules/video_coding/video_receiver2.cc
+++ b/modules/video_coding/video_receiver2.cc
@@ -54,7 +54,7 @@
 
 // Register an externally defined decoder object. This may be called on either
 // the construction sequence or the decoder sequence to allow for lazy creation
-// of video decoders. If called on the decoder sequence |externalDecoder| cannot
+// of video decoders. If called on the decoder sequence `externalDecoder` cannot
 // be a nullptr. It's the responsibility of the caller to make sure that the
 // access from the two sequences are mutually exclusive.
 void VideoReceiver2::RegisterExternalDecoder(VideoDecoder* externalDecoder,
diff --git a/modules/video_coding/video_receiver2.h b/modules/video_coding/video_receiver2.h
index 0c3fe1a..8bcf2ac 100644
--- a/modules/video_coding/video_receiver2.h
+++ b/modules/video_coding/video_receiver2.h
@@ -43,7 +43,7 @@
 
   // Notification methods that are used to check our internal state and validate
   // threading assumptions. These are called by VideoReceiveStream.
-  // See |IsDecoderThreadRunning()| for more details.
+  // See `IsDecoderThreadRunning()` for more details.
   void DecoderThreadStarting();
   void DecoderThreadStopped();
 
@@ -62,7 +62,7 @@
   VCMDecodedFrameCallback decodedFrameCallback_;
 
   // Callbacks are set before the decoder thread starts.
-  // Once the decoder thread has been started, usage of |_codecDataBase| moves
+  // Once the decoder thread has been started, usage of `_codecDataBase` moves
   // over to the decoder thread.
   VCMDecoderDataBase codecDataBase_;
 
