Reland "Send absolute capture time through audio coding module."

This is a reland of 48655cfdbfd99e0b6331e59201bcb8514f8b2a0a

Original change's description:
> Send absolute capture time through audio coding module.
>
> Bug: webrtc:10739
> Change-Id: I44e0305be7c84b253172511c2977b1d700e40c1b
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167067
> Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
> Reviewed-by: Chen Xing <chxg@google.com>
> Commit-Queue: Minyue Li <minyue@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#30363}

Bug: webrtc:10739
Change-Id: I10086d239ad3f1efb8485098bf3b0ad23110962b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167213
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Chen Xing <chxg@google.com>
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Commit-Queue: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30380}
diff --git a/modules/audio_coding/acm2/acm_receiver_unittest.cc b/modules/audio_coding/acm2/acm_receiver_unittest.cc
index 74a0c7a..a8da77e 100644
--- a/modules/audio_coding/acm2/acm_receiver_unittest.cc
+++ b/modules/audio_coding/acm2/acm_receiver_unittest.cc
@@ -107,7 +107,8 @@
                uint8_t payload_type,
                uint32_t timestamp,
                const uint8_t* payload_data,
-               size_t payload_len_bytes) override {
+               size_t payload_len_bytes,
+               int64_t absolute_capture_timestamp_ms) override {
     if (frame_type == AudioFrameType::kEmptyFrame)
       return 0;
 
diff --git a/modules/audio_coding/acm2/acm_send_test.cc b/modules/audio_coding/acm2/acm_send_test.cc
index 55552ca..b3e1e1e 100644
--- a/modules/audio_coding/acm2/acm_send_test.cc
+++ b/modules/audio_coding/acm2/acm_send_test.cc
@@ -126,7 +126,8 @@
                                     uint8_t payload_type,
                                     uint32_t timestamp,
                                     const uint8_t* payload_data,
-                                    size_t payload_len_bytes) {
+                                    size_t payload_len_bytes,
+                                    int64_t absolute_capture_timestamp_ms) {
   // Store the packet locally.
   frame_type_ = frame_type;
   payload_type_ = payload_type;
diff --git a/modules/audio_coding/acm2/acm_send_test.h b/modules/audio_coding/acm2/acm_send_test.h
index f4a6fc4..0c82415 100644
--- a/modules/audio_coding/acm2/acm_send_test.h
+++ b/modules/audio_coding/acm2/acm_send_test.h
@@ -54,7 +54,8 @@
                    uint8_t payload_type,
                    uint32_t timestamp,
                    const uint8_t* payload_data,
-                   size_t payload_len_bytes) override;
+                   size_t payload_len_bytes,
+                   int64_t absolute_capture_timestamp_ms) override;
 
   AudioCodingModule* acm() { return acm_.get(); }
 
diff --git a/modules/audio_coding/acm2/audio_coding_module.cc b/modules/audio_coding/acm2/audio_coding_module.cc
index b68579b..f3dd5b1 100644
--- a/modules/audio_coding/acm2/audio_coding_module.cc
+++ b/modules/audio_coding/acm2/audio_coding_module.cc
@@ -11,7 +11,6 @@
 #include "modules/audio_coding/include/audio_coding_module.h"
 
 #include <assert.h>
-
 #include <algorithm>
 #include <cstdint>
 
@@ -110,6 +109,7 @@
     // If a re-mix is required (up or down), this buffer will store a re-mixed
     // version of the input.
     std::vector<int16_t> buffer;
+    int64_t absolute_capture_timestamp_ms;
   };
 
   InputData input_data_ RTC_GUARDED_BY(acm_crit_sect_);
@@ -253,6 +253,7 @@
                     int64_t{input_data.input_timestamp - last_timestamp_} *
                         encoder_stack_->RtpTimestampRateHz(),
                     int64_t{encoder_stack_->SampleRateHz()}));
+
   last_timestamp_ = input_data.input_timestamp;
   last_rtp_timestamp_ = rtp_timestamp;
   first_frame_ = false;
