Remove AudioCodingModule::Process()

An earlier change moved the encoding work from Process to
Add10MsData; process was just a no-op.

BUG=3520
COAUTHOR=kwiberg@webrtc.org
R=henrika@webrtc.org, minyue@webrtc.org, tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/43439004

Cr-Commit-Position: refs/heads/master@{#8553}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8553 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
index c1b1636..e9096ff 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
@@ -96,17 +96,13 @@
     frame.num_channels_ = codec.channels;
     memset(frame.data_, 0, frame.samples_per_channel_ * frame.num_channels_ *
            sizeof(int16_t));
-    int num_bytes = 0;
     packet_sent_ = false;
     last_packet_send_timestamp_ = timestamp_;
-    while (num_bytes == 0) {
+    while (!packet_sent_) {
       frame.timestamp_ = timestamp_;
       timestamp_ += frame.samples_per_channel_;
-      ASSERT_EQ(0, acm_->Add10MsData(frame));
-      num_bytes = acm_->Process();
-      ASSERT_GE(num_bytes, 0);
+      ASSERT_GE(acm_->Add10MsData(frame), 0);
     }
-    ASSERT_TRUE(packet_sent_);  // Sanity check.
   }
 
   // Last element of id should be negative.
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
index 6749e12..41e0feb 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
@@ -80,10 +80,10 @@
                                            input_frame_.num_channels_,
                                            input_frame_.data_);
     }
-    CHECK_EQ(0, acm_->Add10MsData(input_frame_));
+    data_to_send_ = false;
+    CHECK_GE(acm_->Add10MsData(input_frame_), 0);
     input_frame_.timestamp_ += input_block_size_samples_;
-    int32_t encoded_bytes = acm_->Process();
-    if (encoded_bytes > 0) {
+    if (data_to_send_) {
       // Encoded packet received.
       return CreatePacket();
     }
@@ -106,6 +106,7 @@
   timestamp_ = timestamp;
   last_payload_vec_.assign(payload_data, payload_data + payload_len_bytes);
   assert(last_payload_vec_.size() == payload_len_bytes);
+  data_to_send_ = true;
   return 0;
 }
 
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
index 80aaf36..05a29df 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
+++ b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
@@ -79,6 +79,7 @@
   uint32_t timestamp_;
   uint16_t sequence_number_;
   std::vector<uint8_t> last_payload_vec_;
+  bool data_to_send_;
 
   DISALLOW_COPY_AND_ASSIGN(AcmSendTestOldApi);
 };
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
index 542aaba..62287a4 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
@@ -145,7 +145,6 @@
       aux_rtp_header_(NULL),
       receiver_initialized_(false),
       first_10ms_data_(false),
-      last_encode_value_(0),
       callback_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
       packetization_callback_(NULL),
       vad_callback_(NULL) {
@@ -218,11 +217,6 @@
                "Destroyed");
 }
 
