diff --git a/modules/audio_coding/main/acm2/acm_amr.cc b/modules/audio_coding/main/acm2/acm_amr.cc
index 64e323c..6c958a5 100644
--- a/modules/audio_coding/main/acm2/acm_amr.cc
+++ b/modules/audio_coding/main/acm2/acm_amr.cc
@@ -77,8 +77,6 @@
 
 int16_t ACMAMR::SetBitRateSafe(const int32_t /* rate */) { return -1; }
 
-void ACMAMR::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 int16_t ACMAMR::SetAMREncoderPackingFormat(
     ACMAMRPackingFormat /* packing_format */) {
   return -1;
@@ -268,14 +266,6 @@
   return 0;
 }
 
-void ACMAMR::InternalDestructEncoderInst(void* ptr_inst) {
-  // Free the memory where ptr_inst is pointing to
-  if (ptr_inst != NULL) {
-    WebRtcAmr_FreeEnc(static_cast<AMR_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMAMR::SetAMREncoderPackingFormat(ACMAMRPackingFormat packing_format) {
   if ((packing_format != AMRBandwidthEfficient) &&
       (packing_format != AMROctetAlligned) &&
diff --git a/modules/audio_coding/main/acm2/acm_amr.h b/modules/audio_coding/main/acm2/acm_amr.h
index efa5687..ab22300 100644
--- a/modules/audio_coding/main/acm2/acm_amr.h
+++ b/modules/audio_coding/main/acm2/acm_amr.h
@@ -48,8 +48,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate);
 
   int16_t EnableDTX();
diff --git a/modules/audio_coding/main/acm2/acm_amrwb.cc b/modules/audio_coding/main/acm2/acm_amrwb.cc
index 4dd4e97..5c9540f 100644
--- a/modules/audio_coding/main/acm2/acm_amrwb.cc
+++ b/modules/audio_coding/main/acm2/acm_amrwb.cc
@@ -73,8 +73,6 @@
 
 int16_t ACMAMRwb::SetBitRateSafe(const int32_t /* rate */) { return -1; }
 
-void ACMAMRwb::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 int16_t ACMAMRwb::SetAMRwbEncoderPackingFormat(
     ACMAMRPackingFormat /* packing_format */) {
   return -1;
@@ -273,13 +271,6 @@
   return 0;
 }
 
-void ACMAMRwb::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcAmrWb_FreeEnc(static_cast<AMRWB_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMAMRwb::SetAMRwbEncoderPackingFormat(
     ACMAMRPackingFormat packing_format) {
   if ((packing_format != AMRBandwidthEfficient) &&
diff --git a/modules/audio_coding/main/acm2/acm_amrwb.h b/modules/audio_coding/main/acm2/acm_amrwb.h
index c8db659..5b90e0b 100644
--- a/modules/audio_coding/main/acm2/acm_amrwb.h
+++ b/modules/audio_coding/main/acm2/acm_amrwb.h
@@ -48,8 +48,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate);
 
   int16_t EnableDTX();
diff --git a/modules/audio_coding/main/acm2/acm_celt.cc b/modules/audio_coding/main/acm2/acm_celt.cc
index 3cd6e84..70cd0a8 100644
--- a/modules/audio_coding/main/acm2/acm_celt.cc
+++ b/modules/audio_coding/main/acm2/acm_celt.cc
@@ -57,10 +57,6 @@
   return;
 }
 
-void ACMCELT::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  return;
-}
-
 int16_t ACMCELT::SetBitRateSafe(const int32_t /*rate*/) {
   return -1;
 }
@@ -159,13 +155,6 @@
   }
 }
 
-void ACMCELT::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcCelt_FreeEnc(static_cast<CELT_encinst_t*>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMCELT::SetBitRateSafe(const int32_t rate) {
   // Check that rate is in the valid range.
   if ((rate >= 48000) && (rate <= 128000)) {
diff --git a/modules/audio_coding/main/acm2/acm_celt.h b/modules/audio_coding/main/acm2/acm_celt.h
index dc8d3ee..b7325da 100644
--- a/modules/audio_coding/main/acm2/acm_celt.h
+++ b/modules/audio_coding/main/acm2/acm_celt.h
@@ -37,8 +37,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate);
 
   CELT_encinst_t_* enc_inst_ptr_;
diff --git a/modules/audio_coding/main/acm2/acm_cng.cc b/modules/audio_coding/main/acm2/acm_cng.cc
index 7f0adf8..8fef66e 100644
--- a/modules/audio_coding/main/acm2/acm_cng.cc
+++ b/modules/audio_coding/main/acm2/acm_cng.cc
@@ -71,13 +71,6 @@
   encoder_initialized_ = false;
 }
 
-void ACMCNG::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcCng_FreeEnc(static_cast<CNG_enc_inst*>(ptr_inst));
-  }
-  return;
-}
-
 }  // namespace acm2
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/main/acm2/acm_cng.h b/modules/audio_coding/main/acm2/acm_cng.h
index 8b0a392..d3a8bd3 100644
--- a/modules/audio_coding/main/acm2/acm_cng.h
+++ b/modules/audio_coding/main/acm2/acm_cng.h
@@ -40,8 +40,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t EnableDTX() {
     return -1;
   }
