Make the destructor of AudioCodingModule public.

This allows the type to be used with a scoped_ptr. Remove all calls to
the deprecated Destroy() from tests.

R=turaj@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4731 4adac7df-926f-26a2-2b94-8c16560cd09d
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 bcf86c1..b705b4d 100644
--- a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
+++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
@@ -76,7 +76,6 @@
 class AudioCodingModule: public Module {
  protected:
   AudioCodingModule() {}
-  virtual ~AudioCodingModule() {}
 
  public:
   ///////////////////////////////////////////////////////////////////////////
@@ -88,7 +87,9 @@
   //
   static AudioCodingModule* Create(const int32_t id);
   static AudioCodingModule* Create(const int32_t id, Clock* clock);
+  virtual ~AudioCodingModule() {};
 
+  // TODO(ajm): Deprecated. Remove all calls to this unneeded method.
   static void Destroy(AudioCodingModule* module);
 
   ///////////////////////////////////////////////////////////////////////////
diff --git a/webrtc/modules/audio_coding/main/test/APITest.cc b/webrtc/modules/audio_coding/main/test/APITest.cc
index 90f88e3..cb7115e 100644
--- a/webrtc/modules/audio_coding/main/test/APITest.cc
+++ b/webrtc/modules/audio_coding/main/test/APITest.cc
@@ -55,8 +55,8 @@
 }
 
 APITest::APITest()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
       _channel_A2B(NULL),
       _channel_B2A(NULL),
       _writeToFile(true),
@@ -111,9 +111,6 @@
 }
 
 APITest::~APITest() {
-  DESTROY_ACM(_acmA);
-  DESTROY_ACM(_acmB);
-
   DELETE_POINTER(_channel_A2B);
   DELETE_POINTER(_channel_B2A);
 
@@ -141,9 +138,6 @@
 }
 
 int16_t APITest::SetUp() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
   CodecInst dummyCodec;
   int lastPayloadType = 0;
 
diff --git a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
index 6ba6186..bab207c 100644
--- a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
+++ b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
@@ -22,6 +22,7 @@
 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/modules/audio_coding/main/source/acm_common_defs.h"
 #include "webrtc/modules/audio_coding/main/test/utility.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/system_wrappers/interface/trace.h"
 #include "webrtc/test/testsupport/fileutils.h"
 
@@ -269,7 +270,7 @@
   codePars[1] = 0;
   codePars[2] = 0;
 
-  AudioCodingModule* acm = AudioCodingModule::Create(0);
+  scoped_ptr<AudioCodingModule> acm(AudioCodingModule::Create(0));
   struct CodecInst sendCodecTmp;
   numCodecs = acm->NumberOfCodecs();
 
@@ -309,15 +310,13 @@
       _receiver.codeId = codeId;
 
       rtpFile.ReadHeader();
-      _receiver.Setup(acm, &rtpFile);
+      _receiver.Setup(acm.get(), &rtpFile);
       _receiver.Run();
       _receiver.Teardown();
       rtpFile.Close();
     }
   }
 
-  AudioCodingModule::Destroy(acm);
-
   // End tracing.
   if (_testMode == 1) {
     Trace::ReturnTrace();
@@ -326,7 +325,7 @@
 
 void EncodeDecodeTest::EncodeToFile(int fileType, int codeId, int* codePars,
                                     int testMode) {
-  AudioCodingModule* acm = AudioCodingModule::Create(1);
+  scoped_ptr<AudioCodingModule> acm(AudioCodingModule::Create(1));
   RTPFile rtpFile;
   std::string fileName = webrtc::test::OutputPath() + "outFile.rtp";
   rtpFile.Open(fileName.c_str(), "wb+");
@@ -336,14 +335,13 @@
   _sender.testMode = testMode;
   _sender.codeId = codeId;
 
-  _sender.Setup(acm, &rtpFile);
+  _sender.Setup(acm.get(), &rtpFile);
   struct CodecInst sendCodecInst;
   if (acm->SendCodec(&sendCodecInst) >= 0) {
     _sender.Run();
   }
   _sender.Teardown();
   rtpFile.Close();
-  AudioCodingModule::Destroy(acm);
 }
 
 }  // namespace webrtc
diff --git a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
index 57417e3..b82378b 100644
--- a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
+++ b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
@@ -23,31 +23,27 @@
 
 #define NUM_PANN_COEFFS 10
 