@@ -302,7 +303,8 @@
     if (packetization_callback_) {
       packetization_callback_->SendData(
           frame_type, encoded_info.payload_type, encoded_info.encoded_timestamp,
-          encode_buffer_.data(), encode_buffer_.size());
+          encode_buffer_.data(), encode_buffer_.size(),
+          input_data.absolute_capture_timestamp_ms);
     }
 
     if (vad_callback_) {
@@ -392,6 +394,9 @@
   input_data->input_timestamp = ptr_frame->timestamp_;
   input_data->length_per_channel = ptr_frame->samples_per_channel_;
   input_data->audio_channel = current_num_channels;
+  // TODO(bugs.webrtc.org/10739): Assign from a corresponding field in
+  // audio_frame when it is added in AudioFrame.
+  input_data->absolute_capture_timestamp_ms = 0;
 
   if (!same_num_channels) {
     // Remixes the input frame to the output data and in the process resize the
diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
index 9dca4cd..fb26025 100644
--- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc
+++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
@@ -111,7 +111,8 @@
                    uint8_t payload_type,
                    uint32_t timestamp,
                    const uint8_t* payload_data,
-                   size_t payload_len_bytes) override {
+                   size_t payload_len_bytes,
+                   int64_t absolute_capture_timestamp_ms) override {
     rtc::CritScope lock(&crit_sect_);
     ++num_calls_;
     last_frame_type_ = frame_type;
diff --git a/modules/audio_coding/include/audio_coding_module.h b/modules/audio_coding/include/audio_coding_module.h
index d8c9260..ada389f 100644
--- a/modules/audio_coding/include/audio_coding_module.h
+++ b/modules/audio_coding/include/audio_coding_module.h
@@ -44,7 +44,21 @@
                            uint8_t payload_type,
                            uint32_t timestamp,
                            const uint8_t* payload_data,
-                           size_t payload_len_bytes) = 0;
+                           size_t payload_len_bytes,
+                           int64_t absolute_capture_timestamp_ms) {
+    // TODO(bugs.webrtc.org/10739): Deprecate the old SendData and make this one
+    // pure virtual.
+    return SendData(frame_type, payload_type, timestamp, payload_data,
+                    payload_len_bytes);
+  }
+  virtual int32_t SendData(AudioFrameType frame_type,
+                           uint8_t payload_type,
+                           uint32_t timestamp,
+                           const uint8_t* payload_data,
+                           size_t payload_len_bytes) {
+    RTC_NOTREACHED() << "This method must be overridden, or not used.";
+    return -1;
+  }
 };
 
 // Callback class used for reporting VAD decision
diff --git a/modules/audio_coding/neteq/tools/rtp_encode.cc b/modules/audio_coding/neteq/tools/rtp_encode.cc
index f65679d..204f169 100644
--- a/modules/audio_coding/neteq/tools/rtp_encode.cc
+++ b/modules/audio_coding/neteq/tools/rtp_encode.cc
@@ -112,7 +112,8 @@
                    uint8_t payload_type,
                    uint32_t timestamp,
                    const uint8_t* payload_data,
-                   size_t payload_len_bytes) override {
+                   size_t payload_len_bytes,
+                   int64_t absolute_capture_timestamp_ms) override {
     if (payload_len_bytes == 0) {
       return 0;
     }
diff --git a/modules/audio_coding/test/Channel.cc b/modules/audio_coding/test/Channel.cc
index e76bacb..3590891 100644
--- a/modules/audio_coding/test/Channel.cc
+++ b/modules/audio_coding/test/Channel.cc
@@ -23,7 +23,8 @@
                           uint8_t payloadType,
                           uint32_t timeStamp,
                           const uint8_t* payloadData,
-                          size_t payloadSize) {
+                          size_t payloadSize,
+                          int64_t absolute_capture_timestamp_ms) {
   RTPHeader rtp_header;
   int32_t status;
   size_t payloadDataSize = payloadSize;
diff --git a/modules/audio_coding/test/Channel.h b/modules/audio_coding/test/Channel.h
index 0b248c8..78129e5 100644
--- a/modules/audio_coding/test/Channel.h
+++ b/modules/audio_coding/test/Channel.h
@@ -51,7 +51,8 @@
                    uint8_t payloadType,
                    uint32_t timeStamp,
                    const uint8_t* payloadData,
-                   size_t payloadSize) override;
+                   size_t payloadSize,
+                   int64_t absolute_capture_timestamp_ms) override;
 
   void RegisterReceiverACM(AudioCodingModule* acm);
 
diff --git a/modules/audio_coding/test/EncodeDecodeTest.cc b/modules/audio_coding/test/EncodeDecodeTest.cc
index 20e415d..a1c005c 100644
--- a/modules/audio_coding/test/EncodeDecodeTest.cc
+++ b/modules/audio_coding/test/EncodeDecodeTest.cc
@@ -33,7 +33,8 @@
                                     const uint8_t payloadType,
                                     const uint32_t timeStamp,
                                     const uint8_t* payloadData,