diff --git a/modules/audio_coding/main/acm2/acm_dtmf_playout.cc b/modules/audio_coding/main/acm2/acm_dtmf_playout.cc
index 07bab65..c9f4ded 100644
--- a/modules/audio_coding/main/acm2/acm_dtmf_playout.cc
+++ b/modules/audio_coding/main/acm2/acm_dtmf_playout.cc
@@ -40,10 +40,6 @@
 
 int16_t ACMDTMFPlayout::InternalCreateEncoder() { return -1; }
 
-void ACMDTMFPlayout::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  return;
-}
-
 void ACMDTMFPlayout::DestructEncoderSafe() {
   return;
 }
@@ -73,11 +69,6 @@
   return 0;
 }
 
-void ACMDTMFPlayout::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  // DTMFPlayout has no instance
-  return;
-}
-
 void ACMDTMFPlayout::DestructEncoderSafe() {
   // DTMFPlayout has no instance
   return;
diff --git a/modules/audio_coding/main/acm2/acm_dtmf_playout.h b/modules/audio_coding/main/acm2/acm_dtmf_playout.h
index 5adb0dd..dd87df4 100644
--- a/modules/audio_coding/main/acm2/acm_dtmf_playout.h
+++ b/modules/audio_coding/main/acm2/acm_dtmf_playout.h
@@ -33,8 +33,6 @@
   void DestructEncoderSafe();
 
   int16_t InternalCreateEncoder();
-
-  void InternalDestructEncoderInst(void* ptr_inst);
 };
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_g722.cc b/modules/audio_coding/main/acm2/acm_g722.cc
index 8d45772..e0a756d 100644
--- a/modules/audio_coding/main/acm2/acm_g722.cc
+++ b/modules/audio_coding/main/acm2/acm_g722.cc
@@ -52,8 +52,6 @@
 
 void ACMG722::DestructEncoderSafe() { return; }
 
-void ACMG722::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 #else     //===================== Actual Implementation =======================
 
 // Encoder and decoder memory
@@ -187,13 +185,6 @@
   encoder_initialized_ = false;
 }
 
-void ACMG722::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcG722_FreeEncoder(static_cast<G722EncInst*>(ptr_inst));
-  }
-  return;
-}
-
 #endif
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_g722.h b/modules/audio_coding/main/acm2/acm_g722.h
index 6cdd79d..6717d2c 100644
--- a/modules/audio_coding/main/acm2/acm_g722.h
+++ b/modules/audio_coding/main/acm2/acm_g722.h
@@ -51,8 +51,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   ACMG722EncStr* ptr_enc_str_;
 
   G722EncInst* encoder_inst_ptr_;
diff --git a/modules/audio_coding/main/acm2/acm_g7221.cc b/modules/audio_coding/main/acm2/acm_g7221.cc
index 3609f07..5739dd3 100644
--- a/modules/audio_coding/main/acm2/acm_g7221.cc
+++ b/modules/audio_coding/main/acm2/acm_g7221.cc
@@ -115,8 +115,6 @@
 
 void ACMG722_1::DestructEncoderSafe() { return; }
 
