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}
This commit is contained in:
Magnus Jedvert 2017-11-11 13:28:49 +01:00 committed by Commit Bot
parent 8f91f1ee71
commit 4fe6adc06a
23 changed files with 100 additions and 121 deletions

View file

@ -33,15 +33,15 @@ std::vector<SdpVideoFormat> InternalDecoderFactory::GetSupportedFormats()
std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder( std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder(
const SdpVideoFormat& format) { const SdpVideoFormat& format) {
if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName))
return std::unique_ptr<VideoDecoder>(VP8Decoder::Create()); return VP8Decoder::Create();
if (cricket::CodecNamesEq(format.name, cricket::kVp9CodecName)) { if (cricket::CodecNamesEq(format.name, cricket::kVp9CodecName)) {
RTC_DCHECK(VP9Decoder::IsSupported()); RTC_DCHECK(VP9Decoder::IsSupported());
return std::unique_ptr<VideoDecoder>(VP9Decoder::Create()); return VP9Decoder::Create();
} }
if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName))
return std::unique_ptr<VideoDecoder>(H264Decoder::Create()); return H264Decoder::Create();
RTC_LOG(LS_ERROR) << "Trying to create decoder for unsupported format"; RTC_LOG(LS_ERROR) << "Trying to create decoder for unsupported format";
return nullptr; return nullptr;

View file