-int32_t AudioCodingModuleImpl::Process() {
-  CriticalSectionScoped lock(acm_crit_sect_);
-  return last_encode_value_;
-}
-
 int32_t AudioCodingModuleImpl::Encode() {
   // Make room for 1 RED payload.
   uint8_t stream[2 * MAX_PAYLOAD_SIZE_BYTE];
@@ -752,15 +746,7 @@
 // Add 10MS of raw (PCM) audio data to the encoder.
 int AudioCodingModuleImpl::Add10MsData(const AudioFrame& audio_frame) {
   int r = Add10MsDataInternal(audio_frame);
-  if (r < 0) {
-    CriticalSectionScoped lock(acm_crit_sect_);
-    last_encode_value_ = -1;
-  } else {
-    int r_encode = Encode();
-    CriticalSectionScoped lock(acm_crit_sect_);
-    last_encode_value_ = r_encode;
-  }
-  return r;
+  return r < 0 ? r : Encode();
 }
 
 int AudioCodingModuleImpl::Add10MsDataInternal(const AudioFrame& audio_frame) {
@@ -1563,10 +1549,9 @@
 }
 
 int AudioCodingImpl::Add10MsAudio(const AudioFrame& audio_frame) {
-  if (acm_old_->Add10MsData(audio_frame) != 0) {
+  if (acm_old_->Add10MsDataInternal(audio_frame) != 0)
     return -1;
-  }
-  return acm_old_->Process();
+  return acm_old_->Encode();
 }
 
 const ReceiverInfo* AudioCodingImpl::GetReceiverInfo() const {
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
index 3450194..76d1e36 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
@@ -24,6 +24,7 @@
 namespace webrtc {
 
 class CriticalSectionWrapper;
+class AudioCodingImpl;
 
 namespace acm2 {
 
@@ -32,12 +33,11 @@
 
 class AudioCodingModuleImpl : public AudioCodingModule {
  public:
+  friend webrtc::AudioCodingImpl;
+
   explicit AudioCodingModuleImpl(const AudioCodingModule::Config& config);
   ~AudioCodingModuleImpl();
 
-  // Process any pending tasks such as timeouts.
-  virtual int32_t Process() OVERRIDE;
-
   /////////////////////////////////////////
   //   Sender
   //
@@ -335,7 +335,6 @@
 
   AudioFrame preprocess_frame_ GUARDED_BY(acm_crit_sect_);
   bool first_10ms_data_ GUARDED_BY(acm_crit_sect_);
-  int last_encode_value_ GUARDED_BY(acm_crit_sect_);
 
   CriticalSectionWrapper* callback_crit_sect_;
   AudioPacketizationCallback* packetization_callback_
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
index a1ea179..122d027 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
@@ -193,15 +193,15 @@
   }
 
   virtual void InsertAudio() {
-    ASSERT_EQ(0, acm_->Add10MsData(input_frame_));
+    ASSERT_GE(acm_->Add10MsData(input_frame_), 0);
+    VerifyEncoding();
     input_frame_.timestamp_ += kNumSamples10ms;
   }
 
-  virtual void Encode() {
-    int32_t encoded_bytes = acm_->Process();
-    // Expect to get one packet with two bytes per sample, or no packet at all,
-    // depending on how many 10 ms blocks go into |codec_.pacsize|.
-    EXPECT_TRUE(encoded_bytes == 2 * codec_.pacsize || encoded_bytes == 0);
+  virtual void VerifyEncoding() {
+    int last_length = packet_cb_.last_payload_len_bytes();
+    EXPECT_TRUE(last_length == 2 * codec_.pacsize || last_length == 0)
+        << "Last encoded packet was " << last_length << " bytes.";
   }
 
   const int id_;
@@ -316,7 +316,6 @@
     if (packet_cb_.num_calls() > 0)
       EXPECT_EQ(kAudioFrameSpeech, packet_cb_.last_frame_type());
     InsertAudio();
-    Encode();
   }
   EXPECT_EQ(kLoops / k10MsBlocksPerPacket, packet_cb_.num_calls());
   EXPECT_EQ(kAudioFrameSpeech, packet_cb_.last_frame_type());
@@ -330,13 +329,6 @@
 class AudioCodingModuleTestWithComfortNoiseOldApi
     : public AudioCodingModuleTestOldApi {
  protected:
-  void Encode() override {
-    int32_t encoded_bytes = acm_->Process();
-    // Expect either one packet with 9 comfort noise parameters, or no packet
-    // at all.
-    EXPECT_TRUE(encoded_bytes == 9 || encoded_bytes == 0);
-  }
-
   void RegisterCngCodec(int rtp_payload_type) {
     CodecInst codec;
     AudioCodingModule::Codec("CN", &codec, kSampleRateHz, 1);
@@ -345,6 +337,12 @@
     ASSERT_EQ(0, acm_->RegisterSendCodec(codec));
   }
 
+  void VerifyEncoding() override {
+    int last_length = packet_cb_.last_payload_len_bytes();
+    EXPECT_TRUE(last_length == 9 || last_length == 0)
+        << "Last encoded packet was " << last_length << " bytes.";
+  }
+
   void DoTest(int blocks_per_packet, int cng_pt) {
     const int kLoops = 40;
     // This array defines the expected frame types, and when they should arrive.
@@ -371,7 +369,6 @@
       int num_calls_before = packet_cb_.num_calls();
       EXPECT_EQ(i / blocks_per_packet, num_calls_before);
       InsertAudio();
-      Encode();
       int num_calls = packet_cb_.num_calls();
       if (num_calls == num_calls_before + 1) {
         EXPECT_EQ(expectation[num_calls - 1].ix, i);
@@ -493,7 +490,6 @@
     }
     ++send_count_;
     InsertAudio();
-    Encode();
     if (TestDone()) {
       test_complete_->Set();
     }
@@ -586,7 +582,6 @@
     int loop_counter = 0;
     while (packet_cb_.last_payload_len_bytes() == 0) {
       InsertAudio();
-      Encode();
       ASSERT_LT(loop_counter++, 10);
     }
     // Set |last_packet_number_| to one less that |num_calls| so that the packet
@@ -632,7 +627,9 @@
     AudioCodingModuleTestOldApi::InsertAudio();
   }
 
-  void Encode() { ASSERT_GE(acm_->Process(), 0); }
+  // Override the verification function with no-op, since iSAC produces variable
+  // payload sizes.
+  void VerifyEncoding() override {}
 
   // This method is the same as AudioCodingModuleMtTestOldApi::TestDone(), but
   // here it is using the constants defined in this class (i.e., shorter test
diff --git a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
index f14ff80..72e00cd 100644
--- a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
+++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
@@ -101,8 +101,6 @@
   static AudioCodingModule* Create(int id, Clock* clock);
   virtual ~AudioCodingModule() {};
 
-  virtual int32_t Process() = 0;
-
   ///////////////////////////////////////////////////////////////////////////
   //   Utility functions
   //
@@ -317,9 +315,12 @@
 
   ///////////////////////////////////////////////////////////////////////////
   // int32_t Add10MsData()
-  // Add 10MS of raw (PCM) audio data to the encoder. If the sampling
+  // Add 10MS of raw (PCM) audio data and encode it. If the sampling
   // frequency of the audio does not match the sampling frequency of the
-  // current encoder ACM will resample the audio.
+  // current encoder ACM will resample the audio. If an encoded packet was
+  // produced, it will be delivered via the callback object registered using
+  // RegisterTransportCallback, and the return value from this function will
+  // be the number of bytes encoded.
   //
   // Input:
   //   -audio_frame        : the input audio frame, containing raw audio
@@ -328,10 +329,8 @@
   //                         AudioFrame.
   //
   // Return value:
-  //      0   successfully added the frame.
-  //     -1   some error occurred and data is not added.
-  //   < -1   to add the frame to the buffer n samples had to be
-  //          overwritten, -n is the return value in this case.
+  //   >= 0   number of bytes encoded.
+  //     -1   some error occurred.
   //
   virtual int32_t Add10MsData(const AudioFrame& audio_frame) = 0;
 
diff --git a/webrtc/modules/audio_coding/main/test/APITest.cc b/webrtc/modules/audio_coding/main/test/APITest.cc
index 6893587..cf21343 100644
--- a/webrtc/modules/audio_coding/main/test/APITest.cc
+++ b/webrtc/modules/audio_coding/main/test/APITest.cc
@@ -411,33 +411,11 @@
 
 bool APITest::ProcessRunA() {
   _processEventA->Wait(100);
-  if (_acmA->Process() < 0) {
-    // do not print error message if there is no encoder
-    bool thereIsEncoder;
-    {
-      ReadLockScoped rl(_apiTestRWLock);
-      thereIsEncoder = _thereIsEncoderA;
-    }
-
-    if (thereIsEncoder) {
-      fprintf(stderr, "\n>>>>>      Process Failed at A     <<<<<\n");
-    }
-  }
   return true;
 }
 
 bool APITest::ProcessRunB() {
   _processEventB->Wait(100);
-  if (_acmB->Process() < 0) {
-    bool thereIsEncoder;
-    {
-      ReadLockScoped rl(_apiTestRWLock);
-      thereIsEncoder = _thereIsEncoderB;
-    }
-    if (thereIsEncoder) {
-      fprintf(stderr, "\n>>>>>      Process Failed at B     <<<<<\n");
-    }
-  }
   return true;
 }
 
diff --git a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
index eff458b..b785cc3 100644
--- a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
+++ b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
@@ -100,11 +100,8 @@
   if (!_pcmFile.EndOfFile()) {
     EXPECT_GT(_pcmFile.Read10MsData(_audioFrame), 0);
     int32_t ok = _acm->Add10MsData(_audioFrame);
-    EXPECT_EQ(0, ok);
-    if (ok != 0) {
-      return false;
-    }
-    return true;
+    EXPECT_GE(ok, 0);
+    return ok >= 0 ? true : false;
   }
   return false;
 }
@@ -114,7 +111,6 @@
     if (!Add10MsData()) {
       break;
     }
-    EXPECT_GT(_acm->Process(), -1);
   }
 }
 
diff --git a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
index 7286fc1..b28c510 100644
--- a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
+++ b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
@@ -171,9 +171,6 @@
     }
     CHECK_ERROR(_acmRight->Add10MsData(audioFrame));
 
-    CHECK_ERROR(_acmLeft->Process());
-    CHECK_ERROR(_acmRight->Process());
-
     CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
     _outFile.Write10MsData(audioFrame);
   }