-void ACMG722_1::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 #else  //===================== Actual Implementation =======================
 ACMG722_1::ACMG722_1(int16_t codec_id)
     : encoder_inst_ptr_(NULL),
@@ -316,13 +314,6 @@
   encoder_inst32_ptr_ = NULL;
 }
 
-void ACMG722_1::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    delete ptr_inst;
-  }
-  return;
-}
-
 #endif
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_g7221.h b/modules/audio_coding/main/acm2/acm_g7221.h
index 74d9b27..3935798 100644
--- a/modules/audio_coding/main/acm2/acm_g7221.h
+++ b/modules/audio_coding/main/acm2/acm_g7221.h
@@ -43,8 +43,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int32_t operational_rate_;
 
   G722_1_Inst_t_* encoder_inst_ptr_;
diff --git a/modules/audio_coding/main/acm2/acm_g7221c.cc b/modules/audio_coding/main/acm2/acm_g7221c.cc
index f6555f5..996eaf8 100644
--- a/modules/audio_coding/main/acm2/acm_g7221c.cc
+++ b/modules/audio_coding/main/acm2/acm_g7221c.cc
@@ -115,8 +115,6 @@
 
 void ACMG722_1C::DestructEncoderSafe() { return; }
 
-void ACMG722_1C::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 #else  //===================== Actual Implementation =======================
 ACMG722_1C::ACMG722_1C(int16_t codec_id)
     : encoder_inst_ptr_(NULL),
@@ -322,13 +320,6 @@
   encoder_inst48_ptr_ = NULL;
 }
 
-void ACMG722_1C::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    delete ptr_inst;
-  }
-  return;
-}
-
 #endif
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_g7221c.h b/modules/audio_coding/main/acm2/acm_g7221c.h
index 66b0f54..52a0db9 100644
--- a/modules/audio_coding/main/acm2/acm_g7221c.h
+++ b/modules/audio_coding/main/acm2/acm_g7221c.h
@@ -43,8 +43,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int32_t operational_rate_;
 
   G722_1_Inst_t_* encoder_inst_ptr_;
diff --git a/modules/audio_coding/main/acm2/acm_g729.cc b/modules/audio_coding/main/acm2/acm_g729.cc
index 6f95f36..de1af6e 100644
--- a/modules/audio_coding/main/acm2/acm_g729.cc
+++ b/modules/audio_coding/main/acm2/acm_g729.cc
@@ -57,8 +57,6 @@
 
 void ACMG729::DestructEncoderSafe() { return; }
 
-void ACMG729::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 #else  //===================== Actual Implementation =======================
 ACMG729::ACMG729(int16_t codec_id)
     : codec_id_(codec_id),
@@ -245,13 +243,6 @@
   }
 }
 
-void ACMG729::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcG729_FreeEnc(static_cast<G729_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 #endif
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_g729.h b/modules/audio_coding/main/acm2/acm_g729.h
index 88b1bf7..be48c6e 100644
--- a/modules/audio_coding/main/acm2/acm_g729.h
+++ b/modules/audio_coding/main/acm2/acm_g729.h
@@ -38,8 +38,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t EnableDTX();
 
   int16_t DisableDTX();
diff --git a/modules/audio_coding/main/acm2/acm_g7291.cc b/modules/audio_coding/main/acm2/acm_g7291.cc
index 3cf9f22..e50d027 100644
--- a/modules/audio_coding/main/acm2/acm_g7291.cc
+++ b/modules/audio_coding/main/acm2/acm_g7291.cc
@@ -51,8 +51,6 @@
 
 void ACMG729_1::DestructEncoderSafe() { return; }
 
-void ACMG729_1::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 int16_t ACMG729_1::SetBitRateSafe(const int32_t /*rate*/) { return -1; }
 
 #else  //===================== Actual Implementation =======================
@@ -159,13 +157,6 @@
   }
 }
 