-                                    const size_t payloadSize) {
+                                    const size_t payloadSize,
+                                    int64_t absolute_capture_timestamp_ms) {
   _rtpStream->Write(payloadType, timeStamp, _seqNo++, payloadData, payloadSize,
                     _frequency);
   return 1;
diff --git a/modules/audio_coding/test/EncodeDecodeTest.h b/modules/audio_coding/test/EncodeDecodeTest.h
index a3d1a26..c96a4d6 100644
--- a/modules/audio_coding/test/EncodeDecodeTest.h
+++ b/modules/audio_coding/test/EncodeDecodeTest.h
@@ -32,7 +32,8 @@
                    const uint8_t payloadType,
                    const uint32_t timeStamp,
                    const uint8_t* payloadData,
-                   const size_t payloadSize) override;
+                   const size_t payloadSize,
+                   int64_t absolute_capture_timestamp_ms) override;
 
  private:
   static void MakeRTPheader(uint8_t* rtpHeader,
diff --git a/modules/audio_coding/test/TestAllCodecs.cc b/modules/audio_coding/test/TestAllCodecs.cc
index be4460e..9cb3752 100644
--- a/modules/audio_coding/test/TestAllCodecs.cc
+++ b/modules/audio_coding/test/TestAllCodecs.cc
@@ -64,7 +64,8 @@
                            uint8_t payload_type,
                            uint32_t timestamp,
                            const uint8_t* payload_data,
-                           size_t payload_size) {
+                           size_t payload_size,
+                           int64_t absolute_capture_timestamp_ms) {
   RTPHeader rtp_header;
   int32_t status;
 
diff --git a/modules/audio_coding/test/TestAllCodecs.h b/modules/audio_coding/test/TestAllCodecs.h
index ef56661..0c27641 100644
--- a/modules/audio_coding/test/TestAllCodecs.h
+++ b/modules/audio_coding/test/TestAllCodecs.h
@@ -29,7 +29,8 @@
                    uint8_t payload_type,
                    uint32_t timestamp,
                    const uint8_t* payload_data,
-                   size_t payload_size) override;
+                   size_t payload_size,
+                   int64_t absolute_capture_timestamp_ms) override;
 
   size_t payload_size();
   uint32_t timestamp_diff();
diff --git a/modules/audio_coding/test/TestStereo.cc b/modules/audio_coding/test/TestStereo.cc
index 42bdbd8..61d27aa 100644
--- a/modules/audio_coding/test/TestStereo.cc
+++ b/modules/audio_coding/test/TestStereo.cc
@@ -44,7 +44,8 @@
                                  const uint8_t payload_type,
                                  const uint32_t timestamp,
                                  const uint8_t* payload_data,
-                                 const size_t payload_size) {
+                                 const size_t payload_size,
+                                 int64_t absolute_capture_timestamp_ms) {
   RTPHeader rtp_header;
   int32_t status = 0;
 
diff --git a/modules/audio_coding/test/TestStereo.h b/modules/audio_coding/test/TestStereo.h
index e950840..3ee4dbf 100644
--- a/modules/audio_coding/test/TestStereo.h
+++ b/modules/audio_coding/test/TestStereo.h
@@ -35,7 +35,8 @@
                    const uint8_t payload_type,
                    const uint32_t timestamp,
                    const uint8_t* payload_data,
-                   const size_t payload_size) override;
+                   const size_t payload_size,
+                   int64_t absolute_capture_timestamp_ms) override;
 
   uint16_t payload_size();
   uint32_t timestamp_diff();
diff --git a/modules/audio_coding/test/opus_test.cc b/modules/audio_coding/test/opus_test.cc
index e110924..5f70c03 100644
--- a/modules/audio_coding/test/opus_test.cc
+++ b/modules/audio_coding/test/opus_test.cc
@@ -337,7 +337,7 @@
 
         // Send data to the channel. "channel" will handle the loss simulation.
         channel->SendData(AudioFrameType::kAudioFrameSpeech, payload_type_,
-                          rtp_timestamp_, bitstream, bitstream_len_byte);
+                          rtp_timestamp_, bitstream, bitstream_len_byte, 0);
         if (first_packet) {
           first_packet = false;
           start_time_stamp = rtp_timestamp_;