@@ -190,8 +187,6 @@
     _inFile.Read10MsData(audioFrame);
     CHECK_ERROR(_acmLeft->Add10MsData(audioFrame));
 
-    CHECK_ERROR(_acmLeft->Process());
-
     CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
     _outFile.Write10MsData(audioFrame);
   }
diff --git a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
index 17186b36..b1badb6 100644
--- a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
+++ b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
@@ -434,9 +434,6 @@
     infile_a_.Read10MsData(audio_frame);
     CHECK_ERROR(acm_a_->Add10MsData(audio_frame));
 
-    // Run sender side of ACM.
-    CHECK_ERROR(acm_a_->Process());
-
     // Verify that the received packet size matches the settings.
     receive_size = channel->payload_size();
     if (receive_size) {
diff --git a/webrtc/modules/audio_coding/main/test/TestRedFec.cc b/webrtc/modules/audio_coding/main/test/TestRedFec.cc
index b69a1ed..8f6ef9d 100644
--- a/webrtc/modules/audio_coding/main/test/TestRedFec.cc
+++ b/webrtc/modules/audio_coding/main/test/TestRedFec.cc
@@ -311,8 +311,7 @@
 
   while (!_inFileA.EndOfFile()) {
     EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
     _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
     msecPassed += 10;
diff --git a/webrtc/modules/audio_coding/main/test/TestStereo.cc b/webrtc/modules/audio_coding/main/test/TestStereo.cc
index 5e7bc51..72ae25e 100644
--- a/webrtc/modules/audio_coding/main/test/TestStereo.cc
+++ b/webrtc/modules/audio_coding/main/test/TestStereo.cc
@@ -779,10 +779,7 @@
       }
       in_file_stereo_->Read10MsData(audio_frame);
     }