-void ACMG729_1::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    // WebRtcG7291_Free((G729_1_inst_t*)ptrInst);
-  }
-  return;
-}
-
 int16_t ACMG729_1::SetBitRateSafe(const int32_t rate) {
   // allowed rates: { 8000, 12000, 14000, 16000, 18000, 20000,
   //                22000, 24000, 26000, 28000, 30000, 32000};
diff --git a/modules/audio_coding/main/acm2/acm_g7291.h b/modules/audio_coding/main/acm2/acm_g7291.h
index 38c8fe1..8387dcf 100644
--- a/modules/audio_coding/main/acm2/acm_g7291.h
+++ b/modules/audio_coding/main/acm2/acm_g7291.h
@@ -38,8 +38,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate);
 
   G729_1_inst_t_* encoder_inst_ptr_;
diff --git a/modules/audio_coding/main/acm2/acm_generic_codec.cc b/modules/audio_coding/main/acm2/acm_generic_codec.cc
index 361de30..29dccd2 100644
--- a/modules/audio_coding/main/acm2/acm_generic_codec.cc
+++ b/modules/audio_coding/main/acm2/acm_generic_codec.cc
@@ -622,13 +622,6 @@
   return status;
 }
 
-void ACMGenericCodec::DestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WriteLockScoped lockCodec(codec_wrapper_lock_);
-    InternalDestructEncoderInst(ptr_inst);
-  }
-}
-
 uint32_t ACMGenericCodec::EarliestTimestamp() const {
   ReadLockScoped cs(codec_wrapper_lock_);
   return in_timestamp_[0];
diff --git a/modules/audio_coding/main/acm2/acm_generic_codec.h b/modules/audio_coding/main/acm2/acm_generic_codec.h
index f4ee5e5..adca299 100644
--- a/modules/audio_coding/main/acm2/acm_generic_codec.h
+++ b/modules/audio_coding/main/acm2/acm_generic_codec.h
@@ -213,18 +213,6 @@
   int16_t SetBitRate(const int32_t bitrate_bps);
 
   ///////////////////////////////////////////////////////////////////////////
-  // DestructEncoderInst()
-  // This API is used in conferencing. It will free the memory that is pointed
-  // by |ptr_inst|. |ptr_inst| is a pointer to encoder instance, created and
-  // filled up by calling EncoderInst(...).
-  //
-  // Inputs:
-  //   -ptr_inst            : pointer to an encoder instance to be deleted.
-  //
-  //
-  void DestructEncoderInst(void* ptr_inst);
-
-  ///////////////////////////////////////////////////////////////////////////
   // uint32_t EarliestTimestamp()
   // Returns the timestamp of the first 10 ms in audio buffer. This is used
   // to identify if a synchronization of two encoders is required.
@@ -837,23 +825,6 @@
   virtual int16_t InternalCreateEncoder() = 0;
 
   ///////////////////////////////////////////////////////////////////////////
-  // void InternalDestructEncoderInst()
-  // This is a codec-specific method, used in conferencing, called from
-  // DestructEncoderInst(). The input argument is pointer to encoder instance
-  // (codec instance for codecs that encoder and decoder share the same
-  // instance). This method is called to free the memory that |ptr_inst| is
-  // pointing to.
-  //
-  // Input:
-  //   -ptr_inst           : pointer to encoder instance.
-  //
-  // Return value:
-  //   -1 if failed,
-  //    0 if succeeded.
-  //
-  virtual void InternalDestructEncoderInst(void* ptr_inst) = 0;
-
-  ///////////////////////////////////////////////////////////////////////////
   // int16_t InternalResetEncoder()
   // This method is called to reset the states of encoder. However, the
   // current parameters, e.g. frame-length, should remain as they are. For
diff --git a/modules/audio_coding/main/acm2/acm_gsmfr.cc b/modules/audio_coding/main/acm2/acm_gsmfr.cc
index 90f9fce..1c37a1e 100644
--- a/modules/audio_coding/main/acm2/acm_gsmfr.cc
+++ b/modules/audio_coding/main/acm2/acm_gsmfr.cc
@@ -49,10 +49,6 @@
 
 void ACMGSMFR::DestructEncoderSafe() { return; }
 
-void ACMGSMFR::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  return;
-}
-
 #else  //===================== Actual Implementation =======================
 
 ACMGSMFR::ACMGSMFR(int16_t codec_id)