@ -64,11 +64,11 @@ webrtc::VideoEncoder* InternalEncoderFactory::CreateVideoEncoder(
webrtc::PayloadStringToCodecType(codec.name); webrtc::PayloadStringToCodecType(codec.name);
switch (codec_type) { switch (codec_type) {
case webrtc::kVideoCodecH264: case webrtc::kVideoCodecH264:
return webrtc::H264Encoder::Create(codec); return webrtc::H264Encoder::Create(codec).release();
case webrtc::kVideoCodecVP8: case webrtc::kVideoCodecVP8:
return webrtc::VP8Encoder::Create(); return webrtc::VP8Encoder::Create().release();
case webrtc::kVideoCodecVP9: case webrtc::kVideoCodecVP9:
return webrtc::VP9Encoder::Create(); return webrtc::VP9Encoder::Create().release();
default: default:
return nullptr; return nullptr;
} }

View file

@ -13,9 +13,11 @@
#include <vector> #include <vector>
#include "common_video/include/video_frame_buffer.h" #include "common_video/include/video_frame_buffer.h"
#include "media/engine/internalencoderfactory.h"
#include "media/engine/simulcast_encoder_adapter.h" #include "media/engine/simulcast_encoder_adapter.h"
#include "modules/video_coding/codecs/vp8/simulcast_test_utility.h" #include "modules/video_coding/codecs/vp8/simulcast_test_utility.h"
#include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/include/video_codec_interface.h"
#include "rtc_base/ptr_util.h"
#include "test/gmock.h" #include "test/gmock.h"
namespace webrtc { namespace webrtc {
@ -23,39 +25,19 @@ namespace testing {
class TestSimulcastEncoderAdapter : public TestVp8Simulcast { class TestSimulcastEncoderAdapter : public TestVp8Simulcast {
public: public:
TestSimulcastEncoderAdapter() : factory_(new Vp8EncoderFactory()) {} TestSimulcastEncoderAdapter()
: factory_(new cricket::InternalEncoderFactory()) {}
protected: protected:
class Vp8EncoderFactory : public cricket::WebRtcVideoEncoderFactory { std::unique_ptr<VP8Encoder> CreateEncoder() override {
public: return rtc::MakeUnique<SimulcastEncoderAdapter>(factory_.get());
Vp8EncoderFactory() { }
supported_codecs_.push_back(cricket::VideoCodec("VP8")); std::unique_ptr<VP8Decoder> CreateDecoder() override {
} return VP8Decoder::Create();
const std::vector<cricket::VideoCodec>& supported_codecs() const override {
return supported_codecs_;
}
VideoEncoder* CreateVideoEncoder(
const cricket::VideoCodec& codec) override {
return VP8Encoder::Create();
}
void DestroyVideoEncoder(VideoEncoder* encoder) override { delete encoder; }
virtual ~Vp8EncoderFactory() {}
private:
std::vector<cricket::VideoCodec> supported_codecs_;
};
VP8Encoder* CreateEncoder() override {
return new SimulcastEncoderAdapter(factory_.get());
} }
VP8Decoder* CreateDecoder() override { return VP8Decoder::Create(); }
private: private:
std::unique_ptr<Vp8EncoderFactory> factory_; std::unique_ptr<cricket::WebRtcVideoEncoderFactory> factory_;
}; };
TEST_F(TestSimulcastEncoderAdapter, TestKeyFrameRequestsOnAllStreams) { TEST_F(TestSimulcastEncoderAdapter, TestKeyFrameRequestsOnAllStreams) {

View file

@ -21,6 +21,7 @@
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "rtc_base/ptr_util.h"
namespace webrtc { namespace webrtc {
@ -70,12 +71,13 @@ std::vector<SdpVideoFormat> SupportedH264Codecs() {
CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1)}; 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()); RTC_DCHECK(H264Encoder::IsSupported());
#if defined(WEBRTC_USE_H264) #if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264); RTC_CHECK(g_rtc_use_h264);
RTC_LOG(LS_INFO) << "Creating H264EncoderImpl."; RTC_LOG(LS_INFO) << "Creating H264EncoderImpl.";
return new H264EncoderImpl(codec); return rtc::MakeUnique<H264EncoderImpl>(codec);
#else #else
RTC_NOTREACHED(); RTC_NOTREACHED();
return nullptr; return nullptr;
@ -86,12 +88,12 @@ bool H264Encoder::IsSupported() {
return IsH264CodecSupported(); return IsH264CodecSupported();
} }
H264Decoder* H264Decoder::Create() { std::unique_ptr<H264Decoder> H264Decoder::Create() {
RTC_DCHECK(H264Decoder::IsSupported()); RTC_DCHECK(H264Decoder::IsSupported());
#if defined(WEBRTC_USE_H264) #if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264); RTC_CHECK(g_rtc_use_h264);
RTC_LOG(LS_INFO) << "Creating H264DecoderImpl."; RTC_LOG(LS_INFO) << "Creating H264DecoderImpl.";
return new H264DecoderImpl(); return rtc::MakeUnique<H264DecoderImpl>();
#else #else
RTC_NOTREACHED(); RTC_NOTREACHED();
return nullptr; return nullptr;

View file

@ -12,6 +12,7 @@
#ifndef MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_ #ifndef MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
#define MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_ #define MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
#include <memory>
#include <vector> #include <vector>
#include "media/base/codec.h" #include "media/base/codec.h"
@ -33,7 +34,7 @@ std::vector<SdpVideoFormat> SupportedH264Codecs();
class H264Encoder : public VideoEncoder { class H264Encoder : public VideoEncoder {
public: 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). // If H.264 is supported (any implementation).
static bool IsSupported(); static bool IsSupported();
@ -42,7 +43,7 @@ class H264Encoder : public VideoEncoder {
class H264Decoder : public VideoDecoder { class H264Decoder : public VideoDecoder {
public: public:
static H264Decoder* Create(); static std::unique_ptr<H264Decoder> Create();
static bool IsSupported(); static bool IsSupported();
~H264Decoder() override {} ~H264Decoder() override {}

View file

@ -16,11 +16,13 @@ namespace webrtc {
class TestH264Impl : public VideoCodecTest { class TestH264Impl : public VideoCodecTest {
protected: protected:
VideoEncoder* CreateEncoder() override { std::unique_ptr<VideoEncoder> CreateEncoder() override {
return H264Encoder::Create(cricket::VideoCodec(cricket::kH264CodecName)); 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_settings() override {
VideoCodec codec_inst; VideoCodec codec_inst;

View file

@ -31,12 +31,12 @@ class TestStereoAdapter : public VideoCodecTest {
encoder_factory_(new webrtc::MockVideoEncoderFactory) {} encoder_factory_(new webrtc::MockVideoEncoderFactory) {}
protected: protected:
VideoDecoder* CreateDecoder() override { std::unique_ptr<VideoDecoder> CreateDecoder() override {
return new StereoDecoderAdapter(decoder_factory_.get()); return rtc::MakeUnique<StereoDecoderAdapter>(decoder_factory_.get());
} }
VideoEncoder* CreateEncoder() override { std::unique_ptr<VideoEncoder> CreateEncoder() override {
return new StereoEncoderAdapter(encoder_factory_.get()); return rtc::MakeUnique<StereoEncoderAdapter>(encoder_factory_.get());
} }
VideoCodec codec_settings() override { VideoCodec codec_settings() override {
@ -62,15 +62,17 @@ class TestStereoAdapter : public VideoCodecTest {
private: private:
void SetUp() override { void SetUp() override {
EXPECT_CALL(*decoder_factory_, Die()); EXPECT_CALL(*decoder_factory_, Die());
VideoDecoder* decoder1 = VP9Decoder::Create(); // The decoders/encoders will be owned by the caller of
VideoDecoder* decoder2 = VP9Decoder::Create(); // CreateVideoDecoder()/CreateVideoEncoder().
VideoDecoder* decoder1 = VP9Decoder::Create().release();
VideoDecoder* decoder2 = VP9Decoder::Create().release();
EXPECT_CALL(*decoder_factory_, CreateVideoDecoderProxy(_)) EXPECT_CALL(*decoder_factory_, CreateVideoDecoderProxy(_))
.WillOnce(Return(decoder1)) .WillOnce(Return(decoder1))
.WillOnce(Return(decoder2)); .WillOnce(Return(decoder2));
EXPECT_CALL(*encoder_factory_, Die()); EXPECT_CALL(*encoder_factory_, Die());
VideoEncoder* encoder1 = VP9Encoder::Create(); VideoEncoder* encoder1 = VP9Encoder::Create().release();
VideoEncoder* encoder2 = VP9Encoder::Create(); VideoEncoder* encoder2 = VP9Encoder::Create().release();
EXPECT_CALL(*encoder_factory_, CreateVideoEncoderProxy(_)) EXPECT_CALL(*encoder_factory_, CreateVideoEncoderProxy(_))
.WillOnce(Return(encoder1)) .WillOnce(Return(encoder1))
.WillOnce(Return(encoder2)); .WillOnce(Return(encoder2));

View file

@ -63,8 +63,8 @@ void VideoCodecTest::SetUp() {
input_frame_.reset(new VideoFrame(video_frame_buffer, kVideoRotation_0, 0)); input_frame_.reset(new VideoFrame(video_frame_buffer, kVideoRotation_0, 0));
fclose(source_file_); fclose(source_file_);
encoder_.reset(CreateEncoder()); encoder_ = CreateEncoder();
decoder_.reset(CreateDecoder()); decoder_ = CreateDecoder();
encoder_->RegisterEncodeCompleteCallback(&encode_complete_callback_); encoder_->RegisterEncodeCompleteCallback(&encode_complete_callback_);
decoder_->RegisterDecodeCompleteCallback(&decode_complete_callback_); decoder_->RegisterDecodeCompleteCallback(&decode_complete_callback_);

View file

@ -68,8 +68,8 @@ class VideoCodecTest : public ::testing::Test {
VideoCodecTest* const test_; VideoCodecTest* const test_;
}; };
virtual VideoEncoder* CreateEncoder() = 0; virtual std::unique_ptr<VideoEncoder> CreateEncoder() = 0;
virtual VideoDecoder* CreateDecoder() = 0; virtual std::unique_ptr<VideoDecoder> CreateDecoder() = 0;
virtual VideoCodec codec_settings() = 0; virtual VideoCodec codec_settings() = 0;
void SetUp() override; void SetUp() override;

View file

@ -13,20 +13,22 @@
#ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ #ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_
#define 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" #include "modules/video_coding/include/video_codec_interface.h"
namespace webrtc { namespace webrtc {
class VP8Encoder : public VideoEncoder { class VP8Encoder : public VideoEncoder {
public: public:
static VP8Encoder* Create(); static std::unique_ptr<VP8Encoder> Create();
virtual ~VP8Encoder() {} virtual ~VP8Encoder() {}
}; // end of VP8Encoder class }; // end of VP8Encoder class
class VP8Decoder : public VideoDecoder { class VP8Decoder : public VideoDecoder {
public: public:
static VP8Decoder* Create(); static std::unique_ptr<VP8Decoder> Create();
virtual ~VP8Decoder() {} virtual ~VP8Decoder() {}
}; // end of VP8Decoder class }; // end of VP8Decoder class

View file

@ -241,12 +241,12 @@ class TestVp8Simulcast : public ::testing::Test {
} }
protected: protected:
virtual VP8Encoder* CreateEncoder() = 0; virtual std::unique_ptr<VP8Encoder> CreateEncoder() = 0;
virtual VP8Decoder* CreateDecoder() = 0; virtual std::unique_ptr<VP8Decoder> CreateDecoder() = 0;
void SetUp() override { void SetUp() override {
encoder_.reset(CreateEncoder()); encoder_ = CreateEncoder();
decoder_.reset(CreateDecoder()); decoder_ = CreateDecoder();
SetUpCodec(kDefaultTemporalLayerProfile); SetUpCodec(kDefaultTemporalLayerProfile);
} }

View file

@ -15,8 +15,12 @@ namespace testing {
class TestVp8Impl : public TestVp8Simulcast { class TestVp8Impl : public TestVp8Simulcast {
protected: protected:
VP8Encoder* CreateEncoder() override { return VP8Encoder::Create(); } std::unique_ptr<VP8Encoder> CreateEncoder() override {
VP8Decoder* CreateDecoder() override { return VP8Decoder::Create(); } return VP8Encoder::Create();
}
std::unique_ptr<VP8Decoder> CreateDecoder() override {
return VP8Decoder::Create();
}
}; };
TEST_F(TestVp8Impl, TestKeyFrameRequestsOnAllStreams) { TEST_F(TestVp8Impl, TestKeyFrameRequestsOnAllStreams) {

View file

@ -30,6 +30,7 @@
#include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/include/video_codec_interface.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/numerics/exp_filter.h" #include "rtc_base/numerics/exp_filter.h"
#include "rtc_base/ptr_util.h"
#include "rtc_base/random.h" #include "rtc_base/random.h"
#include "rtc_base/timeutils.h" #include "rtc_base/timeutils.h"
#include "rtc_base/trace_event.h" #include "rtc_base/trace_event.h"
@ -162,12 +163,12 @@ void GetPostProcParamsFromFieldTrialGroup(
} // namespace } // namespace
VP8Encoder* VP8Encoder::Create() { std::unique_ptr<VP8Encoder> VP8Encoder::Create() {
return new VP8EncoderImpl(); return rtc::MakeUnique<VP8EncoderImpl>();
} }
VP8Decoder* VP8Decoder::Create() { std::unique_ptr<VP8Decoder> VP8Decoder::Create() {
return new VP8DecoderImpl(); return rtc::MakeUnique<VP8DecoderImpl>();
} }
vpx_enc_frame_flags_t VP8EncoderImpl::EncodeFlags( vpx_enc_frame_flags_t VP8EncoderImpl::EncodeFlags(

View file

@ -12,6 +12,8 @@
#ifndef MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_ #ifndef MODULES_VIDEO_CODING_CODECS_VP9_INCLUDE_VP9_H_
#define 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" #include "modules/video_coding/include/video_codec_interface.h"
namespace webrtc { namespace webrtc {
@ -19,7 +21,7 @@ namespace webrtc {
class VP9Encoder : public VideoEncoder { class VP9Encoder : public VideoEncoder {
public: public:
static bool IsSupported(); static bool IsSupported();
static VP9Encoder* Create(); static std::unique_ptr<VP9Encoder> Create();
virtual ~VP9Encoder() {} virtual ~VP9Encoder() {}
}; };
@ -27,7 +29,7 @@ class VP9Encoder : public VideoEncoder {
class VP9Decoder : public VideoDecoder { class VP9Decoder : public VideoDecoder {
public: public:
static bool IsSupported(); static bool IsSupported();
static VP9Decoder* Create(); static std::unique_ptr<VP9Decoder> Create();
virtual ~VP9Decoder() {} virtual ~VP9Decoder() {}
}; };

View file

@ -20,9 +20,13 @@ constexpr uint32_t kTimestampIncrementPerFrame = 3000;
class TestVp9Impl : public VideoCodecTest { class TestVp9Impl : public VideoCodecTest {
protected: 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() override {
VideoCodec codec_settings; VideoCodec codec_settings;

View file

@ -27,6 +27,7 @@
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/keep_ref_until_done.h" #include "rtc_base/keep_ref_until_done.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "rtc_base/ptr_util.h"
#include "rtc_base/random.h" #include "rtc_base/random.h"
#include "rtc_base/timeutils.h" #include "rtc_base/timeutils.h"
#include "rtc_base/trace_event.h" #include "rtc_base/trace_event.h"
@ -52,8 +53,8 @@ bool VP9Encoder::IsSupported() {
return true; return true;
} }
VP9Encoder* VP9Encoder::Create() { std::unique_ptr<VP9Encoder> VP9Encoder::Create() {
return new VP9EncoderImpl(); return rtc::MakeUnique<VP9EncoderImpl>();
} }
void VP9EncoderImpl::EncoderOutputCodedPacketCallback(vpx_codec_cx_pkt* pkt, void VP9EncoderImpl::EncoderOutputCodedPacketCallback(vpx_codec_cx_pkt* pkt,
@ -841,8 +842,8 @@ bool VP9Decoder::IsSupported() {
return true; return true;
} }
VP9Decoder* VP9Decoder::Create() { std::unique_ptr<VP9Decoder> VP9Decoder::Create() {
return new VP9DecoderImpl(); return rtc::MakeUnique<VP9DecoderImpl>();
} }
VP9DecoderImpl::VP9DecoderImpl() VP9DecoderImpl::VP9DecoderImpl()

View file

@ -22,7 +22,7 @@ bool VP9Encoder::IsSupported() {
return false; return false;
} }
VP9Encoder* VP9Encoder::Create() { std::unique_ptr<VP9Encoder> VP9Encoder::Create() {
RTC_NOTREACHED(); RTC_NOTREACHED();
return nullptr; return nullptr;
} }
@ -31,7 +31,7 @@ bool VP9Decoder::IsSupported() {
return false; return false;
} }
VP9Decoder* VP9Decoder::Create() { std::unique_ptr<VP9Decoder> VP9Decoder::Create() {
RTC_NOTREACHED(); RTC_NOTREACHED();
return nullptr; return nullptr;
} }

View file

@ -182,6 +182,9 @@ int32_t VCMDecodedFrameCallback::Pop(uint32_t timestamp) {
return VCM_OK; return VCM_OK;
} }
VCMGenericDecoder::VCMGenericDecoder(std::unique_ptr<VideoDecoder> decoder)
: VCMGenericDecoder(decoder.release(), false /* isExternal */) {}
VCMGenericDecoder::VCMGenericDecoder(VideoDecoder* decoder, bool isExternal) VCMGenericDecoder::VCMGenericDecoder(VideoDecoder* decoder, bool isExternal)
: _callback(NULL), : _callback(NULL),
_frameInfos(), _frameInfos(),

View file

@ -76,6 +76,7 @@ class VCMDecodedFrameCallback : public DecodedImageCallback {
class VCMGenericDecoder { class VCMGenericDecoder {
public: public:
explicit VCMGenericDecoder(std::unique_ptr<VideoDecoder> decoder);
explicit VCMGenericDecoder(VideoDecoder* decoder, bool isExternal = false); explicit VCMGenericDecoder(VideoDecoder* decoder, bool isExternal = false);
~VCMGenericDecoder(); ~VCMGenericDecoder();

View file

@ -418,7 +418,7 @@ class TestVideoSenderWithVp8 : public TestVideoSender {
codec_, std::unique_ptr<TemporalLayersFactory>(tl_factory))); codec_, std::unique_ptr<TemporalLayersFactory>(tl_factory)));
codec_.VP8()->tl_factory = tl_factory; codec_.VP8()->tl_factory = tl_factory;
encoder_.reset(VP8Encoder::Create()); encoder_ = VP8Encoder::Create();
sender_->RegisterExternalEncoder(encoder_.get(), codec_.plType, false); sender_->RegisterExternalEncoder(encoder_.get(), codec_.plType, false);
EXPECT_EQ(0, sender_->RegisterSendCodec(&codec_, 1, 1200)); EXPECT_EQ(0, sender_->RegisterSendCodec(&codec_, 1, 1200));
} }

View file

@ -88,11 +88,11 @@ VideoReceiveStream::Decoder CreateMatchingDecoder(
decoder.payload_type = encoder_settings.payload_type; decoder.payload_type = encoder_settings.payload_type;
decoder.payload_name = encoder_settings.payload_name; decoder.payload_name = encoder_settings.payload_name;
if (encoder_settings.payload_name == "H264") { if (encoder_settings.payload_name == "H264") {
decoder.decoder = H264Decoder::Create(); decoder.decoder = H264Decoder::Create().release();
} else if (encoder_settings.payload_name == "VP8") { } else if (encoder_settings.payload_name == "VP8") {
decoder.decoder = VP8Decoder::Create(); decoder.decoder = VP8Decoder::Create().release();
} else if (encoder_settings.payload_name == "VP9") { } else if (encoder_settings.payload_name == "VP9") {
decoder.decoder = VP9Decoder::Create(); decoder.decoder = VP9Decoder::Create().release();
} else { } else {
decoder.decoder = new FakeDecoder(); decoder.decoder = new FakeDecoder();
} }

View file

@ -329,16 +329,16 @@ class CodecObserver : public test::EndToEndTest,
CodecObserver(int no_frames_to_wait_for, CodecObserver(int no_frames_to_wait_for,
VideoRotation rotation_to_test, VideoRotation rotation_to_test,
const std::string& payload_name, const std::string& payload_name,
webrtc::VideoEncoder* encoder, std::unique_ptr<webrtc::VideoEncoder> encoder,
webrtc::VideoDecoder* decoder) std::unique_ptr<webrtc::VideoDecoder> decoder)
: EndToEndTest(4 * webrtc::EndToEndTest::kDefaultTimeoutMs), : EndToEndTest(4 * webrtc::EndToEndTest::kDefaultTimeoutMs),
// TODO(hta): This timeout (120 seconds) is excessive. // TODO(hta): This timeout (120 seconds) is excessive.
// https://bugs.webrtc.org/6830 // https://bugs.webrtc.org/6830
no_frames_to_wait_for_(no_frames_to_wait_for), no_frames_to_wait_for_(no_frames_to_wait_for),
expected_rotation_(rotation_to_test), expected_rotation_(rotation_to_test),
payload_name_(payload_name), payload_name_(payload_name),
encoder_(encoder), encoder_(std::move(encoder)),
decoder_(decoder), decoder_(std::move(decoder)),
frame_counter_(0) {} frame_counter_(0) {}
void PerformTest() override { void PerformTest() override {
@ -1553,7 +1553,7 @@ class MultiStreamTest {
receiver_transport->SetReceiver(sender_call->Receiver()); receiver_transport->SetReceiver(sender_call->Receiver());
for (size_t i = 0; i < kNumStreams; ++i) for (size_t i = 0; i < kNumStreams; ++i)
encoders[i].reset(VP8Encoder::Create()); encoders[i] = VP8Encoder::Create();
for (size_t i = 0; i < kNumStreams; ++i) { for (size_t i = 0; i < kNumStreams; ++i) {
uint32_t ssrc = codec_settings[i].ssrc; uint32_t ssrc = codec_settings[i].ssrc;
@ -4327,7 +4327,7 @@ TEST_P(EndToEndTest, TestFlexfecRtpStatePreservation) {
const int kNumFlexfecStreams = 1; const int kNumFlexfecStreams = 1;
CreateSendConfig(kNumVideoStreams, 0, kNumFlexfecStreams, CreateSendConfig(kNumVideoStreams, 0, kNumFlexfecStreams,
send_transport.get()); send_transport.get());
encoder = rtc::WrapUnique(VP8Encoder::Create()); encoder = VP8Encoder::Create();
video_send_config_.encoder_settings.encoder = encoder.get(); video_send_config_.encoder_settings.encoder = encoder.get();
video_send_config_.encoder_settings.payload_name = "VP8"; video_send_config_.encoder_settings.payload_name = "VP8";
video_send_config_.encoder_settings.payload_type = kVideoSendPayloadType; video_send_config_.encoder_settings.payload_type = kVideoSendPayloadType;
@ -4994,8 +4994,8 @@ TEST_P(EndToEndLogTest, LogsEncodedFramesWhenRequested) {
VideoSendStream::Config* send_config, VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs, std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override { VideoEncoderConfig* encoder_config) override {
encoder_.reset(VP8Encoder::Create()); encoder_ = VP8Encoder::Create();
decoder_.reset(VP8Decoder::Create()); decoder_ = VP8Decoder::Create();
send_config->post_encode_callback = this; send_config->post_encode_callback = this;
send_config->encoder_settings.payload_name = "VP8"; send_config->encoder_settings.payload_name = "VP8";

View file

@ -23,6 +23,7 @@
#include "common_video/libyuv/include/webrtc_libyuv.h" #include "common_video/libyuv/include/webrtc_libyuv.h"
#include "logging/rtc_event_log/output/rtc_event_log_output_file.h" #include "logging/rtc_event_log/output/rtc_event_log_output_file.h"
#include "logging/rtc_event_log/rtc_event_log.h" #include "logging/rtc_event_log/rtc_event_log.h"
#include "media/engine/internalencoderfactory.h"
#include "media/engine/webrtcvideoengine.h" #include "media/engine/webrtcvideoengine.h"
#include "modules/audio_mixer/audio_mixer_impl.h" #include "modules/audio_mixer/audio_mixer_impl.h"
#include "modules/rtp_rtcp/include/rtp_header_parser.h" #include "modules/rtp_rtcp/include/rtp_header_parser.h"
@ -1129,35 +1130,6 @@ class VideoAnalyzer : public PacketReceiver,
const int64_t start_ms_; const int64_t start_ms_;
}; };
class Vp8EncoderFactory : public cricket::WebRtcVideoEncoderFactory {
public:
Vp8EncoderFactory() {
supported_codecs_.push_back(cricket::VideoCodec("VP8"));
}
~Vp8EncoderFactory() override { RTC_CHECK(live_encoders_.empty()); }
const std::vector<cricket::VideoCodec>& supported_codecs() const override {
return supported_codecs_;
}
VideoEncoder* CreateVideoEncoder(const cricket::VideoCodec& codec) override {
VideoEncoder* encoder = VP8Encoder::Create();
live_encoders_.insert(encoder);
return encoder;
}
void DestroyVideoEncoder(VideoEncoder* encoder) override {
auto it = live_encoders_.find(encoder);
RTC_CHECK(it != live_encoders_.end());
live_encoders_.erase(it);
delete encoder;
}
private:
std::vector<cricket::VideoCodec> supported_codecs_;
std::set<VideoEncoder*> live_encoders_;
};
VideoQualityTest::VideoQualityTest() VideoQualityTest::VideoQualityTest()
: clock_(Clock::GetRealTimeClock()), receive_logs_(0), send_logs_(0) { : clock_(Clock::GetRealTimeClock()), receive_logs_(0), send_logs_(0) {
payload_type_map_ = test::CallTest::payload_type_map_; payload_type_map_ = test::CallTest::payload_type_map_;
@ -1413,7 +1385,7 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
int payload_type; int payload_type;
if (params_.video.codec == "H264") { if (params_.video.codec == "H264") {
video_encoder_.reset(H264Encoder::Create(cricket::VideoCodec("H264"))); video_encoder_ = H264Encoder::Create(cricket::VideoCodec("H264"));
payload_type = kPayloadTypeH264; payload_type = kPayloadTypeH264;
} else if (params_.video.codec == "VP8") { } else if (params_.video.codec == "VP8") {
if (params_.screenshare.enabled && params_.ss.streams.size() > 1) { if (params_.screenshare.enabled && params_.ss.streams.size() > 1) {
@ -1421,13 +1393,13 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
// encoders usually can't natively do simulcast with different frame rates // encoders usually can't natively do simulcast with different frame rates
// for the different layers. // for the different layers.
video_encoder_.reset( video_encoder_.reset(
new SimulcastEncoderAdapter(new Vp8EncoderFactory())); new SimulcastEncoderAdapter(new cricket::InternalEncoderFactory()));
} else { } else {
video_encoder_.reset(VP8Encoder::Create()); video_encoder_ = VP8Encoder::Create();
} }
payload_type = kPayloadTypeVP8; payload_type = kPayloadTypeVP8;
} else if (params_.video.codec == "VP9") { } else if (params_.video.codec == "VP9") {
video_encoder_.reset(VP9Encoder::Create()); video_encoder_ = VP9Encoder::Create();
payload_type = kPayloadTypeVP9; payload_type = kPayloadTypeVP9;
} else { } else {
RTC_NOTREACHED() << "Codec not supported!"; RTC_NOTREACHED() << "Codec not supported!";