diff --git a/src/video_engine/test/auto_test/source/vie_autotest_base.cc b/src/video_engine/test/auto_test/source/vie_autotest_base.cc index 32dbe7c44f..adc4afbfc1 100644 --- a/src/video_engine/test/auto_test/source/vie_autotest_base.cc +++ b/src/video_engine/test/auto_test/source/vie_autotest_base.cc @@ -215,7 +215,9 @@ void ViEAutoTest::ViEBaseAPITest() { // Clean up voice engine EXPECT_EQ(0, ptrVieNetwork->Release()); EXPECT_EQ(0, ptrViEBase->SetVoiceEngine(NULL)); - EXPECT_EQ(0, ptrVoEBase->Release()); + // VoiceEngine reference counting is per object, not per interface, so + // Release should return != 0. + EXPECT_NE(0, ptrVoEBase->Release()); EXPECT_TRUE(webrtc::VoiceEngine::Delete(ptrVoE)); webrtc::ViEBase* ptrViEBase2 = webrtc::ViEBase::GetInterface(ptrViE); diff --git a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc index 220a16f930..68c44fdfb5 100644 --- a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc +++ b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc @@ -109,7 +109,7 @@ public: }; void ViEAutoTest::ViECodecStandardTest() { - TbInterfaces interfaces = TbInterfaces("ViECodecStandardTest"); + TbInterfaces interfaces("ViECodecStandardTest"); TbCaptureDevice capture_device = TbCaptureDevice(interfaces); int capture_id = capture_device.captureId; @@ -273,7 +273,7 @@ void ViEAutoTest::ViECodecExtendedTest() { ViECodecStandardTest(); ViECodecExternalCodecTest(); - TbInterfaces interfaces = TbInterfaces("ViECodecExtendedTest"); + TbInterfaces interfaces("ViECodecExtendedTest"); webrtc::ViEBase* base = interfaces.base; webrtc::ViECapture* capture = interfaces.capture; webrtc::ViERender* render = interfaces.render; diff --git a/src/video_engine/test/auto_test/source/vie_autotest_file.cc b/src/video_engine/test/auto_test/source/vie_autotest_file.cc index 83ace528cb..e82fb9c829 100644 --- a/src/video_engine/test/auto_test/source/vie_autotest_file.cc +++ b/src/video_engine/test/auto_test/source/vie_autotest_file.cc @@ -39,7 +39,7 @@ void ViEAutoTest::ViEFileStandardTest() { ViETest::Log("Starting a loopback call..."); - TbInterfaces interfaces = TbInterfaces("ViEFileStandardTest"); + TbInterfaces interfaces("ViEFileStandardTest"); webrtc::VideoEngine* ptrViE = interfaces.video_engine; webrtc::ViEBase* ptrViEBase = interfaces.base; @@ -464,8 +464,9 @@ void ViEAutoTest::ViEFileStandardTest() EXPECT_EQ(0, ptrViEBase->DisconnectAudioChannel(videoChannel)); EXPECT_EQ(0, ptrViEBase->SetVoiceEngine(NULL)); EXPECT_EQ(0, ptrVEBase->DeleteChannel(audioChannel)); - EXPECT_EQ(0, ptrVEBase->Release()); - EXPECT_EQ(0, ptrVECodec->Release()); + // VoE reference counting is per-object, so we use EXPECT_NE + EXPECT_NE(0, ptrVEBase->Release()); + EXPECT_NE(0, ptrVECodec->Release()); EXPECT_TRUE(webrtc::VoiceEngine::Delete(ptrVEEngine)); EXPECT_EQ(0, ptrViEBase->StopReceive(videoChannel)); diff --git a/src/video_engine/test/auto_test/source/vie_file_based_comparison_tests.cc b/src/video_engine/test/auto_test/source/vie_file_based_comparison_tests.cc index 4b9d31522a..2f01381dab 100644 --- a/src/video_engine/test/auto_test/source/vie_file_based_comparison_tests.cc +++ b/src/video_engine/test/auto_test/source/vie_file_based_comparison_tests.cc @@ -87,7 +87,7 @@ bool ViEFileBasedComparisonTests::TestCodecs( ViEToFileRenderer* local_file_renderer, ViEToFileRenderer* remote_file_renderer) { - TbInterfaces interfaces = TbInterfaces("TestCodecs"); + TbInterfaces interfaces("TestCodecs"); ViEFakeCamera fake_camera(interfaces.capture); if (!fake_camera.StartCameraInNewThread(i420_video_file, width, height)) { @@ -127,7 +127,7 @@ void ViEFileBasedComparisonTests::TestFullStack( ViEToFileRenderer* local_file_renderer, ViEToFileRenderer* remote_file_renderer, FrameDropDetector* frame_drop_detector) { - TbInterfaces interfaces = TbInterfaces("TestFullStack"); + TbInterfaces interfaces("TestFullStack"); // Setup camera capturing from file. ViEFakeCamera fake_camera(interfaces.capture); diff --git a/src/video_engine/test/libvietest/include/tb_interfaces.h b/src/video_engine/test/libvietest/include/tb_interfaces.h index 69d8b53600..5060abb3db 100644 --- a/src/video_engine/test/libvietest/include/tb_interfaces.h +++ b/src/video_engine/test/libvietest/include/tb_interfaces.h @@ -13,6 +13,7 @@ #include +#include "constructor_magic.h" #include "common_types.h" #include "video_engine/include/vie_base.h" #include "video_engine/include/vie_capture.h" @@ -31,7 +32,7 @@ class TbInterfaces { public: // Sets up all interfaces and creates a trace file - TbInterfaces(std::string test_name); + TbInterfaces(const std::string& test_name); ~TbInterfaces(void); webrtc::VideoEngine* video_engine; @@ -47,6 +48,9 @@ public: int LastError() { return base->LastError(); } + +private: + DISALLOW_COPY_AND_ASSIGN(TbInterfaces); }; #endif // WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_INTERFACES_H_ diff --git a/src/video_engine/test/libvietest/testbed/tb_interfaces.cc b/src/video_engine/test/libvietest/testbed/tb_interfaces.cc index 80a161c2c8..16d8902d1c 100644 --- a/src/video_engine/test/libvietest/testbed/tb_interfaces.cc +++ b/src/video_engine/test/libvietest/testbed/tb_interfaces.cc @@ -13,7 +13,17 @@ #include "gtest/gtest.h" #include "testsupport/fileutils.h" -TbInterfaces::TbInterfaces(std::string test_name) { +TbInterfaces::TbInterfaces(const std::string& test_name) : + video_engine(NULL), + base(NULL), + capture(NULL), + render(NULL), + rtp_rtcp(NULL), + codec(NULL), + network(NULL), + image_process(NULL), + encryption(NULL) +{ std::string complete_path = webrtc::test::OutputPath() + test_name + "_trace.txt"; @@ -53,15 +63,23 @@ TbInterfaces::TbInterfaces(std::string test_name) { TbInterfaces::~TbInterfaces(void) { EXPECT_EQ(0, encryption->Release()); + encryption = NULL; EXPECT_EQ(0, image_process->Release()); + image_process = NULL; EXPECT_EQ(0, codec->Release()); + codec = NULL; EXPECT_EQ(0, capture->Release()); + capture = NULL; EXPECT_EQ(0, render->Release()); + render = NULL; EXPECT_EQ(0, rtp_rtcp->Release()); + rtp_rtcp = NULL; EXPECT_EQ(0, network->Release()); + network = NULL; EXPECT_EQ(0, base->Release()); + base = NULL; EXPECT_TRUE(webrtc::VideoEngine::Delete(video_engine)) << "Since we have released all interfaces at this point, deletion " "should be successful."; - + video_engine = NULL; }