diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-02-01 15:42:22 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-02-01 15:55:43 +0000 |
commit | 98a0061b881063a62c1941ccb67af6660ca89062 (patch) | |
tree | 5e77cc6ad4735e53db0d7a8766ed26ca726f9373 /chromium/third_party/webrtc | |
parent | 6c91641271e536ffaa88a1dff5127e42ee99a91e (diff) | |
download | qtwebengine-chromium-98a0061b881063a62c1941ccb67af6660ca89062.tar.gz |
BASELINE: Update Chromium to 49.0.2623.34
Change-Id: I89af6c0074347d4415cc1ce35a6d54a3760e6ad2
Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'chromium/third_party/webrtc')
5 files changed, 69 insertions, 5 deletions
diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc index 40e438f7e42..3dfcde048b0 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc @@ -137,7 +137,9 @@ class AdapterEncodedImageCallback : public webrtc::EncodedImageCallback { namespace webrtc { SimulcastEncoderAdapter::SimulcastEncoderAdapter(VideoEncoderFactory* factory) - : factory_(factory), encoded_complete_callback_(NULL) { + : factory_(factory), + encoded_complete_callback_(NULL), + implementation_name_("SimulcastEncoderAdapter") { memset(&codec_, 0, sizeof(webrtc::VideoCodec)); } @@ -195,6 +197,7 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst, codec_.extra_options = screensharing_extra_options_.get(); } + std::string implementation_name; // Create |number_of_streams| of encoder instances and init them. for (int i = 0; i < number_of_streams; ++i) { VideoCodec stream_codec; @@ -224,7 +227,12 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst, encoder->RegisterEncodeCompleteCallback(callback); streaminfos_.push_back(StreamInfo(encoder, callback, stream_codec.width, stream_codec.height, send_stream)); + if (i != 0) + implementation_name += ", "; + implementation_name += streaminfos_[i].encoder->ImplementationName(); } + implementation_name_ = + "SimulcastEncoderAdapter (" + implementation_name + ")"; return WEBRTC_VIDEO_CODEC_OK; } @@ -497,10 +505,7 @@ bool SimulcastEncoderAdapter::SupportsNativeHandle() const { } const char* SimulcastEncoderAdapter::ImplementationName() const { - // We should not be calling this method before streaminfos_ are configured. - RTC_DCHECK(!streaminfos_.empty()); - // TODO(pbos): Support multiple implementation names for different encoders. - return streaminfos_[0].encoder->ImplementationName(); + return implementation_name_.c_str(); } } // namespace webrtc diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h index 05a96c7336a..2b8f80a8bc0 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h @@ -12,6 +12,7 @@ #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_ENCODER_ADAPTER_H_ #define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_ENCODER_ADAPTER_H_ +#include <string> #include <vector> #include "webrtc/base/scoped_ptr.h" @@ -114,6 +115,7 @@ class SimulcastEncoderAdapter : public VP8Encoder { VideoCodec codec_; std::vector<StreamInfo> streaminfos_; EncodedImageCallback* encoded_complete_callback_; + std::string implementation_name_; }; } // namespace webrtc diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc index 86b8e0b3450..6f0cd5ba773 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc @@ -152,6 +152,8 @@ class MockVideoEncoder : public VideoEncoder { supports_native_handle_ = enabled; } + MOCK_CONST_METHOD0(ImplementationName, const char*()); + private: bool supports_native_handle_ = false; VideoCodec codec_; @@ -162,6 +164,10 @@ class MockVideoEncoderFactory : public VideoEncoderFactory { public: VideoEncoder* Create() override { MockVideoEncoder* encoder = new MockVideoEncoder(); + 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; } @@ -171,9 +177,13 @@ class MockVideoEncoderFactory : public VideoEncoderFactory { virtual ~MockVideoEncoderFactory() {} const std::vector<MockVideoEncoder*>& encoders() const { return encoders_; } + void SetEncoderNames(const std::vector<const char*>& encoder_names) { + encoder_names_ = encoder_names; + } private: std::vector<MockVideoEncoder*> encoders_; + std::vector<const char*> encoder_names_; }; class TestSimulcastEncoderAdapterFakeHelper { @@ -396,6 +406,20 @@ TEST_F(TestSimulcastEncoderAdapterFake, SupportsNativeHandleForSingleStreams) { EXPECT_FALSE(adapter_->SupportsNativeHandle()); } +TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) { + EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName()); + TestVp8Simulcast::DefaultSettings( + &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); + std::vector<const char*> encoder_names; + encoder_names.push_back("codec1"); + encoder_names.push_back("codec2"); + encoder_names.push_back("codec3"); + helper_->factory()->SetEncoderNames(encoder_names); + EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); + EXPECT_STREQ("SimulcastEncoderAdapter (codec1, codec2, codec3)", + adapter_->ImplementationName()); +} + TEST_F(TestSimulcastEncoderAdapterFake, SupportsNativeHandleDisabledForMultipleStreams) { // TODO(pbos): Implement actual test (verify that it works) when implemented diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc index e5547955197..106d14b986e 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -660,6 +660,12 @@ int VP9EncoderImpl::GetEncodedLayerFrame(const vpx_codec_cx_pkt* pkt) { int part_idx = 0; CodecSpecificInfo codec_specific; + if (pkt->data.frame.sz > encoded_image_._size) { + delete[] encoded_image_._buffer; + encoded_image_._size = pkt->data.frame.sz; + encoded_image_._buffer = new uint8_t[encoded_image_._size]; + } + assert(pkt->kind == VPX_CODEC_CX_FRAME_PKT); memcpy(&encoded_image_._buffer[encoded_image_._length], pkt->data.frame.buf, pkt->data.frame.sz); diff --git a/chromium/third_party/webrtc/video/video_send_stream_tests.cc b/chromium/third_party/webrtc/video/video_send_stream_tests.cc index 4cf92748a8d..f0f1ca4d2c1 100644 --- a/chromium/third_party/webrtc/video/video_send_stream_tests.cc +++ b/chromium/third_party/webrtc/video/video_send_stream_tests.cc @@ -2208,6 +2208,33 @@ void VideoSendStreamTest::TestVp9NonFlexMode(uint8_t num_temporal_layers, RunBaseTest(&test); } +TEST_F(VideoSendStreamTest, Vp9NonFlexModeSmallResolution) { + static const size_t kNumFramesToSend = 50; + static const int kWidth = 4; + static const int kHeight = 4; + class NonFlexibleModeResolution : public Vp9HeaderObserver { + void ModifyVideoConfigsHook( + VideoSendStream::Config* send_config, + std::vector<VideoReceiveStream::Config>* receive_configs, + VideoEncoderConfig* encoder_config) override { + vp9_settings_.flexibleMode = false; + vp9_settings_.numberOfTemporalLayers = 1; + vp9_settings_.numberOfSpatialLayers = 1; + + EXPECT_EQ(1u, encoder_config->streams.size()); + encoder_config->streams[0].width = kWidth; + encoder_config->streams[0].height = kHeight; + } + + void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { + if (frames_sent_ > kNumFramesToSend) + observation_complete_.Set(); + } + } test; + + RunBaseTest(&test); +} + #if !defined(MEMORY_SANITIZER) // Fails under MemorySanitizer: // See https://code.google.com/p/webrtc/issues/detail?id=5402. |