@@ -147,13 +143,6 @@
   encoder_initialized_ = false;
 }
 
-void ACMGSMFR::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcGSMFR_FreeEnc(static_cast<GSMFR_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 #endif
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_gsmfr.h b/modules/audio_coding/main/acm2/acm_gsmfr.h
index 79c3a18..2cf954b 100644
--- a/modules/audio_coding/main/acm2/acm_gsmfr.h
+++ b/modules/audio_coding/main/acm2/acm_gsmfr.h
@@ -38,8 +38,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t EnableDTX();
 
   int16_t DisableDTX();
diff --git a/modules/audio_coding/main/acm2/acm_ilbc.cc b/modules/audio_coding/main/acm2/acm_ilbc.cc
index eaa079c..d23ec6e 100644
--- a/modules/audio_coding/main/acm2/acm_ilbc.cc
+++ b/modules/audio_coding/main/acm2/acm_ilbc.cc
@@ -40,8 +40,6 @@
 
 void ACMILBC::DestructEncoderSafe() { return; }
 
-void ACMILBC::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 int16_t ACMILBC::SetBitRateSafe(const int32_t /* rate */) { return -1; }
 
 #else  //===================== Actual Implementation =======================
@@ -117,13 +115,6 @@
   }
 }
 
-void ACMILBC::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcIlbcfix_EncoderFree(static_cast<iLBC_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMILBC::SetBitRateSafe(const int32_t rate) {
   // Check that rate is valid. No need to store the value
   if (rate == 13300) {
diff --git a/modules/audio_coding/main/acm2/acm_ilbc.h b/modules/audio_coding/main/acm2/acm_ilbc.h
index 714c900..3cf2c73 100644
--- a/modules/audio_coding/main/acm2/acm_ilbc.h
+++ b/modules/audio_coding/main/acm2/acm_ilbc.h
@@ -44,8 +44,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   iLBC_encinst_t_* encoder_inst_ptr_;
 };
 
diff --git a/modules/audio_coding/main/acm2/acm_isac.cc b/modules/audio_coding/main/acm2/acm_isac.cc
index e122559..850204f 100644
--- a/modules/audio_coding/main/acm2/acm_isac.cc
+++ b/modules/audio_coding/main/acm2/acm_isac.cc
@@ -93,8 +93,6 @@
 
 void ACMISAC::DestructEncoderSafe() { return; }
 
-void ACMISAC::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 int16_t ACMISAC::Transcode(uint8_t* /* bitstream */,
                            int16_t* /* bitstream_len_byte */,
                            int16_t /* q_bwe */,
@@ -461,13 +459,6 @@
   return;
 }
 
-void ACMISAC::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    ACM_ISAC_FREE(static_cast<ACM_ISAC_STRUCT *>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMISAC::SetBitRateSafe(int32_t bit_rate) {
   CriticalSectionScoped lock(codec_inst_crit_sect_.get());
   if (codec_inst_ptr_ == NULL) {
diff --git a/modules/audio_coding/main/acm2/acm_isac.h b/modules/audio_coding/main/acm2/acm_isac.h
index 31263c7..2354822 100644
--- a/modules/audio_coding/main/acm2/acm_isac.h
+++ b/modules/audio_coding/main/acm2/acm_isac.h
@@ -117,8 +117,6 @@
 
   int16_t InternalCreateEncoder() OVERRIDE;
 
-  void InternalDestructEncoderInst(void* ptr_inst) OVERRIDE;
-
   void CurrentRate(int32_t* rate_bit_per_sec) OVERRIDE;
 
   virtual AudioDecoder* Decoder(int codec_id) OVERRIDE;
diff --git a/modules/audio_coding/main/acm2/acm_opus.cc b/modules/audio_coding/main/acm2/acm_opus.cc
index 3d4f347..8991dae 100644
--- a/modules/audio_coding/main/acm2/acm_opus.cc
+++ b/modules/audio_coding/main/acm2/acm_opus.cc
@@ -57,10 +57,6 @@
   return;
 }
 
-void ACMOpus::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  return;
-}
-
 int16_t ACMOpus::SetBitRateSafe(const int32_t /*rate*/) {
   return -1;
 }
@@ -177,13 +173,6 @@
   }
 }
 
-void ACMOpus::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcOpus_EncoderFree(static_cast<OpusEncInst*>(ptr_inst));
-  }
-  return;
-}
-
 int16_t ACMOpus::SetBitRateSafe(const int32_t rate) {
   if (rate < 6000 || rate > 510000) {
     WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, unique_id_,
diff --git a/modules/audio_coding/main/acm2/acm_opus.h b/modules/audio_coding/main/acm2/acm_opus.h
index dc992bb..8ef6406 100644
--- a/modules/audio_coding/main/acm2/acm_opus.h
+++ b/modules/audio_coding/main/acm2/acm_opus.h
@@ -45,8 +45,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate) OVERRIDE
       EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_);
 