-SpatialAudio::SpatialAudio(int testMode) {
-  _testMode = testMode;
+SpatialAudio::SpatialAudio(int testMode)
+    : _acmLeft(AudioCodingModule::Create(1)),
+      _acmRight(AudioCodingModule::Create(2)),
+      _acmReceiver(AudioCodingModule::Create(3)),
+      _testMode(testMode) {
 }
 
 SpatialAudio::~SpatialAudio() {
-  AudioCodingModule::Destroy(_acmLeft);
-  AudioCodingModule::Destroy(_acmRight);
-  AudioCodingModule::Destroy(_acmReceiver);
   delete _channel;
   _inFile.Close();
   _outFile.Close();
 }
 
 int16_t SpatialAudio::Setup() {
-  // Create ACMs and the Channel;
-  _acmLeft = AudioCodingModule::Create(1);
-  _acmRight = AudioCodingModule::Create(2);
-  _acmReceiver = AudioCodingModule::Create(3);
   _channel = new Channel;
 
   // Register callback for the sender side.
   CHECK_ERROR(_acmLeft->RegisterTransportCallback(_channel));
   CHECK_ERROR(_acmRight->RegisterTransportCallback(_channel));
   // Register the receiver ACM in channel
-  _channel->RegisterReceiverACM(_acmReceiver);
+  _channel->RegisterReceiverACM(_acmReceiver.get());
 
   uint16_t sampFreqHz = 32000;
 
diff --git a/webrtc/modules/audio_coding/main/test/SpatialAudio.h b/webrtc/modules/audio_coding/main/test/SpatialAudio.h
index 6cb113d..fd9c0e7 100644
--- a/webrtc/modules/audio_coding/main/test/SpatialAudio.h
+++ b/webrtc/modules/audio_coding/main/test/SpatialAudio.h
@@ -11,6 +11,7 @@
 #ifndef ACM_TEST_SPATIAL_AUDIO_H
 #define ACM_TEST_SPATIAL_AUDIO_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -32,9 +33,9 @@
   void EncodeDecode(double leftPanning, double rightPanning);
   void EncodeDecode();
 
-  AudioCodingModule* _acmLeft;
-  AudioCodingModule* _acmRight;
-  AudioCodingModule* _acmReceiver;
+  scoped_ptr<AudioCodingModule> _acmLeft;
+  scoped_ptr<AudioCodingModule> _acmRight;
+  scoped_ptr<AudioCodingModule> _acmReceiver;
   Channel* _channel;
   PCMFile _inFile;
   PCMFile _outFile;
diff --git a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
index c47a582..d6c6dc4 100644
--- a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
+++ b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
@@ -100,8 +100,8 @@
 }
 
 TestAllCodecs::TestAllCodecs(int test_mode)
-    : acm_a_(NULL),
-      acm_b_(NULL),
+    : acm_a_(AudioCodingModule::Create(0)),
+      acm_b_(AudioCodingModule::Create(1)),
       channel_a_to_b_(NULL),
       test_count_(0),
       packet_size_samples_(0),
@@ -111,14 +111,6 @@
 }
 
 TestAllCodecs::~TestAllCodecs() {
-  if (acm_a_ != NULL) {
-    AudioCodingModule::Destroy(acm_a_);
-    acm_a_ = NULL;
-  }
-  if (acm_b_ != NULL) {
-    AudioCodingModule::Destroy(acm_b_);
-    acm_b_ = NULL;
-  }
   if (channel_a_to_b_ != NULL) {
     delete channel_a_to_b_;
     channel_a_to_b_ = NULL;
@@ -135,9 +127,6 @@
                  "---------- TestAllCodecs ----------");
   }
 
-  acm_a_ = AudioCodingModule::Create(0);
-  acm_b_ = AudioCodingModule::Create(1);
-
   acm_a_->InitializeReceiver();
   acm_b_->InitializeReceiver();
 
@@ -154,7 +143,7 @@
   // Create and connect the channel
   channel_a_to_b_ = new TestPack;
   acm_a_->RegisterTransportCallback(channel_a_to_b_);
-  channel_a_to_b_->RegisterReceiverACM(acm_b_);
+  channel_a_to_b_->RegisterReceiverACM(acm_b_.get());
 
   // All codecs are tested for all allowed sampling frequencies, rates and
   // packet sizes.
