Update internal SW codecs to return unique_ptrs
TBR=stefan@webrtc.org
Bug: webrtc:7925
Change-Id: I84239b071a2608d928f09b06809090eec5eafb14
Reviewed-on: https://webrtc-review.googlesource.com/21165
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20650}
diff --git a/modules/video_coding/codecs/h264/h264.cc b/modules/video_coding/codecs/h264/h264.cc
index e694940..7771b13 100644
--- a/modules/video_coding/codecs/h264/h264.cc
+++ b/modules/video_coding/codecs/h264/h264.cc
@@ -21,6 +21,7 @@
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
+#include "rtc_base/ptr_util.h"
namespace webrtc {
@@ -70,12 +71,13 @@
CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1)};
}
-H264Encoder* H264Encoder::Create(const cricket::VideoCodec& codec) {
+std::unique_ptr<H264Encoder> H264Encoder::Create(
+ const cricket::VideoCodec& codec) {
RTC_DCHECK(H264Encoder::IsSupported());
#if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264);
RTC_LOG(LS_INFO) << "Creating H264EncoderImpl.";
- return new H264EncoderImpl(codec);
+ return rtc::MakeUnique<H264EncoderImpl>(codec);
#else
RTC_NOTREACHED();
return nullptr;
@@ -86,12 +88,12 @@
return IsH264CodecSupported();
}
-H264Decoder* H264Decoder::Create() {
+std::unique_ptr<H264Decoder> H264Decoder::Create() {
RTC_DCHECK(H264Decoder::IsSupported());
#if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264);
RTC_LOG(LS_INFO) << "Creating H264DecoderImpl.";
- return new H264DecoderImpl();
+ return rtc::MakeUnique<H264DecoderImpl>();
#else
RTC_NOTREACHED();
return nullptr;
diff --git a/modules/video_coding/codecs/h264/include/h264.h b/modules/video_coding/codecs/h264/include/h264.h
index 6c93b34..e23818b 100644
--- a/modules/video_coding/codecs/h264/include/h264.h
+++ b/modules/video_coding/codecs/h264/include/h264.h
@@ -12,6 +12,7 @@
#ifndef MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
#define MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
+#include <memory>
#include <vector>
#include "media/base/codec.h"
@@ -33,7 +34,7 @@
class H264Encoder : public VideoEncoder {
public:
- static H264Encoder* Create(const cricket::VideoCodec& codec);
+ static std::unique_ptr<H264Encoder> Create(const cricket::VideoCodec& codec);
// If H.264 is supported (any implementation).
static bool IsSupported();
@@ -42,7 +43,7 @@
class H264Decoder : public VideoDecoder {
public:
- static H264Decoder* Create();
+ static std::unique_ptr<H264Decoder> Create();
static bool IsSupported();
~H264Decoder() override {}
diff --git a/modules/video_coding/codecs/h264/test/h264_impl_unittest.cc b/modules/video_coding/codecs/h264/test/h264_impl_unittest.cc
index 255b2c3..8c32df4 100644
--- a/modules/video_coding/codecs/h264/test/h264_impl_unittest.cc
+++ b/modules/video_coding/codecs/h264/test/h264_impl_unittest.cc
@@ -16,11 +16,13 @@
class TestH264Impl : public VideoCodecTest {
protected:
- VideoEncoder* CreateEncoder() override {
+ std::unique_ptr<VideoEncoder> CreateEncoder() override {
return H264Encoder::Create(cricket::VideoCodec(cricket::kH264CodecName));
}
- VideoDecoder* CreateDecoder() override { return H264Decoder::Create(); }
+ std::unique_ptr<VideoDecoder> CreateDecoder() override {
+ return H264Decoder::Create();
+ }
VideoCodec codec_settings() override {
VideoCodec codec_inst;
diff --git a/modules/video_coding/codecs/stereo/test/stereo_adapter_unittest.cc b/modules/video_coding/codecs/stereo/test/stereo_adapter_unittest.cc
index 7c16620..caef8b1 100644
--- a/modules/video_coding/codecs/stereo/test/stereo_adapter_unittest.cc
+++ b/modules/video_coding/codecs/stereo/test/stereo_adapter_unittest.cc
@@ -31,12 +31,12 @@
encoder_factory_(new webrtc::MockVideoEncoderFactory) {}
protected:
- VideoDecoder* CreateDecoder() override {
- return new StereoDecoderAdapter(decoder_factory_.get());
+ std::unique_ptr<VideoDecoder> CreateDecoder() override {
+ return rtc::MakeUnique<StereoDecoderAdapter>(decoder_factory_.get());
}
- VideoEncoder* CreateEncoder() override {
- return new StereoEncoderAdapter(encoder_factory_.get());
+ std::unique_ptr<VideoEncoder> CreateEncoder() override {
+ return rtc::MakeUnique<StereoEncoderAdapter>(encoder_factory_.get());
}
VideoCodec codec_settings() override {
@@ -62,15 +62,17 @@
private:
void SetUp() override {
EXPECT_CALL(*decoder_factory_, Die());
- VideoDecoder* decoder1 = VP9Decoder::Create();
- VideoDecoder* decoder2 = VP9Decoder::Create();
+ // The decoders/encoders will be owned by the caller of
+ // CreateVideoDecoder()/CreateVideoEncoder().
+ VideoDecoder* decoder1 = VP9Decoder::Create().release();
+ VideoDecoder* decoder2 = VP9Decoder::Create().release();
EXPECT_CALL(*decoder_factory_, CreateVideoDecoderProxy(_))
.WillOnce(Return(decoder1))
.WillOnce(Return(decoder2));
EXPECT_CALL(*encoder_factory_, Die());
- VideoEncoder* encoder1 = VP9Encoder::Create();
- VideoEncoder* encoder2 = VP9Encoder::Create();
+ VideoEncoder* encoder1 = VP9Encoder::Create().release();
+ VideoEncoder* encoder2 = VP9Encoder::Create().release();
EXPECT_CALL(*encoder_factory_, CreateVideoEncoderProxy(_))
.WillOnce(Return(encoder1))
.WillOnce(Return(encoder2));
diff --git a/modules/video_coding/codecs/test/video_codec_test.cc b/modules/video_coding/codecs/test/video_codec_test.cc
index 85d76c3..b6faae8 100644
--- a/modules/video_coding/codecs/test/video_codec_test.cc
+++ b/modules/video_coding/codecs/test/video_codec_test.cc
@@ -63,8 +63,8 @@
input_frame_.reset(new VideoFrame(video_frame_buffer, kVideoRotation_0, 0));
fclose(source_file_);
- encoder_.reset(CreateEncoder());
- decoder_.reset(CreateDecoder());
+ encoder_ = CreateEncoder();
+ decoder_ = CreateDecoder();
encoder_->RegisterEncodeCompleteCallback(&encode_complete_callback_);
decoder_->RegisterDecodeCompleteCallback(&decode_complete_callback_);
diff --git a/modules/video_coding/codecs/test/video_codec_test.h b/modules/video_coding/codecs/test/video_codec_test.h
index eb43cd0..76f5234 100644
--- a/modules/video_coding/codecs/test/video_codec_test.h
+++ b/modules/video_coding/codecs/test/video_codec_test.h
@@ -68,8 +68,8 @@
VideoCodecTest* const test_;
};
- virtual VideoEncoder* CreateEncoder() = 0;
- virtual VideoDecoder* CreateDecoder() = 0;
+ virtual std::unique_ptr<VideoEncoder> CreateEncoder() = 0;
+ virtual std::unique_ptr<VideoDecoder> CreateDecoder() = 0;
virtual VideoCodec codec_settings() = 0;
void SetUp() override;
diff --git a/modules/video_coding/codecs/vp8/include/vp8.h b/modules/video_coding/codecs/vp8/include/vp8.h
index a5d3fb3..00808e2 100644
--- a/modules/video_coding/codecs/vp8/include/vp8.h
+++ b/modules/video_coding/codecs/vp8/include/vp8.h
@@ -13,20 +13,22 @@
#ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_
#define MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_
+#include <memory>
+
#include "modules/video_coding/include/video_codec_interface.h"
namespace webrtc {
class VP8Encoder : public VideoEncoder {
public:
- static VP8Encoder* Create();
+ static std::unique_ptr<VP8Encoder> Create();
virtual ~VP8Encoder() {}
}; // end of VP8Encoder class
class VP8Decoder : public VideoDecoder {
public:
- static VP8Decoder* Create();
+ static std::unique_ptr<VP8Decoder> Create();
virtual ~VP8Decoder() {}
}; // end of VP8Decoder class
diff --git a/modules/video_coding/codecs/vp8/simulcast_test_utility.h b/modules/video_coding/codecs/vp8/simulcast_test_utility.h
index dd22af8..7f32ad2 100644
--- a/modules/video_coding/codecs/vp8/simulcast_test_utility.h
+++ b/modules/video_coding/codecs/vp8/simulcast_test_utility.h
@@ -241,12 +241,12 @@
}
protected:
- virtual VP8Encoder* CreateEncoder() = 0;
- virtual VP8Decoder* CreateDecoder() = 0;
+ virtual std::unique_ptr<VP8Encoder> CreateEncoder() = 0;
+ virtual std::unique_ptr<VP8Decoder> CreateDecoder() = 0;
void SetUp() override {
- encoder_.reset(CreateEncoder());
- decoder_.reset(CreateDecoder());
+ encoder_ = CreateEncoder();
+ decoder_ = CreateDecoder();
SetUpCodec(kDefaultTemporalLayerProfile);
}
diff --git a/modules/video_coding/codecs/vp8/simulcast_unittest.cc b/modules/video_coding/codecs/vp8/simulcast_unittest.cc
index d6b6dc5..b1dd794 100644
--- a/modules/video_coding/codecs/vp8/simulcast_unittest.cc
+++ b/modules/video_coding/codecs/vp8/simulcast_unittest.cc
@@ -15,8 +15,12 @@
class TestVp8Impl : public TestVp8Simulcast {
protected:
- VP8Encoder* CreateEncoder() override { return VP8Encoder::Create(); }
- VP8Decoder* CreateDecoder() override { return VP8Decoder::Create(); }
+ std::unique_ptr<VP8Encoder> CreateEncoder() override {
+ return VP8Encoder::Create();
+ }
+ std::unique_ptr<VP8Decoder> CreateDecoder() override {
+ return VP8Decoder::Create();
+ }
};
TEST_F(TestVp8Impl, TestKeyFrameRequestsOnAllStreams) {
diff --git a/modules/video_coding/codecs/vp8/vp8_impl.cc b/modules/video_coding/codecs/vp8/vp8_impl.cc
index f687d35..107618f 100644
--- a/modules/video_coding/codecs/vp8/vp8_impl.cc
+++ b/modules/video_coding/codecs/vp8/vp8_impl.cc
@@ -30,6 +30,7 @@
#include "modules/video_coding/include/video_codec_interface.h"
#include "rtc_base/checks.h"
#include "rtc_base/numerics/exp_filter.h"
+#include "rtc_base/ptr_util.h"
#include "rtc_base/random.h"
#include "rtc_base/timeutils.h"
#include "rtc_base/trace_event.h"
@@ -162,12 +163,12 @@
} // namespace
-VP8Encoder* VP8Encoder::Create() {
- return new VP8EncoderImpl();
+std::unique_ptr<VP8Encoder> VP8Encoder::Create() {
+ return rtc::MakeUnique<VP8EncoderImpl>();
}
-VP8Decoder* VP8Decoder::Create() {
- return new VP8DecoderImpl();
+std::unique_ptr<VP8Decoder> VP8Decoder::Create() {
+ return rtc::MakeUnique<VP8DecoderImpl>();
}
vpx_enc_frame_flags_t VP8EncoderImpl::EncodeFlags(
diff --git a/modules/video_coding/codecs/vp9/include/vp9.h b/modules/video_coding/codecs/vp9/include/vp9.h
index 53cc3c0..172e69e 100644
--- a/modules/video_coding/codecs/vp9/include/vp9.h
+++ b/modules/video_coding/codecs/vp9/include/vp9.h
@@ -12,6 +12,8 @@
#ifndef MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
#define MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
+#include <memory>
+
#include "modules/video_coding/include/video_codec_interface.h"
namespace webrtc {
@@ -19,7 +21,7 @@
class VP9Encoder : public VideoEncoder {
public:
static bool IsSupported();
- static VP9Encoder* Create();
+ static std::unique_ptr<VP9Encoder> Create();
virtual ~VP9Encoder() {}
};
@@ -27,7 +29,7 @@
class VP9Decoder : public VideoDecoder {
public:
static bool IsSupported();
- static VP9Decoder* Create();
+ static std::unique_ptr<VP9Decoder> Create();
virtual ~VP9Decoder() {}
};
diff --git a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
index 45a88b1..3718707 100644
--- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
@@ -20,9 +20,13 @@
class TestVp9Impl : public VideoCodecTest {
protected:
- VideoEncoder* CreateEncoder() override { return VP9Encoder::Create(); }
+ std::unique_ptr<VideoEncoder> CreateEncoder() override {
+ return VP9Encoder::Create();
+ }
- VideoDecoder* CreateDecoder() override { return VP9Decoder::Create(); }
+ std::unique_ptr<VideoDecoder> CreateDecoder() override {
+ return VP9Decoder::Create();
+ }
VideoCodec codec_settings() override {
VideoCodec codec_settings;
diff --git a/modules/video_coding/codecs/vp9/vp9_impl.cc b/modules/video_coding/codecs/vp9/vp9_impl.cc
index c68fea7..7c69dfd 100644
--- a/modules/video_coding/codecs/vp9/vp9_impl.cc
+++ b/modules/video_coding/codecs/vp9/vp9_impl.cc
@@ -27,6 +27,7 @@
#include "rtc_base/checks.h"
#include "rtc_base/keep_ref_until_done.h"
#include "rtc_base/logging.h"
+#include "rtc_base/ptr_util.h"
#include "rtc_base/random.h"
#include "rtc_base/timeutils.h"
#include "rtc_base/trace_event.h"
@@ -52,8 +53,8 @@
return true;
}
-VP9Encoder* VP9Encoder::Create() {
- return new VP9EncoderImpl();
+std::unique_ptr<VP9Encoder> VP9Encoder::Create() {
+ return rtc::MakeUnique<VP9EncoderImpl>();
}
void VP9EncoderImpl::EncoderOutputCodedPacketCallback(vpx_codec_cx_pkt* pkt,
@@ -841,8 +842,8 @@
return true;
}
-VP9Decoder* VP9Decoder::Create() {
- return new VP9DecoderImpl();
+std::unique_ptr<VP9Decoder> VP9Decoder::Create() {
+ return rtc::MakeUnique<VP9DecoderImpl>();
}
VP9DecoderImpl::VP9DecoderImpl()
diff --git a/modules/video_coding/codecs/vp9/vp9_noop.cc b/modules/video_coding/codecs/vp9/vp9_noop.cc
index 4522273..baa0486 100644
--- a/modules/video_coding/codecs/vp9/vp9_noop.cc
+++ b/modules/video_coding/codecs/vp9/vp9_noop.cc
@@ -22,7 +22,7 @@
return false;
}
-VP9Encoder* VP9Encoder::Create() {
+std::unique_ptr<VP9Encoder> VP9Encoder::Create() {
RTC_NOTREACHED();
return nullptr;
}
@@ -31,7 +31,7 @@
return false;
}
-VP9Decoder* VP9Decoder::Create() {
+std::unique_ptr<VP9Decoder> VP9Decoder::Create() {
RTC_NOTREACHED();
return nullptr;
}
diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc
index cfe5acf..f3af20c 100644
--- a/modules/video_coding/generic_decoder.cc
+++ b/modules/video_coding/generic_decoder.cc
@@ -182,6 +182,9 @@
return VCM_OK;
}
+VCMGenericDecoder::VCMGenericDecoder(std::unique_ptr<VideoDecoder> decoder)
+ : VCMGenericDecoder(decoder.release(), false /* isExternal */) {}
+
VCMGenericDecoder::VCMGenericDecoder(VideoDecoder* decoder, bool isExternal)
: _callback(NULL),
_frameInfos(),
diff --git a/modules/video_coding/generic_decoder.h b/modules/video_coding/generic_decoder.h
index 2c1206f..2d940d8 100644
--- a/modules/video_coding/generic_decoder.h
+++ b/modules/video_coding/generic_decoder.h
@@ -76,6 +76,7 @@
class VCMGenericDecoder {
public:
+ explicit VCMGenericDecoder(std::unique_ptr<VideoDecoder> decoder);
explicit VCMGenericDecoder(VideoDecoder* decoder, bool isExternal = false);
~VCMGenericDecoder();
diff --git a/modules/video_coding/video_sender_unittest.cc b/modules/video_coding/video_sender_unittest.cc
index 6cc4ae9..0719b16 100644
--- a/modules/video_coding/video_sender_unittest.cc
+++ b/modules/video_coding/video_sender_unittest.cc
@@ -418,7 +418,7 @@
codec_, std::unique_ptr<TemporalLayersFactory>(tl_factory)));
codec_.VP8()->tl_factory = tl_factory;
- encoder_.reset(VP8Encoder::Create());
+ encoder_ = VP8Encoder::Create();
sender_->RegisterExternalEncoder(encoder_.get(), codec_.plType, false);
EXPECT_EQ(0, sender_->RegisterSendCodec(&codec_, 1, 1200));
}