diff --git a/modules/audio_coding/main/acm2/acm_pcm16b.cc b/modules/audio_coding/main/acm2/acm_pcm16b.cc
index 89688a8..54c7860 100644
--- a/modules/audio_coding/main/acm2/acm_pcm16b.cc
+++ b/modules/audio_coding/main/acm2/acm_pcm16b.cc
@@ -41,8 +41,6 @@
 
 int16_t ACMPCM16B::InternalCreateEncoder() { return -1; }
 
-void ACMPCM16B::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 void ACMPCM16B::DestructEncoderSafe() { return; }
 
 #else  //===================== Actual Implementation =======================
@@ -77,11 +75,6 @@
   return 0;
 }
 
-void ACMPCM16B::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  // PCM has no instance.
-  return;
-}
-
 void ACMPCM16B::DestructEncoderSafe() {
   // PCM has no instance.
   encoder_exist_ = false;
diff --git a/modules/audio_coding/main/acm2/acm_pcm16b.h b/modules/audio_coding/main/acm2/acm_pcm16b.h
index de4330d..0811a17 100644
--- a/modules/audio_coding/main/acm2/acm_pcm16b.h
+++ b/modules/audio_coding/main/acm2/acm_pcm16b.h
@@ -37,8 +37,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int32_t sampling_freq_hz_;
 };
 
diff --git a/modules/audio_coding/main/acm2/acm_pcma.cc b/modules/audio_coding/main/acm2/acm_pcma.cc
index 1dd6e48..548e8fd 100644
--- a/modules/audio_coding/main/acm2/acm_pcma.cc
+++ b/modules/audio_coding/main/acm2/acm_pcma.cc
@@ -47,11 +47,6 @@
   return 0;
 }
 
-void ACMPCMA::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  // PCM has no instance.
-  return;
-}
-
 void ACMPCMA::DestructEncoderSafe() {
   // PCM has no instance.
   return;
diff --git a/modules/audio_coding/main/acm2/acm_pcma.h b/modules/audio_coding/main/acm2/acm_pcma.h
index a2d8874..d7d00b4 100644
--- a/modules/audio_coding/main/acm2/acm_pcma.h
+++ b/modules/audio_coding/main/acm2/acm_pcma.h
@@ -35,8 +35,6 @@
   void DestructEncoderSafe();
 
   int16_t InternalCreateEncoder();
-
-  void InternalDestructEncoderInst(void* ptr_inst);
 };
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_pcmu.cc b/modules/audio_coding/main/acm2/acm_pcmu.cc
index 7d2536f..5c03236 100644
--- a/modules/audio_coding/main/acm2/acm_pcmu.cc
+++ b/modules/audio_coding/main/acm2/acm_pcmu.cc
@@ -48,10 +48,6 @@
   return 0;
 }
 
-void ACMPCMU::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  // PCM has no instance.
-}
-
 void ACMPCMU::DestructEncoderSafe() {
   // PCM has no instance.
   encoder_exist_ = false;
diff --git a/modules/audio_coding/main/acm2/acm_pcmu.h b/modules/audio_coding/main/acm2/acm_pcmu.h
index 7aa83b7..dccfffd 100644
--- a/modules/audio_coding/main/acm2/acm_pcmu.h
+++ b/modules/audio_coding/main/acm2/acm_pcmu.h
@@ -36,8 +36,6 @@
       EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_);
 
   int16_t InternalCreateEncoder();