-    EXPECT_EQ(0, acm_a_->Add10MsData(audio_frame));
-
-    // Run sender side of ACM
-    EXPECT_GT(acm_a_->Process(), -1);
+    EXPECT_GE(acm_a_->Add10MsData(audio_frame), 0);
 
     // Verify that the received packet size matches the settings.
     rec_size = channel->payload_size();
diff --git a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
index 1e05be2..20ccde6 100644
--- a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
+++ b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
@@ -242,8 +242,7 @@
     _inFileA.Read10MsData(audioFrame);
     audioFrame.timestamp_ = timestampA;
     timestampA += SamplesIn10MsecA;
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
     _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
   }
diff --git a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
index cc0fc20..f4db1db 100644
--- a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
+++ b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
@@ -282,32 +282,21 @@
   // and B, APIs will be called, like ResetEncoder(), and the code should
   // continue to run, and be able to recover.
   bool expect_error_add = false;
-  bool expect_error_process = false;
   while (!_inFileA.EndOfFile() && !_inFileB.EndOfFile()) {
     msecPassed += 10;
     EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_EQ(0, _acmRefA->Add10MsData(audioFrame));
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
+    EXPECT_GE(_acmRefA->Add10MsData(audioFrame), 0);
 
     EXPECT_GT(_inFileB.Read10MsData(audioFrame), 0);
 
     // Expect call to pass except for the time when no send codec is registered.
     if (!expect_error_add) {
-      EXPECT_EQ(0, _acmB->Add10MsData(audioFrame));
+      EXPECT_GE(_acmB->Add10MsData(audioFrame), 0);
     } else {
       EXPECT_EQ(-1, _acmB->Add10MsData(audioFrame));
     }
-    // Expect to pass except for the time when there either is no send codec
-    // registered, or no receive codec.
-    if (!expect_error_process) {
-      EXPECT_GT(_acmB->Process(), -1);
-    } else {
-      EXPECT_EQ(_acmB->Process(), -1);
-    }
-    EXPECT_EQ(0, _acmRefB->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
-    EXPECT_GT(_acmRefA->Process(), -1);
-    EXPECT_GT(_acmRefB->Process(), -1);
+    EXPECT_GE(_acmRefB->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmA->PlayoutData10Ms(outFreqHzA, &audioFrame));
     _outFileA.Write10MsData(audioFrame);
     EXPECT_EQ(0, _acmRefA->PlayoutData10Ms(outFreqHzA, &audioFrame));
@@ -328,14 +317,12 @@
       EXPECT_EQ(0, _acmA->ResetEncoder());
       EXPECT_EQ(0, _acmB->InitializeSender());
       expect_error_add = true;
-      expect_error_process = true;
     }
     // Re-register send codec on side B.
     if (((secPassed % 5) == 4) && (msecPassed >= 990)) {
       EXPECT_EQ(0, _acmB->RegisterSendCodec(codecInst_B));
       EXPECT_EQ(0, _acmB->SendCodec(&dummy));
       expect_error_add = false;
-      expect_error_process = false;
     }
     // Reset decoder on side B, and initialize receiver on side A.
     if (((secPassed % 7) == 6) && (msecPassed == 0)) {
diff --git a/webrtc/modules/audio_coding/main/test/delay_test.cc b/webrtc/modules/audio_coding/main/test/delay_test.cc
index 55dfd93..0f9e8b0 100644
--- a/webrtc/modules/audio_coding/main/test/delay_test.cc
+++ b/webrtc/modules/audio_coding/main/test/delay_test.cc
@@ -209,8 +209,7 @@
       }
 
       in_file_a_.Read10MsData(audio_frame);
-      ASSERT_EQ(0, acm_a_->Add10MsData(audio_frame));
-      ASSERT_LE(0, acm_a_->Process());
+      ASSERT_GE(acm_a_->Add10MsData(audio_frame), 0);
       ASSERT_EQ(0, acm_b_->PlayoutData10Ms(out_freq_hz_b, &audio_frame));
       out_file_b_.Write10MsData(
           audio_frame.data_,
diff --git a/webrtc/modules/audio_coding/main/test/iSACTest.cc b/webrtc/modules/audio_coding/main/test/iSACTest.cc
index c5da92e..26236f2 100644
--- a/webrtc/modules/audio_coding/main/test/iSACTest.cc
+++ b/webrtc/modules/audio_coding/main/test/iSACTest.cc
@@ -246,10 +246,8 @@
 void ISACTest::Run10ms() {
   AudioFrame audioFrame;
   EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-  EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-  EXPECT_EQ(0, _acmB->Add10MsData(audioFrame));
-  EXPECT_GT(_acmA->Process(), -1);
-  EXPECT_GT(_acmB->Process(), -1);
+  EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
+  EXPECT_GE(_acmB->Add10MsData(audioFrame), 0);
   EXPECT_EQ(0, _acmA->PlayoutData10Ms(32000, &audioFrame));
   _outFileA.Write10MsData(audioFrame);
   EXPECT_EQ(0, _acmB->PlayoutData10Ms(32000, &audioFrame));
diff --git a/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc b/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
index de87b51..3d0d312 100644
--- a/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
+++ b/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
@@ -145,8 +145,7 @@
     while (rms < kAmp / 2) {
       in_audio_frame.timestamp_ = timestamp;
       timestamp += in_audio_frame.samples_per_channel_;
-      ASSERT_EQ(0, acm_a_->Add10MsData(in_audio_frame));
-      ASSERT_LE(0, acm_a_->Process());
+      ASSERT_GE(acm_a_->Add10MsData(in_audio_frame), 0);
       ASSERT_EQ(0, acm_b_->PlayoutData10Ms(codec.plfreq, &out_audio_frame));
       rms = FrameRms(out_audio_frame);
       ++num_frames;
diff --git a/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc b/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
index 94b093d..7331696 100644
--- a/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
+++ b/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
@@ -164,7 +164,7 @@
       // Push in just enough audio.
       for (int n = 0; n < num_10ms_in_codec_frame_; n++) {
         pcm_in_fid_.Read10MsData(frame_);
-        EXPECT_EQ(0, send_acm_->Add10MsData(frame_));
+        EXPECT_GE(send_acm_->Add10MsData(frame_), 0);
       }
 
       // Set the parameters for the packet to be pushed in receiver ACM right
@@ -179,10 +179,6 @@
         lost = true;
       }
 
-      // Process audio in send ACM, this should result in generation of a
-      // packet.
-      EXPECT_GT(send_acm_->Process(), 0);
-
       if (FLAGS_verbose) {
         if (!lost) {
           std::cout << "\nInserting packet number " << seq_num
diff --git a/webrtc/modules/utility/source/coder.cc b/webrtc/modules/utility/source/coder.cc
index 5a39748..b106c75 100644
--- a/webrtc/modules/utility/source/coder.cc
+++ b/webrtc/modules/utility/source/coder.cc
@@ -96,10 +96,6 @@
         return -1;
     }
     _encodedData = encodedData;
-    if(_acm->Process() == -1)
-    {
-        return -1;
-    }
     encodedLengthInBytes = _encodedLengthInBytes;
     return 0;
 }
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 927440a..0a5d8e6 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -3560,7 +3560,10 @@
 
     // The ACM resamples internally.
     _audioFrame.timestamp_ = _timeStamp;
-    if (audio_coding_->Add10MsData((AudioFrame&)_audioFrame) != 0)
+    // This call will trigger AudioPacketizationCallback::SendData if encoding
+    // is done and payload is ready for packetization and transmission.
+    // Otherwise, it will return without invoking the callback.
+    if (audio_coding_->Add10MsData((AudioFrame&)_audioFrame) < 0)
     {
         WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId,_channelId),
                      "Channel::EncodeAndSend() ACM encoding failed");
@@ -3568,12 +3571,7 @@
     }
 
     _timeStamp += _audioFrame.samples_per_channel_;
-
-    // --- Encode if complete frame is ready
-
-    // This call will trigger AudioPacketizationCallback::SendData if encoding
-    // is done and payload is ready for packetization and transmission.
-    return audio_coding_->Process();
+    return 0;
 }
 
 int Channel::RegisterExternalMediaProcessing(