@@ -736,11 +725,11 @@
   AudioCodingModule* my_acm = NULL;
   switch (side) {
     case 'A': {
-      my_acm = acm_a_;
+      my_acm = acm_a_.get();
       break;
     }
     case 'B': {
-      my_acm = acm_b_;
+      my_acm = acm_b_.get();
       break;
     }
     default: {
diff --git a/webrtc/modules/audio_coding/main/test/TestAllCodecs.h b/webrtc/modules/audio_coding/main/test/TestAllCodecs.h
index 8cde8cf..5aabcf7 100644
--- a/webrtc/modules/audio_coding/main/test/TestAllCodecs.h
+++ b/webrtc/modules/audio_coding/main/test/TestAllCodecs.h
@@ -11,6 +11,7 @@
 #ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_TEST_ALL_CODECS_H_
 #define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_TEST_ALL_CODECS_H_
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -64,8 +65,8 @@
   void DisplaySendReceiveCodec();
 
   int test_mode_;
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
   TestPack* channel_a_to_b_;
   PCMFile infile_a_;
   PCMFile outfile_b_;
diff --git a/webrtc/modules/audio_coding/main/test/TestFEC.cc b/webrtc/modules/audio_coding/main/test/TestFEC.cc
index c9a63a2..cbb3647 100644
--- a/webrtc/modules/audio_coding/main/test/TestFEC.cc
+++ b/webrtc/modules/audio_coding/main/test/TestFEC.cc
@@ -24,21 +24,13 @@
 namespace webrtc {
 
 TestFEC::TestFEC()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(0)),
+      _acmB(AudioCodingModule::Create(1)),
       _channelA2B(NULL),
       _testCntr(0) {
 }
 
 TestFEC::~TestFEC() {
-  if (_acmA != NULL) {
-    AudioCodingModule::Destroy(_acmA);
-    _acmA = NULL;
-  }
-  if (_acmB != NULL) {
-    AudioCodingModule::Destroy(_acmB);
-    _acmB = NULL;
-  }
   if (_channelA2B != NULL) {
     delete _channelA2B;
     _channelA2B = NULL;
@@ -50,9 +42,6 @@
       "audio_coding/testfile32kHz", "pcm");
   _inFileA.Open(file_name, 32000, "rb");
 
-  _acmA = AudioCodingModule::Create(0);
-  _acmB = AudioCodingModule::Create(1);
-
   ASSERT_EQ(0, _acmA->InitializeReceiver());
   ASSERT_EQ(0, _acmB->InitializeReceiver());
 
@@ -66,7 +55,7 @@
   // Create and connect the channel
   _channelA2B = new Channel;
   _acmA->RegisterTransportCallback(_channelA2B);
-  _channelA2B->RegisterReceiverACM(_acmB);
+  _channelA2B->RegisterReceiverACM(_acmB.get());
 
 #ifndef WEBRTC_CODEC_G722
   EXPECT_TRUE(false);
@@ -217,11 +206,11 @@
   AudioCodingModule* myACM;
   switch (side) {
     case 'A': {
-      myACM = _acmA;
+      myACM = _acmA.get();
       break;
     }
     case 'B': {
-      myACM = _acmB;
+      myACM = _acmB.get();
       break;
     }
     default:
diff --git a/webrtc/modules/audio_coding/main/test/TestFEC.h b/webrtc/modules/audio_coding/main/test/TestFEC.h
index dff1087..9439112 100644
--- a/webrtc/modules/audio_coding/main/test/TestFEC.h
+++ b/webrtc/modules/audio_coding/main/test/TestFEC.h
@@ -11,6 +11,7 @@
 #ifndef TEST_FEC_H
 #define TEST_FEC_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -32,8 +33,8 @@
   void Run();
   void OpenOutFile(int16_t testNumber);
   int32_t SetVAD(bool enableDTX, bool enableVAD, ACMVADMode vadMode);
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
   Channel* _channelA2B;
 
diff --git a/webrtc/modules/audio_coding/main/test/TestStereo.cc b/webrtc/modules/audio_coding/main/test/TestStereo.cc
index 9a0bf9e..65c9983 100644
--- a/webrtc/modules/audio_coding/main/test/TestStereo.cc
+++ b/webrtc/modules/audio_coding/main/test/TestStereo.cc
@@ -109,8 +109,8 @@
 }
 
 TestStereo::TestStereo(int test_mode)
-    : acm_a_(NULL),
-      acm_b_(NULL),
+    : acm_a_(AudioCodingModule::Create(0)),
+      acm_b_(AudioCodingModule::Create(1)),
       channel_a2b_(NULL),
       test_cntr_(0),
       pack_size_samp_(0),
@@ -132,14 +132,6 @@
 }
 
 TestStereo::~TestStereo() {
-  if (acm_a_ != NULL) {
-    AudioCodingModule::Destroy(acm_a_);
-    acm_a_ = NULL;
-  }
-  if (acm_b_ != NULL) {
-    AudioCodingModule::Destroy(acm_b_);
-    acm_b_ = NULL;
-  }
   if (channel_a2b_ != NULL) {
     delete channel_a2b_;
     channel_a2b_ = NULL;
@@ -168,9 +160,7 @@
   in_file_mono_->ReadStereo(false);
 
   // Create and initialize two ACMs, one for each side of a one-to-one call.
-  acm_a_ = AudioCodingModule::Create(0);
-  acm_b_ = AudioCodingModule::Create(1);
-  ASSERT_TRUE((acm_a_ != NULL) && (acm_b_ != NULL));
+  ASSERT_TRUE((acm_a_.get() != NULL) && (acm_b_.get() != NULL));
   EXPECT_EQ(0, acm_a_->InitializeReceiver());
   EXPECT_EQ(0, acm_b_->InitializeReceiver());
 
@@ -197,7 +187,7 @@
   // Create and connect the channel.
   channel_a2b_ = new TestPackStereo;
   EXPECT_EQ(0, acm_a_->RegisterTransportCallback(channel_a2b_));
-  channel_a2b_->RegisterReceiverACM(acm_b_);
+  channel_a2b_->RegisterReceiverACM(acm_b_.get());
 
   // Start with setting VAD/DTX, before we know we will send stereo.
   // Continue with setting a stereo codec as send codec and verify that
@@ -786,11 +776,11 @@
   AudioCodingModule* my_acm = NULL;
   switch (side) {
     case 'A': {
-      my_acm = acm_a_;
+      my_acm = acm_a_.get();
       break;
     }
     case 'B': {
-      my_acm = acm_b_;
+      my_acm = acm_b_.get();
       break;
     }
     default:
diff --git a/webrtc/modules/audio_coding/main/test/TestStereo.h b/webrtc/modules/audio_coding/main/test/TestStereo.h
index 38a9793..53e4f28 100644
--- a/webrtc/modules/audio_coding/main/test/TestStereo.h
+++ b/webrtc/modules/audio_coding/main/test/TestStereo.h
@@ -13,6 +13,7 @@
 
 #include <math.h>
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -83,8 +84,8 @@
 
   int test_mode_;
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
 
   TestPackStereo* channel_a2b_;
 
diff --git a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
index 35f5059..620329b 100644
--- a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
+++ b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
@@ -23,20 +23,12 @@
 namespace webrtc {
 
 TestVADDTX::TestVADDTX()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(0)),
+      _acmB(AudioCodingModule::Create(1)),
       _channelA2B(NULL) {
 }
 
 TestVADDTX::~TestVADDTX() {
-  if (_acmA != NULL) {
-    AudioCodingModule::Destroy(_acmA);
-    _acmA = NULL;
-  }
-  if (_acmB != NULL) {
-    AudioCodingModule::Destroy(_acmB);
-    _acmB = NULL;
-  }
   if (_channelA2B != NULL) {
     delete _channelA2B;
     _channelA2B = NULL;
@@ -48,9 +40,6 @@
       "audio_coding/testfile32kHz", "pcm");
   _inFileA.Open(file_name, 32000, "rb");
 
-  _acmA = AudioCodingModule::Create(0);
-  _acmB = AudioCodingModule::Create(1);
-
   EXPECT_EQ(0, _acmA->InitializeReceiver());
   EXPECT_EQ(0, _acmB->InitializeReceiver());
 
@@ -68,7 +57,7 @@
   // Create and connect the channel
   _channelA2B = new Channel;
   _acmA->RegisterTransportCallback(_channelA2B);
-  _channelA2B->RegisterReceiverACM(_acmB);
+  _channelA2B->RegisterReceiverACM(_acmB.get());
 
   _acmA->RegisterVADCallback(&_monitor);
 
@@ -207,11 +196,11 @@
   AudioCodingModule* myACM;
   switch (side) {
     case 'A': {
-      myACM = _acmA;
+      myACM = _acmA.get();
       break;
     }
     case 'B': {
-      myACM = _acmB;
+      myACM = _acmB.get();
       break;
     }
     default:
diff --git a/webrtc/modules/audio_coding/main/test/TestVADDTX.h b/webrtc/modules/audio_coding/main/test/TestVADDTX.h
index d1421ca..d55bdee 100644
--- a/webrtc/modules/audio_coding/main/test/TestVADDTX.h
+++ b/webrtc/modules/audio_coding/main/test/TestVADDTX.h
@@ -11,6 +11,7 @@
 #ifndef TEST_VAD_DTX_H
 #define TEST_VAD_DTX_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -64,8 +65,8 @@
   void SetVAD(bool statusDTX, bool statusVAD, int16_t vadMode);
   VADDTXstruct GetVAD();
   int16_t VerifyTest();
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
   Channel* _channelA2B;
 
diff --git a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
index 6b058fd..1b74a95 100644
--- a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
+++ b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
@@ -30,16 +30,15 @@
 
 #define MAX_FILE_NAME_LENGTH_BYTE 500
 
-TwoWayCommunication::TwoWayCommunication(int testMode) {
-  _testMode = testMode;
+TwoWayCommunication::TwoWayCommunication(int testMode)
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
+      _acmRefA(AudioCodingModule::Create(3)),
+      _acmRefB(AudioCodingModule::Create(4)),
+      _testMode(testMode) {
 }
 
 TwoWayCommunication::~TwoWayCommunication() {
-  AudioCodingModule::Destroy(_acmA);
-  AudioCodingModule::Destroy(_acmB);
-  AudioCodingModule::Destroy(_acmRefA);
-  AudioCodingModule::Destroy(_acmRefB);
-
   delete _channel_A2B;
   delete _channel_B2A;
   delete _channelRef_A2B;
@@ -62,7 +61,7 @@
 
 void TwoWayCommunication::ChooseCodec(uint8_t* codecID_A,
                                       uint8_t* codecID_B) {
-  AudioCodingModule* tmpACM = AudioCodingModule::Create(0);
+  scoped_ptr<AudioCodingModule> tmpACM(AudioCodingModule::Create(0));
   uint8_t noCodec = tmpACM->NumberOfCodecs();
   CodecInst codecInst;
   printf("List of Supported Codecs\n");
@@ -80,17 +79,10 @@
   EXPECT_TRUE(fgets(myStr, 10, stdin) != NULL);
   *codecID_B = (uint8_t) atoi(myStr);
 
-  AudioCodingModule::Destroy(tmpACM);
   printf("\n");
 }
 
 void TwoWayCommunication::SetUp() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
-  _acmRefA = AudioCodingModule::Create(3);
-  _acmRefB = AudioCodingModule::Create(4);
-
   uint8_t codecID_A;
   uint8_t codecID_B;
 
@@ -164,20 +156,20 @@
   //--- Set A-to-B channel
   _channel_A2B = new Channel;
   _acmA->RegisterTransportCallback(_channel_A2B);
-  _channel_A2B->RegisterReceiverACM(_acmB);
+  _channel_A2B->RegisterReceiverACM(_acmB.get());
   //--- Do the same for the reference
   _channelRef_A2B = new Channel;
   _acmRefA->RegisterTransportCallback(_channelRef_A2B);
-  _channelRef_A2B->RegisterReceiverACM(_acmRefB);
+  _channelRef_A2B->RegisterReceiverACM(_acmRefB.get());
 
   //--- Set B-to-A channel
   _channel_B2A = new Channel;
   _acmB->RegisterTransportCallback(_channel_B2A);
-  _channel_B2A->RegisterReceiverACM(_acmA);
+  _channel_B2A->RegisterReceiverACM(_acmA.get());
   //--- Do the same for reference
   _channelRef_B2A = new Channel;
   _acmRefB->RegisterTransportCallback(_channelRef_B2A);
-  _channelRef_B2A->RegisterReceiverACM(_acmRefA);
+  _channelRef_B2A->RegisterReceiverACM(_acmRefA.get());
 
   // The clicks will be more obvious when we
   // are in FAX mode.
@@ -186,12 +178,6 @@
 }
 
 void TwoWayCommunication::SetUpAutotest() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
-  _acmRefA = AudioCodingModule::Create(3);
-  _acmRefB = AudioCodingModule::Create(4);
-
   CodecInst codecInst_A;
   CodecInst codecInst_B;
   CodecInst dummyCodec;
@@ -252,20 +238,20 @@
   //--- Set A-to-B channel
   _channel_A2B = new Channel;
   _acmA->RegisterTransportCallback(_channel_A2B);
-  _channel_A2B->RegisterReceiverACM(_acmB);
+  _channel_A2B->RegisterReceiverACM(_acmB.get());
   //--- Do the same for the reference
   _channelRef_A2B = new Channel;
   _acmRefA->RegisterTransportCallback(_channelRef_A2B);
-  _channelRef_A2B->RegisterReceiverACM(_acmRefB);
+  _channelRef_A2B->RegisterReceiverACM(_acmRefB.get());
 
   //--- Set B-to-A channel
   _channel_B2A = new Channel;
   _acmB->RegisterTransportCallback(_channel_B2A);
-  _channel_B2A->RegisterReceiverACM(_acmA);
+  _channel_B2A->RegisterReceiverACM(_acmA.get());
   //--- Do the same for reference
   _channelRef_B2A = new Channel;
   _acmRefB->RegisterTransportCallback(_channelRef_B2A);
-  _channelRef_B2A->RegisterReceiverACM(_acmRefA);
+  _channelRef_B2A->RegisterReceiverACM(_acmRefA.get());
 
   // The clicks will be more obvious when we
   // are in FAX mode.
diff --git a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.h b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.h
index abe0d9b..fe0ed2a 100644
--- a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.h
+++ b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.h
@@ -11,6 +11,7 @@
 #ifndef TWO_WAY_COMMUNICATION_H
 #define TWO_WAY_COMMUNICATION_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -30,11 +31,11 @@
   void SetUp();
   void SetUpAutotest();
 
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
-  AudioCodingModule* _acmRefA;
-  AudioCodingModule* _acmRefB;
+  scoped_ptr<AudioCodingModule> _acmRefA;
+  scoped_ptr<AudioCodingModule> _acmRefB;
 
   Channel* _channel_A2B;
   Channel* _channel_B2A;
diff --git a/webrtc/modules/audio_coding/main/test/delay_test.cc b/webrtc/modules/audio_coding/main/test/delay_test.cc
index d647b1f..57a912a 100644
--- a/webrtc/modules/audio_coding/main/test/delay_test.cc
+++ b/webrtc/modules/audio_coding/main/test/delay_test.cc
@@ -61,8 +61,8 @@
  public:
 
   DelayTest()
-      : acm_a_(NULL),
-        acm_b_(NULL),
+      : acm_a_(AudioCodingModule::Create(0)),
+        acm_b_(AudioCodingModule::Create(1)),
         channel_a2b_(NULL),
         test_cntr_(0),
         encoding_sample_rate_hz_(8000) {}
@@ -70,14 +70,6 @@
   ~DelayTest() {}
 
   void TearDown() {
-    if (acm_a_ != NULL) {
-      AudioCodingModule::Destroy(acm_a_);
-      acm_a_ = NULL;
-    }
-    if (acm_b_ != NULL) {
-      AudioCodingModule::Destroy(acm_b_);
-      acm_b_ = NULL;
-    }
     if (channel_a2b_ != NULL) {
       delete channel_a2b_;
       channel_a2b_ = NULL;
@@ -91,8 +83,6 @@
     if (FLAGS_input_file.size() > 0)
       file_name = FLAGS_input_file;
     in_file_a_.Open(file_name, 32000, "rb");
-    acm_a_ = AudioCodingModule::Create(0);
-    acm_b_ = AudioCodingModule::Create(1);
     acm_a_->InitializeReceiver();
     acm_b_->InitializeReceiver();
     if (FLAGS_init_delay > 0) {
@@ -122,7 +112,7 @@
     // Create and connect the channel
     channel_a2b_ = new Channel;
     acm_a_->RegisterTransportCallback(channel_a2b_);
-    channel_a2b_->RegisterReceiverACM(acm_b_);
+    channel_a2b_->RegisterReceiverACM(acm_b_.get());
   }
 
   void Perform(const Config* config, size_t num_tests, int duration_sec,
@@ -229,8 +219,8 @@
     out_file_b_.Close();
   }
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
 
   Channel* channel_a2b_;
 
@@ -256,9 +246,3 @@
 }
 }  // namespace
 }  // namespace webrtc
-
-int main(int argc, char* argv[]) {
-  using namespace webrtc;
-  google::ParseCommandLineFlags(&argc, &argv, true);
-  RunTest();
-}
diff --git a/webrtc/modules/audio_coding/main/test/dual_stream_unittest.cc b/webrtc/modules/audio_coding/main/test/dual_stream_unittest.cc
index 7430ff8..d8cdce5 100644
--- a/webrtc/modules/audio_coding/main/test/dual_stream_unittest.cc
+++ b/webrtc/modules/audio_coding/main/test/dual_stream_unittest.cc
@@ -53,9 +53,9 @@
     kMaxNumStreams
   };
 
-  AudioCodingModule* acm_dual_stream_;
-  AudioCodingModule* acm_ref_primary_;
-  AudioCodingModule* acm_ref_secondary_;
+  scoped_ptr<AudioCodingModule> acm_dual_stream_;
+  scoped_ptr<AudioCodingModule> acm_ref_primary_;
+  scoped_ptr<AudioCodingModule> acm_ref_secondary_;
 
   CodecInst primary_encoder_;
   CodecInst secondary_encoder_;
@@ -98,9 +98,6 @@
 }
 
 DualStreamTest::~DualStreamTest() {
-  AudioCodingModule::Destroy(acm_dual_stream_);
-  AudioCodingModule::Destroy(acm_ref_primary_);
-  AudioCodingModule::Destroy(acm_ref_secondary_);
 }
 
 void DualStreamTest::PopulateCodecInstances(int frame_size_primary_ms,
@@ -138,9 +135,9 @@
 void DualStreamTest::InitializeSender(int frame_size_primary_samples,
                                       int num_channels_primary,
                                       int sampling_rate) {
-  ASSERT_TRUE(acm_dual_stream_ != NULL);
-  ASSERT_TRUE(acm_ref_primary_ != NULL);
-  ASSERT_TRUE(acm_ref_secondary_ != NULL);
+  ASSERT_TRUE(acm_dual_stream_.get() != NULL);
+  ASSERT_TRUE(acm_ref_primary_.get() != NULL);
+  ASSERT_TRUE(acm_ref_secondary_.get() != NULL);
 
   ASSERT_EQ(0, acm_dual_stream_->InitializeSender());
   ASSERT_EQ(0, acm_ref_primary_->InitializeSender());
diff --git a/webrtc/modules/audio_coding/main/test/iSACTest.cc b/webrtc/modules/audio_coding/main/test/iSACTest.cc
index e8b77ac..50809fc 100644
--- a/webrtc/modules/audio_coding/main/test/iSACTest.cc
+++ b/webrtc/modules/audio_coding/main/test/iSACTest.cc
@@ -21,7 +21,7 @@
 #else
 #include <sys/time.h>
 #include <time.h>
-#endif 
+#endif
 
 #include "webrtc/modules/audio_coding/main/source/acm_common_defs.h"
 #include "webrtc/modules/audio_coding/main/test/utility.h"
@@ -86,14 +86,13 @@
   return 0;
 }
 
-ISACTest::ISACTest(int testMode) {
-  _testMode = testMode;
+ISACTest::ISACTest(int testMode)
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
+      _testMode(testMode) {
 }
 
 ISACTest::~ISACTest() {
-  AudioCodingModule::Destroy(_acmA);
-  AudioCodingModule::Destroy(_acmB);
-
   delete _channel_A2B;
   delete _channel_B2A;
 }
@@ -102,9 +101,6 @@
   int codecCntr;
   CodecInst codecParam;
 
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
   for (codecCntr = 0; codecCntr < AudioCodingModule::NumberOfCodecs();
       codecCntr++) {
     EXPECT_EQ(0, AudioCodingModule::Codec(codecCntr, &codecParam));
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 3a08dea..a731808 100644
--- a/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
+++ b/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
@@ -46,8 +46,8 @@
  protected:
 
   InitialPlayoutDelayTest()
-      : acm_a_(NULL),
-        acm_b_(NULL),
+      : acm_a_(AudioCodingModule::Create(0)),
+        acm_b_(AudioCodingModule::Create(1)),
         channel_a2b_(NULL) {
   }
 
@@ -55,14 +55,6 @@
   }
 
   void TearDown() {
-    if (acm_a_ != NULL) {
-      AudioCodingModule::Destroy(acm_a_);
-      acm_a_ = NULL;
-    }
-    if (acm_b_ != NULL) {
-      AudioCodingModule::Destroy(acm_b_);
-      acm_b_ = NULL;
-    }
     if (channel_a2b_ != NULL) {
       delete channel_a2b_;
       channel_a2b_ = NULL;
@@ -70,9 +62,6 @@
   }
 
   void SetUp() {
-    acm_a_ = AudioCodingModule::Create(0);
-    acm_b_ = AudioCodingModule::Create(1);
-
     acm_b_->InitializeReceiver();
     acm_a_->InitializeReceiver();
 
@@ -90,7 +79,7 @@
     // Create and connect the channel
     channel_a2b_ = new Channel;
     acm_a_->RegisterTransportCallback(channel_a2b_);
-    channel_a2b_->RegisterReceiverACM(acm_b_);
+    channel_a2b_->RegisterReceiverACM(acm_b_.get());
   }
 
   void Run(CodecInst codec, int initial_delay_ms) {
@@ -125,8 +114,8 @@
     ASSERT_LE(num_frames * 10, initial_delay_ms + 100);
   }
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
   Channel* channel_a2b_;
 };
 
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 543d901..398a6b3 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
@@ -18,6 +18,7 @@
 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
 #include "webrtc/modules/interface/module_common_types.h"
 #include "webrtc/system_wrappers/interface/clock.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/test/testsupport/fileutils.h"
 
 // Codec.
@@ -75,8 +76,8 @@
     ASSERT_TRUE(sender_clock_ != NULL);
     ASSERT_TRUE(receiver_clock_ != NULL);
 
-    ASSERT_TRUE(send_acm_ != NULL);
-    ASSERT_TRUE(receive_acm_ != NULL);
+    ASSERT_TRUE(send_acm_.get() != NULL);
+    ASSERT_TRUE(receive_acm_.get() != NULL);
     ASSERT_TRUE(channel_ != NULL);
 
     ASSERT_TRUE(seq_num_fid_ != NULL);
@@ -99,7 +100,7 @@
     samples_in_1ms_ = codec.plfreq / 1000;
     num_10ms_in_codec_frame_ = codec.pacsize / (codec.plfreq / 100);
 
-    channel_->RegisterReceiverACM(receive_acm_);
+    channel_->RegisterReceiverACM(receive_acm_.get());
     send_acm_->RegisterTransportCallback(channel_);
 
     if (FLAGS_input.size() == 0) {
@@ -195,8 +196,6 @@
   }
 
   void TearDown() {
-    AudioCodingModule::Destroy(send_acm_);
-    AudioCodingModule::Destroy(receive_acm_);
     delete channel_;
 
     fclose(seq_num_fid_);
@@ -250,8 +249,8 @@
   SimulatedClock* sender_clock_;
   SimulatedClock* receiver_clock_;
 
-  AudioCodingModule* send_acm_;
-  AudioCodingModule* receive_acm_;
+  scoped_ptr<AudioCodingModule> send_acm_;
+  scoped_ptr<AudioCodingModule> receive_acm_;
   Channel* channel_;
 
   FILE* seq_num_fid_;  // Input (text), one sequence number per line.
diff --git a/webrtc/modules/audio_coding/main/test/opus_test.cc b/webrtc/modules/audio_coding/main/test/opus_test.cc
index fb72cbc..5116934 100644
--- a/webrtc/modules/audio_coding/main/test/opus_test.cc
+++ b/webrtc/modules/audio_coding/main/test/opus_test.cc
@@ -29,7 +29,7 @@
 namespace webrtc {
 
 OpusTest::OpusTest()
-    : acm_receiver_(NULL),
+    : acm_receiver_(AudioCodingModule::Create(0)),
       channel_a2b_(NULL),
       counter_(0),
       payload_type_(255),
@@ -37,10 +37,6 @@
 }
 
 OpusTest::~OpusTest() {
-  if (acm_receiver_ != NULL) {
-    AudioCodingModule::Destroy(acm_receiver_);
-    acm_receiver_ = NULL;
-  }
   if (channel_a2b_ != NULL) {
     delete channel_a2b_;
     channel_a2b_ = NULL;
@@ -93,9 +89,7 @@
   ASSERT_GT(WebRtcOpus_DecoderInitNew(opus_mono_decoder_), -1);
   ASSERT_GT(WebRtcOpus_DecoderInitNew(opus_stereo_decoder_), -1);
 
-  // Create and initialize one ACM, to be used as receiver.
-  acm_receiver_ = AudioCodingModule::Create(0);
-  ASSERT_TRUE(acm_receiver_ != NULL);
+  ASSERT_TRUE(acm_receiver_.get() != NULL);
   EXPECT_EQ(0, acm_receiver_->InitializeReceiver());
 
   // Register Opus stereo as receiving codec.
@@ -107,7 +101,7 @@
 
   // Create and connect the channel.
   channel_a2b_ = new TestPackStereo;
-  channel_a2b_->RegisterReceiverACM(acm_receiver_);
+  channel_a2b_->RegisterReceiverACM(acm_receiver_.get());
 
   //
   // Test Stereo.
diff --git a/webrtc/modules/audio_coding/main/test/opus_test.h b/webrtc/modules/audio_coding/main/test/opus_test.h
index b4526b2..ca0da9e 100644
--- a/webrtc/modules/audio_coding/main/test/opus_test.h
+++ b/webrtc/modules/audio_coding/main/test/opus_test.h
@@ -19,6 +19,7 @@
 #include "webrtc/modules/audio_coding/main/test/Channel.h"
 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
 #include "webrtc/modules/audio_coding/main/test/TestStereo.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 
 namespace webrtc {
 
@@ -34,7 +35,7 @@
 
   void OpenOutFile(int test_number);
 
-  AudioCodingModule* acm_receiver_;
+  scoped_ptr<AudioCodingModule> acm_receiver_;
   TestPackStereo* channel_a2b_;
   PCMFile in_file_stereo_;
   PCMFile in_file_mono_;
diff --git a/webrtc/modules/audio_coding/main/test/target_delay_unittest.cc b/webrtc/modules/audio_coding/main/test/target_delay_unittest.cc
index e81cbac..9d23ec6 100644
--- a/webrtc/modules/audio_coding/main/test/target_delay_unittest.cc
+++ b/webrtc/modules/audio_coding/main/test/target_delay_unittest.cc
@@ -12,6 +12,7 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/modules/interface/module_common_types.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/system_wrappers/interface/sleep.h"
 #include "webrtc/test/testsupport/fileutils.h"
 #include "webrtc/test/testsupport/gtest_disable.h"
@@ -32,11 +33,10 @@
       : acm_(AudioCodingModule::Create(0)) {}
 
   ~TargetDelayTest() {
-    AudioCodingModule::Destroy(acm_);
   }
 
   void SetUp() {
-    EXPECT_TRUE(acm_ != NULL);
+    EXPECT_TRUE(acm_.get() != NULL);
 
     CodecInst codec;
     ASSERT_EQ(0, AudioCodingModule::Codec("L16", &codec, kSampleRateHz, 1));
@@ -108,7 +108,7 @@
     return acm_->LeastRequiredDelayMs();
   }
 
-  AudioCodingModule* acm_;
+  scoped_ptr<AudioCodingModule> acm_;
   WebRtcRTPHeader rtp_info_;
 };
 
diff --git a/webrtc/modules/audio_coding/main/test/utility.h b/webrtc/modules/audio_coding/main/test/utility.h
index 4e3d525..13c3e2c 100644
--- a/webrtc/modules/audio_coding/main/test/utility.h
+++ b/webrtc/modules/audio_coding/main/test/utility.h
@@ -52,14 +52,6 @@
     }                                                                          \
   } while(0)
 
-#define DESTROY_ACM(acm)                                                       \
-  do {                                                                         \
-    if (acm != NULL) {                                                         \
-      AudioCodingModule::Destroy(acm);                                         \
-      acm = NULL;                                                              \
-    }                                                                          \
-  } while(0)
-
 #define DELETE_POINTER(p)                                                      \
   do {                                                                         \
     if (p != NULL) {                                                           \