-
-  void InternalDestructEncoderInst(void* ptr_inst);
 };
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_red.cc b/modules/audio_coding/main/acm2/acm_red.cc
index 4f2c70c..05996e5 100644
--- a/modules/audio_coding/main/acm2/acm_red.cc
+++ b/modules/audio_coding/main/acm2/acm_red.cc
@@ -41,10 +41,6 @@
   return 0;
 }
 
-void ACMRED::InternalDestructEncoderInst(void* /* ptr_inst */) {
-  // RED has no instance
-}
-
 void ACMRED::DestructEncoderSafe() {
   // RED has no instance
 }
diff --git a/modules/audio_coding/main/acm2/acm_red.h b/modules/audio_coding/main/acm2/acm_red.h
index ac38170..73f904a 100644
--- a/modules/audio_coding/main/acm2/acm_red.h
+++ b/modules/audio_coding/main/acm2/acm_red.h
@@ -33,8 +33,6 @@
   void DestructEncoderSafe();
 
   int16_t InternalCreateEncoder();
-
-  void InternalDestructEncoderInst(void* ptr_inst);
 };
 
 }  // namespace acm2
diff --git a/modules/audio_coding/main/acm2/acm_speex.cc b/modules/audio_coding/main/acm2/acm_speex.cc
index c4d7628..85ead39 100644
--- a/modules/audio_coding/main/acm2/acm_speex.cc
+++ b/modules/audio_coding/main/acm2/acm_speex.cc
@@ -58,8 +58,6 @@
 
 int16_t ACMSPEEX::SetBitRateSafe(const int32_t /* rate */) { return -1; }
 
-void ACMSPEEX::InternalDestructEncoderInst(void* /* ptr_inst */) { return; }
-
 #ifdef UNUSEDSPEEX
 int16_t ACMSPEEX::EnableVBR() { return -1; }
 
@@ -250,13 +248,6 @@
   return 0;
 }
 
-void ACMSPEEX::InternalDestructEncoderInst(void* ptr_inst) {
-  if (ptr_inst != NULL) {
-    WebRtcSpeex_FreeEnc(static_cast<SPEEX_encinst_t_*>(ptr_inst));
-  }
-  return;
-}
-
 #ifdef UNUSEDSPEEX
 
 // This API is currently not in use. If requested to be able to enable/disable
diff --git a/modules/audio_coding/main/acm2/acm_speex.h b/modules/audio_coding/main/acm2/acm_speex.h
index f9cf787..931e3a9 100644
--- a/modules/audio_coding/main/acm2/acm_speex.h
+++ b/modules/audio_coding/main/acm2/acm_speex.h
@@ -38,8 +38,6 @@
 
   int16_t InternalCreateEncoder();
 
-  void InternalDestructEncoderInst(void* ptr_inst);
-
   int16_t SetBitRateSafe(const int32_t rate);
 
   int16_t EnableDTX();
diff --git a/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
index 98e2558..2212f83 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
+++ b/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
@@ -1787,15 +1787,6 @@
   return 0;
 }
 
-void AudioCodingModuleImpl::DestructEncoderInst(void* inst) {
-  CriticalSectionScoped lock(acm_crit_sect_);
-  WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceAudioCoding, id_,
-               "DestructEncoderInst()");
-  if (!HaveValidEncoder("DestructEncoderInst"))
-    return;
-  codecs_[current_send_codec_idx_]->DestructEncoderInst(inst);
-}
-
 int AudioCodingModuleImpl::RegisterVADCallback(ACMVADCallback* vad_callback) {
   WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceAudioCoding, id_,
                "RegisterVADCallback()");
diff --git a/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/modules/audio_coding/main/acm2/audio_coding_module_impl.h
index 41c2894..0bfb564 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module_impl.h
+++ b/modules/audio_coding/main/acm2/audio_coding_module_impl.h
@@ -210,8 +210,6 @@
 
   int NetworkStatistics(ACMNetworkStatistics* statistics);
 
-  void DestructEncoderInst(void* inst);
-
   // GET RED payload for iSAC. The method id called when 'this' ACM is
   // the default ACM.
   // TODO(henrik.lundin) Not used. Remove?
