Reland "Update internal encoder factory to new interface"
This is a reland of 2c8c8e26fc58a0f2789b7a5cd2646a8319c14d3e
Original change's description:
> Update internal encoder factory to new interface
>
> TBR=stefan@webrtc.org
>
> Bug: webrtc:7925
> Change-Id: I0bb97acdf0d58a9ce531ecdd672bb17ef96360df
> Reviewed-on: https://webrtc-review.googlesource.com/21162
> Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
> Reviewed-by: Anders Carlsson <andersc@webrtc.org>
> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#20717}
TBR=andersc@webrtc.org,brandt@webrtc.org,stefan@webrtc.org
Bug: webrtc:7925
Change-Id: I0d269b3edb029e372a36c3b461a577bca2b6d0cb
Reviewed-on: https://webrtc-review.googlesource.com/24000
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20747}
diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc
index a87daf5..8087d7b 100644
--- a/media/engine/simulcast_encoder_adapter_unittest.cc
+++ b/media/engine/simulcast_encoder_adapter_unittest.cc
@@ -12,6 +12,8 @@
#include <memory>
#include <vector>
+#include "api/video_codecs/sdp_video_format.h"
+#include "api/video_codecs/video_encoder_factory.h"
#include "common_video/include/video_frame_buffer.h"
#include "media/engine/internalencoderfactory.h"
#include "media/engine/simulcast_encoder_adapter.h"
@@ -25,8 +27,7 @@
class TestSimulcastEncoderAdapter : public TestVp8Simulcast {
public:
- TestSimulcastEncoderAdapter()
- : factory_(new cricket::InternalEncoderFactory()) {}
+ TestSimulcastEncoderAdapter() : factory_(new InternalEncoderFactory()) {}
protected:
std::unique_ptr<VP8Encoder> CreateEncoder() override {
@@ -37,7 +38,7 @@
}
private:
- std::unique_ptr<cricket::WebRtcVideoEncoderFactory> factory_;
+ std::unique_ptr<VideoEncoderFactory> factory_;
};
TEST_F(TestSimulcastEncoderAdapter, TestKeyFrameRequestsOnAllStreams) {
@@ -92,8 +93,34 @@
TestVp8Simulcast::TestSpatioTemporalLayers321PatternEncoder();
}
+class MockVideoEncoder;
+
+class MockVideoEncoderFactory : public VideoEncoderFactory {
+ public:
+ std::vector<SdpVideoFormat> GetSupportedFormats() const override;
+
+ std::unique_ptr<VideoEncoder> CreateVideoEncoder(
+ const SdpVideoFormat& format) override;
+
+ CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;
+
+ const std::vector<MockVideoEncoder*>& encoders() const;
+ void SetEncoderNames(const std::vector<const char*>& encoder_names);
+ void set_init_encode_return_value(int32_t value);
+
+ void DestroyVideoEncoder(VideoEncoder* encoder);
+
+ private:
+ int32_t init_encode_return_value_ = 0;
+ std::vector<MockVideoEncoder*> encoders_;
+ std::vector<const char*> encoder_names_;
+};
+
class MockVideoEncoder : public VideoEncoder {
public:
+ explicit MockVideoEncoder(MockVideoEncoderFactory* factory)
+ : factory_(factory) {}
+
// TODO(nisse): Valid overrides commented out, because the gmock
// methods don't use any override declarations, and we want to avoid
// warnings from -Winconsistent-missing-override. See
@@ -131,7 +158,7 @@
return supports_native_handle_;
}
- virtual ~MockVideoEncoder() {}
+ virtual ~MockVideoEncoder() { factory_->DestroyVideoEncoder(this); }
const VideoCodec& codec() const { return codec_; }
@@ -158,6 +185,7 @@
MOCK_CONST_METHOD0(ImplementationName, const char*());
private:
+ MockVideoEncoderFactory* const factory_;
bool supports_native_handle_ = false;
int32_t init_encode_return_value_ = 0;
BitrateAllocation last_set_bitrate_;
@@ -166,53 +194,50 @@
EncodedImageCallback* callback_;
};
-class MockVideoEncoderFactory : public cricket::WebRtcVideoEncoderFactory {
- public:
- MockVideoEncoderFactory() {
- supported_codecs_.push_back(cricket::VideoCodec("VP8"));
- }
+std::vector<SdpVideoFormat> MockVideoEncoderFactory::GetSupportedFormats()
+ const {
+ std::vector<SdpVideoFormat> formats = {SdpVideoFormat("VP8")};
+ return formats;
+}
- const std::vector<cricket::VideoCodec>& supported_codecs() const override {
- return supported_codecs_;
- }
+std::unique_ptr<VideoEncoder> MockVideoEncoderFactory::CreateVideoEncoder(
+ const SdpVideoFormat& format) {
+ std::unique_ptr<MockVideoEncoder> encoder(
+ new ::testing::NiceMock<MockVideoEncoder>(this));
+ encoder->set_init_encode_return_value(init_encode_return_value_);
+ const char* encoder_name = encoder_names_.empty()
+ ? "codec_implementation_name"
+ : encoder_names_[encoders_.size()];
+ ON_CALL(*encoder, ImplementationName()).WillByDefault(Return(encoder_name));
+ encoders_.push_back(encoder.get());
+ return encoder;
+}
- VideoEncoder* CreateVideoEncoder(const cricket::VideoCodec& codec) override {
- MockVideoEncoder* encoder = new ::testing::NiceMock<MockVideoEncoder>();
- encoder->set_init_encode_return_value(init_encode_return_value_);
- const char* encoder_name = encoder_names_.empty()
- ? "codec_implementation_name"
- : encoder_names_[encoders_.size()];
- ON_CALL(*encoder, ImplementationName()).WillByDefault(Return(encoder_name));
- encoders_.push_back(encoder);
- return encoder;
- }
-
- void DestroyVideoEncoder(VideoEncoder* encoder) override {
- for (size_t i = 0; i < encoders_.size(); ++i) {
- if (encoders_[i] == encoder) {
- encoders_.erase(encoders_.begin() + i);
- break;
- }
+void MockVideoEncoderFactory::DestroyVideoEncoder(VideoEncoder* encoder) {
+ for (size_t i = 0; i < encoders_.size(); ++i) {
+ if (encoders_[i] == encoder) {
+ encoders_.erase(encoders_.begin() + i);
+ break;
}
- delete encoder;
}
+}
- virtual ~MockVideoEncoderFactory() {}
+VideoEncoderFactory::CodecInfo MockVideoEncoderFactory::QueryVideoEncoder(
+ const SdpVideoFormat& format) const {
+ return CodecInfo();
+}
- const std::vector<MockVideoEncoder*>& encoders() const { return encoders_; }
- void SetEncoderNames(const std::vector<const char*>& encoder_names) {
- encoder_names_ = encoder_names;
- }
- void set_init_encode_return_value(int32_t value) {
- init_encode_return_value_ = value;
- }
-
- private:
- std::vector<cricket::VideoCodec> supported_codecs_;
- int32_t init_encode_return_value_ = 0;
- std::vector<MockVideoEncoder*> encoders_;
- std::vector<const char*> encoder_names_;
-};
+const std::vector<MockVideoEncoder*>& MockVideoEncoderFactory::encoders()
+ const {
+ return encoders_;
+}
+void MockVideoEncoderFactory::SetEncoderNames(
+ const std::vector<const char*>& encoder_names) {
+ encoder_names_ = encoder_names;
+}
+void MockVideoEncoderFactory::set_init_encode_return_value(int32_t value) {
+ init_encode_return_value_ = value;
+}
class TestSimulcastEncoderAdapterFakeHelper {
public: